📄 mt48lc4m32b2.v
字号:
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 + -