📄 idt72t36135m.vhd
字号:
VARIABLE CntWCLKforResPAF_1 : INTEGER; VARIABLE CntWCLKforSetIR : INTEGER; VARIABLE CntRCLKforSetPAE : INTEGER; VARIABLE CntRCLKforSetPAE_1 : INTEGER; VARIABLE CntRCLKforResPAE : INTEGER; VARIABLE CntRCLKforResPAE_1 : INTEGER; VARIABLE CountForSerial : INTEGER := 0; VARIABLE TmpMemLocRead_H : std_logic_vector(17 DOWNTO 0); VARIABLE TmpMemLocRead_L : std_logic_vector(17 DOWNTO 0); VARIABLE TmpMemLocRead : std_logic_vector(35 DOWNTO 0) := (OTHERS => '0'); VARIABLE TmpOffset : std_logic_vector(37 DOWNTO 0); VARIABLE TmpEmptyOffset : std_logic_vector(18 DOWNTO 0); VARIABLE TmpFullOffset : std_logic_vector(18 DOWNTO 0); VARIABLE TmpMemLocOE : std_logic_vector(35 DOWNTO 0) := (OTHERS => '0'); VARIABLE TmpOffsetRead : std_logic_vector(18 DOWNTO 0); VARIABLE MemDataHigh : MemStore; VARIABLE MemDataLow : MemStore; VARIABLE time_OE : TIME := 0 ns; VARIABLE time_RCLK : TIME := 0 ns; VARIABLE TimeForFlag : TIME := 0 ns; VARIABLE TimeForFlag_1 : TIME := 0 ns; -- Output Glitch Detection Variables PROCEDURE SetFlagForOE IS BEGIN IF OENeg = '1' THEN FlagForOE <= '1','0' AFTER TimeForFlag; END IF; END SetFlagForOE; PROCEDURE Pointer IS BEGIN IF Retransmit = done THEN RefPointer := RdPointer; ELSE RefPointer := MarkedPointer; END IF; END Pointer; PROCEDURE SetFlags (ValueForPAE : IN INTEGER; ValueForPAF : IN INTEGER) IS BEGIN IF (WrPointer > RdPointer AND WrPointer - RdPointer >= ValueForPAE+1) OR (WrPointer < RdPointer AND TotalLoc - RdPointer + WrPointer >= ValueForPAE) OR (WrPointer = RdPointer AND Mode = FWFTMode AND CopyFFNeg = '1') OR (WrPointer = RdPointer AND Mode = IDTStandard AND CopyFFNeg = '0') THEN ResetPAEabd := yes; CntRCLKforResPAE := 2; ELSE SetPAEabd := yes; CntRCLKforSetPAE := 2; END IF; Pointer; IF (WrPointer > RefPointer AND WrPointer - RefPointer >= ValueForPAF+1) OR (WrPointer < RefPointer AND TotalLoc - RefPointer + WrPointer >= ValueForPAF)OR (WrPointer = RefPointer AND Mode = FWFTMode AND CopyFFNeg = '1') OR (WrPointer = RefPointer AND Mode = IDTStandard AND CopyFFNeg = '0')THEN SetPAFabd := yes; CntWCLKforSetPAF := 2; ELSE ResetPAFabd := yes; CntWCLKforResPAF := 2; END IF; END SetFlags; PROCEDURE SetFlagsRt (ValueForPAE : IN INTEGER; ValueForPAF : IN INTEGER) IS BEGIN IF (WrPointer > RdPointer AND WrPointer - RdPointer >= ValueForPAE+1) OR (WrPointer < RdPointer AND TotalLoc - RdPointer + WrPointer >= ValueForPAE) OR (WrPointer = RdPointer AND Mode = FWFTMode AND CopyFFNeg = '1') OR (WrPointer = RdPointer AND Mode = IDTStandard AND CopyFFNeg = '0') THEN ResetPAE := yes; CntRCLKforResPAE := 1; ELSE SetPAE := yes; CntRCLKforSetPAE := 1; END IF; Pointer; IF (WrPointer > RefPointer AND WrPointer - RefPointer >= ValueForPAF+1) OR (WrPointer < RefPointer AND TotalLoc - RefPointer + WrPointer >= ValueForPAF) OR (WrPointer = RefPointer AND Mode = FWFTMode AND CopyFFNeg = '1') OR (WrPointer = RefPointer AND Mode = IDTStandard AND CopyFFNeg = '0') THEN SetPAF := yes; CntWCLKforSetPAF := 1; ELSE ResetPAF := yes; CntWCLKforResPAF := 1; END IF; END SetFlagsRt; PROCEDURE SetFlagsWrite (ValueForPAE_Wr : IN INTEGER; ValueForPAF_Wr : IN INTEGER) IS BEGIN IF WrPointer >= RdPointer THEN IF (WrPointer > RdPointer AND WrPointer - RdPointer = ValueForPAE_Wr+1) OR (WrPointer = RdPointer AND TotalLoc = ValueForPAE_Wr) THEN IF ProgFlagMode = Asynchronous THEN PAENeg_zd <= (OTHERS => '1'); CopyPAE <= '1'; ELSE ResetPAE := yes; CntRCLKforResPAE := 1; END IF; END IF; ELSE IF TotalLoc - RdPointer + WrPointer = ValueForPAE_Wr THEN IF ProgFlagMode = Asynchronous THEN PAENeg_zd <= (OTHERS => '1'); CopyPAE <= '1'; ELSE ResetPAE_1 := yes; CntRCLKforResPAE_1 := 1; END IF; END IF; END IF; Pointer; IF WrPointer >= RefPointer THEN IF (WrPointer > RefPointer AND WrPointer - RefPointer = ValueForPAF_Wr+1) OR (WrPointer = RefPointer AND WrPointer - RefPointer = ValueForPAF_Wr) THEN IF ProgFlagMode = Asynchronous THEN PAFNeg_zd <= (OTHERS => '0'); CopyPAF <= '0'; ELSE SetPAF := yes; CntWCLKforSetPAF := 2; END IF; END IF; ELSE IF TotalLoc - RefPointer + WrPointer = ValueForPAF_Wr THEN IF ProgFlagMode = Asynchronous THEN PAFNeg_zd <= (OTHERS => '0'); CopyPAF <= '0'; ELSE SetPAF_1 := yes; CntWCLKforSetPAF_1 := 2; END IF; END IF; END IF; END SetFlagsWrite; PROCEDURE SetFlagsRead (ValueForPAE_Rd : IN INTEGER; ValueForPAF_Rd : IN INTEGER) IS BEGIN IF WrPointer >= RdPointer THEN IF WrPointer - RdPointer = ValueForPAE_Rd THEN IF ProgFlagMode = Asynchronous THEN PAENeg_zd <= (OTHERS => '0'); CopyPAE <= '0'; ELSE SetPAE := yes; CntRCLKforSetPAE := 2; END IF; END IF; ELSE IF TotalLoc - RdPointer + WrPointer = ValueForPAE_Rd-1 THEN IF ProgFlagMode = Asynchronous THEN PAENeg_zd <= (OTHERS => '0'); CopyPAE <= '0'; ELSE SetPAE_1 := yes; CntRCLKforSetPAE_1 := 2; END IF; END IF; END IF; Pointer; IF WrPointer >= RefPointer THEN IF (WrPointer > RefPointer AND WrPointer - RefPointer = ValueForPAF_Rd) OR (WrPointer = RefPointer AND TotalLoc = ValueForPAF_Rd)THEN IF ProgFlagMode = Asynchronous THEN PAFNeg_zd <= (OTHERS => '1'); CopyPAF <= '1'; ELSE ResetPAF := yes; CntWCLKforResPAF := 1; END IF; END IF; ELSE IF TotalLoc - RefPointer + WrPointer = ValueForPAF_Rd-1 THEN IF ProgFlagMode = Asynchronous THEN PAFNeg_zd <= (OTHERS => '1'); CopyPAF <= '1'; ELSE ResetPAF_1 := yes; CntWCLKforResPAF_1 := 1; END IF; END IF; END IF; END SetFlagsRead; PROCEDURE CountCLK (Counter : INOUT INTEGER; Condition : INOUT yesno; SIGNAL CopyFlag : OUT std_ulogic; SIGNAL Flag: OUT std_logic_vector(1 TO 2); SIGNAL SkewFlag : IN std_ulogic; SIGNAL Value : IN std_ulogic; abd : IN yesno := no) IS BEGIN IF Counter = 0 THEN Flag <= (OTHERS => Value); CopyFlag <= Value; Condition := no; IF abd = yes THEN FlagAbd <= '1', '0' AFTER 1 ns; END IF; ELSE IF SkewFlag = '0' THEN Counter := Counter-1; END IF; END IF; END CountCLK; PROCEDURE ParallelLoad IS BEGIN IF ByteOffset = LSBEmptyOffset THEN IF Violation = '0' THEN TmpEmptyOffset := B"111" & DIn(15 DOWNTO 0); ELSE PaLdEmptyOk := no; END IF; ByteOffset := MSBEmptyOffset; ELSIF ByteOffset = MSBEmptyOffset THEN IF Violation = '0' THEN TmpEmptyOffset := TmpEmptyOffset AND (DIn(2 DOWNTO 0) & X"FFFF"); ELSE PaLdEmptyOk := no; END IF; PaLdEmptyEnd := yes; ByteOffset := LSBFullOffset; ELSIF ByteOffset = LSBFullOffset THEN IF Violation = '0' THEN TmpFullOffset := B"111" & DIn(15 DOWNTO 0); ELSE PaLdFullOk := no; END IF; ByteOffset := MSBFullOffset; ELSE IF Violation = '0' THEN TmpFullOffset := TmpFullOffset AND (DIn(2 DOWNTO 0) & X"FFFF"); ELSE PaLdFullOk := no; END IF; ByteOffset := LSBEmptyOffset; PaLdFullEnd := yes; END IF; END ParallelLoad; PROCEDURE SerialLoad IS BEGIN IF Violation = '0' THEN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -