一 实验要求
- 实验目的及实验内容要求
1.1 实验目的
1. 用状态机设计方法设计一个空调控制器;
2. 掌握状态机设计实现方法;
3. 进一步熟悉VIVADO环境中电路的设计仿真及综合实现方法;
4. 进一步熟悉下载方法及实验系统调试方法。
1.2 实验内容
1.VIVADO 环境下源程序的编写、编译
2.模拟仿真
3.程序下载
1.3实验要求
1. 利用状态机工作方式设计一个空调机控制器。空调机控制器有两个温度控制输入信号,两个温度调节控制输出信号,一个时钟输入信号。
2. 在完成配置程序的下载,并在EGo1开发板上对程序进行最终验证
2 实验设备或运行软件平台
Vivado 2017.4
二 实验内容及过程
1 实验设计及分析
利用状态机工作方式设计一个空调机控制器。空调机控制器有两个温度控制输入信号,两个温度调节控制输出信号,一个时钟输入信号,如下所示:
tmp_high----in温度太高
tmp_low-----in温度太低
heat-----------out加热
cool-----------out降温
clk------------时钟信号
其状态转移图如图所示:
编译文件:
module shiyan5(
input wire clk,
input wire clr,
input wire tmp_high,
input wire tmp_low,
output reg heat,
output reg cool
);
reg [1:0] present_state,next_state;
parameter just_righ= 2'b00, too_cold= 2'b01, too_hot= 2'b10; // states
//状态寄存器
always @(posedge clk or posedge clr)
begin
if( clr == 1)
present_state <=just_righ;
else
present_state <= next_state;
end
//C1模块
always @(*)
begin
case(present_state)
just_righ:if(tmp_high==1)
if(tmp_low ==1)
next_state<= just_righ;
else
next_state<= too_hot;
else if(tmp_low==1)
next_state <= too_cold;
else
next_state <= just_righ;
too_hot: if(tmp_low== 1)
if(tmp_high==1)
next_state<= just_righ;
else
next_state <= too_cold;
else if(tmp_high==0)
next_state <= just_righ;
else
next_state <= too_hot;
too_cold: if(tmp_high==1)
if(tmp_low ==1)
next_state<= just_righ;
else
next_state <= too_hot;
else if(tmp_low==0)
next_state <= just_righ;
else
next_state <= too_cold;
default: next_state <= just_righ;
endcase
end
//C2模块
always @(*)
begin
if(present_state ==just_righ)
begin cool<=1'b0; heat<=1'b0;end
else if (present_state ==too_hot)
begin cool<=1'b1;heat<=1'b0;end
else if (present_state==too_cold)
begin cool<=1'b0; heat<=1'b1;end
else
begin cool<=1'b0;heat<=1'b0;end
end
endmodul
仿真文件:
module test;
reg clk;
reg clr;
reg tmp_high;
reg tmp_low;
wire heat;
wire cool;
shiyan5 uut(clk,clr,tmp_high,tmp_low,heat,cool);
initial begin
clk=0; clr=0;tmp_low=0;tmp_high=0;
end
always #10 clk=~clk;
always #100 tmp_high=~ tmp_high;
always #200 tmp_low=~ tmp_low;
endmodule
约束文件:
set_property PACKAGE_PIN P17 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN P5 [get_ports clr]
set_property IOSTANDARD LVCMOS33 [get_ports clr]
set_property PACKAGE_PIN N4 [get_ports tmp_high]
set_property IOSTANDARD LVCMOS33 [get_ports tmp_high]
set_property PACKAGE_PIN R1 [get_ports tmp_low]
set_property IOSTANDARD LVCMOS33 [get_ports tmp_low]
set_property PACKAGE_PIN J2 [get_ports heat]
set_property IOSTANDARD LVCMOS33 [get_ports heat]
set_property PACKAGE_PIN K2 [get_ports cool]
set_property IOSTANDARD LVCMOS33 [get_ports cool]
仿真波形:
分析:利用状态机工作方式设计一个空调控制器,clk是时钟信号,clr是复位信号,两个输入为tmphigh(温度太高)和tmplow(温度太低),两个输出为heat(加热)和cool(降温)。输入为00时,表示既不热也不冷,不需要加热或制冷,输出为00。输入为10,表示温度太高,需要制冷,输出01。输入为01,表示温度太低,需要加热,输出10。输入为11时,是一个有误的状态,回到初始的状态,输出为00
EGO1开发板:
分析:SW0-R1和SW1-N4为两位输入,分别代表tmp_low和tmp_high,SW7-P5为复位键,输出LD2_1为加热显示,LD2_0为制冷显示。当SW0-R1置1时,LD2_1亮起;当SW1-N4置1时,LD2_0亮起;当把SW7-P5置1时,系统回到初始状态00,LED不亮;当SW0-R1和SW1-N4均置1时,LED不亮。
开关键状态 | 发光二极管状态 | |||
SW7 | SW1 | SW0 | LD2_1 | LD2_0 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 0 |
将表中的实验结果与仿真中的波形图进行对比,结果一致,符合设计要求。