VHDL微波炉控制器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、绪论 (2)
二、关键技术简介 (2)
2.1 FPGA简介 (2)
2.2 VHDL语言概述 (2)
2.3 ALTIUM DESIGNER简介 (3)
三、微波炉定时控制器的设计方案分析 (4)
3.1 系统设计的要求 (4)
3.2 系统总体功能描述 (4)
3.3 各模块的功能实现 (5)
3.3.1 输入模块 (5)
3.3.2 状态控制模块 (5)
3.3.3 显示模块 (5)
四、系统详细设计 (7)
4.1控制模块 (7)
4.1.1状态转换控制 (7)
4.1.2数据装载 (9)
4.1.3 烹饪计时 (10)
4.1.4 控制模块的实现 (11)
五、系统仿真 (11)
5.1状态控制器仿真 (11)
5.2 数据装载器的仿真 (12)
5.3 烹饪计时器的仿真 (13)
六、结论 (14)
一、绪论
随着人民生活水平的提高,微波炉开始进人越来越多的家庭,它给人们的生活带来了极大的方便。
微波炉由 2450MHz 的超高频来加热食物。
它省时、省电、方便和卫生。
作为现代的烹饪工具,微波炉的控制器体现着它的重要性能指标。
目前大部分微波炉控制器采用单片机进行设计,电路比较复杂,性能不够灵活。
本文采用先进的EDA技术,利用ALTIUM DESIGNER工作平台和VHDL设计语言,设计了一种新型的微波炉控制器系统。
该系统具有系统复位、时间设定、烹饪计时等功能,在 FPGA 上实现。
二、关键技术简介
2.1 FPGA简介
FPGA(Field-Programmable GateArray),即现场可编程门阵列,它是在PAL、 GAL、CPLD 等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如 AND、OR、XOR、 NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA 里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把 FPGA 内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品 FPGA 的逻辑块和连接可以按照设计者而改变,所以 FPGA 可以完成所需要的逻辑功能。
FPGA一般来说比 ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。
但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
厂商也可能会提供便宜的但是编辑能力差的FPGA。
因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
2.2 VHDL语言概述
VHDL 的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于 1982 年。
1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。
VHDL 主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)
和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是 VHDL 系统设计的基本点。
VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。
归纳起来,VHDL 语言主要具有以下优点:
(1)VHDL 语言功能强大,设计方式多样 VHDL 语言具有强大的语言结构, 只需采用简单明确的 VHDL 语言程序就可以述十分复杂的硬件电路。
同时, 它还具有多层次的电路设计描述功能。
此外,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。
VHDL 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。
(2)VHDL 语言具有强大的硬件描述能力 VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。
同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。
VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。
VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。
(3)VHDL 语言具有很强的移植能力 VHDL 语言很强的移植能力主要体现在:对于同一个硬件电路的 VHDL 语言描述,它可以从一个模拟器移植到另一个模拟器上,从一个综合器移植到另一个综合器上,或者从一个工作平台移植到另一个工作平台上去执行。
(4)VHDL 语言的设计描述与器件无关采用 VHDL 语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。
这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。
当硬件电路的设计描述完成以后,VHDL 语言允许采用多种不同的器件结构来实现。
(5)VHDL 语言程序易于共享和复用 VHDL 语言采用基于库 (library)的设计方法。
在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。
这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。
由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言,因此它可以使设计成果在设计人员之间方便地进行交流和共享,从而减小硬件电路设计的工作量,缩短开发周期。
2.3 ALTIUM DESIGNER简介
Altium Designer 是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows XP操作系统。
这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。
Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。
该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。
由于Altium Designer 在继承先前Protel软件功能的基础上,综合了FPGA设计和嵌入式系统软件设计功能,Altium Designer 对计算机的系统需求比先前的版本要高一些。
三、微波炉定时控制器的设计方案分析
3.1 系统设计的要求
现需设计一个微波炉控制器,通过该控制器再配以4个七段数码二极管完成微波炉的定时及信息显示。
各信号的功能及要求如下:
CLK是秒时钟脉冲输入,它接收每秒一个时钟脉冲的节拍信号。
RESET为复位信号,高电平有效,用于芯片的复位功能。
TEST为测试信号,高电平有效,用于测试4个七段数码二极管工作是否正常。
START为开始加热信号,高电平有效,SET_UP信号为定时设置信号,高电平时可以设置定时时间,DATA为定时的时间,COOK为加热输出,另外四个输出分别表示显示的定时时间的分和秒。
3.2 系统总体功能描述
各信号功能及要求如下:
CLK是秒时钟脉冲输入,它接收每秒一个时钟脉冲的节拍信号。
RESET为复位信号,高电平有效,用于芯片的复位功能。
TEST信号是测试信号,高电平有效,用于测试七段数码管工作是否正常。
SET_UP是烹调时间设置控制信号,高电平有效。
DATA1是一个16位总线输入信号,输入所设置的时间长短,它由高到低分为4组,每一组是BCD码输入,分别表示分、秒十位、个位的数字,如12分59秒。
START是烹调开始的控制信号,高电平有效。
COOK是烹调进行信号,外接用于控制烹调的继电器开关,高电平时表明烹调已经开始或正在进行,低电平表示烹调结束或没有进行。
MIN_H,MIN_L,SEC_H,SEC_L是四组七位总线信号,通过LCD动态的显示完成烹调所剩的时间及测试状态信息,烹调完毕的状态信息。
该微波炉控制器的具体功能要求如下:上电后系统首先处于复位状态。
在工作是首先按时间设置键设置烹调时间,此时系统输入DATA1的数据作为烹调所需的时间,然后系统自动回到复位状态,同时4个七段数码管显示时间信息。
在按START键后系统进入烹调状态。
COOK信号开始为高电平,此时4个七段数码管每隔一秒钟变化一次,用以刷新还剩剩余多少时间结束烹调。
烹调结束后,COOK 信号变为低电平,同时LCD显示“0000”的信息,同时蜂鸣器发出提示音,然后系统回到复位状态。
系统可以通过按RESET键随时回到复位状态。
在复位状态下,按TEST键在4个数码管上会显示“8888”的信息,它可以测试LCD工作是否正
常。
3.3 各模块的功能实现
本系统主要由输入、控制和显示部分组成。
输入部分主要完成用户对控制功能
的设置,采用按键作为输入设备。
控制部分是本系统的核心,它接收用户的输入,完成相应的控制逻辑功能,并将当前的工作状态等信息送到显示部分。
显示部分主要监视系统工作状态并提示用户进行控制操作。
3.3.1 输入模块
本系统采用键盘进行输入设置,即由一个 4*4 矩阵键盘实现数据输入控制。
该矩阵键盘上16个按键分别是:
输入模块包括时钟脉冲电路、键盘扫描电路、消枓同步电路和键盘译码电路,通过该模块将扫描得到的按键值送到控制模块。
3.3.2 状态控制模块
控制部分作为整个微波炉控制器系统的核心,它采用 FPGA 芯片作为主控核心,完成许多复杂的控制和数据处理任务。
它通过输入模块提供的按键输入实现数据信息装载处理,并将处理结果通过显示模块显示出来。
其涉及到数据的装载、状态转换控制、烹饪计时。
3.3.3 显示模块
显示部分采用LCD和LED来实现。
其中,用LCD作为时间、状态显示,用发光二极管作为火力大小显示。
具体设计时,采用 LCD进行8位显示,高四位显示烹饪时间,低四位显示当前的烹饪状态。
3个LED显示火力的大小,其中第一个亮表示小火,第一和第二个亮表示中火,3个全亮表示大火。
3.4 系统的工作流程
四、系统详细设计
4.1控制模块
控制模块是整个微波炉控制器系统的核心,完成许多复杂的控制和数据处理任 务,它通过输入模块提供的按键输入实现数据信息装载处理,控制显示模块显示相应的信息。
控制模块采FPGA 芯片作为主控芯片,其涉及到数据的装载、状态控制转换、 烹饪计时等。
其中,状态控制转换子模块,其功能是控制微波炉工作过程中的状态转换,并发出相关控制信号。
数据装载子模块,其功能是根据按键信号设置定时时间、最高温度、火力档位,烹调属性设置以及烹调数据信息装载。
烹饪计时子模块,其功能是对时钟进行减法计数,提供烹调完成时的状态信号。
音效控制子模块,其功能是控制微波炉工作时的音效提示,这里直接外接一个蜂鸣器实现该功能。
其功能子模块图如下:
4.1.1状态转换控制
根据微波炉工作流程的描述,分析状态转换条件及输出信号,可以得到控制模块的状态转换图
控制模块 状态转换控制
子模块
烹饪计时子模块 数据装载子模块
下面,根据上述状态转换图和 ASM 图进行程序设计,在编写程序代码实现状态转换控制子模块过程时,首先,如果 RESET=‘1’,则系统复位,当前状态为初始状态,当同步时钟脉冲,当前状态为下一状态,用程序代码表示如下:
IF RESET='1' THEN
CURR_STATE<=DEFAULT;
ELSIF CLK'EVENT AND CLK='1' THEN
CURR_STATE<=NEXT_STATE;
END IF;
当当前状态为初始状态时,
LOAD_LED<='0';
LOAD_DONE<='0';
LOAD_SET<='0';
COOK<='0';
此时,显示测试状态:
WHEN LED_TEST=>LOAD_LED<='1';COOK<='0';
时间设置状态:
WHEN SETTING=>LOAD_SET<='1';COOK<='0';
完成信息显示状态:
WHEN FINISHED=>LOAD_DONE<='1';COOK<='0';
在初始状态,如果按下“TEST”键,下一状态即为显示测试状态,如果按下“SETUP”键,下一状态即为时间设置状态,如果按下“START”键,即烹调开始进行时,此时下一状态为减法计数定时状态,该过程用程序代码实现如下:
WHEN DEFAULT=>
IF TEST='1' THEN
NEXT_STATE<=LED_TEST;
LOAD_LED<='1';
ELSIF SETUP='1' THEN
NEXT_STATE<=SETTING;
LOAD_SET<='1';
ELSIF START='1' THEN
NEXT_STATE<=COUNTER;
COOK<='1';
END IF;
在减法计数定时状态,如果输出 DONE 指示烹调信息完成,则下一状态为显示信息完成状态,显示烹调完成信息,否则,下一状态还是减法计数定时状态,COOK 高电平有效,用程序代码实现如下:
WHEN COUNTER=>
IF DONE='1' THEN
NEXT_STATE<=FINISHED;
LOAD_DONE<='1';
ELSE
NEXT_STATE<=COUNTER;
COOK<='1';
END IF;
生成的控制模块相应的电路符号:
4.1.2数据装载
数据装载器,它本质上就是一个三选一的数据选择器。
根据其应完成的逻辑功能,本设计可采用一个进程来完成,但由于三个被选择的数据只有一个来自输入口,因此另两个被选择的数据则通过进程的说明部分定义两个常数来产生。
由于装入测试的数据可以用4个8作为显示测试信息数据,经过八个译码器译码后显示测试信息编码。
因此,该常数应是8个分段的4位 BCD 码,即“1000100010001000”,同理,DONE 的 BCD 码分别为“0000000000000000”以显示DONE的常数“0000”。
通过上述分析,该模块的主要程序可实现如下:
PROCESS(DATA1,LOAD_LED,LOAD_SET,LOAD_DONE) IS
CONSTANT TEST8: STD_LOGIC_VECTOR(15 DOWNTO 0):=X"8888";
CONSTANT COOKED:STD_LOGIC_VECTOR(15 DOWNTO0):=x"0000";
VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
LOAD<=LOAD_LED OR LOAD_DONE OR LOAD_SET;
TEMP:=LOAD_LED & LOAD_DONE & LOAD_SET;
CASE TEMP IS
WHEN"100" => DATA2<=TEST8;
WHEN"010" => DATA2<=COOKED;
WHEN"001" => DATA2<=DATA1;
WHEN OTHERS=> NULL;
END CASE;
END PROCESS;
完成 VHDL 源程序的输入,编译、运行,生成相应的电路符号:
4.1.3 烹饪计时
烹饪计时器JSQ为减计数计数器,其最大计时时间为59:59,因此可以编写一个60进制计数器来实现。
由所学知识可知,计数的功能是累计输入脉冲的个数,实现计数功能的数字电路即计数器,被计数的脉冲可以是周期性脉冲,也可以是非周期性脉冲,通常加在计数器的时钟脉冲输入端,作为计数器的时钟脉冲。
计数器的代码如下:
IF(CLK'EVENT AND CLK='1')THEN
IF(TIME1(3 DOWNTO 0)="0000")THEN
TIME1(3 DOWNTO 0)<="1001";
IF(TIME1(7 DOWNTO 4)="0000")THEN
TIME1(7 DOWNTO 4)<="0101";
IF(TIME1(11 DOWNTO 8)="0000")THEN
TIME1(11 DOWNTO 8)<="1001";
IF(TIME1(15 DOWNTO 12)="0000")THEN
TIME1(15 DOWNTO 12)<="0101";
ELSE
TIME1(15 DOWNTO 12)<=TIME1(15 DOWNTO 12)-1;
END IF;
ELSE
TIME1(11 DOWNTO 8)<=TIME1(11 DOWNTO 8)-1;
END IF;
ELSE
TIME1(7 DOWNTO 4)<=TIME1(7 DOWNTO 4)-1;
END IF;
ELSE
TIME1(3 DOWNTO 0)<=TIME1(3 DOWNTO 0)-1;
END IF;
END IF;
生成相应的电路符号:
其中TIME_OUT[3..0]表示秒的个位,TIME_OUT[7..4]表示秒的十位,TIME_OUT[11..8]表示分的个位,TIME_OUT[15..12]表示分的十位。
输入信号LOAD 为高电平时完成信号的载入;COOK 信号为高电平时,在每个时钟周期的上升沿进行减法计数。
输出信号 DONE 表示烹调时间到。
4.1.4 控制模块的实现
综合上述分析,对该控制模块进行完整设计,连线图如下:
其中,输入信号CLK 为时钟输入信号,时钟上升沿敏感;TEST 为数码显示管测试信号,高电平有效,用于测试显示管是否正常工作;SETUP 为烹调时间设置时间,高电平有效时允许设置烹调时间;DATAIN为数据输入信号,用于设置烹调时间的长短;START为烹调开始的控制信号,高电平有效时开始烹调;RESET为复位信号,高电平有效时系统复位。
DATAOUT[3..0],DATAOUT[7..4],DATA_OUT[11..8],DATAOUT[15..12]分别表示秒个位、秒十位、分个位、分十位。
他们分别接 8位LCD的搞死为,动态地显示完成烹调所剩的时间以及测试状态信息“8888”。
五、系统仿真
5.1状态控制器仿真
完成状态转换控制器 KZQ 子模块 VHDL 源程序文件输入后,保存文件,对文件进行编译,然后编写测试平台文件进行仿真:
其中,输入信号为 RESET、SETUP、START、TEST、CLK、DONE,输出信号为 COOK、LOAD_TEST、LOAD_SET、LOAD_DONE。
控制器根据输入信号和自身当时所处的状态完成状态的转换和输出相应的控制信号。
LOAD_SET 指示数据装载器装入设置的烹调时间数据;LOAD_DONE指示转载起装入烹调完毕的状态信息“0000”的显示驱动信息数据;LOAD_TEST指示装载器装入用于测试的数据“8888以显示驱动信息数据;COOK指示烹调正在进行之中,并提示计时器进行减计数。
仿真结果如图:
分析该仿真文件,可以看到,当测试信号TEST为高电平有效时,测试输出信号LOAD_TEST为高电平;否则,当时间设置信号SETUP为高电平时,对应的指示信号 LOAD_SET输出高电平;当烹饪开始信号START信号为高电平时,对应输出COOK为高电平;当复位信号RESET为高电平时,系统复位,恢复初始状态。
仿真结果符合模块设计的要求。
5.2 数据装载器的仿真
完成数据装载器子模块VHDL源程序文件输入后,保存文件,对文件进行编译,编写测试平台文件进行仿真:
其中,输入信号LOAD_DONE为高电平时,输出烹调完毕的状态信息数据;LOAD_SET 为高电平时,输出设置的烹调时间数据;LOAD_TEST 为高电平时,输出测试数据。
输出信号LOAD用于指示电路正处于上述三路信号模式中的哪一种,同时提示计数器将处于数据装入状态。
仿真结果如图:
分析该模块仿真结果,由于数据装载器本质上即多了选择译码电路。
可知,当LOAD_SET、LOAD_TEST、LOAD_DONE三路信号中有且仅有一路信号电平有效时,装载器相应的值作为输出。
5.3 烹饪计时器的仿真
完成计时器子模块VHDL源程序文件输入后,保存文件,对文件进行编译,编写测试平台文件进行仿真:
其中,输入信号 LOAD 为高电平时完成信号的载入;COOK 信号为高电平时,在每个时钟周期的上升沿进行减法计数。
输出信号 DONE 表示烹调时间到。
仿真结果如下图:
由以上仿真结果可以看到,该 JSQ 模块实现了烹调计时的定时作用
六、结论
该课题是利用Altium公司的ALTIUM DESIGNER开发环境和软件,进行VHDL程序设计,然后进行仿真,调试,以Altium NB1实验箱实验系统为硬件平台,实现了一个简单的微波炉控制器系统的设计。
在整个毕业设计过程中,进行了系统的总体设计,硬件设备的选用,软件和开发环境的安装,VHDL程序设计与仿真。
设计的重点主要在系统的规划以及程序的设计与调试上,要做到键盘与LCD,LED 灯的一体化,需要在键位设置时进行准确的设计,通过键盘的扫描,消抖和译码,达到一键一码的目的,做到功能的完善。
设计的难点主要在功能控制上,数据和控制信号较多,状态之间的转化也较为复杂,在设计中带来了一些困难。
另外在仿真分析上,因为需要测试的结果很多,有些结果无法预料,无法在仿真中看到。
本设计也存在一定的不足。
由于本身能力和实验器材的限制,无法在系统中建立完善的体制,只是实现了一个微波炉控制器的基本功能。
比如像存储功能,就没有在系统中考虑到,这些都有待以后的继续提高和完善。