前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何写好状态机(三)

如何写好状态机(三)

作者头像
FPGA技术江湖
发布2020-12-30 14:32:08
1.1K0
发布2020-12-30 14:32:08
举报
文章被收录于专栏:FPGA技术江湖
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来如何写好状态机(三),由于篇幅比较长,如何写好状态机分成三篇呈现。前两篇已经说了状态机的基本概念以及如何写好状态机,此篇带来使用 Synplify Pro 分析 FSM。,话不多说,上货。

如何写好状态机(一)

如何写好状态机(二)

主要内容预览:

  • 状态机的基本概念;
  • 如何写好状态机;
  • 使用 Synplify Pro 分析 FSM。

使用 Synplify Pro 分析 FSM

代码走读时分析 FSM 是一件比较耗时的事情,如果代码不符合式或三段式 FSM 描述规范,走读他人代码则是一件异常痛苦的事情。这里以 SynplifyPro 为例,介绍一下如何利于 EDA 工具分析 FSM,综合 FSM,提高 FSM 性能。

Synplify Pro 提供了 3 个有限状态机设计工具,FSM Compiler、FSM Explorer 和 FSM Viewer,灵活地使用这 3 个有限状态机工具分析、编译、优化 FSM,可使 FSM 的综合结果达到最优。下面逐一讨论它们的使用方法。

(1) 有限状态机编译器(FSM Compiler)

一般的综合工具将 FSM 按照普通逻辑综合,而 Synplify Pro 与之不同。Synplify Pro 使 用 FSM Compiler,先将 FSM 编译为类似状态转移图的连接图,然后对 FSM 重新编码、优化以达到更好的综合效果。

FSM Compiler 适应于有以下需求的场合:需要优化 FSM 设计,达到更好的综合效果;使用 FSM Viewer 调试状态机;使用 FSM Explorer 进一步优化有限状态机。

FSM Complier 的使用非常灵活,可以对整个设计的所有状态机都用 FSM Compiler 进行优化,也可以仅仅对指定的状态机进行优化。对整个设计使用 FSM Compiler 进行优化,只需在主界面重要综合优化参数中选择【FSM Compiler】选项,或者在综合优化参数设置时选中【FSM Compiler】选项即可。如果觉得设计其他 FSM 已经满意,而仅对某个 FSM 不满意时,可以在源代码或综合约束文件中手动添加综合属性,指定对单独状态机的编译与优化。FSM Compiler 综合属性如表 1-2 所示。

表 1-2 FSM Compiler 综合属性用法

(2) 有限状态机探测器(FSM Explorer)

FSM Explorer 使用 FSM Compiler 的编译结果,精选不同的编码方式进行状态机编码试探,从而达到对 FSM 编码的最佳优化效果。与 FSM Compiler 相比,FSM Explorer 的优化效果往往更好,编译优化所花费的时间也更长。

对设计使用 FSM Explorer 的方法也有两种:第一种是对整个设计的所有 FSM 自动运用FSM Explorer;第二种是对设计中特定的 FSM 使用 FSM Explorer。第一种方法可以在Synplify Pro 主界面重要综合优化参数中选择 FSM Explorer 有效,或者在综合优化参数设置对话框选中【FSM Explorer】选项;第二种方法需要在源代码或者综合约束文件中添加使用FSM Explorer 的综合属性声明。FSM Explorer 综合属性如表 1-3 所示。

(3) 有限状态机观察器(FSM Viewer)

在 Synplify Pro 中除了可以使用 RTL 视图和结构视图观察、分析 FSM 外,还可以使用专用 FSM 观察器(FSM Viewer)分析 FSM。FSM Viewer 将源代码中描述的 FSM 根据 FSM Compiler 和 FSM Explorer 的编译优化结果,用状态转移图显示有限状态机。

表 1-3 FSM Explorer 综合属性用法

下面以前面所述举例的 FSM 为例,讲述 FSM Viewer 的使用方法。

【例1-2】 使用 FSM Viewer 分析有限状态机

1. 启动 Synplify Pro,单击

打开“Example-1-1\FSM\state2”目录下的“state2.prj”,单击

按钮启动 RTL 视图,选择状态机模块“statemachine”,单击

按钮进入状态机层次结构,或者单击鼠标右键,在弹出命令菜单中选择【View FSM】命令,如图 1-7 所示。

图1-8 启动 FSM Viewer 分析有限状态机

FSM Viewer 的主界面主要由状态转移图和 FSM 信息显示选项卡组成。状态转移图是源代码经过编译再现的状态机。FSM 信息显示包含转移条件(Transitions)、寄存器传输级状态编码(RTL Encodings)和映射后状态编码(Mapped Encodings)等 3 个选项卡,如图 1-8 所示。

图1-9 FSM Viewer 主界面

选择某个状态,单击鼠标右键,在弹出的菜单中可以完成显示对象的选择和屏蔽,有利于理解状态之间关系,增加状态转移图的可读性,如图 1-9 所示。

图1-10 在 FSM Viewer 中选择和屏蔽状态

小结

状态机不仅仅是一种时序电路设计工具,它更是一种思想方法。状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。这个论断的最重要的两个词就是“逻辑顺序”和“时序规律”,这两点就是状态机所要描述的核心和强项,换言之,所有具有逻辑顺序和时序规律的事情都适合用状态机描述。

根据 FSM 描述使用的 always 模块数和功能可以将 FSM 的描述分为 3 种写法:

  • 不推荐使用一段式描述方法。因为一段式描述方法将状态转移判断的组合逻辑和状态寄存器转移的时序逻辑混写在同一个 always 模块中,不符合将时序和组合逻辑分开描述的 Coding Style(代码风格),而且在描述当前状态时要考虑下个状态的输出,整个代码不清晰,不利于维护修改,并且不利于附加约束,不利于综合器和布局布线器对设计的优化。
  • 推荐使用两段式状态机描述方法。两段式描述方法用 2 个 always 模块,其中一个 always 模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律。这种方法使 FSM 描述清晰简洁,易于维护,易于附加时序约束,使综合器和布局布线器更好的优化设计。
  • 强烈推荐使用三段式描述方法。与一段式描述方法相比较,三段式 FSM 描述方法对 FSM 寄存器输出的描述只需判断下一状态,然后直接将下一状态的输出用寄存器输出即可,根本不用考虑状态转移条件(米勒状态机)。与两段式描述相比,三段式虽然代码结构复杂了一些,但是换来的优势是使 FSM 做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在 FPGA/CPLD 等可编程逻辑器件上的综合与布局布线效果更佳。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档