VHDL中的16位ALU设计

此项目是VHDL中的16位ALU设计。今天将介绍16位ALU设计的一部分;16位ALU是我在上个项目中介绍的协处理器中处理单元的核心组合组件。此VHDL项目中将提供16位ALU的完整VHDL代码以及测试平台(附件文件中)。了解更多请下载附件。

应用介绍

此项目是VHDL中的16位ALU设计。

今天将介绍16位ALU设计的一部分;16位ALU是我在上个项目中介绍的协处理器中处理单元的核心组合组件。此VHDL项目中将提供16位ALU的完整VHDL代码以及测试平台(附件文件中)。

alu_1.png

16位ALU的指令集如下:

1. ADD: ABUS + BBUS -> ALUOUT

2. SUB: ABUS - BBUS -> ALUOUT

3. AND: ABUS & BBUS -> ALUOUT

4. OR: ABUS | BBUS -> ALUOUT

5. XOR: ABUS ^ BBUS -> ALUOUT

6. NOT: ~ABUS -> ALUOUT

7. MOV: ABUS -> ALUOUT

本人在下方展示了16位ALU的VHDL代码;想了解更多请下载附件。

-- fpga4student.com: FPGA projects, Verilog projects, VHDL projects
-- VHDL project: VHDL code for 16-bit ALU 
-- Top level VHDL code for 16-bit ALU 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- 16-bit ALU 
entity ALU is
 port (
   ABUS: in std_logic_vector(15 downto 0); -- ABUS data input of the 16-bit ALU
   BBUS: in std_logic_vector(15 downto 0); -- BBUS data input of the 16-bit ALU
   ALUctrl: in std_logic_vector(3 downto 0); -- ALUctrl control input of the 16-bit ALU 
   ALUOUT: out std_logic_vector(15 downto 0)  -- 16-bit data output of the 16-bit ALU 
   );
end ALU;
architecture Behavioral of ALU is
-- N-bit Adder in Verilog 
component N_bit_adder is
generic (
    N: integer:=32
   );
port( input1: in std_logic_vector(N-1 downto 0);
  input2: in std_logic_vector(N-1 downto 0);
  answer: out std_logic_vector(N-1 downto 0)
 );
end component N_bit_adder;
signal BBUS_not: std_logic_vector(16-1 downto 0);
signal tmp_out1: std_logic_vector(16-1 downto 0);
signal tmp_out2: std_logic_vector(16-1 downto 0);
signal tmp: std_logic_vector(16-1 downto 0);
begin
-- instantiate Verilog N-bit Adder in VHDL code 
u1_N_bit_adder: N_bit_adder generic map ( N => 16) -- ABUS + BBUS
     port map( input1 => ABUS, input2 => BBUS,answer => tmp_out1 ); 
u2_N_bit_adder: N_bit_adder generic map ( N => 16) -- ABUS + (~BBUS)
     port map( input1 => ABUS, input2 => BBUS_not,answer => tmp_out2 ); 
u3_N_bit_adder: N_bit_adder generic map ( N => 16) -- ABUS + (~BBUS) + 1 = ABUS - BBUS
     port map( input1 => tmp_out2, input2 => x"0001",answer => tmp ); 
BBUS_not <= not BBUS;  
-- Other instructions of the 16-bit ALU in VHDL 
process(ALUctrl,ABUS,BBUS,tmp_out1,tmp)
begin 
case(ALUctrl) is
 when "0000" =>  ALUOUT <= tmp_out1;  -- ADD
 when "0001" =>  ALUOUT <= tmp ;-- SUB 
 when "0010" =>  ALUOUT <= ABUS and BBUS; -- AND
 when "0011" =>  ALUOUT <= ABUS or BBUS; -- OR
 when "0100" =>  ALUOUT <= ABUS xor BBUS; -- XOR
 when "0101" =>  ALUOUT <= not ABUS; -- NOT
 when "0110" =>  ALUOUT <= ABUS; -- MOVE
 when others => ALUOUT <= tmp_out1; 
 end case;
end process;
end Behavioral;

文件列表(部分)

名称 大小 修改日期
VHDL中的16位ALU设计(附件).txt1.12 KB2020-04-06
alu_1.png11.68 KB2020-04-06
alu_2.png27.46 KB2020-04-06
image0.00 KB2020-04-06

立即下载

相关下载

[VHDL中的16位ALU设计] 此项目是VHDL中的16位ALU设计。今天将介绍16位ALU设计的一部分;16位ALU是我在上个项目中介绍的协处理器中处理单元的核心组合组件。此VHDL项目中将提供16位ALU的完整VHDL代码以及测试平台(附件文件中)。了解更多请下载附件。

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部