整理VerilogHDL家用空调温度控制器设计Word下载.docx
- 文档编号:7406409
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:16
- 大小:264.73KB
整理VerilogHDL家用空调温度控制器设计Word下载.docx
《整理VerilogHDL家用空调温度控制器设计Word下载.docx》由会员分享,可在线阅读,更多相关《整理VerilogHDL家用空调温度控制器设计Word下载.docx(16页珍藏版)》请在冰点文库上搜索。
锁存器:
将cpu输出的显示信号锁存,防止干扰,将信号送给译码器。
译码器:
将BCD码译成数码管显示用的高低电平。
工作原理
在reset信号作用下,设定温度寄存器赋初值,初值为26度,通过add(温度升)和down(温度减)来步进调整设定温度(步进为一)。
按键(key)模块通过seta和setb输出端口将设定温度传给cpu。
cpu接收到设定温度后将其与由温度传感器传来的室温xy比较,将比较结果标志存在寄存器(flag)中。
读取用户工作模式(mod=1时为加热,mod=0时为制冷)。
在加热模式状态下,根据flag的值给出加热控制寄存器heat赋值;
在制冷模式状态下,根据flag的值给制冷状态寄存器cool赋值。
cpu还将设置温度与设置温度范围比较,将比较结果标志存在报警寄存器flag_high(超上界寄存器)和flag_low(超下界寄存器)。
cpu还将室温和设定温度分别存放在室温寄存器和设定温度寄存器中。
最后,cpu将寄存器的值通过各端口输出。
各锁存器将数据锁存后在时钟信号的作用下将锁存信号输出给译码器,译码器再把BCD码转换成数码管显示的高低电平,数码管显示出室温和设置温度。
Led灯接到有效信号后点亮,指示设定温度是否越界(led_settoohigh表示设置温度过高;
led_settoolow表示设置温度过低)。
三各单元电路设计:
1、cpu设计
cpu框图如下:
disp_outx:
室温十位输出显示
disp_outy:
室温个位输出显示
disp_outa:
设置十位输出显示
disp_outb:
设置个位输出显示
cool:
制冷输出信号
heat:
加热输出信号
led_settoohigh:
设定温度超越上限报警
led_settoolow:
设定温度超越下限报警
x:
室温十位输入
y:
室温个位输入
a:
设定温度十位输入
b:
设定温度个位输入
mod:
用户加热制冷模式选择
clk:
时钟脉冲
flag:
室温和设置温度比较标志位寄存器
flag_high:
设置温度超越上界标志位寄存器
flag_low:
设置温度超越下界标志位寄存器
2、按键(key)设计
按键(key)框图如下:
seta输出温度设定十位
setb输出温度设定个位
add设定温度加一
down设定温度减一
clk时钟信号
reset复位信号(用于寄存器赋初值)
3、锁存器设计
锁存器框图如下:
data:
锁存数据输入
qout:
锁存数据输出
clk:
时钟信号
4、译码器设计
译码器框图如下:
D4:
译码器BCD码输入信号
a,b,c,d,e,f,g:
译码器输出信号(输入给数码管)
四模拟仿真验证及结果分析:
因整体仿真验证结果不易说明效果,故将各模块仿真结果予以分析。
1、cpu仿真结果
cpu仿真结果如图:
分析:
前两个周期,用户模式为加热模式(mod=1)室温<
设定温度,加热(heat=1);
5~6周期用户模式为制冷(mod=0),室温>
设定温度,制冷(cool=1);
第7~9周期设置温度<
20度,超越下界报警(led_settoolow=1);
第10~12周期,设置温度>
39度,超越上界报警(led_settoohigh=1)。
2、键盘仿真结果
键盘仿真结果如图:
前2周期,reset=1,设置温度被设为26度,第5~10周期,add=1,设置温度每周期递增一;
第12~20周期down=1,设置温度每周期递减一,21~27周期,没有增加和减少信号,温度稳定在24度。
3、锁存器仿真结果
锁存器仿真结果如图:
如图,在每个时钟的上升沿将data中数据从qout输出。
4、译码器仿真结果
译码器仿真结果如图:
D4输入8时,abcdefg为:
1111111,D4输入为7时,abcdefg为:
1110000,符合数码管显示规则。
下图为整个顶层结果仿真图(部分),仅供参考:
五总结体会:
在这次课程设计的过程中,遇到了很多的问题;
但也学习到了很多平时上课不曾接触到的东西、不懂的知识。
了解到了具体的大工程是如何生成的、进一步掌握并熟悉了verilogHDL语言,同时也学会了同学之间相互的团结和协作。
通过本次课程设计,我懂得一个工程,必须先要有一个总体的方案,心中要明确设计的目的,如何才能达到这个目的;
然后划分模块,将复杂抽象的问题具体简单化;
接着逐个设计每个模块,调试,分析,再调试,直到完成各个模块的要求为止;
最终,将各个模块整合起来,完成整体模块,完成工程设计。
可谓受益匪浅……。
附录:
程序源代码
/*温度控制cpu*/
//disp_outx室温十位输出显示
//disp_outy室温个位输出显示
//disp_outa设置十位输出显示
//disp_outb设置个位输出显示
//cool制冷输出信号
//heat加热输出信号
//led_settoohigh设定温度超越上限报警
//led_settoolow设定温度超越下限报警
//x室温十位输入
//y室温个位输入
//a设定温度十位输入
//b设定温度个位输入
//mod用户加热制冷模式选择
//clk时钟脉冲
//flag室温和设置温度比较标志位寄存器
//flag_high设置温度超越上界标志位寄存器
//flag_low设置温度超越下界标志位寄存器
modulecpu(disp_outx,disp_outy,disp_outa,disp_outb,cool,heat,led_settoohigh,led_settoolow,x,y,a,b,mod,clk);
output[3:
0]disp_outx,disp_outy,disp_outa,disp_outb;
outputcool,heat,led_settoohigh,led_settoolow;
input[3:
0]x,y,a,b;
inputmod,clk;
reg[3:
reg[1:
0]flag;
regflag_high,flag_low,cool,heat,led_settoohigh,led_settoolow;
always@(posedgeclk)
begin
begin/*设定温度上下界标志位判断*/
if(a>
=4)
begin
flag_high=1;
flag_low=0;
//flag_high=1设定温度超出上界
end
elseif(a<
2)
flag_low=1;
//flag_low=1设定温度超出下界
flag_high=0;
else
flag_low=0;
flag_high=0;
//flag_low=0flag_high=0设定温度在正常范围内
end
begin/*室温与设置温度比较标志位判断*/
if(x>
a)
flag=2'
b01;
//flag=01室温高于设定温度
elseif(x<
a)//flag=10室温低于设定温度
b10;
else
if(y>
b)
flag=2'
elseif(y<
else
b11;
//flag=11室温等于设定温度
begin/*制冷、加热输出寄存器赋值*/
if(mod)
begin//mod=1加热模式下
if((flag==2'
b01)||(flag==2'
b11))
begin
heat=0;
//停止加热
cool=0;
end
elseif(flag==2'
b10)
begin//加热
heat=1;
else//mod=0制冷模式下
b10)||(flag==2'
//停止制冷
b01)
cool=1;
//制冷
end
begin/*显示、报警输出寄存器赋值*/
if(!
flag_high&
&
!
flag_low)//室温和设定温度显示寄存器赋值
disp_outx=x;
disp_outy=y;
disp_outa=a;
disp_outb=b;
led_settoohigh=0;
//led_settoohigh=0led_settoolow=0设定温度在正常范围
led_settoolow=0;
elseif(flag_high&
flag_low)//设定温度超越上界报警寄存器赋值
led_settoohigh=1;
//led_settoohigh=1设定温度超越上界
elseif(!
flag_low)//设定温度超越下界报警寄存器赋值
led_settoolow=1;
//led_settoolow=1设定温度超越下界
end
endmodule
/*按键输入设定温度*/
//seta输出温度设定十位
//setb输出温度设定个位
//add设定温度加一
//down设定温度减一
//clk时钟信号
//reset复位信号(用于寄存器赋初值)
modulekey(seta,setb,add,down,clk,reset);
0]seta,setb;
inputadd,down,clk,reset;
always@(posedgeclkorposedgereset)
if(reset)/*寄存器赋初值*/
begin
seta=2;
setb=6;
if(add)/*寄存器加一*/
begin
if(setb==9)
setb=0;
seta=seta+1;
setb=setb+1;
elseif(down)/*寄存器减一*/
if(setb==0)
begin
setb=9;
seta=seta-1;
end
else
setb=setb-1;
/*4位锁存器*/
//qout输出信号
//data输入信号
modulesuocunqi(qout,data,clk);
0]qout;
0]data;
inputclk;
0]qout;
always@(clkordata)
begin
if(clk)
qout=data;
//在时钟信号作用下输出信号
end
(2)辨识和分析评价对象可能存在的各种危险、有害因素,分析危险、有害因素发生作用的途径及其变化规律。
/*7位数码管译码器*/
//a,b,c,d,e,f,g,数据输出
2.环境影响报告表的内容//D4输出数据
moduleyimaqi(a,b,c,d,e,f,g,D4);
outputa,b,c,d,e,f,g;
C.环境影响报告书input[3:
0]D4;
B.环境影响登记表rega,b,c,d,e,f,g;
always@(D4)
case(D4)
4'
d0:
{a,b,c,d,e,f,g}=7'
b1111110;
d1:
b0110000;
d2:
b1101101;
d3:
b1111001;
环境影响评价工程师课主持进行下列工作:
d4:
b0110011;
第一节 环境影响评价4'
d5:
b1011011;
d6:
b1011111;
d7:
b1110000;
规划编制单位对可能造成不良环境影响并直接涉及公众环境权益的专项规划,应当在规划草案报送审批前,采取调查问卷、座谈会、论证会、听证会等形式,公开征求有关单位、专家和公众对环境影响报告书的意见。
d8:
b1111111;
发现规划存在重大环境问题的,审查时应当提出不予通过环境影响报告书的意见;
d9:
b1111011;
default:
bx;
//输出任意态
第二节 安全预评价endcase
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 VerilogHDL 家用空调 温度 控制器 设计