北邮数电实验之组合逻辑电路时序逻辑电路.docx

上传人:b****5 文档编号:4515694 上传时间:2022-12-01 格式:DOCX 页数:12 大小:465.80KB
下载 相关 举报
北邮数电实验之组合逻辑电路时序逻辑电路.docx_第1页
第1页 / 共12页
北邮数电实验之组合逻辑电路时序逻辑电路.docx_第2页
第2页 / 共12页
北邮数电实验之组合逻辑电路时序逻辑电路.docx_第3页
第3页 / 共12页
北邮数电实验之组合逻辑电路时序逻辑电路.docx_第4页
第4页 / 共12页
北邮数电实验之组合逻辑电路时序逻辑电路.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

北邮数电实验之组合逻辑电路时序逻辑电路.docx

《北邮数电实验之组合逻辑电路时序逻辑电路.docx》由会员分享,可在线阅读,更多相关《北邮数电实验之组合逻辑电路时序逻辑电路.docx(12页珍藏版)》请在冰豆网上搜索。

北邮数电实验之组合逻辑电路时序逻辑电路.docx

北邮数电实验之组合逻辑电路时序逻辑电路

北京邮电大学

数字电路与逻辑设计实验报告

(实验2)

电子202-赵依然-2018212048

摘要:

本次数字电路与逻辑设计实验以初步掌握VHDL语言设计简单的数字电路,并且在QuartusⅡ上仿真为目的,加深组合逻辑电路和时序逻辑电路的基本原理、设计理念、运转方式。

关键词:

组合逻辑电路时序逻辑电路VHDLQuartusⅡ仿真

一:

实验1

实验内容1

1.1.1实验名称:

VHDL组合逻辑电路设计-4选1数据选择器

1.1.2实验任务要求:

用VHDL语言设计实现一个4选1数据选择器,根据地址端的不同取值选择不同的数据端到输出端,仿真验证其功能。

1.2电路设计及VHDL代码及注释

1.2.1设计原理:

利用功能表进行判断。

设计数据输入端a3-a0和地址端s1-s0,输出端c,当地址端为11时c端输出a3的值,当地址端为10时c端输出a2的值,当地址端为01时c端输出a1的值,当地址端为00时c端输出a0的值。

这样就确定了电路的逻辑。

1.2.2VHDL代码及注释:

libraryieee;

useIEEE.STD_LOGIC_1164.all;

useIEEE.STD_LOGIC_arith.all;

useieee.STD_LOGIC_unsigned.all;

entitymux4is

port(

a:

instd_logic_vector(3downto0);

s:

instd_logic_vector(1downto0);

c:

outstd_logic

);

endmux4;

architecturemux4_archofmux4is

begin

process(s)

begin

casesis

when"00"=>c<=a(0);--当输入00,输出a(0)

when"01"=>c<=a

(1);

when"10"=>c<=a

(2);

when"11"=>c<=a(3);

endcase;

endprocess;

end;

1.3仿真波形图(请放大查看)

1.4仿真波形图分析

由图可知,当s端地址端输入11,c端输出和a3一致,s端输入10,c端输出和a2一致,s端输入01,c端输出和a1一致,s端输入00,c端输出和a0一致。

可见设计的逻辑满足要求,仿真正确,电路实现了4选1数据选择器的功能。

二:

实验2

实验内容2

2.1.1实验名称:

VHDL组合逻辑电路设计-共阴极7段数码管译码器

2.1.2实验任务要求:

用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输入信号,7段数码管显示输出信号。

2.2电路设计及VHDL代码及注释

2.2.1设计原理:

我们知道,七段共阴极数码管是这样的,也就是通过点亮各个数码管来实现数字的显示。

输入端为a3-a0,输出端为b6-b0(控制7段数码管用),c7-c0(用来控制板子上哪个数码管进行显示)。

功能表由数码管的原理确定,如当输入为0000时,数码管点亮B6B5B4B3B2B1,这样就显示出0这个数字。

再比如输入为1001时,数码管点亮B6B5B4B3B1B0则点亮9这个数字。

如下表所示。

其他情况下则输出高阻。

2.2.2VHDL代码及注释

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_arith.ALL;

USEIEEE.STD_LOGIC_unsigned.ALL;

entityqiduanis

port(

a:

instd_logic_vector(3downto0);

b:

outstd_logic_vector(6downto0);

c:

outstd_logic_vector(7downto0));--控制显示板子上哪个数码管

endqiduan;

architectureqiduanyimaofqiduanis

begin

process(a)

begin

c<="01111111";

CASEaIS

WHEN"0000"=>b<="1111110";--输出0

WHEN"0001"=>b<="0110000";--1

WHEN"0010"=>b<="1101101";--2

WHEN"0011"=>b<="1111001";--3

WHEN"0100"=>b<="0110011";--4

WHEN"0101"=>b<="1011011";--5

WHEN"0110"=>b<="1011111";--6

WHEN"0111"=>b<="1110000";--7

WHEN"1000"=>b<="1111111";--8

WHEN"1001"=>b<="1111011";--9

WHENOTHERS=>b<="ZZZZZZZ";--输出高阻

endcase;

endprocess;

endqiduanyima;

2.3仿真波形图(请放大查看)

2.4仿真波形图分析:

由图可知,当输入端输入0000时,可输出b端1111110,即在数码管上显示数字0,输入0000-1001都可显示真值表中相应的输出,可显示对应的数字。

当不在这个输入的范围内,输出高阻。

同时c端一直输出01111111,即使用板子上第一个数码管器。

由分析可知,设计的逻辑满足要求,仿真正确,电路实现了共阴极7段数码管译码器

的功能。

三:

实验3

实验内容3

3.1.1实验名称:

VHDL组合时序电路设计-分频器

3.1.2实验任务要求:

用VHDL语言设计实现一个分频系数为10,分频输出信号占空比为50%的分频器,仿真验证设计。

3.2电路设计及VHDL代码及注释

3.2.1设计原理:

分频系数为10.输出信号占空比为50%,则可用一个时钟信号clk,异步置零信号clear作为输入端,clkout作为输出端,定义一个信号temp,异步置零时信号为0,同时传递给输出端。

当异步置零时信号不为0时,则利用一个count变量进行计数。

Count小于4时,则count遇到上升沿变加一,记录上升沿变化,同时信号保持原来状态不变。

当等于4时,则使信号发生翻转,则clkout也发生变化,同时count置零,重新开始计数。

这样满5个上升沿就让clkout变化一次,实现了10分频功能,同时还实现了占空比为50%的功能。

3.2.2VHDL代码及注释

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydiv10is

port

(clk,clear:

instd_logic;

clkout:

outstd_logic

);

enddiv10;

architecturedivofdiv10is

signaltemp:

std_logic;

begin

process(clk,clear)

variablecount:

integerrange0to9;

begin

ifclear='0'then

temp<=clear;--异步置零

elsif(clk'eventandclk='1')then

if(count=4)then

count:

=0;--计数器count从0到了4则置零,重新计数

temp<=nottemp;--信号翻转

elsecount:

=count+1;

endif;

endif;

endprocess;

clkout<=temp;

end;

3.3波形图仿真(请放大查看)

3.4波形图仿真结果分析

由仿真结果可以看到,该电路实现了每经过5个时钟的上升沿才会进行一次信号的翻转,即频率变为原来的十分之一。

同时低电平和高电平保持的时间均占一个周期内的百分之五十,实现了占空比为50%。

同时,当外部clear置0则信号置0,实现了异步复位。

由分析可知,设计的逻辑满足要求,仿真正确,电路实现了分频系数为10、信号占空比为50%、带异步复位的分频器功能。

四:

实验4

实验内容4

4.1.1实验名称:

VHDL组合时序电路设计-带异步复位8421十进制计数器

4.1.2实验任务要求:

用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能。

4.2电路设计及VHDL代码及注释

4.2.1设计原理

设计一个外部的clk时钟信号,clear异步复位信号,作为输入端,c3-c0作为输出信号,用一个信号temp,当clear置0时让temp也置0,同时将temp传输给c3-c0输出。

当clear处于高电平则看是否有上升沿,当遇到上升沿,temp加1,将temp传到输出端,当temp到9时,表示已经经过10个数,则temp置0,即实现十进制计数,满9后归0。

将temp传递到输出端时,利用conv_std_logic_vector(,)函数将temp从0-9的整型转化为4位二进制数。

这样就实现了带异步复位的8421十进制计数器。

4.2.2VHDL代码及注释

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entitycount8421is

port

(clk,clear:

instd_logic;

c:

outstd_logic_vector(3downto0)

);

endcount8421;

architecturecountofcount8421is

signaltemp:

integerrange0to9;

begin

process(clk)

begin

ifclear='0'then

temp<=0;

elsif(clk'eventandclk='1')then

if(temp=9)thentemp<=0;--满9置0

elsetemp<=temp+1;

endif;

endif;

endprocess;

c<=conv_std_logic_vector(temp,4);--整形转化为8421码

endcount;

4.3仿真波形图

4.4仿真波形图分析

由仿真波形图知,电路实现了带异步复位的十进制8421码计数器功能,初始为0000,每遇到一个时钟上升沿便输出8421码的下一位,同时到1001之后再遇到上升沿便重新从0000开始计数。

同时当外部信号clear置0时,计数器便保持在0000的状态不再变化。

由分析可知,设计的逻辑满足要求,仿真正确,电路实现了带异步复位的8421码十进制计数器功能。

五:

实验5

实验内容5

5.1.1实验名称:

VHDL组合时序电路设计-分频器、计数器和数码管译码器3个电路进行连接

5.1.2实验任务要求:

将分频器、计数器和数码管译码器3个电路进行连接,实现一个加1的计数器,并在数码管上显示计数结果。

要求下载到实验板验证实验结果,实验板上输入时钟选择10Hz。

由于没有实验板,我们暂时无法进行实验板上的演示。

5.2电路设计及VHDL代码及注释

5.2.1设计原理

可采用图形法或者VHDL例化法进行连接。

我采用图形法。

需要注意的是,粗线要求连接的两端格式完全一样,包括性质,位数宽度。

如果是连接输入或输出时,名字必须是完全一样包括中括号“[”“]”,数字的顺序,以及数字之间的两个点“..”

5.2.2VHDL代码及注释

由于此实验由图形法完成,故展示连接的电路图

将clk时钟和clear异步复位作为分频器的输入,分频器输出clkout作为计数器输入,同时clear连接异步置位端,将计数器输出连接到数码管译码器输入端,同时输出端b6-b0接数码管各个管上,而c7-c0控制板子上第几个数码管进行显示。

5.3波形图仿真结果

 

 

5.4仿真波形图结果分析

由仿真波形图可知,每10个时钟上升沿,数码管输出从1111110到1111011(即0-9)循环发生变化,同时当异步置位端为0时,输出11111110)即数字0,实现了异步置0的功能。

可知,上述的电路实现了10分频器、8421十进制计数器、数码管译码器的功能,设计的逻辑满足要求,仿真正确,实现了所要求的功能。

六:

故障问题及分析

1.故障:

图形法设计顶层文件时,出现管脚未定义的情况。

这是因为,在顶层的工程文件夹中,需要我们把各个模块的VHDL文件加进去才可以实现引脚成功定义。

2.在采用图形法设计时,有时出现引脚未定义的情况。

原因:

必须让粗线所连接的两端格式完全一样,包括性质,位数宽度。

如果是连接输入或输出时,要把相应的输入或输出的名字修改成要连接的信号名字即可,但必须是完全一样,包括中括号“[”“]”,数字的顺序,以及数字之间的两个点“..”

3.编译过程中出现多次单词打错的情况导致编译久久不能完成。

如architecture这个词,前后多次打错,导致编译不通过。

这告诉我们编程时需要注意自己的英语功底,多背单词。

4.信号在赋值的时候产生了编译错误。

原因是将信号设置为Std_logic格式,而后面就不能将信号直接设置成‘0’,因为只有integer整形才能进行‘0’或者‘1’这样的赋值。

解决方法:

将信号赋值为另一个信号即可,不能赋值为整形的数。

5.编程时要注意每个ifprocess都要用end结尾。

If要在process中进行。

6.进行仿真时要注意截取至少一个周期的过程,最好再多一些,否则仿真结果不完整。

7.注意信号是<=变量是:

=,否则会出现编译错误

8.注意process里的敏感信号,当检测到这个信号发生变化时进行处理,如果相应的敏感信号不对的话,则做不到相应的信号变化时做出反应。

9.编译时不要出现中文符号。

七:

总结和结论

在本次实验中,我将五个实验要求的功能都实现了出来,包括4选1数据选择器,共阴极7段数码管译码器,带异步复位8421十进制计数器,分频系数为10,分频输出信号占空比为50%的分频器,以及将分频器、计数器和数码管译码器3个电路进行连接,实现一个加1的计数器,并在数码管上显示计数结果。

通过这次实验,我更好的了解了组合逻辑电路和时序逻辑电路的组成原理和特点,以及如何使用VHDL语言对其进行描述。

在一系列的设计、编程、测试、纠错和改进过程中,我获益匪浅,掌握了Quartus这个软件进一步的使用方法,以及VHDL语言的语法特性,并进行相应的仿真,并结合图形法等方法进行元件之间的组合。

运用理论课上的知识,对所求元件进行了相应的功能设计,然后开始了相应代码的编写。

在编写过程中,遇到了很多关于VHDL语言的困扰,经过不断的调整和适应,终于掌握了相关的语法规则。

因为VHDL语言只关心它的功能而不需要去详细描述电路的内部结构,使得描述起来较为简单。

同时,将数字电路理论课的知识运用到实际的实验设计中,既培养了动手能力,又加深了我对课堂知识的理解。

八:

参考文献

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1