📄 am29lv160d.v
字号:
//////////////////////////////////////////////////////////////////////////////
// File name : am29lv160d.v
//////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2003, 2004 Spansion, LLC.
//
// MODIFICATION HISTORY :
//
// version: | author: | % date: | changes made:
// V0.1 J.Bogosavljevic 03 Sept 01 Initial
// v0.2 J.BOgosavljevic 03 Sept 02 FSM modified, RY_zd generation
// modified, timings edited
// v0.3 J.Bogosavljevic 03 Oct 08 Handleing TimingModel changed
// v0.4 J.Bogosavljevic 03 Oct 31
// 1) read is modified so DQ2 toggles
// only if sector selected for erasure
// is read.
// -if sector that is not selected for
// erasure is read DQ2 stays does
// not change vaule
// 2) CTMOUT
// 3) path delays from OE and CE to DATA
// modified
// 4) path delay from DQ15 to DQ0 when
// byte mode added
// 5) pulse watch modified
// v0.5 J.Bogosavljevic 03 Dec 10 RY changend to open drain
// multidim arrays removed (Mem and
// sssa and ssea)
// v0.6 J.Bogosavljevic 03 Dec 16 Memory preload moved to initial
// process
// current_state generation modified
// v0.7 J.Bogosavljevic 03 Dec 19 Memory preload modified, same sdf
// for modelsim and NCsim
// v0.8 J.Bogosavljevic 04 Feb 27 - elapsed_erase timer suspended as
// soon as erase suspend command issued
// v0.9 J.Bogosavljevic 04 Apr 29 - CTMOUT bug fix
// - tpd_BYTENeg_Dq0 removed
//////////////////////////////////////////////////////////////////////////////
// PART DESCRIPTION:
//
// Library: AMD
// Technology: Flash Memory
// Part: AM29LV160D
//
// Description: 16Mbit(2M x 8-Bit/1M x 16-Bit) CMOS Boot Sector Flash Memory
// Boot sector determined by TimingModel generic
//
//////////////////////////////////////////////////////////////////////////////
// Known Bugs:
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// MODULE DECLARATION //
//////////////////////////////////////////////////////////////////////////////
`timescale 1 ns/1 ns
module am29lv160d
(
A19 ,
A18 ,
A17 ,
A16 ,
A15 ,
A14 ,
A13 ,
A12 ,
A11 ,
A10 ,
A9 ,
A8 ,
A7 ,
A6 ,
A5 ,
A4 ,
A3 ,
A2 ,
A1 ,
A0 ,
DQ15 ,
DQ14 ,
DQ13 ,
DQ12 ,
DQ11 ,
DQ10 ,
DQ9 ,
DQ8 ,
DQ7 ,
DQ6 ,
DQ5 ,
DQ4 ,
DQ3 ,
DQ2 ,
DQ1 ,
DQ0 ,
CENeg ,
OENeg ,
WENeg ,
RESETNeg ,
BYTENeg ,
RY
);
////////////////////////////////////////////////////////////////////////
// Port / Part Pin Declarations
////////////////////////////////////////////////////////////////////////
input A19 ;
input A18 ;
input A17 ;
input A16 ;
input A15 ;
input A14 ;
input A13 ;
input A12 ;
input A11 ;
input A10 ;
input A9 ;
input A8 ;
input A7 ;
input A6 ;
input A5 ;
input A4 ;
input A3 ;
input A2 ;
input A1 ;
input A0 ;
inout DQ15 ;
inout DQ14 ;
inout DQ13 ;
inout DQ12 ;
inout DQ11 ;
inout DQ10 ;
inout DQ9 ;
inout DQ8 ;
inout DQ7 ;
inout DQ6 ;
inout DQ5 ;
inout DQ4 ;
inout DQ3 ;
inout DQ2 ;
inout DQ1 ;
inout DQ0 ;
input CENeg ;
input OENeg ;
input WENeg ;
input RESETNeg ;
input BYTENeg ;
output RY ;
// interconnect path delay signals
wire A19_ipd ;
wire A18_ipd ;
wire A17_ipd ;
wire A16_ipd ;
wire A15_ipd ;
wire A14_ipd ;
wire A13_ipd ;
wire A12_ipd ;
wire A11_ipd ;
wire A10_ipd ;
wire A9_ipd ;
wire A8_ipd ;
wire A7_ipd ;
wire A6_ipd ;
wire A5_ipd ;
wire A4_ipd ;
wire A3_ipd ;
wire A2_ipd ;
wire A1_ipd ;
wire A0_ipd ;
wire [19 : 0] A;
assign A = {
A19_ipd,
A18_ipd,
A17_ipd,
A16_ipd,
A15_ipd,
A14_ipd,
A13_ipd,
A12_ipd,
A11_ipd,
A10_ipd,
A9_ipd,
A8_ipd,
A7_ipd,
A6_ipd,
A5_ipd,
A4_ipd,
A3_ipd,
A2_ipd,
A1_ipd,
A0_ipd };
wire DQ15_ipd ;
wire DQ14_ipd ;
wire DQ13_ipd ;
wire DQ12_ipd ;
wire DQ11_ipd ;
wire DQ10_ipd ;
wire DQ9_ipd ;
wire DQ8_ipd ;
wire DQ7_ipd ;
wire DQ6_ipd ;
wire DQ5_ipd ;
wire DQ4_ipd ;
wire DQ3_ipd ;
wire DQ2_ipd ;
wire DQ1_ipd ;
wire DQ0_ipd ;
wire [15 : 0 ] DIn;
assign DIn = {DQ15_ipd,
DQ14_ipd,
DQ13_ipd,
DQ12_ipd,
DQ11_ipd,
DQ10_ipd,
DQ9_ipd,
DQ8_ipd,
DQ7_ipd,
DQ6_ipd,
DQ5_ipd,
DQ4_ipd,
DQ3_ipd,
DQ2_ipd,
DQ1_ipd,
DQ0_ipd };
wire [15 : 0 ] DOut;
assign DOut = {DQ15,
DQ14,
DQ13,
DQ12,
DQ11,
DQ10,
DQ9,
DQ8,
DQ7,
DQ6,
DQ5,
DQ4,
DQ3,
DQ2,
DQ1,
DQ0 };
wire CENeg_ipd ;
wire OENeg_ipd ;
wire WENeg_ipd ;
wire RESETNeg_ipd ;
wire BYTENeg_ipd ;
// internal delays
reg HANG_out ; // Program/Erase Timing Limit
reg HANG_in ;
reg START_T1 ; // Start TimeOut
reg START_T1_in ;
reg CTMOUT ; // Sector Erase TimeOut
reg CTMOUT_in ;
reg READY_in ;
reg READY ; // Device ready after reset
wire DQ15_zd ;
wire DQ14_zd ;
wire DQ13_zd ;
wire DQ12_zd ;
wire DQ11_zd ;
wire DQ10_zd ;
wire DQ9_zd ;
wire DQ8_zd ;
wire DQ7_zd ;
wire DQ6_zd ;
wire DQ5_zd ;
wire DQ4_zd ;
wire DQ3_zd ;
wire DQ2_zd ;
wire DQ1_zd ;
wire DQ0_zd ;
reg [15 : 0] DOut_zd;
assign {DQ15_zd,
DQ14_zd,
DQ13_zd,
DQ12_zd,
DQ11_zd,
DQ10_zd,
DQ9_zd,
DQ8_zd,
DQ7_zd,
DQ6_zd,
DQ5_zd,
DQ4_zd,
DQ3_zd,
DQ2_zd,
DQ1_zd,
DQ0_zd } = DOut_zd;
reg RY_zd;
parameter UserPreload = 1'b1;
parameter mem_file_name = "init.mem";
parameter prot_file_name = "none";
parameter TimingModel = "am29lv160dt-70";
//parameter TimingModel = "DefaultTimingModel";
parameter PartID = "AM29LV160D";
parameter MaxData = 255;
parameter SecSize = 65535;
parameter SecNum = 31;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -