首先我们要明白为什么要设置安全状态机模式。
具体可以参考以下文章
[doc] FPGA设计中状态机安全性研究 - 豆丁网 (docin.com)
我们在写状态机的时候,会添加default语句(vhdl是ohters)分支,当出现异常状态时,保证状态机能跳转到正常状态。但是EDA工具会对default语句有意的自动忽视,这是对状态机进行优化的结果,故我们需要设置安全状态机模式,保证当出现异常状态时,保证状态机能跳转到正常状态。
在ISE中可以通过设置综合选项,Sefe implement 进行安全状态机设置。
而在vivado中在综合选项中无法进行设置,在其论坛上找到答案。
Xilinx Customer Communityhttps://support.xilinx.com/s/?language=en_US
通过此链接,打开PDF后 ,可以看到关于安全状态机设置的介绍。
接下来介绍在在verilog、VHDL代码中具体实现方式。
此外还有一种方式,通过约束来进行实现,具体查看Ug912。以下为ug912的截图。
我们从xdc example中可以看到在约束文件中添加语句:set_property fsm_safe_state reset_state [get cells state_reg* ] 来实现安全状态机。
这句话是什么意思呢,你需要了解tcl语法里面的置换操作和常用的正则表达式,具体知识这里不详细展开。
其中[get cells state_reg* ]表示通过正则表达式*可以搜索到名称中带有 state_reg 字符的cell,寄存器也是cell。这里主要搜索寄存器。
这句话可以理解为凡是名字中带有state_reg 字符的寄存器被搜索到后,并进行安全状态机模式设置。
参考链接:
1、如何在libero中设置安全状态机,参考以下链接
2、get_ports/get_pins/get_cells/get_nets - 简书 (jianshu.com)
3.、《数字集成电路静态时序分析基础》笔记③-可编程逻辑-与非网 (eefocus.com)
4、每天学命令<get_cells>_Tao_ZT的博客-CSDN博客
5、FPGA时序约束之Tcl命令的对象及属性 | 电子创新网赛灵思社区 (eetrend.com)
6、TCL get*命令_帅小琪LOVE的博客-CSDN博客
changelog
1 新增实现方式:通过约束实现安全状态机。2021年12月1日