求教:用VHDL写一个8位加法器

maple1116 2012-11-01 02:36:24
电路的输入输出信号分别为:
A7-A0: 8位的第一操作数A,输入
B7-B0: 8位的第二操作数B,输入
asc : 电路当前完成加/减的控制输入
Cin : 数据的较低位所产生的“进位”/“借位”输入
en : 电路的“使能”控制输入
d7-d0: 电路的运算结果数据输出
Cout : 向高位提供的“进位”/“借位”输出
AF : 电路的辅助“进位”/“借位”输出

要求:
在执行“加法”运算时,若A3 + B3 产生向高位的进位时,AF = 1 ,否则,AF = 0;在执行“减法”运算时,若A3 – B3 产生向高位的借位时,AF = 1,否则,AF = 0。

在 en = 0 时,电路不工作,所有输出均为“高阻”态

在 asc = 0 且 en = 1 时,实验电路执行“加法”运算;在asc = 1 且 en = 1 时,实验电路执行“减法运算”

这是老师布置的实验,VHDL还要我们自学,我粗浅的看了下,按要求编了下面这样一个程序,但结果输出不对:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jiafaqi is
port(A : in std_logic_vector(7 downto 0);
B : in std_logic_vector(7 downto 0);
asc : in std_logic;
Cin : in std_logic;
en : in std_logic;
d : out std_logic_vector(7 downto 0);
Cout: out std_logic;
AF : out std_logic);
end jiafaqi;
architecture behave of jiafaqi is
begin
process(A,B,asc,Cin,en)
begin
AF<='0';
Cout<='0';
if(en='0')then d <="ZZZZZZZZ";Cout <='Z';AF <='Z';
elsif(en='1')then
if(asc='0')then d <=A+B+Cin;
if(A+B+Cin>255)then Cout<='1';
end if;
elsif(asc='1')then d <=A-B-Cin;
if(A<B)then Cout<='1';
end if;
end if;
end if;
end process;
end behave;

EDA工具我用的是Quartus Ⅱ9.0,仿真波形图出来后进位输出Cout一直是0,按理说如果有进位的话Cout应该是1才对啊,但一直是0,还有,题目的要求的那个“在执行“加法”运算时,若A3 + B3 产生向高位的进位时,AF = 1 ,否则,AF = 0;在执行“减法”运算时,若A3 – B3 产生向高位的借位时,AF = 1,否则,AF = 0。”这个要求我不会写,我试着用A3+B3>1来判断,但编译的时候显示错误,到底该怎么弄啊?还是说我这个程序本来就有错误?求高手指教,急!!!
...全文
745 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
--AF<='0'; --Cout<='0';
maple1116 2012-11-02
  • 打赏
  • 举报
回复
没有人会吗?大家帮帮忙啊!!!!

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