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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cb_generator.pl

?? 嵌入式系統(tǒng)實(shí)驗(yàn)教程(一)中對(duì)應(yīng)的實(shí)驗(yàn)內(nèi)容
?? PL
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
# | 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, $module_language) = (@_);

  &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;
  $generator_hr->{wrapper_args}{module_language} = $module_language;

}




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

    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: AOK for verilog
		if($module_language eq "verilog")
			{
			$number = $value;
			}
		# |
		# | note: at this point, we could notice if the
		# | result should be vhdl binary, and convert
		# | to that, avoiding the precision-losing
		# | integer intermediary
		# |
		# | (alternatively, we could use a binary string
		# | always as the intermediate form, rather than
		# | a precision-losing int.)
		# |
		else
			{
			$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(($module_language eq "vhdl") and ($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");

    my $module_language = $generator_hr->{wrapper_args}{module_language};


    for(my $i = 0; $i < $hdl_parameter_count; $i++)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品乱码免费| 欧美另类一区二区三区| 极品尤物av久久免费看| 亚洲国产日韩一区二区| 亚洲一区二区三区在线播放| **网站欧美大片在线观看| 久久久久久久久久电影| 2021中文字幕一区亚洲| 久久综合色天天久久综合图片| 欧美一区二区三区色| 欧美日韩一区二区三区视频| 欧美四级电影网| 欧美三级日韩三级| 欧美日韩国产三级| 91精品国产色综合久久不卡电影 | 91国内精品野花午夜精品| 99re8在线精品视频免费播放| 国内一区二区视频| 久久超碰97中文字幕| 精品一区二区三区在线播放| 国产成人精品网址| 色悠悠久久综合| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩一区国产| 精品国产一区二区在线观看| 亚洲国产高清不卡| 亚洲美女淫视频| 奇米精品一区二区三区在线观看一| 日韩不卡一二三区| 韩国精品久久久| 91在线看国产| 91精品国产入口| 日韩美女天天操| 亚洲国产精品精华液ab| 亚洲综合在线第一页| 久久精品国产99国产精品| 国产精品一区二区91| 91亚洲永久精品| 欧美精品一二三四| 国产精品不卡在线观看| 午夜成人免费电影| 懂色av一区二区三区免费观看 | 天堂一区二区在线| 精品影院一区二区久久久| 成人黄色片在线观看| 91在线精品秘密一区二区| 91同城在线观看| 97久久人人超碰| 在线成人小视频| 久久夜色精品一区| 国产精品色眯眯| 亚洲激情六月丁香| 一区二区三区在线观看网站| 在线视频亚洲一区| 日韩欧美中文字幕一区| 久久久蜜桃精品| 久久久久国产一区二区三区四区| 中文字幕免费观看一区| 1000部国产精品成人观看| 性做久久久久久| 国产精品一区二区无线| 国产美女视频一区| 91成人免费电影| www国产成人| 亚洲精品国产高清久久伦理二区| 丝袜诱惑亚洲看片| 美女网站色91| 99久久99久久综合| 欧美一区二区三区系列电影| 国产午夜精品福利| 丝袜美腿成人在线| 国产成人精品一区二| 欧美天堂一区二区三区| 久久综合久久99| 一区二区激情小说| 国产露脸91国语对白| www.欧美色图| 精品盗摄一区二区三区| 亚洲综合无码一区二区| 一本到不卡精品视频在线观看| 日韩一区二区高清| 亚洲午夜免费电影| 欧美日韩免费在线视频| 国产精品麻豆一区二区| 免费不卡在线视频| 国产美女视频91| 在线观看不卡一区| 国产精品久久久久婷婷二区次| 懂色av中文一区二区三区| 亚洲国产成人在线| 韩国v欧美v亚洲v日本v| 欧美视频在线播放| 日本最新不卡在线| 久久精品国产秦先生| 不卡的av电影在线观看| 久久这里只精品最新地址| 日韩一区有码在线| 成人国产电影网| 久久男人中文字幕资源站| 蜜桃久久久久久| 8x8x8国产精品| 夜夜爽夜夜爽精品视频| 视频一区二区不卡| 色狠狠av一区二区三区| 国产精品福利电影一区二区三区四区| 久99久精品视频免费观看| 欧美日韩五月天| 亚洲美女少妇撒尿| 亚洲自拍偷拍网站| 丁香天五香天堂综合| 国产日韩欧美麻豆| 国产精品亚洲一区二区三区在线 | 国产午夜亚洲精品不卡| 成人欧美一区二区三区小说 | 国产欧美视频一区二区| 国产中文字幕精品| 日韩美一区二区三区| 天堂av在线一区| 日韩一区二区免费在线电影 | 色婷婷久久一区二区三区麻豆| 亚洲欧洲精品一区二区三区不卡| 在线免费观看视频一区| 亚洲国产乱码最新视频| 欧美日韩国产一级片| 麻豆国产欧美日韩综合精品二区| 欧美视频在线一区| 亚洲成av人片一区二区三区| 欧美日韩一本到| 中文字幕欧美日本乱码一线二线| 成人深夜视频在线观看| 最好看的中文字幕久久| 一区二区日韩av| 91国产免费看| 日韩不卡一区二区三区| 久久精品一区二区| 色天使色偷偷av一区二区| 日韩国产成人精品| 国产69精品一区二区亚洲孕妇| 国产精品不卡在线| 欧美日韩成人在线| 成人综合激情网| 亚洲日本在线观看| 日韩欧美成人激情| 91小视频免费观看| 视频在线观看一区二区三区| 欧美成人video| 国产黄色精品网站| 午夜精品久久久久久久久久久| 制服丝袜国产精品| 成人综合在线网站| 丝袜美腿一区二区三区| 欧美mv日韩mv国产网站app| 99久久久无码国产精品| 一区二区三区精品在线| 精品国产网站在线观看| 色视频一区二区| 亚洲在线视频网站| 国产亚洲成aⅴ人片在线观看| 国产在线国偷精品产拍免费yy| 一区二区三区高清不卡| 欧美亚洲综合网| 国内精品第一页| 日韩成人dvd| 亚洲成人av电影在线| 国产精品久久久99| 国产高清久久久| 麻豆成人在线观看| 亚洲成人av一区二区三区| 亚洲欧洲www| 精品久久国产97色综合| 欧美日本在线视频| 91久久一区二区| 日日夜夜精品视频天天综合网| 一区二区在线观看av| 国产精品久久久99| 成人精品电影在线观看| 国模少妇一区二区三区| 亚洲欧洲日韩综合一区二区| 久久久电影一区二区三区| 欧美一卡二卡在线| 在线电影院国产精品| 色婷婷久久久亚洲一区二区三区 | 国产老妇另类xxxxx| 日本视频免费一区| 日韩精品一级二级| 一区av在线播放| 国产精品久久久久影视| 日韩欧美一级片| 日韩一级精品视频在线观看| 日韩亚洲欧美在线| 欧美日韩精品欧美日韩精品| 成人av电影在线网| 久久99精品国产.久久久久| 麻豆中文一区二区| 午夜欧美在线一二页| 亚洲男人的天堂av| 亚洲一区二区三区视频在线播放| 中文字幕一区视频| 中文字幕中文字幕一区二区| 国产精品久久久久7777按摩|