首先对于所有的文件都要添加1164,arith与unsigned这三个头文件(我当时仅添加了1164导致fulladder仿真结果不正确)。随后,将fulladder中的运算加入到process,process括号内的敏感变量含有使能端,第一个数字,第二个数字以及进位。同时有玄学因素,我已开始使用了一个中间信号(signal h)存储了第一个数字与第二个数字的异或,然后导致了ModelSim仿真不正确,但是这个好像因电脑而异?以下是fulladder的实现
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity fulladder is
port(Enable,A,B,Cin:in std_logic;
S,Cout:out std_logic);
end fulladder;
architecture dataflow of fulladder is
begin
process(Enable,A,B,Cin)
begin
if(Enable = '0')then
Cout <= (A and B) or ((A xor B) and Cin);
S <= A xor B xor Cin;
else
Cout <= '0';
S <= '0';
end if;
end process;
end dataflow;
随后就可以进行相关的ModelSim的测试了。这里可以使用vwf先行进行仿真,随后用vwf进行相关的testbench生成,随后导入ModelSim即可。(挖个坑,过两天在这里附上ModelSim选择教程)。
然而我们的要求是使用一个8位二进制加法器,所以对于八位二进制加法器可以在fulladder的基础之上进行级联,随后产生一个八位二进制的ModelSim。这个在之前的操作基础之上进行操作即可,而且不需要添加process,可以直接进行仿真操作。最后出现的ModelSim结果会产生不稳定的尖峰脉冲,在验收时注意远离相关跳变或尖峰脉冲的位置。(挖个坑,验收完毕之后会对八位二进制说的更详细。)