状态机篇

一、先科普

状态机是verilog开发者绕不过去的坎,复杂的控制逻辑一般都需要用到状态机。

一般常见的状态机有 一段式、两段式、三段式状态机。

这里以常规三段式状态机为例,做简要分析。写过状态机的猿的都知道,常规套路:一段状态实际转移。 一段状态转移条件,另一段是每个状态干的活。

一般状态机,假如说,不涉及到反馈,那么一般状态机写法就可。以下时序图为例。sta1信号到来后,状态机被激活,nx_status 立刻变成s1(纯组合逻辑)。时钟沿采集到sta1后,状态机从s0跳转到s1。在下一个时钟沿采集到状态status是s1后,开始干活,拉起了axi_awvalid和axi_walid信号。

这里会有一个问题,假如说,每个状态都干相应的活,而干活的结果,不需要反馈。那么状态机这种写法一点问题都没有,前一个时钟状态转移,下一个时钟开始干活。干活时刻 落后状态转移一个clk。没什么问题,所有的问题都是线性流水的,并朝着一个方向走的。

这里必须注意: axi_awvalid、axi_walid信号和状态转移信号sta1、sta2 不会有逻辑有交集,不会出现再同一个时刻采集(axi_awvalid & sta1)等这种情况。因为你状态转移的变量和axi_awvalid、axi_walid 一点关系都没有,也不依赖于axi_awvalid、axi_walid 对后面造成的影响。

二、坑货解析

假设这里,状态转移的条件与后面axi_awvalid、axi_walid有关,那么这么写就有问题。例如拉起来axi_awvalid 和axi_walid信号,需要对端送过来相应的ready信号,并采集到valid&ready信号,状态才能转移,如果对端没有ready信号过来,我们需要keep住valid和data信号。也就是说,没法在时钟采集到status 在sta1状态后,再干活,然后等结果出来后,换下一个状态。

我们在进入sta1后,立刻将valid信号拉上去,而不是说采集到sta1状态后再拉上去。这样干活提前一拍。 由于提前一拍干活,下一拍就可以根据干的活结果如何确定,跳到哪个状态上去。这里加入sta2就是对面过来的ready信号。那么我们看到valid和ready握手成功,则status在下一拍直接进入s2状态。

总结:如果状态转移条件与当前状态需要干的活的结果有关,那么用传统状态机不行。需要提前一拍干活。

也就是说,当前状态指示当前状态干的活。 某个时钟沿,使得sta跳到当前状态,那么这个时钟沿后也要开始干活。干活这状态是同步的。 不像以前,采集到进入这个状态后,才开始干活。这样会慢一拍。

多FIFO操作

关于Verilog 写法相关推荐

  1. 状态机的Verilog写法

    "硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的 ...

  2. Clk Gating的verilog写法及简析-基础小知识(六)

    文章目录 1.2 clk gating 参考文档 clk gating主要用于低功耗,本文主要从verilog的使用方法上进行介绍,仅供参考.~~~ 1.2 clk gating 原理为clk_en使 ...

  3. 计数器的Verilog写法

    计数器是非常基本的使用,没有计数器就无法处理时序.我在学习时发现市面上有几种不同的计数器写法,非常有趣,在此记录下来: 一.时序逻辑和组合逻辑彻底分开(by锆石科技FPGA教程) 1.代码 1 //= ...

  4. verilog 有限状态机的基本概念和三种写法介绍

    "硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的 ...

  5. Verilog中的有限状态机

    什么是状态机: 状态机是由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定操作的控制中心: 有限状态机(Finite State Machin ...

  6. verilog状态机 三段式 状态机 (代码 可以运行)

    代码在git link "硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想 ...

  7. 关于FPGA中有符号数表示方法的一些认识

    有符号数的2进制表示方法是:最高位表示符号位,'1'表示负数,'0'表示正数. 通常负数以补码的形式出现.例如一个4bit数,首先它能够表示的有符号数的范围从-8~7.-8的二进制补码值为4'b100 ...

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

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

  9. 回字有四种写法,阶乘verilog实现有几种方法?

    回字有四种写法,阶乘verilog实现有几种方法? 方式一:普通方式实现阶乘计算: verilog代码: module tryfact; function[31:0]factorial; input[ ...

最新文章

  1. android 跑分软件,跑分软件安兔兔公布了6月份Android手机性能榜TOP10
  2. 基于动态代码生成技术的动态对象工厂
  3. 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))
  4. Java 多线程(三) 线程的生命周期及优先级
  5. C++11并发之std::thread
  6. Visual Studio 2010快捷键大全
  7. redis配置文件中常用配置详解
  8. 基于Retrofit框架的金山API翻译功能案例
  9. 北京智和信通企业级网络流量监控方案
  10. 26 | 产品安全方案:如何降低业务对黑灰产的诱惑?
  11. 美国林肯学院因遭勒索软件攻击后不堪重负被迫关闭
  12. 基于java+Mysql的志愿者管理系统代码分享
  13. 什么是值传递,什么是引用传递
  14. 【Python】Python下载及安装(windows系统)
  15. 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
  16. UBT7:ubuntu安装navicat15
  17. 游戏汉化技术内幕 第2章解包封包
  18. 二阶龙格库塔公式推导_[数学]龙格-库塔法
  19. win10+ubuntu18.04lts:在已安装win10环境中利用EasyBCD引导安装Ubuntu
  20. 微软官方工具_英文写作在线工具推荐:微软官方免费打分评改网站微软小英

热门文章

  1. 5110. 近义词句子
  2. 贯入用计算机怎样换算,标准贯入试验的应用及其杆径换算的研究.doc
  3. Macbook Pro上手手札
  4. 新的深度学习优化器Ranger: RAdam + LookAhead的协同组合,两者兼得。
  5. Linux通过Nodejs的IPP库实现自动定时打印
  6. 全网热议的云原生技术到底什么?看完这25点你就知道了
  7. 全球与中国自行车驱动系统市场战略模式及投资方向建议报告2021年版
  8. pycharm创建django项目及开发初准备
  9. java葱_Java程序设计_网课答案
  10. 零基础能不能学习web前端开发?【爱创课堂专业前端培训】