Vivado综合属性系列之十三 FSM_ENCODING

news/2024/10/17 22:14:22/

目录

一、前言

二、FSM_ENCODING

    ​2.1 属性介绍

    ​2.2 工程代码

    2.3 结果

    ​2.4 参考资料


一、前言

    ​状态机的实现有很多方式,如auto,one_hot,sequential,如下图中Synthesis中-fsm_extraction的配置项,但此处作用范围为全局,如果要对部分状态机指定实现方式,则可通过在RTL代码中设置FSM_ENCODING属性。

二、FSM_ENCODING

    ​2.1 属性介绍

    ​FSM_ENCODING可以控制状态机的编码方式,属性放置于状态寄存器的前面,可设置的值有one_hot,sequential,johnson,gray,user_encoding,none,auto,默认值为auto,设置为auto时由综合工具决定编码方式,user_encoding则表示让综合工具综合出状态机,但是使用RTL中由用户设定的编码方式。FSM_ENCODING可以使用在RTL和XDC中。

使用格式:(*fsm_encoding="one_hot"*) reg state_machine;

    ​2.2 工程代码

    ​此处以一个常用例子序列1101检测的代码为例,检测到输入序列为1101则输出1,否则输出0,

module FSM( d,clk,rst,out);
input d,clk,rst;
output reg out;
(*fsm_encoding="sequential"*)reg [2:0] current_state,next_state;
parameter [2:0] s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;
always@(posedge clk,posedge rst)
begin if(rst==1)current_state<=s0;elsecurrent_state<=next_state;
end
always@(*)
begin case(current_state)s0:if(d==1)next_state<=s1;elsenext_state<=s0;s1:if(d==1)next_state<=s2;elsenext_state<=s0;s2:if(d==0)next_state<=s3;elsenext_state<=s2;       s3:if(d==1)next_state<=s4;elsenext_state<=s0;s4:if(d==1)next_state<=s2;elsenext_state<=s0;  default:next_state<=s0;endcase
end
always@(*)
beginif(current_state==s4)out=1;elseout=0;
end
endmodule  

    2.3 结果

设置为gray时,综合结果如下图,网表名称自动加上gray

设置为one_hot时,综合结果如下图,网表名称自动加上onehot

设置为sequential时,综合结果如下图,网表名称自动加上sequential,不同编码方式使用的LUT和FF资源类型和数量存在差异。

    ​2.4 参考资料

用户手册《ug901-vivado-synthesis.pdf》

书籍《数字电路与FPGA设计》


http://www.ppmy.cn/news/104029.html

相关文章

Hadoop优化

1.小文件 影响&#xff1a; 元数据的瓶颈在于文件的数量&#xff0c;无论单个文件的大小 资源大材小用 优化 计算&#xff1a;使用combininputformat提前合并小文件 JVM重用 存储&#xff1a;归档 2.map端 环形缓冲区-区域大小、溢写比列 提前combiner&#xff…

FMT ICF5实时仿真,不止于飞控

基于ICF5的实时仿真 作为FMT的首款自研的国产开源飞控硬件平台&#xff0c;ICF5不仅功能强大&#xff0c;而且高颜值和高性价比获得了用户的一致好评。 FMT ICF5飞控 ICF5购买链接​item.taobao.com/item.htm?id705459383848&ali_refida3_430620_1006:1123834906:N:O3mc…

msvcr90.dll丢失的解决方法

在使用计算机的过程中&#xff0c;我们时常会遇到一些问题&#xff0c;比如应用程序无法正常启动&#xff0c;提示msvcr90.dll文件丢失&#xff0c;这个问题困扰了许多计算机用户。那么&#xff0c;怎么才能解决这个问题呢&#xff1f; 首先&#xff0c;让我们先了解一下msvcr…

Vue.js开发必备插件大曝光:Clipboard.js, Vue-Lazyload等库介绍

部分数据来源&#xff1a;ChatGPT 1、Lodash Lodash 是一个 JavaScript 实用工具库&#xff0c;提供了很多常用函数的封装&#xff0c;例如对象处理、数组处理、字符串处理等。Lodash 可以在浏览器中直接使用&#xff0c;也可以使用 npm 安装后在 Node.js 中使用。 // 安装方…

Spring MVC 深度解析与应用实践

文章目录 1. 引言1.1 Spring MVC 概述1.2 Spring MVC 在 MVC 架构中的位置 2. Spring MVC 的工作流程2.1 DispatcherServlet (前端控制器)2.2 HandlerMapping (处理器映射器)2.3 Handler (处理器)2.4 ModelAndView2.5 ViewResolver (视图解析器) 3. Spring MVC 基础应用3.1 环境…

kotlin用CoroutineScope启动协程async等待结果返回

kotlin用CoroutineScope启动协程async等待结果返回 例如&#xff1a; import kotlinx.coroutines.*object MyCoroutineScope {private val coroutineContext Job() Dispatchers.Default CoroutineName("my_context")val coroutineScope CoroutineScope(corouti…

Shell脚本test和[]和[[ ]]和(())语句应用

记录&#xff1a;437 场景&#xff1a;Shell脚本test、[]、[[]]、(())语句应用。 版本&#xff1a;CentOS Linux release 7.9.2009。 1.test和[]和[[]]和(())语句 test&#xff0c;test命令用于检测某个条件是否成立。可以进行数值、字符和文件等方面的测试。 []&#xff…

doris分区、join

动态分区和临时分区 动态分区 旨在对表级别的分区实现生命周期管理(TTL)&#xff0c;减少用户的使用负担。 目前实现了动态添加分区及动态删除分区的功能。只支持 Range 分区。原理 在某些使用场景下&#xff0c;用户会将表按照天进行分区划分&#xff0c;每天定时执行例行任…