有限状态机设计实例之空调控制器(Verilog HDL语言描述)(仿真与综合)(附用Edraw(亿图)画状态转移图)
目录
前言
空调控制器
简介
状态转移图如下:
Verilog HDL语言描述
测试文件
仿真图
ISE综合
RTL Schematic
Technology Schematic
前言
关于工具的使用,这两天我比较重视,因为我想找到一些替代手工的工具来帮助画图,昨天无意间发现了画时序图的工具(WaveDrom),觉得十分的好用,因此写了一篇博文,专门的介绍,用了两个案例介绍了如何使用。见博文:对如何使用WaveDrom画波形图的研究(案例分解分析)。
今天想专门清理下有限状态机的相关知识,这其中就需要画状态转移图,于是又寻思寻找一个画状态转移图的工具,我知道的有Visio,可是我不想用这个软件,找了好几个,最终选择了Edraw(亿图),还挺方便,简单实用。
于是就用这个案例,一个简单的空调控制器来认识一下有限状态机,工作原理直接由状态转移图给出,状态转移图直接由Edraw来画出 。这个空调控制器由Verilog HDL来描述,通过Modelsim进行功能仿真,然后用ISE来综合出RTL Schematic以及Technology Schematic。
用亿图画状态转移图
首先直接给出成品:
感觉还算美观哈。
软件的界面还算美观,直观:
画状态转移图时,选择流程图中的数据流程图,然后点击创建即可,里面的东西一用就会。
空调控制器
简介
下面用Verilog HDL语言描述一个简单的空调控制系统。整个系统由时钟控制,是一个带有异步复位的上升沿触发系统,该控制系统控制空调的三个状态,分别为:well_situated(10)、too_high(00)、too_low(01)。
当空调处于某种状态时,通过输入不同的high和low值控制空调的状态转移,在每种状态下对应不同的输出cold和heat值。
状态转移图如下:
Verilog HDL语言描述
//a simple aircondition control system descripted by Verilog HDL
module aircondition(clk,rst,high,low,heat,cold);input clk,rst,high,low;
output heat,cold;
reg heat,cold;reg [1:0] pr_state,next_state;parameter too_high = 2'b00;
parameter too_low = 2'b01;
parameter well_situated = 2'b10;always@ (posedge clk or posedge rst)
beginif(rst)pr_state <= well_situated;elsepr_state <= next_state;endalways@ (pr_state or high or low) //空调的下一个状态取决于当且状态以及high或low的取值
beginnext_state = 2'bxx;cold = 1'b0; heat = 1'b0;case(pr_state) //空调的下一个状态取决于当且状态以及high或low的取值well_situated: //如果当且状态为well_situatedbegincold = 1'b0; heat = 1'b0;if(high == 1'b1)beginnext_state = too_high;cold = 1'b1; heat = 1'b0;endif(low == 1'b1)beginnext_state = too_low;cold = 1'b0;heat =1'b1;endendtoo_high: //如果当且状态为too_highbegincold = 1'b1; heat = 1'b0;if(high == 1'b1)beginnext_state = too_high;cold = 1'b1;heat = 1'b0;endelsebeginnext_state = well_situated;cold = 1'b0;heat = 1'b0;endendtoo_low: //如果当前状态为too_lowbegincold = 1'b0;heat = 1'b1;if(low == 1'b1)beginnext_state = too_low;cold = 1'b0;heat = 1'b1;endelsebeginnext_state = well_situated;cold = 1'b0;heat = 1'b0;endenddefault:next_state = well_situated;endcase
endendmodule
测试文件
// 测试文件
`timescale 1ns/1ps
module aircondition_tb;reg clk, rst;
reg [1:0] pr_state, next_state;
reg high,low;
wire cold,heat;//时钟
always
begin#10 clk = ~clk;
endinitial
beginclk = 1'b0;rst = 1'b1; //复位信号有效,系统复位,当前状态为well_situated90(00),heat=0,cold=0#50 high = 1'b1; low = 1'b0; //此时处于复位状态,但high = 1, low = 0;#10 rst = 1'b0; //复位信号无效#50 high = 1'b0; low = 1'b0; #200 high = 1'b1; low = 1'b0; #200 high = 1'b0; low = 1'b1; #200 high = 1'b0; low = 1'b1; endaircondition u1(.clk(clk), .rst(rst), .high(high), .low(low), .heat(heat), .cold(cold));endmodule
仿真图
认真分析下这个仿真波形图,会发现符合状态转移结果,设计成功。
ISE综合
RTL Schematic
展开后
Technology Schematic
情绪有点不好,就这样吧,心里有点难受。
有限状态机设计实例之空调控制器(Verilog HDL语言描述)(仿真与综合)(附用Edraw(亿图)画状态转移图)相关推荐
- 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)
目录 前言 原理 Verilog HDL程序设计 测试代码 仿真波形图 ISE综合后 RTL Schematic Technology Schematic 前言 本博文用Verilog HDL语言描述 ...
- 级联模60计数器(Verilog HDL语言描述)(仿真与综合)
目录 前言 模60计数器 Verilog HDL语言描述 测试文件 仿真波形 RTL Schematic Technology Schematic 前言 看这篇文章前,推荐先看看模10计数器和模6计数 ...
- 通过仿真和综合认识T触发器(Verilog HDL语言描述T触发器)
这个系列的博文已经写过了两篇,分别是通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)和通过仿真和综合认识JK触发器(Verilog HDL语言描述JK触发器),分析的方法是完全并行 ...
- 通过仿真和综合认识JK触发器(Verilog HDL语言描述JK触发器)
上篇博文写了用仿真和综合来认识D触发器(通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)),这篇博文采用完全并行的方式来认识JK触发器. 让我们迅速进入正题吧. J-K触发器的Ve ...
- 数字时钟计数器(Verilog HDL语言描述)(仿真和综合)
目录 前言 主题 Verilog HDL设计代码 测试代码 仿真波形 ISE中综合 RTL Schematic Technology Schematic 前言 数字时钟计数器和我的前一篇博文:级联模6 ...
- 通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)
目录 前言 硬件语言描述 测试文件 仿真图 综合工具综合后的原理图 综合介绍D触发器 维基百科介绍: 其他来源(课本): 8位的D触发器 Verilog HDL程序设计 测试文件: 仿真波形: 综合工 ...
- 模6计数器以及模10计数器(Verilog HDL语言设计)(Modelsim仿真与ISE综合)
目录 前言 模6计数器 Verilog HDL语言描述 测试文件 仿真电路图 RTL Schematic Technology Schematic 模10计数器 Verilog HDL语言描述 测试文 ...
- spwm控制算法c语言实现,采用Verilog HDL语言与DDS技术实现SPWM控制算法的FPGA设计
其部分程序代码如下: case(state1) A: //初始化状态 begin ADDRES1<=addr1; //时分复用第一路地址 READ_EN<=1′b1; //读使能开 NEX ...
- Verilog HDL 语言基础
目录 前言 一.Verilog HDL模块基本结构 1.模块声明&端口定义&数据类型声明 二.数据类型 1.信号状态 2.整数 2.1.标准形式 2.2.补充 3.实数 4.字符串 三 ...
最新文章
- 观点 | 哈哈,TensorFlow被吐槽了吧
- 从“IBM刀片服务器广告告别电视”说起
- springmvc @PathVariable注解进行传参操作
- Linux基本操作指南
- 研究生从事学术研究的20条法则:导师错的时候不多!
- sihpostreboot关闭没有权限_安卓保护隐私,给APP一次性的权限
- python 字符串转换
- webclient对reactor-netty的封装
- 类中定义接口-匿名内部类
- 《power BI 视频7》六合一图表案例
- 自然资源部标准地图底图转矢量Shapefile并配准
- hp probook fn_如何在HP ProBook(或兼容笔记本电脑)上安装Mac OS X Lion
- python3下载m3u8转mp4_Python3爬虫通过m3u8文件下载ts视频 Python爬虫
- 专升本C语言习题知识点笔记
- c语言中内存分配方式
- javaSE开发智能问答机器人项目
- Mac OS X 背后的故事(三)Mach之父Avie Tevanian
- Hive获取周月时间
- 区块链大繁荣背后:我们需要引入「预言机」| 专访DOS团队
- 论文解读|2020TPAMI|Deep High-Resolution Representation Learning for Visual Recognition
热门文章
- [文档].艾米电子 - 二进制计数器及其变体,Verilog
- 顶级Java多线程面试题及回答
- java sort算法名称_快速排序算法(Quick Sort)(java)
- linux git2.8.0下载,Linux 环境下 jdk1.8 maven3.2.3 Git2.8.0 安装脚本
- java 文件md5校验_Java 获取 文件md5校验码
- 第十六届智能车竞赛总决赛线上比赛赛道设计
- 第一次使用考试宝进行作业练习
- 2021年春季学期-信号与系统-第二次作业参考答案-第三小题
- pyBoard 基于MicroPython开发STM32FXX单片机
- 微波人体感应模块 24G 24.125g 感应开关微波传感器模块