alu.vhd

来自「在软件MAX+plus II环境中」· VHDL 代码 · 共 69 行

VHD
69
字号
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ALU IS
PORT(
       AC, DR: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
       S1, S0: IN STD_LOGIC;
       BCDOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
       CY,ZI:  OUT STD_LOGIC
       );
END ALU;
ARCHITECTURE A OF ALU IS
SIGNAL AA,BB,TEMP: STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
       PROCESS(S1,S0)  
       BEGIN
          IF(S1='0' AND S0='0') THEN               
            AA<='0'&AC;
            BB<='0'&DR;
            TEMP <= AA + BB;
            BCDOUT <= TEMP(7 DOWNTO 0);  --AC + DR;
            CY<=TEMP(8);
                IF( TEMP ="100000000") THEN
                    ZI <= '1';
                ELSE
                    ZI <= '0';
                END IF;
          ELSIF(S1='0' AND S0='1') THEN  --执行比较或减运算
          
            AA<='0'&AC;
            BB<='0'&DR;
            TEMP <= AA - BB;
            BCDOUT <= TEMP(7 DOWNTO 0);
            CY<=TEMP(8);
            IF( TEMP ="000000000") THEN
               ZI <= '1';
            ELSE
               ZI <= '0';
            END IF;
          ELSIF(S1='1' AND S0='0') THEN --加1运算
            AA<='0'&AC;
            TEMP<=AA+1;
            BCDOUT<=TEMP(7 DOWNTO 0);
            CY<=TEMP(8);
            IF( TEMP ="100000000") THEN
               ZI <= '1';
            ELSE
               ZI <= '0';
            END IF;
          ELSIF(S1='1' AND S0='1') THEN--减一运算
            AA<='0'&AC;
            TEMP<=AA-1;
            BCDOUT<=TEMP(7 DOWNTO 0);
            CY<=TEMP(8);
            IF( TEMP ="000000000") THEN
                ZI <= '1';
            ELSE
                ZI <= '0';
            END IF;
          ELSE
            BCDOUT <= "00000000";
            CY <= '0';
            ZI <= '0';
          END IF;
       END PROCESS;
END A;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?