状态机

FPGA三段式状态机的思维陷阱

用三段式描述状态机的好处,国内外各位大牛都已经说的很多了,大致可归为以下三点:

1.将组合逻辑和时序逻辑分开,利于综合器分析优化和程序维护;

2.更符合设计的思维习惯;

3.代码少,比一段式状态机更简洁。

对于第一点,我非常认可,后两点在Clifford E. Cummings著的(Synthesizable Finite State Machine Design Techniques Using theNew SystemVerilog 3.0 Enhancements和The Fundamentals ofEfficient Synthesizable Finite State Machine Design using NC-Verilog andBuildGates)中多次提到,我并不完全赞同,下面谈谈我的一些看法。

使用状态机设计数字电源

作者:Frederik Dostal ADI公司

数字电源可用于实现许多很有意思的功能。借助可编程调节环路,可在不同工作条件下获得更佳的环路特性。电源与完整系统的数字连接可实现电压和电流的精确监控。此外,数字电源还提供高灵活性。可以相当快的速度修改不同参数。这简化了电路设计过程并加快了系统衍生产品的开发。

当然,许多电源专家仍然对采用数字电源有一些抗拒。电源设计人员通常不是经验丰富的软件工程师。但在数字电源项目中,通常会在开发团队中增加一名软件工程师。经验表明,由电源专家和软件专家共同开发电源可能会产生一些复杂问题。

这两者之间的交流可能导致误解,并最终导致项目延期。

图形用户界面(GUI)是这种困境的一种解决方案。因为GUI可简化数字电源的编程。许多数字控制器IC供应商均提供GUI。通常,GUI的设计方式能够使电源专家直观地使用它们。图1显示了这样的图形用户界面。您可用鼠标选择电源的不同方面,在屏幕上的不同功能框图中进行不同的设置。

基于FPGA的DDR3 SDRAM控制器的设计与优化

宋明,赵英潇,林钱强 (国防科学技术大学电子科学与工程学院,湖南长沙410073

摘要:为解决超高速采集系统中的数据缓存问题,文中基于Xilinx Kintex-7 FPGA MIG_v1.9 IP核进行了DDR3 SDRAM控制器的编写,分析并提出了提高带宽利用率的方法。最终将其进行类FIFO接口的封装,屏蔽掉了DDR3 IP核复杂的用户接口,为DDR3数据流缓存的实现提供便利。系统测试表明,该设计满足大容量数据缓存要求,并具有较强的可移植性。

 随着宽带雷达技术的发展,超高速和宽带采样已成为基本要求[1],超高速采集系统需要相匹配的数据缓存设计,DDR3 SDRAM是当前最常用的高效方案[2-4]。

作者:钱 鹏1,2,苏海冰1 2015年微型机与应用第8期

摘 要: 现场可编程逻辑门阵列(FPGA)应用于图像处理时,需要对数据中的图像信息进行准确的提取。设计中,FPGA中解压缩功能需要对压缩数据中的图像信息进行提取。根据压缩格式,设计了一种基于状态机的图像信息提取模块,并且在XST(Xilinx官方综合工具)以及Synplify pro两个综合环境下进行了仿真验证。通过对比仿真结果的差异,尝试分析设计的寄存器传输级视图(RTL视图),并找出了影响状态机工作的关键要素。强调了代码风格对FPGA设计的重要性。

0 引言
  状态机是数字系统设计中的重要组成部分,是FPGA实现高效率高可靠性逻辑控制的重要途径。在实际工程应用中,状态机工作是否正常决定着系统能否稳定工作。本文设计了一个基于状态机的图像信息提取模块,通过对该设计的仿真,分析了状态机设计中的状态竞争、锁存器的引入以及综合工具误判等常见情况。强调了代码规范对于FPGA设计的重要性。

1 设计背景及思路

Verilog三段式状态机描述(转载)

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。

状态机采用VerilogHDL语言编码,建议分为三个always段完成。

三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

三段式描述方法虽然代码结构复杂了一些,但是换来的优势是:使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

示列如下:

//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器,时序部分,用于切换状态机
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n)
current_state <= IDLE; //第一个进程只有current_state 被赋值,next_state在第二个进程被赋值
else
current_state <= next_state; //注意,使用的是非阻塞赋值

UART在FPGA上的设计与实现

摘 要:在基于FPGA芯片的工程实践中,经常需要FPGA与上位机或其他处理器进行通信,为此设计了用于短距离通信的UART接口模块。该模块的程序采用VHDL语言编写,模块的核心发送和接收子模块均采用有限状态机设计,详述了各子模块的设计思路和方法,给出了它们的仿真时序图。综合实现后,将程序下载到FPGA芯片中,运行正确无误。又经长时间发送和接收测试,运行稳定可靠。相对参数固定的设计,该UART的波特率、数据位宽、停止位宽、校验位使能及校验模式选择均可以在线设置,为FPGA与其他设备的通信提供了一种可靠途径,具备较强的实用价值。

如何在FPGA 中实现状态机

作者:Adam Taylor
EADS Astrium 公司首席工程师
电子邮件地址: aptaylor@theiet.org

状态机往往是FPGA 开发的主力。选择合适的架构和实现方法将确保您获得一款最佳解决方案。

FPGA 常常用于执行基于序列和控制的行动, 比如实现一个简单的通信协议。对于设计人员来说,满足这些行动和序列要求的最佳方法则是使用状态机。状态机是在数量有限的状态之间进行转换的逻辑结构。一个状态机在某个特定的时间点只处于一种状态。但在一系列触发器的触发下,将在不同状态间进行转换。理论上讲,状态机可以分为Moore 状态机和Mealy 状态机两大类。它们之间的差异仅在于如何生成状态机的输出。Moore 状态机的输出仅为当前状态的函数。典型的例子就是计数器。而Mealy 状态机的输出是当前状态和输入的函数。典型的例子就是Richards 控制器(参见 http://en.wikipedia.org/wiki/Richards_controller )。

定义状态机

基于FPGA的多路I2C总线设计与实现

摘要:介绍了一种基于FPGA的多路12C总线设计与实现。主要包括系统处理器、局部总线、FPGA逻辑模块、负载设备几部分,实现了从处理器局部总线到12C协议的转换及其多路扩展,使系统具有多个12C总线通道,且每一路12C总线上能挂载多个不同的主设备或从设备。该系统中各路12C总线相互独立工作,没有干扰和影响。

I2C(Inter-Integrated Circuit)总线是由Philips公司开发的用于IC器件之间连接的二线制总线,其为双向、两线、串行、多主控接口标准,具有总线仲裁机制,非常适合器件之间近距离、非经常性的数据通信。由于其具有接口线少、控制方式简化、器件封装形式小、通信速率较高等优点,I2C总线的应用非常广泛[1]。

基于FPGA的图像处理(五)--状态机

使用FPGA实现各种算法时,状态机是很常用的方法,在SysGen中有两种非常简便的方法构建状态机,一是使用Mcode,以switch-case语句轻松实现,二是使用SysGen自带状态机模块。

用XilinxFPGA实现DDRSDRAM控制器

DDR SDRAM 使用双倍数据速率结构, 它能获得比SDRAM 更高的性能。DDR SDRAM 需要特定的DDR 控制器才能完成与DSP、FPGA 之间的通信。由于Xilinx VirtexTM- 4 系列FPGA 具备ChipSync 源同步技术等优势, 本设计采用它来实现DDRSDRAM控制器。该DDR SDRAM 控制器采用直接时钟数据捕获技术, 本文将重点阐述该技术。

同步内容