zoukankan      html  css  js  c++  java
  • 状态机学习

         手头接手的项目是利用FPGA进行图像的采集、存储、处理和传输。项目接手有近一年了,现在回过头来总结下。

         存储采用了外部的SRAM。一开始就按自己的思路设计SRAM读写控制器,中间采用过黑金推荐的仿顺序操作实现控制,这方法挺好理解,接近于状态机。但是后来发现,这个方法不是很好,网上和师兄都不推荐,个人也觉得是作者的一种状态机风格,并不一定适合自己。所以,后来开始接触状态机。状态机的学习走了很多弯路,自己参考了《设计与验证》这本书中“如何写好状态机”这一章、Clifford E. Cummings(他网站上的文章可以好好拜读下http://www.sunburst-design.com/papers/)关于状态机的几篇文章和foreveryoung的“状态机设计”。

         总结下,状态机推荐使用二段式和三段式。二段式中,第一段时序逻辑,负责状态的转移;第二段组合逻辑,负责状态转移条件判断和状态输出。三段式中,第一段和二段式一样为时序逻辑,负责状态的转移;第二段组合逻辑,负责状态转移条件判断;第三段时序逻辑,次态寄存器控制状态输出。目前我的项目中,基本使用的是二段式的状态机,有一个模块是三段式的风格,但是在第二段中也有状态输出,有点混合二段式和三段式的感觉(心里还是有点不踏实)。前段时间调试没有结果,怀疑文献所述的二段式状态输出有毛刺。故对二段式进行ModelSim仿真,确实可以看到有些信号有毛刺存在,后来发现不是这个原因,就没有再关注,这个还有待注意。我想,在同步电路设计下,如果时序通过、功能实现这点毛刺还是可以允许的。

    有几个注意点:

    1. 在SRAM控制中,使用了锁存器,地址数据线共用。为了完成SRAM的准确控制,适当增加了状态机状态数进行等待。但这也影响了读写速度,还需完善,看看能否减少状态数。

    2. 外部信号进入状态机进行两级同步。

    3. 在验证自己的状态机时序时,结合内部逻辑分析仪SignalTap抓数据,可保证时序的正确。

    4. 无论两段式还是三段式,在case前增加了所有状态的默认输出。这样保证不会产生额外的锁存器,如果状态输出需要改变,则在case下相应状态后更改输出。

  • 相关阅读:
    点击按钮显示隐藏层 和 切换按钮同时显示多个隐藏层
    CSS3混合模式background-blend-mode
    阿里云服务器出现Warning: Cannot modify header information
    谷歌浏览器,添加默认搜索引擎的搜索地址
    常用的php数组函数
    array_map,array_filter,array_walk区别
    当一个按钮点击不了时,鼠标可以自定义的样式
    滚动到页面底部触发分页事件
    表单提交,不合法表单元素标签的高亮、页面上滚到某一个元素的位置
    表单提示输入,边框颜色渐变
  • 原文地址:https://www.cnblogs.com/aikimi7/p/3352514.html
Copyright © 2011-2022 走看看