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

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

?? generate_ddr_sim_model.pl

?? 基于NIOS II的ddr2控制器,配有詳細的文檔,經驗證后可使用.
?? PL
?? 第 1 頁 / 共 5 頁
字號:
        #print "Avalon burst length is $local_burst_length \n";
        
        
        # 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};
        #print "resynch cycle = $resynch_cycle\n";
        #print "resynch phase = $resynch_phase\n";
    
        # approximate the roundtrip delay based on resynch cycle (taking CL into account) - 1/4 cycle + whatever the resynch phase is,.
        # my $rtl_sim_delay = (($resynch_cycle + 2 - $cas_latency)*$clockperiod) + ($clockperiod * ($resynch_phase/360));
        my $clock_board_delay = $wizard_shortcut->{PRIVATE}{board_tpd_clock_trace_nom}{value};
        my $dqs_board_delay = $wizard_shortcut->{PRIVATE}{board_tpd_dqs_trace_total_nom}{value};
        my $rtl_board_delay = ($clock_board_delay + $dqs_board_delay) / 1000;

        # split total delay in 90 deg segements because we can't set modelsim to use transport delays instead of inertial!
        # my $number_of_lump_delays = floor($rtl_sim_delay / ($clockperiod / 4) + 1);
        #print "sim delay  = $rtl_sim_delay spread over $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};
        #print "Controller has address widths, a = $addr_width, ba = $ba_width, row = $row_width, col = $col_width\n"; 
        
        # print "ctrler width = $addr_width\t ".
        # "Num CSBits = $num_chipselect_address_bits\n";
        # print "Num Banks = ".$WSA->{sdram_num_banks}.
        # " \tNum BankBits = ".$WSA->{sdram_bank_width}."\n";
        # print "Rows = ".$WSA->{sdram_row_width}.
        # " \tCols = ".$WSA->{sdram_col_width}."\n";
    
        # FIXME:?  We check NOTHING about validity of SDRAM Controller Timing or
        # Protocol -- we trust the user to set the parameters as if for a real
        # SODIMM!
        
        
        my $dq_width  = $wizard_shortcut->{PRIVATE}{width}{value};
        my $dqs_width = $wizard_shortcut->{PRIVATE}{width}{value} / 8;
        my $dm_width  = $wizard_shortcut->{PRIVATE}{width}{value} / 8;
        
        my $mem_width = $dq_width * 2;
        my $mem_mask_width = $dm_width * 2;
        
        
        #my $dm_width = $WSA->{sdram_data_width} / 8;
        # if (int($dm_width) != $dm_width)
        # {
            # ribbit
                # (
                 # "Unexpected: SDRAM data width '", $dq_width}, "', ".
                 # "leads to non-integer DQM width ($dm_width)"
                 # );
        # }
        # else
        # {
        # printf ("make_sodimm: data_width = %d\tdqm_width = %d\n",
        # $WSA->{sdram_data_width},$dm_width);
        # }
        
        # Let's set up the str2hex CODE variable to be "INH" or 'some active
        # code', depening upon {cs_n[x], ras_n, cas_n, we_n}
    
        # set up some precoded 3 character wide strings for wave display below:
        my $STR_INH = &str2hex ("INH"); # Inhibit
        my $STR_LMR = &str2hex ("LMR"); # To grab cas_latency during LoadMoadReg
        my $STR_ACT = &str2hex ("ACT"); # To grab cs/row/bank addr during Activate
        my $STR__RD = &str2hex (" RD"); # To grab col addr during Read
        my $STR__WR = &str2hex (" WR"); # To grab col addr during Write
        # Precharge, AutoRefresh and Burst are ignored by this model!
        # NB: we may choose to later add a AutoRefresh timing check...
    
        # SRA modified so always read in file
        #my $ram_file = "";
        #if ($WSA->{is_initialized}) {
        my  $ram_file = $sim_dat;
        #}
    
        $module->add_contents
            (
             e_ram->new
             ({
                 comment => "Synchronous write when (CODE == $STR__WR (write))",
                 name => $project->get_top_module_name() . "_ram",
                 Read_Latency => "0",
                 dat_file => $ram_file,
                 port_map =>
                 {
                     #wren => "write_valid_r2",
                     wren => "write_to_ram_r",
                     data => "rmw_temp",
                     q    => "read_data",
                     wrclock => "clk",
                     #wraddress=>"wr_addr_delayed",
                     wraddress=>"wr_addr_delayed_r",
                     #rdaddress=>"(write_valid) ? wr_addr_pipe_1 : read_addr_delayed",
                     rdaddress=>"rmw_address",
                 }
             }),
             );
    
        # Tho the Altera SDR SDRAM Controller's always wire their clk_en 'ON',
        # some users may wire their testbench to flick the bit...
        
        # Port Naming matches common SODIMM conventions, with some exceptions:
        # Since the controller only drives one clock, and one clock_enable, we
        # never create a bus of inputs for those signals (many sodimms have 2 or
        # more ck and cke's); we do not support any sort of Serial Presence
        # Detect, nor the associated SCL (serial-clock) and SDA (serial-data)
        # signals.
        
        # NOTE: WSA->{sdram_addr_width} is not necessarily WSA->{sdram_row_width}!
        my $dq;                     # variable for dq signal name, for 3-state mode
        my $dqs;                     # variable for dq signal name, for 3-state mode
        $dq = $default_pin_prefix."dq";             # Dedicated pin-mode dq name
        $dqs = $default_pin_prefix."dqs";             # Dedicated pin-mode dq name
        
        # Dedicated pin-mode sodimm port names and assignments
        $module->add_contents
            (
             e_port->news
             (
              {name => "clk"},
              {name => $default_pin_prefix."cke",   width => $num_chipselects},
              {name => $default_pin_prefix."cs_n",  width => $num_chipselects},
              {name => $default_pin_prefix."ras_n"},
              {name => $default_pin_prefix."cas_n"},
              {name => $default_pin_prefix."we_n"},
              {name => $default_pin_prefix."dm",    width => $dm_width },
              {name => $default_pin_prefix."ba",    width => $ba_width },
              {name => $default_pin_prefix."a",     width => $row_width },
              {name => $default_pin_prefix."dq",    width => $dq_width, direction => "inout"},
              {name => $default_pin_prefix."dqs",   width => $dqs_width, direction => "inout"},
              ),
             e_signal->news
             (
              {name => "cke",  width => $num_chipselects},
              {name => "cs_n",  width => $num_chipselects},
              {name => "ras_n"},
              {name => "cas_n"},
              {name => "we_n"},
              {name => "dm",   width => $dm_width,export => 0, never_export => 1},
              {name => "ba",    width => $ba_width},
              {name => "a",     width => $row_width},
              {name => "read_dq",      width => $dq_width},
              {name => "dqs",           width => $dqs_width},
              {name => "first_half_dq", width => $dq_width,export => 0, never_export => 1},
              {name => "second_half_dq",width => $dq_width,export => 0, never_export => 1},
              {name => "dq_captured",   width=> $dq_width*2,export => 0, never_export => 1},
              {name => "dq_valid",     width=> 1,export => 0, never_export => 1},
              {name => "dqs_valid",     width=> 1,export => 0, never_export => 1},
              {name => "dqs_valid_temp",  width=> 1,export => 0, never_export => 1},
              {name => "dm_captured",   width=> $dqs_width*2,export => 0, never_export => 1},
              {name => "open_rows",     width => $row_width, depth => (2 ** ($ba_width + $num_chipselects))},
              {name => "current_row",   width => ($ba_width + $num_chipselects),export => 0, never_export => 1},
              
              {name => "dqs_temp",     width => $dqs_width},

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区免费大片| 欧美日韩一区视频| 久久精品国产99国产精品| 亚洲国产日韩精品| 午夜激情久久久| 亚洲h在线观看| 亚洲成人av福利| 天堂久久一区二区三区| 日韩经典一区二区| 奇米精品一区二区三区在线观看 | 欧美日韩一区 二区 三区 久久精品| thepron国产精品| 91欧美激情一区二区三区成人| thepron国产精品| 一本到高清视频免费精品| 欧美怡红院视频| 欧美一区二区三区的| 久久精品一区八戒影视| 亚洲欧美日韩一区二区三区在线观看| 亚洲激情自拍偷拍| 日本不卡免费在线视频| 精品一区二区免费在线观看| 成年人国产精品| 欧美日韩在线播| 精品国产欧美一区二区| 亚洲欧洲av在线| 日韩成人午夜电影| 国产成人高清在线| 欧美三级三级三级| 久久久久综合网| 亚洲男人天堂av网| 麻豆一区二区在线| 99麻豆久久久国产精品免费 | 亚洲一卡二卡三卡四卡| 日日欢夜夜爽一区| 成人网男人的天堂| 欧美日韩国产一级| 亚洲欧美另类小说视频| 日韩精品每日更新| 成人一区二区三区中文字幕| 欧美福利一区二区| 国产精品三级电影| 极品少妇xxxx精品少妇偷拍| 在线观看免费视频综合| 欧美高清在线一区| 性做久久久久久| 99re这里只有精品首页| 欧美一区二区大片| 亚洲精品视频免费观看| 国产在线播精品第三| 欧美日韩日日摸| 中文字幕在线播放不卡一区| 久久精品av麻豆的观看方式| 在线观看国产一区二区| 欧美国产日韩亚洲一区| 免播放器亚洲一区| 欧美中文字幕不卡| 国产精品美女久久久久aⅴ国产馆| 免费高清在线一区| 欧美日韩成人在线| 亚洲自拍偷拍欧美| av一区二区三区四区| 久久久综合精品| 久99久精品视频免费观看| 欧美日韩视频第一区| 伊人性伊人情综合网| 成人精品gif动图一区| 亚洲精品一区二区三区在线观看| 天天av天天翘天天综合网色鬼国产| eeuss鲁一区二区三区| 日本一区二区三区国色天香| 激情六月婷婷久久| 欧美精品一区男女天堂| 精品制服美女久久| 久久亚洲二区三区| 免费在线观看视频一区| 日韩一二三区不卡| 日本色综合中文字幕| 666欧美在线视频| 日本不卡在线视频| 日韩欧美高清一区| 国产一区欧美日韩| 久久女同互慰一区二区三区| 国产乱码精品一区二区三区忘忧草| 精品国产污污免费网站入口| 激情文学综合丁香| 国产拍欧美日韩视频二区| 成人激情免费电影网址| 亚洲日本成人在线观看| 欧洲人成人精品| 日本女优在线视频一区二区| 精品欧美一区二区在线观看 | 欧美一区中文字幕| 国内不卡的二区三区中文字幕| 2023国产精华国产精品| 成人精品视频网站| 亚洲精品第1页| 欧美日韩一级大片网址| 美国av一区二区| 国产亚洲欧美日韩在线一区| 色综合天天视频在线观看| 五月天一区二区三区| 久久久久久久久久看片| 成人动漫av在线| 亚洲午夜私人影院| 日韩欧美国产精品一区| 国产东北露脸精品视频| 亚洲精品欧美在线| 欧美一级片在线看| 99精品久久99久久久久| 视频一区免费在线观看| 国产调教视频一区| 欧美久久久久久久久中文字幕| 久久99久久99小草精品免视看| 中文字幕一区不卡| 3751色影院一区二区三区| 国产精品一区二区不卡| 三级在线观看一区二区| 国产精品久久久久影院老司| 日韩精品一区二区在线观看| 色综合天天综合在线视频| 蜜桃精品视频在线| 亚洲综合999| 中文文精品字幕一区二区| 欧美精品三级在线观看| 91国产免费看| av福利精品导航| 另类小说一区二区三区| 一区二区三区高清不卡| 国产欧美视频在线观看| 91精品国产色综合久久不卡蜜臀| 成人黄色在线网站| 国产麻豆精品久久一二三| 婷婷中文字幕一区三区| 1024成人网| 国产精品第四页| 国产亚洲一本大道中文在线| 欧美一区二区三区的| 欧美乱妇一区二区三区不卡视频| 一本大道综合伊人精品热热| 成人午夜视频在线| 风间由美一区二区av101| 久久精品久久99精品久久| 午夜视频在线观看一区| 亚洲一区精品在线| 亚洲尤物在线视频观看| 亚洲精品久久久久久国产精华液| 亚洲国产精品v| 中文乱码免费一区二区| 国产精品毛片无遮挡高清| 日本一区二区三区四区在线视频| 久久精品夜夜夜夜久久| 国产欧美日韩激情| 中文字幕国产精品一区二区| 国产精品色在线观看| 国产精品久久免费看| 国产精品久久福利| 亚洲乱码国产乱码精品精小说| 综合久久一区二区三区| 亚洲欧美区自拍先锋| 亚洲一二三区不卡| 日本成人在线看| 国产精品性做久久久久久| 不卡视频一二三四| 色激情天天射综合网| 欧美四级电影在线观看| 欧美一区二区三区在线看| 欧美成人精品1314www| 久久久国产精品午夜一区ai换脸| 国产精品免费久久| 亚洲一级在线观看| 国内外精品视频| 欧美一级高清大全免费观看| 精品国产污污免费网站入口 | 国产精品无圣光一区二区| 国产精品无人区| 亚洲制服丝袜av| 另类小说综合欧美亚洲| 成人免费看的视频| 欧美日韩成人一区二区| 久久久久久久一区| 亚洲精品综合在线| 久久激情五月激情| 9色porny自拍视频一区二区| 欧美群妇大交群中文字幕| 日韩精品一区二区三区四区视频 | 欧美性极品少妇| 日韩一区二区精品| 国产精品视频看| 天天综合网 天天综合色| 国产一区二区中文字幕| 在线精品亚洲一区二区不卡| 日韩女同互慰一区二区| 樱桃视频在线观看一区| 国产综合久久久久久鬼色| 91麻豆国产福利精品| 欧美大片一区二区| 一区二区三区四区激情| 国产福利视频一区二区三区| 欧美精品一二三四|