⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cb_generator.pl

📁 altera 公司内部PWM的HDL及驱动代码
💻 PL
📖 第 1 页 / 共 3 页
字号:
    # | 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 @libraries = get_libraries();    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++)        {        my $a_parameter = get_child($hdl_parameter_definitions_ptf,$i,"HDL_PARAMETER");        my $parameter_editable = get_data_by_path($a_parameter,"editable");        if($parameter_editable)                {                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");                                $default = turn_anything_into_appropriate_string($default,$type,1,$module_language);                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 wrapee 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,$module_language);        # |        # | our internal _dummy assignment shows up here        # | without a corresponding hdl entry. we        # | ignore it.        # |        if(($parameter_name ne "") and $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,				});  # VHDL Libraries, from PTF file...  $wrapee_module->add_vhdl_libraries(@libraries);  $top->add_vhdl_libraries(@libraries);  $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 directorymy $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) = (@_);  my $ptf_path_prefix = "";    my $external_args_hr = $generator_hr->{external_args_hr};  my @new_file_array;  #validate first  my $decoder_hash = $decoder_ring_hr->{$hdl_section};  &default_ribbit("generator_copy_files_and_set_system_ptf: No understood HDL section passed in for first arg\n")    unless($decoder_ring_hr->{$hdl_section} ne "");  &generator_print_verbose("generator_copy_files_and_set_system_ptf: copying files for section ".$hdl_section."\n");  #copy second  my @new_file_array;  # If we need to copy over some files, then we need to make sure we are   # keeping track of what files we copy over.  # Otherwise, we just need to keep track of the files that the user has asked to copy over  # and use these instead.  if($decoder_hash->{copy}){    my $copy_to_location;    my $copy_from_location;    if($decoder_hash->{copy_to} eq "project"){      $copy_to_location = $external_args_hr->{system_directory};    }elsif($decoder_hash->{copy_to} eq "simulation"){      $copy_to_location = $external_args_hr->{system_sim_dir};    }else{      &default_ribbit("generator_copy_files_and_set_system_ptf: No understood copy files to location\n");    }    $copy_from_location = $external_args_hr->{class_directory};    @new_file_array = &generator_copy_files($copy_to_location, $copy_from_location, @file_list);  }else{    @new_file_array = @file_list;  }	  #scribble on PTF hash last  if($decoder_hash->{ptf_set}){    if($decoder_hash->{copy_to} eq "project"){      foreach my $file(@new_file_array){         $file =~ s/^.*\/(.*?)$/$1/;         $file = $generator_hr->{project_path_widget}."/".$file;      }    }    &generator_print_verbose("generator_copy_files_and_set_system_ptf: setting system PTF file in section ".$hdl_section."\n");    if($decoder_hash->{ptf_section} eq "Precompiled_Simulation_Library_Files"){      @new_file_array = map{$external_args_hr->{class_directory}."/".$_} @new_file_array;    }    &generator_set_files_in_system_ptf($decoder_hash->{ptf_section}, @new_file_array);  }}##### Name: generator_set_files_in_system_ptf# Args: $hdl_section#       @list_of_files# Returns: 1 or 0# Purpose: This is an internal function used to set files in the module's section in the system PTF file#sub generator_set_files_in_system_ptf{  my ($hdl_section, @list_of_files) = (@_);  my $file_list = join(",", @list_of_files);  my $previous_data;    &generator_print_verbose("setting HDL_INFO/".$hdl_section." in system PTF file with ".$file_list."\n");  my $previous_data = &get_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section);    if($previous_data){    $file_list = $previous_data . ", $file_list"; # spr 132177                                                  # swapping order, dvb 2003  }  &set_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section, $file_list);}##### Name: generator_copy_files# Args: $target_directory#       $source_directory#       @list_of_files# Returns: The list of files which has been copied (suitable for framing!)# Purpose: This is an internal function used to copy files around in the generator program.#sub generator_copy_files{  my ($target_directory, $source_directory, @list_of_files) = (@_);  my @new_file_array;  foreach my $file_name(@list_of_files){     $file_name =~ s|\\|\/|g;    if($file_name =~ /\*\.*/){      $file_name =~ s/\*/$1/;      my @found_list = &_find_all_dir_files_with_ext($source_directory, $file_name);      push(@new_file_array, @found_list);    }else{      &generator_print_verbose("Copying: ".$file_name."\n");      push(@new_file_array, $file_name);    }  }  &_copy_files($target_directory, $source_directory, @new_file_array);  return @new_file_array;}sub _find_all_dir_files_with_ext{  my ($dir,      $ext) = (@_);  opendir (DIR, $dir) or    &default_ribbit("can't open $dir !");    my @all_files = readdir(DIR);  my @new_file_list;      foreach my $file (@all_files){    if($file =~ /^.*($ext)$/){      push(@new_file_list, $file);    }  }  return @new_file_list;}##### Name: generator_begin# Args: Array of generator program launcher args# Returns: A hash reference to the module's section in the system PTF file# Purpose: This is the first subroutine a user should call before running the rest of their#          generator program.#sub generator_begin{  my @external_args = (@_);  my  ($external_args_hr,        $temp_user_defined,        $temp_db_Module,        $temp_db_PTF_File) = Process_Wizard_Script_Arguments("", @external_args);  &generator_print_verbose("generator_begin: initializing\n");  $generator_hr->{external_args_hr} = $external_args_hr;  $generator_hr->{external_args} = \@external_args;  # open up class.ptf and   $generator_hr->{class_ptf_hr} = new_ptf_from_file($external_args_hr->{class_directory}."/class.ptf");  # get the system.ptf   $generator_hr->{system_ptf_hr} = new_ptf_from_file($external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf");  $generator_hr->{module_ptf_hr} = &get_child_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/MODULE $external_args_hr->{target_module_name}");  my $class_name = get_data_by_path($generator_hr->{module_ptf_hr}, "class");  # find the default generator section  $generator_hr->{language} = get_data_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/WIZARD_SCRIPT_ARGUMENTS/hdl_language");  # get some wrapper settings  &get_module_wrapper_arg_hash_from_system_ptf_file();  # clear system ptf's HDL section  &delete_child($generator_hr->{module_ptf_hr}, "HDL_INFO");  return $generator_hr->{module_ptf_hr};}	##### Name: generator_end# Args: none# Returns: nothing# Purpose: This is the last subroutine a user should call from their generator program.#          Not calling this subroutine will make you very sad... =<#

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -