北京邮电大学数字电路与逻辑设计实验报告Word格式.docx
《北京邮电大学数字电路与逻辑设计实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《北京邮电大学数字电路与逻辑设计实验报告Word格式.docx(24页珍藏版)》请在冰点文库上搜索。
1
由此可得
,
满足半加器的设计要求。
(2)全加器
由波形图可以看出真值表如下:
ain
bin
cin
sum
cout
用
分别表示信号ain、bin、cin、sum和cout,则可得逻辑表达式为
满足全加器的设计要求。
(3)3线-8线译码器实现函数
由波形图可得真值表如下:
A
B
C
F
则逻辑表达式为
。
实验二用VHDL设计与实现组合逻辑电路
(1)熟悉用VHDL语言设计组合逻辑电路的方法;
(2)熟悉用QuartusII文本输入法进行电路设计;
(3)熟悉不同的编码及其之间的转换。
(1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,7段数码管显示输出信号。
(2)用VHDL语言设计实现一个8421码转换为格雷码的代码转换器,仿真验证其功能,并下载到实验板测试。
(3)用VHDL语言设计实现一个4人表决器,多数人赞成决议则通过,否则决议不通过,仿真验证其功能,并下载到实验板测试。
四、实验VHDL代码及仿真波形图
(1)数码管译码器
【VHDL代码】
libraryieee;
useieee.std_logic_1164.all;
entityseg7_1is
port(
a:
instd_logic_vector(3downto0);
b:
outstd_logic_vector(6downto0);
c:
outstd_logic_vector(7downto0)
);
endseg7_1;
architectureseg7_1_archofseg7_1is
begin
process(a)
c<
="
11111110"
;
caseais
when"
0000"
=>
b<
1111110"
--0
0001"
0110000"
--1
0010"
1101101"
--2
0011"
1111001"
--3
0100"
0110011"
--4
0101"
1011011"
--5
0110"
1011111"
--6
0111"
1110000"
--7
1000"
1111111"
--8
1001"
1111011"
--9
whenothers=>
0000000"
endcase;
endprocess;
end;
由波形图及共阴极数码管各段的含义可以得出如下真值表:
显示数字
0000
0001
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
对于a不在表内的其他取值b均为“0000000”,数码管对应不显示数字。
该设计符合要求。
(2)8421码转格雷码
entityCodeTransferis
port(a:
outstd_logic_vector(3downto0)
endCodeTransfer;
architectureCT_archofCodeTransferis
1100"
由波形图可以看出具体真值表如下:
a(8421码)
b(格雷码)
1100
对于a的其他无意义的取值b均对应于“0000”。
显然该设计符合要求,能使8421码转换为对应格雷码。
(3)4人表决器
entityJudge4is
outstd_logic
endJudge4;
architectureJg_archofJudge4is
if(a="
1111"
ora="
1110"
ora="
1101"
1011"
)then
='
1'
else
0'
endif;
1010
1011
1101
1110
1111
即只有当a中的四个元素中有3个或3个以上真值为1时,输出b值才为1,表示多数人赞成时才能通过决议,符合设计要求。
实验三用VHDL设计与实现时序逻辑电路
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(2)熟悉用QuartusII文本输入法进行电路设计。
(1)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。
要求在QuartusII平台上设计程序并仿真验证设计。
(2)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号。
(3)将
(1)、
(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。
四、实验VHDL代码及实验要求内容
(1)分频器
entitydiv_12is
port(
clk,clear:
instd_logic;
clk_out:
outstd_logic);
enddiv_12;
architecturearchofdiv_12is
signaltmp:
integerrange0to11;
process(clk,clear)
ifclear='
then
tmp<
=0;
elsifclk'
eventandclk='
iftmp=11then
elsetmp<
=tmp+1;
iftmp<
6then
clk_out<
elseclk_out<
endarch;
由仿真波形图可以看出,输出信号clk_out的频率为输入信号clk的1/12,输出信号占空比为50%,符合设计要求。
(2)8421十进制计数器
useieee.std_logic_unsigned.all;
entitycounteris
q:
outstd_logic_vector(3downto0));
endcounter;
architecturearchofcounteris
std_logic_vector(3downto0);
iftmp="
q<
=tmp;
由仿真波形图可以看出,该电路实现了对输入信号的8421码十进制计数,且带异步复位功能,符合设计要求。
(3)
(1)、
(2)与数码管译码器连接电路
entitylinkis
cat:
outstd_logic_vector(7downto0));
endlink;
architecturearchoflinkis
componentdiv_12
port(clk,clear:
endcomponent;
componentcounter
componentseg7_1
signals:
std_logic;
u1:
div_12portmap(clk=>
clk,clear=>
clear,clk_out=>
s);
u2:
counterportmap(clk=>
s,clear=>
clear,q=>
tmp);
u3:
seg7_1portmap(a=>
tmp,b=>
clk_out,c=>
cat);
【实验模块端口说明】
分频模块div_12的两个输入端口clk和clear分别接外部输入信号clk和clear,计数模块counter的clear输入端口仍接外部输入信号clear,而输入端口clk与分频模块div_12的输出端口clk_out相连,数码管译码器模块seg7_1的输入端口a与计数模块counter的输出端口q相连,译码器的两个输出端口b、c分别对应外部输出信号clk_out和cat,这样就从整体上完成了电路的连接。
【电路连接图】
(注:
为能在整体上观察到数码管输出的循环计数显示功能,在仿真中clk频率选取值较高,波形较密)
由仿真波形图可以看出,随着clk波形的反复变化,控制数码管显示的输出信号clk_out也在循环变化,对应具体显示数字为0-9,符合设计要求。
实验四用VHDL设计与实现相关电路
(1)掌握VHDL语言的语法规范,掌握时序电路描述方法;
(2)掌握多个数码管动态显示的原理及设计方法。
用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试。
(1)计数模块counter.vhd
count:
outstd_logic_vector(2downto0));
std_logic_vector(2downto0);
000"
110"
001"
count<
(2)数码管显示模块display.vhd
entitydisplayis
n:
instd_logic_vector(2downto0);
num:
enddisplay;
architecturearchofdisplayis
process(n)
casenis
when"
=>
num<
cat<
11011111"
010"
11101111"
011"
11110111"
100"
11111011"
101"
11111101"
whenothers=>
num<
11111111"
(3)主体模块scan.vhd
entityscanis
endscan;
architecturearchofscanis
componentdisplay
port(n:
clear,count=>
displayportmap(n=>
tmp,num=>
clk_out,cat=>
计数模块counter的两个输入端口clear和clk分别接外部输入信号clear和clk,数码管显示模块display的输入端口n与计数模块的输出端口count相连,显示模块的两个输出端口num和cat分别对应外部输出信号clk_out和cat,由此便完成了整个电路的连接。
由仿真波形图可以看出,每经过6个clk周期,对应数码管显示电路完成一次串行扫描(由6个不同数码管分别显示0-5这6个数),当clk变化频率较高时(>
50Hz),6个数码管即可在人眼中呈现“静止”图像。
该设计符合实验要求。
故障及问题分析
在本学期的数电实验课程中,实验内容其实较为简单基础,只要课前认真预习,课上认真听老师讲课,实验时细心操作,基本不会有大的故障出现。
我在实验的过程中或多或少遇到了一些问题而最终也都顺利解决了。
首先是VHDL代码格式、语法问题。
在刚开始接触这门语言的时候,由于自己并不是很熟练,有时根据思路在电脑上敲完代码再一编译却显示报错,编译失败。
解决方法是查看QuartusII运行界面下方的报错提示,对症下药,而软件也会友好地提示你问题所在的行数,只要找到出错的地方再做修改就可以了。
有时多输入一个分号或少打了一个分号都会导致编译失败,这就提醒了我要在输入代码的过程中认真仔细。
而随着时间的推移,我对VHDL语言也越来越熟悉,这种语法格式的出错的可能性也就大大降低了。
另外一个是模块化设计的连接问题。
做实验三时,一开始自己对如何组合三个模块的电路理解得不是很好,误以为在主体模块中定义与独立模块中相同名称的变量就可以直接调用其内部变量,导致连接错误,仿真的波形都不是理想的结果。
但经过认真学习书上的有关内容后,理清了思路,认识到了错误所在,修改了代码,最终成功编译运行,并顺利在实验板上下载测试,后面再进行模块化电路设计时就更显得心应手了。
总结和结论
本学期数字电路与逻辑设计实验内容包括QuartusII的原理图输入法设计电路、VHDL语言设计组合逻辑和时序逻辑电路以及用VHDL语言设计功能相关电路等。
通过本学期数电实验的学习,我学会了利用QuartusII软件平台进行逻辑电路设计,包括用基础的原理图法和抽象化的VHDL语言。
实验过程中我对VHDL语言的掌握程度在逐步提高,设计电路的能力也有了很大提升。
该实验很好地锻炼了我的逻辑思维能力,使我对数字电路的理解进一步加深。
可编程数字系统与逻辑设计实验开发板的使用使得自己能够实践检验设计的正确性,也给实验的过程本身带来了趣味性,提高了观察能力和动手能力。
经过本学期的实验学习,自己已具备基本的数字逻辑电路设计能力,为后期的进一步发展打下了坚实的基础。