在使用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. HDU 4768 (二分区间---涨姿势)

    题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪 ...

  2. Lua协程

    协作例程 1.同一时刻仅一个例程在运行 2.执行权让渡和恢复[栈]

  3. Context的使用(转)

    1.Context概念 Context,相信不管是第一天开发Android,还是开发Android的各种老鸟,对于Context的使用一定不陌生~~你在加载资源.启动一个新的Activity.获取系统 ...

  4. Pylot压力测试(linux)

    Pylot需要python2.5以上的版本,打开以后选择对应你的系统的版本,下载好之后双击安装. centOS5.5 系统版本python版本是2.4.3,所以要下载个2.5以上的. 1.下载Pyth ...

  5. Thrift 个人实战--RPC服务的发布订阅实现(基于Zookeeper服务)

    前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...

  6. 腾讯优测干货精选|Android双卡双待适配——隐藏在数据库中的那些秘密

    腾讯优测是专业的app自动化测试平台,除了提供兼容性测试,远程真机租用等多维度的测试服务,还有优分享-腾讯内部的移动研发测试干货精选~ 许多APP都希望获取用户通讯录联系人,利用通讯录关系链信息来丰富 ...

  7. bootstrap-12

    按钮(按钮组) 使用方法:按钮组和下拉菜单组件一样,需要依赖于button.js插件才能正常运行.不过我们同样可以直接只调用bootstrap.js文件.使用一个名为btn-group的容器. < ...

  8. vim编辑器使用相关

    alias 查看vi是否已经绑定vim 一.vim的块选择 v 字符选择 V 行选择 ctrl+v 快选择 y 复制选择的地方(p进行粘贴) d 删除选择的地方 二.vim多文件编辑 :n 编辑下一个 ...

  9. UVa 10815 安迪的第一个字典

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. 【转】关于.net framework4.0以及4.5安装失败,“安装时发生严重错误”……

    也不知道管不管用,先记着 今天忽然想装一个vs2010,然后装了好几遍,每次都在安装.net4.0的时候失败.好吧,我自己手动装行么.于是手动去装.net 4.0. 结果在还是返回"安装时发 ...