EDA设计报告数字秒表设计.docx

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

EDA设计报告数字秒表设计.docx

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

EDA设计报告数字秒表设计.docx

EDA设计报告数字秒表设计

数字秒表

1.设计任务与要求

1.1、设计出的是一个能够精确反映计时时间,且具有复位、计时、暂停功能的数字秒表,老师要求是计下的时间存储下来并能以后调出显示出来。

1.2、设计的秒表输入脉冲为3MHz,秒表的最大计时范围为1h,精确度为0.01s,其度量单位有0.1s、1s、1min等档位,并且各档位可实现进位。

2.方案设计及主要技术思路

2.1、方案一:

用LED灯来显示计数结果。

将系统分为四个模块,分别为:

顶层模块程序、3MHz--->100Hz分频模块、十进制计数器模块、六进制计数器模块。

顶层模块:

由于十进制计数模块和六进制计数模块会产生计数溢出信号,而这些溢出信号有可能作为下一计数模块的时钟输入脉冲,因此需要使用一个顶层模块将这些基本模块通过元件调用与映射的关系进行有机结合。

分频模块:

就是实现3MHz到100Hz的分频,实体定义3MHz时钟频率输入端和100Hz的时钟脉冲输出端。

十进制计数器模块:

用来实现0.01s、0.1s、1s和1min单位单元的计数。

六进制计数器模块:

用来实现10s、10min为单位单元的计数。

2.2、方案二:

用数码管来显示计数结果。

将系统分为六个模块,分别为:

3MHz->100Hz分频模块、48MHz->1KHz分频模块、十进制计数模块、六进制计数模块、锁存模块、数码管显示模块。

3MHz->100Hz分频模块:

由于系统的精度是0.01s,因此要设置周期为100Hz的时钟脉冲。

又因为数字秒表输入的脉冲为3MHz,所以外界每输入3000Hz的脉冲系统就输出一个频率,这时频率的时间周期刚好为0.01s,还有就是实现48MHz—>1KHz的功能给显示模块时钟信号的,而分频模块就是完成这样的功能。

48MHz—>1KHz分频模块:

用于数码管显示的分频,使计数显示更清晰、更准确。

十进制计数器模块:

用来实现0.01s、0.1s、1s和1min单位单元的计数。

六进制计数器模块:

用来实现10s、10min为单位单元的计数。

锁存模块:

用来实现计数的锁存,功能实现就是实现计数的暂停。

数码管显示模块:

用数码管来精确显示计数结果。

2.3、优劣分析及方案选定

LED灯显示是以二进制的形式显示出来的,而数码管则直接显示数字,所以数码管显示来的更直观,再一个方案一涉及到元件例化语句,各分模块要实现元件调用和映射。

由于本人对元件例化语句不熟,所以方案一不考虑。

所以我选用方案二来完成本设计。

2.4采用的硬件平台及主要技术

本设计采用的硬件平台是编程片上系统,简称SOPC。

主要技术有以处理器和实时多任务操作系统(RTOS)为中心的软件中心技术、以PCB和信号完整性分析为基础的高速电路设计技术。

3.模块设计过程

3.1、3MHz->100Hz分频模块的设计

实现3MHz—>100Hz的分频,模块图

程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityszmb3is

port(clk_3m:

instd_logic;

clk_100:

outstd_logic);--定义输入输出端口,输入为3MHz,输出为100Hz

endszmb3;

architectureoneofszmb3is

signalclk_100_r:

std_logic;

signalcount:

integerrange0to10#15000#;--用于计数

begin

process(clk_3m)

begin

ifclk_3m'eventandclk_3m='1'then--上升沿

ifcount=10#15000#thencount<=0;clk_100_r<=notclk_100_r;--当count=10#1500#时,本身取反,输出为零

elsecount<=count+1;--计数加一

endif;

endif;

endprocess;

clk_100<=clk_100_r;

endone;

3.2、48MHz—>1KHz分频模块的设计

实现48MHz—>1KHz的分频,模块图

程序代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entityfp1is

port(clk_48m:

instd_logic;

clk_1k:

outstd_logic

);----定义输入输出端口

endfp1;

architecturebehavoffp1is

signalclk_1k_r:

std_logic;

signalcount:

std_logic_vector(14downto0);--用于计数

begin

process(clk_48m)

begin

ifclk_48m'eventandclk_48m='1'then

ifcount="110000000000000"then

count<=(others=>'0');--当count="110000000000000"时取反

clk_1k_r<=notclk_1k_r;

elsecount<=count+1;--否则的话计数加一

endif;

endif;

endprocess;

clk_1k<=clk_1k_r;

endbehav;

3.3、十进制计数模块的设计

用来实现0.01s、0.1s、1s和1min单位单元的计数。

模块图

程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityszmb2is

port(clk,rst:

instd_logic;

cq:

outstd_logic_vector(3downto0);

cout:

outstd_logic);--定义输入输出端口

endszmb2;

architectureoneofszmb2is

signalcq1:

std_logic_vector(3downto0);

signalcout1:

std_logic;--定义计数

begin

process(clk,rst)

begin

ifrst='1'thencq1<="0000";cout1<='0';--复位清零

elsifclk'eventandclk='1'then

ifcq1<"1001"thencq1<=cq1+1;cout1<='0';--上升沿时,若cq1小于9的话,自身加一,不进位

elsecq1<="0000";cout1<='1';--否则的话,cq1为零,计数进位加一

endif;

endif;

endprocess;

cq<=cq1;

cout<=cout1;

endone;

3.4、六进制计数模块的设计

用来实现10s、10min为单位单元的计数。

模块图

程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityszmb1is

port(clk,rst:

instd_logic;

cq:

outstd_logic_vector(3downto0);

cout:

outstd_logic);--定义输入输出端口

endszmb1;

architectureoneofszmb1is

signalcq1:

std_logic_vector(3downto0);

signalcout1:

std_logic;--用于计数

begin

process(clk,rst)

begin

ifrst='1'thencq1<="0000";cout1<='0';--复位清零

elsifclk'eventandclk='1'then

ifcq1<"0101"thencq1<=cq1+1;cout1<='0';--若有上升沿,且cq1小于5的话,本身加一,计数为零

elsecq1<="0000";cout1<='1';--否则的话,cq1为零,计数进位加一

endif;

endif;

endprocess;

cq<=cq1;

cout<=cout1;

endone;

3.5、锁存模块的设计

用来实现计数的锁存,功能实现就是实现计数的暂停。

模块图

程序代码:

libraryieee;

useieee.std_logic_1164.all;

entityscqis

port(gate:

instd_logic;

d:

instd_logic_vector(23downto0);

data:

outstd_logic_vector(23downto0));--定义输入输出端口

end;

architecturetwoofscqis

signaldata1:

std_logic_vector(23downto0);

begin

process(gate,d)

begin

ifgate='1'then

data1<=d;--若门信号有脉冲,则门打开,d信号赋给data1

endif;

endprocess;

data<=data1;

endtwo;

3.6、数码管显示模块的设计

用数码管来精确显示计数结果。

模块图

程序代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_Arith.ALL;

USEIEEE.STD_LOGIC_Unsigned.ALL;

ENTITYszmb4IS

PORT(

clk_1:

INSTD_LOGIC;

data:

INSTD_LOGIC_VECTOR(23DOWNTO0);

dig:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

seg:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);--定义输入输出端口

ENDENTITY;

ARCHITECTUREoneOFszmb4IS

SIGNALseg_r:

STD_LOGIC_VECTOR(7DOWNTO0);--用于缓存对当前BCD码译码的结果

SIGNALdig_r:

STD_LOGIC_VECTOR(7DOWNTO0);--用于缓存位码信息

SIGNALdisp_dat:

STD_LOGIC_VECTOR(3DOWNTO0);--缓存待显示的BCD码

SIGNALcount:

STD_LOGIC_VECTOR(2DOWNTO0);--用于计数

BEGIN

dig<=dig_r;

seg<=seg_r;

PROCESS(clk_1)

BEGIN

IFRISING_EDGE(clk_1)THEN

count<=count+1;--上升沿来时,计数加一

ENDIF;

ENDPROCESS;

PROCESS

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

当前位置:首页 > 农林牧渔 > 农学

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

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