📄 portcout.vhd
字号:
PortCOutRegD (3) <= '0'; -- Reset INTRA on read strobe
ELSIF (RisePCIN4 = '1' AND PortCOutRegQ (5) = '1') THEN
PortCOutRegD (3) <= PortCOutRegQ (4); -- Set INTRA on rising edge of STBA
ELSE
PortCOutRegD (3) <= PortCOutRegQ (3);
END IF;
END IF;
ELSIF (ModeA(1) = '1') THEN -- Mode 2
IF ( PortCOutLd (3) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (3) <= DIN(0); -- Load from bit set/reset
ELSE
IF (PortAWrite = '0' OR PortARead = '0') THEN -- Reset INTRA on either read or write strobes
PortCOutRegD (3) <= '0';
ELSIF (PortAWrite = '1' AND RisePCIN6 = '1'
AND PortCOutRegQ (7) = '1') THEN -- Set INTRA on rising edge of ACKA
PortCOutRegD (3) <= PortCOutRegQ (6);
ELSIF (PortARead = '1' AND RisePCIN4 = '1' -- OR
AND PortCOutRegQ (5) = '1') THEN -- Set INTRA on rising edge of STBA
PortCOutRegD (3) <= PortCOutRegQ (4);
ELSE
PortCOutRegD (3) <= PortCOutRegQ (3);
END IF;
END IF;
ELSE
PortCOutRegD (3) <= PortCOutRegQ (3);
END IF;
IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '0')) THEN -- Mode 0 and Mode 1 Output
IF (PortCOutLd (4) = '0') THEN
IF ( PortCOverride = '1') THEN
PortCOutRegD (4) <= DIN(0); -- Load INTEA from bit set/reset
ELSE
PortCOutRegD (4) <= DIN(4); -- Load INTEA from bus
END IF;
ELSE
PortCOutRegD (4) <= PortCOutRegQ (4);
END IF; -- Mode 1 Input and Mode 2
ELSE
IF ( PortCOutLd (4) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (4) <= DIN(0); -- Load INTEA(2) from bit set/reset
ELSE
PortCOutRegD (4) <= PortCOutRegQ (4);
END IF;
END IF;
IF (ModeA = "00"OR (ModeA = "01" AND PortA_IO = '0')) THEN -- Mode 0 and Mode 1 Output
IF (PortCOutLd (5) = '0') THEN
IF ( PortCOverride = '1') THEN
PortCOutRegD (5) <= DIN(0); -- Load from bit set/reset
ELSE
PortCOutRegD (5) <= DIN(5); -- Load from bus
END IF;
ELSE
PortCOutRegD (5) <= PortCOutRegQ (5);
END IF;
ELSIF (ModeA = "01") THEN -- Mode 1
IF ( PortCOutLd (5) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (5) <= DIN(0); -- Load from bit set/reset
ELSIF (PortA_IO = '1') THEN -- Mode 1 Input
IF (RisePortARead = '1' AND PortCOutRegQ(3) = '0') THEN
PortCOutRegD (5) <= '0'; -- Reset IBFA on rising edge of read strobe
ELSIF (PCIN(4) = '0') THEN
PortCOutRegD (5) <= '1'; -- Set IBFA when STBA goes low
ELSE
PortCOutRegD (5) <= PortCOutRegQ (5);
END IF;
ELSE
PortCOutRegD (5) <= PortCOutRegQ (5);
END IF;
ELSIF (ModeA(1) = '1') THEN -- Mode 2
IF ( PortCOutLd (5) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (5) <= DIN(0); -- Load from bit set/reset
ELSE
IF (RisePortARead = '1' AND PortCOutRegQ(3) = '0') THEN
PortCOutRegD (5) <= '0'; -- Reset IBFA on rising edge of read strobe
ELSIF (PCIN(4) = '0') THEN
PortCOutRegD (5) <= '1'; -- Set IBFA when STBA goes low
ELSE
PortCOutRegD (5) <= PortCOutRegQ (5);
END IF;
END IF;
ELSE
PortCOutRegD (5) <= PortCOutRegQ (5);
END IF;
IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '1')) THEN -- Mode 0 and Mode 1 Input
IF (PortCOutLd (6) = '0') THEN
IF ( PortCOverride = '1') THEN
PortCOutRegD (6) <= DIN(0); -- Load INTEA from bit set/reset
ELSE
PortCOutRegD (6) <= DIN(6); -- Load INTEA from bus
END IF;
ELSE
PortCOutRegD (6) <= PortCOutRegQ (6);
END IF;
ELSE
IF ( PortCOutLd (6) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (6) <= DIN(0); -- Load INTEA(1) from bit set/reset
ELSE
PortCOutRegD (6) <= PortCOutRegQ (6);
END IF;
END IF;
IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '1')) THEN -- Mode 0 and Mode 1 Input
IF (PortCOutLd (7) = '0') THEN
IF ( PortCOverride = '1') THEN
PortCOutRegD (7) <= DIN(0); -- Load from bit set/reset
ELSE
PortCOutRegD (7) <= DIN(7); -- Load from bus
END IF;
ELSE
PortCOutRegD (7) <= PortCOutRegQ (7);
END IF;
ELSIF (ModeA = "01") THEN -- Mode 1
IF ( PortCOutLd (7) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (7) <= DIN(0);
ELSIF (PortA_IO = '0') THEN -- Mode 1 Output
IF (RisePortAWrite = '1') THEN
PortCOutRegD (7) <= '0'; -- Reset OBFA on rising edge of Write strobe
ELSIF (PCIN(6) = '0') THEN
PortCOutRegD (7) <= '1'; -- Set OBFA when ACKA goes low
ELSE
PortCOutRegD (7) <= PortCOutRegQ (7);
END IF;
ELSE
PortCOutRegD (7) <= PortCOutRegQ (7);
END IF;
ELSIF (ModeA(1) = '1') THEN -- Mode 2
IF ( PortCOutLd (7) = '0' AND PortCOverride = '1') THEN
PortCOutRegD (7) <= DIN(0); -- Load from bit set/reset
ELSE
IF (RisePortAWrite = '1') THEN -- Reset OBFA on rising edge of write strobe
PortCOutRegD (7) <= '0';
ELSIF (PCIN(6) = '0') THEN -- Set OBFA when ACKA goes low
PortCOutRegD (7) <= '1';
ELSE
PortCOutRegD (7) <= PortCOutRegQ (7);
END IF;
END IF;
ELSE
PortCOutRegD (7) <= PortCOutRegQ (7);
END IF;
END PROCESS;
-- Process for Port C output register
PortCOutRegSyncProc: PROCESS ( RESET, CLK )
BEGIN
IF ( RESET = '1') THEN
PortCoutRegQ <= "00000000";
ELSIF ( CLK'EVENT and CLK = '1') THEN
PortCoutRegQ <= PortCOutRegD;
END IF;
END PROCESS;
-- Process for edge detect registers
EdgeDetectSyncProc: PROCESS ( RESET, CLK )
BEGIN
IF ( RESET = '1') THEN
RisePortAWriteQ <= '0';
RisePortBWriteQ <= '0';
RisePortAReadQ <= '0';
RisePortBReadQ <= '0';
RisePCIN6Q <= '0';
RisePCIN4Q <= '0';
RisePCIN2Q <= '0';
ELSIF ( CLK'EVENT and CLK = '1') THEN
RisePortAWriteQ <= PortAWrite;
RisePortBWriteQ <= PortBWrite;
RisePortAReadQ <= PortARead;
RisePortBReadQ <= PortBRead;
RisePCIN6Q <= PCIN(6);
RisePCIN4Q <= PCIN(4);
RisePCIN2Q <= PCIN(2);
END IF;
END PROCESS;
-- Assignments for edge detect signals
RisePortAWrite <= PortAWrite AND NOT RisePortAWriteQ;
RisePortBWrite <= PortBWrite AND NOT RisePortBWriteQ;
RisePortARead <= PortARead AND NOT RisePortAReadQ;
RisePortBRead <= PortBRead AND NOT RisePortBReadQ;
RisePCIN6 <= PCIN(6) AND NOT RisePCIN6Q;
RisePCIN4 <= PCIN(4) AND NOT RisePCIN4Q;
RisePCIN2 <= PCIN(2) AND NOT RisePCIN2Q;
END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -