在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. Markdown中实现折叠代码块

    <details> <summary>展开查看</summary> <pre><code> System.out.println(" ...

  2. 【PAT甲级】1028 List Sorting (25 分)

    题意: 输入一个正整数N(<=100000)和C(C属于{1,2,3}),接下来输入N行,每行包括学生的六位学号(习惯用string输入,因为可能有前导零),名字和成绩(正整数).输出排序后的信 ...

  3. 「luogu4366」最短路

    「luogu4366」最短路 传送门 直接连边显然不行,考虑优化. 根据异或的结合律和交换律等优秀性质,我们每次只让当前点向只有一位之别的另一个点连边,然后就直接跑最短路. 注意点数会很多,所以用配对 ...

  4. Spring @Async之一:实现异步调用示例

    什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果 ...

  5. 说说maven依赖冲突,依赖调解,依赖传递和依赖范围

    说maven依赖冲突之前需要先说说maven的 依赖传递. 依赖传递 当前项目引入了一个依赖,该依赖的依赖也会被引入项目.更加准确的说法是,maven会解析直接依赖的POM,将那些必要的间接依赖,以传 ...

  6. 防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件

    虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...

  7. 搜索栏UISearchBar的使用

    本文结构: 1.首先是对UISearchBar的简介文字 2.初始化展现UISearchBar,并解析它的结构 3.属性.方法.代理等的一一介绍 4.日常的使用,包括单独对UISearchBar的配置 ...

  8. Scrapy 中的模拟登陆

    目前,大部分网站都具有用户登陆功能,其中某些网站只有在用户登陆后才能获得有价值的信息,在爬取这类网站时,Scrapy 爬虫程序先模拟登陆,再爬取内容 1.登陆实质 其核心是想服务器发送含有登陆表单数据 ...

  9. 四 SpringMVC与页面之间的参数传递&高级参数的绑定&日期类型的转换

    参数传递: 1 原生方式:使用Servlet  API  , request.getParameter("id"); 2 直接将请求参数作为Controller中的形参: publ ...

  10. Oracle查看正在执行的存储过程

    正在执行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks >0 and pin ...