基于VHDL逐级进位加法器程序设计
实验目的
(1) 掌握逐级进位加法器逻辑功能及使用方法。
(2) 学会用VHDL语言设计逐级进位加法器。
实验原理
逐级进位加法器:如下图所示:为一个无符号的逐级进位加法器,对每一位都使用全加器FAU,同时给出全加器真值表,真值表中的a和b是输入位,s是求和的结果,cout是进位输出位,当输入位有奇数个‘1’时,s必定是‘1’,而当有两个或者更多的输入为‘1’时,cout必定是‘1’。图中每个全加器的输出结果依赖于前一级产生的进位。这种方法可以占用最少量的电路资源,但完成一次计算所需的延时显然较大。
逐级进位加法器
全加器真值表
基于全加器的真值表,可以写出如下的逻辑表达式:
s = a XOR b XOR cin
cout = (a AND b) OR (a AND cin) OR (b AND cin)
实验内容
(1) 用VHDL编写级进位加法器源程序。
(2) 将源程序进行综合、优化及功能仿真。
(3)软件说明:ModelSimSetup-13.1.0.162,QuartusSetup-13.1.0.162。
建立工程:
第一步:打开Quartus软件。
第二步:点击New Project Wizard -> next.
第三步:选择工程文件的存放位置,输入工程名 -> next -> next。
第四步:在family栏选择芯片型号-Cyclone IV E,在Name栏选择EP4CE115F29C7,选择完之后点击next。(如果不进行硬件调试时,此处默认即可)
第五步:检查工程有没有建错,点击完成。如下图:
程序设计:
逐级进位加法器顶层文件设计:
--文件名:adder_cripple.vhd 应与工程名保持一致:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity adder_cripple is
generic(n:integer:=4);
port(a,b:in std_logic_vector(n-1 downto 0);
cin: in std_logic;
s:out std_logic_vector(n-1 downto 0);
cout: out std_logic
);
end adder_cripple;
architecture Behavioral of adder_cripple is
begin
process(a,b,cin)
variable c:std_logic_vector(n downto 0);
begin
c(0):= cin; --这里的c是信号
for i in 0 to n-1 LOOP
s(i)<= a(i) xor b(i) xor c(i);
c(i+1) := (a(i) and b(i)) or
(a(i) and c(i)) or
(b(i) and c(i));
end LOOP;
cout <= c(n);
end process;
end Behavioral;
文件仿真(这里采用modelsim仿真波形):
- 选择File-> New -> Verification/Debugging Files ->University Program VWF。
2.打开测试文件。(右键点击添加端口,对输入信号初始化,赋值。)
3.仿真结果: