📄 mb811643242.vhd
字号:
DataIn(27) => DQ27_nwv, DataIn(28) => DQ28_nwv, DataIn(29) => DQ29_nwv, DataIn(30) => DQ30_nwv, DataIn(31) => DQ31_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(31 DOWNTO 0); BEGIN PoweredUp <= true after tpowerup; ---------------------------------------------------------------------------- -- Main Behavior Process ---------------------------------------------------------------------------- Behavior : PROCESS (BAIn, DQM0In, DQM1In, DQM2In, DQM3In, 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_DQM3_CLK : X01 := '0'; VARIABLE TD_DQM3_CLK : VitalTimingDataType; VARIABLE Tviol_DQM2_CLK : X01 := '0'; VARIABLE TD_DQM2_CLK : VitalTimingDataType; VARIABLE Tviol_DQM1_CLK : X01 := '0'; VARIABLE TD_DQM1_CLK : VitalTimingDataType; VARIABLE Tviol_DQM0_CLK : X01 := '0'; VARIABLE TD_DQM0_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 NATURAL RANGE 0 TO 255; TYPE MemBlock IS ARRAY (0 to 3) 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 3) OF std_logic_vector(18 DOWNTO 0); TYPE burst_counter IS ARRAY (0 to 3) OF NATURAL RANGE 0 to 257; TYPE StartAddr_type IS ARRAY (0 to 3) OF NATURAL RANGE 0 TO 7; TYPE Burst_Inc_type IS ARRAY (0 to 3) OF NATURAL RANGE 0 TO 255; TYPE BaseLoc_type IS ARRAY (0 to 3) OF NATURAL RANGE 0 TO depth; TYPE OutWord IS ARRAY (3 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); VARIABLE MemData0 : MemBlock; VARIABLE MemData1 : MemBlock; VARIABLE MemData2 : MemBlock; VARIABLE MemData3 : MemBlock; 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 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 "; -- Functionality Results Variables VARIABLE Violation : X01 := '0'; VARIABLE DataDriveOut : std_logic_vector(31 DOWNTO 0) := (OTHERS => 'Z'); VARIABLE DataDrive : OutWord; VARIABLE DataDrive1 : OutWord; VARIABLE DataDrive2 : OutWord; VARIABLE DataDrive3 : OutWord; VARIABLE DQM0_reg0 : UX01; VARIABLE DQM1_reg0 : UX01; VARIABLE DQM2_reg0 : UX01; VARIABLE DQM3_reg0 : UX01; VARIABLE DQM0_reg1 : UX01; VARIABLE DQM1_reg1 : UX01; VARIABLE DQM2_reg1 : UX01; VARIABLE DQM3_reg1 : UX01; VARIABLE DQM0_reg2 : UX01; VARIABLE DQM1_reg2 : UX01; VARIABLE DQM2_reg2 : UX01; VARIABLE DQM3_reg2 : UX01; BEGIN -------------------------------------------------------------------- -- Timing Check Section -------------------------------------------------------------------- IF (TimingChecksOn) THEN VitalSetupHoldCheck ( TestSignal => BAIn, TestSignalName => "BA", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => (CKEreg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_BA_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_BA_CLK ); VitalSetupHoldCheck ( TestSignal => DQM3In, TestSignalName => "DQM3", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => (CKEreg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_DQM3_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_DQM3_CLK ); VitalSetupHoldCheck ( TestSignal => DQM2In, TestSignalName => "DQM2", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => (CKEreg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_DQM2_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_DQM2_CLK ); VitalSetupHoldCheck ( TestSignal => DQM1In, TestSignalName => "DQM1", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => (CKEreg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_DQM1_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_DQM1_CLK ); VitalSetupHoldCheck ( TestSignal => DQM0In, TestSignalName => "DQM0", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => (CKEreg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_DQM0_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_DQM0_CLK );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -