博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【基本知识】FMS有限状态机设计
阅读量:5058 次
发布时间:2019-06-12

本文共 2837 字,大约阅读时间需要 9 分钟。

  有限状态机是Verilog中十分基本也是十分重要的知识。本文对有限状态机做了一个简单介绍。

 

1.状态机三要素

  有限状态机具有三个要素:状态跳转、跳转判断、状态操作;

  1)状态跳转:现态跳转到次态;

  2)跳转判断:状态跳转的判断条件;

  3)状态操作:状态对应的操作;

 

2.状态机的实现方式

  1)一段式:状态机三要素集成于一个 always 块中。

1     always@(posedge clk or negedge rst_n) 2     begin 3       if(!rst_n)begin 4         state <= 2'b00; 5         Qout <= 1'b0; 6       end 7       else case(state) 8         2'b00: begin 9           if(A)begin10             state <= 2'b01;11             Qout <= 1'b1;12           end13           else begin14             state <= 2'b00;15             Qout <= 1'b0;16           end17         end18         2'b01: begin19           if(!A)begin20             state <= 2'b00;21             Qout <= 1'b0;22           end23           else begin24             state <= 2'b01;25             Qout <= 1'b1;26           end27         end28         default:;29       endcase30     end
FMS_ONE

  2)二段式:状态机三要素分别设计于两个 always 块。

1     always@(posedge clk or negedge rst_n) 2      begin 3        if(!rst_n) 4          state <= 2'b00; 5        else case(state) 6          2'b00: begin 7            if(A) 8              state <= 2'b01; 9            else 10              state <= 2'b00;11          end12          2'b01: begin13            if(!A)14              state <= 2'b00;15            else16              state <= 2'b01;17          end18          default:;19        endcase20      end21  22           always@(posedge clk or negedge rst_n)23      begin24        if(!rst_n)25          Qout <= 1'b0;26        else case(state)27          2'b00: Qout <= 1'b0;28          2'b01: Qout <= 1'b1;29          default:;30        endcase31      end
FMS_TWO

  3)三段式:状态机三要素分别于三个 always 块。

FMS_THREE
1     always@(posedge clk or negedge rst_n)//状态跳转 2     begin 3       if(!rst_n)     4                 current_state <= 2'b00;     //复位 5       else  6                 current_state <= next_state//在时钟上升沿刷新现状态 7     end 8  9         always@(current_state)          //跳转判断                    10     begin11             case(current_state)12                 2'b00:begin13                     if(A)14                         next_state = 2'b01;15                     else16                         next_state = 2'b00;17                 end18                 2'b01:begin19                     if(!A)20                         next_state = 2'b00;21                     else22                         next_state = 2'b01;23                 end24                 default:;25     end26 27         always @ (*)                     //状态操作 28         begin29             case(current_state)30                 2'b00:Qout <= 1'b0;31                 2'b01:Qout <= 1'b1;32                 default:;33             endcase34         end

 

3.状态机设计要求

  1)根据设计需求选择合适的风格;

  2)case语句中都应加入default语句;

  3)巧加DFF中继,提高可靠性;

  4)课采用独热编码、格雷码设计状态;

  5)记得采用全局复位;

转载于:https://www.cnblogs.com/yjw951012/p/10964420.html

你可能感兴趣的文章
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
struts2中<s:form>的应用
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>
python与 Ajax跨域请求
查看>>
Java实体书写规范
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
六、PowerDesigner 正向工程 和 逆向工程 说明
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
贪吃蛇游戏改进
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
查看>>
【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)
查看>>
在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
UWP: 掌握编译型绑定 x:Bind
查看>>
asp.net core系列 35 EF保存数据(2) -- EF系列结束
查看>>