亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cb_generator.pl

?? nios總線與現場總線can的總線橋接口IP程序
?? PL
?? 第 1 頁 / 共 2 頁
字號:
# | file: cb_generator.pl
# |
# | This SOPC Builder Generator program is provided by
# | the Component Builder application. It is copied
# | straight across and is data-driven from its command
# | line arguments and the PTF files referenced.
# |
# | Its purpose is to construct an HDL "wrapper" for
# | a particular instance of a particular SOPC Builder
# | peripheral. This wrapper resolves the instance
# | name and any HDL parameterization.
# |
# +-------------------------------------------



# +-------------------------------------------
# |

use strict;
use format_conversion_utils;
use ptf_parse;
use wiz_utils;
use europa_all;
use run_system_command_utils;

# |
# +-------------------------------------------



# +-------------------------------------------
# |
# | first pass: include all of generator_libarary.pm RIGHT HERE.
# | dvb04.08.02
# | then prune down to actual functionality.
# |
# | TODO: Rewrite this whole file into something readable
# | this is much more confusing than I'm comfortable with. dvb04.
# | (though it does seem to work.)
# |



my $DEBUG_DEFAULT_GEN = 1;

#This is the global hash of arguments passed in by the generator program

my $generator_hr = {
		     wrapper_args => {
				      make_wrapper => 0,
				      top_module_name => "",
				      simulate_hdl => 1,
				      ports => "",
				     },
		     class_ptf_hr => "",
		     module_ptf_hr => "",
		     system_ptf_hr => "",
		     language => "",
		     external_args => "",
		     external_args_hr => "",
		     project_path_widget => "__PROJECT_DIRECTORY__",
		     generator_mode => "silent",
		    };


sub generator_print_verbose
{
  my ($info) = (@_);

  if($generator_hr->{generator_mode} eq "verbose"){
    print("cb_generator.pl: ".$info);
  }
}

sub generator_enable_mode
{
  my ($mode) = (@_);
  $generator_hr->{generator_mode} = $mode;
}

sub generator_get_system_ptf_handle
{ 
  return $generator_hr->{system_ptf_hr};
}

sub generator_get_language
{
  return $generator_hr->{language};
}

sub generator_get_class_ptf_handle
{
  return $generator_hr->{class_ptf_hr};
}

sub default_ribbit
{
  my ($arg) = (@_);
  &ribbit("\n\n--Error: default_gen_lib: $arg\n");  
}


sub _copy_files
{
  my ($dest_dir, $source_dir, @files) = (@_);
  my $function_name;
  
  #validate args
  &default_ribbit("No target dir for function copy_files!")
  unless ($dest_dir ne "");
  
  &default_ribbit("No source dir for function copy_files!")
  unless ($source_dir ne "");

  &default_ribbit("No files for function copy_files!")
  unless (@files != 0);

  
  #check for valid directories
  opendir (SDIR, $source_dir) or 
    &default_ribbit("can't open $source_dir !");
  
  opendir (DDIR, $dest_dir) or
    &default_ribbit("can't open $dest_dir !");
  
  
  foreach my $source_file(@files){
    # |
    # | Separate out the source subdir and the source filename
    # |
    my $source_subdir = "";
    my $source_filename = $source_file;

    if($source_filename =~ /^(.*)\/(.*)$/)  # break on last slash
    {
      $source_subdir = "/$1"; # embed its leading slash, for concatty
      $source_filename = $2;
    }

    my $source_fullpath = "$source_dir$source_subdir/$source_filename";
    my $dest_fullpath = "$dest_dir/$source_filename";

    &Perlcopy($source_fullpath, $dest_fullpath);
    &generator_print_verbose("Copying file: \"$source_fullpath\""
            . " to \"$dest_fullpath\".\n");
  }

  closedir (SDIR);
  closedir (DDIR);
}


