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

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

?? generate_ddr_sim_model.pl

?? 基于NIOS II的ddr2控制器,配有詳細的文檔,經驗證后可使用.
?? PL
?? 第 1 頁 / 共 4 頁
字號:
#Copyright (C)2005 Altera Corporation

use europa_all;
use strict;



# Main DDR simulation model.
sub make_ddr_sim_model 
{
    # No arguments means "Ignore -- I'm being called from make".
    if (!@_)
    {
        # print "\n\tmake_sdram_controller now uses a static".
        # " external 'class.ptf'!\n\n";
        return 0; # make_class_ptf();
    }
    
    # TEW: Get SDRAM's project, Options, etc:
    my $project = e_project->new(@_);
    my %Options = %{$project->WSA()};
    my $WSA = \%Options;
    
    # Grab the module that was created during handle_args.
    my $module = $project->top();

    # Grab some args to determine how to proceed, like model_base and init_file
    $WSA->{is_blank}=($WSA->{sim_Kind} =~ /^blank/i) ? "1" : "0";
    $WSA->{is_file} =($WSA->{sim_Kind} =~ /^textfile/i) ? "1" : "0";
    
    my $textfile = $WSA->{sim_Textfile_Info};
  
    #turn bar/foo.srec relative path into an absolute one if needed
    my $system_directory = $project->_system_directory();
    $textfile =~ s/^(\w+)(\\|\/)/$system_directory$2$1$2/;
    #turn foo.srec to absolute path
    $textfile =~ s/^(\w+)$/$system_directory\/$1/;
    
    $WSA->{textfile}= $textfile;

    # Figure out where our contents are coming from:
    $WSA->{Initfile} = $project->_target_module_name() . "_contents.srec";
    
    my $do_generation = $project->system_ptf()->{WIZARD_SCRIPT_ARGUMENTS}{do_build_sim};
    
    # Only generate model if "Simulation. Create simulator..." is ticked.
    if ($do_generation == 1) {
        print"# Creating memory simulation model for use with ".$project->_target_module_name()."\n";
        
        # We only accept .mif- and .srec-files (or just blankness)
        &ribbit ("Memory-initialization files must be either .mif or .srec.\n",
                 " not '$WSA->{Initfile}'\n")
            unless $WSA->{Initfile} =~ /\.(srec|mif)$/i;
        
    
        
        
        # Figure out what language we're generating for
        my $lang = $project->system_ptf()->{WIZARD_SCRIPT_ARGUMENTS}{hdl_language};
        my $extension;
        my $sim_file = $project->get_top_module_name();
        my $sim_dat  = $project->_target_module_name() . ".dat";
        if ($lang =~ /vhd/i    ) { 
            $sim_file .= ".vhd";
            $extension = ".vhd";
        }
        if ($lang =~ /verilog/i) { 
            $sim_file .= ".v";
            $extension = ".v";
        }
        my @write_lines;
    
    
    
        # Add datapath and other files to simulation list        
        my $sopc_device_family = lc($project->system_ptf()->{WIZARD_SCRIPT_ARGUMENTS}{device_family_id});
        my $device_family = lc($WSA->{MEGACORE}{NETLIST_SECTION}{STATIC_SECTION}{PRIVATES}{NAMESPACE}{parameterization}{PRIVATE}{family}{value});
        
        #if ($sopc_device_family ne $device_family) { print "WARNING! The device selected in SOPC Builder (".$sopc_device_family.") does match the DDR SDRAM device (".$device_family.")\n";}
    
        #print "SOPC Builder device family is ".$sopc_device_family."\n";
        #print "DDR Megacore device family is ".$device_family."\n";
            
        
        my $wrapper_name = $project->_target_module_name();
        my $quartus_directory = $project->get_quartus_rootdir();
    
        #print "Quartus came from ".$quartus_directory." and device family is $device_family\n";
        #print "Wrapper file name is ".$wrapper_name.$extension."\n";
        
        
        
        #print "\nOriginal files list = ".$project->module_ptf()->{HDL_INFO}{Simulation_HDL_Files}."\n";
        
        my $magic_proj_dir = "__PROJECT_DIRECTORY__/";
        my $datapath_files = "";
    
       # SOPC Builder treats Stratix II & Stratix II GX as different families but we don't...
       if ($sopc_device_family eq "stratixiigx") {
           $sopc_device_family = "stratixii";   
       }
       # SOPC Builder now treats Stratix & Stratix GX as different families (it didn't used to!) but we don't...
       if ($sopc_device_family eq "stratixgx") {
           $sopc_device_family = "stratix";   
       }
        
        
       # Simulation libraries required 
       $project->module_ptf()->{HDL_INFO}{Simulation_Library_Names} = "auk_ddr_user_lib,";
       #$project->module_ptf()->{HDL_INFO}{Simulation_Library_Names} .= "UNUSED";
       $project->module_ptf()->{HDL_INFO}{Simulation_Library_Names} .= "$sopc_device_family";

       if ($sopc_device_family eq "cycloneii") 
       { 
           $datapath_files .= $quartus_directory."/eda/sim_lib/cycloneii_atoms".$extension.",";  
           if ($lang =~ /vhd/i) {$datapath_files .= $quartus_directory."/eda/sim_lib/cycloneii_components.vhd,"; } 
       }
       if ($sopc_device_family eq "cyclone") 
       { 
           $datapath_files .= $quartus_directory."/eda/sim_lib/cyclone_atoms".$extension.",";  
           if ($lang =~ /vhd/i) {$datapath_files .= $quartus_directory."/eda/sim_lib/cyclone_components.vhd,"; } 
       }
       # SOPC Builder treats StratixII & StratixII GX as different so we have made the names the same for now  
       if ($sopc_device_family eq "stratixii") 
       { 
           $datapath_files .= $quartus_directory."/eda/sim_lib/stratixii_atoms".$extension.",";  
           if ($lang =~ /vhd/i) {$datapath_files .= $quartus_directory."/eda/sim_lib/stratixii_components.vhd,"; } 
       }
       # SOPC Builder treats StratixII & StratixII GX as different so we have made the names the same for now  
       if ($sopc_device_family eq "stratix")  
       { 
           $datapath_files .= $quartus_directory."/eda/sim_lib/stratix_atoms".$extension.",";  
           if ($lang =~ /vhd/i) {$datapath_files .= $quartus_directory."/eda/sim_lib/stratix_components.vhd,"; } 
       }
    
       # Now add the files needed for the datapath itself   
       $datapath_files .= $magic_proj_dir.$wrapper_name."_auk_ddr_dqs_group".$extension.",";
       $datapath_files .= $magic_proj_dir.$wrapper_name."_auk_ddr_clk_gen".$extension.",";
       $datapath_files .= $magic_proj_dir.$wrapper_name."_auk_ddr_datapath".$extension.",";
       if ($lang =~ /vhd/i) {$datapath_files .= $magic_proj_dir.$wrapper_name."_auk_ddr_datapath_pack.vhd,";}
       
       $project->module_ptf()->{HDL_INFO}{Simulation_HDL_Files} = $datapath_files.$project->module_ptf()->{HDL_INFO}{Simulation_HDL_Files};
        
        
        
        #print "Updated files list = ".$project->module_ptf()->{HDL_INFO}{Simulation_HDL_Files}."\n";
        #print "Create libraries called = ".$project->module_ptf()->{HDL_INFO}{Simulation_Library_Names}."\n";
        
        
        #--------------------------------------------------------
        # Create a shortcut to the right bit of the DDR's PTF
        my %myshortcut =  %{$WSA->{MEGACORE}{NETLIST_SECTION}{STATIC_SECTION}{PRIVATES}{NAMESPACE}{parameterization}};
        my $wizard_shortcut = \%myshortcut;
        #--------------------------------------------------------
    
        
        # Work out whether this should be DDR1 or DDR2
        my $memtype =  $wizard_shortcut->{PRIVATE}{gMEM_TYPE}{value};
        #print "This is a ".$memtype." controller\n";
    
        my $mem_pretty_name = "DDR SDRAM";
        if ($memtype eq "ddr2_sdram") {$mem_pretty_name = "DDR2 SDRAM";}
        
        my $local_burst_length =  $wizard_shortcut->{PRIVATE}{local_burst_length}{value};
        
        # Start building up a simulation-only display string.
        @write_lines = 
            (
             "",
             "**********************************************************************",
             "This testbench includes an SOPC Builder generated Altera memory model:",
             "'$sim_file', to simulate accesses to the $mem_pretty_name memory.",
             " ",
             );
              
       # if ($local_burst_length > 1) 
       # {
         # push @write_lines,(
             # "WARNING: The Altera $mem_pretty_name Controller supports Avalon bursts,", 
             # "but this simulation model does not. If any of the masters in your",
             # "SOPC Builder system will issue Avalon bursts, then you ",
             # "should use a memory model supplied by your memory vendor.   ",
             # " ",
             # );
       # }
             
            push @write_lines,
            (
             "Initial contents are loaded from the file: ".
             "'$sim_dat'."
             );
        push @write_lines,
        ("**********************************************************************");
    
    
        # Convert all lines to e_sim_write objects.
        map {$_ = e_sim_write->new({spec_string => $_ . '\\n'})} @write_lines;
        
        # Wrap the simulation-only display string in an e_initial_block, so we
        # only see the message once!
        if (@write_lines)
        {
            my $init = e_initial_block->new({
                contents => [ @write_lines ],
            });
            $module->add_contents($init);
        } # if (@write_lines)
      
        # sjh WRONG - should get the clock properly!
        $WSA->{system_clock_rate} = $project->system_ptf()->{WIZARD_SCRIPT_ARGUMENTS}{clock_freq};
            
        # New style contents generation (a'la OnchipMemoryII -- thanks AaronF)
        my $Opt = {name => $project->_target_module_name()};
        $project->do_makefile_target_ptf_assignments
            (
             's1',
             ['dat', 'sym', ],
             $Opt,
             );
        
        # Reality checks:
        
        
        #my $tempclockrate = $project->system_ptf()->{WIZARD_SCRIPT_ARGUMENTS}{clock_freq};
        my $clockrate = $wizard_shortcut->{PRIVATE}{clock_speed}{value};
        #print "clockrate = $clockrate\n";
        
        my $clockperiod = 1/$clockrate*1000;
        #print "clockperiod = $clockperiod\n";
    
    
        #print "Data width = ".$wizard_shortcut->{PRIVATE}{width}{value}."\n";
        #print "Data width2 = ".$WSA->{MEGACORE}{NETLIST_SECTION}{STATIC_SECTION}{PRIVATES}{NAMESPACE}{parameterization}{PRIVATE}{width}{value}."\n";
    
        # SODIMM allows all the same data path widths as the sdram controller
        &validate_parameter({
            hash => $wizard_shortcut->{PRIVATE}{width},
            name => "value",
            type => "integer",
            allowed => [8, 16, 32, 64],
        });
        
        
        #sjh Don't check these for now
        # &validate_parameter({
            # hash => $WSA,
            # name => "sdram_bank_width",
            # type => "integer",
            # default => "2", 
            # allowed => [1, 2],
        # });
        
        #sjh Don't check these for now
        # # Having a non-integer power of 2 for number of chip selects seems wrong.
        # my $num_chipselects = $WSA->{sdram_num_chipselects};
        my $num_chipselects = $wizard_shortcut->{PRIVATE}{chipselects}{value};
        my $num_chipselect_address_bits = log2($num_chipselects);
        # &validate_parameter({
            # hash => $WSA,
            # name => "sdram_num_chipselects",
            # type => "integer",
            # allowed => [1, 2, 4, 8],
        # });
        
        my $cas_latency = $wizard_shortcut->{PRIVATE}{cas_latency}{value};
        #print "CAS latency = $cas_latency\n";
    
        # In the real world, 3 bits of the mode register are used to encode
        # cas latency, with code "3'b000" reserved.
        &validate_parameter({
            hash => $wizard_shortcut->{PRIVATE}{cas_latency},
            name => "value",
            type => "string",
            allowed => ["2.0", "2.5", "3.0", "4.0", "5.0"],
        });
    
        my $resynch_phase = $wizard_shortcut->{PRIVATE}{resync_phase}{value};
        my $resynch_cycle = $wizard_shortcut->{PRIVATE}{resynch_cycle}{value};
    

        # CAS 2.5 doesn't have any extra handling so we need to act like CAS2 but add a 1/2 cycle delay
        my $number_of_lump_delays = 0;
        if ($cas_latency eq "2.5") 
        {
            # split total delay in 90 deg segements because we can't set modelsim to use transport delays instead of inertial!
            $number_of_lump_delays = 2; # 2 lots of $clockperiod / 4 = 180 deg delay
        }
        # print "sim delay  = cas_latency = $cas_latency, $number_of_lump_delays delays.\n";

        
    
    
        #sjh Not needed for DDR
        # This setting is hidden from the GUI, but takes affect as a result
        # of using the 'preset's...
        # FIXME: Our model doesn't care about refresh commands, but we might want
        # to indicate via printf/write/$display that they are occuring...
        # &validate_parameter({
            # hash => $WSA,
            # name => "init_refresh_commands",
            # type => "integer",
            # allowed => [1 .. 8],
        # });
        
    
        # Compute the width of the controller's address (as seen by the Avalon
        # bus) from input parameters.  SODIMM will address a raw memory array in
        # the same way that Avalon accesses the Controller.
        # my $addr_width =
            # $num_chipselect_address_bits +
            # $WSA->{sdram_bank_width} +
            # $WSA->{sdram_col_width} +
            # $WSA->{sdram_row_width};
        my $addr_width = $wizard_shortcut->{PRIVATE}{local_address_width}{value};
        my $ba_width = $wizard_shortcut->{PRIVATE}{bankbits}{value};
        my $row_width = $wizard_shortcut->{PRIVATE}{rowbits}{value};
        my $col_width = $wizard_shortcut->{PRIVATE}{colbits}{value};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情五月播播久久久精品| 成人免费观看av| 国产精品少妇自拍| 精品国产91洋老外米糕| 91精品国产色综合久久| 欧美日韩一级黄| 欧美剧情电影在线观看完整版免费励志电影| 9人人澡人人爽人人精品| 99久久精品情趣| 色狠狠色噜噜噜综合网| 欧美日韩一区视频| 国产精品久久二区二区| 亚洲一区二区视频| 天堂影院一区二区| 激情小说欧美图片| 666欧美在线视频| 精品电影一区二区| 午夜精品在线看| 精品一区二区三区久久久| 国产91富婆露脸刺激对白| 91麻豆精东视频| 欧美日韩国产精选| 欧美videossexotv100| 中文成人av在线| 国产精品中文字幕日韩精品| 91在线视频在线| 国产精品白丝在线| 国产iv一区二区三区| 久久久精品天堂| 亚洲大型综合色站| 国产激情91久久精品导航| 在线日韩av片| 久久精品视频在线免费观看| 亚洲一区二区综合| 在线一区二区三区四区五区| 亚洲美女在线一区| 国产又粗又猛又爽又黄91精品| 成人短视频下载| 欧美一区二区三区成人| 视频一区二区国产| 欧美一区二区三区思思人| 奇米影视7777精品一区二区| 欧美激情一区二区三区不卡| 一区二区三区精品视频| 裸体歌舞表演一区二区| 日本韩国精品一区二区在线观看| 亚洲欧洲精品一区二区精品久久久 | 久久爱另类一区二区小说| 91精品国产综合久久久蜜臀粉嫩| 亚洲成人午夜影院| 欧美一区二区三区免费大片| 看国产成人h片视频| 欧美经典一区二区| 舔着乳尖日韩一区| 日韩一区二区精品| 亚洲一级二级三级在线免费观看| 欧美亚洲一区二区在线| 日韩美女久久久| 国产毛片一区二区| 国产精品亲子乱子伦xxxx裸| 色综合咪咪久久| 国产精品―色哟哟| 91福利视频在线| 久久国产精品色| 国产精品高潮呻吟| 国产午夜精品久久久久久久| 91小视频免费看| 免费一区二区视频| 中文字幕亚洲欧美在线不卡| 欧美三级中文字幕在线观看| 久久99国产精品尤物| 专区另类欧美日韩| 精品欧美一区二区三区精品久久| 97se亚洲国产综合在线| 久久国产精品99久久久久久老狼| 国产精品卡一卡二| 制服丝袜日韩国产| av在线不卡观看免费观看| 日本午夜精品视频在线观看| 欧美日韩精品一区二区三区四区| 黄网站免费久久| 亚洲一级二级在线| 中文字幕电影一区| 日韩欧美在线影院| 91精品91久久久中77777| 国产一区二区在线看| 亚洲曰韩产成在线| 中文字幕免费在线观看视频一区| 欧美精品xxxxbbbb| 94色蜜桃网一区二区三区| 国产综合色精品一区二区三区| 亚洲午夜在线视频| 91麻豆精品国产91久久久久久久久 | 国产高清视频一区| 亚洲成人1区2区| 中文字幕亚洲综合久久菠萝蜜| 欧美岛国在线观看| 国产一区二区美女诱惑| 午夜精品久久久久久久久| 亚洲视频香蕉人妖| 国产精品美女一区二区| 久久九九99视频| 精品久久久久久亚洲综合网 | xnxx国产精品| 国产成人免费网站| 激情综合五月天| 日韩国产在线观看一区| 亚洲国产精品久久久男人的天堂| 亚洲欧美视频一区| 亚洲天堂福利av| 18欧美亚洲精品| 成人免费在线观看入口| 国产精品成人在线观看| 久久精品亚洲乱码伦伦中文| 久久久久久久免费视频了| 91精品婷婷国产综合久久性色| 在线亚洲人成电影网站色www| 91蜜桃免费观看视频| 91浏览器在线视频| 一本色道久久综合亚洲精品按摩| 粉嫩久久99精品久久久久久夜| 成人免费视频一区| 97久久久精品综合88久久| 91美女福利视频| 欧美日韩一区二区三区在线看| 欧美性感一区二区三区| 精品婷婷伊人一区三区三| 欧美日韩免费一区二区三区视频| 欧美日免费三级在线| 91精品久久久久久久久99蜜臂| 欧美岛国在线观看| 国产午夜一区二区三区| 亚洲欧洲在线观看av| 亚洲一区在线播放| 麻豆91免费观看| 天天综合天天做天天综合| 日本最新不卡在线| 国产v综合v亚洲欧| 91农村精品一区二区在线| 欧美久久久久久久久久| 2014亚洲片线观看视频免费| 中文字幕成人网| 亚洲一区欧美一区| 激情深爱一区二区| 成人h版在线观看| 欧美日韩高清一区| 精品盗摄一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 天天综合日日夜夜精品| 成人午夜视频免费看| 欧美午夜电影一区| 久久婷婷国产综合国色天香 | 色屁屁一区二区| 91精品国产综合久久久蜜臀粉嫩| 欧美国产精品久久| 婷婷成人综合网| av激情亚洲男人天堂| 欧美一区三区二区| 17c精品麻豆一区二区免费| 日韩中文字幕一区二区三区| 成人看片黄a免费看在线| 欧美情侣在线播放| 国产精品不卡在线观看| 日本三级韩国三级欧美三级| 波多野结衣中文字幕一区二区三区 | 91香蕉国产在线观看软件| 7777精品伊人久久久大香线蕉经典版下载 | 色噜噜狠狠色综合中国| 精品人在线二区三区| 一区二区三区欧美| 国产精品99久久久久久久女警 | 麻豆一区二区三| 在线精品视频小说1| 久久精品人人做人人综合| 亚洲一二三四在线| 成人av午夜电影| 久久综合狠狠综合久久综合88 | 欧美一区二区三区精品| 亚洲精品中文在线观看| 亚洲成人中文在线| 99久久国产免费看| 国产三级精品视频| 久久国产精品99精品国产| 678五月天丁香亚洲综合网| 亚洲自拍与偷拍| 91偷拍与自偷拍精品| 欧美激情综合五月色丁香小说| 极品少妇xxxx偷拍精品少妇| 日韩欧美专区在线| 亚洲国产日韩在线一区模特 | 精品国产一区二区三区久久影院| 一区二区三区中文在线观看| 成人av在线影院| 亚洲欧美日韩国产综合| 国产成人综合亚洲网站| 国产三级一区二区三区| 国产激情偷乱视频一区二区三区| 2017欧美狠狠色| 国产成人精品影视| 中文字幕高清不卡|