VHDL学习--简易ALU设计

ALU,即算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU。
ALU的实现较为简单,根据真值表利用case语句分情况设计即可。本人所写ALU较为简单,具有以下功能:
在这里插入图片描述
模块的端口主要有3位的功能选择端,两个8位的A,B数据输入端口,1位的C进位/借位端口,以及8位的数据输出端口。C仅在进行加法和减法时有效。当有进位或借位时输出1,无则为0。其中乘法功能为AB输入低四位相乘。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity ALU is
port(
     S:in std_logic_vector(2 downto 0);
	  A:in std_logic_vector(7 downto 0);
	  B:in std_logic_vector(7 downto 0);
	  C:out std_logic;
	  D:out std_logic_vector(7 downto 0)
	  );
end ALU;

architecture behave of ALU is

signal temp: std_logic_vector(8 downto 0);
signal aa:std_logic_vector(8 downto 0);
signal bb:std_logic_vector(8 downto 0);

begin

process(A,B,aa,bb,temp) 
begin
case S is
when "000"=>
	D<=A and B;
when "001"=>
	  D<=A;
when "010"=>	 
	aa<='0'& A(7 downto 0);
	bb<='0'& B(7 downto 0);
   temp<=aa+bb;
	C<=temp(8);
	D<=temp(7 downto 0);
when "011"=>	
	aa<='0'& A(7 downto 0);
	bb<='0'& B(7 downto 0);
   temp<=aa-bb;
	if(aa>=bb) then
	C<='0';
	else
	C<='1';
	end if;
	D<=temp(7 downto 0);
when "100"=>
   D<=A(3 downto 0)*B(3 downto 0);
when others => null;
  end case;
  end process ;
 end behave;

	  
	  
	  
	  

接下来是仿真波形图:
与功能
在这里插入图片描述

直通功能
在这里插入图片描述

加法功能
在这里插入图片描述

减法功能
在这里插入图片描述
乘法功能(低位乘法)
在这里插入图片描述
通过观察波形图,判断功能基本正确。这其中减法器最费功夫,C借位信号常常为高阻态,不能正常显示借位信息。隐隐觉得写的有些问题。如有大佬们发现了代码中的错误,还请大家指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值