sub get_module_wrapper_arg_hash_from_system_ptf_file
{
  my $module_ptf_hr = $generator_hr->{module_ptf_hr};
  
  my @list_of_sections = ("MASTER","SLAVE","PORT_WIRING");
  my @port_list;
  foreach my $section(@list_of_sections){
    my $number = get_child_count($module_ptf_hr, $section);

    for(my $initial=0; $initial < $number; $initial++){
      
      my $interface_section = get_child($module_ptf_hr, $initial, $section);	
      my $interface_section_name = get_data($interface_section);

      my $port_wiring_section;
      if($section ne "PORT_WIRING"){
	$port_wiring_section = 
	  get_child_by_path($module_ptf_hr, $section." ".$interface_section_name."/PORT_WIRING");	
      }else{
	$port_wiring_section =
	  get_child_by_path($module_ptf_hr, $section);
      }
      my $num_ports = get_child_count($port_wiring_section, "PORT");
      foreach(my $port_count = 0; $port_count < $num_ports; $port_count++){
	my $port = get_child($port_wiring_section, $port_count, "PORT");
	
	my %port_info_struct;
	$port_info_struct{name} = get_data($port);
	$port_info_struct{direction} = get_data_by_path($port, "direction");
	$port_info_struct{width} = get_data_by_path($port, "width");
	
	push(@port_list, \%port_info_struct);
	
      }
    }	
  }
  $generator_hr->{wrapper_args}{ports} = \@port_list;
}


sub generator_make_module_wrapper
{
  my ($simulate_hdl, $top_module_name) = (@_);

  &default_ribbit("generator_make_module_wrapper: no arg0 passed in for simulate_hdl\n")
    if($simulate_hdl eq '');

  &default_ribbit("generator_make_module_wrapper: no arg1 passed in for top_module_name\n")
    unless($top_module_name);

  $generator_hr->{wrapper_args}{simulate_hdl} = $simulate_hdl;
  $generator_hr->{wrapper_args}{top_module_name} = $top_module_name;
  $generator_hr->{wrapper_args}{make_wrapper} = 1;

}




