使用Synplify综合时保留logic
在使用Synplify综合时,此工具会自动优化我的设计。
当然此功能有好有坏,最近有个项目需要使用Chipscope观察内部信号,打开inserter就懵了,信号列表中我的设计有的是名字被改了,有的是干脆给优化没了。
网上当然也有人提出这个问题, 例如 http://www.xilinx.com/support/answers/5249.html 就提供了一个 /* synthesis syn_keep = 1 */ 的语法来保留自己的设计。
随后又以 /* synthesis syn_keep = 1 */ 为关键词搜索了一下,又发现了其他的新内容,随即记录一下。
在 Synopsys FPGA Synthesis Attribute Reference Manual 中提到了三个语法: syn_keep , syn_preserve, syn_noprune 并对三种语法做出了比较。
| syn_keep | 只适用于net和 combinational logic,此语法可以在综合过程中保留wire,且不对此wire做任何的优化。此语法也可用于register,当用于register时,register可以被保留且不会变成macro |
| syn_preserve | 保证register不会被优化 |
| syn_noprune | 保证一个没输出的blackbox(此blackbox 的输出没有驱动任何logic)不被优化 |
然而看了此表还是很模糊,再看了一下Synplify Pro for Microsemi Edition User Guide文档中 Preserving Objects from Being Optimized Away 部分则会有更深入的解释。
| To Preserve | Attach | Result |
| Nets | 使用syn_keep语法。适用于verilog中的wire或reg,或者VHDL中的signal | 在仿真,综合或者P&R中保留net |
| Net for probing | 使用syn_probe语法。用于verilog中的wire或者reg,或者VHDL中的signal | 保留内部的net来用于观察 |
| Shared registers | 使用syn_keep语法。适用于shared register的输入wire或者signal | 保留重复的驱动cell |
|
sequential component |
使用syn_preserve语法。适用于verilog中的reg或者module,或者VHDL中的signal或architecture | 保留固定值驱动的register |
| FSM | 使用syn_preserve语法。适用于verilog中的reg或module,或者VHDL中的signal | 保留state register有值的输出端口或者内部信号 |
|
instantiated components |
使用syn_noprune语法。适用于verilog中的module或者component,或者VHDL的architecture或者instance | 即使instance有未使用的端口也可以保留下来 |
由此可以总结一下:
syn_keep最常用,可以用于wire,reg和shared register两种情况;
syn_probe处于观察的目的可以使用于wire或者reg (ChipScope观察信号的话使用此语法应该足够了);
syn_preseve使用于固定值驱动(constant-driven)的register或者状态机register中;
而syn_noprune使用于例化的模块(instance),即使例化模块有未使用的端口,也可以让模块保留下来。
关于Shared register:
共享的register又可以称为重复的logic。
参考如下的代码:
module redundant1(ina,inb,out1);
input ina,inb;
output out1,out2; wire out1;
wire out2; assign out1 = ina & inb;
assign out2 = ina & inb;; endmodule
代码如上编写的话,综合工具自动去掉一个AND gate,因为out1和out2使用同样的AND gate就足够了
若是代码如下的话:
module redundant1d(ina,inb,out1,out2);
input ina,inb;
output out1,out2; wire out1;
wire out2;
wire in1a /*synthesis syn_keep = 1*/;
wire in1b /*synthesis syn_keep = 1*/;
wire in2a /*synthesis syn_keep = 1*/;
wire in2b /*synthesis syn_keep = 1 */; assign in1a = ina ;
assign in1b = inb ;
assign in2a = ina;
assign in2b = inb; assign out1 = in1a & in1b;
assign out2 = in2a & in2b; endmodule
由于加了syn_keep语法导致综合结果是两个AND gate都会保留下来。
**需要注意的一点是syn_keep语法需要用在例化程序的输入端(input of instance)才会有效果,例如上面代码syn_keep加在out1,out2之后是没有任何效果的。
关于固定驱动值(Constant-driven)
指某一个flip-flop的输入总是为常数,例如有一个flip-flop总是被logic 1 驱动,则在综合的时候工具会自动移除此flip-flop且把信号绑到VCC上。使用syn_preseve的话可以保留此flip-flop。
使用Synplify综合时保留logic的更多相关文章
- 应用Synopsys Synplify 综合的注意一个问题
在Xilinx ISE中使用Synopsys Synplify综合时,注意约束文件*.ucf需在当前工程的文件夹下.不要将其它文件夹下的同名文件的约束当成当前工程下文件的约束.
- Jsoup提取文本时保留标签
使用Jsoup来对html进行处理比较方便,你可能会用它来提取文本或清理html标签.如果你想提取文本时保留标签,可以使用Jsoup.clean方法,参数为html及标签白名单: Jsoup.clea ...
- SQLSERVER:大容量导入数据时保留标识值 (SQL Server)
从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...
- Xilinx ISE中使用Synplify综合报错的原因
在Xilinx ISE中使用Synopsys Synplify 综合比较方便,但有时会出现如下错误: "ERROR:NgdBuild: - logical block ' ' with ty ...
- CentOS yum安装软件时保留安装包及依赖包或者自动下载安装包及相关依赖包
CentOS上安装某个软件一般都有很多相关的依赖包,当然,这也与我们安装时software selection步骤中选择的版本有关系,我们服务器在安装CentOS时一般选择Basic Web Serv ...
- 小白在使用ISE编写verilog代码综合时犯得错误及我自己的解决办法
一:错误原因,顶层信号声明类别错误 错误前 更改后 二:综合时警告 更改前: 错误原因:调用子模块时 输出端口只能用wire类型变量进行映射 这是verilog语法规定的 tx_done在uart_t ...
- V9发布内容时保留框架<iframe></iframe>
有些时候,发布文章内容的时候需要用到<iframe></iframe>框架站外内容最近在发布内容时就遇到这个问题,<iframe></iframe>给转 ...
- C#压缩图片时保留原始的Exif信息
啥是Exif信息,有啥用,百度百科有解释: Exif百科 总之,这东西对摄影爱好者来说是不可或缺的,通常使用Photoshop来压缩只要不是保存为Web格式都会保留Exif信息. 而我们写代码来压缩图 ...
- C#数字类型输出字符串时保留指定小数位数的方法
1.使用占位符: 1)float f = 321.12345F;f.ToString("0.00");这样做无论f是不是整数,都将加上2位小数. 2)float f = 321.1 ...
随机推荐
- C++ using namespace std(转载)
转载自http://www.kuqin.com/language/20080107/3532.html 感谢这位大神的解答! 以下的内容摘抄自转载的文章里面的部分内容. 早些的实现将标准库功能定义在全 ...
- SCons - 简单而强大的项目编译脚本
N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了.makefile确实编写复杂,而且平时也不是经常使用,容易忘记.偶识了scons,一切都变的简单了.最近研究了下scon ...
- Linux平台屏幕录像工具RecordMyDesktop
如果你把Linux桌面效果自定义得很漂亮,是不是很想录下来和其他人一起分享呢?RecordMyDesktop完全满足需要,我期待这么一个软件很久了,以前也一直没有找到合适的. 以后每次发Ubuntu的 ...
- ANSI C中关于FILE流的一些
ANSI C只是一个定义,定义了一个借口与标准,具体实现将是不同的. 刚看到I/O的时候就对于Stream非常的迷惑,这是什么玩意.后面才明白,这只是一个抽象出来的概念而已.对于一个Stream,它具 ...
- 移动互联网实战--资源类APP的数据存储处理和优化
前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储 ...
- HDU 2509 nim博弈
Be the Winner Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- apktool反编译apk文件
1.首先下载apktool文件,可以从我的网盘下载:http://pan.baidu.com/s/1nvPdbVb 2.将你的apk文件和apktool文件放到一个文件夹下,这里就放到D:\study ...
- LeetCode() Repeated DNA Sequences 看的非常的过瘾!
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
- 使用Firefox user agent进行移动端网页测试
Selenium 真是个强大的网页测试工具,设置Firefox user agent, 就可以轻松模拟手机端浏览器进行网页测试. Demo Code # -*- coding:utf8 -*- imp ...
- Content is not allowed in prolog.解决方法
将xml配置文件利用记事本另存为Anis编码的文件可以解决.