在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. 2 Struts2的执行流程&配置文件的加载顺序

    执行流程: 访问前段页面,通过url访问action 访问xml中Struts2核心过滤器,并执行一组拦截器(这组拦截器在struts-default.xml中,实现了部分功能) 通过action配置 ...

  2. PCF8591 AD/DA模块使用详解

    I2C PCF8591 8位AD/DA转换 BCM2835 Library 1.PCF8591T简述 PCF8591器件图如下: PCF8591是一个8位的CMOS数据采集器件,具有4个模拟输入(其中 ...

  3. java记录5--线程

    ------------恢复内容开始------------ 1.什么叫程序:是一个严格有序的指令集合.程序规定了完成某一任务时,计算机所需做的各种操作,已经执行顺序. 特点:资源的独占性     执 ...

  4. 获取Webshell方法总结

    一.CMS获取Webshell方法 搜索CMS网站程序名称 eg:phpcms拿webshell.wordpress后台拿webshell 二.非CMS获取Webshell方法 2.1数据库备份获取W ...

  5. 「CH6901」骑士放置

    「CH6901」骑士放置 传送门 将棋盘黑白染色,发现"日"字的两个顶点刚好一黑一白,构成一张二分图. 那么我们将黑点向源点连边,白点向汇点连边,不能同时选的一对黑.白点连边. 当 ...

  6. 111、Java中String类之字符串文本全部拆分

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  7. HTML中元素 标签 属性

    HTNL中元素是以开始标签开始 结束标签结尾的 如:<p>this is a paragraph </p> <p>是开始标签   </p>是结束标签  ...

  8. 深入理解 Python 中的装饰器

    装饰器本质上也是函数,接收函数对象来作为参数,并在装饰器的内部来调用接受的函数对象完成相关的函数调用,也可以这样理解   ,为了方便在几个不同函数调用之前或者完成相关的统一操作,注意是完成统一的操作, ...

  9. topthink/think-swoole 扩展包的使用 之 WebSocket

    嗯~ o(* ̄▽ ̄*)o,没错欢迎收看继续爬坑系列233...话不多说直接开撸 今天的题材是websocket,没有特殊说明的话默认环境都和此系列第一篇文章中申明一致,此后不再赘述. websocke ...

  10. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机--(转)

    原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法 ...