我在XST综合时,未接输出端口的寄存器被优化掉了,

如何防止ISE综合时你想抓取的信号不被优化掉:

1.右键synthesis,在综合选项里将keep  hierarchy选择YES ,或者选择soft(在综合时保持层次,在实现时有利用ISE软件自动进行优化),这样有利于你从模块中找到你想抓取的信号和信号名不被更改。

2.在Constraints Guide中,有防止信号被优化掉的说明。具体在X:\Xilinx\13.4\ISE_DS\ISE\doc\usenglish\isehelp文件夹下。里面介绍了如何解决信号被优化的问题。其实ISE的工程设置有“keep_hierarchy”。在程序里面,也可以通过添加一些语句。如果是Verilog :

          Place the Verilog constraint immediately before the module or instantiation . 

          Specify the Verilog constraint as follows:

          (* KEEP = “{TRUE|FALSE |SOFT}” *)


假如我们要观察的一个信号cnt:reg   [10:0]  cnt;,那么就按照文档中的介绍,要保持此信号不被综合,则:

(* KEEP =  “TRUE” *)  reg  [10:0]  cnt ,或者     (* keep=  “true” *)  reg  [10:0]  cnt

这样就可以实现ChipScope的观察而不被优化掉了。类似的VHDL:

         Declare the VHDL constraint as follows:

         attribute keep : string;

        Specify the VHDL constraint as follows:

        attribute keep of signal_name: signal is “{TRUE|FALSE|SOFT}”;


当然,这些都是针对ISE的综合器XST的,如soft只有在XST里才可以使用,其它的综合工具,可以参看相关的文档,这些问题都有专业而又明确的说明。

一、使用Xilinx公司的ChipScope

  使用ChipScope观察芯片内部的信号的之前先要在把需要观察的信号添加到ChipScope信号观察列表当中。也就是说,我们必须能够在综合的网表文件中找到相应的信号。如果是使用XST综合的话,最好保留芯片内部结构的层次,这样就可以在相应的子模块查找需要观察的信号。默认情况下,Chipscope只能观察reg类型的信号。但是通过设置属性也是可以观察wire型信号的。使用不同的综合工具需要添加的属性也不一样。

1、使用XST综合。

(1)对于reg型信号,如果被ISE优化掉,一般有可以把这个信号和其他没有被优化的信号进行“与”、“或”等操作。这样就可以达到观察信号的目的。

(2)对于wire型号,对于ISE12.3以后的版本,XST综合,以Spartan3为例,可以使用(* KEEP="TRUE"*) wire  [15:0]   CPLD_ _AD;这样就可以在查找信号的信号找到wire类型的CPLD_ _AD信号进行观察。

2、使用Synplify Pro综合

Synplify Pro对wire、reg类型的信号有着不同的综合属性。

(1)    对于wire型信号,使用/* synthesis syn_keep=1 */综合属性,例如下面的语句:

wire  [7:0]  data_in  /* synthesis syn_keep=1 */;

(2)    对于reg型信号,使用/* synthesis preserve = 1 */综合属性,例如下面的语句:

reg  [7:0]   data_in  /* synthesis preserve = 1 */;

二、使用Altera公司的SignalTap

1、使用Altera自带的综合器综合

Altera自带的综合器为了防止某些信号综合器优化掉,也有自己的一套综合约束属性。

(1)对于reg型信号,为了防止Altera自带综合器将其优化掉,可以添加noprune属性。这样就可以防止某些寄存器信号被优化掉。也可以使用/*synthesis noprune*/综合属性。

`include "define.v"module SignalTap_test(Clk     ,Rst     ,Cnt                        ) /*synthesis noprune*/ ;input   wire        Clk ;input   wire        Rst ;output  reg [7:0]     Cnt ;always@(posedge Clk or posedge Rst)beginif( Rst == 1'b1)
Cnt <= 8'h0;elseCnt <= #`ULDY Cnt + 1'b1;endendmodule

如上例(假设Cnt信号会被优化掉),这样添加综合属性之后,整个module的reg信号都不会被优化掉。

跟reg相关的综合属性,除了/*synthesis noprune*/可用,还有一个/*synthesis preserve*/可用

二者的差别在于:

/*synthesis noprune*/ 避免Quartus II优化掉output 型的reg信号。

/*synthesis preserve*/ 避免Quartus II把reg信号当成VCC或者GND等常数

同时单独的reg信号也可以: (*preserve*)  reg [3:0] cnt;防止被优化掉。

(2)    对于wire类型的信号

对于wire型信号来说,要想观察此类信号,Altera综合器提供了/*synthesis keep*/ 综合属性。如 wire [7:0] Cnt  /*synthesis keep*/; 对于Quartus II 9.0以后的版本也可以使用(“keep”)  wire [7:0] Cnt ;的写法。

此外,/*synthesis keep*/也支持对reg型信号,使用它也可以防止reg型信号被优化掉。但是也有可能出现这样的情况,有的信号即使经过此处理,仍然会被综合工具优化掉,致使无法找到它。这个时候就需要对其使用“测试属性”,可以加入probe_port属性,把这两个属性结合在一起,即就是:

