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

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

?? cb_generator.pl

?? 嵌入式系統實驗教程(一)中對應的實驗內容
?? PL
?? 第 1 頁 / 共 3 頁
字號:
# | 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++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性久久久久久久久| 国产肉丝袜一区二区| 国产一区久久久| 国产亚洲短视频| 69久久夜色精品国产69蝌蚪网| 国产精品99久| 亚洲欧美日韩精品久久久久| www国产精品av| 日韩一区国产二区欧美三区| 91精品办公室少妇高潮对白| 国产成人精品亚洲777人妖 | 国产成人av电影在线观看| 午夜免费欧美电影| 一级中文字幕一区二区| 最新高清无码专区| 国产精品情趣视频| 久久久久国产精品麻豆ai换脸| 欧洲人成人精品| 一本久久a久久免费精品不卡| 国产福利一区二区三区| 极品销魂美女一区二区三区| 爽好久久久欧美精品| 亚洲第一福利一区| 国产精品毛片无遮挡高清| 欧美偷拍一区二区| 欧美日韩中文字幕一区| 欧美三级电影精品| 欧美一二三四在线| 欧美大片免费久久精品三p| 日韩亚洲电影在线| 精品99999| 欧美激情一区二区三区四区| 精品剧情v国产在线观看在线| 精品日韩99亚洲| 国产午夜精品美女毛片视频| 国产精品妹子av| 亚洲视频网在线直播| 一区二区三区四区乱视频| 亚洲国产婷婷综合在线精品| 亚洲日本成人在线观看| 亚洲自拍偷拍综合| 免费看欧美女人艹b| 激情欧美日韩一区二区| 风流少妇一区二区| 欧美视频一区二区三区四区| 日韩一区二区三区免费看| 欧美精品 国产精品| 精品国产伦一区二区三区观看方式 | 久久精品视频在线免费观看| 国产精品久久久久久久久免费樱桃 | 亚洲精品在线免费观看视频| 国产精品天天看| 亚洲精品亚洲人成人网 | 成人免费视频国产在线观看| 成人av在线观| 制服丝袜日韩国产| 国产精品无圣光一区二区| 中文字幕中文字幕一区二区| 婷婷开心激情综合| 成人av网站在线| 69av一区二区三区| 国产精品高潮久久久久无| 日本中文字幕不卡| 国产一区二区三区国产| 欧美日韩亚洲不卡| 国产精品久久久久久福利一牛影视| 午夜不卡av免费| 成人高清免费在线播放| 色婷婷av一区二区三区大白胸| 日韩视频国产视频| 亚洲一二三区在线观看| 毛片av一区二区| 欧美日韩久久一区| 中文字幕中文在线不卡住| 国内精品视频666| 欧美丰满高潮xxxx喷水动漫| 久久久99精品久久| 蜜桃视频第一区免费观看| 色婷婷久久久综合中文字幕| 久久人人97超碰com| 午夜精彩视频在线观看不卡| 91丨porny丨在线| 国产精品久久久久影院色老大| 韩国三级在线一区| 精品嫩草影院久久| 亚洲欧美色综合| 成人激情小说网站| 国产欧美一区二区在线| 狠狠狠色丁香婷婷综合激情 | 成人手机电影网| 久久―日本道色综合久久| 麻豆国产91在线播放| 91精品国产入口| 日韩精品一区第一页| 欧美亚洲禁片免费| 香蕉久久夜色精品国产使用方法 | 欧美美女一区二区三区| 亚洲综合色区另类av| 欧美在线三级电影| 国产精品久久久久永久免费观看| 国产不卡视频一区| 国产精品少妇自拍| 99久久精品免费看国产| 亚洲三级电影全部在线观看高清| www.日韩精品| 综合亚洲深深色噜噜狠狠网站| youjizz国产精品| 夜夜嗨av一区二区三区中文字幕| 色欧美片视频在线观看在线视频| 亚洲色图制服诱惑| 91免费国产在线| 国产精品高潮呻吟| 色av成人天堂桃色av| 亚洲永久免费av| 欧美精品九九99久久| 亚洲欧洲无码一区二区三区| 91免费国产在线观看| 亚洲风情在线资源站| 日韩欧美一区二区视频| 国产精品一区三区| 三级精品在线观看| 最新热久久免费视频| 精品国产免费久久| 欧美日韩国产影片| 一本一本大道香蕉久在线精品 | 久久精品久久99精品久久| 中文字幕一区二区三| 欧美性做爰猛烈叫床潮| 裸体健美xxxx欧美裸体表演| 亚洲欧美色一区| 国产人久久人人人人爽| 欧美剧在线免费观看网站| 92国产精品观看| 国产91精品一区二区麻豆网站 | 久久婷婷成人综合色| 欧美日韩卡一卡二| 色88888久久久久久影院野外| 国产成人日日夜夜| 久久成人免费电影| 蜜臀av性久久久久蜜臀aⅴ| 亚洲午夜成aⅴ人片| 日韩理论在线观看| 国产精品大尺度| 久久久久久久电影| 精品美女一区二区三区| 欧美一区午夜精品| 欧美日韩亚洲不卡| 欧美精品色一区二区三区| 91天堂素人约啪| av不卡一区二区三区| 国产91精品一区二区| 国产成人免费高清| 国产成人亚洲综合色影视| 国产露脸91国语对白| 国产精品一品二品| 国产成人免费9x9x人网站视频| 国产盗摄女厕一区二区三区 | 亚洲欧美日韩国产综合| 国产精品麻豆久久久| 国产精品欧美一区喷水| 国产精品久久福利| 国产精品久久二区二区| 亚洲美女在线一区| 亚洲免费观看高清完整版在线| 亚洲男人的天堂在线aⅴ视频| 中文字幕一区二区三区在线不卡 | 国产成人午夜视频| 丁香婷婷综合网| 99久久综合精品| 91久久精品一区二区| 欧美日韩久久久久久| 91精品国产91热久久久做人人| 欧美一区二区三区日韩视频| 精品少妇一区二区三区| 亚洲国产精品黑人久久久| 中文字幕va一区二区三区| 亚洲欧美国产77777| 亚洲一区二区精品视频| 三级欧美在线一区| 大尺度一区二区| 欧美色涩在线第一页| 欧美电影免费观看高清完整版在| 久久亚洲精品国产精品紫薇| 自拍视频在线观看一区二区| 亚洲成人激情av| 国产在线播放一区| 91老师片黄在线观看| 欧美自拍丝袜亚洲| 久久亚洲欧美国产精品乐播| 亚洲另类在线视频| 麻豆精品新av中文字幕| 91在线云播放| 精品裸体舞一区二区三区| 亚洲精品一二三四区| 麻豆成人免费电影| 欧美色图在线观看| 国产欧美一区二区三区网站| 午夜私人影院久久久久| 国产成人av在线影院| 日韩午夜三级在线|