




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* File Name: ddr3.v* Version: 1.61* Model: BUS Functional* Dependencies: ddr3_parameters.vh* Description: Micron SDRAM DDR3 (Double Data Rate 3)* Limitation: - doesnt 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* - Duty Cycle Corrector is not modeled* - Temperature Compensated Self Refresh is not modeled* - DLL off 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* -* 0.41 JMK 05/12/06 Removed auto-precharge to power down error check.* 0.42 JMK 08/25/06 Created internal clock using ck and ck_n.* TDQS can only be enabled in EMR for x8 configurations.* CAS latency is checked vs frequency when DLL locks.* Improved checking of DQS during writes.* Added true BL4 operation.* 0.43 JMK 08/14/06 Added checking for setting reserved bits in Mode Registers.* Added ODTS Readout.* Replaced tZQCL with tZQinit and tZQoper* Fixed tWRPDEN and tWRAPDEN during BC4MRS and BL4MRS.* Added tRFC checking for Refresh to Power-Down Re-Entry.* Added tXPDLL checking for Power-Down Exit to Refresh to Power-Down Entry* Added Clock Frequency Change during Precharge Power-Down.* Added -125x speed grades.* Fixed tRCD checking during Write.* 1.00 JMK 05/11/07 Initial release* 1.10 JMK 06/26/07 Fixed ODTH8 check during BLOTF* Removed temp sensor readout from MPR* Updated initialization sequence* Updated timing parameters* 1.20 JMK 09/05/07 Updated clock frequency change* Added ddr3_dimm module* 1.30 JMK 01/23/08 Updated timing parameters* 1.40 JMK 12/02/08 Added support for DDR3-1866 and DDR3-2133* renamed ddr3_dimm.v to ddr3_module.v and added SODIMM support.* Added multi-chip package model support in ddr3_mcp.v* 1.50 JMK 05/04/08 Added 1866 and 2133 speed grades.* 1.60 MYY 07/10/09 Merging of 1.50 version and pre-1.0 version changes* 1.61 SPH 12/10/09 Only check tIH for cmd_addr if CS# LOW*/ DO NOT CHANGE THE TIMESCALE/ MAKE SURE YOUR SIMULATOR USES PS RESOLUTIONtimescale 1ps / 1ps/ model flags/ define MODEL_PASRmodule ddr3 ( rst_n, ck, / ck_n, cke, cs_n, ras_n, cas_n, we_n, dm_tdqs, ba, addr, dq, dqs, dqs_n, tdqs_n, / odt); include ddr3_parameters.vh parameter check_strict_mrbits = 1; parameter check_strict_timing = 1; parameter feature_pasr = 1; parameter feature_truebl4 = 0; / text macros define DQ_PER_DQS DQ_BITS/DQS_BITS define BANKS (1BA_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 (1MEM_BITS) define MAX_PIPE 4*CL_MAX / Declare Ports input rst_n; 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_tdqs; 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 tdqs_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; /DDR3 clock jitter variables real tjit_ch_rtime; real duty_cycle; / 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 ADDR_BITS-1:0 mode_reg BANKS-1:0; reg burst_order; reg BL_BITS:0 burst_length; reg blotf; reg truebl4; integer cas_latency; reg dll_reset; reg dll_locked; integer write_recovery; reg low_power; reg dll_en; reg 2:0 odt_rtt_nom; reg 1:0 odt_rtt_wr; reg odt_en; reg dyn_odt_en; reg 1:0 al; integer additive_latency; reg write_levelization; reg duty_cycle_corrector; reg tdqs_en; reg out_en; reg 2:0 pasr; integer cas_write_latency; reg asr; / auto self refresh reg srt; / self refresh temperature range reg 1:0 mpr_select; reg mpr_en; reg odts_readout; integer read_latency; integer write_latency; / cmd encoding parameter / cs, ras, cas, we LOAD_MODE = 4b0000, REFRESH = 4b0001, PRECHARGE = 4b0010, ACTIVATE = 4b0011, WRITE = 4b0100, READ = 4b0101, ZQ = 4b0110, NOP = 4b0111, / DESEL = 4b1xxx, PWR_DOWN = 4b1000, SELF_REF = 4b1001 ; reg 8*9-1:0 cmd_string 9:0; initial begin cmd_stringLOAD_MODE = Load Mode; cmd_stringREFRESH = Refresh ; cmd_stringPRECHARGE = Precharge; cmd_stringACTIVATE = Activate ; cmd_stringWRITE = Write ; cmd_stringREAD = Read ; cmd_stringZQ = ZQ ; cmd_stringNOP = No Op ; cmd_stringPWR_DOWN = Pwr Down ; cmd_stringSELF_REF = Self Ref ; end / command state reg BANKS-1:0 active_bank; reg BANKS-1:0 auto_precharge_bank; reg BANKS-1:0 write_precharge_bank; reg BANKS-1:0 read_precharge_bank; reg ROW_BITS-1:0 active_row BANKS-1:0; reg in_power_down; reg in_self_refresh; reg 3:0 init_mode_reg; reg init_dll_reset; reg init_done; integer init_step; reg zq_set; reg er_trfc_max; reg odt_state; reg odt_state_dly; reg dyn_odt_state; reg dyn_odt_state_dly; reg prev_odt; wire 7:0 calibration_pattern = 8b10101010; / value returned during mpr pre-defined pattern readout wire 7:0 temp_sensor = 8h01; / value returned during mpr temp sensor readout reg 1:0 mr_chk; reg rd_bc; integer banki; / cmd timers/counters integer ref_cntr; integer odt_cntr; integer ck_cntr; integer ck_txpr; integer ck_load_mode; integer ck_refresh; integer ck_precharge; integer ck_activate; integer ck_write; integer ck_read; integer ck_zqinit; integer ck_zqoper; integer ck_zqcs; integer ck_power_down; integer ck_slow_exit_pd; integer ck_self_refresh; integer ck_freq_change; integer ck_odt; integer ck_odth8; integer ck_dll_reset; integer ck_cke_cmd; integer ck_bank_write BANKS-1:0; integer ck_bank_read BANKS-1:0; integer ck_group_activate 1:0; integer ck_group_write 1:0; integer ck_group_read 1:0; time tm_txpr; time tm_load_mode; time tm_refresh; time tm_precharge; time tm_activate; time tm_write_end; time tm_power_down; time tm_slow_exit_pd; time tm_self_refresh; time tm_freq_change; time tm_cke_cmd; time tm_ttsinit; time tm_bank_precharge BANKS-1:0; time tm_bank_activate BANKS-1:0; time tm_bank_write_end BANKS-1:0; time tm_bank_read_end BANKS-1:0; time tm_group_activate 1:0; time tm_group_write_end 1:0; / pipelines reg MAX_PIPE:0 al_pipeline; reg MAX_PIPE:0 wr_pipeline; reg MAX_PIPE:0 rd_pipeline; reg MAX_PIPE:0 odt_pipeline; reg MAX_PIPE:0 dyn_odt_pipeline; reg BL_BITS:0 bl_pipeline MAX_PIPE:0; reg BA_BITS-1:0 ba_pipeline MAX_PIPE:0; reg ROW_BITS-1:0 row_pipeline MAX_PIPE:0; reg COL_BITS-1:0 col_pipeline MAX_PIPE:0; reg prev_cke; / data state reg BL_MAX*DQ_BITS-1:0 memory_data; reg BL_MAX*DQ_BITS-1:0 bit_mask; reg BL_BITS-1:0 burst_position; reg BL_BITS:0 burst_cntr; reg DQ_BITS-1:0 dq_temp; reg 31:0 check_write_postamble; reg 31:0 check_write_preamble; reg 31:0 check_write_dqs_high; reg 31:0 check_write_dqs_low; reg 15:0 check_dm_tdipw; reg 63:0 check_dq_tdipw; / data timers/counters time tm_rst_n; time tm_cke; time tm_odt; time tm_tdqss; time tm_dm 15:0; time tm_dqs 15:0; time tm_dqs_pos 31:0; time tm_dqss_pos 31:0; time tm_dqs_neg 31:0; time tm_dq 63:0; time tm_cmd_addr 22:0; reg 8*7-1:0 cmd_addr_string 22:0; initial begin cmd_addr_string 0 = CS_N ; cmd_addr_string 1 = RAS_N ; cmd_addr_string 2 = CAS_N ; cmd_addr_string 3 = WE_N ; cmd_addr_string 4 = BA 0 ; cmd_addr_string 5 = BA 1 ; cmd_addr_string 6 = BA 2 ; cmd_addr_string 7 = ADDR 0; cmd_addr_string 8 = ADDR 1; cmd_addr_string 9 = ADDR 2; cmd_addr_string10 = ADDR 3; cmd_addr_string11 = ADDR 4; cmd_addr_string12 = ADDR 5; cmd_addr_string13 = ADDR 6; cmd_addr_string14 = ADDR 7; cmd_addr_string15 = ADDR 8; cmd_addr_string16 = ADDR 9; cmd_addr_string17 = ADDR 10; cmd_addr_string18 = ADDR 11; cmd_addr_string19 = ADDR 12; cmd_addr_string20 = ADDR 13; cmd_addr_string21 = ADDR 14; cmd_addr_string22 = ADDR 15; end reg 8*5-1:0 dqs_string 1:0; initial begin dqs_string0 = DQS ; dqs_string1 = DQS_N; end / Memory Storageifdef MAX_MEM parameter RFF_BITS = DQ_BITS*BL_MAX; / %z format uses 8 bytes for every 32 bits or less. parameter RFF_CHUNK = 8 * (RFF_BITS/32 + (RFF_BITS%32 ? 1 : 0); reg 1024:1 tmp_model_dir; integer memfdBANKS-1:0; initial begin : file_io_open integer bank; if (!$value$plusargs(model_data+%s, tmp_model_dir) begin tmp_model_dir = /tmp; $display( %m: at time %t WARNING: no +model_data option specified, using /tmp., $time ); end for (bank = 0; bank BANKS; bank = bank + 1) memfdbank = open_bank_file(bank); endelse reg BL_MAX*DQ_BITS-1:0 memory 0:MEM_SIZE-1; reg MAX_BITS-1:0 address 0:MEM_SIZE-1; reg MEM_BITS:0 memory_index; reg MEM_BITS:0 memory_used = 0;endif / receive reg rst_n_in; reg ck_in; reg ck_n_in; reg cke_in; reg cs_n_in; reg ras_n_in; reg cas_n_in; reg we_n_in; reg 15:0 dm_in; reg 2:0 ba_in; reg 15:0 addr_in; reg 63:0 dq_in; reg 31:0 dqs_in; reg odt_in; reg 15:0 dm_in_pos; reg 15:0 dm_in_neg; reg 63:0 dq_in_pos; reg 63:0 dq_in_neg; reg dq_in_valid; reg dqs_in_valid; integer wdqs_cntr; integer wdq_cntr; integer wdqs_pos_cntr 31:0; reg b2b_write; reg BL_BITS:0 wr_burst_length; reg 31:0 prev_dqs_in; reg diff_ck; always (rst_n ) rst_n_in = #BUS_DELAY rst_n; always (ck ) ck_in = #BUS_DELAY ck; always (ck_n ) ck_n_in = #BUS_DELAY ck_n; always (cke ) cke_in = #BUS_DELAY cke; always (cs_n ) cs_n_in = #BUS_DELAY cs_n; always (ras_n ) ras_n_in = #BUS_DELAY ras_n; always (cas_n ) cas_n_in = #BUS_DELAY cas_n; always (we_n ) we_n_in = #BUS_DELAY we_n; always (dm_tdqs) dm_in = #BUS_DELAY dm_tdqs; always (ba ) ba_in = #BUS_DELAY ba; always (addr ) addr_in = #BUS_DELAY addr; always (dq ) dq_in = #BUS_DELAY dq; always (dqs or dqs_n) dqs_in = #BUS_DELAY (dqs_n16) | dqs; always (odt ) odt_in = #BUS_DELAY odt; / create internal clock always (posedge ck_in) diff_ck = ck_in; always (posedge ck_n_in) diff_ck = ck_n_in; wire 15:0 dqs_even = dqs_in15:0; wire 15:0 dqs_odd = dqs_in31:16; wire 3:0 cmd_n_in = !cs_n_in ? ras_n_in, cas_n_in, we_n_in : NOP; /deselect = nop / transmit reg dqs_out_en; reg DQS_BITS-1:0 dqs_out_en_dly; reg dqs_out; reg DQS_BITS-1:0 dqs_out_dly; reg dq_out_en; reg DQ_BITS-1:0 dq_out_en_dly; reg DQ_BITS-1:0 dq_out; reg DQ_BITS-1:0 dq_out_dly; integer rdqsen_cntr; integer rdqs_cntr; integer rdqen_cntr; integer rdq_cntr; bufif1 buf_dqs DQS_BITS-1:0 (dqs, dqs_out_dly, dqs_out_en_dly & DQS_BITSout_en); bufif1 buf_dqs_n DQS_BITS-1:0 (dqs_n, dqs_out_dly, dqs_out_en_dly & DQS_BITSout_en); bufif1 buf_dq DQ_BITS-1:0 (dq, dq_out_dly, dq_out_en_dly & DQ_BITS out_en); assign tdqs_n = DQS_BITS1bz; initial begin if (BL_MAX = 2. nBL_MAX = %d, BL_MAX); if (1 BL_MAX) $display(%m ERROR: 2BO_BITS cannot be greater than BL_MAX parameter.); $timeformat (-12, 1, ps, 1); seed = RANDOM_SEED; ck_cntr = 0; end function integer ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年航空器材维修工程师职业技能认证试题及答案
- 2025年航空企业机械师安全生产知识考试试题及答案
- 2025年主厂房检修班技能培训试卷及答案
- 3.1 DNA是主要遗传物质教学设计-2023-2024学年高一下学期生物人教版必修二
- 高速公路沥青施工合同(3篇)
- 安徽导游证试题及答案
- 爱尔三基考试题库及答案
- oppo会计笔试题目及答案
- 互联网房地产投资合作框架协议范本
- 2025国税公务员面试题及答案
- 2025年事业单位笔试-贵州-贵州药事管理(医疗招聘)历年参考题库含答案解析
- 战术基础动作低姿匍匐
- 胃肠镜报告的解读
- Unit2课时1ListeningSpeaking(课件)英语仁爱科普版2024八年级上册
- 14.2 三角形全等的判定(第2课时)
- 机房维护保密协议合同模板
- 2025医师处方权试题及答案(全文)
- 2025中小学诗词大会题库题库(含答案)
- 小学教师法律讲座
- 2025至2030中国高速公路行业市场深度调研及前景趋势与投融资报告
- 中职生自我介绍教学课件
评论
0/150
提交评论