verilog微波炉定时器设计.docx
- 文档编号:7663311
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:12
- 大小:224.08KB
verilog微波炉定时器设计.docx
《verilog微波炉定时器设计.docx》由会员分享,可在线阅读,更多相关《verilog微波炉定时器设计.docx(12页珍藏版)》请在冰豆网上搜索。
verilog微波炉定时器设计
集成电路课程
设计报告
课题名称:
微波炉定时器设计
姓名:
XXXXXX
学号:
*********
班级:
电子科学与技术班
第一节引言......................................................2
1.1概述...................................................2
1.2本设计的任务和主要功能..................................2
第二节系统功能绍................................................2
2.1系统总述...............................................2
2.2控制模块...............................................3
2.3数据装入模块............................................3
2.4计时器模块..............................................4
2.4.1六进制计数块..........................................5
2.4.2十进制计数块..........................................5
2.5各模块top连接..........................................5
第三节modelsim仿真测试...........................................6
3.1测试基准................................................6
3.2仿真结果................................................6
第四节课程设计总结................................................7
附录................................................................8
微波炉定时器设计
引言
1.1概述
近年来微波炉由于烹饪的时间很短,能很好地保持食物中的维生素和天然风味。
随着科技的发展,其已经带给了千家万户以便捷、美味,成为现代家庭必备产品。
时至今日,微波炉已有50多年的发展历史,尽管它已经实现了高度工业化的生产,但是主要生产国还是在日本、韩国及欧洲的一些发达国家。
就国内而言,中国老百姓已经开始认识和接受微波炉,可预见,中国也开始成为一个巨大的微波炉市场。
尽管微波炉发展已经趋于成熟,但是其技术方面还有很多需要创新、改进。
微波炉的电磁外溢就是一个例子,他给人的伤害是不能复原的。
只有不断改善技术缺陷,才能赢取更大的市场,才能够抵御未知的挑战和风险。
基于这些,我们设计了自己的微波炉定时器。
本微波炉定时器的核心系统可由下面3个模块构成:
控制器:
控制微波炉的工作过程中的状态转换及相应的控制序列;数据装入器:
根据控制信号选择定时时间、测试数据或完成信息的装入;定时器部分:
负责完成烹调过程中的定时等。
通过3大模块最终实现微波炉的复位、开始、测试、定时、结束等功能。
1.2本设计的任务和主要功能
该微波炉定时器具有复位开关,并且通电处于复位状态,只要复位开关按下,定时器执行复位操作。
具有启动和结束开关,控制微波炉开始烹调和结束。
微波炉的烹调时间可以由用户自由设定,烹调时间应该能够显示到秒。
最终结果能使用ModelSim对设计的程序进行仿真验证。
系统功能介绍
2.1系统总述
微波炉定时器主要由控制块状态机(MICRO_WARE)控制系统的功能状态运行,由装入模块(LOADER)实现人为设定时间的输入,并且由减一计时模块(TIMER)实现最终的减一定时。
通电处于复位状态,当按下测试按钮时测试数码管是否损坏,如果数码管显示8888则完好无损,否者不能正常显示。
当SET有效时输入需要设定的时间,并显示到数码管上,在需要人为设定时间时即可按下SET输入时间。
当按下START按钮者开始计时并cook,计时到0则结束cook。
RESET为复位按钮,复位状态电路输出为0。
具体系统结构如下:
图1微波炉控制系统原理图
2.2控制模块(如图1KZQ)
主要完成对整个芯片工作的控制。
当L_done有效时,输出烹调结束数据。
当L_clk有效时,输出烹调的设置时间数据。
当L_8888有效时,输出数码管测试数据--包括6个输入信号和4个输出信号。
定义以下5个状态:
parameterIDLE=3'b000,//复位状态输出L_8888、L_clk、L_done全为0
LAMP_TEST=3’b001,//TEST有效L_8888=1,L_clk、L_done为0
SET_CLOCK=3’b010,//SET有效L_8888、L_done为0,L_clk=1
TIMER=3'b011,//START有效L_8888为0,L_clk、L_done为1并开始COOK
DONE_MSG=3'b100;//done有效L_8888、L_clk为0,L_done=1,COOK结束
具体程序见附录
2.3数据装入模块(如图1ZZQ)
当L_done有效时,输出烹调结束数据。
当L_clk有效时,输出烹调的设置时间数据。
当L_8888有效时,输出数码管测试数据。
load信号为data_val输出有效指示,DATA为人为输入的时间数据输入口。
parameterALLS=16'b1000100010001000,//测试数据8888,数码管LED全亮则测试成功
DONE=16'b1010101111001101;//结束数据,数码管显示DONE表示cook结束
assignLOAD=LD_TEST|LD_DONE|LD_CLK;//三个信号有一个为1,则LOAD控制端有效
assignTEMP={LD_TEST,LD_DONE,LD_CLK};//case语句用于为不同输入状态装入不同数据
always@(DATAIN,LD_TEST,LD_CLK,LD_DONE)
begincase(TEMP)
3'b100:
DATAOUT<=ALLS;3'b010:
DATAOUT<=DONE;3'b001:
DATAOUT<=DATAIN;
endcaseend
2.4计时器模块(如图1JSQ)
其主要功能为计时。
Load有效时完成装入功能,down有效时执行减计数。
由于微波炉定时器要求显示分和秒共4位,因而定时器至少应有4个计数器。
为简化设计过程,我们将4个计数器使用一个通用的计数器以供顶层设计调用,并且这个通用计数器必须有6_10进制选择功能。
计数器输出包括0标志信号,当计时结束即输出为0时则zero为1;通过该信号可以反馈给控制模块以达到烹饪结束的效果,其连接如图:
图2计数器模块内部结构
2.4.1六进制计数块(CNT6)
如图2中en连接five的两个计数器,因为一小时为60分钟一分钟为60秒,而且分秒的个十位都为十进制。
assignQ=TMP;
always@(LOAD)begin
if(LOAD)TMP<=DATAIN;end//load有效输入设定数据
always@(posedgeCLK)begin
if(EN)//EN有效并且temp为0装入数据5可实现6借位操作
if(TMP==4'b0000)beginTMP<=4'b0101;CARRY_OUT<=1;end
elsebeginTMP<=TMP-1;CARRY_OUT<=0;end//en无效则实现减一操作
end
2.4.2十进制计数块(CNT10)
如图二中连接nine的两个计数器实现分和秒的个十位十进制计数,原理同6进制计数器一样。
assignQ=TMP;
always@(LOAD)begin
if(LOAD)TMP<=DATAIN;end
always@(posedgeCLK)
beginif(EN)
if(TMP==4'b0000)beginTMP<=4'b1001;CARRY_OUT<=1;end//装入数据9可实现借位操作
elsebeginTMP<=TMP-1;CARRY_OUT<=0;end
end
2.5各模块top连接
模块连接应用模块例化语句实现各模块的信号传递其硬件电路如图1所示具体程序可见附录
测试与仿真
3.1测试基准(具体程序见附录)
设定cook时间即DATA为11分钟11秒,时钟周期为20us.测试信号,置数信号复位信号的脉宽都为50us,且都是上升沿触发。
initial
beginDATA=16'b0001000100010001;CLK=0;TEST=0;
START=0;SET_T=0;RESET=1;#50RESET=0;end//给一个复位信号
initial
beginTEST=0;#100TEST=1;#50TEST=0;end//给一个测试信号
initial
beginSET_T=0;#150SET_T=1;#50SET_T=0;end//给置数信号
initial
beginSTART=0;#200START=1;#100START=0;end//模拟开始按钮
always#10CLK=~CLK;//产生时钟脉冲
3.2仿真结果
如图波形
设置输入时间为11:
11s,开始一个RESET信号输出为000,当给一个SET信号时输出数据为设置的数据0001000100010001。
当按下START时COOK变为高电平开始烹饪,计数器开始计数减一,秒的个位减到0则十位减一,当秒减为0向分借位实现6进制借位操作。
然后分的个位以十进制向分的十位借位,直到全为0则输出信号DONE,烹饪结束。
完美的实现了设计的要求。
课程设计总结
在这一个多星期中我和我的队员一起完成了这个课程设计。
一个星期的时间挺短,却也学到了很多东西。
自从选到这个题目大家都开始了紧张的工作,各论坛、图书馆、中文数据库以及最后设计思路的确立。
整个过程现在总结起来也遇到了许多麻烦,也就解决许多麻烦。
比如一开始对计时器的进制选择没有设定,导致仿真波形输出结果秒和分的换算都用了16进制。
就这一点我们花了整整一天时间才修改并调试成功。
不止这些,设计过程中对程序的模块连接,以及程序的改错都给我们留下了深刻的影响。
这对于我们来说是一笔宝贵的财富。
当今电子技术飞速发展,而其核心已日趋接近EDA设计,所以学好EDA设计对我们来说非常重要。
这次课程设计给我们一个拓展的平台,值得大家欣慰的是我们遇到了不同种类的问题,我们学会了怎样解决问题。
附录
1.实验完整程序:
//1————————————top————————————————————————
moduleTOP(DATA,RESET,SET_T,START,TEST,CLK,COOK,SEC0,SEC1,MIN0,MIN1);
inputDATA,RESET,SET_T,START,TEST,CLK;
outputCOOK,SEC0,SEC1,MIN0,MIN1;
wire[3:
0]SEC0,SEC1,MIN0,MIN1;
wire[15:
0]DATA;
wireCOOK_TMP,TEST_TMP,CLK_TMP,DONE_TMP,LOAD_TMP,DONE;
wire[15:
0]DATA_TMP;
assignCOOK=COOK_TMP;
KZQTKZQ(RESET,SET_T,START,TEST,CLK,DONE,COOK_TMP,TEST_TMP,CLK_TMP,DONE_TMP);
ZZQTZZQ(DATA,TEST_TMP,CLK_TMP,DONE_TMP,DATA_TMP,LOAD_TMP);
JSQTJSQ(COOK_TMP,LOAD_TMP,CLK,DATA_TMP,SEC0,SEC1,MIN0,MIN1,DONE);
endmodule
//2————————————控制模块状态机-——————————————————
moduleKZQ(RESET,SET_T,START,TEST,CLK,DONE,COOK,LD_TEST,LD_CLK,LD_DONE);
inputRESET,SET_T,START,TEST,CLK,DONE;
outputCOOK,LD_TEST,LD_CLK,LD_DONE;
regCOOK,LD_TEST,LD_CLK,LD_DONE;
parameterIDLE=3'b000,
LAMP_TEST=3'b001,
SET_CLOCK=3'b010,
TIMER=3'b011,
DONE_MSG=3'b100;
reg[2:
0]NXT,CUR;
always@(posedgeCLKorposedgeRESET)
begin
NXT<=IDLE;LD_TEST<=0;LD_DONE<=0;LD_CLK<=0;COOK<=0;
if(RESET)beginCUR<=IDLE;end
elsebegin
case(CUR)
LAMP_TEST:
beginLD_TEST<=1;COOK<=0;end
SET_CLOCK:
beginLD_CLK<=1;COOK<=0;end
DONE_MSG:
beginLD_DONE<=1;COOK<=0;end
IDLE:
begin
if(TEST)
beginNXT<=LAMP_TEST;LD_TEST<=1;end
elseif(SET_T)
beginNXT<=SET_CLOCK;LD_CLK<=1;end
elseif(START==1)
beginNXT<=TIMER;COOK<=1;end
end
TIMER:
begin
if(DONE)
beginNXT<=DONE_MSG;LD_DONE<=1;end
else
beginNXT<=TIMER;COOK<=1;end
end
endcase
CUR<=NXT;
endend
endmodule
//3——————————————数据装入块———————————————————
moduleZZQ(DATAIN,LD_TEST,LD_CLK,LD_DONE,DATAOUT,LOAD);
inputDATAIN,LD_TEST,LD_CLK,LD_DONE;
outputDATAOUT,LOAD;
wire[15:
0]DATAIN;
reg[15:
0]DATAOUT;
wire[2:
0]TEMP;
parameterALLS=16'b1000100010001000,//8888
DONE=16'b1010101111001101;//DONE
assignLOAD=LD_TEST|LD_DONE|LD_CLK;
assignTEMP={LD_TEST,LD_DONE,LD_CLK};
always@(DATAIN,LD_TEST,LD_CLK,LD_DONE)
begin
case(TEMP)
3'b100:
DATAOUT<=ALLS;
3'b010:
DATAOUT<=DONE;
3'b001:
DATAOUT<=DATAIN;
endcase
end
endmodule
//4————————————6进制控制—————————————————————
moduleCNT6(CLK,LOAD,EN,DATAIN,Q,CARRY_OUT);
inputCLK,LOAD,EN,DATAIN;
outputQ,CARRY_OUT;
wire[3:
0]DATAIN;
wire[3:
0]Q;
regCARRY_OUT;
reg[3:
0]TMP;
assignQ=TMP;
always@(LOAD)
begin
if(LOAD)TMP<=DATAIN;end
always@(posedgeCLK)begin
if(EN)
if(TMP==4'b0000)
beginTMP<=4'b0101;CARRY_OUT<=1;end
else
beginTMP<=TMP-1;CARRY_OUT<=0;end
end
endmodule
//5————————————10进制控制—————————————————————
moduleCNT10(CLK,LOAD,EN,DATAIN,Q,CARRY_OUT);
inputCLK,LOAD,EN,DATAIN;
outputQ,CARRY_OUT;
wire[3:
0]DATAIN;
wire[3:
0]Q;
regCARRY_OUT;
reg[3:
0]TMP;
assignQ=TMP;
always@(LOAD)
begin
if(LOAD)TMP<=DATAIN;end
always@(posedgeCLK)
begin
if(EN)
if(TMP==4'b0000)beginTMP<=4'b1001;CARRY_OUT<=1;end
elsebeginTMP<=TMP-1;CARRY_OUT<=0;end
end
endmodule
//6————————————-计时器模块————————————————————
moduleJSQ(COOK,LOAD,CLK,DATA,SEC0,SEC1,MIN0,MIN1,DONE);
inputCOOK,LOAD,CLK,DATA;
outputSEC0,SEC1,MIN0,MIN1,DONE;
wire[3:
0]SEC0,SEC1,MIN0,MIN1;
wire[15:
0]DATA;
wireDONE;
wires0,s1,s2,s3;
assignDONE=s0&s1&s2&s3;
CNT10S0(CLK,LOAD,COOK,DATA[3:
0],SEC0,s0);
CNT6S1(s0,LOAD,COOK,DATA[7:
4],SEC1,s1);
CNT10m0(s1,LOAD,COOK,DATA[11:
8],MIN0,s2);
CNT6m1(s2,LOAD,COOK,DATA[15:
12],MIN1,s3);
endmodule
2.测试程序:
moduleTOP_tb;
wire[3:
0]MIN0;
wire[3:
0]SEC1;wireCOOK;regTEST;
wire[3:
0]MIN1;regCLK;regSTART;
reg[15:
0]DATA;wire[3:
0]SEC0;regSET_T;
regRESET;
initial
begin
DATA=16'b0001000100010001;CLK=0;TEST=0;START=0;
SET_T=0;RESET=1;
#50RESET=0;
end
initial
beginTEST=0;
#100TEST=1;#50TEST=0;
end
initial
beginSET_T=0;
#150SET_T=1;#50SET_T=0;
end
initial
beginSTART=0;
#200START=1;#100START=0;
end
always#10CLK=~CLK;
TOP
DUT(
.MIN0(MIN0),
.SEC1(SEC1),
.COOK(COOK),
.TEST(TEST),
.MIN1(MIN1),
.CLK(CLK),
.START(START),
.DATA(DATA),
.SEC0(SEC0),
.SET_T(SET_T),
.RESET(RESET));
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog 微波炉 定时器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)