实验5 状态机设计法

一 实验要求

  1. 实验目的及实验内容要求

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

将表中的实验结果与仿真中的波形图进行对比,结果一致,符合设计要求。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值