📄 cy7c1354b.vhd
字号:
--------------------------------------------------------------------------------------------- File Name: CY7C1354B.VHD-- Version: 2.0-- Date: Nov 22nd, 2004-- Model: BUS Functional-- -- -- Author: RKF -- Company: Cypress Semiconductor-- Model: CY7C1354B (256k x 36)-- Mode: Pipelined---- Description: NoBL SRAM VHDL Model---- Limitation: None---- Note: - BSDL Model available separately-- - Set simulator resolution to "ps" timescale---- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY-- WHATSOEVER AND CYPRESS SPECIFICALLY DISCLAIMS ANY-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.---- Copyright (c) 2004 Cypress Semiconductor -- All rights reserved---- Trademarks: NoBL and No Bus Latency are trademarks of Cypress Semiconductor---- Rev Author Date Changes-- --- -------- ------- ---------- -- 2.0 RKF 11/22/2004 - Second Release-- - Fully Tested with New Test Bench and Test Vectors -----------------------------------------------------------------------------------------LIBRARY ieee,work,grlib,gaisler; USE ieee.std_logic_1164.all;-- USE ieee.std_logic_unsigned.all;-- Use IEEE.Std_Logic_Arith.all;-- Use work.all; USE work.package_utility.all; use grlib.stdlib.all; use ieee.std_logic_1164.all; use std.textio.all; use gaisler.sim.all; ENTITY cy7c1354 IS GENERIC ( fname : string := "prom.srec"; -- File to read from -- Constant parameters addr_bits : INTEGER := 18; data_bits : INTEGER := 36; -- Timing parameters for -5 (225 Mhz) tCYC : TIME := 4.4 ns; tCH : TIME := 1.8 ns; tCL : TIME := 1.8 ns; tCO : TIME := 2.8 ns; tAS : TIME := 1.4 ns; tCENS : TIME := 1.4 ns; tWES : TIME := 1.4 ns; tDS : TIME := 1.4 ns; tAH : TIME := 0.4 ns; tCENH : TIME := 0.4 ns; tWEH : TIME := 0.4 ns; tDH : TIME := 0.4 ns -- Timing parameters for -5 (200 Mhz) --tCYC : TIME := 5.0 ns; --tCH : TIME := 2.0 ns; --tCL : TIME := 2.0 ns; --tCO : TIME := 3.2 ns; --tAS : TIME := 1.5 ns; --tCENS : TIME := 1.5 ns; --tWES : TIME := 1.5 ns; --tDS : TIME := 1.5 ns; --tAH : TIME := 0.5 ns; --tCENH : TIME := 0.5 ns; --tWEH : TIME := 0.5 ns; --tDH : TIME := 0.5 ns -- Timing parameters for -5 (166 Mhz) --tCYC : TIME := 6.0 ns; --tCH : TIME := 2.4 ns; --tCL : TIME := 2.4 ns; --tCO : TIME := 3.5 ns; --tAS : TIME := 1.5 ns; --tCENS : TIME := 1.5 ns; --tWES : TIME := 1.5 ns; --tDS : TIME := 1.5 ns; --tAH : TIME := 0.5 ns; --tCENH : TIME := 0.5 ns; --tWEH : TIME := 0.5 ns; --tDH : TIME := 0.5 ns ); -- Port Declarations PORT ( Dq : INOUT STD_LOGIC_VECTOR ((data_bits - 1) DOWNTO 0); -- Data I/O Addr : IN STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0); -- Address Mode : IN STD_LOGIC := '1'; -- Burst Mode Clk : IN STD_LOGIC; -- Clk CEN_n : IN STD_LOGIC; -- CEN# AdvLd_n : IN STD_LOGIC; -- Adv/Ld# Bwa_n : IN STD_LOGIC; -- Bwa# Bwb_n : IN STD_LOGIC; -- BWb# Bwc_n : IN STD_LOGIC; -- Bwc# Bwd_n : IN STD_LOGIC; -- BWd# Rw_n : IN STD_LOGIC; -- RW# Oe_n : IN STD_LOGIC; -- OE# Ce1_n : IN STD_LOGIC; -- CE1# Ce2 : IN STD_LOGIC; -- CE2 Ce3_n : IN STD_LOGIC; -- CE3# Zz : IN STD_LOGIC -- Snooze Mode );END cy7c1354;ARCHITECTURE behave OF cy7c1354 IS SIGNAL ce : STD_LOGIC := '0'; SIGNAL doe : STD_LOGIC := '0'; SIGNAL dout : STD_LOGIC_VECTOR ((data_bits - 1) DOWNTO 0) := (OTHERS => 'Z'); SIGNAL Addr_read_sig : STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => 'Z');BEGIN ce <= NOT(Ce1_n) AND NOT(Ce3_n) AND Ce2; doe <= NOT(Oe_n) AND NOT(Zz); -- Output Buffers WITH doe SELECT Dq <= TRANSPORT dout AFTER (tCO) WHEN '1', (OTHERS => 'Z') AFTER (tCO) WHEN OTHERS; -- Check for Clock Timing Violation clk_check : PROCESS VARIABLE clk_high, clk_low : TIME := 0 ns; BEGIN WAIT ON Clk; IF Clk = '1' AND NOW >= tCYC THEN ASSERT (NOW - clk_low >= tCH) REPORT "Clk width low - tCH violation" SEVERITY ERROR; ASSERT (NOW - clk_high >= tCYC) REPORT "Clk period high - tCYC violation" SEVERITY ERROR; clk_high := NOW; ELSIF Clk = '0' AND NOW /= 0 ns THEN ASSERT (NOW - clk_high >= tCL) REPORT "Clk width high - tCL violation" SEVERITY ERROR; ASSERT (NOW - clk_low >= tCYC) REPORT "Clk period low - tCYC violation" SEVERITY ERROR; clk_low := NOW; END IF; END PROCESS; -- Check for Setup Timing Violation setup_check : PROCESS BEGIN WAIT ON Clk; IF Clk = '1' THEN ASSERT (Addr'LAST_EVENT >= tAS) REPORT "Addr - tAS violation" SEVERITY ERROR; ASSERT (CEN_n'LAST_EVENT >= tCENS) REPORT "CKE# - tCENS violation" SEVERITY ERROR; ASSERT (Ce1_n'LAST_EVENT >= tWES) REPORT "CE1# - tWES violation" SEVERITY ERROR; ASSERT (Ce2'LAST_EVENT >= tWES) REPORT "CE2 - tWES violation" SEVERITY ERROR; ASSERT (Ce3_n'LAST_EVENT >= tWES) REPORT "CE3# - tWES violation" SEVERITY ERROR; ASSERT (AdvLd_n'LAST_EVENT >= tWES) REPORT "ADV/LD# - tWES violation" SEVERITY ERROR; ASSERT (Rw_n'LAST_EVENT >= tWES) REPORT "RW# - tWES violation" SEVERITY ERROR; ASSERT (Bwa_n'LAST_EVENT >= tWES) REPORT "BWa# - tWES violation" SEVERITY ERROR; ASSERT (Bwb_n'LAST_EVENT >= tWES) REPORT "BWb# - tWES violation" SEVERITY ERROR; ASSERT (Bwc_n'LAST_EVENT >= tWES) REPORT "BWc# - tWES violation" SEVERITY ERROR; ASSERT (Bwd_n'LAST_EVENT >= tWES) REPORT "BWd# - tWES violation" SEVERITY ERROR; --ASSERT (Dq'LAST_EVENT >= tDS) -- REPORT "Dq - tDS violation" -- SEVERITY ERROR; END IF; END PROCESS; -- Check for Hold Timing Violation hold_check : PROCESS BEGIN WAIT ON Clk'DELAYED(tAH), Clk'DELAYED(tCENH), Clk'DELAYED(tWEH), Clk'DELAYED(tDH); IF Clk'DELAYED(tAH) = '1' THEN ASSERT (Addr'LAST_EVENT > tAH)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -