如何防止ISE综合时信号不被优化掉
我在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综合时信号不被优化掉相关推荐
- 56.ISE综合,在chipscope信号列表看不到
代码写好后,进行逻辑综合,在chipscope上添加被触发的信号时,发现有些在信号列表里看不到,这是因为这些信号没有参与到逻辑电路设计中,产生不想关的电路,综合器会默认优化资源. 还有一种情况是,对于 ...
- ISE综合工具XST综合约束相关
1.ISE的XST综合选项中的Add I/O Buffers对于顶层模块综合时要打开,对于底层模块的综合要关闭. 可以参考:http://wenku.baidu.com/view/27593a6e01 ...
- 对时序逻辑电路采用不同描述方式,ISE综合出来的电路(RTL Schematic)比较(以模5计数器为例)
目录 前言 行为级描述 Verilog HDL设计代码为: ISE综合 RTL Schematic Technology Schematic 状态机描述状态转移图 Verilog HDL代码 测试文件 ...
- 20211028:DC综合时的内部时钟处理
DC综合时的内部时钟处理 问题描述 分析与处理方法 总结 问题描述 综合时出现未约束的endpoints. 分析与处理方法 利用vcs和netlist文件来检索出现的endpoints,追溯至最原始的 ...
- 仿真时信号出现高阻态、不定态——Test Bench中要做声明
仿真时信号出现高阻态或者不定态zx 检查模块例化时是否包含了全部信号列表的信号
- DC综合时Memory(ram、rom)的处理
目录 前言 一.DC综合memory遇到的问题 二.Memory(ram.rom)处理 1.解决思路 2.Memaker安装 3.Memaker使用 3.1 打开Memaker 3.2 Ram的生成 ...
- Vivado中如何避免信号被优化掉?
刚写了一段 Verilog代码,辛辛苦苦花了很长时间综合,在debug的过程中,却找不到需要debug的信号了,查看网表发现没有? 这种情况是因为我们的某些中间信号被优化掉了. 被优化掉的原因有可能是 ...
- 防止Qii编译器优化掉某信号的方法
当某信号没有在Top Level上被使用,但又希望其出现在SignalTap II中作为测试信号,除了把该信号在顶层中声明为port之外,还可以利用编译器的synthesis attribute.具体 ...
- c语言运行时显示内存不足,请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码...
请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码 [size=4][size=5]我编的一个高精度解hilbert方程组的程序段,用的是GS跌代,但运行时出现"虚拟内存不足&qu ...
最新文章
- 面试:为什么 Java 线程没有Running状态?
- 解决修改properties 属性文件存在缓存问题,附带操作properties文件工具类
- java中创建对象的方式
- 数据库-主键和外键及其约束
- 围猎“下沉市场”,争抢「小镇青年」,尚美如何突围?
- 【Oracle】查看死锁与解除死锁
- SpringMVC框架的介绍
- 深度思考|TCP协议存在那些缺陷?
- miui12怎么自定义开机动画_MIUI12正式官宣,5天后发布!网友:发布是发布,12月才能更新?...
- Ubuntu下Authentication token manipulation error或者Authentication Failure解决办法
- 广告CTR预估中用户行为学习和记忆建模
- Linux pid_t 类型的定义
- 史上最全最详细的APP运营推广策划方案
- 分享一款在线考试学习系统.net源码
- 【Arduino】一天入门Arduino语言 教程
- iOS 3DTouch 代码实现
- 萌系外表+丰富功能,i宝机器人成CES人气展品
- STM32学习心得三十四:外部SRAM原理及实验代码解读
- AE效果:模糊和锐化
- html页面统计在线人数,统计在线人数couter
热门文章
- 2021年春季学期-信号与系统-第一次作业参考答案
- 2020年第十五届竞赛数据上报竞赛数据给高等教学学会统计
- 信标灯、三轮车、电容充电
- python 文件格式转换_Python的处理数据,如何进行数据转换,学会三种方式
- httpposterror_http请求405错误方法不被允许的解决 (Method not allowed)
- vim 直接跳转到标签
- Zynq ROM 加载Mode 图表
- bootstrap项目实例_精选开源SpringBoot项目:涵盖权限、搜索、秒杀、支付!值得学习...
- svg animation应用之-描边效果
- MeterialDesign系列文章(一)ToolBar的使用