没有合适的资源?快使用搜索试试~ 我知道了~
vhdl编写的程序,初学EDA的使用
需积分: 0 0 下载量 118 浏览量
2011-05-30
23:08:32
上传
评论
收藏 137KB DOC 举报
温馨提示
试读
25页
vhdl编写的程序,对于初学EDA的有很大用处!
资源详情
资源评论
资源推荐
本章提要:本章介绍了数字系统设计中经常用到的计数器,分频器,选择器,译码器,编
码
器,寄存器,存储器,输入电路,显示电路等基本单元电路的 VHDL 程序设计。
学习要求:在教师讲授这些基本单元电路的设计思想的基础上,通过上机调试
熟练掌握这些基本单元电路的设计。
关键词:计数器(Counter),分频器( Divder),选择器( Multiplexer),译码器
(Decoder),编码器( Encoder),寄存器( Register),存储器( Memory),输入电
路(
Input Circuit),显示电路( Display Circuit)
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
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY BCD60COUNT IS
PORT(CLK,BCD1WR,BCD10WR,CIN:STD_LOGIC;
CO:OUT STD_LOGIC;
DATAIN:IN STD_LOGIC_VECTOR (3 DOWNTO 0);
BCD1:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
BCDI0:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));
END BCD60COUNT;
ARCHITECTURE RTL OF BCD60COUNT IS
SIGNAL BCD1N:STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL BCD10N:STD_LOGIC_VECTOR (2 DOWNTO 0);
BEGIN
BCD1<=BCD1N;
BCDI0<=BCD10N;
PROCESS (CLK,BCD1WR) –-个位数处理进程
BEGIN
IF (BCD1WR='1') THEN
BCD1N<=DATAIN;
ELSIF (CLK'EVENT AND CLK='1') THEN
IF (CIN='1') THEN
IF (BCD1N=9) THEN
BCD1N<="0000";
ELSE
BCD1N<=BCD1N+1;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS (CLK,BCD10WR) –-十位数处理进程
BEGIN
IF (BCD10WR='1') THEN
BCD10N<=DATAIN (2 DOWNTO 0);
ELSIF (CLK'EVENT AND CLK='1') THEN
IF (CIN='1' AND BCD1N=9) THEN
IF (BCD10N=5) THEN
BCD10N<="000";
ELSE
BCD10N<=BCD10N+1;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS (BCD10N,BCD1N,CIN) –-进位位处理进程
BEGIN
IF (CIN='1' AND BCD1N=9 AND BCD10N=5) THEN
CO<='1';
ELSE
CO<='0';
END IF;
END PROCESS;
END RTL;
【例 6.2】 用 VHDL 设计一个六十进制计数器(方法 2)。
--COUNTER60.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNTER60 IS
PORT(CP: IN STD_LOGIC; --时钟脉冲
BIN: OUT STD_LOGIC_VECTOR (5 DOWNTO 0); --二进制
S: IN STD_LOGIC; --输出启动信号
CLR: IN STD_LOGIC; --清除信号
EC: IN STD_LOGIC; --使能计数信号
CY60: OUT STD_LOGIC );--计数 60 进位信号
END COUNTER60;
ARCHITECTURE RTL OF COUNTER60 IS
SIGNAL Q : STD_LOGIC_VECTOR (5 DOWNTO 0) ;
SIGNAL RST, DLY : STD_LOGIC;
BEGIN
PROCESS (CP,RST) -- 计数 60
BEGIN
IF RST = '1' THEN
Q <= "000000"; -- 复位计数器
ELSIF CP'EVENT AND CP = '1' THEN
DLY <= Q(5);
IF EC = '1' THEN
Q <= Q+1; -- 计数值加 1
END IF;
END IF;
END PROCESS;
CY60 <= NOT Q(5) AND DLY; -- 进位信号微分
RST <= '1' WHEN Q=60 OR CLR='1' ELSE -- 复位信号设定
'0';
BIN <= Q WHEN S = '1' ELSE -- 计数输出
"000000";
END RTL ;
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
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT3 IS
PORT (CP,DIR:IN STD_LOGIC;
Q: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END;
ARCHITECTURE RTL OF COUNT3 IS
SIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(CP)
BEGIN
IF CP'EVENT AND CP='1' THEN
IF DIR='0' THEN
QN<=QN +1;
ELSE
QN<=QN-1;
END IF ;
END IF;
剩余24页未读,继续阅读
wxf_420
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0