📄 cy7c1380.vhd
字号:
SEVERITY SeverityMode; ASSERT (not(Is_X(ADSPNIn))) REPORT InstancePath & partID & ": Unusable value for ADSPN" SEVERITY SeverityMode; ASSERT (not(Is_X(ADSCNIn))) REPORT InstancePath & partID & ": Unusable value for ADSCN" SEVERITY SeverityMode; ASSERT (not(Is_X(CE2In))) REPORT InstancePath & partID & ": Unusable value for CE2" SEVERITY SeverityMode; ASSERT (not(Is_X(CE1NegIn))) REPORT InstancePath & partID & ": Unusable value for CE1Neg" SEVERITY SeverityMode; ASSERT (not(Is_X(CE3NegIn))) REPORT InstancePath & partID & ": Unusable value for CE3Neg" SEVERITY SeverityMode; -- Command Decode IF (GWNIn = '1' AND (BWENIn = '1' OR (BWENIn = '0' AND BWANIn = '1' AND BWBNIn = '1' AND BWCNIn = '1' AND BWDNIn = '1'))) THEN R := '1'; ELSE R := '0'; END IF; IF ((CE3NegIn = '1' AND CE1NegIn = '0') AND (ADSPNIn = '0' OR (ADSPNIn = '1' AND ADSCNIn = '0'))) OR (CE1NegIn = '1' AND ADSCNIn = '0') OR ((CE2In = '0' AND CE1NegIn = '0') AND (ADSPNIn = '0' OR (ADSPNIn = '1' AND ADSCNIn = '0'))) THEN command := ds; ELSIF ((CE3NegIn = '0' AND CE2In = '1' AND CE1NegIn = '0') AND (ADSPNIn = '0' OR (ADSPNIn = '1' AND ADSCNIn = '0')) AND R = '1') THEN command := begin_read; ELSIF (ADSCNIn = '1' AND (ADSPNIn = '1' OR CE1NegIn = '1') AND R = '1') THEN IF ADVNIn = '0' THEN command := read_burst; ELSE command := read_susp; END IF; ELSIF (CE3NegIn = '0' AND CE2In = '1' AND CE1NegIn = '0' AND ADSPNIn = '0' AND R = '0') THEN command := begin_SPwr; ELSIF (ADSCNIn = '1' AND (ADSPNIn = '1' OR CE1NegIn = '1') AND R = '0') THEN IF ADVNIn = '0' THEN command := SPwr_burst; ELSE command := SPwr_susp; END IF; ELSIF (CE3NegIn = '0' AND CE2In = '1' AND CE1NegIn = '0' AND ADSPNIn = '1' AND ADSCNIn = '0' AND R = '0') THEN command := SCwr; ELSE ASSERT false REPORT InstancePath & partID & ": Could not decode " & "command." SEVERITY SeverityMode; END IF; OBuf2 := OBuf1; cycle2 := cycle1; -- The State Machine CASE state IS WHEN desel => CASE command IS WHEN ds => OBuf1 := (others => 'Z'); cycle1 := true; WHEN begin_SPwr => cycle1 := false; cycle2 := false; state <= begin_SPwrite; MemAddr := to_nat(AddressIn); startaddr := MemAddr; memstart := to_nat(AddressIn(1 downto 0)); WHEN begin_read => cycle1 := false; cycle2 := false; state <= begin_rd; MemAddr := to_nat(AddressIn); startaddr := MemAddr; memstart := to_nat(AddressIn(1 downto 0)); IF MemDataA(MemAddr) = -2 THEN OBuf1(8 downto 0) := (others => 'U'); ELSIF MemDataA(MemAddr) = -1 THEN OBuf1(8 downto 0) := (others => 'X'); ELSE OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9); END IF; IF MemDataB(MemAddr) = -2 THEN OBuf1(17 downto 9) := (others => 'U'); ELSIF MemDataB(MemAddr) = -1 THEN OBuf1(17 downto 9) := (others => 'X'); ELSE OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9); END IF; IF MemDataC(MemAddr) = -2 THEN OBuf1(26 downto 18) := (others => 'U'); ELSIF MemDataC(MemAddr) = -1 THEN OBuf1(26 downto 18) := (others => 'X'); ELSE OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9); END IF; IF MemDataD(MemAddr) = -2 THEN OBuf1(35 downto 27) := (others => 'U'); ELSIF MemDataD(MemAddr) = -1 THEN OBuf1(35 downto 27) := (others => 'X'); ELSE OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9); END IF; WHEN SCwr => cycle1 := false; cycle2 := false; state <= SCwrite; MemAddr := to_nat(AddressIn); OBuf1 := (others => 'Z'); IF GWNIn = '0' THEN MemDataA(MemAddr) := -1; MemDataB(MemAddr) := -1; MemDataC(MemAddr) := -1; MemDataD(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); MemDataB(MemAddr) := to_nat(DatBIn); MemDataC(MemAddr) := to_nat(DatCIn); MemDataD(MemAddr) := to_nat(DatDIn); END IF; ELSE IF (BWANIn = '0') THEN MemDataA(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); END IF; END IF; IF (BWBNIn = '0') THEN MemDataB(MemAddr) := -1; IF Violation /= 'X' THEN MemDataB(MemAddr) := to_nat(DatBIn); END IF; END IF; IF (BWCNIn = '0') THEN MemDataC(MemAddr) := -1; IF Violation /= 'X' THEN MemDataC(MemAddr) := to_nat(DatCIn); END IF; END IF; IF (BWDNIn = '0') THEN MemDataD(MemAddr) := -1; IF Violation /= 'X' THEN MemDataD(MemAddr) := to_nat(DatDIn); END IF; END IF; END IF; WHEN SPwr_burst => cycle1 := false; cycle2 := false; OBuf1 := (others => 'Z'); WHEN SPwr_susp => cycle1 := false; cycle2 := false; OBuf1 := (others => 'Z'); WHEN read_burst => cycle1 := false; cycle2 := false; OBuf1 := (others => 'Z'); WHEN read_susp => cycle1 := false; cycle2 := false; OBuf1 := (others => 'Z'); END CASE; WHEN begin_rd => Burst_Cnt := 0; CASE command IS WHEN ds => state <= desel; OBuf1 := (others => 'Z'); WHEN begin_SPwr => OBuf1 := (others => 'Z'); state <= begin_SPwrite; MemAddr := to_nat(AddressIn); startaddr := MemAddr; memstart := to_nat(AddressIn(1 downto 0)); WHEN begin_read => MemAddr := to_nat(AddressIn); startaddr := MemAddr; memstart := to_nat(AddressIn(1 downto 0)); IF MemDataA(MemAddr) = -2 THEN OBuf1(8 downto 0) := (others => 'U'); ELSIF MemDataA(MemAddr) = -1 THEN OBuf1(8 downto 0) := (others => 'X'); ELSE OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9); END IF; IF MemDataB(MemAddr) = -2 THEN OBuf1(17 downto 9) := (others => 'U'); ELSIF MemDataB(MemAddr) = -1 THEN OBuf1(17 downto 9) := (others => 'X'); ELSE OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9); END IF; IF MemDataC(MemAddr) = -2 THEN OBuf1(26 downto 18) := (others => 'U'); ELSIF MemDataC(MemAddr) = -1 THEN OBuf1(26 downto 18) := (others => 'X'); ELSE OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9); END IF; IF MemDataD(MemAddr) = -2 THEN OBuf1(35 downto 27) := (others => 'U'); ELSIF MemDataD(MemAddr) = -1 THEN OBuf1(35 downto 27) := (others => 'X'); ELSE OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9); END IF; WHEN SCwr => state <= SCwrite; MemAddr := to_nat(AddressIn); OBuf1 := (others => 'Z'); IF GWNIn = '0' THEN MemDataA(MemAddr) := -1; MemDataB(MemAddr) := -1; MemDataC(MemAddr) := -1; MemDataD(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); MemDataB(MemAddr) := to_nat(DatBIn); MemDataC(MemAddr) := to_nat(DatCIn); MemDataD(MemAddr) := to_nat(DatDIn); END IF; ELSE IF (BWANIn = '0') THEN MemDataA(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); END IF; END IF; IF (BWBNIn = '0') THEN MemDataB(MemAddr) := -1; IF Violation /= 'X' THEN MemDataB(MemAddr) := to_nat(DatBIn); END IF; END IF; IF (BWCNIn = '0') THEN MemDataC(MemAddr) := -1; IF Violation /= 'X' THEN MemDataC(MemAddr) := to_nat(DatCIn); END IF; END IF; IF (BWDNIn = '0') THEN MemDataD(MemAddr) := -1; IF Violation /= 'X' THEN MemDataD(MemAddr) := to_nat(DatDIn); END IF; END IF; END IF; WHEN SPwr_burst => OBuf1 := (others => 'Z'); WHEN SPwr_susp => state <= SPwrite; OBuf1 := (others => 'Z'); IF GWNIn = '0' THEN MemDataA(MemAddr) := -1; MemDataB(MemAddr) := -1; MemDataC(MemAddr) := -1; MemDataD(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); MemDataB(MemAddr) := to_nat(DatBIn); MemDataC(MemAddr) := to_nat(DatCIn); MemDataD(MemAddr) := to_nat(DatDIn); END IF; ELSE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -