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

📄 mt48lc4m32b2.v

📁 mt48lc4m32b2.v 是128M sdram 中典型设计。。可以借鉴。
💻 V
📖 第 1 页 / 共 5 页
字号:
    parameter hi_bank       = 3;    parameter depth         = 25'h100000;    reg PoweredUp = 1'b0;    reg CKEreg    = 1'b0;    reg CAS_Lat ;    reg CAS_Lat2;    reg [31:0] DataDrive = 32'bz ;    // Memory array declaration    integer Mem [0:(hi_bank+1)*depth*4-1];    // Type definition for state machine    parameter pwron           = 5'd0;    parameter precharge       = 5'd1;    parameter idle            = 5'd2;    parameter mode_set        = 5'd3;    parameter self_refresh    = 5'd4;    parameter auto_refresh    = 5'd5;    parameter pwrdwn          = 5'd6;    parameter bank_act        = 5'd7;    parameter bank_act_pwrdwn = 5'd8;    parameter write           = 5'd9;    parameter write_suspend   = 5'd10;    parameter read            = 5'd11;    parameter read_suspend    = 5'd12;    parameter write_auto_pre  = 5'd13;    parameter read_auto_pre   = 5'd14;    reg [4:0] statebank [hi_bank:0];    // Type definition for commands    parameter desl = 4'd0;    parameter nop  = 4'd1;    parameter bst  = 4'd2;    parameter rd   = 4'd3;    parameter writ = 4'd4;    parameter act  = 4'd5;    parameter pre  = 4'd6;    parameter mrs  = 4'd7;    parameter ref  = 4'd8;    reg [3:0] command = desl;    // burst type    parameter sequential = 1'b0;    parameter interleave = 1'b1;    reg Burst ;    // write burst mode    parameter programmed = 1'b0;    parameter single     = 1'b1;    reg WB ;    //burst sequences    integer  intab [0:63];    reg [19:0] MemAddr [hi_bank:0];    integer BurstCnt   [hi_bank:0];    integer StartAddr  [hi_bank:0];    integer BurstInc   [hi_bank:0];    integer BaseLoc    [hi_bank:0];    integer Loc;    integer BurstLen;    integer Burst_Bits;    reg written = 1'b0;    reg chip_en = 1'b0;    integer cur_bank;    reg [11:0] ModeReg ;    integer Ref_Cnt = 0;    time Next_Ref = 0;    reg [8*8:1] BankString ;    reg Viol = 1'b0;    reg [31:0] DataDriveOut = 32'bz;    reg [31:0] DataDrive1 = 32'bz;    reg [31:0] DataDrive2 = 32'bz;    reg [31:0] DataDrive3 = 32'bz;    reg DQM0_reg0 ;    reg DQM0_reg1 ;    reg DQM0_reg2 ;    reg DQM1_reg0 ;    reg DQM1_reg1 ;    reg DQM1_reg2 ;    reg DQM2_reg0 ;    reg DQM2_reg1 ;    reg DQM2_reg2 ;    reg DQM3_reg0 ;    reg DQM3_reg1 ;    reg DQM3_reg2 ;    // tdevice values: values for internal delays    time tdevice_TRC   = 0;    time tdevice_TRCAR = 0;    time tdevice_TRCD  = 0;    time tdevice_TRP   = 0;    time tdevice_TWR   = 0;    ///////////////////////////////////////////////////////////////////////////    //Interconnect Path Delay Section    ///////////////////////////////////////////////////////////////////////////    buf   (A11_ipd, A11);    buf   (A10_ipd, A10);    buf   (A9_ipd , A9 );    buf   (A8_ipd , A8 );    buf   (A7_ipd , A7 );    buf   (A6_ipd , A6 );    buf   (A5_ipd , A5 );    buf   (A4_ipd , A4 );    buf   (A3_ipd , A3 );    buf   (A2_ipd , A2 );    buf   (A1_ipd , A1 );    buf   (A0_ipd , A0 );    buf   (DQ31_ipd , DQ31 );    buf   (DQ30_ipd , DQ30 );    buf   (DQ29_ipd , DQ29 );    buf   (DQ28_ipd , DQ28 );    buf   (DQ27_ipd , DQ27 );    buf   (DQ26_ipd , DQ26 );    buf   (DQ25_ipd , DQ25 );    buf   (DQ24_ipd , DQ24 );    buf   (DQ23_ipd , DQ23 );    buf   (DQ22_ipd , DQ22 );    buf   (DQ21_ipd , DQ21 );    buf   (DQ20_ipd , DQ20 );    buf   (DQ19_ipd , DQ19 );    buf   (DQ18_ipd , DQ18 );    buf   (DQ17_ipd , DQ17 );    buf   (DQ16_ipd , DQ16 );    buf   (DQ15_ipd , DQ15 );    buf   (DQ14_ipd , DQ14 );    buf   (DQ13_ipd , DQ13 );    buf   (DQ12_ipd , DQ12 );    buf   (DQ11_ipd , DQ11 );    buf   (DQ10_ipd , DQ10 );    buf   (DQ9_ipd  , DQ9 );    buf   (DQ8_ipd  , DQ8 );    buf   (DQ7_ipd  , DQ7 );    buf   (DQ6_ipd  , DQ6 );    buf   (DQ5_ipd  , DQ5 );    buf   (DQ4_ipd  , DQ4 );    buf   (DQ3_ipd  , DQ3 );    buf   (DQ2_ipd  , DQ2 );    buf   (DQ1_ipd  , DQ1 );    buf   (DQ0_ipd  , DQ0 );    buf   (CASNeg_ipd, CASNeg);    buf   (RASNeg_ipd, RASNeg);    buf   (BA0_ipd   , BA0   );    buf   (BA1_ipd   , BA1   );    buf   (DQM0_ipd  , DQM0  );    buf   (DQM1_ipd  , DQM1  );    buf   (DQM2_ipd  , DQM2  );    buf   (DQM3_ipd  , DQM3  );    buf   (CLK_ipd   , CLK   );    buf   (CKE_ipd   , CKE   );    buf   (WENeg_ipd , WENeg );    buf   (CSNeg_ipd , CSNeg );    ///////////////////////////////////////////////////////////////////////////    // Propagation  delay Section    ///////////////////////////////////////////////////////////////////////////    nmos   (DQ31 ,   DQ31_zd  , 1);    nmos   (DQ30 ,   DQ30_zd  , 1);    nmos   (DQ29 ,   DQ29_zd  , 1);    nmos   (DQ28 ,   DQ28_zd  , 1);    nmos   (DQ27 ,   DQ27_zd  , 1);    nmos   (DQ26 ,   DQ26_zd  , 1);    nmos   (DQ25 ,   DQ25_zd  , 1);    nmos   (DQ24 ,   DQ24_zd  , 1);    nmos   (DQ23 ,   DQ23_zd  , 1);    nmos   (DQ22 ,   DQ22_zd  , 1);    nmos   (DQ21 ,   DQ21_zd  , 1);    nmos   (DQ20 ,   DQ20_zd  , 1);    nmos   (DQ19 ,   DQ19_zd  , 1);    nmos   (DQ18 ,   DQ18_zd  , 1);    nmos   (DQ17 ,   DQ17_zd  , 1);    nmos   (DQ16 ,   DQ16_zd  , 1);    nmos   (DQ15 ,   DQ15_zd  , 1);    nmos   (DQ14 ,   DQ14_zd  , 1);    nmos   (DQ13 ,   DQ13_zd  , 1);    nmos   (DQ12 ,   DQ12_zd  , 1);    nmos   (DQ11 ,   DQ11_zd  , 1);    nmos   (DQ10 ,   DQ10_zd  , 1);    nmos   (DQ9  ,   DQ9_zd   , 1);    nmos   (DQ8  ,   DQ8_zd   , 1);    nmos   (DQ7  ,   DQ7_zd   , 1);    nmos   (DQ6  ,   DQ6_zd   , 1);    nmos   (DQ5  ,   DQ5_zd   , 1);    nmos   (DQ4  ,   DQ4_zd   , 1);    nmos   (DQ3  ,   DQ3_zd   , 1);    nmos   (DQ2  ,   DQ2_zd   , 1);    nmos   (DQ1  ,   DQ1_zd   , 1);    nmos   (DQ0  ,   DQ0_zd   , 1);    wire deg;    wire chip_act;    assign chip_act = chip_en;    wire chip_act_deg;    assign chip_act_deg = chip_act && deg;    wire cas_latency1;    wire cas_latency2;    wire cas_latency3;    assign cas_latency1 = CAS_Lat && ~CAS_Lat2;    assign cas_latency2 = ~CAS_Lat && CAS_Lat2;    assign cas_latency3 = CAS_Lat && CAS_Lat2;    specify        // tipd delays: interconnect path delays, mapped to input port delays.        // In Verilog it is not necessary to declare any tipd delay variables,        // they can be taken from SDF file        // With all the other delays real delays would be taken from SDF file        // tpd delays        specparam   tpd_CLK_DQ1    = 1;        specparam   tpd_CLK_DQ2    = 1;        specparam   tpd_CLK_DQ3    = 1;        // tpw values: pulse widths        specparam   tpw_CLK_posedge = 1;        specparam   tpw_CLK_negedge = 1;        // tsetup values: setup times        specparam   tsetup_DQ0_CLK  = 1;  // tDS        // thold values: hold times        specparam   thold_DQ0_CLK   = 1;  // tDH        // tperiod_min: minimum clock period = 1/max freq        specparam    tperiod_CLK_cl0_eq_1_posedge        = 1; //tCK        specparam    tperiod_CLK_cl1_eq_1_posedge        = 1;        specparam    tperiod_CLK_cl2_eq_1_posedge        = 1;        // tdevice values: values for internal delays        specparam         tdevice_REF      = 15625 ;        specparam         tdevice_TRASmin  = 42;        specparam         tdevice_TRASmax  = 120000;        ///////////////////////////////////////////////////////////////////////        // Input Port Delays don't require Verilog description        ///////////////////////////////////////////////////////////////////////        // Path delays                                                       //        ///////////////////////////////////////////////////////////////////////        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ0) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ1) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ2) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ3) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ4) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ5) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ6) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ7) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ8) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ9) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ10) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ11) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ12) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ13) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ14) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ15) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ16) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ17) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ18) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ19) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ20) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ21) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ22) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ23) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ24) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ25) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ26) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ27) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ28) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ29) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ30) = tpd_CLK_DQ1;        if (CAS_Lat && ~CAS_Lat2) (CLK *> DQ31) = tpd_CLK_DQ1;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ0) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ1) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ2) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ3) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ4) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ5) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ6) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ7) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ8) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ9) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ10) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ11) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ12) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ13) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ14) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ15) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ16) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ17) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ18) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ19) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ20) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ21) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ22) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ23) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ24) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ25) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ26) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ27) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ28) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ29) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ30) = tpd_CLK_DQ2;        if (~CAS_Lat && CAS_Lat2) (CLK *> DQ31) = tpd_CLK_DQ2;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ0) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ1) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ2) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ3) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ4) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ5) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ6) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ7) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ8) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ9) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ10) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ11) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ12) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ13) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ14) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ15) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ16) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ17) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ18) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ19) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ20) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ21) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ22) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ23) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ24) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ25) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ26) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ27) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ28) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ29) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ30) = tpd_CLK_DQ3;        if (CAS_Lat && CAS_Lat2) (CLK *> DQ31) = tpd_CLK_DQ3;        ////////////////////////////////////////////////////////////////////////        // Timing Check Section        ////////////////////////////////////////////////////////////////////////        $setup (BA0 , posedge CLK &&& chip_act, tsetup_DQ0_CLK, Viol);

⌨️ 快捷键说明

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