VHDL数字秒表.docx

上传人:b****2 文档编号:1606979 上传时间:2022-10-23 格式:DOCX 页数:8 大小:131.71KB
下载 相关 举报
VHDL数字秒表.docx_第1页
第1页 / 共8页
VHDL数字秒表.docx_第2页
第2页 / 共8页
VHDL数字秒表.docx_第3页
第3页 / 共8页
VHDL数字秒表.docx_第4页
第4页 / 共8页
VHDL数字秒表.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

VHDL数字秒表.docx

《VHDL数字秒表.docx》由会员分享,可在线阅读,更多相关《VHDL数字秒表.docx(8页珍藏版)》请在冰豆网上搜索。

VHDL数字秒表.docx

VHDL数字秒表

VHDL数字秒表

数字秒表

一设计任务

设计用于体育比赛的数字秒表,要求:

1.计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时器的时钟频率为10MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒。

2.设计复位和起/停开关。

(1)复位开关用来使计时器清零,并做好计时准备。

(2)起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关时终止。

(3)复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时器进程立即终止,并对计时器清零。

二方案选择与设计

方案选择

利用VHDL语言进行数字秒表设计有多种方法。

可以利用原件例化语句将各模块联系起来,也可以使用原理图的方法实现此功能,考虑到此次设计中端口众多,使用例化语句繁琐易错,因此采用了条理清晰的绘制原理图的方法生成顶层文件,实现数字秒表功能。

根据上述设计要求,可以预先设计若干个不同进制的计数器单元模块,然后将其进行例化组合来得到数字秒表系统。

要满足数字秒表的精度,首先要获得精确的计时基准信号,这里的系统精度要求为0.001秒,因此必须设置周期为0.001秒的时钟脉冲。

0.001秒、0.01秒、0.1秒、秒、分等计时单位之间的进位转换可以通过不同进制的计数器实现。

 设置十进制计数器和六进制计数器,每位计数器均能输出相应计时单位计数结果,其中,十进制计数器可以实现0.01秒、0.1秒、秒、分为单位的计数,六进制计数器可以实现以10秒、10分为单位的计数。

把各级计数器级联,即可同时显示0.001秒、0.01秒、0.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;

十进制计数控制模块仿真

十进制计数控制模块仿真结果

 

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

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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