实验一 4位全加器的设计(1)
实验一 4位全加器的设计
一、实验目的:
1 熟悉QuartusⅡ与ModelSim的使用;
2 学会使用文本输入方式和原理图输入方式进行工程设计;
3 分别使用行为和结构化描述方法进行四位全加器的设计;
4 理解RTL视图和Technology Map视图的区别;
5 掌握简单的testbench文件的编写。
二、实验原理:
一个4位全加器可以由4个一位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的进位输入信号cin相接。
三、实验内容:
1.QuartusII软件的熟悉
熟悉QuartusⅡ环境下原理图的设计方法和流程,可参考课本第4章的内容,重点掌握层次化的设计方法。
2.设计1位全加器原理图
设计的原理图如下所示:
VHDL源程序如下(行为描述):
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity f_add_bev is
( ); A B CIN S CO : in std_logic; : in std_logic; : in std_logic; : out std_logic; : out std_logic
end entity;
architecture bev of f_add_bev is
begin
(CO,S)
end bev;
VHDL源程序如下(行为描述)的RTL与technology map视图
VHDL源程序如下(数据流描述):
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity f_add_fl is
( ); A B CIN S CO : in std_logic; : in std_logic; : in std_logic; : OUT std_logic; : out std_logic
end entity;
architecture fl of f_add_fl is
begin
S
end fl;
VHDL源程序如下(数据流描述)的RTL与technology map视图:
VHDL源程序如下(结构化描述):
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity f_add_con is
port ( A : in std_logic;
); CIN S CO : in std_logic; : OUT std_logic; : out std_logic
end entity;
architecture con of f_add_con is
COMPONENT hadd_vhd PORT ( a b co s : IN STD_LOGIC; : IN STD_LOGIC; : OUT STD_LOGIC; : OUT STD_LOGIC );
END COMPONENT;
SIGNAL S1:STD_LOGIC;
SIGNAL CO1:STD_LOGIC;
SIGNAL CO2:STD_LOGIC;
begin
h_add1 : hadd_vhd
port map ( a => a, B => B, S => S1, CO => CO1
h_add2 : hadd_vhd
port map ( ); a => S1, B => CIN, S => S, CO => CO2
CO
end con;
VHDL源程序如下(结构化描述)的RTL与technology map视图:
Testbench文件源程序如下:
LIBRARY cycloneiii ;
LIBRARY ieee ;
USE cycloneiii.cycloneiii_components.all ;
USE ieee.std_logic_1164.all ;
ENTITY f_add_fl_tb IS
END ;
ARCHITECTURE f_add_fl_tb_arch OF f_add_fl_tb IS
SIGNAL A : STD_LOGIC :='0';
SIGNAL CO : STD_LOGIC ;
SIGNAL CIN : STD_LOGIC :='0';
SIGNAL B : STD_LOGIC :='0';
SIGNAL S : STD_LOGIC ;
COMPONENT f_add_fl
PORT (
A : in STD_LOGIC ;
CO : buffer STD_LOGIC ;
CIN : in STD_LOGIC ;
B : in STD_LOGIC ;
S : buffer STD_LOGIC );
END COMPONENT ;
BEGIN
DUT : f_add_fl
PORT MAP (
A => A ,
CO => CO ,
CIN => CIN ,
B => B ,
S => S ) ;
A
B
CIN
END ;
功能仿真波形如下:
时序仿真波形如下:
3.利用层次化原理图方法设计4位全加器
(1)生成新的空白原理图,作为4位全加器设计输入
(2)利用已经生成的1位全加器作为电路单元,设计4位全加器。
原理图设计如下(结构化描述):
原理图设计如下(结构化描述)的RTL与technology map视图:
VHDL源程序如下(结构化描述):
library ieee;
use ieee.std_logic_1164.all; use ieee.numeric_std.all;
entity fadd4_con is
port ( ); A0 A1 A2 A3 B0 B1 B2 B3 S0 S1 S2 S3 CO : : : : : : : : : : : : : IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC
end entity;
architecture con of fadd4_con is
COMPONENT fadd1_vhd PORT ( A : IN STD_LOGIC;
); : : : IN STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC CIN S CO
END COMPONENT;
SIGNAL CO0:STD_LOGIC; SIGNAL CO1:STD_LOGIC; SIGNAL CO2:STD_LOGIC; SIGNAL CO3:STD_LOGIC;
begin
f_add1 : fadd1_vhd port map ( ); f_add2 : fadd1_vhd port map ( A => A1, B => B1, CIN => CO0, S => S1, CO => CO1 A => A0, B => B0, CIN => '0', S => S0, CO => CO0
f_add3 : fadd1_vhd port map ( ); f_add4 : fadd1_vhd port map ( ); CO A3, B => B3, CIN => CO2, S => S3, CO => CO3 A => A2, B => B2, CIN => CO1, S => S2, CO => CO2 end con;
VHDL源程序如下(结构化描述)的RTL与technology map视图:
Testbench源程序如下:
LIBRARY cycloneiii ;
LIBRARY ieee ;
USE cycloneiii.cycloneiii_components.all ;
USE ieee.std_logic_1164.all ;
ENTITY fadd4_con_tb IS
END ;
ARCHITECTURE fadd4_con_tb_arch OF fadd4_con_tb IS
SIGNAL B0 : STD_LOGIC :='0';
SIGNAL B1 : STD_LOGIC :='0';
SIGNAL B2 : STD_LOGIC :='0';
SIGNAL B3 : STD_LOGIC :='0';
SIGNAL A0 : STD_LOGIC :='0';
SIGNAL CO : STD_LOGIC ;
SIGNAL A1 : STD_LOGIC :='0';
SIGNAL A2 : STD_LOGIC :='0';
SIGNAL S0 : STD_LOGIC ;
SIGNAL A3 : STD_LOGIC :='0';
SIGNAL S1 : STD_LOGIC ;
SIGNAL S2 : STD_LOGIC ;
SIGNAL S3 : STD_LOGIC ;
COMPONENT fadd4_con
PORT (
B0 : in STD_LOGIC ;
B1 : in STD_LOGIC ;
B2 : in STD_LOGIC ;
B3 : in STD_LOGIC ;
A0 : in STD_LOGIC ;
CO : buffer STD_LOGIC ;
A1 : in STD_LOGIC ;
A2 : in STD_LOGIC ;
S0 : buffer STD_LOGIC ;
A3 : in STD_LOGIC ;
S1 : buffer STD_LOGIC ;
S2 : buffer STD_LOGIC ;
S3 : buffer STD_LOGIC );
END COMPONENT ;
BEGIN
DUT : fadd4_con
PORT MAP (
B0 => B0 ,
B1 => B1 ,
B2 => B2 ,
B3 => B3 ,
A0 => A0 ,
CO => CO ,
A1 => A1 ,
A2 => A2 ,
S0 => S0 ,
A3 => A3 ,
S1 => S1 ,
S2 => S2 ,
S3 => S3 ) ;
A0
A1
A2
A3
B0
B1
B2
B3
END;
最终的功能仿真波形如下:
最终的时序仿真波形如下:
四、思考题
1、试着论述功能仿真和时序仿真的差别?
2、试着论述结构体的行为描述、数据流描述和结构描述的区别?
3、如何构建四位并行加法器?