在Quartus SignalTap 工具中加入信号,发现加入的信号变成红色,如图所示的data_slave[7..0]:

这样的信号是没有办法观测的,不会根据SignalTap 的Clock和Trigger进行更新,原因是Synthesis过程将它省略,

添加综合选项(Synthesis Attribute)可以让综合器保留这些对顶层模块输入输出没有帮助的信号,常用的有:

wire[:] cnt/*synthesis keep*/;  // Keep the Entity of Wire
reg signed[11:0] corr_i_out/*synthesis preserve*/; // Keep the Entity of Register

实际上,对于组合逻辑的输出可以用keep,而时序逻辑块的输出信号常用preserve选项。

同时,红色的无效SignalTap信号会影响SignalTap中其他的信号。这样的空头支票放入SignalTap组件之中,很大概率会影响系统的时序,比如,使得其他待观测的信号全部观察不到了!

在设计调试的时候一定要取消这样的“空头支票”。

*****************************************************************************

*****************************************************************************

************ Quartus中,综合选项preserve和noprune选项的差别:

在Quartus模板代码插入工具中,有综合选项的选项,Altera给出的形式和说明分别如下:

// Prevents Quartus Prime from optimizing away a register.
// Apply the attribute to the variable declaration for an object that infers a register. (* preserve *) <variable_declaration>;
(* preserve *) module <module_name>(...);
// Prevents Quartus Prime from removing or optimizing a fanout free register.
// Apply the attribute to the variable declaration for an object that infers a register. (* noprune *) <variable_declaration>;

在帮助文档中,有更详细的解释,关键点总结如下:

(1)preserve

preserve属性防止Quartus在“分析与综合”过程中缩减或者删除那个指定的寄存器,这个综合属性可以将寄存器预留给仿真器或者SignalTap,方便我们进行观测。preserve属性还可以在设计初期防止寄存器被优化消失,比如寄存器输入总是赋“逻辑1”这样的常量,“分析-综合”器会把这个寄存器的特性认为是“不关心上电后的初值”,进而综合(Synthesis)的结果将这个寄存器省略(消除)了。如果加入preserve这个选项就会使这个寄存器实体存在。

另外,preserve属性不能阻止综合器优化那些重复(duplication)或者分组捆绑(pack)的寄存器。重复和分组捆绑的详细情况保存在Analysis& Synthesis Netlist Optimizations和Fitter Netlist Optimizations报告中。更加详尽的寄存器综合选项请查看Netlist Optimizations选项。

同时,preserve选项有两个重要的局限性:

如果寄存器有preserve属性,那么它不会被综合成为状态机的元素。(就是说,有可能破坏综合器对于状态机的合成)

preserve属性不能防止综合器删除那些无扇出的寄存器。(对于无扇出的寄存器,请用noprune选项进行保留)

Verilog 2001规范中,可以这样赋予preserve属性:

(*preserve*) reg dout_reg;

还可以这样进行属性赋予:

reg dout_reg/* synthesis preserve */;

在定义module时,也可以给这个模块赋予preserve属性,这样下来,模块中的所有reg都有了preserve的综合属性,形式如下:

(* preserve *) module my_block(rst, clk, ...);

(2)noprune

noprune大概是no prune(不要修剪)的紧凑写法。该属性阻止综合器删除那些不会直接、间接驱动顶层模块output(或者inout)端口的寄存器(比如说无扇出的寄存器)。noprune属性与preserve属性不同,preserve属性会让综合器保留那些本可以简化成常量逻辑的寄存器,还有那些可以合并在一起的寄存器(逻辑值共用一个源)。

在很多情况下,我们作为设计者都想使用这些无扇出(Fan-out Free)的寄存器。比如:这个寄存器在进一步的设计中会被用来驱动一些电路(预留位置);用来送入SignalTap进行观察调试;用来驱动SignalProbe引脚。

实际上,Quartus编译器将noprune属性翻译为Preserve Fan-out Free Register Node选项交给综合器进行处理。

在Verilog 2001中的用法如法炮制:

(* noprune *) reg dout_reg;

reg dout_reg/* synthesis noprune */; 

*************************************************************************************************************************

*************************************************************************************************************************

使用经验:

(1)有的时候,用noprune不能观测到,信号在SignalTap中为红的。这个时候用preserve属性,可以将信号观测到,但是原理图上失去了状态机。

(2)有的时候,给状态机的stat变量用preserve属性标注,这样会使得State Machine Viewer中失去该状态机,stat变量可以被观测到,但是系统工作不正常(???)。这时将其他内部reg用noprune属性标注,观测和功能都正常了。(什么原因?!?!)

SignalTap II Logic Analyzer 无法观测到信号?的更多相关文章

  1. SignalTap II逻辑分析仪的使用

    一.例子 我们使用如图1所示的verilog代码所实现的开关电路作为例子.这个电路把DE系列开发板上的前8个开关简单的和对应的8个红色LED相连接.它是这样工作的:在时钟(CLOCK_50)的上升沿读 ...

  2. SignalTap ii的使用

    1.实现原理 SignalTap II获取实时数据的原理是在工程中引入Megafunction中的ELA(Embedded Logic Analyzer),以预先设定的时钟采样实时数据,并存储于FPG ...

  3. SignalTap II应用小实例之触发位置

    概述 SignalTap II一直以来都是笔者调试Altera FPGA设计的利器,最近比较有时间静下心来研究SignalTap II某些细节,虽然笔者有过不少关于SignalTap的使用,且也发表过 ...

  4. Quartus prime 16.0 signaltap II 使用

    前言 由于逻辑分析仪太贵,altera贴心提供signal tap II来观察输出波形,不过使能signaltap II会占用片内ram,毕竟原理就是把数据采样到ram中再通过jtag口上传到quar ...

  5. 孕龙逻辑分析仪 ZeroPlus Logic Analyzer

    Voltage Translation for Analog to Digital Interface ADC http://openschemes.com/2010/03/23/zeroplus-l ...

  6. Vivado Logic Analyzer的使用

    chipscope中,通常有两种方法设置需要捕获的信号.1.添加cdc文件,然后在网表中寻找并添加信号2.添加ICON.ILA和VIO的IP Core 第一种方法,代码的修改量小,适当的保留设计的层级 ...

  7. Vivado Logic Analyzer的使用(二)

    本文基于Vivado 2014.2,阅读前请参考前文http://blog.chinaaet.com/detail/37264 之前的设计都是出发后直接捕获数据.其实,与chipscope类似,可以设 ...

  8. Vivado Logic Analyzer的使用(一)

    本文基于Vivado 2014.2,通过一个简单的设计来讨论Vivado Logic Analyzer的功能. 在上一篇http://blog.chinaaet.com/detail/37242中,设 ...

  9. Vivado Logic Analyzer的进一步探讨

    本文基于Vivado 2014.2,代码基于文章http://blog.chinaaet.com/detail/37239中使用的代码. 这一篇仅讨论在综合后的Netlist中选择信号进行捕获的方法. ...

随机推荐

  1. C 语言入门第八章--C语言预处理命令

    例如:#include ,这种以#号开头的命令称为预处理命令. ===C语言宏定义(#define的用法)==== #define 叫做宏定义命令,它也是C语言预处理命令的一种.所谓宏定义,就是用一个 ...

  2. JDBC 存储过程

    存储过程 DROP PROCEDURE IF EXISTS `addUser`; CREATE PROCEDURE `addUser` (),in birthday date,in money flo ...

  3. git rebase 与git merge 小结

    git merge是用来合并两个分支的. $ git merge b   将b分支合并到当前分支 同样  $ git rebase b ,也是把 b分支合并到当前分支 ---------------- ...

  4. eclipse问题集合

    [eclipse更换jdk版本]

  5. zookeeper和eureka的区别在哪?

    zookeeper和eureka的区别在哪?传统的关系型数据库是ACID(原子性,一致性,独立性,持久性), nosql数据库是CAP(强一致性,可用性,分区容错性),分布式系统只能3进2,三个选两个 ...

  6. Number()、parseInt()、parseFloat()、~~、~

    一.Number() 如果是Boolean值,true和false值将分别被转换为1和0. 如果是数字值,只是简单的传入和返回. 如果是null值,返回0. 如果是undefined,返回NaN. 如 ...

  7. Hbase 永久 Region-In-Transition 的查错记录

    状态:部分 region 的状态为 FAILED_CLOSE,且一直停留在 RIT,不可服务. 1. 首先,到 hbase region 上查日志(/var/log/hbase/),看到是 hdfs ...

  8. 学习笔记:中国剩余定理(CRT)

    引入 常想起在空间里见过的一些智力题,这个题你见过吗: 一堆苹果,\(3\)个\(3\)个地取剩\(1\)个,\(5\)个\(5\)个地取剩\(1\)个,\(7\)个\(7\)个地取剩\(2\)个,苹 ...

  9. 「NOIP2011」Mayan游戏

    传送门 Luogu 解题思路 爆搜,并考虑几个剪枝. 不交换颜色相同的方块(有争议,但是可以过联赛数据 \(Q \omega Q\)) 左边为空才往左换 右边不为空才往右换 因为对于两个相邻方块,右边 ...

  10. 自动PC端显示 手机端隐藏CSS代码判断实现

    实现场景描述: 有些内容部署在PC端但是有不适合在手机端显示(比如盒子过大,遮挡内容)或者手机端显示毫无意义等.我们可以使用下面的代码来实现:电脑端显示,手机端隐藏 实现方法: CSS控制判断 @me ...