1,单always块结构(一段式):
always @(posedge clk ) begin
case(FSM)
st0;begin
out0;//输出
if(case0) FSM<=st1;//状态转移
end
st1;begin
out1;//输出
if(case0) FSM<=st2;//状态转移
end
……
default:
endcase
end
单always块把组合逻辑和时序逻辑放在一个时序always块描述。输出时为寄存器输出,所以无毛刺。但是这种方式会产生多余的触发器(因为把组合逻辑也放在时序逻辑中实现),而且代码难以修改调试。但对于那些简单的状态机,一段式还是不错的,因为它把输入,转移,输出一起体现,更方便理解。但是对于复杂状态机就是灾难了,所以最好还是养成不使用该结构的习惯。
 
双always块结构(两段式):
//时序逻辑,这段一般是不变的,描述从现态转移到次态
always @ (posedge clk) begin
current_state<=next_state;
end
 
//组合逻辑,包括转移条件以及状态内容(即输出)
always @ (*) begin
case(current_state)
st0:begin
out0;
if(case0) FSM=st1; //组合逻辑使用阻塞语句
end
st1:begin
out1;
if(case1) FSM=st2;
end
……
endcase
end
二段式中,一个always块采用同步时序描述状态转移;另一个采用组合逻辑判断转移条件,以及描述输出。二段式便于阅读,理解和维护,有利于综合器优化代码。但是由于采用的是组合逻辑输出,容易产生毛刺,且不利于约束,也不利于综合器和布局布线器实现高性能设计。
 
三always块结构(三段式):
 
//第一个always块,时序逻辑,描述现态转移到次态
always @ (posedge clk negedge rst_n) begin
if(!rst_n)  current_state<=IDLE;
else      current_state<=next_state;
end
 
//第二个always块,组合逻辑,描述状态转移的条件
always @ (current_state) begin
case(current_state)
s1:if(……) next_state=s2;//组合逻辑,采用阻塞赋值
……
endcase
end
 
//第三个always块,时序逻辑,描述输出
always @ (posedge clk negedge rst_n) begin
case(next_state) //这里有的是next_state,有的是current_state,需根据电路要求
s1: out1<=……;
s2: out2<=……;
default:……
endcase
end
三段式结构中,2个时序always块分别用来描述现态逻辑转移,及输出赋值。组合always块用于描述状态转移的条件。这种结构是寄存器输出,输出无毛刺,而且代码更清晰易读,特别是对于复杂的状态机来说,但是消耗的面积也更多点。这是一种比较流行的状态机结构。

verilog状态机的三种写法相关推荐

  1. Verilog状态机常见三种写法

    1.1理论   Verilog状态机又称同步状态机(FSM,Finite State Machine),一般又叫状态机,在Verilog描述电路中大部分是同步执行(并行)的,但是很多时候需要处理明显具 ...

  2. verilog中状态机的三种编码方式的比较(二进制码、独热码、格雷码)

    最近做了一个小项目,是关于状态机中三种编码方式的比较,总结了一下三种编码方式的不同,可以会在以后IC笔试面试过程中用到,简单记录一下三种编码方式的优缺点. 三种编码方式如下图所示:其中独热码只有一位为 ...

  3. CSS伪类的三种写法

    今天逛蓝色时,无意发现了有人讨论伪类的正确写法,让我对伪类的认识也更清晰了,转贴于此,以备日后查询(原贴当时没记下地址,已经记不得了) Code <style> a.tb{text-dec ...

  4. Promise的链式调用三种写法,Promise.all与式调用

    Promise的链式调用三种写法: // 1,Promise原始链式调用 new Promise((resolve, reject) => {setTimeout(() => {conso ...

  5. android 闪屏页处理_Android应用闪屏页延迟跳转的三种写法

    闪屏页也称之为欢迎页.在打开一个App时,我们第一眼看到的往往是一个闪屏页面,之所以叫闪屏页,是因为它出现之后会短暂地停留几秒钟再跳转到其他页面.闪屏页除了使用户体验更好外,还能给app留出初始化数据 ...

  6. vue2.0模板的三种写法

    vue2.0中的模板有三种写法,根据不同的需求运用不同的方法来实现 1. <!DOCTYPE html> <html lang="en"> <head ...

  7. JavaScript的三种写法

    1.2-JavaScript的三种写法 1-复习CSS代码的三种写法 1.外联样式:写在css文件中,使用link导入 <link rel="stylesheet" href ...

  8. SpringMVC框架|Handler处理器的三种写法

    文章目录 一.SpringMVC中的处理器 1.SpringMVC开发方式 2.Servlet原生开发方式 3.开发中常用的方式 一.SpringMVC中的处理器 配置完SpringMVC的处理器映射 ...

  9. JS面向对象的三种写法

    欢迎来我的博客交流 /*面向对象的三种写法 *1.构造函数 *2.class类 * 2.直接操作对象 * */ /**/function myShow(name){this.name = name;t ...

最新文章

  1. CentOS7配置iptables防火墙
  2. C++内联函数学习总结
  3. 计算机二级c语言2021年重点内容,2021年5月计算机二级C语言试题(总)
  4. mysql 数据库连接不够_(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例...
  5. 生成内核版本号头文件的方法
  6. php登录实现session记住密码,利用php实现一周之内自动登录存储机制(cookie、session、localStorage)...
  7. GCC编译器的使用方法
  8. SRSniffer抓包工具的使用
  9. python下载网络图片_Python下载网络图片方法汇总与实现
  10. 金山Wps珠海实习杂记(一)
  11. 学计算机编程难吗,编程真的很难吗?为什么会认为学编程难?
  12. Excel无法打开文件新建 XLSX 工作表.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏解决办法【笔记】
  13. 任意分布的随机数的产生方法
  14. 避免lammps弛豫出错的一个小技巧
  15. 【智能硬件】RV1126 CE 板软件指导
  16. linux桌面版下载官网下载软件,Ubuntu桌面版 64位
  17. 电子教室终结者 一键结束电子教室和机房管理助手
  18. python中可能遇到的简答题_python期中考试试卷 -
  19. Photoshop 2021 Win10系统总安装失败,打不开,501错误等,如何解决安装教程!
  20. 电路实验一阶电路误差分析_实验室建设电路要综合多方面因素

热门文章

  1. Variant数据类型
  2. java 导出csv文件通过web下载
  3. 高精度电流源如何设计出来
  4. 月记 18.11.08
  5. 微信又确定全新封号标准!触犯这几条底线将被永久封号,望周知
  6. 用bat批量处理数据
  7. 【LintCode 题解】小米面试算法题:搜索旋转排序数组
  8. 互联网公司面试题以及范围
  9. Python+OpenCV 调用手机摄像头并实现人脸识别
  10. MySQL日志 - Error Log错误日志