⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portcout.vhd

📁 8255的vhdl 程序
💻 VHD
📖 第 1 页 / 共 2 页
字号:
                     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 + -