现代数字系统设计 最后Word格式.docx
- 文档编号:16893466
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:26
- 大小:291.67KB
现代数字系统设计 最后Word格式.docx
《现代数字系统设计 最后Word格式.docx》由会员分享,可在线阅读,更多相关《现代数字系统设计 最后Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
clk_01:
OUTSTD_LOGIC);
ENDtimectr_clkdiv;
ARCHITECTURErtlOFtimectr_clkdivIS
SIGNALdiv1:
STD_LOGIC_VECTOR(3DOWNTO0):
="
0000"
;
--divideby10counter
SIGNALdiv2:
STD_LOGIC_VECTOR(7DOWNTO0):
00000000"
--divideby256counter
SIGNALdiv3:
STD_LOGIC_VECTOR(1DOWNTO0):
00"
--divideby3counter
SIGNALclk1,clk2:
STD_LOGIC;
BEGIN
div_10:
PROCESS(clk1)
IF(clk1'
EVENTANDclk1='
1'
)THEN
IF(div1="
1001"
)THENdiv1<
ELSEdiv1<
=div1+1;
ENDIF;
ENDIF;
ENDPROCESS;
clk2<
=div1(3);
div_256:
PROCESS(sysclk)
IF(sysclk'
EVENTANDsysclk='
)THEN
div2<
=div2+1;
clk1<
=div2(7);
--selectbaudrate
div_3:
PROCESS(clk2)
IF(clk2'
EVENTANDclk2='
IF(div3="
10"
)THENdiv3<
ELSEdiv3<
=div3+1;
clk_01<
=div3
(1);
ENDrtl;
在MAXPLUS软件中编译成功后生成的顶层文件TIMER_CLKDIV为:
单独对以上分频程序进行仿真,所的仿真结果如图3所示。
图3由程序timerctr_clkdiv仿真所得结果
由图得:
当设定输入sysclk的周期约为13.02us(频率为76800HZ)时,图形阴影部分的时间间隔为0.1s,即经分频后clk_01周期为0.1s故符合设计要求。
2主控制器程序设计及其仿真
(1)主控制器输入输出设计
主控制器的设计包括的输入信号和输出信号如图1所示,分别叙述如下。
(1)输入信号:
reset:
上电复位;
start_stop:
启/停按键输入;
modesel:
洗涤模式选择按键输入;
系统时钟输入(sysclk):
76800Hz主时钟;
timer_down:
定时到输入。
(2)输出信号:
start_out:
启/停控制
j_out:
强洗水流控制;
b_out:
标准水流控制;
z_out:
轻柔水流控制
(2)主控制器算法状态机图设计
主控制器的功能包括:
1、输出洗衣机启/停信号。
2、输出洗涤模式(强洗、标准、轻柔)的选择信号。
故对主控制器的算法状态机图设计,包括对启/停控制算法状态机图以及洗涤模式选择状态机图的设计,分别如图4、图5所示。
图4启/停控制算法状态机图
如图4所示的算法状态机图,图中只有2种状态:
停止状态和启动状态。
系统复位时进入停止状态s_stop,当start_stop按键按下时,则状态转移至启动状态s_start,并送出启动控制信号start(start='
)。
再按一下start_stop键,状态又能回停止状态,start控制信号置“0”,暂停洗涤工作。
再按一次start_stop按键,系统又回到启动状态。
这样,根据需要可人为地暂停或启动洗衣机工作。
图5主控制器的算法状态机图
如图5所示主控制器控制算法状态机图,复位后进入标准洗涤模式,并输出set_b标准模式状态信号。
接着判断定时结束timer_down是否有效。
如果有效,则表明洗涤结束,set_b置“0”回到标准模式状态;
如果无效,则判别模式选择按键是否按下。
如果未按下,则仍处于标准状态;
如果已按下,则进入轻柔状态。
通过类同的操作和判别,该状态机图可在标准、轻柔、强洗三种模式下循环选择和工作,并送出相应的状态信号。
(3)主控制器的VHDL程序、顶层文件及程序仿真
主控制器的VHDL程序为timer_ctr,如下所述:
USEIEEE.STD_LOGIC_ARITH.ALL;
--系统时钟sysclk:
76800Hz,timer_down:
计时时间到
ENTITYtimer_ctrIS
PORT(reset,sysclk,start_stop,mode_sel,timer_down:
start_out,b_out,j_out,z_out:
ENDtimer_ctr;
ARCHITECTURErtlOFtimer_ctrIS
TYPEstate1TYPEIS(s_b,s_z,s_j);
--洗涤模式选择,标准,轻柔,强
TYPEstate3TYPEIS(s_start,s_stop);
--启停模式
SIGNALstate1,nextstate1:
state1TYPE;
SIGNALstate3,nextstate3:
state3TYPE;
SIGNALstart_stop_rising,start_stop_dlayed,setstart,clrstart:
SIGNALmode_sel_dlayed,modesel_rising,timer_down_rising:
SIGNALstart,set_b,set_j,set_z,timer_down_dlayed:
modesel_rising<
=mode_selAND(NOTmode_sel_dlayed);
start_stop_rising<
=start_stopAND(NOTstart_stop_dlayed);
mode_ctr:
PROCESS(modesel_rising,state1,timer_down)
BEGIN
set_b<
='
0'
set_j<
set_z<
CASEstate1IS
WHENs_b=>
IF(timer_down='
)THENset_b<
nextstate1<
=s_b;
ELSIF(modesel_rising='
)THENnextstate1<
ELSE
=s_z;
WHENs_z=>
set_z<
)THENset_z<
=s_j;
WHENs_j=>
set_j<
)THENset_j<
ENDCASE;
timer_down_rising<
=timer_downAND(NOTtimer_down_dlayed);
start_ctr:
PROCESS(start_stop_rising,state3,timer_down)
setstart<
clrstart<
CASEstate3IS
WHENs_stop=>
IF(start_stop_rising='
)THENnextstate3<
=s_start;
setstart<
nextstate3<
=s_stop;
WHENs_start=>
IF(timer_down_rising='
)THENclrstart<
nextstate3<
ELSIF(start_stop_rising='
nextstate3<
ENDIF;
ENDPROCESS;
time_ctr_update:
PROCESS(reset,sysclk,timer_down_rising)
IF(reset='
state1<
state3<
start_stop_dlayed<
ELSIF(sysclk'
=nextstate1;
state3<
=nextstate3;
IF(set_b='
)THENb_out<
ELSEb_out<
ENDIF;
IF(set_z='
)THENz_out<
ELSEz_out<
IF(set_j='
)THENj_out<
ELSEj_out<
)THENstart_out<
ELSIF(clrstart='
ELSIF(setstart='
mode_sel_dlayed<
=mode_sel;
start_stop_dlayed<
=start_stop;
timer_down_dlayed<
=timer_down;
在MAXPLUS软件中编译成功后生成的顶层器件timer_ctr为:
对timer_ctr单独进行仿真,得到的仿真结果如图6所示为:
图6对程序timer_ctr仿真所得仿真结果
由图6所示的仿真图得出:
当start_stop为1,timer_down为0,mode_sel为0时,洗衣机定时器开始工作,洗涤模式为标准;
当按照标准模式运行过程中,遇mode_sel为1,洗涤模式改变为轻柔;
当按照轻柔模式工作时,遇mode_sel为1,则洗涤模式改变为强洗;
而当按照强洗模式工作时,遇mode_sel为1时,则洗涤模式改变为标准模式;
当洗衣机工作过程中遇timer_down为1时间段,则在此时间段,洗衣机不工作。
以上仿真结果符合设计要求。
3洗涤定时器程序设计及其仿真
(1)洗涤定时器输入输出设计
洗涤定时器的功能是根据主控制器送来的有关控制信号,实现15分钟的洗涤时间控制。
其输入和输出信号分别如下。
(1)输入信号:
reset
sysclk
start_in
timer_on_out:
定时有效;
timer_down_out:
定时到
(2)洗涤定时器算法状态机图设计
图7洗涤定时器算法状态机图
所设计的洗涤定时器的算法状态机图如图7所示。
定时器有3种状态:
停止状态(IDLE)、计时状态(INCCOUNT)和暂停状态(TMP_STOP)。
系统复位后就进入停止状态(IDLE)。
在停止状态下不断判别启动信号start是否为“1”。
如果为“1”,表明启动键已按下,定时器开始工作,timer_on标志置“1”,转移的下一个状态为计数状态;
否则仍留在停止状态。
在计时状态下(INCCOUNT),先要判别启动信号是否仍为“1”。
前面已经提到,启/停按键是一个乒乓按键,按一次启/停按键使start输出状态转换一次。
如果复位后按一下启/停按键,使start=“1”,则定时器开始进行定时计数。
如果再按一次启/停按键就会使start=“0”,定时器就处于暂时停止状态,定时计数值将被保留。
如再按一次启/停键,洗涤定时器继续启动,在原有计时值上进行计时。
如果在计时状态下发现start=“0”,定时器就进入暂停状态(temp_stop),同时timer_on置“0”,定时器停止计数。
在暂停状态下,继续判别start信号。
如果start=“0”,则仍留在暂停状态;
如果start=“1”表明定时器再启动,timer_on=“1”,状态将转移至计时状态。
在计时状态下,如果start=“1”,接着就判别分时钟上升沿是否到来s1min。
如果未到来,则仍停留在计时状态;
若分时钟的上升沿到来了,分计数器就进行加1操作。
接着判断是否到了指定的定时计时值(15分钟)。
如果未到计时值,仍停留在计时状态;
如果到了计时值,则停止计时,Timer_on=“0”,timer_down=“1”,count=“0000”,start=“0”,状态转移至停止状态
(3)洗涤定时器VHDL程序、顶层文件以及程序仿真
所设计的洗涤定时器的VHDL程序timer_count为:
ENTITYtimer_countIS
PORT(reset,sysclk,clk_01,start_in:
timer_down_out,timer_on_out:
ENDtimer_count;
ARCHITECTURErtlOFtimer_countIS
COMPONENTcnt10
PORT(reset,clk:
div10:
ENDCOMPONENT;
COMPONENTcnt60
div60:
TYPEstateTYPEIS(IDLE,INCOUNT,TMP_STOP);
SIGNALstate,nextstate:
stateTYPE;
SIGNALset_timer_on,set_timer_down,ca10,s1min,s1min_dlayed,s1min_rising,count_inc,count_clr:
SIGNALsetdown,clrdown,seton,clron,timer_on,timer_down,timer_down_dlayed,timer_down_rising,reset1,clk_01_s:
SIGNALcount,count_u:
STD_LOGIC_VECTOR(3DOWNTO0);
s1min_rising<
=s1minAND(NOTs1min_dlayed);
timer_down_rising<
count_ctr:
PROCESS(s1min_rising,state,start_in,count)
BEGIN
setdown<
clrdown<
seton<
clron<
count_inc<
count_clr<
CASEstateIS
WHENIDLE=>
IF(start_in='
ANDtimer_down='
seton<
nextstate<
=INCOUNT;
clron<
=IDLE;
WHENINCOUNT=>
IF(start_in='
=TMP_STOP;
IF(s1min_rising='
IF(count/=count_u)THEN
count_inc<
ELSE
clron<
setdown<
count_clr<
nextstate<
WHENTMP_STOP=>
)THENnextstate<
ELSEnextstate<
update:
PROCESS(reset,sysclk)
AND(NOTtimer_down)='
state<
s1min_dlayed<
count<
state<
=nextstate;
IF(seton='
)THENtimer_on<
ELSIF(clron='
ENDIF;
IF(clrdown='
)THENtimer_down<
ELSIF(setdown='
timer_down<
IF(count_inc='
count<
=count+1;
ELSIF(count_clr='
)THENcount<
s1min_dlayed<
=s1min;
timer_down_out<
=timer_down;
timer_on_out<
=timer_on;
INIT:
PROCESS(reset,timer_down_rising)
ortimer_down_rising='
count_u<
1110"
clk_01_s<
=clk_01ANDstart_in;
reset1<
=resetAND(NOTtimer_down);
u0:
cnt10PORTMAP(reset1,clk_01_s,ca10);
--10分频,1Hz
u1:
cnt60PORTMAP(reset1,ca10,s1min);
--60分频,周期1min
程序中的十进制和六十进制计数器的程序分别为cnt10和程序cnt60:
cnt10如下所示:
ENTITYcnt10IS
div10:
ENDENTITYcnt10;
ARCHITECTURErtlOFcnt10IS
SIGNALdiv_2:
PROCESS(clk,reset)
IF(reset='
div_2<
ELSIF(clk'
EVENTANDclk='
IF(div_2="
ELSEdiv_2<
=div_2+1;
div10<
=div_2(3);
ENDARCHITECTURErtl;
cnt60如下所示:
LIBRA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代数字系统设计 最后 现代 数字 系统 设计