目录

dont_touch

fsm_encoding


dont_touch

可以参考:

Vivado中如何避免信号被优化掉?

fsm_encoding

我们在RTL设计中,在状态机的设计中,会给状态变量一些状态编码,在parameter中给出,

例如:

这是二进制编码:

这是格雷码:

这是独热码:

但是在RTL中这么设计真的有用吗?或者说综合工具就会给综合成这种编码方式?


光说不练假把式,我们来实际看看综合情况:

拿这篇博客中:【 FPGA 】序列检测器的Moore状态机实现中的序列检测器为例:

设计一个序列检测器,检测序列1101,检测到输出1,否则输出0.

编码方式:二进制编码

`timescale 1ns / 1ps
//
// Company:
// Engineer: 李锐博恩
// Create Date: 2019/01/04 11:16:29
// Module Name: seq_det_moore
//编码方式:二进制编码
//module seq_det_moore(input clk,input reset,input din,output reg dout);//状态声明localparam [2:0]s0 = 3'b000,s1 = 3'b001,s2 = 3'b010,s3 = 3'b011,s4 = 3'b100;reg [2:0] current_state,next_state;always @(posedge clk, posedge reset)beginif(reset)current_state <= s0;elsecurrent_state <= next_state;endalways @ *begincase(current_state)s0:if(din == 1'b1) next_state = s1;else next_state = s0;s1:if(din == 1'b1) next_state = s2;else next_state = s0;s2:if(din == 1'b0) next_state = s3;else next_state = s2;s3:if(din == 1'b1) next_state = s4;else next_state = s0;s4:if(din == 1'b1) next_state = s1;else next_state = s0;default: next_state = s0;endcaseendalways @*beginif(current_state == s4) dout = 1;else dout = 0;endendmodule

打开log,可以看到状态机的编码方式为:

如果在RTL设计中采用独热码设计:

`timescale 1ns / 1ps
//
// Company:
// Engineer: 李锐博恩
// Create Date: 2019/10/23 16:14:30
// Module Name: seq_det_moore
//编码方式:独热码编码
//module seq_detect(input clk,input reset,input din,output reg dout);//状态声明localparam [4:0]s0 = 5'b00001,s1 = 5'b00010,s2 = 5'b00100,s3 = 5'b01000,s4 = 5'b10000;reg [4:0] current_state,next_state;always @(posedge clk, posedge reset)beginif(reset)current_state <= s0;elsecurrent_state <= next_state;endalways @ *begincase(current_state)s0:if(din == 1'b1) next_state = s1;else next_state = s0;s1:if(din == 1'b1) next_state = s2;else next_state = s0;s2:if(din == 1'b0) next_state = s3;else next_state = s2;s3:if(din == 1'b1) next_state = s4;else next_state = s0;s4:if(din == 1'b1) next_state = s1;else next_state = s0;default: next_state = s0;endcaseendalways @*beginif(current_state == s4) dout = 1;else dout = 0;endendmodule

特么还真是独热码!

如果我们加上这条综合属性呢:(在状态变量之前加上此综合属性)

(*fsm_encoding = "sequential"*) reg [4:0] current_state,next_state;

可见,即使你代码里面用了独热码,但是加了这条综合属性后,最终综合工具会断定状态机的编码方式为综合属性指定的编码方式。

所以,在RTL代码中直接用十进制来设计即可,至于综合成什么样子的编码,通过综合属性来指定即可。


这句话告诉你如何查看FSM的信息:

The Vivado synthesis flags INFO messages in the log file, giving information about Finite State Machine (FSM) components and their encoding. The following are example messages: INFO: [Synth 8-802] inferred FSM for state register 'state_reg' in module 'fsm_test' INFO: [Synth 8-3354] encoded FSM with state register 'state_reg' using encoding 'sequential' in module 'fsm_test'

简而言之,在log文件中查看即可。

参考:UG901

