基于FPGA的语音数字时钟系统Word格式文档下载.docx

上传人:b****6 文档编号:21169403 上传时间:2023-01-28 格式:DOCX 页数:17 大小:47.95KB
下载 相关 举报
基于FPGA的语音数字时钟系统Word格式文档下载.docx_第1页
第1页 / 共17页
基于FPGA的语音数字时钟系统Word格式文档下载.docx_第2页
第2页 / 共17页
基于FPGA的语音数字时钟系统Word格式文档下载.docx_第3页
第3页 / 共17页
基于FPGA的语音数字时钟系统Word格式文档下载.docx_第4页
第4页 / 共17页
基于FPGA的语音数字时钟系统Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于FPGA的语音数字时钟系统Word格式文档下载.docx

《基于FPGA的语音数字时钟系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的语音数字时钟系统Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

基于FPGA的语音数字时钟系统Word格式文档下载.docx

控制输入

下一状态

控制输出

S0

Key=’1’

S1

Show_new_time<

=’1’

Alarm_botton=’1’

S2

Show_a<

else

Null

Load_new_a<

Time_botton=’1’

S3

Load_new_c<

超时

S4

Show_a

Show_a并等待

程序:

程序包P_alarm封装定义

libraryIEEE;

useP_alarmis

subtypet_digitalisintegerrange0to7;

subtypet_shortisintegerrange0to65535;

typet_clock_timeisarray(3downto0)ofT_digital;

typet_displayisarray(3downto0)ofStd_logic_vector(6downto0);

typeseg7isarray(0to7)ofStd_logic_vector(6downto0);

constantSeven_seg:

seg7:

=("

0000000001"

--0

"

0000000010"

--1

0000000100"

--2

0000001000"

--3

0000010000"

--4

0000100000"

--5

0001000000"

--6

00"

--7

--8

--9);

endpackageP_alarm;

--程序包体封装结束

useAlarm_contorlleris

port(Key,Alarm_botton,Time_botton,clk,reset:

instd_logic;

Load_new_a,Load_new_c,Show_new_time,Show_a:

outstd_logic);

endAlarm_controller;

ARCHITECTUREartofAlarm_controlleris

typet_stateis(s0,s1,s2,s3,s4);

--5种工作状态

constantkey_timeout:

t_short:

=900;

--键盘延时时间

constantshow_alarm_timeout:

--alarmjianyanshi900ns

signalcurr_state:

t_state;

--zhuangtaijidangqianzhuangtaiwei

signalnext_state:

--zhuangtaijixiayigongzuowei

signalcounter_k:

--jianpan

signalenable_count_k:

std_logic;

--jianpanchaoshiyunxu

signalcount_k_end:

--jianpanchaoshi

signalcounter_a:

t_short;

--alarmjian

signalenable_count_a:

--alarmjianchaoshiyunxu

signalcount_a_end:

--alarmjianchaoshijieshu

begin

p0:

process(clk,reset)

ifreset='

1'

then

curr_state<

=s0;

elsifrising_edge(clk)then

=next_state;

endif;

endprocess;

p1:

process(Key,Alarm_botton,Time_botton,curr_state,count_a_end,count_k_end)

begin--geigegeshuchufuchushizhi

next_state<

=curr_state;

load_new_a<

='

0'

;

load_new_c<

show_a<

show_new_time<

enable_count_k<

enable_count_a<

casecurr_stateis

whens0=>

if(Key='

)then

=s1;

Show_new_time<

