COTK^Cj
a-viiipi-耳二口
a^ai^ny=j;
ajfsigpiZ^C;
eiAuidiile
rCNTlO
L
i
i
CLK
COUT
i
7
j
1
RST
DOU7I7..0)
L
j
E'N
X
i
i
i
1
LOAD
Y
—
CATAl?
.0]
z
F
\llUt
2)时钟分频模块的设计
由于使用的FPGA的输入时钟是20Mhz,定时模块的自加频率是1hz,因此需要进行分频得到1hz的时钟频率输入给定时模块。
Smodulefrediv(elk,clkout);//^j'A20KHz,纟盯二廿玉U王UlHz
inputcllr;
outputclkout;
regclkout;
reg[23:
O)counter;//中闫变呈ccmrrtE工走乂为吞存器空parameterN=20_000_000;
Salways®(pasedgeelk}beginif(counter=N/2-1)
Sbegin
cllcout<=^clkout;counrer<=O;
end
else
caunjter<=counter+l*101;
end
endmed^le
3)定时器设定
定时器设定和自减模块可以设定定时器的工作时间,通过输入的1hz的信号
使定时器的值每分自减1,直至为0.
moduleCOUNTER(CLK,RST,EN,LOAD,COUT,DOUT,DATA,K};
inputCLKfENfRSTfLOAD,K;input[3:
0]DATA;
output[3:
0:
DOUT;
outp-j匸COUT;
reg(3:
0]QI;xe?
COUT;
assignDOUT=Q1;
always§(posedgeCLKctnegedgeRST)fceqin
if(!
RST)
Ql<=0Oil;
elseif((EN==14K—1}|(EN-=14K-==-l))begin
if(Ql>04K==L|
Ql<^Ql-lTbl;
else
Ql<-^'toon;end
end
always电(QI)
if(Ql==4rh0)COUT=l*bl;
else
COUT=l'tO;
endiEQdule
4)直流电机模块
lodulfcountstout,resec,die};
cm匸put;[r:
0]out;inputreset‘elk;reg[7:
□]口口匸;always3(posedgeelk}Hbegin
if(reset)
elseout<=cut+l・bl;
end
endrEodule
moduleccunt4(out,reset,clJc};
output[3:
0]out;
j.np口匸reset,elk;
reg(3:
0]
always@(posedgeelk}
3begin
if(reset)
else
□Ut<=QUt+l1bl;
end
endmcdule
5)数码管显示译码模块的设计
数码管显示译码模块主要功能是把定时器送来的值译码并通过数码管显示出来。
fpga的VerilogHDL硬件语言是并行的这有别于软件的描述语言扫描方式
iDduleDECL8S{A,LED8S);
input[3:
0]A;outp-Jt[10]LEDSS;
reg[7:
0:
LEDS5;
always0(A)
endmodule
IU
L
1
3
A[3.0]
LEDSSF.0)
f]
「
四、电路调试
1.引脚分配图
1•定时器自减值与洗衣机控制器的正转、反转,停机,报警在RTL仿真的时候
是同步的,但是下载到硬件上运行的时候出错,不能同步。
解决方法:
反复的研究VerilogHDL程序后发现,开始是使用分频器输出的1hz
的时钟输入给时序中心控制器模块,而定时器模块的时钟是20Mhz的,两个模
块的时钟不能同步,因此就存在一定的延时不同步导致错误。
然后我把时序中心控制模块的时钟也改为20Mhz,让两个模块的时钟同步,定时器自减输出的值输入到时序中心控制模块作为时序控制的信号,问题顺利解决。
2•程序在运行的时有时候数码管会显示定时器的起始值,洗衣机控制器又重新
从头开始运行。
解决方法:
研究硬件电路的设计发现,启动工作控制开关,默认设置为了低电平是不启动的,高电平启动并保持才能使洗衣机控制器正常工作,而在启动后工作中,电平出现不稳的状态,电平并不能很好的起到拉高的作用,因此怀疑是上拉能力不足和电源纹波的干扰,导致电平的不稳定性使洗衣机控制器有时复位。
随后我便在电源的输出端并接一个220uf的电解电容和一个O.luf的瓷片电容,再用示波器测试发现纹波减少很多;同时为了防止上拉能力不足导致错误,我便把启动控制开关默认设置为高电平,低电平为启动和保持。
然后再测试,问题解决。
3•使用按键修改定时器模块的设定值时,按一下按键,数据变化好几次,不是
每按一次改变一个值。
解决方法:
根据以往的经验可以知道是因为按键没有消抖所致,在设计电路的时
候忘记了使用按键消抖模块,随后编写了按键消抖模块,再接入控制系统测试,数据正确,问题解决。
五、结束语和心得体会
在经过了几天的学习设计仿真,我学到了很多东西,主要是对数字电路的基础理论知识的复习巩固和对FPGA方面知识的掌握,更加清楚了解到了VerilogHDL语言的魅力,对以前学的理论知识通过实践来检验,更深入的理解了理论联系实际的重要性。
通过这次的FPGA设计,我可以说是受益良多。
看到洗衣机控制器的题目,
我首先想到的是状态机的设计,因为课本上说状态机其实就是控制器,后来经过看书觉得应该是摩尔型状态机,可是分析后发现设计题目比较复杂,如果用状态机的思路来设计,比较困难。
结合以前做课程设计的经验,如果用模块化层次化的设计思路更清晰,设计起来也更容易,特别是更符合FPGA设计的的流程,故
自己开始设计各功能模块。
洗衣机控制器主要实几种状态的循环改变,还有计时和数码显示的功能,所以我觉得电路主要有五大部分组成,包括:
按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示译码模块。
在设计的过程中,我也遇到了不少困难,在经过耐心的调试后还是顺利解决了所有问题。
通过这次设计,让我更深入的掌握了VerilogHDL的设计方法与一
些技巧,让我对FPGA勺编程、定时器和计数器的设计更加熟悉,让我更加明白时序组合门电路设计思路和方法。
在设计中学到不少课本上没有的东西,并且充
分认识到家电控制电路设计在一片FPGA芯片内,具有体积小、可靠性高、降低
成本、设计周期短,功能灵活的特点,本人受益匪浅。
我相信通过此次课程设计,一定会对以后的设计工作提供很大帮助。
六、参考文献
1、黑金开发板配套教程VerilogHDL
2、康华光主编电子技术基础数字部分(第五版)
3、陈明义主编、电子技术课程设计实用教程[S]2002年05月第1版
4、EDA先锋工作室设计与验证VerilogHDL
5、马建国孟宪元编著FPGA现代数字系统设计