( *synthesis, probe_port,keep *) 即可,这种方法同时适应于wire和reg型信号类型。

2、使用Synplify Pro综合

使用Synplify Pro综合时防止信号被优化掉的方法和使用Xilinx公司 ChipScope使用Synplify Pro综合时添加的综合约束一样,因为Synplify Pro是专业的综合厂商,所以对主流的FPGA厂商都支持。

如何防止ISE综合时信号不被优化掉相关推荐

  1. 56.ISE综合,在chipscope信号列表看不到

    代码写好后,进行逻辑综合,在chipscope上添加被触发的信号时,发现有些在信号列表里看不到,这是因为这些信号没有参与到逻辑电路设计中,产生不想关的电路,综合器会默认优化资源. 还有一种情况是,对于 ...

  2. ISE综合工具XST综合约束相关

    1.ISE的XST综合选项中的Add I/O Buffers对于顶层模块综合时要打开,对于底层模块的综合要关闭. 可以参考:http://wenku.baidu.com/view/27593a6e01 ...

  3. 对时序逻辑电路采用不同描述方式,ISE综合出来的电路(RTL Schematic)比较(以模5计数器为例)

    目录 前言 行为级描述 Verilog HDL设计代码为: ISE综合 RTL Schematic Technology Schematic 状态机描述状态转移图 Verilog HDL代码 测试文件 ...

  4. 20211028:DC综合时的内部时钟处理

    DC综合时的内部时钟处理 问题描述 分析与处理方法 总结 问题描述 综合时出现未约束的endpoints. 分析与处理方法 利用vcs和netlist文件来检索出现的endpoints,追溯至最原始的 ...

  5. 仿真时信号出现高阻态、不定态——Test Bench中要做声明

    仿真时信号出现高阻态或者不定态zx 检查模块例化时是否包含了全部信号列表的信号

  6. DC综合时Memory(ram、rom)的处理

    目录 前言 一.DC综合memory遇到的问题 二.Memory(ram.rom)处理 1.解决思路 2.Memaker安装 3.Memaker使用 3.1 打开Memaker 3.2 Ram的生成 ...

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

    刚写了一段 Verilog代码,辛辛苦苦花了很长时间综合,在debug的过程中,却找不到需要debug的信号了,查看网表发现没有? 这种情况是因为我们的某些中间信号被优化掉了. 被优化掉的原因有可能是 ...

  8. 防止Qii编译器优化掉某信号的方法

    当某信号没有在Top Level上被使用,但又希望其出现在SignalTap II中作为测试信号,除了把该信号在顶层中声明为port之外,还可以利用编译器的synthesis attribute.具体 ...

  9. c语言运行时显示内存不足,请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码...

    请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码 [size=4][size=5]我编的一个高精度解hilbert方程组的程序段,用的是GS跌代,但运行时出现"虚拟内存不足&qu ...

最新文章

  1. 面试:为什么 Java 线程没有Running状态?
  2. 解决修改properties 属性文件存在缓存问题,附带操作properties文件工具类
  3. java中创建对象的方式
  4. 数据库-主键和外键及其约束
  5. 围猎“下沉市场”,争抢「小镇青年」,尚美如何突围?
  6. 【Oracle】查看死锁与解除死锁
  7. SpringMVC框架的介绍
  8. 深度思考|TCP协议存在那些缺陷?
  9. miui12怎么自定义开机动画_MIUI12正式官宣,5天后发布!网友:发布是发布,12月才能更新?...
  10. Ubuntu下Authentication token manipulation error或者Authentication Failure解决办法
  11. 广告CTR预估中用户行为学习和记忆建模
  12. Linux pid_t 类型的定义
  13. 史上最全最详细的APP运营推广策划方案
  14. 分享一款在线考试学习系统.net源码
  15. 【Arduino】一天入门Arduino语言 教程
  16. iOS 3DTouch 代码实现
  17. 萌系外表+丰富功能,i宝机器人成CES人气展品
  18. STM32学习心得三十四:外部SRAM原理及实验代码解读
  19. AE效果:模糊和锐化
  20. html页面统计在线人数,统计在线人数couter

热门文章

  1. 2021年春季学期-信号与系统-第一次作业参考答案
  2. 2020年第十五届竞赛数据上报竞赛数据给高等教学学会统计
  3. 信标灯、三轮车、电容充电
  4. python 文件格式转换_Python的处理数据,如何进行数据转换,学会三种方式
  5. httpposterror_http请求405错误方法不被允许的解决 (Method not allowed)
  6. vim 直接跳转到标签
  7. Zynq ROM 加载Mode 图表
  8. bootstrap项目实例_精选开源SpringBoot项目:涵盖权限、搜索、秒杀、支付!值得学习...
  9. svg animation应用之-描边效果
  10. MeterialDesign系列文章(一)ToolBar的使用