北邮数字电路与逻辑设计实验报告Word格式文档下载.doc
《北邮数字电路与逻辑设计实验报告Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《北邮数字电路与逻辑设计实验报告Word格式文档下载.doc(20页珍藏版)》请在冰点文库上搜索。
![北邮数字电路与逻辑设计实验报告Word格式文档下载.doc](https://file1.bingdoc.com/fileroot1/2023-5/10/340caca3-6181-4434-8634-4a084374240e/340caca3-6181-4434-8634-4a084374240e1.gif)
实验二用VHDL设计与实现组合逻辑电路
一、实验目的:
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(2)熟悉用QuartusII文本输入法进行电路设计;
(3)熟悉不同的编码及其之间的转换。
(1)计算机;
(2)直流稳压电源;
(3)数字系统与逻辑设计实验开发板。
(1)用VHDL语言设计实现一个共阴极7段数码管译码器;
(2)用VHDL语言设计一个8421码转余三码的代码转换器;
(3)用VHDL语言设计设计一个四位2进制奇校验器。
四、实验代码及仿真波形图
数码管译码器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYshumaguanyimaqiIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
B:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
C:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDshumaguanyimaqi;
ARCHITECTUREencoder_archOFshumaguanyimaqiIS
BEGIN
PROCESS(A)
C<
="
011111"
;
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=>
ZZZZZZZ"
ENDCASE;
ENDPROCESS;
ENDencoder_arch;
仿真波形图
仿真波形分析:
A是输入,A0-A3是由低位到高位变化,B是数码管的各个部分,随着A输入的变化,B数码管对应译码出相应的数字显示出来。
8421码转余三码
ENTITYjxhyusanmaIS
PORT(A:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjxhyusanma;
ARCHITECTUREtrans_ex3OFjxhyusanmaIS
1010"
1011"
1100"
ZZZZ"
ENDtrans_ex3;
8421码转换余三码,由0111转换成为了1010可以看出功能已经实现,仿真验证了代码功能正确。
奇校验
ENTITYjxhjijiaoyanIS
PORT(A:
STD_LOGIC;
B:
D:
F:
OUTSTD_LOGIC);
ENDjxhjijiaoyan;
ARCHITECTUREoneOFjxhjijiaoyanIS
SIGNALn1,n2:
STD_LOGIC;
BEGIN
n1<
=AXORB;
n2<
=n1XORC;
F<
=n2XORD;
ENDone;
当ABCD为1111时,输出F为0,ABCD为1110时,输出F为1,可见奇校验功能得以实现。
实验三用VHDL设计与实现时序逻辑电路
(1)用VHDL语言设计实现一个8421十进制计数器;
(2)用VHDL语言设计一个分频器;
(3)将
(1)、
(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。
8421十进制计数器
ENTITYjxhshijinzhijishuqiIS
PORT(
clk,reset:
INSTD_LOGIC;
q:
ENDjxhshijinzhijishuqi;
ARCHITECTUREaOFjxhshijinzhijishuqiIS
SIGNALq_temp:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,reset)
IFreset='
0'
THEN
q_temp<
ELSIFclk'
EVENTANDclk='
1'
IFq_temp="
ELSEq_temp<
=q_temp+1;
ENDIF;
q<
=q_temp;
ENDa;
仿真波形图分析:
8421十进制计数器随着时钟的信号进行计数,restart是复位,当复位为零的时候计数器重新计数。
根据仿真结果来看,8421十进制计数器功能得以实现。
分频器
ENTITYjxhfenpinqiIS
clk:
clear:
clk_out:
ENDjxhfenpinqi;
ARCHITECTUREaOFjxhfenpinqiIS
SIGNALtemp:
INTEGERRANGE0TO11;
p1:
PROCESS(clear,clk)
IFclear='
THEN
temp<
=0;
IFtemp=11THEN
ELSEtemp<
=temp+1;
ENDPROCESSp1;
p2:
PROCESS(temp)
IFtemp<
6THEN
clk_out<
='
ELSEclk_out<
ENDPROCESSp2;
分频器将频率分开,置零端正常工作,根据仿真波形可以看出来,分频器的功能得以正常实现。
组合电路
OUTSTD_LOGIC
);
ARCHITECTUREbehaveOFjxhfenpinqiIS
INTEGERRANGE0TO24999999;
SIGNALclktmp:
BEGIN
PROCESS(clk)
BEGIN
IFclk'
eventANDclk='
THEN
IFtemp=24999999THEN
clktmp<
=NOTclktmp;
ELSE
=clktmp;
ENDbehave;
ENTITYjxhshijinzhiIS
PORT(
CLK,CLEAR:
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjxhshijinzhi;
ARCHITECTUREAOFjxhshijinzhiIS
SIGNALQ_TEMP:
PROCESS(CLK,clear)
IFCLEAR='
Q_TEMP<
elsIF(CLK'
EVENTANDCLK='
)THEN
IFQ_TEMP="
ELSE
=Q_TEMP+1;
ENDIF;
ENDIF;
Q<
=Q_TEMP;
ENDA;
ENTITYjxhshumaguanIS
PORT(a:
b:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
c:
ENDjxhshumaguan;
ARCHITECTUREseg7_archOFjxhshumaguanIS
PROCESS(a)
c<
CASEaIS
b<
01111110"
--0
00110000"
--1
01101101"
--2
01111001"
--3
00110011"
--4
01011011"
--5
01011111"
--6
01110000"
--7
01111111"
--8
01111011"
--9
00000000"
ENDseg7_arch;
ENTITYjxhzuhedianluIS
ain:
bin:
cout:
OUTSTD_LOGIC_VECTOR(7downto0);
cat:
OUTSTD_LOGIC_VECTOR(5downto0)
endjxhzuhedianlu;
ARCHITECTUREbehaveOFjxhzuhedianluIS
COMPONENTjxhfenpinqi
ENDCOMPONENT;
COMPONENTjxhshijinzhi
clk,clear:
OUTSTD_LOGIC_VECTOR(3downto0)
COMPONENTjxhshumaguan
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
c:
endCOMPONENT;
SIGNALd:
SIGNALf:
STD_LOGIC_VECTOR(3downto0);
u1:
jxhfenpinqiPORTMAP(clk=>
ain,clk_out=>
d);
u2:
jxhshijinzhiPORTMAP(clk=>
d,clear=>
bin,q=>
f);
u3:
jxhshumaguanPORTMAP(a=>
f,b=>
cout,c=>
cat);
端口的绑定:
端口分析:
Ain是时钟信号的输入绑定了18串口,bin是置零信号绑定了20串口,cat5-0是每个数码管各自的绑定,根据板子上的串口数字绑定,cout7-0是数码管的每一个亮的部分,根据板子上的提示串口进行绑定,根据编程可以实现让数码管显示不同的数字。
电路图:
代码中是使用PORTMAP进行连接的
在此图中可以看出ain接分频器的clk,分频器的clk_out接十进制译码器的CLK,bin接十进制译码器的CLEAR,十进制译码器的Q接数码管的a,数码管的b,c分别接count和cat。
实验四数码管扫描显示控制器设计与实现
1.掌握VHDL语言的语法规范,掌握时序电路描述方法。
2.掌握多个数码管动态扫描现实的原理及设计方法。
二、实验所用器材:
1.计算机:
装有Quartus软件,为VHDL语言提供操作场所。
2.直流稳压电源:
通过USB接口实现,为实验开发板提供稳定电源。
3.数字系统与逻辑设计实验开发板:
使试验结果下载到开发板上,实现整个实验的最终结果。
1.用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上。
2.用VHDL语言设计并实现六个数码管滚动显示电路。
(1)循环左滚动,始终点亮6个数码管,左出右进。
状态为:
012345→123450→234501→345012→450123→501234→012345
(2)向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再一次从右边一个一个的点亮。
状态为012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中“X”表示数码管不显示。
四、实验原理
多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率大于50HZ,将看不到闪烁现象。
如下图10-1,是多个数码管动态扫描显示的电路连接图。
当闪烁显示的发光二极管闪烁频率较高时我们将观察到持续点亮的现象。
同理,当多个数码管依次显示,当切换速度够快时,我们将观察到所有数码管都是同事在显示。
一个数码管要稳定显示要求显示频率>
50hz,那么6个数码管则需要50*6=300hz以上才能看到持续稳定点亮的现象。
cat1~cat6是数码管选通控制信号,分别对应于6个共阴极数码管的公共端,当catn=’0’时,其对应的数码管被点亮。
因此,通过控制cat1~cat6,就可以控制6个数码管循环依次点亮。
五、代码及仿真波形图
1.实现六个数码管串行扫描电路的思路及代码:
串行数码管
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjxhchuanxingis
port(
clear,clk_in:
instd_logic;
num:
outstd_logic_vector(6downto0);
cat:
outstd_logic_vector(5downto0));
endjxhchuanxing;
architectureoneofjxhchuanxingis
signalstatus:
integerrange0to6;
begin
process(clk_in)
ifclear='
thenstatus<
elsif(clk_in'
eventandclk_in='
)then
ifstatus=6thenstatus<
=1;
elsestatus<
=status+1;
endif;
endif;
endprocess;
process(status)
begin
casestatusis
when1=>
num<
cat<
when2=>
101111"
when3=>
110111"
when4=>
111011"
when5=>
111101"
when6=>
111110"
whenothers=>
num<
0000000"
000000"
;
endcase;
endprocess;
endone;
仿真波形:
由仿真波形可以看出数码管的串行显示得以实现,置零正常。
随着时钟输入的变化,数码管进行串行显示。
端口