📄 k7a163600a.vhd
字号:
& "command." SEVERITY SeverityMode; END IF; OBuf2 := OBuf1; -- The State Machine CASE state IS WHEN desel => CASE command IS WHEN ds => OBuf1 := (others => 'Z'); WHEN begin_rw => state <= begin_rdwr; 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); startaddr := MemAddr; memstart := to_nat(AddressIn(1 downto 0)); 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 (WEANIn = '0') THEN MemDataA(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); END IF; END IF; IF (WEBNIn = '0') THEN MemDataB(MemAddr) := -1; IF Violation /= 'X' THEN MemDataB(MemAddr) := to_nat(DatBIn); END IF; END IF; IF (WECNIn = '0') THEN MemDataC(MemAddr) := -1; IF Violation /= 'X' THEN MemDataC(MemAddr) := to_nat(DatCIn); END IF; END IF; IF (WEDNIn = '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'); OBuf2 := (others => 'Z'); WHEN SPwr_susp => OBuf1 := (others => 'Z'); OBuf2 := (others => 'Z'); WHEN read_burst => OBuf1 := (others => 'Z'); OBuf2 := (others => 'Z'); WHEN read_susp => OBuf1 := (others => 'Z'); OBuf2 := (others => 'Z'); END CASE; WHEN begin_rdwr => Burst_Cnt := 0; CASE command IS WHEN ds => state <= desel; OBuf1 := (others => 'Z'); OBuf2 := (others => 'Z'); WHEN begin_rw => 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); startaddr := MemAddr; memstart := to_nat(AddressIn(1 downto 0)); 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 (WEANIn = '0') THEN MemDataA(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); END IF; END IF; IF (WEBNIn = '0') THEN MemDataB(MemAddr) := -1; IF Violation /= 'X' THEN MemDataB(MemAddr) := to_nat(DatBIn); END IF; END IF; IF (WECNIn = '0') THEN MemDataC(MemAddr) := -1; IF Violation /= 'X' THEN MemDataC(MemAddr) := to_nat(DatCIn); END IF; END IF; IF (WEDNIn = '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'); OBuf2 := (others => 'Z'); WHEN SPwr_susp => state <= SPwrite; OBuf1 := (others => 'Z'); OBuf2 := (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 (WEANIn = '0') THEN MemDataA(MemAddr) := -1; IF Violation /= 'X' THEN MemDataA(MemAddr) := to_nat(DatAIn); END IF; END IF; IF (WEBNIn = '0') THEN MemDataB(MemAddr) := -1; IF Violation /= 'X' THEN MemDataB(MemAddr) := to_nat(DatBIn); END IF; END IF; IF (WECNIn = '0') THEN MemDataC(MemAddr) := -1; IF Violation /= 'X' THEN MemDataC(MemAddr) := to_nat(DatCIn); END IF; END IF; IF (WEDNIn = '0') THEN MemDataD(MemAddr) := -1; IF Violation /= 'X' THEN MemDataD(MemAddr) := to_nat(DatDIn); END IF; END IF; END IF; WHEN read_burst => state <= read; Burst_Cnt := Burst_Cnt + 1; offset := Burst_Seq(memstart)(Burst_Cnt); MemAddr := startaddr + offset; 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 read_susp => OBuf1 := (others => 'Z'); END CASE; WHEN SPwrite => CASE command IS WHEN ds => state <= desel; OBuf1 := (others => 'Z'); OBuf2 := (others => 'Z'); WHEN begin_rw => state <= begin_rdwr; MemAddr := to_nat(AddressIn); startaddr := Mem
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -