VHDL数字秒表.docx
《VHDL数字秒表.docx》由会员分享,可在线阅读,更多相关《VHDL数字秒表.docx(8页珍藏版)》请在冰豆网上搜索。
VHDL数字秒表
VHDL数字秒表
数字秒表
一设计任务
设计用于体育比赛的数字秒表,要求:
1.计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时器的时钟频率为10MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒。
2.设计复位和起/停开关。
(1)复位开关用来使计时器清零,并做好计时准备。
(2)起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关时终止。
(3)复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时器进程立即终止,并对计时器清零。
二方案选择与设计
方案选择
利用VHDL语言进行数字秒表设计有多种方法。
可以利用原件例化语句将各模块联系起
状态信号(计数的使能信号EN),两片的CLK端同时接计数输入信号。
具体思路:
通过分频器将10M晶振所提供的信号进行10000分频,生成脉冲作为计时信号,经计数器累加计数实现数字秒表计数的功能。
设计采用七位LED数码管显示分、秒,需要5个10计数器和2个6计数器。
使用按键开关可实现开始/结束计时操作以及复位清零操作。
设计
整个系统设计是采用自顶向下分析,自底向上设计。
将数字秒表系统的整体分解为各个模块电路。
1.顶层电路设计
在顶层设计中,要对内部分各功能块的连接关系和对外的接口关系进行描述,而功能块实际的逻辑功能和具体的实现形式则由下一层模块来描述。
数字秒表原理图
顶层电路图
根据数字秒表的原理图来进行顶层文件的设计。
此次设计中使用了总线,从而简化了顶层电路图的绘制。
2时钟分频电路模块
在基于EDA技术的数字电路系统设计中,分频电路应用十分广泛。
常常用分频电路来得到数字系统中各种不同频率的控制信号。
所谓分频电路,就是将一个给定的频率较高的数字输入信号经过适当处理后,产生一个或数个频率较低的数字输出信号。
本设计需要一个计时范围为0.001s-59分59.999秒的秒表,首先输入一个频率为10MHZ时钟信号源,由CLK输入,经其进行10000分频后获得一个比较精确的1000Hz计时脉冲,即周期为1/1000秒的计时脉冲,由CLR_CNT输出。
分频器符号
3十进制计数控制模块
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。
此次设计中为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通十进制计数器程序中,将两者综合生成十进制计数控制模块。
十进制计数控制模块符号
CLK为时钟信号输入端、RST为复位信号输入端、EN为使能控制信号输入端、DOUT[3..0]为十进制计数数据输出端、COUT为进位信号输出端。
4六进制计数控制模块
六进制计数器与十进制计数器类似,同样此处为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通六进制计数器程序中,将两者综合生成六进制计数控制模块。
六进制计数控制模块符号
CLK为时钟信号输入端、RST为复位信号输入端、EN为使能控制信号输入端、DOUT[3..0]为六进制计数数据输出端、COUT为进位信号输出端。
三软件设计与仿真
3.1时钟分频电路模块
程序
libraryieee;
useieee.std_logic_1164.all;
entityCLKGENis
port(clki:
instd_logic;
clko:
outstd_logic);
endCLKGEN;
architecturebehavofCLKGENis
signalq:
integerrange0to9999;
begin
process(clki,q)
begin
ifclki'eventandclki='1'then
q<=q+1;
endif;
ifq=1then
clko<='0';
else
clko<='1';
endif;
endprocess;
endbehav;
时钟分频电路模块仿真
时钟分频电路模块仿真结果
3.2六进制计数控制模块
程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT6IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT6;
ARCHITECTUREbehavOFCNT6IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLEQ:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENQ:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFQ<5THEN
Q:
=Q+1;
ELSE
Q:
=(OTHERS=>'0');
ENDIF;
ELSE
Q:
=Q;
ENDIF;
ENDIF;
IFQ="0101"THENCOUT<='0';
ELSECOUT<='1';
ENDIF;
DOUT<=Q;
ENDPROCESS;
ENDbehav;
六进制计数控制模块仿真
六进制计数控制模块仿真结果
3.3十进制计数控制模块
程序
ENTITYCNT10IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLEQ:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENQ:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFQ<9THEN
Q:
=Q+1;
ELSE
Q:
=(OTHERS=>'0');
ENDIF;
ELSE
Q:
=Q;
ENDIF;
ENDIF;
IFQ="1001"THENCOUT<='0';
ELSECOUT<='1';
ENDIF;
DOUT<=Q;
ENDPROCESS;
ENDbehav;
十进制计数控制模块仿真
十进制计数控制模块仿真结果