在使用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的更多相关文章

  1. 应用Synopsys Synplify 综合的注意一个问题

    在Xilinx ISE中使用Synopsys Synplify综合时,注意约束文件*.ucf需在当前工程的文件夹下.不要将其它文件夹下的同名文件的约束当成当前工程下文件的约束.

  2. Jsoup提取文本时保留标签

    使用Jsoup来对html进行处理比较方便,你可能会用它来提取文本或清理html标签.如果你想提取文本时保留标签,可以使用Jsoup.clean方法,参数为html及标签白名单: Jsoup.clea ...

  3. SQLSERVER:大容量导入数据时保留标识值 (SQL Server)

    从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...

  4. Xilinx ISE中使用Synplify综合报错的原因

    在Xilinx ISE中使用Synopsys Synplify 综合比较方便,但有时会出现如下错误: "ERROR:NgdBuild: - logical block ' ' with ty ...

  5. CentOS yum安装软件时保留安装包及依赖包或者自动下载安装包及相关依赖包

    CentOS上安装某个软件一般都有很多相关的依赖包,当然,这也与我们安装时software selection步骤中选择的版本有关系,我们服务器在安装CentOS时一般选择Basic Web Serv ...

  6. 小白在使用ISE编写verilog代码综合时犯得错误及我自己的解决办法

    一:错误原因,顶层信号声明类别错误 错误前 更改后 二:综合时警告 更改前: 错误原因:调用子模块时 输出端口只能用wire类型变量进行映射 这是verilog语法规定的 tx_done在uart_t ...

  7. V9发布内容时保留框架<iframe></iframe>

    有些时候,发布文章内容的时候需要用到<iframe></iframe>框架站外内容最近在发布内容时就遇到这个问题,<iframe></iframe>给转 ...

  8. C#压缩图片时保留原始的Exif信息

    啥是Exif信息,有啥用,百度百科有解释: Exif百科 总之,这东西对摄影爱好者来说是不可或缺的,通常使用Photoshop来压缩只要不是保存为Web格式都会保留Exif信息. 而我们写代码来压缩图 ...

  9. C#数字类型输出字符串时保留指定小数位数的方法

    1.使用占位符: 1)float f = 321.12345F;f.ToString("0.00");这样做无论f是不是整数,都将加上2位小数. 2)float f = 321.1 ...

随机推荐

  1. Day18_集合第四天

    1.Map集合成员方法(掌握) 增加功能 V put(K key, V value) 当key在集合中不存在时,添加元素:当key在集合存在时候,替换元素 删除功能 void clear 清除所有键值 ...

  2. SQLite手工注入方法小结

    SQLite 官网下载:www.sqlite.org/download.html sqlite管理工具:http://www.yunqa.de/delphi/products/sqlitespy/in ...

  3. android之ActionBar

    最近忙着做项目了,很久么来博客园看看了.最近项目中用到了actionbar,那就依我个人之建,来跟大家谈谈吧. 首先最重的是看你自己所见的项目的最小Api是为11,(在设置Minsdkversion最 ...

  4. phpwind之关闭账号通

    phpwind的账号通功能早就失效了,但是首页的链接一直存在,造成了很不好的影响 但是后台打开账号通功能又打不开,所以想到了在前端的模板中通过屏蔽这部分代码的方法隐藏掉这个功能在首页的显示 1.打开/ ...

  5. 2016HUAS_ACM暑假集训1A - 士兵队列训练问题

    这道题我觉得是个简单的模拟题,整理一下思路,弄清楚题意就好了. 新手上路,采用两个数组进行交互赋值,用的方法也比较笨,思路差不多都在代码的注释里了. 下面是题目大意: 首先将士兵从1开始编号(士兵总数 ...

  6. 《统计推断(Statistical Inference)》读书笔记——第4章 统计分布族

    数据分析工作中最常和多维随机变量打交道,第四章介绍了多维随机变量的基本知识,其中核心概念是条件分布和条件概率.条件分布和条件概率可以抽象出条件期望的概念,在随机分析的研究中,理解随机积分和鞅理论和关键 ...

  7. day17算法

    http://www.360doc.com/content/14/0804/11/1073512_399302715.shtml

  8. (转)The AlphaGo Replication Wiki

    The AlphaGo Replication Wiki 摘自:https://github.com/Rochester-NRT/RocAlphaGo/wiki/01.-Home Contents : ...

  9. HTML5 history新特性pushState、replaceState,popstate

    http://blog.csdn.net/tianyitianyi1/article/details/7426606 https://developer.mozilla.org/zh-CN/docs/ ...

  10. docker2

    https://github.com/docker/distribution daocloud 数人云 时速云 http://jpetazzo.github.io/2014/06/23/docker- ...