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

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

?? ddr.v

?? arm控制FPGA的DDR測試代碼
?? V
?? 第 1 頁 / 共 4 頁
字號:
/****************************************************************************************
*
*    File Name:  ddr.v
*      Version:  5.7
*        Model:  BUS Functional
*
* Dependencies:  ddr_parameters.v
*
*  Description:  Micron SDRAM DDR (Double Data Rate)
*
*   Limitation:  - Doesn't check for 8K-cycle refresh.
*                - Doesn't check power-down entry/exit
*                - Doesn't check self-refresh entry/exit.
*
*         Note:  - Set simulator resolution to "ps" accuracy
*                - Set Debug = 0 to disable $display messages
*                - Model assume Clk and Clk# crossing at both edge
*
*   Disclaimer   This software code and all associated documentation, comments or other 
*  of Warranty:  information (collectively "Software") is provided "AS IS" without 
*                warranty of any kind. MICRON TECHNOLOGY, INC. ("MTI") EXPRESSLY 
*                DISCLAIMS ALL WARRANTIES EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
*                TO, NONINFRINGEMENT OF THIRD PARTY RIGHTS, AND ANY IMPLIED WARRANTIES 
*                OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. MTI DOES NOT 
*                WARRANT THAT THE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE 
*                OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE. 
*                FURTHERMORE, MTI DOES NOT MAKE ANY REPRESENTATIONS REGARDING THE USE OR 
*                THE RESULTS OF THE USE OF THE SOFTWARE IN TERMS OF ITS CORRECTNESS, 
*                ACCURACY, RELIABILITY, OR OTHERWISE. THE ENTIRE RISK ARISING OUT OF USE 
*                OR PERFORMANCE OF THE SOFTWARE REMAINS WITH YOU. IN NO EVENT SHALL MTI, 
*                ITS AFFILIATED COMPANIES OR THEIR SUPPLIERS BE LIABLE FOR ANY DIRECT, 
*                INDIRECT, CONSEQUENTIAL, INCIDENTAL, OR SPECIAL DAMAGES (INCLUDING, 
*                WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION, 
*                OR LOSS OF INFORMATION) ARISING OUT OF YOUR USE OF OR INABILITY TO USE 
*                THE SOFTWARE, EVEN IF MTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
*                DAMAGES. Because some jurisdictions prohibit the exclusion or 
*                limitation of liability for consequential or incidental damages, the 
*                above limitation may not apply to you.
*
*                Copyright 2003 Micron Technology, Inc. All rights reserved.
*
* Rev  Author Date        Changes
* ---  ------ ----------  ---------------------------------------
* 2.1  SPH    03/19/2002  - Second Release
*                         - Fix tWR and several incompatability
*                           between different simulators
* 3.0  TFK    02/18/2003  - Added tDSS and tDSH timing checks.
*                         - Added tDQSH and tDQSL timing checks.
* 3.1  CAH    05/28/2003  - update all models to release version 3.1
*                           (no changes to this model)
* 3.2  JMK    06/16/2003  - updated all DDR400 models to support CAS Latency 3
* 3.3  JMK    09/11/2003  - Added initialization sequence checks.
* 4.0  JMK    12/01/2003  - Grouped parameters into "ddr_parameters.v"
*                         - Fixed tWTR check
* 4.1  JMK    01/14/2004  - Grouped specify parameters by speed grade
*                         - Fixed mem_sizes parameter
* 4.2  JMK    03/19/2004  - Fixed pulse width checking on Dqs
* 4.3  JMK    04/27/2004  - Changed BL wire size in tb module
*                         - Changed Dq_buf size to [15:0]
* 5.0  JMK    06/16/2004  - Added read to write checking.
*                         - Added read with precharge truncation to write checking.
*                         - Added associative memory array to reduce memory consumption.
*                         - Added checking for required DQS edges during write.
* 5.1  JMK    08/16/2004  - Fixed checking for required DQS edges during write.
*                         - Fixed wdqs_valid window.
* 5.2  JMK    09/24/2004  - Read or Write without activate will be ignored.
* 5.3  JMK    10/27/2004  - Added tMRD checking during Auto Refresh and Activate.
*                         - Added tRFC checking during Load Mode and Precharge.
* 5.4  JMK    12/13/2004  - The model will not respond to illegal command sequences.
* 5.5  SPH    01/13/2005  - The model will issue a halt on illegal command sequences.
*      JMK    02/11/2005  - Changed the display format for numbers to hex.
* 5.6  JMK    04/22/2005  - Fixed Write with auto precharge calculation.
* 5.7  JMK    08/05/2005  - Changed conditions for read with precharge truncation error.
*                         - Renamed parameters file with .vh extension.
****************************************************************************************/

// DO NOT CHANGE THE TIMESCALE
// MAKE SURE YOUR SIMULATOR USE "PS" RESOLUTION
`timescale 1ns / 1ps

module ddr (Dq, Dqs, Addr, Ba, Clk, Clk_n, Cke, Cs_n, Ras_n, Cas_n, We_n, Dm);

       parameter tCK              =     5.0; // tCK    ns    Nominal Clock Cycle Time
    parameter tDQSQ            =     0.4; // tDQSS  ns    DQS-DQ skew, DQS to last DQ valid, per group, per access
    parameter tMRD             =    10.0; // tMRD   ns    Load Mode Register command cycle time
    parameter tRAP             =    15.0; // tRAP   ns    ACTIVE to READ with Auto precharge command
    parameter tRAS             =    40.0; // tRAS   ns    Active to Precharge command time
    parameter tRC              =    55.0; // tRC    ns    Active to Active/Auto Refresh command time
    parameter tRFC             =    70.0; // tRFC   ns    Refresh to Refresh Command interval time
    parameter tRCD             =    15.0; // tRCD   ns    Active to Read/Write command time
    parameter tRP              =    15.0; // tRP    ns    Precharge command period
    parameter tRRD             =    10.0; // tRRD   ns    Active bank a to Active bank b command time
    parameter tWR              =    15.0; // tWR    ns    Write recovery time

     parameter ADDR_BITS        =      13; // Set this parameter to control how many Address bits are used
    parameter DQ_BITS          =      16; // Set this parameter to control how many Data bits are used
    parameter DQS_BITS         =       2; // Set this parameter to control how many DQS bits are used
    parameter DM_BITS          =       2; // Set this parameter to control how many DM bits are used
    parameter COL_BITS         =       9; // Set this parameter to control how many Column bits are used



    parameter full_mem_bits    = 2 + 13 + 9 ; // Set this parameter to control how many unique addresses are used
    parameter part_mem_bits    = 10;                   // Set this parameter to control how many unique addresses are used

    parameter no_halt          =       1; // If set to 1, the model won't halt on command sequence/major errors
    parameter Debug            =       1; // Turn on debug message


    // Port Declarations
    inout       [DQ_BITS - 1 : 0] Dq;
    inout      [DQS_BITS - 1 : 0] Dqs;
    input     [ADDR_BITS - 1 : 0] Addr;
    input                 [1 : 0] Ba;
    input                         Clk;
    input                         Clk_n;
    input                         Cke;
    input                         Cs_n;
    input                         Ras_n;
    input                         Cas_n;
    input                         We_n;
    input       [DM_BITS - 1 : 0] Dm;

    // Internal Wires (fixed width)
    wire                 [15 : 0] Dq_in;
    wire                  [1 : 0] Dqs_in;
    wire                  [1 : 0] Dm_in;
    
    assign Dq_in   [DQ_BITS - 1 : 0] = Dq;
    assign Dqs_in [DQS_BITS - 1 : 0] = Dqs;
    assign Dm_in   [DM_BITS - 1 : 0] = Dm;

    // Data pair
    reg                  [15 : 0] dq_rise;
    reg                   [1 : 0] dm_rise;
    reg                  [15 : 0] dq_fall;
    reg                   [1 : 0] dm_fall;
    reg                   [3 : 0] dm_pair;
    reg                  [15 : 0] Dq_buf;
    
    // Mode Register
    reg       [ADDR_BITS - 1 : 0] Mode_reg;

    // Internal System Clock
    reg                           CkeZ, Sys_clk;

    // Internal Dqs initialize
    reg                           Dqs_int;

    // Dqs buffer
    reg        [DQS_BITS - 1 : 0] Dqs_out;

    // Dq buffer
    reg         [DQ_BITS - 1 : 0] Dq_out;

    // Read pipeline variables
    reg                           Read_cmnd [0 : 6];
    reg                   [1 : 0] Read_bank [0 : 6];
    reg        [COL_BITS - 1 : 0] Read_cols [0 : 6];

    // Write pipeline variables
    reg                           Write_cmnd [0 : 3];
    reg                   [1 : 0] Write_bank [0 : 3];
    reg        [COL_BITS - 1 : 0] Write_cols [0 : 3];

    // Auto precharge variables
    reg                           Read_precharge  [0 : 3];
    reg                           Write_precharge [0 : 3];
    integer                       Count_precharge [0 : 3];

    // Manual precharge variables
    reg                           A10_precharge  [0 : 6];
    reg                   [1 : 0] Bank_precharge [0 : 6];
    reg                           Cmnd_precharge [0 : 6];

    // Burst terminate variables
    reg                           Cmnd_bst [0 : 6];

    // Memory Banks
`ifdef FULL_MEM
    reg         [DQ_BITS - 1 : 0] mem_array  [0 : (1<<full_mem_bits)-1];
`else
    reg         [DQ_BITS - 1 : 0] mem_array  [0 : (1<<part_mem_bits)-1];
    reg   [full_mem_bits - 1 : 0] addr_array [0 : (1<<part_mem_bits)-1];
    reg   [part_mem_bits     : 0] mem_used;
    initial mem_used = 0;
`endif

    // Dqs edge checking
    integer i;
    reg  [1:0] expect_pos_dqs;
    reg  [1:0] expect_neg_dqs;

    // Burst counter
    reg        [COL_BITS - 1 : 0] Burst_counter;

    // Precharge variables
    reg                           Pc_b0, Pc_b1, Pc_b2, Pc_b3;

    // Activate variables
    reg                           Act_b0, Act_b1, Act_b2, Act_b3;

    // Data IO variables
    reg                           Data_in_enable;
    reg                           Data_out_enable;

    // Internal address mux variables
    reg                   [1 : 0] Prev_bank;
    reg                   [1 : 0] Bank_addr;
    reg        [COL_BITS - 1 : 0] Cols_addr, Cols_brst, Cols_temp;
    reg       [ADDR_BITS - 1 : 0] Rows_addr;
    reg       [ADDR_BITS - 1 : 0] B0_row_addr;
    reg       [ADDR_BITS - 1 : 0] B1_row_addr;
    reg       [ADDR_BITS - 1 : 0] B2_row_addr;
    reg       [ADDR_BITS - 1 : 0] B3_row_addr;

    // DLL Reset variable
    reg                           DLL_enable;
    reg                           DLL_reset;
    reg                           DLL_done;
    integer                       DLL_count;
    integer                       aref_count;
    integer                       Prech_count;
    reg                           power_up_done;

    // Write DQS for tDSS, tDSH, tDQSH, tDQSL checks
    wire      wdqs_valid = Write_cmnd[2] || Write_cmnd[1] || Data_in_enable;

    // Commands Decode
    wire      Active_enable   = ~Cs_n & ~Ras_n &  Cas_n &  We_n;
    wire      Aref_enable     = ~Cs_n & ~Ras_n & ~Cas_n &  We_n;
    wire      Burst_term      = ~Cs_n &  Ras_n &  Cas_n & ~We_n;
    wire      Ext_mode_enable = ~Cs_n & ~Ras_n & ~Cas_n & ~We_n &  Ba[0] & ~Ba[1];
    wire      Mode_reg_enable = ~Cs_n & ~Ras_n & ~Cas_n & ~We_n & ~Ba[0] & ~Ba[1];
    wire      Prech_enable    = ~Cs_n & ~Ras_n &  Cas_n & ~We_n;
    wire      Read_enable     = ~Cs_n &  Ras_n & ~Cas_n &  We_n;
    wire      Write_enable    = ~Cs_n &  Ras_n & ~Cas_n & ~We_n;

    // Burst Length Decode
    wire [3:0] burst_length = 1 << (Mode_reg[2:0]);
    reg  [3:0] read_precharge_truncation;

    // CAS Latency Decode
    wire [2:0] cas_latency_x2 = (Mode_reg[6:4] === 3'o6) ? 5 : 2*Mode_reg[6:4];

    // DQS Buffer
    assign    Dqs = Dqs_out;

    // DQ Buffer
    assign    Dq  = Dq_out;

    // Timing Check
    time      MRD_chk;
    time      RFC_chk;
    time      RRD_chk;
    time      RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3;
    time      RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3;
    time      RC_chk0, RC_chk1, RC_chk2, RC_chk3;
    time      RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3;
    time      RP_chk0, RP_chk1, RP_chk2, RP_chk3;
    time      WR_chk0, WR_chk1, WR_chk2, WR_chk3;

    initial begin
        CkeZ = 1'b0;
        Sys_clk = 1'b0;
        {Pc_b0, Pc_b1, Pc_b2, Pc_b3} = 4'b0000;
        {Act_b0, Act_b1, Act_b2, Act_b3} = 4'b1111;
        Dqs_int = 1'b0;
        Dqs_out = {DQS_BITS{1'bz}};
        Dq_out = {DQ_BITS{1'bz}};
        Data_in_enable = 1'b0;
        Data_out_enable = 1'b0;
        DLL_enable = 1'b0;
        DLL_reset = 1'b0;
        DLL_done = 1'b0;
        DLL_count = 0;
        aref_count = 0;
        Prech_count = 0;
        power_up_done = 0;
        MRD_chk = 0;
        RFC_chk = 0;
        RRD_chk = 0;
        {RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3} = 0;
        {RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3} = 0;
        {RC_chk0, RC_chk1, RC_chk2, RC_chk3} = 0;
        {RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3} = 0;
        {RP_chk0, RP_chk1, RP_chk2, RP_chk3} = 0;
        {WR_chk0, WR_chk1, WR_chk2, WR_chk3} = 0;
        $timeformat (-9, 3, " ns", 12);
    end

    // System Clock
    always begin
        @ (posedge Clk) begin
            Sys_clk = CkeZ;
            CkeZ = Cke;
        end
        @ (negedge Clk) begin
            Sys_clk = 1'b0;
        end
    end

    // Check to make sure that we have a Deselect or NOP command on the bus when CKE is brought high
    always @(Cke) begin
        if (Cke === 1'b1) begin
            if (!((Cs_n) || (~Cs_n &  Ras_n & Cas_n &  We_n))) begin
                $display ("%m: at time %t MEMORY ERROR:  You must have a Deselect or NOP command applied", $time);
                $display ("%m:           when the Clock Enable is brought High.");
            end 
        end
    end

    // Check the initialization sequence
    initial begin
        @ (posedge Cke) begin
            @ (posedge DLL_enable) begin
                aref_count = 0;
                @ (posedge DLL_reset) begin
                    @ (Prech_count) begin
                        if (aref_count >= 2) begin
                            if (Debug) $display ("%m: at time %t MEMORY:  Power Up and Initialization Sequence is complete", $time);
                            power_up_done = 1;
                        end else begin
                            aref_count = 0;
                            @ (aref_count >= 2) begin
                                if (Debug) $display ("%m: at time %t MEMORY:  Power Up and Initialization Sequence is complete", $time);
                                power_up_done = 1;
                            end
                        end
                    end
                end
            end
        end
    end

    // Write Memory
    task write_mem;
        input [full_mem_bits - 1 : 0] addr;
        input       [DQ_BITS - 1 : 0] data;
        reg       [part_mem_bits : 0] i;
        begin
`ifdef FULL_MEM
            mem_array[addr] = data;
`else
            begin : loop
                for (i = 0; i < mem_used; i = i + 1) begin
                    if (addr_array[i] === addr) begin
                        disable loop;
                    end
                end
            end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美的一区二区| 色综合久久中文字幕| 亚洲成人免费av| 亚洲午夜免费视频| 悠悠色在线精品| 亚洲综合色视频| 亚洲成人黄色小说| 日韩精品一二区| 蜜乳av一区二区三区| 久久超级碰视频| 国产老肥熟一区二区三区| 国产精品香蕉一区二区三区| 国产曰批免费观看久久久| 国产精品一区二区久激情瑜伽| 国产一区在线观看视频| 成人少妇影院yyyy| 色吊一区二区三区| 91精品在线观看入口| 日韩欧美在线1卡| 久久久久国产免费免费| 国产精品久久一卡二卡| 亚洲国产综合色| 久久er99精品| 色婷婷av久久久久久久| 91精品国产免费| 中文字幕乱码日本亚洲一区二区 | av在线播放一区二区三区| 91精彩视频在线观看| 欧美久久久久久久久久| 久久日韩精品一区二区五区| 中文字幕一区免费在线观看| 亚洲成人激情av| 国产69精品久久777的优势| 在线观看视频一区二区欧美日韩| 欧美在线你懂的| 日韩欧美久久久| 国产精品传媒视频| 青青草97国产精品免费观看| 国产69精品久久777的优势| 欧美性感一区二区三区| 久久精品无码一区二区三区| 亚洲一区二区三区影院| 国产一区二区三区在线观看免费视频| av电影在线观看完整版一区二区| 欧美日韩国产片| 亚洲欧美综合在线精品| 美女网站一区二区| 欧美视频日韩视频在线观看| 国产精品你懂的在线| 舔着乳尖日韩一区| 97超碰欧美中文字幕| 欧美日韩久久久一区| 中文字幕一区二区三区色视频| 免费亚洲电影在线| 精品电影一区二区三区| 亚洲成av人片一区二区梦乃 | 色欧美片视频在线观看在线视频| 精品国产亚洲在线| 日韩电影在线免费看| 91在线视频免费观看| 久久久久高清精品| 精品一区二区在线视频| 欧美精品久久99| 一区二区三区在线观看视频| 99久久精品免费| 国产精品麻豆网站| 丁香婷婷综合色啪| 日本一区二区视频在线| 国产在线精品视频| 久久久久一区二区三区四区| 蜜桃视频第一区免费观看| 欧美肥妇毛茸茸| 日韩中文字幕区一区有砖一区| 色欧美片视频在线观看| 亚洲综合小说图片| 欧洲中文字幕精品| 亚洲精品高清视频在线观看| 91理论电影在线观看| 亚洲视频电影在线| 日本久久一区二区三区| 亚洲一区欧美一区| 在线播放中文字幕一区| 男人操女人的视频在线观看欧美| 在线精品视频一区二区| 亚洲二区在线视频| 日韩一区二区在线观看| 精品在线一区二区| 久久精品欧美一区二区三区不卡| 国产成人99久久亚洲综合精品| 中文字幕不卡在线观看| 成人高清视频在线观看| 亚洲精品免费一二三区| 欧美日韩亚洲综合| 久久99国产精品久久99| 国产欧美日韩视频在线观看| av中文一区二区三区| 夜夜精品浪潮av一区二区三区| 欧美色图一区二区三区| 日本aⅴ亚洲精品中文乱码| 精品国产成人在线影院| 国产盗摄女厕一区二区三区| 亚洲欧美精品午睡沙发| 欧美伦理电影网| 国产麻豆一精品一av一免费| 国产精品色哟哟网站| 日本高清不卡一区| 黄一区二区三区| 成人欧美一区二区三区1314 | 麻豆精品视频在线观看视频| 国产欧美日韩视频在线观看| 欧美日韩专区在线| 国产激情一区二区三区桃花岛亚洲| 国产精品久久久久久亚洲伦| 欧美老肥妇做.爰bbww| 国产精品一区二区三区网站| 一区二区三区免费看视频| 欧美v亚洲v综合ⅴ国产v| 99久久er热在这里只有精品66| 亚洲成人av一区二区| 国产欧美一区视频| 91.com在线观看| bt欧美亚洲午夜电影天堂| 奇米777欧美一区二区| 亚洲码国产岛国毛片在线| 亚洲精品一区二区三区精华液 | 日韩精品亚洲一区| 国产精品欧美极品| 欧美v日韩v国产v| 欧美日韩一区精品| 成人国产电影网| 国产高清不卡一区| 全国精品久久少妇| 亚洲国产综合91精品麻豆| 国产精品蜜臀在线观看| 欧美精品一区二区三区视频| 欧美日韩精品是欧美日韩精品| 国产精品88888| 精品一区二区三区免费观看| 舔着乳尖日韩一区| 亚洲大片一区二区三区| 亚洲国产精品传媒在线观看| 日韩精品一区二区三区四区| 99国产精品久| 亚洲超碰精品一区二区| 国产精品视频观看| 欧美日韩一级二级三级| 成人短视频下载| 国产福利电影一区二区三区| 日韩中文字幕亚洲一区二区va在线| 久久综合色鬼综合色| 2023国产一二三区日本精品2022| 欧美日韩黄色一区二区| 色综合色狠狠天天综合色| 国产一区二区三区黄视频 | 国产精品一区二区果冻传媒| 欧美aaaaaa午夜精品| 亚洲最新视频在线观看| 国产精品国产馆在线真实露脸| 精品久久久久久久久久久久久久久| 欧美日韩精品专区| 色婷婷一区二区| 91麻豆国产精品久久| 99久久精品国产精品久久| 国产酒店精品激情| 国产精品夜夜爽| 麻豆91精品91久久久的内涵| 亚洲bt欧美bt精品777| 国产精品久久久久影院老司| 亚洲色欲色欲www| 国产精品久久久久久久久免费丝袜| 欧美激情综合网| 久久久久九九视频| 综合久久久久久久| 亚洲天堂免费看| 日韩一区欧美小说| 中文字幕乱码日本亚洲一区二区| 久久综合资源网| 精品国产欧美一区二区| 精品精品欲导航| 国产欧美一区二区精品忘忧草| 日韩一区在线免费观看| 亚洲色大成网站www久久九九| 亚洲精品老司机| 亚洲精品成人在线| 日韩高清不卡在线| 韩国av一区二区三区四区 | 另类调教123区| 日本韩国精品一区二区在线观看| 色一情一乱一乱一91av| 91麻豆精品国产| 337p日本欧洲亚洲大胆精品| 国产日韩欧美亚洲| 偷拍与自拍一区| 免费视频最近日韩| 成人毛片老司机大片| 99久久伊人网影院| 欧美大片免费久久精品三p| 久久精品无码一区二区三区| 国产精品久久久久久福利一牛影视| 1区2区3区国产精品|