verilog微波炉定时器设计.docx_第1页
verilog微波炉定时器设计.docx_第2页
verilog微波炉定时器设计.docx_第3页
verilog微波炉定时器设计.docx_第4页
verilog微波炉定时器设计.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

集成电路课程设计报告集成电路课程设计报告课题名称: 微波炉定时器设计 姓名: XXXXXX 学号: 211111111 班级: 电子科学与技术 班 目录第一节 引言.21.1概述.21.2本设计的任务和主要功能.2第二节 系统功能绍.2 2.1系统总述.22.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控制模块(如图1 KZQ) 主要完成对整个芯片工作的控制。当L_done有效时,输出烹调结束数据。当L_clk有效时,输出烹调的设置时间数据。当L_8888有效时,输出数码管测试数据包括6个输入信号和4个输出信号。定义以下5个状态:parameter IDLE=3b000, /复位状态输出L_8888、L_clk、L_done全为0 LAMP_TEST=3b001, /TEST有效L_8888=1,L_clk、L_done为0 SET_CLOCK=3b010, /SET有效L_8888、L_done为0,L_clk=1TIMER=3b011, /START有效L_8888为0,L_clk、L_done为1并开始COOK DONE_MSG=3b100; /done有效L_8888、L_clk为0,L_done=1,COOK结束具体程序见附录2.3数据装入模块(如图1 ZZQ)当L_done有效时,输出烹调结束数据。当L_clk有效时,输出烹调的设置时间数据。当L_8888有效时,输出数码管测试数据。load信号为data_val输出有效指示,DATA为人为输入的时间数据输入口。parameter ALLS=16b1000100010001000, /测试数据8888,数码管LED全亮则测试成功 DONE=16b1010101111001101; /结束数据,数码管显示DONE表示cook结束assign LOAD=LD_TEST | LD_DONE | LD_CLK; /三个信号有一个为1,则LOAD控制端有效assign TEMP=LD_TEST , LD_DONE , LD_CLK; /case语句用于为不同输入状态装入不同数据always (DATAIN,LD_TEST,LD_CLK,LD_DONE)begin case(TEMP)3b100:DATAOUT=ALLS; 3b010:DATAOUT=DONE; 3b001:DATAOUT=DATAIN;endcase end2.4计时器模块(如图1 JSQ) 其主要功能为计时。Load有效时完成装入功能,down有效时执行减计数。由于微波炉定时器要求显示分和秒共4位,因而定时器至少应有4个计数器。为简化设计过程,我们将4个计数器使用一个通用的计数器以供顶层设计调用,并且这个通用计数器必须有6_10进制选择功能。计数器输出包括0标志信号,当计时结束即输出为0时则zero为1;通过该信号可以反馈给控制模块以达到烹饪结束的效果,其连接如图: 图2 计数器模块内部结构2.4.1六进制计数块(CNT6)如图2中en连接five的两个计数器,因为一小时为60分钟一分钟为60秒,而且分秒的个十位都为十进制。assign Q=TMP;always (LOAD) begin if(LOAD) TMP=DATAIN; end /load有效输入设定数据always (posedge CLK ) beginif(EN) /EN有效并且temp为0装入数据5可实现6借位操作 if (TMP=4b0000) begin TMP=4b0101; CARRY_OUT=1; end else begin TMP=TMP-1; CARRY_OUT=0; end /en无效则实现减一操作 end2.4.2十进制计数块(CNT10) 如图二中连接nine的两个计数器实现分和秒的个十位十进制计数,原理同6进制计数器一样。assign Q=TMP;always (LOAD) begin if(LOAD) TMP=DATAIN; endalways (posedge CLK )begin if(EN)if (TMP=4b0000) begin TMP=4b1001; CARRY_OUT=1; end /装入数据9可实现借位操作else begin TMP=TMP-1; CARRY_OUT=0; endend2.5各模块top连接 模块连接应用模块例化语句实现各模块的信号传递其硬件电路如图1所示具体程序可见附录测试与仿真3.1测试基准(具体程序见附录) 设定cook时间即DATA为11分钟11秒,时钟周期为20us.测试信号,置数信号复位信号的脉宽都为50us,且都是上升沿触发。initial begin DATA=16b0001000100010001; CLK=0; TEST=0; START =0; SET_T =0; RESET=1; #50 RESET=0; end /给一个复位信号initial begin TEST=0; #100 TEST=1;#50 TEST=0; end /给一个测试信号initial begin SET_T =0; #150 SET_T =1; #50 SET_T =0;end /给置数信号initial begin START =0; #200 START =1; #100 START =0;end /模拟开始按钮always #10 CLK=CLK; /产生时钟脉冲3.2仿真结果 如图波形设置输入时间为11:11s,开始一个RESET信号输出为000,当给一个SET信号时输出数据为设置的数据0001000100010001。当按下START时COOK变为高电平开始烹饪,计数器开始计数减一,秒的个位减到0则十位减一,当秒减为0向分借位实现6进制借位操作。然后分的个位以十进制向分的十位借位,直到全为0则输出信号DONE,烹饪结束。完美的实现了设计的要求。课程设计总结 在这一个多星期中我和我的队员一起完成了这个课程设计。一个星期的时间挺短,却也学到了很多东西。自从选到这个题目大家都开始了紧张的工作,各论坛、图书馆、中文数据库以及最后设计思路的确立。整个过程现在总结起来也遇到了许多麻烦,也就解决许多麻烦。比如一开始对计时器的进制选择没有设定,导致仿真波形输出结果秒和分的换算都用了16进制。就这一点我们花了整整一天时间才修改并调试成功。不止这些,设计过程中对程序的模块连接,以及程序的改错都给我们留下了深刻的影响。这对于我们来说是一笔宝贵的财富。 当今电子技术飞速发展,而其核心已日趋接近EDA设计,所以学好EDA设计对我们来说非常重要。这次课程设计给我们一个拓展的平台,值得大家欣慰的是我们遇到了不同种类的问题,我们学会了怎样解决问题。附录 1.实验完整程序:/1topmodule TOP(DATA,RESET,SET_T,START,TEST,CLK,COOK,SEC0,SEC1,MIN0,MIN1);input DATA,RESET,SET_T,START,TEST,CLK;output COOK,SEC0,SEC1,MIN0,MIN1;wire 3:0 SEC0,SEC1,MIN0,MIN1;wire 15:0 DATA;wire COOK_TMP,TEST_TMP,CLK_TMP,DONE_TMP,LOAD_TMP,DONE;wire 15:0 DATA_TMP;assign COOK=COOK_TMP;KZQ TKZQ(RESET,SET_T,START,TEST,CLK,DONE,COOK_TMP,TEST_TMP,CLK_TMP,DONE_TMP);ZZQ TZZQ(DATA,TEST_TMP,CLK_TMP,DONE_TMP,DATA_TMP,LOAD_TMP);JSQ TJSQ(COOK_TMP,LOAD_TMP,CLK,DATA_TMP,SEC0,SEC1,MIN0,MIN1,DONE);endmodule/2控制模块状态机-module KZQ(RESET,SET_T,START,TEST,CLK,DONE,COOK,LD_TEST,LD_CLK,LD_DONE);input RESET,SET_T,START,TEST,CLK,DONE;output COOK,LD_TEST,LD_CLK,LD_DONE;reg COOK,LD_TEST,LD_CLK,LD_DONE;parameter IDLE=3b000, LAMP_TEST=3b001, SET_CLOCK=3b010, TIMER=3b011, DONE_MSG=3b100;reg 2:0 NXT,CUR;always (posedge CLK or posedge RESET)beginNXT=IDLE; LD_TEST=0; LD_DONE=0; LD_CLK=0; COOK=0;if(RESET) begin CUR=IDLE; endelse begin case(CUR) LAMP_TEST:begin LD_TEST=1; COOK=0; endSET_CLOCK:begin LD_CLK=1; COOK=0; endDONE_MSG:begin LD_DONE=1; COOK=0; endIDLE:beginif(TEST)begin NXT=LAMP_TEST; LD_TEST=1; endelse if(SET_T)begin NXT=SET_CLOCK; LD_CLK=1; endelse if(START=1)begin NXT=TIMER; COOK=1; endendTIMER:beginif(DONE)begin NXT=DONE_MSG; LD_DONE=1; endelsebegin NXT=TIMER; COOK=1; endendendcaseCUR=NXT;end endendmodule/3数据装入块module ZZQ(DATAIN,LD_TEST,LD_CLK,LD_DONE,DATAOUT,LOAD);input DATAIN,LD_TEST,LD_CLK,LD_DONE;output DATAOUT,LOAD;wire 15:0 DATAIN ;reg 15:0 DATAOUT;wire 2:0 TEMP;parameter ALLS=16b1000100010001000, /8888 DONE=16b1010101111001101; /DONEassign LOAD=LD_TEST | LD_DONE | LD_CLK;assign TEMP=LD_TEST , LD_DONE , LD_CLK;always (DATAIN,LD_TEST,LD_CLK,LD_DONE)begin case(TEMP)3b100:DATAOUT=ALLS;3b010:DATAOUT=DONE;3b001:DATAOUT=DATAIN;endcaseendendmodule/46进制控制module CNT6(CLK,LOAD,EN,DATAIN,Q,CARRY_OUT);input CLK,LOAD,EN,DATAIN;output Q,CARRY_OUT;wire 3:0 DATAIN;wire 3:0 Q;reg CARRY_OUT;reg 3:0 TMP;assign Q=TMP;always (LOAD)begin if(LOAD) TMP=DATAIN; end always (posedge CLK ) beginif(EN) if (TMP=4b0000) begin TMP=4b0101; CARRY_OUT=1; end else begin TMP=TMP-1; CARRY_OUT=0; end endendmodule/510进制控制module CNT10(CLK,LOAD,EN,DATAIN,Q,CARRY_OUT);input CLK,LOAD,EN,DATAIN;output Q,CARRY_OUT;wire 3:0 DATAIN;wire 3:0 Q;reg CARRY_OUT;reg 3:0 TMP;assign Q=TMP;always (LOAD) begin if(LOAD) TMP=DATAIN; endalways (posedge CLK )beginif(EN)if (TMP=4b0000) begin TMP=4b1001; CARRY_OUT=1; endelse begin TMP=TMP-1; CARRY_OUT=0; endendendmodule/6-计时器模块module JSQ(COOK,LOAD,CLK,DATA,SEC0,SEC1,MIN0,MIN1,DONE);input COOK,LOAD,CLK,DATA;output SEC0,SEC1,MIN0,MIN1,DONE;wire 3:0 SEC0,SEC1,MIN0,MIN1; wire 15:0 DATA;wire DONE;wire s0,s1,s2,s3;assign DONE=s0&s1&s2&s3;CNT10 S0(CLK,LOAD,COOK,DATA3:0,SEC0,s0);CNT6 S1(s0,LOAD,COOK,DATA7:4,SEC1,s1);CNT10 m0(s1,LOAD,COOK,D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论