elsif(Alarm_botton<

=s2;

Show_a<

else

null;

whens1=>

if(key='

Load_new_a<

elsif(Time_botton<

=s3;

Load_new_c<

if(count_k_end='

whens2=>

if(Alarm_botton<

else

whens3=>

if(Time_botton<

whens4=>

=s4;

if(count_a_end='

whenothers=>

endcase;

Count_key:

process(Enable_count_k,clk)

if(Enable_count_k<

Counter_k<

count_k_end<

elsif(rising_edge(clk))then

if(counter_k>

=key_tinmeout)then

count_k_end='

counter_k<

=Counter_k+1;

endprocessCount_key;

Count_alarm:

process(Enable_count_a,clk)

if(enable_count_a<

counter_a<

count_a_end<

elsif(rising_edge(clk))then

if(counter_a>

=show_alarm_timeout)then

=counter_a+1;

endprocessCount_alarm;

endart;

二.闹钟系统译码器设计

1.设计思路:

每次按下闹钟系统的数字键盘后产生一个数字所对应的10位二进制数据信号转换为1位十进制整数信号,作为小时,分钟计数的4个数字之一。

结构图

Decoder

输入

0000000001

0000000010

0000000100

0000001000

0000010000

输出

1

2

3

4

0000100000

0001000000

00

5

6

7

8

9

usedecoderis

port(keypad:

instd_logic_vector(9downto0);

value:

outT_digital);

enddecoder;

ARCHITECTUREartofdecoderis

withkeypadselect

value<

=0when"

1when"

2when"

3when"

4when"

5when"

6when"

7when"

8when"

9when"

0whenothers;

endart;

三.闹钟系统的移位寄存器的设计

在clk的上升沿同步下,将key端口的输入信号移入new_time端口的输出端口最低位,原有信息一次向左移动,最高位舍去,reset对输出端口new_time异步清零。

电路原理图

usekey_bufferis

port(key:

int_digital;

clk,reset:

new_time:

outt_clock_time);

endkey_buffer;

ARCHITECTUREartofkey_bufferis

signaln_t:

t_clock_time;

process(clk,reset)

if(reset<

n_t<

=(0,0,0,0);

elsif(rising_edge(clk))then

foriin3downto1loop--zuohuanyi

n_t(i)<

=n_t(i-1);

endloop;

n_t(0)<

=key;

new_time<

=n_t;

四.闹钟寄存器的设计

闹钟寄存器在时钟上升沿同步下,根据Load_new_a端口的输入信号控制Alarm_time口的输出,当控制信号为高电平时,把New_alarm_time端口的赋给alarm_time然后输出,reset端口输入信号对alarm_time端口的输出进行异步清零复位。

电路原理图

useAlarm_regis

port(clk,reset:

new_alarm_time:

int_clock_time;

load_new_a:

alarm_time:

endAlarm_reg;

ARCHITECTUREartofAlarm_regis

if(reset='

alarm_clock<

ifrising_edge(clk)then

ifload_new_a='

then

alarm_time<

=new_alarm_time;

elsifload_new_a='

assertfalsereport"

uncertainload_new_alarmcontrol"

severitywarning

五.时间计数器的设计

时间计数器在时钟上升沿同步下,根据load_new_c端口的输入控制信号控制current_time口的输出,当控制信号为高电平时,把new_current_time端口的值赋给current_time进行输出。

当reset端口为高电平时,对current_time端口进行清零操作。

Reset的优先级高于load_new_c,且当reset,load_new_c同时为低电平时,在时钟上升沿处,对current_time端口输出信号进行累加一次加1,并根据小时,分钟的进位规律进位。

Alarm_counter

useAlarm_counteris

port(load_new_c:

new_current_time:

current_time:

endAlarm_counter;

ARCHITECTUREartofAlarm_counteris

signali_current_time:

variablec_t:

i_current_time<

elsifload_new_c<

=new_current_time;

ifc_t(0)<

=9then

c_t(0):

=c_t(0)+1;

=0;

ifc_t

(1)<

6then

c_t

(1):

=c_t

(1)+1;

ifc_t(3)<

2then

ifc_t

(2)<

c_t

(2):

=c_t

(2)+1;

c_t(3):

=c_t(3)+1;

elsec_t

(2)<

3then

=c_t;

current_time<

=i_current_time;

六.闹钟系统显示驱动器

1.设计思路:

当show_new_time输入为高电平时,根据new_time端口输入的时间数据,产生相应的4个七段数码显示器的驱动数据,并在display端口输出该信号;

当show_new_time为低电平时,判断show_a端口的输入电平,如果为高电平,则根据alarm_time端口输入的时间数据,产生相应的4个七段数码显示器的驱动数据,并也在display端口输出。

若show_a也为低电平,根据current_time端口的输入信号,对display端口驱动。

当alarm_time端口的输入信号值与current_time端口的输入信号值相同时,sound_alarm端口的输出信号有效。

反之无效

Display_driver

usedisplay_driveris

port(new_time:

show_new_time:

show_a:

display:

outt_display;

sound_alarm:

enddisplay_driver;

ARCHITECTUREartofdisplay_driveris

signaldisplay_time:

process(new_time,alarm_time,current_time,show_new_time,show_a)

sound_loop:

foriinalarm_time'

rangeloop

if(current_time(i)=alarm_time(i))then

sound_alarm<

endloopsound_loop;

ifshow_new_time<

display_time<

=new_time;

elsifshow_a<

=alarm_time;

=current_time;

assertfalsereport"

uncertaindisplay_drivercontrol!

"

severitywaring;

disp:

process(display_time)

foriindisplay_time'

display(i)<

=seven_seg(display_time(i))

七.闹钟分频器

分频器,将clk_in的输入信号经过分频后交与clk_out当reset端口为高电平时,clk_out输出清零。

Fq_divider

usefq_divideris

port(clk_in,reset:

clk_out:

endfq_divider;

ARCHITECTUREartoffq_divideris

constantdivide_period:

=6000;

process(clk_in,reset)

variablecnt:

cnt:

clk_out<

if(cnt<

(divide_period/2))then

=cnt+1;

elsif(cnt<

(divide_period-1))then

八.闹钟的整体组装

前面已经把闹钟的各个模块分别进行了编译封装,现在开始整体组装。

由于键盘解码和闹钟移位寄存器是一体的,且输出新的时间或者闹钟值,所以二者连为一体,再者,由于闹钟移位寄存器输出的新数据可能是时间值也可能是闹钟值,所以输出口一分为2,分别接入时间计数器,闹钟寄存器,又由于闹钟移位寄存器所输出的值要显示在led上,所

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

当前位置:首页 > 小学教育 > 英语

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

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