[笔记][FPGA]如何使用SignalTap观察wire与reg值
0. 简介
在FPGA程序调试时,我们除了仿真还经常的会用到SignalTap进行板级调试,其可以真实有效的反应某些变量的变化,方便我们理解内在跳转,方便Debug的运行。SignalTap需要制定时钟,根据需求进行选择,其采样遵循奈奎斯特因采样定律。
我们在Debug中有时会经常遇到这样的情况,在SignalTap中并不能观察到所有的变量值。有些变量添加进入面板后会变红,这就表示SignalTap抓取不到此数值。出现这一现象的原因是,综合器在综合时对一些变量进行了优化,所以就显示不出来了。下文将针对两种变量类型,wire和reg来分别讲述如何让其正常的显示出来。这一部分的知识其实很简单就是,基本思想就是使用综合属性Synthesis Attribute来控制综合时的一些优化。
1. wire型变量
有关于变量的综合属性这一块也可以在Quartus中的language template中查看。wire型变量的综合属性在Quartus 13中的template中显示如下,其主要命令为keep命令。Quartus软件中给出了相关的介绍。
// Prevents Quartus II from minimizing or removing a particular // signal net during combinational logic optimization. Apply // the attribute to a net or variable declaration. (* keep *) wire <net_name>; (* keep *) reg <variable_name>;
其主要是为了防止相关wire型变量在综合时被优化或者是被省略。
总结出wire型变量的综合属性配置方法有以下两种。
a) (* keep * ) wire <net_name>; b) wire <net_name>/* synthesis keep */;
其中,第一种写法为verilog-2001标准,第二种为之前的标准,两者可兼容。需要注意的是在采用第二种写法时,注释部分一定要写在分号之前。
2. reg型变量
reg 型变量的综合属性在Quartus 13中的template中显示如下,其主要命令为preserve和noprune命令。
// Prevents Quartus II 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>(...);
防止优化掉某一个reg型的部分或整体,可以用于某一个特定的变量也可以用于一个module中的所有reg型变量。
// Prevents Quartus II 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>;
防止优化掉一个没有扇出的reg型变量,有可能是无关量,有可能是中间量。
总结出reg型变量综合属性配置的方法有以下几种。
a) (* noprune *) reg <variable>; b) (* preserve *) reg <variable>; c) (* preserve *) module <module_name>(...); d) reg <variable>/* synthesis noprune */; e) reg <variable>/* synthesis preserve */; f) module <module_name>(...)/* synthesis preserve */;
同样有两种写法,是两种标准,读者可任意选择一款觉得方便的。同样注意的是分号的位置,因为比较重要多一多说几遍。reg型有两种,一般自行选择,如果不行就换另外一种试试,总是会有一款ok的形式。
3. 总结
有了这样的可调综合属性,在进行板级调试时可以任意添加中间变量来观察运行状况,极大程度上方便了Debug,提高了效率。
[笔记][FPGA]如何使用SignalTap观察wire与reg值的更多相关文章
- 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
Abstract撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time ...
- fpga中wire和reg的区别
wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入.wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入. ...
- wire与reg的区别?转载大神!
本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------- ...
- verilog中wire与reg类型的区别
每次写verilog代码时都会考虑把一个变量是设置为wire类型还是reg类型,因此把网上找到的一些关于这方面的资料整理了一下,方便以后查找. wire表示直通,即只要输入有变化,输出马上无条件地反映 ...
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...
- 【黑金原创教程】 FPGA那些事儿 SignalTap II 调试技巧
简介工具篇系列的第三本教程,讲述各种与SignalTap II 有关的调试技巧. 目录[黑金原创教程] FPGA那些事儿<工具篇III>:File01 - 上线调试与下线调试[黑金原创教程 ...
- [笔记][FPGA]有限状态机FSM学习笔记(三)
0. 简介 在数电FPGA中,FSM是一个重要的部分,藉此可以完成一些复杂算法的硬件实现等.其中有关于FSM的写法按照always块的个数来划分,又分为一段式.两段式.三段式状态机.顾名思义,一段式就 ...
- C#学习笔记10:Try-catch的用法和引用类型、值类型整理
Try-Catch: 将可能发生异常的代码放到try中,在catch中进行捕获. 如果try中有一行代码发生了异常,那么这行代码后面的代码不会再被执行了. Try写完了以后,紧接着就要写Catch ...
- Dynamic CRM 2015学习笔记(3)oData 查询方法及GUID值比较
本文将比较二种查询字符串在同一个oData查询方法中的不同,另外,还将介绍如何比较不同方法返回的GUID的值. 用同一个oData查询方法,如果传入查询的字符串不一样,返回结果的格式竟然完全不一样. ...
随机推荐
- 【linux】【进程】stand alone 与 super daemon 区别
本文引用自 鸟哥的linux私房菜如果依据 daemon 的启动与管理方式来区分,基本上,可以将 daemon 分为可独立启动的 stand alone , 与透过一支 super daemon 来 ...
- REST Framework 处理一个超链接序列化问题
问题简述 翻译: 不正确的配置 无法使用视图名称“snippet-detail”解析超链接关系的URL.您可能没有在API中包含相关的模型,或者在该字段上错误地配置了' lookup field '属 ...
- drf 频率组件 META字典详情
drf频率组件 什么是频率 控制用户对某个url的请求频率,比如一分钟之内,只能访问三次 自定义频率规则 1.取出访问者ip 2.判断当前ip在不在访问字典中: 不在,则添加进去,返回True; 3. ...
- FIFO buffer 和普通buffer区别
1.FIFO可以说一块具体的硬件存储设备,也可以说程序在内存中开辟的一段内存区域.而buffer往往就是一段缓冲的数据区域 2.FIFO的数据是先进先出的,而buffer没有这个限制,可以全局访问 3 ...
- stm32L0工程建立(HAL+IAR,无cubemx)
https://files.cnblogs.com/files/CodeWorkerLiMing/STM32HAL%E5%BA%93%E5%AD%A6%E4%B9%A0%E2%80%94%E5%B7% ...
- Linux系统监视工具
转自 http://bbs.51cto.com/thread-971896-1.html # 1: top – 查看活动进程的命令TOP工具能够实时显示系统中各个进程的资源占用状况.默认情况 ...
- LA 4094 WonderTeam 构造
题意: 一共有\(n\)支队伍参加比赛,每两支队伍比赛两场,主客场各一场. 胜场得\(3\)分,平局得1分,败场不得分. 一支得分为\(p\)的队伍的排名\(=\)分数大于\(p\)的队伍数\(+1\ ...
- UVa 10118 记忆化搜索 Free Candies
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...
- Spring学习总结(20)——Spring加载多个项目properties配置文件问题解决
多数的鲜为人知方法都是因为有着罕见的应用,就比如说Spring中PropertyPlaceholderConfigurer这个类,它是用来解析Java Properties属性文件值,并提供在spri ...
- canvas 动画库 CreateJs 之 EaselJS(下篇)
本文来自网易云社区 作者:田亚楠 继承 对应原文:Inheritance 我们可以继承已有的「显示对象」,创建新的自定义类.实现方法有很多种,下面介绍其中之一. 举例:实现一个继承于 Containe ...