北邮大二下 数电实验报告教材.docx
《北邮大二下 数电实验报告教材.docx》由会员分享,可在线阅读,更多相关《北邮大二下 数电实验报告教材.docx(22页珍藏版)》请在冰豆网上搜索。
![北邮大二下 数电实验报告教材.docx](https://file1.bdocx.com/fileroot1/2023-1/27/3f04f2be-32ff-46a2-871a-a2571c0d26f0/3f04f2be-32ff-46a2-871a-a2571c0d26f01.gif)
北邮大二下数电实验报告教材
北京邮电大学
数字电路与逻辑设计实验
学院:
班级:
姓名:
学号:
班内序号:
实验一
1、实验名称
QuartusII原理图输出法设计
(1)半加器
2、实验任务要求
用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
3、设计思路和过程
◎设计思路
半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产
生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。
数据输入:
被加数AI、加数BI
数据输出:
半加和SO、进位CO
◎ 设计过程
(1)列出真值表
输入
输出
AI
BI
SO
CO
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
*表中两个输入是加数AI和BI,输出有一个是和SO,另一个是进位CO。
(2)根据真值表写出输出逻辑表达式
该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下:
。
所以,可以用一个两输入异或门和一个两输入与门实现。
◎实验原理图
4、仿真波形图及分析
根据仿真波形对比半加器真值表,可以确定电路实现了半加器的功能。
但我们也可以发现输出SO出现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲。
(2)全加器
二、实验任务要求
用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。
三、设计思路和过程
◎设计思路
全加器与半加器的区别在于全加器有一个低进位CI,从外部特性来看,它是一个三输入两输出的器件。
◎设计过程
(1)全加器的真值表如下
输入
输出
AI
BI
CI
SO
CO
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
*其中AI为被加数,BI为加数,CI为相邻低位来的进位数。
输出本位和为SO,向相邻高位进位数为CO。
(2)根据真值表写出逻辑表达式:
根据逻辑表达式,可以知道只要在半加器的基础上再加入一个异或门、一个两输入与门和两输入或门即可实现全加器。
◎实验原理图
四、仿真波形图及分析
根据仿真波形对比全加器真值表,可以确定电路实现了全加器的功能。
(三)3线—8线译码器
二、实验任务要求
用3线—8线译码器(74LS138)和逻辑门设计实现函数
仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
三、设计思路和过程
◎设计思路
74LS138是一个3线—8线的译码器,其输出为低电平有效,使能端G1为高电平有效,G2、G3为低电平有效,当其中一个为高电平,输出端全部为1。
在中规模集成电路中译码器的几种型号里,74LS138使用最广泛。
要实现的函数用最小项表示如下:
F(C,B,A)=∑m(0,2,4,7)
只要将相应输出用一个四输入与非门实现即可。
◎注意
(1)74LS138的输出是低电平有效,故实现逻辑功能时,输出端不可接或门及或非门(因为每次仅一个为低电平,其余皆为高电平);
(2)74LS138与前面不同的是,其有使能端,故使能端必须加以处理,否则无法实现需要的逻辑功能。
◎实验原理图
四、仿真波形图及分析
当且仅当ABC输入为000、010、100、111时,F=1;可知电路实现了函数
。
实验二
1、实验名称
VHDL组合逻辑电路设计
(一)奇校验器
2、实验任务要求
用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出为‘0’,仿真实现验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
3、设计思路和过程
输入元素:
a3,a2,a1,a0
输出元素:
b
输入
输出
a3
a2
a1
a0
b
0
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
0
1
0
0
1
0
1
0
1
0
0
1
1
0
0
0
1
1
1
1
1
0
0
0
1
1
0
0
1
0
1
0
1
0
0
1
0
1
1
1
1
1
0
0
0
1
1
0
1
1
1
1
1
0
1
1
1
1
1
0
四、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYhy_checkIS
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC
);
endhy_check;
ARCHITECTUREhy_archOFhy_checkIS
BEGIN
PROCESS(a)
BEGIN
CASEaIS
WHEN"0000"=>b<='0';
WHEN"0001"=>b<='1';
WHEN"0010"=>b<='1';
WHEN"0011"=>b<='0';
WHEN"0100"=>b<='1';
WHEN"0101"=>b<='0';
WHEN"0110"=>b<='0';
WHEN"0111"=>b<='1';
WHEN"1000"=>b<='1';
WHEN"1001"=>b<='0';
WHEN"1010"=>b<='0';
WHEN"1011"=>b<='1';
WHEN"1100"=>b<='0';
WHEN"1101"=>b<='1';
WHEN"1110"=>b<='1';
WHEN"1111"=>b<='0';
ENDCASE;
ENDPROCESS;
END;
5、仿真波形图及分析
根据仿真波形对比奇校验码的真值表,可以确定电路实现了奇校验器的功能。
(2)数码管译码器
二、实验任务要求
用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,7段数码管显示输出信号。
3、设计思路和过程
输入元素:
A3—A0
输出元素:
B6—B0,C5—C0
输入
输出
A3
A2
A1
A0
B6
B5
B4
B3
B2
B1
B0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
1
0
1
1
0
0
0
0
0
0
1
0
1
1
0
1
1
0
1
0
0
1
1
1
1
1
1
0
0
1
0
1
0
0
0
1
1
0
0
1
1
0
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
0
1
1
1
1
1
1
0
0
0
0
1
0
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
0
1
1
*真值表由数码管显示的原理确定。
四、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhy_encoder1IS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
B:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
C:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDhy_encoder1;
ARCHITECTUREencoder_archOFhy_encoder1IS
BEGIN
PROCESS(A)
BEGIN
C<="101111";
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;
ENDencoder_arch;
五、仿真波形图及分析
根据仿真波形对比数码管译码器的真值表,可以确定实现了数码管译码器的功能。
(三)8421码到余三码
二、实验任务要求
用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
.
三、设计思路和过程
输入数据:
A3—A0
输出数据:
B3—B0
输入
输出
A3
A2
A1
A0
B3
B2
B1
B0
0
0
0
0
0
0
1
1
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
0
0
1
1
1
0
1
0
1
1
0
0
0
0
1
1
0
1
0
0
1
0
1
1
1
1
0
1
0
1
0
0
0
1
0
1
1
1
0
0
1
1
1
0
0
*余三码就是在8421码的基础上+3。
4、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhy_trans1IS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
B:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDhy_trans1;
ARCHITECTUREtrans_ex3OFhy_trans1IS
BEGIN
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>B<="0011";
WHEN"0001"=>B<="0100";
WHEN"0010"=>B<="0101";
WHEN"0011"=>B<="0110";
WHEN"0100"=>B<="0111";
WHEN"0101"=>B<="1000";
WHEN"0110"=>B<="1001";
WHEN"0111"=>B<="1010";
WHEN"1000"=>B<="1011";
WHEN"1001"=>B<="1100";
WHENOTHERS=>B<="ZZZZ";
ENDCASE;
ENDPROCESS;
ENDtrans_ex3;
5、仿真波形图及分析
根据仿真波形对比真值表,可以确定电路实现了8421码到余三码的转换。
实验三
1、实验名称
VHDL时序逻辑电路设计
(一)分频器
2、实验任务要求
用VHDL语言设计实现一个分频输出信号占空比为50%的分频器。
要求在QuartusII平台上设计程序并仿真验证设计。
3、设计思路和过程
◎设计思路
确定分频系数N后,以
为计数标准,一旦计数满
,输出
。
◎设计过程
选取N=20,以0-4计数,到4取反。
输入元素:
clk,clear
输出元素:
clk_out
4、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhy_divIS
PORT(
clk,clear:
INSTD_LOGIC;
clk_out:
OUTSTD_LOGIC);
ENDhy_div;
ARCHITECTUREaOFhy_divIS
SIGNALtmp:
INTEGERRANGE0TO9;
SIGNALclktmp:
STD_LOGIC;
BEGIN
PROCESS(clear,clk)
BEGIN
IFclear='0'THEN
tmp<=0;
ELSIFclk'eventANDclk='1'THEN
IFtmp=9THEN
tmp<=0;clktmp<=NOTclktmp;
ELSEtmp<=tmp+1;
ENDIF;
ENDIF;
ENDPROCESS;
clk_out<=clktmp;
ENDa;
5、仿真波形图及分析
分析仿真波形,可以确定电路实现了20倍分频的功能。
(2)十进制计数器
二、实验任务要求
用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能。
3、设计思路和过程
◎设计思路
满10异步复位。
◎设计过程
输入元素:
clk,clear
输出元素:
q3,q2,q1,q0
四、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYhy_countIS
PORT(
clk,clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDhy_count;
ARCHITECTUREaOFhy_countIS
SIGNALcn:
INTEGERRANGE0TO9;
BEGIN
PROCESS(clk)
BEGIN
IFclear='0'THEN
cn<=0;
elsIF(clk'eventANDclk='1')THEN
IFcn=9THEN
cn<=0;
ELSEcn<=cn+1;
ENDIF;
ENDIF;
ENDPROCESS;
q<=CONV_STD_LOGIC_VECTOR(cn,4);
ENDa;
五、仿真波形图及分析
分析仿真波形,可以确定电路实现了十进制计数器的功能。
(三)十进制计数器的数码管显示
二、实验任务要求
将2中的8421码十进制计数器下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输入信号。
三、设计思路和过程
◎设计思路
此系统中应包括分频器、十进制计数器、数码管译码器。
◎设计过程
输入元素:
ain,bin,cin
输出元素:
cout(0-6),cat(0-5)
四、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYhy_unionIS
PORT(
ain:
INSTD_LOGIC;
bin:
INSTD_LOGIC;
cin:
INSTD_LOGIC;
cout:
OUTSTD_LOGIC_VECTOR(6downto0);
cat:
OUTSTD_LOGIC_VECTOR(5downto0)
);
endhy_union;
ARCHITECTUREzonghe_archOFhy_unionIS
COMPONENTdiv50m——分频器
PORT(
clk_in:
instd_logic;
clk_out:
outstd_logic
);
ENDCOMPONENT;
COMPONENThy_count——计数器
PORT(
clk,clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3downto0)
);
ENDCOMPONENT;
COMPONENTyima——数码管译码器
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0);
c:
OUTSTD_LOGIC_VECTOR(5downto0)
);
endCOMPONENT;
SIGNALd,e:
STD_LOGIC;
SIGNALf:
STD_LOGIC_VECTOR(3downto0);
BEGIN
u1:
div50mPORTMAP(clk_in=>ain,clk_out=>d);
u2:
hy_countPORTMAP(clk=>d,clear=>cin,q=>f);
u3:
yimaPORTMAP(a=>f,b=>cout,c=>cat);
ENDzonghe_arch;
实验四
1、实验名称
数码管扫描显示控制器设计与实现
2、实验任务要求
用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这六个不同的数字图形到六个数码管上,仿真验证其功能,并下载到实验板测试。
3、设计思路和过程
◎设计思路
多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
当闪烁显示的发光二极管闪烁频率较高时,我们将观察到持续点亮的现象。
同理,当多个数码管依次显示,当切换速度足够快时,我们将观察到所有数码管都是同时在显示。
一个数码管要稳定显示要求显示频率大于50Hz,那么六个数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。
◎ 设计过程
数据输入:
clk,clear
数据输出:
B(0-6),C(0-5)
4、VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYHYIS
PORT(clk,clear:
INSTD_LOGIC;
B:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
C:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDHY;
ARCHITECTUREbehaveOFHYIS
SIGNALtmp:
INTEGERRANGE0TO5;
SIGNALcount:
STD_LOGIC_VECTOR(5DOWNTO0);——count决定哪个数码管有示数
SIGNALf_temp:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
p1:
PROCESS(clk)——排次序
BEGIN
IFclk'EVENTANDclk='1'THEN
IFtmp=5THEN
tmp<=0;
ELSE
tmp<=tmp+1;
ENDIF;
ENDIF;
ENDPROCESSp1;
p2:
PROCESS(tmp)——数码管显示数
BEGIN
IF(clear='0')THENcount<="111111";
CASEtmpIS——依次逐个输出0-5
WHEN0=>count<="011111";f_temp<="1111110";--0
WHEN1=>count<="101111";f_temp<="0110000";--1
WHEN2=>count<="110111";f_temp<="1101101";--2
WHEN3=>count<="111011";f_temp<="1111001";--3
WHEN4=>count<="111101";f_temp<="0110011";--4
WHEN5=>count<="111110";f_temp<="1011011";--5
ENDCASE;
elsecount<="111111";
ENDIF;
ENDPROCESSp2;
C<=count;
B<=f_temp;
ENDbehave;
5、仿真波形图
分析波形易知,C确实实现了六个数码管的交替显示,B则控制着各对应管输出0-5相应的数字。
数电实验总结
【故障和问题分析】
故障一:
仿真时设置clk脉冲宽度为1us,报错
解决办法:
经检查发现,未更改end time设置,把end time重置为50us。
故障二:
下载后,按键没有反应。
解决办法:
检验相应管脚是否设置正确,检查管脚是否失效,下载操作是否正确。
故障三:
数码管显示乱码。
解决办法:
一开始我直接检查代码,检查了好久都没发现错误,后来换了个实验板,重新下载后就好了。
另:
实验过程中,唯一的问题是对于多输入电路,静态功能冒险还是会存在的,在这种情况下应该加入选通脉冲来消除静态功能冒险。
【总结与结论】
本学期的四次实验均较为简单,只要认真听讲、细心操作,基本没有太大的问题。
难点主要是对VHDL语言的学习和对QuartusII软件的熟悉。
起初接触QuartusII,感觉毫无头绪。
在预习过课本之后,再结合数字电路理论课上所学的知识,终于有了一些思路。
顺着这思路,对所求元件进行了相应的功能设计,然后开始了相应代码的编写。
在编写过程中,遇到了很多关于VHDL语言的困扰,经过不断的调整和适应,终于掌握了相关的语法规则。
通过这次实验,我收获最多的还是熟悉了数字电路的设计过程,之前所学习的还是理论上的知识。
理论固然重要,但一味纸上谈兵,是不可能掌握实际技能的。
希望今后能够多一些类似的实验、实践活动的机会,让我们提高动手能力、培养实用技能。