📄 k4s161622d.vhd
字号:
w_12 : VitalWireDelay (DQ5_ipd, DQ5, tipd_DQ5); w_13 : VitalWireDelay (DQ6_ipd, DQ6, tipd_DQ6); w_14 : VitalWireDelay (DQ7_ipd, DQ7, tipd_DQ7); w_15 : VitalWireDelay (DQ8_ipd, DQ8, tipd_DQ8); w_16 : VitalWireDelay (DQ9_ipd, DQ9, tipd_DQ9); w_17 : VitalWireDelay (DQ10_ipd, DQ10, tipd_DQ10); w_18 : VitalWireDelay (DQ11_ipd, DQ11, tipd_DQ11); w_19 : VitalWireDelay (DQ12_ipd, DQ12, tipd_DQ12); w_20 : VitalWireDelay (DQ13_ipd, DQ13, tipd_DQ13); w_21 : VitalWireDelay (DQ14_ipd, DQ14, tipd_DQ14); w_22 : VitalWireDelay (DQ15_ipd, DQ15, tipd_DQ15); w_39 : VitalWireDelay (CLK_ipd, CLK, tipd_CLK); w_40 : VitalWireDelay (CKE_ipd, CKE, tipd_CKE); w_41 : VitalWireDelay (A0_ipd, A0, tipd_A0); w_42 : VitalWireDelay (A1_ipd, A1, tipd_A1); w_43 : VitalWireDelay (A2_ipd, A2, tipd_A2); w_44 : VitalWireDelay (A3_ipd, A3, tipd_A3); w_45 : VitalWireDelay (A4_ipd, A4, tipd_A4); w_46 : VitalWireDelay (A5_ipd, A5, tipd_A5); w_47 : VitalWireDelay (A6_ipd, A6, tipd_A6); w_48 : VitalWireDelay (A7_ipd, A7, tipd_A7); w_49 : VitalWireDelay (A8_ipd, A8, tipd_A8); w_50 : VitalWireDelay (A9_ipd, A9, tipd_A9); w_51 : VitalWireDelay (A10_ipd, A10, tipd_A10); w_52 : VitalWireDelay (WENeg_ipd, WENeg, tipd_WENeg); w_53 : VitalWireDelay (RASNeg_ipd, RASNeg, tipd_RASNeg); w_54 : VitalWireDelay (CSNeg_ipd, CSNeg, tipd_CSNeg); w_55 : VitalWireDelay (CASNeg_ipd, CASNeg, tipd_CASNeg); END BLOCK; WENeg_nwv <= To_UX01(WENeg_ipd); RASNeg_nwv <= To_UX01(RASNeg_ipd); CSNeg_nwv <= To_UX01(CSNeg_ipd); CASNeg_nwv <= To_UX01(CASNeg_ipd); CLK_nwv <= To_UX01(CLK_ipd); CKE_nwv <= To_UX01(CKE_ipd); BA_nwv <= To_UX01(BA_ipd); LDQM_nwv <= To_UX01(LDQM_ipd); UDQM_nwv <= To_UX01(UDQM_ipd); DQ0_nwv <= To_UX01(DQ0_ipd); DQ1_nwv <= To_UX01(DQ1_ipd); DQ2_nwv <= To_UX01(DQ2_ipd); DQ3_nwv <= To_UX01(DQ3_ipd); DQ4_nwv <= To_UX01(DQ4_ipd); DQ5_nwv <= To_UX01(DQ5_ipd); DQ6_nwv <= To_UX01(DQ6_ipd); DQ7_nwv <= To_UX01(DQ7_ipd); DQ8_nwv <= To_UX01(DQ8_ipd); DQ9_nwv <= To_UX01(DQ9_ipd); DQ10_nwv <= To_UX01(DQ10_ipd); DQ11_nwv <= To_UX01(DQ11_ipd); DQ12_nwv <= To_UX01(DQ12_ipd); DQ13_nwv <= To_UX01(DQ13_ipd); DQ14_nwv <= To_UX01(DQ14_ipd); DQ15_nwv <= To_UX01(DQ15_ipd); A0_nwv <= To_UX01(A0_ipd); A1_nwv <= To_UX01(A1_ipd); A2_nwv <= To_UX01(A2_ipd); A3_nwv <= To_UX01(A3_ipd); A4_nwv <= To_UX01(A4_ipd); A5_nwv <= To_UX01(A5_ipd); A6_nwv <= To_UX01(A6_ipd); A7_nwv <= To_UX01(A7_ipd); A8_nwv <= To_UX01(A8_ipd); A9_nwv <= To_UX01(A9_ipd); A10_nwv <= To_UX01(A10_ipd); ---------------------------------------------------------------------------- -- Main Behavior Block ---------------------------------------------------------------------------- Behavior: BLOCK PORT ( BAIn : IN std_logic; LDQMIn : IN std_ulogic := 'X'; UDQMIn : IN std_ulogic := 'X'; DataIn : IN std_logic_vector(15 downto 0); DataOut : OUT std_logic_vector(15 downto 0); CLKIn : IN std_ulogic := 'X'; CKEIn : IN std_ulogic := 'X'; AddressIn : IN std_logic_vector(10 downto 0); WENegIn : IN std_ulogic := 'X'; RASNegIn : IN std_ulogic := 'X'; CSNegIn : IN std_ulogic := 'X'; CASNegIn : IN std_ulogic := 'X' ); PORT MAP ( BAIn => BA_nwv, LDQMIn => LDQM_ipd, UDQMIn => UDQM_ipd, DataOut(0) => DQ0, DataOut(1) => DQ1, DataOut(2) => DQ2, DataOut(3) => DQ3, DataOut(4) => DQ4, DataOut(5) => DQ5, DataOut(6) => DQ6, DataOut(7) => DQ7, DataOut(8) => DQ8, DataOut(9) => DQ9, DataOut(10) => DQ10, DataOut(11) => DQ11, DataOut(12) => DQ12, DataOut(13) => DQ13, DataOut(14) => DQ14, DataOut(15) => DQ15, DataIn(0) => DQ0_nwv, DataIn(1) => DQ1_nwv, DataIn(2) => DQ2_nwv, DataIn(3) => DQ3_nwv, DataIn(4) => DQ4_nwv, DataIn(5) => DQ5_nwv, DataIn(6) => DQ6_nwv, DataIn(7) => DQ7_nwv, DataIn(8) => DQ8_nwv, DataIn(9) => DQ9_nwv, DataIn(10) => DQ10_nwv, DataIn(11) => DQ11_nwv, DataIn(12) => DQ12_nwv, DataIn(13) => DQ13_nwv, DataIn(14) => DQ14_nwv, DataIn(15) => DQ15_nwv, CLKIn => CLK_nwv, CKEIn => CKE_nwv, AddressIn(0) => A0_nwv, AddressIn(1) => A1_nwv, AddressIn(2) => A2_nwv, AddressIn(3) => A3_nwv, AddressIn(4) => A4_nwv, AddressIn(5) => A5_nwv, AddressIn(6) => A6_nwv, AddressIn(7) => A7_nwv, AddressIn(8) => A8_nwv, AddressIn(9) => A9_nwv, AddressIn(10) => A10_nwv, WENegIn => WENeg_nwv, RASNegIn => RASNeg_nwv, CSNegIn => CSNeg_nwv, CASNegIn => CASNeg_nwv ); -- Type definition for state machine TYPE mem_state IS (pwron, precharge, idle, mode_set, self_refresh, self_refresh_rec, auto_refresh, pwrdwn, bank_act, bank_act_pwrdwn, write, write_suspend, read, read_suspend, write_auto_pre, read_auto_pre ); TYPE statebanktype IS array (hi_bank downto 0) of mem_state; SIGNAL statebank : statebanktype; SIGNAL CAS_Lat : NATURAL RANGE 0 to 3 := 0; SIGNAL D_zd : std_logic_vector(15 DOWNTO 0); BEGIN PoweredUp <= true after tpowerup; ---------------------------------------------------------------------------- -- Main Behavior Process ---------------------------------------------------------------------------- Behavior : PROCESS (BAIn, LDQMIn, UDQMIn, DataIn, CLKIn, CKEIn, AddressIn, WENegIn, RASNegIn, CSNegIn, CASNegIn) -- Type definition for commands TYPE command_type is (desl, nop, bst, read, writ, act, pre, mrs, ref ); -- Timing Check Variables VARIABLE Tviol_BA_CLK : X01 := '0'; VARIABLE TD_BA_CLK : VitalTimingDataType; VARIABLE Tviol_LDQM_CLK : X01 := '0'; VARIABLE TD_LDQM_CLK : VitalTimingDataType; VARIABLE Tviol_UDQM_CLK : X01 := '0'; VARIABLE TD_UDQM_CLK : VitalTimingDataType; VARIABLE Tviol_D0_CLK : X01 := '0'; VARIABLE TD_D0_CLK : VitalTimingDataType; VARIABLE Tviol_CKE_CLK : X01 := '0'; VARIABLE TD_CKE_CLK : VitalTimingDataType; VARIABLE Tviol_Address_CLK : X01 := '0'; VARIABLE TD_Address_CLK : VitalTimingDataType; VARIABLE Tviol_WENeg_CLK : X01 := '0'; VARIABLE TD_WENeg_CLK : VitalTimingDataType; VARIABLE Tviol_RASNeg_CLK : X01 := '0'; VARIABLE TD_RASNeg_CLK : VitalTimingDataType; VARIABLE Tviol_CSNeg_CLK : X01 := '0'; VARIABLE TD_CSNeg_CLK : VitalTimingDataType; VARIABLE Tviol_CASNeg_CLK : X01 := '0'; VARIABLE TD_CASNeg_CLK : VitalTimingDataType; VARIABLE Pviol_CLK : X01 := '0'; VARIABLE PD_CLK : VitalPeriodDataType := VitalPeriodDataInit; -- Memory array declaration TYPE MemStore IS ARRAY (0 to depth) OF INTEGER RANGE -2 TO 255; TYPE MemBlock IS ARRAY (0 to 1) OF MemStore; TYPE Burst_type IS (sequential, interleave); TYPE Write_Burst_type IS (programmed, single); TYPE sequence IS ARRAY (0 to 7) OF NATURAL RANGE 0 to 7; TYPE seqtab IS ARRAY (0 to 7) OF sequence; TYPE MemLoc IS ARRAY (0 to 1) OF std_logic_vector(18 DOWNTO 0); TYPE burst_counter IS ARRAY (0 to 1) OF NATURAL RANGE 0 to 257; TYPE StartAddr_type IS ARRAY (0 to 1) OF NATURAL RANGE 0 TO 7; TYPE Burst_Inc_type IS ARRAY (0 to 1) OF NATURAL RANGE 0 TO 255; TYPE BaseLoc_type IS ARRAY (0 to 1) OF NATURAL RANGE 0 TO depth; TYPE OutWord IS ARRAY (1 downto 0) OF std_logic_vector(7 DOWNTO 0); CONSTANT seq0 : sequence := (0 & 1 & 2 & 3 & 4 & 5 & 6 & 7); CONSTANT seq1 : sequence := (1 & 0 & 3 & 2 & 5 & 4 & 7 & 6); CONSTANT seq2 : sequence := (2 & 3 & 0 & 1 & 6 & 7 & 4 & 5); CONSTANT seq3 : sequence := (3 & 2 & 1 & 0 & 7 & 6 & 5 & 4); CONSTANT seq4 : sequence := (4 & 5 & 6 & 7 & 0 & 1 & 2 & 3); CONSTANT seq5 : sequence := (5 & 4 & 7 & 6 & 1 & 0 & 3 & 2); CONSTANT seq6 : sequence := (6 & 7 & 4 & 5 & 2 & 3 & 0 & 1); CONSTANT seq7 : sequence := (7 & 6 & 5 & 4 & 3 & 2 & 1 & 0); CONSTANT intab : seqtab := (seq0, seq1, seq2, seq3, seq4, seq5, seq6, seq7); FILE mem_file : text IS mem_file_name; VARIABLE MemData0 : MemBlock; VARIABLE MemData1 : MemBlock; VARIABLE file_bank : NATURAL := 0; VARIABLE ind : NATURAL := 0; VARIABLE buf : line; VARIABLE MemAddr : MemLoc; VARIABLE Location : NATURAL RANGE 0 TO depth := 0; VARIABLE BaseLoc : BaseLoc_type; VARIABLE Burst_Inc : Burst_Inc_type; VARIABLE StartAddr : StartAddr_type; VARIABLE Burst_Length : NATURAL RANGE 0 TO 256 := 0; VARIABLE Burst_Bits : NATURAL RANGE 0 TO 7 := 0; VARIABLE Burst : Burst_Type; VARIABLE WB : Write_Burst_Type; VARIABLE Burst_Cnt : burst_counter; VARIABLE command : command_type; VARIABLE written : boolean := false; VARIABLE chip_en : boolean := false; VARIABLE cur_bank : natural range 0 to hi_bank; VARIABLE ModeReg : std_logic_vector(10 DOWNTO 0) := (OTHERS => 'X'); VARIABLE Ref_Cnt : NATURAL RANGE 0 TO 4096 := 0; VARIABLE next_ref : TIME; VARIABLE BankString : STRING(8 DOWNTO 1) := " Bank-X ";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -