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代码以及测试平台(附件文件中)。
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;
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: [email protected] 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » VHDL中的16位ALU设计
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
VHDL中的16位ALU设计(附件).txt | 1.12 KB | 2020-04-06 |
alu_1.png | 11.68 KB | 2020-04-06 |
alu_2.png | 27.46 KB | 2020-04-06 |
image | 0.00 KB | 2020-04-06 |
发表评论 取消回复