(商务智能)数字逻辑电路课程设计模加法器VHDL实现(含完整

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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是最低位

);

相关文档
最新文档