1.使用 quartusII 9.0 完成8位可控的二进制补码加减法器
2.使用 VHDL 语言编写代码
3.学会模块化编程处理
library ieee;
use ieee.std_logic_1164.all;
entity fa is
port(a,b,ci : in std_logic;
s,co : out std_logic);
end fa;
architecture b_fa of fa is
begin
s<=a xor b xor ci;
co<=((a xor b) and ci) or (a and b);
end b_fa;
library ieee;
use ieee.std_logic_1164.all;
entity adder8 is
port(a,b : in std_logic_vector(7 downto 0);
ci,m : in std_logic;
s : out std_logic_vector(7 downto 0);
co ,vf: out std_logic);
end adder8;
architecture s_adder8 of adder8 is
component fa is
port(a,b,ci : in std_logic;
s,co : out std_logic);
end component;
signal c: std_logic_vector(7 downto 1);
begin
cm1 : fa port map(a(0),b(0) xor m,ci,s(0),c(1));
cm2 : fa port map(a(1),b(1) xor m,c(1),s(1),c(2));
cm3 : fa port map(a(2),b(2) xor m,c(2),s(2),c(3));
cm4 : fa port map(a(3),b(3) xor m,c(3),s(3),c(4));
cm5 : fa port map(a(4),b(4) xor m,c(4),s(4),c(5));
cm6 : fa port map(a(5),b(5) xor m,c(5),s(5),c(6));
cm7 : fa port map(a(6),b(6) xor m,c(6),s(6),c(7));
cm8 : fa port map(a(7),b(7) xor m,c(7),s(7),co);
vf<=c(6) xor c(7); -- vf 为溢出信号
end s_adder8;
设置顶层文件(顶层文件为 adder8.vhd),选好实验室对应的芯片(如 Cyclone - EP1C12Q240C8 ),设置好相应引脚,最后进行编译,编译完成后,连接实验箱进行检验。
实际上 ,通过原理图来看,ci 与 m 信号实际上是相同的信号。所以,最终实现是
library ieee;
use ieee.std_logic_1164.all;
entity adder8 is
port(a,b : in std_logic_vector(7 downto 0);
m : in std_logic;
s : out std_logic_vector(7 downto 0);
vf: out std_logic);
end adder8;
architecture s_adder8 of adder8 is
component fa is
port(a,b,ci : in std_logic;
s,co : out std_logic);
end component;
signal c: std_logic_vector(8 downto 1);
begin
cm1 : fa port map(a(0),b(0) xor m,m,s(0),c(1));
cm2 : fa port map(a(1),b(1) xor m,c(1),s(1),c(2));
cm3 : fa port map(a(2),b(2) xor m,c(2),s(2),c(3));
cm4 : fa port map(a(3),b(3) xor m,c(3),s(3),c(4));
cm5 : fa port map(a(4),b(4) xor m,c(4),s(4),c(5));
cm6 : fa port map(a(5),b(5) xor m,c(5),s(5),c(6));
cm7 : fa port map(a(6),b(6) xor m,c(6),s(6),c(7));
cm8 : fa port map(a(7),b(7) xor m,c(7),s(7),c(8));
vf<=c(8) xor c(7);
end s_adder8;