EDA设计报告数字秒表设计.docx
- 文档编号:2077214
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:13
- 大小:102.51KB
EDA设计报告数字秒表设计.docx
《EDA设计报告数字秒表设计.docx》由会员分享,可在线阅读,更多相关《EDA设计报告数字秒表设计.docx(13页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 设计 报告 数字 秒表