数字电路与逻辑设Word文档下载推荐.docx
- 文档编号:21326661
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:436.50KB
数字电路与逻辑设Word文档下载推荐.docx
《数字电路与逻辑设Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字电路与逻辑设Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
用VHDL设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
(2)分频器(第七章实验11
(1))
用VHDL设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。
要求在QuartusII平台上设计程序并仿真验证设计。
(3)将
(1)、
(2)和数码管译码器3个电路进行链接,并下载到实验板显示计数结果;
实验四:
数码管动态扫描控制器、点阵行扫描控制器(二选一);
(1)用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。
(2)用VHDL语言设计并实现六个数码管滚动显示电路。
循环滚动,始终点亮6个数码管,左出右进。
状态为:
012345-123450-234501-345012-450123-501234-012345
二、实验三(3)和实验四模块端口说明及连接图
实验三(3)
分频器与异步计数器共用reset复位键,clk为分频器时钟信号,分频器输出信号为计数器提供时钟信号,计数器的输出为数码管译码器输入信号。
实验四
(1)
clk为输入时钟,经过一个分频器,产生2kHz的扫描信号作为时钟,驱动计数器工作。
选用模值为6的计数器,通过一个3线至6线译码器,产生段码,依次控制6个LED的亮灭,使得某一时刻有且仅有一个LED点亮,同时产生对应的,将点亮的LED数码管赋值显示为相应的数码予以显示。
由于扫描频率较高,6位LED数码管序列将显示持续稳定的0至5的数码
实验四
(2)
为实现移位,在
(1)的基础上关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;
在下一个大的周期内,利用FLAG标志,并使用求余运算将显示位的数码移位。
三、实验一
(2)、实验三(3)和实验四的原理图或VHDL代码
1、实验一
(2)的原理图
2、实验三(3)VHDL代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfinalIS
PORT(clk,reset:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDfinal;
ARCHITECTUREaOFfinalIS
COMPONENTV8_2IS
PORT(clk,reset:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENTV8_2;
COMPONENTV11_1IS
PORT(clk,clear:
clk_out:
OUTSTD_LOGIC);
ENDCOMPONENTV11_1;
COMPONENTseg7_1IS
PORT(
a:
INSTD_LOGIC_VECTOR(3DOWNTO0);
b:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDCOMPONENTseg7_1;
SIGNALa:
STD_LOGIC;
SIGNALe:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
u1:
V8_2PORTMAP(clk=>
a,reset=>
reset,q=>
e);
u2:
V11_1PORTMAP(clk=>
clk,clear=>
reset,clk_out=>
a);
u3:
seg7_1PORTMAP(a=>
e,b=>
q,cat=>
cat);
ENDa;
3、实验四的VHDL代码
分频器:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysiis
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
end;
architectureaofsiis
signalcnt:
integerrange0to999;
signalclk_tmp:
std_logic;
begin
process(clk_in)
begin
if(clk_in'
eventandclk_in='
1'
)then
ifcnt=999then
cnt<
=0;
clk_tmp<
=notclk_tmp;
else
=cnt+1;
endif;
endif;
endprocess;
clk_out<
=clk_tmp;
六个数码管串行扫描电路
ENTITYSIIIS
PORT(CLK:
INSTD_LOGIC;
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
END;
ARCHITECTUREarcOFSIIIS
componentsi
port(clk_in:
clk_out:
endcomponent;
SIGNALCNT6:
INTEGERRANGE0TO6;
SIGNALA:
INTEGERRANGE0TO5;
SIGNALclk_tmp:
STD_LOGIC;
siportmap(clk_in=>
CLK,clk_out=>
clk_tmp);
P1:
process(CNT6)
BEGIN
CASECNT6IS--3线至6线译码器
WHEN0=>
BT<
="
011111"
;
A<
=0;
--A为位码
WHEN1=>
101111"
=1;
WHEN2=>
110111"
=2;
WHEN3=>
111011"
=3;
WHEN4=>
111101"
=4;
WHEN5=>
111110"
=5;
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESSP1;
P2:
process(clk_tmp)
IFclk_tmp'
EVENTANDclk_tmp='
THEN--实现模6计数器
CNT6<
=CNT6+1;
ifCNT6=5then
CNT6<
=0;
ENDIF;
ENDPROCESSP2;
P3:
process(A)
BEGIN
CASEAIS--实现数码管的显示功能
SG<
1111110"
;
0110000"
1101101"
1111001"
0110011"
1011011"
ENDPROCESSP3;
ENDarc;
循环滚动,始终点亮6个数码管,左出右进
ENTITYsiiiIS
SG:
BT:
ARCHITECTUREarcOFsiiiIS
SIGNALA:
SIGNALCOUNT:
INTEGERRANGE0TO5001:
SIGNAlFLAG:
INTEGERRANGE0TO7:
SIGNAlFLAG_A:
CASECNT6IS
WHEN0=>
BT<
--3线至6线译码器
ifCNT6=5then
CNT6<
endif;
IF(FLAG=6)THEN--设置标志
FLAG<
ENDIF;
IFCOUNT=5000THEN--相当于另一个时钟
COUNT<
--计数周期为5000
FLAG<
=FLAG+1;
--当记满5000时左移动一位
ELSE
=COUNT+1;
--不满5000继续计数
FLAG_A<
=((A+FLAG)mod6);
--使用求余运算实现移位
CASEFLAG_AIS--实现数码管的显示功能
endarc;
四、实验一
(2)、实验三(3)和实验四的仿真波形图
实验一
(2)全加器
五、仿真波形图分析
实验一的全加器:
其中ain为被加数,bin为加数,相邻低位来的进位数为cin,输出本位和为sum,向相邻高位进位数为cout。
实现二进制加法。
实现的函数关系为sum=ain⊕bin⊕cin
实验三(3):
即用先用分频器实现了对时钟信号的12分频,分频输出信号占空比为50%,分频器输出作为带异步复位的8421码十进制计数器的时钟信号,计数器的输出作为数码管的输入信号,控制数码管的显示。
实验四
(1):
通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数码显示信号使得数码管显示相应数码。
实现时通过连接引入分频信号,通过数据选择器选择数码管。
计数器信号触发数据选择器,赋值给位码触发数码管显示数码。
最终实现动态扫描显示数字序列。
实验四
(2)代码主体和实验任务1中一致,基本思想也一致。
为实现移位,关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;
在下一个大的周期内,利用FLAG标志,并使用求余运算将显示位的数码移位,比如,大的计数周期为0时,FLAG为0,显示“012345”六位数码,大的周期为1时,FALG为1,此时各位求余(即FLAG_A求余)对应的数码为123450,显示的数码也就为“123450”。
以此类推,实现循环移位。
六、故障及问题分析
上实验课之前,需要下载安装Quartus软件,由于版本的原因,尝试了好几次才安装并破解成功,其中有一个问题就是习惯性的安装在了中文目录下。
实验一半加器的步骤书上罗列的很详细,一步一步来几乎没有问题,而且上课老师又带领做了一下,就是到了全加器,由于保存的名称不符,导致浪费了很多时间。
实验二由于教材上有相关的例题,所以没有出现大的问题,基本都能自己解决。
实验三由于上课老师要求的与我自己预习时想的不一样,所以在代码的合并上出现一些问题。
最后是参考老师的PPT模板完成VHDL修改。
实验四的
(1)老师的PPT上基本就给出了雏形,只需稍加修改,用软件运行一下就好,
(2)则是参考了网上的资料,但是网上资料的计数模值有问题,需要修改一下。
七、总结和结论
总的来说这学期的数电实验次数虽然不多,但是确实能够学到一些东西。
感觉和前面电路实验很大的一点不同是:
数电实验不需要我们一步一步去搭实验电路,一切都在电路板上完成,相比较电路的结构,我们更需要了解电路的功能,尤其是电路在工作状态下的各项参数。
进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能用语言进行描述,进而用硬件实现。
这次实验让我对VHDL这样一门硬件描述语言有了更加深刻的认识。
语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。
应该着重优化逻辑思维,才能写出优秀的硬件代码。
虽然这学期的数电实验与理论课都结束了,但是我知道,数字电路与逻辑这门课将一直伴随着我们的学习、工作。
所以我打算在空余时间努力精习一下VHDL语言。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 逻辑