(商务智能)数字逻辑电路课程设计模加法器VHDL实现(含完整
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学
UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA
数字逻辑设计
实验报告
实验题目: 4bit模9加法器
学生姓名:
指导老师:
一、实验内容
设计一个4bit模9加法器。输入为两个4bit的二进制数,输出为两数相加后模9的结果。其数学表达式为:y=(x1+x2)mod 9。
二、实验要求
1、功能性要求:
能够实现4bit无符号数的模9加法运算,即输入两个4比特数据时能够正确输出其相加并模9运算结果。
2、算法要求:
模加法器有多种算法,可采用任意算法进行设计。
3、设计性要求:
采用全加器、半加器和基本门结构化描述。能够编写Test Bench文件,并利用Modelsim进行仿真。在Modelsim仿真正确的基础上,能够生成bit文件并上板验证其正确性。
4、基本上板要求:
在上板实验时,输入的两个4bit数采用拨码开关输入,输出采用LED灯进行显示。
三、设计思路
1、整体思路:
为了实现4bit无符号数的模9加法运算,可以先将两个4bit的加数a和b 先分别模9,相加之后再模9得到最终结果。
2、模9器:
先找出读入的5bit数与模9后的4bit数之间的关系,画出卡诺图,再根据卡诺图得出其相应的逻辑表达式即可。设读入的5bit数为carry、a、b、c、d,模9后得到的4bit数为w、x、y、z。则化简后得到的逻辑表达式分别为:w = carry’ab’c’d’,
x= carry’bc + carry’a’b + carry’bd + carrya’b’c’d’,
y = carry’a’c + carry’cd + carry’abc’d’ + carrya’b’c’d’,
z= carry’a’d + carry’acd’ + carry’abd’ + carry a’b’c’d’。
3、全加器:
全加器可以实现两个1bit数a、b和进位输入cin的相加,其真值表如下所示:
这里全加器由半加器和或门构成,其原理图如下:
4、半加器:
半加器是全加器的基本组成单元,可以实现两个1bit数a和b的相加,并将进位输出,其真值表如下:
半加器由一个异或门和一个与门构成,其原理图如下所示:
5、数码管显示:
单个数码管一共有7个端(不含小数点),用来表示组成一个数字的7个部分,故只要找到这7个段和模9后的4bit数间的对应关系,将其画出卡诺图并化简成逻辑表达式即可。设得到的4bit数为a、b、c、d,则得到的7段disa~disg 的表达式为:
disa=b + d + c’a’ + ac;
disb=c’ +d + b’ a’ + ab;
disc=a + b’ + c + d;
disd=ba’ + c’a’+ c’b + cb’a;
dise=d + ba’ + c’ a’;
disf=d + b’a’ + ca’ + cb’;
disg=d + ba’+ c’b+ ca’ + cb’;
四、程序设计
1、顶层:
entity main is
Port ( a1 : in STD_LOGIC;
a2 : in STD_LOGIC;
a3 : in STD_LOGIC;
a4 : in STD_LOGIC;
b1 : in STD_LOGIC;
b2 : in STD_LOGIC;
b3 : in STD_LOGIC;
b4 : in STD_LOGIC;
ans1 : out STD_LOGIC;
ans2 : out STD_LOGIC;
ans3 : out STD_LOGIC;
ans4 : out STD_LOGIC;
disA : out STD_LOGIC;
disB : out STD_LOGIC;
disC : out STD_LOGIC;
disD : out STD_LOGIC;
disE : out STD_LOGIC;
disF : out STD_LOGIC;
disG : out STD_LOGIC
);
end main;
architecture Behavioral of main is
COMPONENT fulladder
PORT(
a : IN std_logic;
b : IN std_logic;
ci : IN std_logic;
s : OUT std_logic;
co : OUT std_logic
);
END COMPONENT;
COMPONENT mod9
PORT(
carry : IN std_logic;
a : IN std_logic;
b : IN std_logic;
c : IN std_logic;
d : IN std_logic;
w : OUT std_logic;
x : OUT std_logic;
y : OUT std_logic;
z : OUT std_logic
);
END COMPONENT;
COMPONENT dis
PORT(
a : IN std_logic;
b : IN std_logic;
c : IN std_logic;
d : IN std_logic;
disa : OUT std_logic;
disb : OUT std_logic;
disc : OUT std_logic;
disd : OUT std_logic;
dise : OUT std_logic;
disf : OUT std_logic;
disg : OUT std_logic
);
END COMPONENT;
signal
c1,c2,c3,c4,s1,s2,s3,s4,ans11,ans22,ans33,ans44,a11,a22,a33,a44,b11,b22,b33,b44,temp :std_logic ;
begin
--mod9_a--
temp <= '0';
Inst_mod9_a: mod9 PORT MAP(
carry => temp, --carry是最高位
a => a4,
b => a3,
c => a2,
d => a1, --d是最低位
w => a44, --w是最高位
x => a33,
y => a22,
z => a11 --z是最低位
);