SignalTap II Logic Analyzer 无法观测到信号?
在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 无法观测到信号?的更多相关文章
- SignalTap II逻辑分析仪的使用
一.例子 我们使用如图1所示的verilog代码所实现的开关电路作为例子.这个电路把DE系列开发板上的前8个开关简单的和对应的8个红色LED相连接.它是这样工作的:在时钟(CLOCK_50)的上升沿读 ...
- SignalTap ii的使用
1.实现原理 SignalTap II获取实时数据的原理是在工程中引入Megafunction中的ELA(Embedded Logic Analyzer),以预先设定的时钟采样实时数据,并存储于FPG ...
- SignalTap II应用小实例之触发位置
概述 SignalTap II一直以来都是笔者调试Altera FPGA设计的利器,最近比较有时间静下心来研究SignalTap II某些细节,虽然笔者有过不少关于SignalTap的使用,且也发表过 ...
- Quartus prime 16.0 signaltap II 使用
前言 由于逻辑分析仪太贵,altera贴心提供signal tap II来观察输出波形,不过使能signaltap II会占用片内ram,毕竟原理就是把数据采样到ram中再通过jtag口上传到quar ...
- 孕龙逻辑分析仪 ZeroPlus Logic Analyzer
Voltage Translation for Analog to Digital Interface ADC http://openschemes.com/2010/03/23/zeroplus-l ...
- Vivado Logic Analyzer的使用
chipscope中,通常有两种方法设置需要捕获的信号.1.添加cdc文件,然后在网表中寻找并添加信号2.添加ICON.ILA和VIO的IP Core 第一种方法,代码的修改量小,适当的保留设计的层级 ...
- Vivado Logic Analyzer的使用(二)
本文基于Vivado 2014.2,阅读前请参考前文http://blog.chinaaet.com/detail/37264 之前的设计都是出发后直接捕获数据.其实,与chipscope类似,可以设 ...
- Vivado Logic Analyzer的使用(一)
本文基于Vivado 2014.2,通过一个简单的设计来讨论Vivado Logic Analyzer的功能. 在上一篇http://blog.chinaaet.com/detail/37242中,设 ...
- Vivado Logic Analyzer的进一步探讨
本文基于Vivado 2014.2,代码基于文章http://blog.chinaaet.com/detail/37239中使用的代码. 这一篇仅讨论在综合后的Netlist中选择信号进行捕获的方法. ...
随机推荐
- 10 JavaScript对象&类&for循环
JavaScript对象 JavaScript中所有事物都是对象:字符串.数值.数组.函数.数学和正则表达式 JavaScript有些类型可以是字面量而非对象:如字符串.数值.布尔值 JavaScri ...
- Eclipse开发快捷键
ctrl+alt+r:查找资源 ctrl+o:快速outLine ctrl+e:快速切换编辑器 ctrl+./ctrl+1:下一个错误修改
- 十五 OGNL的入门
一.访问对象的方法
- 【原】postman常用设置全局变量的js片段
postman知识总结: API自动化利器:http://www.bayescafe.com/tools/use-postman-to-test-api-automatically.html 1.获取 ...
- 帆软FineReport报表使用小技巧
1.IF函数写法: =IF(E3=0 && F3=0 && G3=0,1,0)
- 第5节 Actor实战:1 - 6
10.3. Actor实战 10.3.1. 第一个例子 怎么实现actor并发编程: 1.定义一个class或者是object继承Actor特质,注意导包import scala.actor ...
- Systemverilog for design 笔记(一)
转载请标明出处 一. System Verilog 声明的位置 1. 包(packages) Verilog要求局部声明: variables, nets, tasks and f ...
- Python 基础之import导包
首先需要将import内容建立一个大概如下层级的包: 以黑色框为第一级,蓝色框为第二级,棕色框为第三级,红色框为第四级 一.import 引入初识 首先在module.py写入代码如下: xboy = ...
- 设计模式课程 设计模式精讲 21-2 观察者模式coding
1 代码演练 1.1 代码演练1(一对一观察) 1.2 代码演练2(一对多观察) 1.3 代码演练3(多对多观察) 1 代码演练 1.1 代码演练1(一对一观察) 需求: 木木网课程系统,教师后台提醒 ...
- ubuntu14 安装Sublime Text 3
Step1 从官网下载Sublime Text3 安装包 sublime_text_3_build_3176_x64.tar.bz2,如果有网络问题,请挂VPN或者从其他地方下载. 拷贝至/home/ ...