# |
# | recognize varous number forms,
# | return 'h0123abcd-ish.
# |
sub turn_anything_into_appropriate_string($$$)
	{
	my ($value,$type,$editable) = (@_);

    return $value if($value =~ /^\"/);   # quoted string: unscathed
    return $value if($type eq "string"); # string: anything is ok
    
    return $value if(!$editable);        # and you know, if you can't change it, keep it!
    
    
	# |
	# | first, convert to a number
	# |
	my $base = 10;
	my $n = $value;
	my $width = 32;
	my $number = 0;
	
	$value = lc($value); # lower case
	
	if($value =~ /^([0-9]*)\'([hbo])(.*)$/)
		{
		# | tick notation
		$width = $1;
		my $baseletter = $2;
		my $digits = $3;
		
		if($baseletter eq "h")
			{
			$base = 16;
			}
		elsif($baseletter eq "b")
			{
			$base = 2;
			}
		elsif($baseletter eq "o") # must be
			{
			$base = 8;
			}
		
		$digits =~ s/[ _-]//g; # crush out dividing value
		
		while(length($digits) > 0)
			{
			my $digit = substr($digits,0,1);
			$digits = substr($digits,1);
			my $digitvalue = hex($digit); # how handy
			$number = $number * $base + $digitvalue;
			}
		}
	elsif($value =~ /^0x(.*)$/)
		{
		$number = hex($1);
		}
	else  # try for decimal
		{
		$number = int(1 * $value);
		}
	
	# |
	# | ok, we have a number. If our target type
	# | is "std_logic_vector(this downto that)"
	# | for tricky VHDL, we
	# | must quote a binary string out of it.
	# |
	
	if($type =~ /^.*\((\d+) downto (\d+)\).*$/)
		{
		my ($high_bit,$low_bit) = ($1,$2);
		my $binary = "";
		for(my $bit = $low_bit; $bit <= $high_bit; $bit++)
			{
			$binary = ($number % 2) . $binary;
			$number = int($number >> 1);
			}
		
		$number = '"' . $binary . '"';
		}
	
	return $number;
	}





sub _generator_make_module_wrapper	
{
  
  my $wrapper_args = $generator_hr->{wrapper_args};
  my $no_black_box = $wrapper_args->{simulate_hdl};
  my $top_module_name = $wrapper_args->{top_module_name};
  my $language = $generator_hr->{language};
  my @external_args = @{$generator_hr->{external_args}};
  my $module_ptf_hr = $generator_hr->{module_ptf_hr};

  ### Build Module
  my $project = e_project->new(@external_args);
  my $top = $project->top();
  
  # add the ports to the system module
  my @ports;
  
  foreach my $port_hash(@{$wrapper_args->{ports}}){
    my $porto = e_port->new({
			     name => $port_hash->{name},
			     width => $port_hash->{width},
			     direction => $port_hash->{direction},
			    });
    push(@ports, $porto);
  }
  $top->add_contents(@ports);
  




    # +----------------------------------------
    # | Get parameters from class.ptf
    # | create @array of parameters, eacho
    # | one like name=>, default=>, type=>,
    # |  
    # | These are the definitions of parameters for
    # | ANY instance of this module; we need to 
    # | have them in the "wrapee" module so that
    # | when the system bus is knitted together
    # | the parameter types can be properly used.
    # |
    # | (as it turns out, verilog doesnt need
    # | them, but vhld does)
    # |
    # | dvb2004


    my @e_hdl_parameters; # list of e_parameters

    my $class_ptf = generator_get_class_ptf_handle();
    my $hdl_parameter_definitions_ptf = get_child_by_path($class_ptf,"CLASS/COMPONENT_BUILDER/HDL_PARAMETERS");

    my $hdl_parameter_count = get_child_count($hdl_parameter_definitions_ptf,"HDL_PARAMETER");


    for(my $i = 0; $i < $hdl_parameter_count; $i++)
        {
        my $a_parameter = get_child($hdl_parameter_definitions_ptf,$i,"HDL_PARAMETER");

        my $boring_name = get_data($a_parameter); # legal guinevere-ized
        my $name = get_data_by_path($a_parameter,"parameter_name"); # original HDL name
        my $default = get_data_by_path($a_parameter,"default_value");
        my $type = get_data_by_path($a_parameter,"type");


        $type = "integer"; # !!!!!
        if($default =~ /^\"(.*)\"$/)
            {
            my $slv_width = length($1);
            my $slv_top = $slv_width - 1;
            my $slv_bottom = 0;
            $type = "std_logic_vector($slv_top downto $slv_bottom)";
            } # !!!!!

        my $a_parameter = e_parameter->new
            ({
            name => $name,
            default => $default,
            type => $type
            });

        push (@e_hdl_parameters,$a_parameter);
        }


    # | and @e_hdl_parameters is used below in the wrappee module
    # +--------------------------------------------

    # +--------------------------------------------
    # | Now, we build a "hdl_parameter_map", which is just
    # | your basic hash table with keys (parameters)
    # | and values (parameter values).
    # |
    # | these are the particular values for this instance.
    # |

    my %hdl_parameter_map;
    my $module_ptf = $generator_hr->{module_ptf_hr};
    my $hdl_parameters_ptf =
            get_child_by_path($module_ptf,"WIZARD_SCRIPT_ARGUMENTS/hdl_parameters");

    my $child_count = get_child_count($hdl_parameters_ptf);

    for(my $i = 0; $i < $child_count; $i++)
        {
        my $a_parameter = get_child($hdl_parameters_ptf,$i);

        my $boring_name = get_name($a_parameter);
        my $value = get_data($a_parameter);

		# refer back to the original HDL name...
        my $parameter_definition_ptf = get_child_by_path($hdl_parameter_definitions_ptf,"HDL_PARAMETER $boring_name");
        my $parameter_name = get_data_by_path($parameter_definition_ptf,"parameter_name");
        my $parameter_type = get_data_by_path($parameter_definition_ptf,"type");
        my $parameter_editable = get_data_by_path($parameter_definition_ptf,"editable");
        
        $value = turn_anything_into_appropriate_string($value,$parameter_type,$parameter_editable);

        $hdl_parameter_map{$parameter_name} = $value;
        }

  my $wrapee_module;
  $wrapee_module = e_module->new({
				 name => $top_module_name,
				 contents =>  [@ports,@e_hdl_parameters],
				 do_black_box => 0,
				 do_ptf => 0,
				 _hdl_generated => 1,
				 _explicitly_empty_module => 1,
				});

  $top->add_contents (
		      e_instance->new({
				       module => $wrapee_module,
                       parameter_map => \%hdl_parameter_map
				      }),
		     );
  
  $project->top()->do_ptf(0);
  $project->do_write_ptf(0);
  
  
  my $module_file = $project->_target_module_name().".v";
  $module_file = $project->_target_module_name().".vhd"
    if($language eq "vhdl");

  $module_file = $generator_hr->{project_path_widget}."/".$module_file;
  &generator_set_files_in_system_ptf("Synthesis_HDL_Files", ($module_file));
  $project->output();


  # if you don't want a simulation model, you don't get a simulation model
  if($no_black_box eq "0")
  {
    my $black_project = e_project->new(@external_args);
    $black_project->_target_module_name($top_module_name);
    my $black_top = $black_project->top();



    $black_top->add_contents(@ports);
    my $black_top_instance;
    $black_top_instance = e_module->new({
				   name => $wrapper_args->{top_module_name}."_bb",
				   contents =>  [@ports],
				   do_black_box => 1,
				   do_ptf => 0,
				   _hdl_generated => 0,
				   _explicitly_empty_module => 1,
				  });
    
    $black_top->add_contents (
			e_instance->new({
					 module => $black_top_instance,
					}),
		       );




    $black_project->top()->do_ptf(0);
    $black_project->do_write_ptf(0);

    my $black_module_file = $black_project->_target_module_name().".v";
    $black_module_file = $black_project->_target_module_name().".vhd"
      if($language eq "vhdl");


    $black_module_file = $generator_hr->{project_path_widget}."/".$black_module_file;
    &generator_set_files_in_system_ptf("Simulation_HDL_Files", ($black_module_file));

#    &set_data_by_path($module_ptf_hr, "HDL_INFO/Simulation_HDL_Files", $black_module_file);


    $black_project->output();
  }

}

####
# Args: $file_type : "synthesis", "synthesis_only", "simulation"
#       @file_list   :  an array of files.  This list of files is assumed to be relative to the
#                       component's directory


my $decoder_ring_hr = {
			quartus_only => {
					 copy => 1,
					 copy_to => "project",
					 ptf_set => 0,
					},
			simulation_only => {
					    copy => 1,
					    copy_to => "simulation",
					    ptf_set => 1,
					    ptf_section => "Simulation_HDL_Files",
					   },
			simulation_and_quartus => {
						   copy => 1,
						   copy_to => "project",
						   ptf_set => 1,
						   ptf_section => "Synthesis_HDL_Files",
						  }, 
		       precompiled_simulation_files => {
							copy => 0,
							ptf_set => 1,
							ptf_section => "Precompiled_Simulation_Library_Files",
						       },
		      };




sub generator_copy_files_and_set_system_ptf
{
  my ($hdl_section, @file_list) = (@_);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91影视在线播放| 亚洲乱码国产乱码精品精的特点| 91久久精品日日躁夜夜躁欧美| 国产精品亚洲一区二区三区在线 | 亚洲已满18点击进入久久| 国产精品美女久久久久久| 久久久精品国产免费观看同学| 日韩三级伦理片妻子的秘密按摩| 欧美一区二区三区四区在线观看| 欧美一区二区三区不卡| 91精品婷婷国产综合久久性色 | 18成人在线观看| 中文字幕制服丝袜一区二区三区| 中文字幕中文字幕一区二区| 亚洲欧美在线aaa| 亚洲精品水蜜桃| 亚洲成人动漫一区| 蜜臀91精品一区二区三区| 日欧美一区二区| 另类小说欧美激情| 国产精品91一区二区| 99精品欧美一区二区三区综合在线| 91色porny| 欧美日韩亚洲另类| 日韩精品一区二区三区在线 | 亚洲va韩国va欧美va精品| 免费在线成人网| 国产精品系列在线播放| 成人aaaa免费全部观看| 欧美色区777第一页| 4hu四虎永久在线影院成人| 精品国偷自产国产一区| 久久久影院官网| 亚洲欧美激情一区二区| 日韩精品一级中文字幕精品视频免费观看 | 欧美日韩在线播放| 欧美一级理论片| 国产欧美日韩亚州综合| 亚洲精品乱码久久久久久久久| 亚洲1区2区3区4区| 国产成人自拍网| 91丨九色丨尤物| 制服.丝袜.亚洲.另类.中文| 久久精品日韩一区二区三区| 亚洲精品欧美在线| 国产综合一区二区| 91久久精品一区二区二区| 精品国产乱码久久| 亚洲欧美电影一区二区| 麻豆精品视频在线观看免费| 成人午夜短视频| 欧美日韩精品专区| 欧美激情一区二区三区蜜桃视频| 亚洲电影一级黄| 国产a久久麻豆| 欧美精品高清视频| 国产精品初高中害羞小美女文 | 欧美性生活一区| 久久久美女毛片 | 一本大道综合伊人精品热热| 精品久久久久久综合日本欧美| 亚洲少妇30p| 国产在线乱码一区二区三区| 欧美色老头old∨ideo| 国产精品污www在线观看| 日韩电影在线观看电影| 一本久久综合亚洲鲁鲁五月天| 精品欧美乱码久久久久久| 亚洲伊人色欲综合网| 国产精品一二三区在线| 欧美一区二区三区免费观看视频| 最新欧美精品一区二区三区| 国产麻豆91精品| 日韩一区二区三区在线观看| 亚洲精品国产视频| 东方aⅴ免费观看久久av| 欧美一区二区视频网站| 艳妇臀荡乳欲伦亚洲一区| 成人自拍视频在线| 久久美女艺术照精彩视频福利播放| 视频在线观看91| 色婷婷一区二区| 中文字幕欧美一| 高清视频一区二区| 久久久久一区二区三区四区| 免费观看在线综合| 91精品国产91综合久久蜜臀| 一区二区不卡在线播放 | 日韩一区二区高清| 性做久久久久久免费观看欧美| 成人国产精品免费| 国产拍欧美日韩视频二区| 韩国女主播成人在线| 欧美一区二区精品久久911| 肉肉av福利一精品导航| 欧美猛男gaygay网站| 亚洲一区二区三区四区在线 | 欧美精品一区二区三区久久久| 日本欧美韩国一区三区| 欧美精品免费视频| 午夜亚洲福利老司机| 欧美主播一区二区三区| 亚洲色图欧洲色图婷婷| 91在线无精精品入口| 亚洲人吸女人奶水| 色哟哟国产精品| 亚洲一区二三区| 欧美日韩一区二区在线视频| 亚洲成a人片综合在线| 欧美日韩国产系列| 日韩电影一区二区三区| 日韩一区二区麻豆国产| 国内精品视频666| 2欧美一区二区三区在线观看视频| 国产精品一品视频| 国产视频一区在线观看| 高清在线成人网| 亚洲欧美激情插| 欧美日韩dvd在线观看| 美女视频网站黄色亚洲| 久久综合色综合88| 风间由美一区二区三区在线观看| 国产精品麻豆一区二区| 一本色道亚洲精品aⅴ| 午夜国产精品一区| 精品成a人在线观看| 高潮精品一区videoshd| 亚洲男人的天堂av| 欧美人xxxx| 激情综合五月婷婷| 国产精品毛片大码女人| 欧美日韩在线三级| 国产一区二区三区观看| 综合色中文字幕| 欧美久久久久中文字幕| 国模套图日韩精品一区二区| 亚洲欧美偷拍三级| 日韩一区二区三| 成人精品高清在线| 天天综合天天做天天综合| 精品福利一二区| 91亚洲国产成人精品一区二区三| 亚洲一二三区不卡| 久久九九99视频| 91成人在线精品| 精品一区二区三区在线观看| 中文字幕一区日韩精品欧美| 欧美顶级少妇做爰| 成人网男人的天堂| 三级在线观看一区二区| 国产女主播一区| 欧美日韩久久一区二区| 国产一区二区伦理| 一区二区在线观看av| 2023国产精品| 在线精品视频小说1| 国产精品1区2区| 亚洲成人动漫在线免费观看| 欧美激情中文字幕| 91精品在线一区二区| k8久久久一区二区三区| 免费人成在线不卡| 亚洲综合偷拍欧美一区色| 久久久久88色偷偷免费| 欧美日本国产视频| 成人avav影音| 激情五月激情综合网| 亚洲高清三级视频| 国产精品美女久久福利网站| 日韩欧美国产wwwww| 91久久精品一区二区三| 懂色av一区二区在线播放| 麻豆中文一区二区| 亚洲综合色成人| 中文字幕国产一区二区| 日韩女优av电影| 欧美亚洲精品一区| 99精品视频在线观看免费| 国产在线一区观看| 久久电影国产免费久久电影| 午夜精品福利一区二区蜜股av| 1024国产精品| 国产精品久久久久久亚洲伦| 久久久久久综合| 日韩视频在线你懂得| 欧美日韩一二区| 色噜噜狠狠一区二区三区果冻| 丰满岳乱妇一区二区三区| 国产在线播放一区三区四| 日韩电影在线观看网站| 午夜精品一区二区三区免费视频 | 亚洲综合成人在线视频| 自拍偷拍亚洲欧美日韩| 欧美激情一区在线| 久久久综合视频| 久久综合一区二区| 久久久综合视频| 久久久综合精品| 国产午夜亚洲精品羞羞网站| 久久综合九色综合久久久精品综合|