📄 cy7c443.vhd
字号:
---------------------------------------------------------------------------------- File Name: cy7c443.vhd---------------------------------------------------------------------------------- Copyright (C) 2001 Free Model Foundry; http://www.FreeModelFoundry.com-- -- This program is free software; you can redistribute it and/or modify-- it under the terms of the GNU General Public License version 2 as-- published by the Free Software Foundation.-- -- MODIFICATION HISTORY:-- -- version: | author: | mod date: | changes made:-- V1.0 B.Bizic 01 Sep 01 Initial release-- V1.1 B.Bizic 01 Oct 02 Fifo array changed to reduce simulation -- memory requirements-- No Weak Values conversions added---------------------------------------------------------------------------------- PART DESCRIPTION:-- -- Library: FIFO-- Technology: CMOS-- Part: CY7C443-- -- Description: Clocked FIFO 2,048 x 9--------------------------------------------------------------------------------LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.VITAL_timing.ALL; USE IEEE.VITAL_primitives.ALL;LIBRARY FMF; USE FMF.gen_utils.ALL; USE FMF.conversions.ALL;---------------------------------------------------------------------------------- ENTITY DECLARATION--------------------------------------------------------------------------------ENTITY cy7c443 IS GENERIC ( -- tipd delays: interconnect path delays tipd_D0 : VitalDelayType01 := VitalZeroDelay01; tipd_D1 : VitalDelayType01 := VitalZeroDelay01; tipd_D2 : VitalDelayType01 := VitalZeroDelay01; tipd_D3 : VitalDelayType01 := VitalZeroDelay01; tipd_D4 : VitalDelayType01 := VitalZeroDelay01; tipd_D5 : VitalDelayType01 := VitalZeroDelay01; tipd_D6 : VitalDelayType01 := VitalZeroDelay01; tipd_D7 : VitalDelayType01 := VitalZeroDelay01; tipd_D8 : VitalDelayType01 := VitalZeroDelay01; tipd_ENWNeg : VitalDelayType01 := VitalZeroDelay01; tipd_ENRNeg : VitalDelayType01 := VitalZeroDelay01; tipd_CKW : VitalDelayType01 := VitalZeroDelay01; tipd_CKR : VitalDelayType01 := VitalZeroDelay01; tipd_MRNeg : VitalDelayType01 := VitalZeroDelay01; -- tpd delays tpd_CKR_Q0 : VitalDelayType01 := UnitDelay01; tpd_MRNeg_Q0 : VitalDelayType01 := UnitDelay01;-- tAMR tpd_MRNeg_F1 : VitalDelayType01 := UnitDelay01;-- tMEF tpd_CKW_F1 : VitalDelayType01 := UnitDelay01; -- tpw values: pulse widths tpw_CKR_negedge : VitalDelayType := UnitDelay; tpw_CKR_posedge : VitalDelayType := UnitDelay; tpw_MRNeg_negedge : VitalDelayType := UnitDelay; -- tperiod_min: minimum clock period = 1/max freq tperiod_CKR : VitalDelayType := UnitDelay; -- tsetup values: setup times tsetup_D0_CKW : VitalDelayType := UnitDelay; --tSD tsetup_ENWNeg_CKW : VitalDelayType := UnitDelay; --tSEN tsetup_CKW_MRNeg : VitalDelayType := UnitDelay; --tSCMR -- thold values: hold times thold_D0_CKW : VitalDelayType := UnitDelay; --tHD thold_ENWNeg_CKW : VitalDelayType := UnitDelay; --tHEN -- tskew time:skew times tdevice_SKEW1 : VitalDelayType := UnitDelay; -- tSKEW1 (skew time /CKR/ tdevice_SKEW2 : VitalDelayType := UnitDelay; -- tSKEW2 (skew time /CKW/) -- trecovery time:recovery time trecovery_CKW_MRNeg : VitalDelayType := UnitDelay; -- tMRR -- generic control parameters InstancePath : STRING := DefaultInstancePath; TimingChecksOn : BOOLEAN := DefaultTimingChecks; MsgOn : BOOLEAN := DefaultMsgOn; XOn : BOOLEAN := DefaultXon; -- For FMF SDF technology file usage TimingModel : STRING := DefaultTimingModel ); PORT ( D0 : IN STD_ULOGIC := 'U'; D1 : IN STD_ULOGIC := 'U'; D2 : IN STD_ULOGIC := 'U'; D3 : IN STD_ULOGIC := 'U'; D4 : IN STD_ULOGIC := 'U'; D5 : IN STD_ULOGIC := 'U'; D6 : IN STD_ULOGIC := 'U'; D7 : IN STD_ULOGIC := 'U'; D8 : IN STD_ULOGIC := 'U'; Q0 : OUT STD_ULOGIC := 'U'; Q1 : OUT STD_ULOGIC := 'U'; Q2 : OUT STD_ULOGIC := 'U'; Q3 : OUT STD_ULOGIC := 'U'; Q4 : OUT STD_ULOGIC := 'U'; Q5 : OUT STD_ULOGIC := 'U'; Q6 : OUT STD_ULOGIC := 'U'; Q7 : OUT STD_ULOGIC := 'U'; Q8 : OUT STD_ULOGIC := 'U'; ENWNeg : IN STD_ULOGIC := 'U'; ENRNeg : IN STD_ULOGIC := 'U'; CKW : IN STD_ULOGIC := 'U'; CKR : IN STD_ULOGIC := 'U'; MRNeg : IN STD_ULOGIC := 'U'; F1 : OUT STD_ULOGIC := 'U'; F2 : OUT STD_ULOGIC := 'U' ); ATTRIBUTE VITAL_LEVEL0 of cy7c443 : ENTITY IS TRUE;END cy7c443;---------------------------------------------------------------------------------- ARCHITECTURE DECLARATION--------------------------------------------------------------------------------ARCHITECTURE vhdl_behavioral of cy7c443 IS ATTRIBUTE VITAL_LEVEL0 of vhdl_behavioral : ARCHITECTURE IS TRUE; CONSTANT partID : STRING := "CY7C443"; SIGNAL D0_ipd : STD_ULOGIC := 'U'; SIGNAL D1_ipd : STD_ULOGIC := 'U'; SIGNAL D2_ipd : STD_ULOGIC := 'U'; SIGNAL D3_ipd : STD_ULOGIC := 'U'; SIGNAL D4_ipd : STD_ULOGIC := 'U'; SIGNAL D5_ipd : STD_ULOGIC := 'U'; SIGNAL D6_ipd : STD_ULOGIC := 'U'; SIGNAL D7_ipd : STD_ULOGIC := 'U'; SIGNAL D8_ipd : STD_ULOGIC := 'U'; SIGNAL ENWNeg_ipd : STD_ULOGIC := 'U'; SIGNAL ENRNeg_ipd : STD_ULOGIC := 'U'; SIGNAL CKW_ipd : STD_ULOGIC := 'U'; SIGNAL CKR_ipd : STD_ULOGIC := 'U'; SIGNAL MRNeg_ipd : STD_ULOGIC := 'U'; -- No Weak Values -- SIGNAL D0_nwv : STD_ULOGIC := 'U'; SIGNAL D1_nwv : STD_ULOGIC := 'U'; SIGNAL D2_nwv : STD_ULOGIC := 'U'; SIGNAL D3_nwv : STD_ULOGIC := 'U'; SIGNAL D4_nwv : STD_ULOGIC := 'U'; SIGNAL D5_nwv : STD_ULOGIC := 'U'; SIGNAL D6_nwv : STD_ULOGIC := 'U'; SIGNAL D7_nwv : STD_ULOGIC := 'U'; SIGNAL D8_nwv : STD_ULOGIC := 'U'; SIGNAL ENWNeg_nwv : STD_ULOGIC := 'U'; SIGNAL ENRNeg_nwv : STD_ULOGIC := 'U'; SIGNAL CKW_nwv : STD_ULOGIC := 'U'; SIGNAL CKR_nwv : STD_ULOGIC := 'U'; SIGNAL MRNeg_nwv : STD_ULOGIC := 'U'; -- FIFO memory definations CONSTANT FIFOSize : POSITIVE := 2048; CONSTANT FIFOWordLength : POSITIVE := 9; TYPE FIFOArray IS array (0 TO FIFOSize) OF INTEGER RANGE -2 TO 511; -- internal signals SIGNAL EmptyOffReg : NATURAL:=16; SIGNAL FullOffReg : NATURAL:=16; SIGNAL CountPointer : NATURAL RANGE 0 TO FIFOSize :=0; SIGNAL Start : STD_ULOGIC := '0'; -- SKEW stuff (see also generics list) ALIAS tSKEW1 : VitalDelayType IS tdevice_SKEW1; ALIAS tSKEW2 : VitalDelayType IS tdevice_SKEW2; SIGNAL tSKEW_CKW_CKR : Time := 0 ns; -- actual /CKW/CKR skew time SIGNAL tSKEW_CKR_CKW : Time := 0 ns; -- actual /CKR/CKW skew time SIGNAL OpenIn, OpenOut : STD_LOGIC; ALIAS tCKR : VitalDelayType IS tperiod_CKR; ALIAS tCKW : VitalDelayType IS tperiod_CKR;BEGIN---------------------------------------------------------------------------------- Dummy instances for exporting tSKEW vals from SDF file-- using DEVICE construct-------------------------------------------------------------------------------- SKEW1: VitalBuf (OpenOut, OpenIn, (tdevice_SKEW1, tdevice_SKEW1)); SKEW2: VitalBuf (OpenOut, OpenIn, (tdevice_SKEW2, tdevice_SKEW2)); ------------------------------------------------------------------- -- Wire Delays ------------------------------------------------------------------- WireDelay: BLOCK BEGIN w_1 : VitalWireDelay (D0_ipd, D0, tipd_D0); w_2 : VitalWireDelay (D1_ipd, D1, tipd_D1); w_3 : VitalWireDelay (D2_ipd, D2, tipd_D2); w_4 : VitalWireDelay (D3_ipd, D3, tipd_D3); w_5 : VitalWireDelay (D4_ipd, D4, tipd_D4); w_6 : VitalWireDelay (D5_ipd, D5, tipd_D5); w_7 : VitalWireDelay (D6_ipd, D6, tipd_D6); w_8 : VitalWireDelay (D7_ipd, D7, tipd_D7); w_9 : VitalWireDelay (D8_ipd, D8, tipd_D8); w_20 : VitalWireDelay (ENWNeg_ipd, ENWNeg, tipd_ENWNeg); w_21 : VitalWireDelay (ENRNeg_ipd, ENRNeg, tipd_ENRNeg); w_22 : VitalWireDelay (CKW_ipd, CKW, tipd_CKW); w_23 : VitalWireDelay (CKR_ipd, CKR, tipd_CKR); w_26 : VitalWireDelay (MRNeg_ipd, MRNeg, tipd_MRNeg); END BLOCK WireDelay; D0_nwv <= To_UX01 (s => D0_ipd); D1_nwv <= To_UX01 (s => D1_ipd); D2_nwv <= To_UX01 (s => D2_ipd); D3_nwv <= To_UX01 (s => D3_ipd); D4_nwv <= To_UX01 (s => D4_ipd); D5_nwv <= To_UX01 (s => D5_ipd); D6_nwv <= To_UX01 (s => D6_ipd); D7_nwv <= To_UX01 (s => D7_ipd); D8_nwv <= To_UX01 (s => D8_ipd); ENWNeg_nwv <= To_UX01 (s => ENWNeg_ipd); ENRNeg_nwv <= To_UX01 (s => ENRNeg_ipd); CKW_nwv <= To_UX01 (s => CKW_ipd); CKR_nwv <= To_UX01 (s => CKR_ipd); MRNeg_nwv <= To_UX01 (s => MRNeg_ipd); ------------------------------------------------------------------- -- Main behavior Block ------------------------------------------------------------------- VitalBehavior: BLOCK PORT ( Data : IN STD_LOGIC_VECTOR(FIFOWordLength-1 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(FIFOWordLength-1 DOWNTO 0); ENWNeg : IN std_Ulogic := 'U'; ENRNeg : IN std_Ulogic := 'U'; CKW : IN std_Ulogic := 'U'; CKR : IN std_Ulogic := 'U'; F1 : OUT std_Ulogic := 'U'; F2 : OUT std_Ulogic := 'U'; MRNeg : IN std_Ulogic := 'U' ); PORT MAP ( Data(0) => D0_nwv, Data(1) => D1_nwv, Data(2) => D2_nwv, Data(3) => D3_nwv, Data(4) => D4_nwv, Data(5) => D5_nwv, Data(6) => D6_nwv, Data(7) => D7_nwv, Data(8) => D8_nwv, Q(0) => Q0, Q(1) => Q1, Q(2) => Q2, Q(3) => Q3, Q(4) => Q4, Q(5) => Q5, Q(6) => Q6, Q(7) => Q7, Q(8) => Q8, ENWNeg => ENWNeg_nwv, ENRNeg => ENRNeg_nwv, CKW => CKW_nwv, CKR => CKR_nwv, MRNeg => MRNeg_nwv, F1 => F1, F2 => F2 ); SIGNAL F1_zd : STD_ULOGIC := 'X'; SIGNAL F2_zd : STD_ULOGIC := 'X'; SIGNAL Q_zd : STD_LOGIC_VECTOR(FIFOWordLength-1 DOWNTO 0):=(OTHERS=>'X'); BEGIN -- VitalBehavior block --------------------------------------------------------------- -- Timing Check Section --------------------------------------------------------------- MainReadWrite:PROCESS (Data,ENWNeg, ENRNeg, CKW, CKR,MRNeg) VARIABLE FIFOMemory : FIFOArray; TYPE stat_type IS (inact, act); VARIABLE rd_stat : stat_type; VARIABLE wr_stat : stat_type; -- Timing Check Variables VARIABLE Tviol_D0_CKW : X01 := '0'; VARIABLE TD_D0_CKW : VitalTimingDataType; VARIABLE Tviol_MRNeg_CKW : X01 := '0'; VARIABLE TD_MRNeg_CKW : VitalTimingDataType; VARIABLE Tviol_MRNeg_CKR : X01 := '0'; VARIABLE TD_MRNeg_CKR : VitalTimingDataType; VARIABLE Tviol_ENWNeg_CKW : X01 := '0'; VARIABLE TD_ENWNeg_CKW : VitalTimingDataType; VARIABLE Tviol_ENRNeg_CKR : X01 := '0'; VARIABLE TD_ENRNeg_CKR : VitalTimingDataType; VARIABLE Tviol_CKW_MRNeg : X01 := '0'; VARIABLE TD_CKW_MRNeg : VitalTimingDataType; VARIABLE Tviol_CKR_MRNeg : X01 := '0'; VARIABLE TD_CKR_MRNeg : VitalTimingDataType; VARIABLE Pviol_CKW : X01 := '0'; VARIABLE TD_CKW : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Pviol_CKR : X01 := '0'; VARIABLE TD_CKR : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Pviol_MRNeg : X01 := '0'; VARIABLE TD_MRNeg : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Rviol_CKW_MRNeg : X01 := '0'; VARIABLE RD_CKW_MRNeg : VitalTimingDataType; VARIABLE Rviol_CKR_MRNeg : X01 := '0'; VARIABLE RD_CKR_MRNeg : VitalTimingDataType; -- Functionality Results Variables VARIABLE Violation : X01 := '0'; BEGIN -------------------------------------------------------------------- -- Timing Check Section -------------------------------------------------------------------- IF (TimingChecksOn) THEN VitalSetupHoldCheck ( TestSignal => Data, TestSignalName => "D", RefSignal => CKW,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -