北京邮电大学数字电路与逻辑设计实验报告.docx
- 文档编号:12518628
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:24
- 大小:292.76KB
北京邮电大学数字电路与逻辑设计实验报告.docx
《北京邮电大学数字电路与逻辑设计实验报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学数字电路与逻辑设计实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
北京邮电大学数字电路与逻辑设计实验报告
北京邮电大学数字电路与逻辑设计实验报告
学院:
xxxx学院
姓名:
xxx
班级:
xxxxxxxxxx
学号:
xxxxxxxxxx
实验一QuartusII原理图输入法设计与实现
一、实验目的
(1)熟悉用QuartusII原理图输入法进行电路设计和仿真;
(2)掌握QuartusII图形模块单元的生成与调用;
(3)熟悉实验板的使用。
二、实验所用仪器及元器件
(1)计算机;
(2)直流稳压电源;
(3)数字系统与逻辑设计实验开发板。
三、实验任务要求
(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
(2)用实验
(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数
,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
四、实验原理图及仿真波形图
(1)半加器
【实验原理图】
【仿真波形图】
【仿真波形图分析】
由波形图可以看出,真值表如下:
a
b
so
co
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
由此可得
,
,
满足半加器的设计要求。
(2)全加器
【实验原理图】
【仿真波形图】
【仿真波形图分析】
由波形图可以看出真值表如下:
ain
bin
cin
sum
cout
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
用
分别表示信号ain、bin、cin、sum和cout,则可得逻辑表达式为
满足全加器的设计要求。
(3)3线-8线译码器实现函数
【实验原理图】
【仿真波形图】
【仿真波形图分析】
由波形图可得真值表如下:
A
B
C
F
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
则逻辑表达式为
。
实验二用VHDL设计与实现组合逻辑电路
一、实验目的
(1)熟悉用VHDL语言设计组合逻辑电路的方法;
(2)熟悉用QuartusII文本输入法进行电路设计;
(3)熟悉不同的编码及其之间的转换。
二、实验所用仪器及元器件
(1)计算机;
(2)直流稳压电源;
(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)
begin
c<="11111110";
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<="0000000";
endcase;
endprocess;
end;
【仿真波形图】
【仿真波形图分析】
由波形图及共阴极数码管各段的含义可以得出如下真值表:
a
b
显示数字
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
对于a不在表内的其他取值b均为“0000000”,数码管对应不显示数字。
该设计符合要求。
(2)8421码转格雷码
【VHDL代码】
libraryieee;
useieee.std_logic_1164.all;
entityCodeTransferis
port(a:
instd_logic_vector(3downto0);
b:
outstd_logic_vector(3downto0)
);
endCodeTransfer;
architectureCT_archofCodeTransferis
begin
process(a)
begin
caseais
when"0000"=>b<="0000";--0
when"0001"=>b<="0001";--1
when"0010"=>b<="0011";--2
when"0011"=>b<="0010";--3
when"0100"=>b<="0110";--4
when"0101"=>b<="0111";--5
when"0110"=>b<="0101";--6
when"0111"=>b<="0100";--7
when"1000"=>b<="1100";--8
when"1001"=>b<="1000";--9
whenothers=>b<="0000";
endcase;
endprocess;
end;
【仿真波形图】
【仿真波形图分析】
由波形图可以看出具体真值表如下:
a(8421码)
b(格雷码)
0000
0000
0001
0001
0010
0011
0011
0010
0100
0110
0101
0111
0110
0101
0111
0100
1000
1100
1001
1000
对于a的其他无意义的取值b均对应于“0000”。
显然该设计符合要求,能使8421码转换为对应格雷码。
(3)4人表决器
【VHDL代码】
libraryieee;
useieee.std_logic_1164.all;
entityJudge4is
port(a:
instd_logic_vector(3downto0);
b:
outstd_logic
);
endJudge4;
architectureJg_archofJudge4is
begin
process(a)
begin
if(a="1111"ora="1110"ora="1101"ora="1011"ora="0111")then
b<='1';
else
b<='0';
endif;
endprocess;
end;
【仿真波形图】
【仿真波形图分析】
由波形图可以看出真值表如下:
a
b
0000
0
0001
0
0010
0
0011
0
0100
0
0101
0
0110
0
0111
1
1000
0
1001
0
1010
0
1011
1
1100
0
1101
1
1110
1
1111
1
即只有当a中的四个元素中有3个或3个以上真值为1时,输出b值才为1,表示多数人赞成时才能通过决议,符合设计要求。
实验三用VHDL设计与实现时序逻辑电路
一、实验目的
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(2)熟悉用QuartusII文本输入法进行电路设计。
二、实验所用仪器及元器件
(1)计算机;
(2)直流稳压电源;
(3)数字系统与逻辑设计实验开发板。
三、实验任务要求
(1)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。
要求在QuartusII平台上设计程序并仿真验证设计。
(2)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号。
(3)将
(1)、
(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。
四、实验VHDL代码及实验要求内容
(1)分频器
【VHDL代码】
libraryieee;
useieee.std_logic_1164.all;
entitydiv_12is
port(
clk,clear:
instd_logic;
clk_out:
outstd_logic);
enddiv_12;
architecturearchofdiv_12is
signaltmp:
integerrange0to11;
begin
process(clk,clear)
begin
ifclear='1'then
tmp<=0;
elsifclk'eventandclk='1'then
iftmp=11then
tmp<=0;
elsetmp<=tmp+1;
endif;
iftmp<6then
clk_out<='1';
elseclk_out<='0';
endif;
endif;
endprocess;
endarch;
【仿真波形图】
【仿真波形图分析】
由仿真波形图可以看出,输出信号clk_out的频率为输入信号clk的1/12,输出信号占空比为50%,符合设计要求。
(2)8421十进制计数器
【VHDL代码】
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(
clk,clear:
instd_logic;
q:
outstd_logic_vector(3downto0));
endcounter;
architecturearchofcounteris
signaltmp:
std_logic_vector(3downto0);
begin
process(clk,clear)
begin
ifclear='1'then
tmp<="0000";
elsifclk'eventandclk='1'then
iftmp="1001"then
tmp<="0000";
elsetmp<=tmp+1;
endif;
endif;
endprocess;
q<=tmp;
endarch;
【仿真波形图】
【仿真波形图分析】
由仿真波形图可以看出,该电路实现了对输入信号的8421码十进制计数,且带异步复位功能,符合设计要求。
(3)
(1)、
(2)与数码管译码器连接电路
【VHDL代码】
libraryieee;
useieee.std_logic_1164.all;
entitylinkis
port(
clk,clear:
instd_logic;
clk_out:
outstd_logic_vector(6downto0);
cat:
outstd_logic_vector(7downto0));
endlink;
architecturearchoflinkis
componentdiv_12
port(clk,clear:
instd_logic;
clk_out:
outstd_logic);
endcomponent;
componentcounter
port(clk,clear:
instd_logic;
q:
outstd_logic_vector(3downto0));
endcomponent;
componentseg7_1
port(a:
instd_logic_vector(3downto0);
b:
outstd_logic_vector(6downto0);
c:
outstd_logic_vector(7downto0)
);
endcomponent;
signals:
std_logic;
signaltmp:
std_logic_vector(3downto0);
begin
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);
end;
【实验模块端口说明】
分频模块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)掌握多个数码管动态显示的原理及设计方法。
二、实验所用仪器及元器件
(1)计算机;
(2)直流稳压电源;
(3)数字系统与逻辑设计实验开发板。
三、实验任务要求
用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试。
四、实验VHDL代码及实验要求内容
【VHDL代码】
(1)计数模块counter.vhd
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(
clk,clear:
instd_logic;
count:
outstd_logic_vector(2downto0));
endcounter;
architecturearchofcounteris
signaltmp:
std_logic_vector(2downto0);
begin
process(clk,clear)
begin
ifclear='1'then
tmp<="000";
elsifclk'eventandclk='1'then
iftmp="110"then
tmp<="001";
elsetmp<=tmp+1;
endif;
endif;
endprocess;
count<=tmp;
endarch;
(2)数码管显示模块display.vhd
libraryieee;
useieee.std_logic_1164.all;
entitydisplayis
port(
n:
instd_logic_vector(2downto0);
num:
outstd_logic_vector(6downto0);
cat:
outstd_logic_vector(7downto0));
enddisplay;
architecturearchofdisplayis
begin
process(n)
begin
casenis
when"001"=>num<="1111110";cat<="11011111";
when"010"=>num<="0110000";cat<="11101111";
when"011"=>num<="1101101";cat<="11110111";
when"100"=>num<="1111001";cat<="11111011";
when"101"=>num<="0110011";cat<="11111101";
when"110"=>num<="1011011";cat<="11111110";
whenothers=>num<="0000000";cat<="11111111";
endcase;
endprocess;
endarch;
(3)主体模块scan.vhd
libraryieee;
useieee.std_logic_1164.all;
entityscanis
port(
clk,clear:
instd_logic;
clk_out:
outstd_logic_vector(6downto0);
cat:
outstd_logic_vector(7downto0));
endscan;
architecturearchofscanis
componentcounter
port(clk,clear:
instd_logic;
count:
outstd_logic_vector(2downto0));
endcomponent;
componentdisplay
port(n:
instd_logic_vector(2downto0);
num:
outstd_logic_vector(6downto0);
cat:
outstd_logic_vector(7downto0));
endcomponent;
signaltmp:
std_logic_vector(2downto0);
begin
u1:
counterportmap(clk=>clk,clear=>clear,count=>tmp);
u2:
displayportmap(n=>tmp,num=>clk_out,cat=>cat);
end;
【实验模块端口说明】
计数模块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语言的掌握程度在逐步提高,设计电路的能力也有了很大提升。
该实验很好地锻炼了我的逻辑思维能力,使我对数字电路的理解进一步加深。
可编程数字系统与逻辑设计实验开发板的使用使得自己能够实践检验设计的正确性,也给实验的过程本身带来了趣味性,提高了观察能力和动手能力。
经过本学期的实验学习,自己已具备基本的数字逻辑电路设计能力,为后期的进一步发展打下了坚实的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京邮电 大学 数字电路 逻辑设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)