📄 km416s4030.vhd
字号:
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 (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(11 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(15 DOWNTO 0) := (OTHERS => 'Z'); VARIABLE DataDrive : OutWord; VARIABLE DataDrive1 : OutWord; VARIABLE DataDrive2 : OutWord; VARIABLE DataDrive3 : OutWord; VARIABLE DQML_reg0 : UX01; VARIABLE DQMU_reg0 : UX01; VARIABLE DQML_reg1 : UX01; VARIABLE DQMU_reg1 : UX01; VARIABLE DQML_reg2 : UX01; VARIABLE DQMU_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 => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_BA_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_BA_CLK ); VitalSetupHoldCheck ( TestSignal => DQMUIn, TestSignalName => "DQMU", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_DQMU_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_DQMU_CLK ); VitalSetupHoldCheck ( TestSignal => DQMLIn, TestSignalName => "DQML", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_DQML_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_DQML_CLK ); VitalSetupHoldCheck ( TestSignal => DataIn, TestSignalName => "Data", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_D0_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_D0_CLK ); VitalSetupHoldCheck ( TestSignal => CKEIn, TestSignalName => "CKE", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => true, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_CKE_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_CKE_CLK ); VitalSetupHoldCheck ( TestSignal => AddressIn, TestSignalName => "Address", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_Address_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_Address_CLK ); VitalSetupHoldCheck ( TestSignal => WENegIn, TestSignalName => "WENeg", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_WENeg_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_WENeg_CLK ); VitalSetupHoldCheck ( TestSignal => RASNegIn, TestSignalName => "RASNeg", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_RASNeg_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_RASNeg_CLK ); VitalSetupHoldCheck ( TestSignal => CSNegIn, TestSignalName => "CSNeg", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_CSNeg_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_CSNeg_CLK ); VitalSetupHoldCheck ( TestSignal => CASNegIn, TestSignalName => "CASNeg", RefSignal => CLKIn, RefSignalName => "CLK", SetupHigh => tsetup_DQ0_CLK, SetupLow => tsetup_DQ0_CLK, HoldHigh => thold_DQ0_CLK, HoldLow => thold_DQ0_CLK, CheckEnabled => chip_en, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_CASNeg_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_CASNeg_CLK ); VitalPeriodPulseCheck ( TestSignal => CLKIn, TestSignalName => "CLK", Period => tperiod_CLK_posedge, PulseWidthLow => tpw_CLK_negedge, PulseWidthHigh => tpw_CLK_posedge, PeriodData => PD_CLK, XOn => XOn, MsgOn => MsgOn, Violation => Pviol_CLK, HeaderMsg => InstancePath & PartID, CheckEnabled => TRUE ); Violation := Pviol_CLK OR Tviol_BA_CLK OR Tviol_DQML_CLK OR Tviol_DQMU_CLK OR Tviol_D0_CLK OR Tviol_CKE_CLK OR Tviol_Address_CLK OR Tviol_WENeg_CLK OR Tviol_RASNeg_CLK OR Tviol_CSNeg_CLK OR Tviol_CASNeg_CLK; ASSERT Violation = '0' REPORT InstancePath & partID & ": simulation may be" & " inaccurate due to timing violations" SEVERITY SeverityMode; END IF; -- Timing Check Section -------------------------------------------------------------------- -- Functional Section -------------------------------------------------------------------- IF (rising_edge(CLKIn)) THEN CKEreg <= CKEIn; IF (NOW > Next_Ref AND PoweredUp AND Ref_Cnt > 0) THEN Ref_Cnt := Ref_Cnt - 1; Next_Ref := NOW + tdevice_REF; END IF; IF CKEreg = '1' THEN IF CSNegIn = '0' THEN chip_en := true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -