基本单元电路的VHDL设计.docx

上传人:b****3 文档编号:2019490 上传时间:2022-10-26 格式:DOCX 页数:39 大小:68.28KB
下载 相关 举报
基本单元电路的VHDL设计.docx_第1页
第1页 / 共39页
基本单元电路的VHDL设计.docx_第2页
第2页 / 共39页
基本单元电路的VHDL设计.docx_第3页
第3页 / 共39页
基本单元电路的VHDL设计.docx_第4页
第4页 / 共39页
基本单元电路的VHDL设计.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

基本单元电路的VHDL设计.docx

《基本单元电路的VHDL设计.docx》由会员分享,可在线阅读,更多相关《基本单元电路的VHDL设计.docx(39页珍藏版)》请在冰豆网上搜索。

基本单元电路的VHDL设计.docx

基本单元电路的VHDL设计

第6章基本单元电路的VHDL设计

本章提要:

本章介绍了数字系统设计中经常用到的计数器,分频器,选择器,译码器,编码器,寄存器,存储器,输入电路,显示电路等基本单元电路的VHDL程序设计。

学习要求:

在教师讲授这些基本单元电路的设计思想的基础上,通过上机调试熟练掌握这些基本单元电路的设计。

关键词:

计数器(Counter),分频器(Divder),选择器(Multiplexer),译码器(Decoder),编码器(Encoder),寄存器(Register),存储器(Memory),输入电路(InputCircuit),显示电路(DisplayCircuit)

6.1计数器的设计

6.1.1同步计数器的设计

6.1.2异步计数器的设计

6.2分频器的设计

6.3选择器的设计

6.4译码器的设计

6.5编码器的设计

6.5.1一般编码器的设计

6.5.2优先级编码器的设计

6.6寄存器的设计

6.6.1数码寄存器的设计

6.6.2移位寄存器的设计

6.6.3并行加载移位寄存器的设计

6.7存储器的设计

6.7.1只读存储器ROM的设计

6.7.2读写存储器SRAM的设计

6.8输入电路的设计

6.8.1键盘扫描电路的设计

6.8.2键盘接口电路的设计

6.9显示电路的设计

6.9.1数码管静态显示电路的设计

6.9.2数码管动态显示电路的设计

6.9.2液晶显示控制电路的设计

6.1计数器的设计

计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲和脉冲序列以及进行数字运算等。

计数器是一个典型的时序电路,分析计数器就能更好地了解时序电路的特性。

计数器分同步计数器和异步计数器两种。

6.1.1同步计数器的设计

所谓同步计数器,就是在时钟脉冲(计数脉冲)的控制下,构成计数器的各触发器状态同时发生变化的那一类计数器。

1)六十进制计数器

众所周知,用一个4位二进制计数器可构成1位十进制计数器,而2位十进制计数器连接起来可以构成一个六十进制的计数器。

六十进制计数器常用于时钟计数。

一个六十进制计数器的外部端口示意图如图6.1所示。

在该六十进制计数器的电路中,BCDLWR和BCD10WR与DATAIN配合,以实现对六十进制计数器的个位和十位值的预置操作。

应注意,在对个位和十位进行预置操作时,DATAIN输入端是公用的,因而个位和十位的预置操作必定要串行进行。

利用VHDL语言描述六十进制计数器的程序如例6.1所示。

图6.1六十进制计数器外部端口示意图

【例6.1】用VHDL设计一个六十进制计数器(方法1)。

--BCD60COUNT.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYBCD60COUNTIS

PORT(CLK,BCD1WR,BCD10WR,CIN:

STD_LOGIC;

CO:

OUTSTD_LOGIC;

DATAIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

BCD1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

BCDI0:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDBCD60COUNT;

ARCHITECTURERTLOFBCD60COUNTIS

SIGNALBCD1N:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALBCD10N:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

BCD1<=BCD1N;

BCDI0<=BCD10N;

PROCESS(CLK,BCD1WR)–-个位数处理进程

BEGIN

IF(BCD1WR='1')THEN

BCD1N<=DATAIN;

ELSIF(CLK'EVENTANDCLK='1')THEN

IF(CIN='1')THEN

IF(BCD1N=9)THEN

BCD1N<="0000";

ELSE

BCD1N<=BCD1N+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK,BCD10WR)–-十位数处理进程

BEGIN

IF(BCD10WR='1')THEN

BCD10N<=DATAIN(2DOWNTO0);

ELSIF(CLK'EVENTANDCLK='1')THEN

IF(CIN='1'ANDBCD1N=9)THEN

IF(BCD10N=5)THEN

BCD10N<="000";

ELSE

BCD10N<=BCD10N+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(BCD10N,BCD1N,CIN)–-进位位处理进程

BEGIN

IF(CIN='1'ANDBCD1N=9ANDBCD10N=5)THEN

CO<='1';

ELSE

CO<='0';

ENDIF;

ENDPROCESS;

ENDRTL;

【例6.2】用VHDL设计一个六十进制计数器(方法2)。

--COUNTER60.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNTER60IS

PORT(CP:

INSTD_LOGIC;--时钟脉冲

BIN:

OUTSTD_LOGIC_VECTOR(5DOWNTO0);--二进制

S:

INSTD_LOGIC;--输出启动信号

CLR:

INSTD_LOGIC;--清除信号

EC:

INSTD_LOGIC;--使能计数信号

CY60:

OUTSTD_LOGIC);--计数60进位信号

ENDCOUNTER60;

ARCHITECTURERTLOFCOUNTER60IS

SIGNALQ:

STD_LOGIC_VECTOR(5DOWNTO0);

SIGNALRST,DLY:

STD_LOGIC;

BEGIN

PROCESS(CP,RST)--计数60

BEGIN

IFRST='1'THEN

Q<="000000";--复位计数器

ELSIFCP'EVENTANDCP='1'THEN

DLY<=Q(5);

IFEC='1'THEN

Q<=Q+1;--计数值加1

ENDIF;

ENDIF;

ENDPROCESS;

CY60<=NOTQ(5)ANDDLY;--进位信号微分

RST<='1'WHENQ=60ORCLR='1'ELSE--复位信号设定

'0';

BIN<=QWHENS='1'ELSE--计数输出

"000000";

ENDRTL;

2)可逆计数器

在时序应用电路中,计数器的应用十分普遍,如加法计数器,减法计数器,可逆计数器等。

所谓可逆计数器,就是根据计数控制信号的不同,在时钟脉冲作用下,计数器可以进行加1或者减1操作的一种计数器。

可逆计数器有一个特殊的控制端,这就是UPDN端。

当UPDN=‘1’时,计数器进行加1操作,当UPDN=‘0’时,计数器就进行减1操作。

表6.1是一个3位可逆计数器的真值表,它的VHDL语言描述如例6.3所示。

表6.1可逆计数器真值表

输入端

输出端

DIR

CP

Q2

Q1

Q0

X

X

0

0

0

1

计数器加1操作

0

计数器减1操作

【例6.3】用VHDL设计一个3位二进制的可逆计数器。

--COUNT3.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNT3IS

PORT(CP,DIR:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

END;

ARCHITECTURERTLOFCOUNT3IS

SIGNALQN:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

PROCESS(CP)

BEGIN

IFCP'EVENTANDCP='1'THEN

IFDIR='0'THEN

QN<=QN+1;

ELSE

QN<=QN-1;

ENDIF;

ENDIF;

ENDPROCESS;

Q<=QN;

ENDRTL;

编写可逆计数器VHDL程序时,在语法上,就是把加法和减法计数器合并,使用一个控制信号决定计数器作加法或减法的动作。

在本例中,利用“控制信号DIR”可以让计数器的计数动作加1或减1。

6.1.2异步计数器的设计

异步计数器又称行波计数器,它将低/高位计数器的输出做为高/低位计数器的时钟信号,这一级一级串行连接起来就构成了一个异步计数器。

异步计数器与同步计数器不同之处就在于时钟脉冲的提供方式,但是,由于异步计数器采用行波计数,从而使计数延迟增加,在要求延迟小的领域受到了很大限制。

尽管如此,由于它的电路简单,仍有广泛的应用。

图6.2是用VHDL语言描述的一个由8个触发器构成的异步计数器.它的程序如例6.4所示,采用元件例化方式生成。

与上述同步计数器不同之处主要表现在对各级时钟脉冲的描述上,这一点请读者在阅读程序时多加注意。

图6.28位异步计数器原理图

【例6.4】用VHDL设计一个由8个触发器构成的8位二进制异步计数器。

--RPLCONT.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDFFRIS

PORT(CLK,CLR,D:

INSTD_LOGIC;

Q,QB:

OUTSTD_LOGIC);

ENDENTITYDFFR;

ARCHITECTUREART1OFDFFRIS

SIGNALQ_IN:

STD_LOGIC;

BEGIN

QB<=NOTQ_IN;

Q<=Q_IN;

PROCESS(CLK,CLR)IS

BEGIN

IF(CLR='1')THEN

Q_IN<='0';

ELSIF(CLK'EVENTANDCLK='1')THEN

Q_IN<=D;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART1;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYRPLCONTIS

PORT(CLK,CLR:

INSTD_LOGIC;

COUNT:

OUTSTD_LOGIC_VECTOR(7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1