Verilog_HDL家用空调温度控制器设计

上传人:飞*** 文档编号:42957201 上传时间:2018-06-04 格式:DOC 页数:11 大小:501KB
返回 下载 相关 举报
Verilog_HDL家用空调温度控制器设计_第1页
第1页 / 共11页
Verilog_HDL家用空调温度控制器设计_第2页
第2页 / 共11页
Verilog_HDL家用空调温度控制器设计_第3页
第3页 / 共11页
Verilog_HDL家用空调温度控制器设计_第4页
第4页 / 共11页
Verilog_HDL家用空调温度控制器设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Verilog_HDL家用空调温度控制器设计》由会员分享,可在线阅读,更多相关《Verilog_HDL家用空调温度控制器设计(11页珍藏版)》请在金锄头文库上搜索。

1、数字系统课程设计设计报告设计题目:家用空调温度控制器 班 级:电技 081 姓 名:翟建峰 学 号:3080422031 日 期:2010-12-31一一 设计题目的要求设计题目的要求: :家用空调温度控制器的功能为:1、室内温度可由按键设置,温度的设置范围为 20 度至 39 度。2、有加热和制冷两种工作模式。当空调工作在加热模式时,如果室温低 于设定温度,空调加热,反之,不加热;当空调工作于制冷模式时,如果室 温高于设定温度,空调制冷,反之空调不制冷。3、对室内温度用两位数码管进行实时显示。二二 设计方案及其工作原理:设计方案及其工作原理: 总的设计框图如下:本电路由控制核心 cpu、按键

2、、4 位锁存器、数码管 7 位译码器电路组 成。 cpu:负责数据接收;室温和设定温度的比较;工作模式选择;显示数 据的输出;加热制冷信号的控制;报警信号的输出等。 按键:负责设定标准温度,设置温度的升高与降低。 锁存器:将 cpu 输出的显示信号锁存,防止干扰,将信号送给译码器。 译码器:将 BCD 码译成数码管显示用的高低电平。工作原理工作原理在 reset 信号作用下,设定温度寄存器赋初值,初值为 26 度,通过 add(温度升)和 down(温度减)来步进调整设定温度(步进为一) 。按键 (key)模块通过 seta 和 setb 输出端口将设定温度传给 cpu。 cpu 接收到设定温

3、度后将其与由温度传感器传来的室温 xy 比较,将比 较结果标志存在寄存器(flag)中。读取用户工作模式(mod=1 时为加热, mod=0 时为制冷) 。在加热模式状态下,根据 flag 的值给出加热控制寄存器 heat 赋值;在制冷模式状态下,根据 flag 的值给制冷状态寄存器 cool 赋值。cpu 还将设置温度与设置温度范围比较,将比较结果标志存在报警寄存 器 flag_high(超上界寄存器)和 flag_low(超下界寄存器) 。 cpu 还将室温和设定温度分别存放在室温寄存器和设定温度寄存器中。 最后,cpu 将寄存器的值通过各端口输出。 各锁存器将数据锁存后在时钟信号的作用下

4、将锁存信号输出给译码器, 译码器再把 BCD 码转换成数码管显示的高低电平,数码管显示出室温和设 置温度。 Led 灯接到有效信号后点亮,指示设定温度是否越界(led_settoohigh 表 示设置温度过高;led_settoolow 表示设置温度过低) 。三三 各单元电路设计:各单元电路设计:1、cpu 设计设计cpu 框图如下:框图如下:disp_outx:室温十位输出显示 disp_outy:室温个位输出显示 disp_outa:设置十位输出显示 disp_outb:设置个位输出显示 cool:制冷输出信号 heat:加热输出信号 led_settoohigh:设定温度超越上限报警 l

5、ed_settoolow:设定温度超越下限报警 x:室温十位输入 y:室温个位输入 a:设定温度十位输入 b:设定温度个位输入 mod:用户加热制冷模式选择 clk:时钟脉冲 flag:室温和设置温度比较标志位寄存器 flag_high:设置温度超越上界标志位寄存器 flag_low:设置温度超越下界标志位寄存器2、按键(、按键(key)设计)设计按键(按键(key)框图如下:)框图如下:seta 输出温度设定十位 setb 输出温度设定个位 add 设定温度加一 down 设定温度减一 clk 时钟信号 reset 复位信号(用于寄存器赋初值)3、锁存器设计、锁存器设计锁存器框图如下:锁存器

6、框图如下:data:锁存数据输入 qout:锁存数据输出 clk: 时钟信号4、译码器设计、译码器设计译码器框图如下:译码器框图如下:D4: 译码器 BCD 码输入信号 a,b,c,d,e,f,g:译码器输出信号(输入给数码管)四四 模拟仿真验证及结果分析:模拟仿真验证及结果分析:因整体仿真验证结果不易说明效果,故将各模块仿真结果予以分析。1、cpu 仿真结果仿真结果cpu 仿真结果如图:仿真结果如图:分析:前两个周期,用户模式为加热模式(mod=1)室温设定温度,制冷 (cool=1) ;第 79 周期设置温度39 度,超越上界报警(led_settoohigh=1) 。2、键盘仿真结果、键

7、盘仿真结果键盘仿真结果如图:键盘仿真结果如图:分析:前 2 周期,reset=1,设置温度被设为 26 度,第 510 周期,add=1,设置 温度每周期递增一;第 1220 周期 down=1,设置温度每周期递减一,2127 周 期,没有增加和减少信号,温度稳定在 24 度。3、锁存器仿真结果、锁存器仿真结果锁存器仿真结果如图:锁存器仿真结果如图:分析:如图,在每个时钟的上升沿将 data 中数据从 qout 输出。4、译码器仿真结果、译码器仿真结果译码器仿真结果如图:译码器仿真结果如图:分析:D4 输入 8 时,abcdefg 为:1111111,D4 输入为 7 时,abcdefg 为:

8、 1110000,符合数码管显示规则。 下图为整个顶层结果仿真图(部分) ,仅供参考:五五 总结体会:总结体会:在这次课程设计的过程中,遇到了很多的问题;但也学习到了很多平时上 课不曾接触到的东西、不懂的知识。了解到了具体的大工程是如何生成的、进 一步掌握并熟悉了 verilog HDL 语言,同时也学会了同学之间相互的团结和协 作。 通过本次课程设计,我懂得一个工程,必须先要有一个总体的方案,心中 要明确设计的目的,如何才能达到这个目的;然后划分模块,将复杂抽象的问 题具体简单化;接着逐个设计每个模块,调试,分析,再调试,直到完成各个 模块的要求为止;最终,将各个模块整合起来,完成整体模块,

9、完成工程设计。 可谓受益匪浅。附录:程序源代码附录:程序源代码/*温度控制 cpu*/ /disp_outx 室温十位输出显示 /disp_outy 室温个位输出显示 /disp_outa 设置十位输出显示 /disp_outb 设置个位输出显示 /cool 制冷输出信号 /heat 加热输出信号 /led_settoohigh 设定温度超越上限报警 /led_settoolow 设定温度超越下限报警 /x 室温十位输入 /y 室温个位输入 /a 设定温度十位输入 /b 设定温度个位输入 /mod 用户加热制冷模式选择 /clk 时钟脉冲 /flag 室温和设置温度比较标志位寄存器 /flag

10、_high 设置温度超越上界标志位寄存器 /flag_low 设置温度超越下界标志位寄存器 module cpu(disp_outx, disp_outy, disp_outa, disp_outb, cool, heat, led_settoohigh, led_settoolow,x,y,a,b,mod,clk); output3:0 disp_outx, disp_outy, disp_outa, disp_outb; output cool, heat, led_settoohigh, led_settoolow; input3:0 x,y,a,b; input mod,clk; re

11、g3:0 disp_outx, disp_outy, disp_outa, disp_outb; reg1:0 flag; reg flag_high,flag_low, cool, heat, led_settoohigh, led_settoolow; always(posedge clk) begin begin /*设定温度上下界标志位判断*/ if(a=4) begin flag_high =1; flag_low=0; /flag_high=1 设定温度超出上界 end else if(aa) flag=2b01; /flag=01 室温高于设定温度 else if(xb) fla

12、g=2b01; else if(yb) flag=2b10; else flag=2b11; /flag=11 室温等于设定温度 end endbegin /*制冷、加热输出寄存器赋 值*/ if(mod) begin /mod=1 加热模式下 if(flag=2b01) | (flag=2b11) begin heat=0; /停止加热 cool=0; end else if(flag=2b10) begin /加热 heat=1; cool=0; end end else /mod=0 制冷模式下 begin if(flag=2b10) | (flag=2b11) begin cool=0

13、; /停止制冷 heat=0;end else if(flag=2b01) begin cool=1; /制冷 heat=0; end end end begin /*显示、报警输出寄存器赋 值*/ if(!flag_high disp_outy=y; disp_outa=a; disp_outb=b; led_settoohigh =0;/led_settoohigh =0 led_settoolow=0 设定温 度在正常范围 led_settoolow=0; end else if(flag_high / led_settoohigh =1 设定 温度超越上界 led_settoolow=

14、0; end else if(!flag_high led_settoolow=1; /led_settoolow=1 设定 温度超越下界 end end end endmodule /*按键输入设定温度*/ /seta 输出温度设定十位 /setb 输出温度设定个位 /add 设定温度加一 /down 设定温度减一 /clk 时钟信号/reset 复位信号(用于寄存器赋初值) module key(seta,setb,add,down,clk,reset); output3:0 seta,setb; input add,down,clk,reset; reg3:0 seta,setb; al

15、ways(posedge clk or posedge reset) begin if(reset) /*寄存器赋初值*/ begin seta=2; setb=6; end if(add) /*寄存器加一*/ begin if(setb=9) begin setb=0; seta=seta+1; end else setb=setb+1; end else if(down) /*寄存器减一*/ begin if(setb=0) begin setb=9; seta=seta-1; end else setb=setb-1; end end endmodule /*4 位锁存器*/ /qout 输出信号 /data 输入信号 /clk 时钟信号 module suocunqi(qout,data,clk); output3:0qout

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号