alu.vhd

来自「vhdl程序」· VHDL 代码 · 共 56 行

VHD
56
字号
USE WORK.ALL;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;ENTITY alu IS  GENERIC (    Size: INTEGER  );  PORT (    A     : IN  STD_LOGIC_VECTOR(Size-1 DOWNTO 0);    B     : IN  STD_LOGIC_VECTOR(Size-1 DOWNTO 0);    Ctrl  : IN  STD_LOGIC_VECTOR(2 DOWNTO 0);    Carry : OUT STD_LOGIC;		    Q     : OUT STD_LOGIC_VECTOR(Size-1 DOWNTO 0)  );END alu;ARCHITECTURE behaviour OF alu ISBEGIN  PROCESS(A,B,Ctrl)    VARIABLE a_int : STD_LOGIC_VECTOR(Size DOWNTO 0); -- := '0' & A; ???    VARIABLE b_int : STD_LOGIC_VECTOR(Size DOWNTO 0); -- := '0' & B; ???  BEGIN    a_int := '0' & A;    b_int := '0' & B;    Carry <= '0';    CASE Ctrl is      WHEN "000" =>  Q     <= NOT A;      WHEN "001" =>  Q     <= A AND B;      WHEN "010" =>  Q     <= A XOR B;      WHEN "011" =>  Q     <= A OR B;      WHEN "100" =>  Q     <= CONV_STD_LOGIC_VECTOR(SIGNED(a_Int)-1,Size+1)(Size-1 DOWNTO 0);      WHEN "101" =>  Q     <= CONV_STD_LOGIC_VECTOR(SIGNED(a_Int)+SIGNED(b_Int),Size+1)(Size-1 DOWNTO 0);                     Carry <= CONV_STD_LOGIC_VECTOR(SIGNED(a_Int)+SIGNED(b_Int),Size+1)(Size);      WHEN "110" =>  Q     <= CONV_STD_LOGIC_VECTOR(SIGNED(a_Int)-SIGNED(b_Int),Size+1)(Size-1 DOWNTO 0);                     Carry <= CONV_STD_LOGIC_VECTOR(SIGNED(a_Int)-SIGNED(b_Int),Size+1)(Size);      WHEN "111" =>  Q     <= CONV_STD_LOGIC_VECTOR(SIGNED(a_Int)+1,Size+1)(Size-1 DOWNTO 0);      WHEN OTHERS => ASSERT false report "Ctrl out of range, testbench error"severity error;    END CASE;  END PROCESS;END behaviour;

⌨️ 快捷键说明

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