北邮数字电路与逻辑设计实验上综合实验报告详解Word格式文档下载.docx
- 文档编号:21201249
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:25
- 大小:968.67KB
北邮数字电路与逻辑设计实验上综合实验报告详解Word格式文档下载.docx
《北邮数字电路与逻辑设计实验上综合实验报告详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北邮数字电路与逻辑设计实验上综合实验报告详解Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
2)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。
要求在QuartusII平台上设计程序并仿真验证设计。
3)讲
(1)、
(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。
(四)用VHDL设计与实现相关电路
实验题目(二选一)
1)数码管动态扫描控制器
2)点阵行扫描控制器
1)用VHDL语言设计实现一个数码管动态扫描控制器,要求显示班号后3位和班内序号。
仿真验证其功能,并下载到实验板测试。
2)用VHDL语言设计实现一个8×
8点阵行扫描控制器,要求从上至下逐行循环点亮点阵(红色或绿色均可),每行点亮时间为0.5秒。
3)用VHDL语言设计实现一个8×
8点阵行扫描控制器,要求从上至下逐行点亮点阵,第一行为红色,第二行为绿色,依次类推,直至点亮所有行,然后全部熄灭,再重新从第一行开始。
二、实验内容、原理图、VHDL代码和仿真波形分析
(五)QuartusII原理图输入法设计与实现
1.半加器
原理图:
2.全加器
原理图
其中halfadder元件是之前生成的半加器图形模块单元。
仿真波形图
波形分析
全加器包括两个加数A和B、从低位进位Ci、向高位进位Co、和值S,其真值表如下:
A
B
Ci
S
Co
1
波形图中,高电平对应真值表中的‘1’,低电平对应真值表中的‘0’,设置“EndTime”为50μs,A、B、Ci三个输入的波形周期分别为1μs、2μs、4μs,可对应出真值表中的8种输入状态。
S、Co为输出,同样,根据高低电平对照真值表,可以判断输出无误。
输出波形中的冒险可通过增加冗余项消除,但对于本实验来说并无大碍。
3.3-8线译码器
本实验采用已有的3-8线译码器元件,再将表达式中四个最小项对应的输出管脚通过与非门连接即可。
(六)用VHDL设计与实现组合逻辑电路
在编写本次实验的代码时,我采用的是较为直观的CASE语句,罗列出所有可能。
代码比较简单,故只列出代码,不再赘述。
4.数码管译码器
VHDL代码
详见实验(三)3中VHDL代码的e7_2.vhd文件。
5.8421码转余3码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYe7_3IS
PORT(a:
INSTD_LOGIC_VECTOR(3DOWNTO0);
b:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDe7_3;
ARCHITECTUREarchOFe7_3IS
BEGIN
PROCESS(a)
BEGIN
CASEaIS
WHEN"
0000"
=>
b<
="
0011"
;
0001"
0100"
0010"
0101"
0110"
0111"
1000"
1001"
1010"
1011"
1100"
WHENOTHERS=>
ENDCASE;
ENDPROCESS;
ENDarch;
6.奇校验器
ENTITYe7_4IS
OUTSTD_LOGIC
ENDe7_4;
ARCHITECTUREarchOFe7_4IS
='
0'
1'
1101"
1110"
1111"
(七)用VHDL设计与实现时序逻辑电路
7.8421十进制计数器
本实验代码我采用IF语句实现,详细代码可见第三个实验中VHDL代码的e7_11.vhd文件。
8.分频器
本实验代码依然采用IF语句实现,详细代码可见第三个实验中VHDL代码的e7_8.vhd文件。
原题目中要求的分频系数为12,而在第三个实验中,由于使用的是开发板上的高频时钟,故将代码中的分频系数调高,并将清零电平做了调整,以满足第三个实验的要求。
9.组合电路实现数码管0到9循环显示
本实验由分频器、计数器和数码管译码器连接而成,这三个元件分别有各自的VHDL代码文件。
在主体中,我利用COMPONENT语句调用这三个文件,在它们之间通过信号SIGNAL连接,从而实现模块化编程。
实验时,实验板上的高频时钟先通过分频器降频,之后用计数器计数,再通过数码管译码器译码并显示在数码管上,实现从0到9循环显示的效果。
端口说明
元件名
端口
输入/输出
名称
相关信息或功能
主体
clk_in
输入端
外部时钟信号
开发板clk的频率为50MHz
clear_in
异步复位信号
异步复位清零
b_out[6,0]
输出端
七段控制信号
通过控制a到g的亮灭,显示不同的数字
CAT_out[5,0]
六位控制信号
控制六位数码管的显示
分频器
clk
时钟信号
clear
异步复位使clk_out置0
clk_out
分频后的时钟信号
计数器
异步复位使q[3,0]置0000
q[3,0]
四位数组信号
输出二进制计数结果
数码管
译码器
a[3,0]
输入二进制数
b[6,0]
根据输入的二进制数,通过控制a到g的亮灭,显示不同的数字
CAT[5,0]
低电平有效,控制六位数码管的显示
连接图
主体:
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYe7_8and11IS
PORT(
clk_in:
INSTD_LOGIC;
clear_in:
b_out:
OUTSTD_LOGIC_VECTOR(6downto0);
CAT_out:
OUTSTD_LOGIC_VECTOR(5downto0)
ende7_8and11;
ARCHITECTUREarchOFe7_8and11IS
COMPONENTe7_2
a:
INSTD_LOGIC_VECTOR(3downto0);
CAT:
OUTSTD_LOGIC_VECTOR(5downto0));
ENDCOMPONENT;
COMPONENTe7_8
clk:
clear:
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
COMPONENTe7_11
clk_out:
OUTSTD_LOGIC);
SIGNALq_twmp:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALclktmp:
STD_LOGIC;
u1:
e7_11PORTMAP(clk=>
clk_in,clear=>
clear_in,clk_out=>
clktmp);
u2:
e7_8PORTMAP(clk=>
clktmp,clear=>
clear_in,q=>
q_twmp);
u3:
e7_2PORTMAP(a=>
q_twmp,CAT=>
CAT_out,b=>
b_out);
e7_11.vhd:
ENTITYe7_11IS
ende7_11;
ARCHITECTUREarchOFe7_11IS
SIGNALtmp:
INTEGERRANGE0TO12499999;
SIGNALclktmp:
PROCESS(clear,clk)
IFclear='
THEN
tmp<
=0;
clktmp<
ELSIFclk'
eventANDclk='
IFtmp=12499999THEN
tmp<
clktmp<
=NOTclktmp;
ELSE
=tmp+1;
ENDIF;
ENDIF;
clk_out<
=clktmp;
e7_8.vhd:
ENTITYe7_8IS
ENDe7_8;
ARCHITECTUREarchOFe7_8IS
SIGNALq_temp:
PROCESS(clk)
q_temp<
ELSIF(clk'
)THEN
IFq_temp="
q_temp<
=q_temp+1;
q<
=q_temp;
e7_2.vhd:
ENTITYe7_2IS
ende7_2;
ARCHITECTUREarchOFe7_2IS
PROCESS(a)
CAT<
="
110111"
1111110"
0110000"
1101101"
1111001"
0110011"
1011011"
1011111"
1110000"
1111111"
1111011"
0000000"
注:
为便于仿真,分频器系数设置为4。
从波形图中可以看出,当异步复位信号clear_in为‘0’时,电路正常工作,时钟信号clk_in先通过分频器实现降频,每通过4个时钟上升沿,输出一个降频后的时钟上升沿,相当于频率降低4倍。
降频后的时钟信号进入计数器,每一个上升沿计数加1,从0到9循环计数,并以二进制数输出。
最后通过数码管译码器,将二进制数转换为七段数码管,显示数字0到9循环。
CAT_out控制开发板上的六个数码管显示哪一个,低电平有效。
从波形图中看出,本实验选择的是3号数码管显示数字。
当异步复位信号clear_in为‘1’时,分频器、计数器异步复位,从波形图中可以看出,数码管立刻显示数字‘0’。
待异步复位信号clear_in回到‘0’时,重新开始计数并显示。
在实际实验中,由于利用的是开发板上50MHz的高频时钟信号,所以分频系数设置为25M(25000000),即分频器中从0到12499999计数,分频后的时钟为2Hz。
计数器、数码管译码器不作改动。
数码管每0.5s显示一个数字,从0到9循环显示。
(八)用VHDL设计与实现相关电路
本次实验的两个电路的VHDL代码我都编写了,实验时下载到开发板上的是第一个实验——数码管动态扫描控制器,在报告中这两个实验我都会给出详细解释,但是重点放在第一个上。
10.数码管动态扫描控制器
本实验主要由两个PROCESS部分组成,第一部分是分频器,第二部分是7段数码管显示器,中间用SIGNAL连接。
当输入时钟频率较高时,每次扫描所用时间很短,人眼难以分辨,看起来就像是持续亮着一样。
如果将分频器的分频系数调高,如上一个实验调成25M,则数字会从左到右一个一个显示,间隔为0.5s。
p_out[6,0]
异步复位使输出时钟置0
clk_temp
显示器
每经过一个上升沿,CAT和part都发生变化(进入下一状态),其中CAT的状态转移图如下
CAT的状态转移图
(如果出现其他状态均转移到111110以保证进入循环)
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYnumberIS
PORT(clk,clear:
p_out:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDnumber;
ARCHITECTUREarchOFnumberIS
SIGNALclk_temp:
SIGNALcount:
INTEGERRANGE0to5;
SIGNALpart:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALCAT:
STD_LOGIC_VECTOR(5DOWNTO0);
u1:
PROCESS(clk)
IF(clear='
)THEN
count<
ELSIF(clk'
EVENTANDclk='
IFcount=5THEN
count<
clk_temp<
=NOTclk_temp;
ELSE
=count+1;
ENDIF;
ENDPROCESSu1;
u2:
PROCESS(clk_temp)
IF(clk_temp'
EVENTANDclk_temp='
CASECATIS
WHEN"
101111"
=>
CAT<
011111"
part<
--显示数字‘5’
--显示数字‘0’
111011"
0000001"
--显示符号‘-’
111101"
--显示数字‘4’
111110"
--显示数字‘2’
--显示数字‘1’
ENDPROCESSu2;
CAT_out<
=CAT;
p_out<
=part;
从波形图中可以看出,当异步复位信号clear为‘0’时,电路正常工作,时钟信号clk先通过分频器实现降频,每通过4个时钟上升沿,输出一个降频后的时钟上升沿,相当于频率降低4倍。
降频后的时钟信号进入数码管显示器。
CAT控制开发板上的六个数码管显示哪一个,低电平有效,part则控制七段数码管分别显示‘1’、‘2’、‘4’、‘-’、‘0’、‘5’这六个字符。
为了让电路可以自启动,当part为其他状态时,均设置下一状态为111110。
外部输出CAT_out对应CAT,p_out对应p。
从波形图中可以看出,每经过一个分频后的时钟上升沿,CAT和part的状态改变一次,并显示相应的字符,以实现滚动扫描。
当异步复位信号clear为‘1’时,分频器异步复位,分频器中的计数立刻置0,从波形图中可以看出,CAT和part分别保持不变,即六位和七段数码管均保持原状态,直至clear为‘0’,继续循环扫描。
在实际实验中,由于利用的是开
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 逻辑设计 实验 综合 报告 详解