北邮数字电路与逻辑设计实验上综合实验报告.docx
- 文档编号:29532032
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:30
- 大小:970.70KB
北邮数字电路与逻辑设计实验上综合实验报告.docx
《北邮数字电路与逻辑设计实验上综合实验报告.docx》由会员分享,可在线阅读,更多相关《北邮数字电路与逻辑设计实验上综合实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
北邮数字电路与逻辑设计实验上综合实验报告
数字电路与逻辑设计实验
综合实验报告
目录
一、实验题目和任务要求3
(一)QuartusII原理图输入法设计与实现3
(二)用VHDL设计与实现组合逻辑电路3
(三)用VHDL设计与实现时序逻辑电路3
(四)用VHDL设计与实现相关电路4
二、实验内容、原理图、VHDL代码和仿真波形分析4
(一)QuartusII原理图输入法设计与实现4
1.半加器4
2.全加器5
3.3-8线译码器6
(二)用VHDL设计与实现组合逻辑电路6
1.数码管译码器6
2.8421码转余3码6
3.奇校验器7
(三)用VHDL设计与实现时序逻辑电路8
1.8421十进制计数器8
2.分频器8
3.组合电路实现数码管0到9循环显示8
(四)用VHDL设计与实现相关电路13
1.数码管动态扫描控制器13
2.点阵行扫描控制器16
三、故障及问题分析20
四、总结和结论21
五、参考文献21
一、实验题目和任务要求
(一)QuartusII原理图输入法设计与实现
实验题目
QuartusII原理图输入法设计与实现
任务要求
1)用逻辑门设计一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
2)用生成的半加器模块和逻辑门设计与实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。
3)用3-8线译码器和逻辑门设计和实现函数
,仿真验证其功能。
(二)用VHDL设计与实现组合逻辑电路
实验题目
1)数码管译码器
2)8421码转余3码
3)奇校验器
任务要求
1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出为‘0’,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(三)用VHDL设计与实现时序逻辑电路
实验题目
1)8421十进制计数器
2)分频器
3)组合电路实现数码管0到9循环显示
任务要求
1)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号。
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
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
波形图中,高电平对应真值表中的‘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码
VHDL代码
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";
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<="0000";
ENDCASE;
ENDPROCESS;
ENDarch;
6.奇校验器
VHDL代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYe7_4IS
PORT(a:
INSTD_LOGIC_VECTOR(3DOWNTO0);
b:
OUTSTD_LOGIC
);
ENDe7_4;
ARCHITECTUREarchOFe7_4IS
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';
WHENOTHERS=>b<='0';
ENDCASE;
ENDPROCESS;
ENDarch;
(七)用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
输出端
时钟信号
分频后的时钟信号
计数器
clk
输入端
时钟信号
clear
输入端
异步复位信号
异步复位使q[3,0]置0000
q[3,0]
输出端
四位数组信号
输出二进制计数结果
数码管
译码器
a[3,0]
输入端
四位数组信号
输入二进制数
b[6,0]
输出端
七段控制信号
根据输入的二进制数,通过控制a到g的亮灭,显示不同的数字
CAT[5,0]
输出端
六位控制信号
低电平有效,控制六位数码管的显示
连接图
VHDL代码
主体:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYe7_8and11IS
PORT(
clk_in:
INSTD_LOGIC;
clear_in:
INSTD_LOGIC;
b_out:
OUTSTD_LOGIC_VECTOR(6downto0);
CAT_out:
OUTSTD_LOGIC_VECTOR(5downto0)
);
ende7_8and11;
ARCHITECTUREarchOFe7_8and11IS
COMPONENTe7_2
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0);
CAT:
OUTSTD_LOGIC_VECTOR(5downto0));
ENDCOMPONENT;
COMPONENTe7_8
PORT(
clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTe7_11
PORT(
clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
clk_out:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALq_twmp:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALclktmp:
STD_LOGIC;
BEGIN
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);
ENDarch;
e7_11.vhd:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYe7_11IS
PORT(
clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
clk_out:
OUTSTD_LOGIC);
ende7_11;
ARCHITECTUREarchOFe7_11IS
SIGNALtmp:
INTEGERRANGE0TO12499999;
SIGNALclktmp:
STD_LOGIC;
BEGIN
PROCESS(clear,clk)
BEGIN
IFclear='1'THEN
tmp<=0;
clktmp<='0';
ELSIFclk'eventANDclk='1'THEN
IFtmp=12499999THEN
tmp<=0;
clktmp<=NOTclktmp;
ELSE
tmp<=tmp+1;
ENDIF;
ENDIF;
ENDPROCESS;
clk_out<=clktmp;
ENDarch;
e7_8.vhd:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYe7_8IS
PORT(
clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDe7_8;
ARCHITECTUREarchOFe7_8IS
SIGNALq_temp:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk)
BEGIN
IFclear='1'THEN
q_temp<="0000";
ELSIF(clk'eventANDclk='1')THEN
IFq_temp="1001"THEN
q_temp<="0000";
ELSE
q_temp<=q_temp+1;
ENDIF;
ENDIF;
ENDPROCESS;
q<=q_temp;
ENDarch;
e7_2.vhd:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYe7_2IS
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0);
CAT:
OUTSTD_LOGIC_VECTOR(5downto0)
);
ende7_2;
ARCHITECTUREarchOFe7_2IS
BEGIN
PROCESS(a)
BEGIN
CAT<="110111";
CASEaIS
WHEN"0000"=>b<="1111110";
WHEN"0001"=>b<="0110000";
WHEN"0010"=>b<="1101101";
WHEN"0011"=>b<="1111001";
WHEN"0100"=>b<="0110011";
WHEN"0101"=>b<="1011011";
WHEN"0110"=>b<="1011111";
WHEN"0111"=>b<="1110000";
WHEN"1000"=>b<="1111111";
WHEN"1001"=>b<="1111011";
WHENOTHERS=>b<="0000000";
ENDCASE;
ENDPROCESS;
ENDarch;
仿真波形图
注:
为便于仿真,分频器系数设置为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。
端口说明
元件名
端口
输入/输出
名称
相关信息或功能
主体
clk
输入端
时钟信号
开发板clk的频率为50MHz
clear
输入端
异步复位信号
异步复位清零
p_out[6,0]
输出端
七段控制信号
通过控制a到g的亮灭,显示不同的数字
CAT_out[5,0]
输出端
六位控制信号
控制六位数码管的显示
分频器
clk
输入端
时钟信号
clear
输入端
异步复位信号
异步复位使输出时钟置0
clk_temp
输出端
时钟信号
分频后的时钟信号
数码管
显示器
clk
输入端
时钟信号
每经过一个上升沿,CAT和part都发生变化(进入下一状态),其中CAT的状态转移图如下
b[6,0]
输出端
七段控制信号
根据输入的二进制数,通过控制a到g的亮灭,显示不同的数字
CAT[5,0]
输出端
六位控制信号
低电平有效,控制六位数码管的显示
CAT的状态转移图
(如果出现其他状态均转移到111110以保证进入循环)
连接图
VHDL代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYnumberIS
PORT(clk,clear:
INSTD_LOGIC;
p_out:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
CAT_out:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDnumber;
ARCHITECTUREarchOFnumberIS
SIGNALclk_temp:
STD_LOGIC;
SIGNALcount:
INTEGERRANGE0to5;
SIGNALpart:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALCAT:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
u1:
PROCESS(clk)
BEGIN
IF(clear='1')THEN
count<=0;
ELSIF(clk'EVENTANDclk='1')THEN
IFcount=5THEN
count<=0;
clk_temp<=NOTclk_temp;
ELSE
count<=count+1;
ENDIF;
ENDIF;
ENDPROCESSu1;
u2:
PROCESS(clk_temp)
BEGIN
IF(clk_temp'EVENTANDclk_temp='1')THEN
CASECATIS
WHEN"101111"=>CAT<="011111";part<="1011011";--显示数字‘5’
WHEN"110111"=>CAT<="101111";part<="1111110";--显示数字‘0’
WHEN"111011"=>CAT<="110111";part<="0000001";--显示符号‘-’
WHEN"111101"=>CAT<="111011";part<="0110011";--显示数字‘4’
WHEN"111110"=>CAT<="111101";part<="1101101";--显示数字‘2’
WHEN"011111"=>CAT<="111110";part<="0110000";--显示数字‘1’
WHENOTHERS=>CAT<="111110";part<="1111110";--显示数字‘0’
ENDCASE;
ENDIF;
ENDPROCESSu2;
CAT_out<=CAT;
p_out<=part;
ENDarch;
仿真波形图
注:
为便于仿真,分频器系数设置为4。
波形分析
从波形图中可以看出,当异步复位信号clear为‘0’时,电路正常工
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 逻辑设计 实验 综合 报告