Vivado 随笔(3) 其他综合属性 dont_touch、fsm_encoding?相关推荐

  1. Vivado 随笔(2) 综合属性之use_dsp48?

    目录 背景 正文 测试 放置在Module前 放置在变量声明前 附加测试 放置在某个变量声明前 放置在Module前 相关链接 背景 在做一些FPGA算法的时候,我们不可避免的使用到大量的算术运算,例 ...

  2. Vivado 随笔(1) 综合属性之 ram_style rom_style?

    目录 背景 正文 相关文献 背景 在很多情况下,我们会定义一个二维数组来作为RAM或者ROM来使用,例如我们在设计一个异步FIFO时,我们需要例化一个双端口RAM来作为FIFO的存储空间,当然我们可以 ...

  3. Vivado使用技巧(24):HDL/XDC中设置综合属性

    Vivado综合工具支持直接在RTL文件或XDC文件中设置综合属性.如果Vivado识别出设置的属性,会创建与之相关的逻辑电路:如果不能识别设置的属性,会将该属性和值存放在生成的网表中.因为某些属性, ...

  4. Vivado使用:综合篇(三)综合属性

    Vivado 开发套件中,Vivado综合能够综合多种类型的属性,大多数情况下,这些属性的使用语法和行为都一样.当使用综合属性时,假如Vivado能够识别该属性,那么就使用这个属性并创建反映已经使用该 ...

  5. 继承属性inh和综合属性syn的作用

    继承属性inh和综合属性syn的作用 因为文法不是为了翻译而定义的,而是以语法分析为目的进行定义的,因此可能会产生语法分析树的结构和源代码的抽象语法不"匹配". 例如,下面的文法便是按照人类 ...

  6. xilinx fpga学习笔记5:Xst综合属性

    第六章:设计综合和行为仿真 6.1 设计综合 本节将详细介绍设计综合的概念,综合属性的设置,综合过程的实现,并且通过查看原理图符号更加直观的建立HDL高级描述和FPGA底层源语之间的联系. 6.1.1 ...

  7. 为什么终结符只有综合属性?

    书本上关于综合属性与继承属性的定义是: 对关联产生式A->α\alphaα的语义动作b:=f(c1,c2,c3,-,ck),如果b是A的某个属性,则称b是A的一个综合属性.从分析树的角度来看,计 ...

  8. 常见的CSS字体样式属性/font-size/font-family/font-weight/font-style/font综合属性/@font-face属性/学习笔记

    一.常见的CSS字体样式属性 1.font-size属性:用于设置字体字号 该属性的值有 相对长度单位:em(相对当前对象内文本字体尺寸)px(像素,最常用) 绝对长度单位:in(英寸)cm(厘米)m ...

  9. Vivado 随笔(6) Timing Summary 相关讨论(一)

    Vivado运行完Implementation后,Design Runs都会有如下的提示: 当然Timing Summary中也会有: 从上面的Design Timing Summary中可以看出,W ...

最新文章

  1. google的阴阳历转换查询
  2. MKNetWorkKit打印URL
  3. github 档案馆(是不是那个把code放到北极的那个项目。。。)
  4. Flutter 15: 图解 ListView 不同样式 item 及 Widget 显隐性
  5. 做计算机的小卫士教案,小卫士在行动小班教案
  6. 小程序提供几种结算周期? T+1是什么意思?
  7. 火箭联盟服务器维护中怎么办,《火箭联盟》出现服务器问题 官方致歉并承诺会尽快修复...
  8. Software Marketing
  9. 鸿蒙历程和路标图,鸿蒙2.0来了?华为开发者大会时间确认:Mate40会不会首发?...
  10. 淘宝网购物车jquery源码和网易新用户注册页面表单验证的练习
  11. UCI下载葡萄酒数据
  12. 给3D打印机升级的记录( i3 Mega S)
  13. 实战 | 航空公司客户价值分析-LRFCM模型
  14. Jquery分页之(上一页,下一页)
  15. po vo pojo domain 区别
  16. sklearn学习-SVM例程总结2(特征选择——单因素方差分析(方差分析anova ))
  17. python路线寻优_基于DEAP库的Python进化算法从入门到入土 --(四)遗传算法的改进...
  18. 往recovery添加应用程序
  19. 互联网月饼大赏,你最喜欢哪家的?
  20. ubuntu20.04 基本配置记录 安装 搜狗输入法 QQ 微信

热门文章

  1. origin9语言设置中文_英雄联盟手游怎么设置繁体 LOL手游繁中设置方法?_英雄联盟手游...
  2. oracle ora 14452,ORA-14452的出现原因解析及解决方法
  3. python输入exit怎么退出了_Python 中的 exit() 和 sys.exit()
  4. chrome浏览器上传文件延迟_扫描识别工具Dynamic Web TWAIN使用教程:移动浏览器捕获(下)...
  5. warning:partition X does not end on cylinder boundary
  6. 三星 android recovery,三星recovery模式怎么操作
  7. 虚拟机无法访问主机mysql_解决虚拟机linux端mysql数据库无法远程访问
  8. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt
  9. 如何生成动态matlibplot动图?
  10. 编程那么苦,学习那么累,这组漫画可以治愈(慢慢品味)