EDA数字秒表设计.docx
《EDA数字秒表设计.docx》由会员分享,可在线阅读,更多相关《EDA数字秒表设计.docx(16页珍藏版)》请在冰豆网上搜索。
![EDA数字秒表设计.docx](https://file1.bdocx.com/fileroot1/2022-10/13/35713adf-6889-4af5-b134-e9577a759e24/35713adf-6889-4af5-b134-e9577a759e241.gif)
EDA数字秒表设计
电子设计自动化大作业
题目数字秒表设计
学院控制科学与工程学院
班级自动化0803
姓名
学号
二OO一一年五月十二日
题目:
数字秒表的设计
一、设计要求:
(1)数字秒表的计时精度是10ms;
(2)复位开关可以在任何情况下使用,计时在计时过程中,只要按一下复位开关,计时器就清零,并做好下次计时的准备;
(3)具有启/停开关,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关则停止计时。
(4)数字秒表的计时范围是0秒~59分59.99秒,显示的最长时间为59分59秒
二、总体设计:
1、总体结构图
输入到CHOICE中
2、各模块功能
1)SEL模块:
将扫描信号输给选择(CHOICE)模块
2)选择模块:
按扫描信号的指定选择输出
3)3-8译码模块:
通过SEL给的信号来控制8位数码管位的亮灭
4)计时模块:
分别对毫秒,秒,分计时
5)显示模块:
通过CHOICE模块的输出信号来控制
三、单元模块设计
1、模块名:
sel模块设计
(1)模块功能:
CLK为扫描时钟脉冲,SELOUT端不停的发出扫描到的信号
(2)端口定义:
CLK为信号输入端
SELOUT[2..0]为选择到的信号输出
(3)VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityselis
port(clk:
instd_logic;
selout:
outstd_logic_vector(2downto0));
endsel;
architectureoneofselis
signalcount:
std_logic_vector(2downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
if(count="101")then
count<="000";
else
count<=count+1;
endif;
endif;
endprocess;
selout<=count;
endone;
(4)仿真结果
说明:
来一个上升沿,SELOUT的值增1,可以证明模块是正确的。
2、模块名:
选择模块设计
(1)模块功能:
按扫描信号的指定选择输出
(2)端口定义:
a,b,c为控制信号;
data1[3..0],data2[3..0],data3[3..0],data4[3..0],data5[3..0],data6[3..0]分别是毫秒的低位,毫秒的高位,秒的低位,秒的高位,分的低位,分的高位的数据值;
ch_out[3..0]为选择输出端。
(3)VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitychoiceis
port
(a,b,c:
instd_logic;
data1,data2,data3,data4,data5,data6:
instd_logic_vector(3downto0);
ch_out:
outstd_logic_vector(3downto0)
);
endchoice;
architecturebehaveofchoiceis
signalch:
std_logic_vector(2downto0);
begin
ch
(2)<=c;
ch
(1)<=b;
ch(0)<=a;
process(ch)
begin
casechis
when"000"=>ch_out<=data1;
when"001"=>ch_out<=data2;
when"010"=>ch_out<=data3;
when"011"=>ch_out<=data4;
when"100"=>ch_out<=data5;
when"101"=>ch_out<=data6;
whenothers=>null;
endcase;
endprocess;
endbehave;
(4)仿真结果
说明:
abc的值递增,ch_out选择输出data1,data2,data3,data4,data5,data6的值,证明模块是正确的
3、模块名:
3-8译码模块设计
(1)模块功能:
通过SEL给的信号来控制8位数码管位的亮灭。
(2)端口定义:
输入端SEL[2..0]值大小来选择输出Q的值
输出端Q[7..0]来控制灯哪位亮
(3)VHDL源程序
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYdecode3_8IS
PORT(SEL:
INstd_logic_vector(2downto0);
Q:
OUTstd_logic_vector(7downto0)
);
ENDdecode3_8;
ARCHITECTUREaOFdecode3_8IS
BEGIN
Q<="11111110"whensel=0else
"11111101"whensel=1else
"11111011"whensel=2else
"11110111"whensel=3else
"11101111"whensel=4else
"11011111"whensel=5else
"11111111";
ENDa;
(4)仿真结果
说明:
Sel的值递增,Q的相应位会亮,证明模块是正确的。
4.1模块名:
毫秒计时模块设计
(1)模块功能:
对毫秒位的计数
(2)端口定义:
clk为信号时钟输入端
reset为复位端
pause为暂停端
co为进位信号输出端
qh:
毫秒信号的高位输出端
ql:
毫秒信号的低位输出端
(3)VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitym100is
port
(clk:
instd_logic;
reset:
instd_logic;
pause:
instd_logic;
co:
outstd_logic;
qh:
bufferstd_logic_vector(3downto0);
ql:
bufferstd_logic_vector(3downto0)
);
endm100;
architecturebehaveofm100is
begin
co<='1'when(qh="1001"andql="1001")else'0';
process(clk,reset,pause)
begin
if(reset='0')then
qh<="0000";
ql<="0000";
elsif(pause='0')then
qh<=qh;
ql<=ql;
elsif(clk'eventandclk='1')then
if(ql="1001")then
ql<="0000";
if(qh="1001")then
qh<="0000";
elseqh<=qh+1;
endif;
elseql<=ql+1;
endif;
endif;
endprocess;
endbehave;
(4)仿真结果
说明:
毫秒为100进制,高位和地位都是10进制,高位到10会有进位,可以证明模块的正确性
4.2模块名:
秒计时模块设计
(1)模块功能:
对毫秒位的计数
(2)端口定义:
clk为信号时钟输入端
reset为复位端
pause为暂停端
co为进位信号输出端
qh:
毫秒信号的高位输出端
ql:
毫秒信号的低位输出端
(3)VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitym60_secis
port
(reset:
instd_logic;
pause:
instd_logic;
ci:
instd_logic;
co:
outstd_logic;
qh:
bufferstd_logic_vector(3downto0);
ql:
bufferstd_logic_vector(3downto0)
);
endm60_sec;
architecturebehaveofm60_secis
begin
co<='1'when(qh="0101"andql="1001"andci='1')else'0';
process(reset,pause,ci)
begin
if(reset='0')then
qh<="0000";
ql<="0000";
elsif(pause='0')then
qh<=qh;
ql<=ql;
elsif(ci'eventandci='1')then
if(ql="1001")then
ql<="0000";
if(qh="0101")then
qh<="0000";
elseqh<=qh+1;
endif;
elseql<=ql+1;
endif;
endif;
endprocess;
endbehave;
(4)仿真结果
说明:
秒进制为60进制,高位到6会有进位,低位为10进制,可以证明模块的正确性
4.3模块名:
分计时模块设计
(1)模块功能:
对毫秒位的计数
(2)端口定义:
clk为信号时钟输入端
reset为复位端
pause为暂停端
co为进位信号输出端
qh:
毫秒信号的高位输出端
ql:
毫秒信号的低位输出端
(3)VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
use