📄 ddr2_model.v
字号:
/****************************************************************************************** File Name: ddr2_model.v* Version: 5.30* Model: BUS Functional** Dependencies: ddr2_model_parameters.vh** Description: Micron SDRAM DDR2 (Double Data Rate 2)** Limitation: - doesn't check for average refresh timings* - positive ck and ck_n edges are used to form internal clock* - positive dqs and dqs_n edges are used to latch data* - test mode is not modeled** Note: - Set simulator resolution to "ps" accuracy* - Set Debug = 0 to disable $display messages** 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* ---------------------------------------------------------------------------------------* 1.00 JMK 07/29/03 Initial Release* 1.10 JMK 08/09/03 Timing Parameter updates to tIS, tIH, tDS, tDH* 2.20 JMK 08/07/03 General cleanup* 2.30 JMK 11/26/03 Added CL_MIN, CL_MAX, wl_min and wl_max parameters.* Added AL_MIN and AL_MAX parameters.* Removed support for OCD.* 2.40 JMK 01/15/04 Removed verilog 2001 constructs.* 2.50 JMK 01/29/04 Removed tRP checks during Precharge command.* 2.60 JMK 04/20/04 Fixed tWTR check.* 2.70 JMK 04/30/04 Added tRFC maximum check.* Combined Self Refresh and Power Down always blocks.* Added Reset Function (CKE LOW Anytime).* 2.80 JMK 08/19/04 Precharge is treated as NOP when bank is not active. * Added checks for tRAS, tWR, tRTP to any bank during Pre-All.* tRFC maximum violation will only display one time.* 2.90 JMK 11/05/04 Fixed DQS checking during write.* Fixed false tRFC max assertion during power up and self ref.* Added warning for 200us CKE low time during initialization.* Added -3, -3E, and -37V speed grades to ddr2_parameters.v* 3.00 JMK 04/22/05 Removed ODT off requirement during power down.* Added tAOND, tAOFD, tANPD, tAXPD, tAONPD, and tAOFPD parameters.* Added ODT status messages.* Updated the initialization sequence.* Disable ODT and CLK pins during self refresh.* Disable cmd and addr pins during power down and self refresh.* 3.10 JMK 06/07/05 Disable trpa checking if the part does not have 8 banks.* Changed tAXPD message from error to a warning.* Added tDSS checking.* Removed tDQSL checking during tWPRE and tWPST.* Fixed a burst order error during writes.* Renamed parameters file with .vh extension.* 3.20 JMK 07/18/05 Removed 14 tCK requirement from LMR to READ.* 3.30 JMK 08/03/05 Added check for interrupting a burst with auto precharge.* 4.00 JMK 11/21/05 Parameter names all UPPERCASE, signal names all lowercase.* Clock jitter can be tolerated within specification range.* Clock frequency is sampled from the CK pin.* Scaleable up to 64 DQ and 16 DQS bits.* Read data can be randomly skewed using RANDOM_OUT_DELAY.* Parameterized read and write DQS, and read DQ.* Initialization can be bypassed using initialize task.* 4.10 JMK 11/30/05 Fixed compile errors when `MAX_MEM was defined.* 4.20 JMK 12/09/05 Fixed memory addressing error when `MAX_MEM was defined.* 4.30 JMK 02/15/06 Added dummy write to initialization sequence.* Removed tWPST maximum checking.* Rising dqs_n edge latches data when enabled in EMR.* Fixed a sign error in the tJIT(cc) calculation.* 4.40 JMK 02/16/06 Fixed dummy write when`MAX_MEM was defined.* 4.50 JMK 02/27/06 Fixed extra tDQSS assertions.* Fixed tRCD and tWTR checking.* Errors entering Power Down or Self Refresh will cause reset.* Ignore dqs_n when disabled in EMR.* 5.00 JMK 04/24/06 Test stimulus now included from external file (subtest.vh)* Fixed tRFC max assertion during self refresh.* Fixed tANPD checking during Power Down.* Removed dummy write from initialization sequence.* 5.01 JMK 04/28/06 Fixed Auto Precharge to Load Mode, Refresh and Self Refresh.* Removed Auto Precharge error message during Power Down Enter.* 5.10 JMK 07/26/06 Created internal clock using ck and ck_n.* RDQS can only be enabled in EMR for x8 configurations.* CAS latency is checked vs frequency when DLL locks.* tMOD changed from tCK units to ns units.* Added 50 Ohm setting for Rtt in EMR.* Improved checking of DQS during writes.* 5.20 JMK 10/02/06 Fixed DQS checking for interrupting write to write and x16.* 5.30 JMK 05/25/07 Fixed checking for 0-Z transition on write postamble.****************************************************************************************/// DO NOT CHANGE THE TIMESCALE// MAKE SURE YOUR SIMULATOR USES "PS" RESOLUTION`timescale 1ps / 1psmodule ddr2_model ( ck, ck_n, cke, cs_n, ras_n, cas_n, we_n, dm_rdqs, ba, addr, dq, dqs, dqs_n, rdqs_n, odt); `include "ddr2_model_parameters.vh" // text macros `define DQ_PER_DQS DQ_BITS/DQS_BITS `define BANKS (1<<BA_BITS) `define MAX_BITS (BA_BITS+ROW_BITS+COL_BITS-BL_BITS) `define MAX_SIZE (1<<(BA_BITS+ROW_BITS+COL_BITS-BL_BITS)) `define MEM_SIZE (1<<MEM_BITS) `define MAX_PIPE 2*(AL_MAX + CL_MAX) // Declare Ports input ck; input ck_n; input cke; input cs_n; input ras_n; input cas_n; input we_n; inout [DM_BITS-1:0] dm_rdqs; input [BA_BITS-1:0] ba; input [ADDR_BITS-1:0] addr; inout [DQ_BITS-1:0] dq; inout [DQS_BITS-1:0] dqs; inout [DQS_BITS-1:0] dqs_n; output [DQS_BITS-1:0] rdqs_n; input odt; // clock jitter real tck_avg; time tck_sample [TDLLK-1:0]; time tch_sample [TDLLK-1:0]; time tcl_sample [TDLLK-1:0]; time tck_i; time tch_i; time tcl_i; real tch_avg; real tcl_avg; time tm_ck_pos; time tm_ck_neg; real tjit_per_rtime; integer tjit_cc_time; real terr_nper_rtime; // clock skew real out_delay; integer dqsck [DQS_BITS-1:0]; integer dqsck_min; integer dqsck_max; integer dqsq_min; integer dqsq_max; integer seed; // Mode Registers reg burst_order; reg [BL_BITS:0] burst_length; integer cas_latency; integer additive_latency; reg dll_reset; reg dll_locked; reg dll_en; integer write_recovery; reg low_power; reg [1:0] odt_rtt; reg odt_en; reg [2:0] ocd; reg dqs_n_en; reg rdqs_en; reg out_en; integer read_latency; integer write_latency; // cmd encoding parameter LOAD_MODE = 4'b0000, REFRESH = 4'b0001, PRECHARGE = 4'b0010, ACTIVATE = 4'b0011, WRITE = 4'b0100, READ = 4'b0101, NOP = 4'b0111, PWR_DOWN = 4'b1000, SELF_REF = 4'b1001 ; reg [8*9-1:0] cmd_string [9:0]; initial begin cmd_string[LOAD_MODE] = "Load Mode"; cmd_string[REFRESH ] = "Refresh "; cmd_string[PRECHARGE] = "Precharge"; cmd_string[ACTIVATE ] = "Activate "; cmd_string[WRITE ] = "Write "; cmd_string[READ ] = "Read "; cmd_string[NOP ] = "No Op "; cmd_string[PWR_DOWN ] = "Pwr Down "; cmd_string[SELF_REF ] = "Self Ref "; end // command state reg [`BANKS-1:0] active_bank; reg [`BANKS-1:0] auto_precharge_bank;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -