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值的更多相关文章

  1. 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)

    Abstract撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time ...

  2. fpga中wire和reg的区别

    wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入.wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入. ...

  3. wire与reg的区别?转载大神!

    本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------- ...

  4. verilog中wire与reg类型的区别

    每次写verilog代码时都会考虑把一个变量是设置为wire类型还是reg类型,因此把网上找到的一些关于这方面的资料整理了一下,方便以后查找. wire表示直通,即只要输入有变化,输出马上无条件地反映 ...

  5. C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型

    C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...

  6. 【黑金原创教程】 FPGA那些事儿 SignalTap II 调试技巧

    简介工具篇系列的第三本教程,讲述各种与SignalTap II 有关的调试技巧. 目录[黑金原创教程] FPGA那些事儿<工具篇III>:File01 - 上线调试与下线调试[黑金原创教程 ...

  7. [笔记][FPGA]有限状态机FSM学习笔记(三)

    0. 简介 在数电FPGA中,FSM是一个重要的部分,藉此可以完成一些复杂算法的硬件实现等.其中有关于FSM的写法按照always块的个数来划分,又分为一段式.两段式.三段式状态机.顾名思义,一段式就 ...

  8. C#学习笔记10:Try-catch的用法和引用类型、值类型整理

    Try-Catch: 将可能发生异常的代码放到try中,在catch中进行捕获. 如果try中有一行代码发生了异常,那么这行代码后面的代码不会再被执行了. Try写完了以后,紧接着就要写Catch   ...

  9. Dynamic CRM 2015学习笔记(3)oData 查询方法及GUID值比较

    本文将比较二种查询字符串在同一个oData查询方法中的不同,另外,还将介绍如何比较不同方法返回的GUID的值. 用同一个oData查询方法,如果传入查询的字符串不一样,返回结果的格式竟然完全不一样. ...

随机推荐

  1. DeepFaceLab小白入门(2):软件安装!

    严格上来说这个软件本身并不需要安装,他唯一需要的就是对应版本的显卡驱动,CUDA和CuDNN都非必须.下面我说一下如何安装正确的驱动版本.我尽量写得简洁清晰,希望大家都能看懂,但是,如果你连基本的电脑 ...

  2. java web项目(spring项目)中集成webservice ,实现对外开放接口

    什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring ...

  3. Python入门学习笔记2:刷题

    1) LeetCode 强的面试题和算法题,要求也比较高,很多国内外的码农在上面刷题.难度从easy到hard都有,而且覆盖面极广,需要你的综合实力去答题. 最简单的题比如字符串的处理有的时候也要用到 ...

  4. list_add_tail()双向链表实现分析

    struct list_head { struct list_head *next, *prev; }; list_add_tail(&buf->vb.queue, &vid-& ...

  5. 使用百度siteapp开发网站的App-(IOS和Android版本)

    介绍 之前写了个把百度云作文网站文件服务器.一些园友的评论不错.不过我似乎把意思弄错了!  我用的百度云的SVN环境! 现在不少人都做web开发.不管你是什么语言编写的(jsp,php,asp.net ...

  6. java中equals和hashCode方法随笔二

    前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...

  7. Iterator设计模式--jdk1.7

    参照:http://www.cnblogs.com/tstd/p/5049338.html java.util.Iterator<E>是一个接口,它的定义如下: public interf ...

  8. Centos7系统rc.local不起作用问题

    Centos7系统rc.local不起作用问题 来源 https://www.cnblogs.com/xjz00/p/7729405.html Centos7已经写了要chmod +x /etc/rc ...

  9. 2016 年 ACM/ICPC 青岛区域赛 Problem C Pocky

    昨晚乱入学弟的训练赛,想了一下这个题.推导的过程中,加深了对公理化的概率论理解.$\newcommand{\d}{\mathop{}\!\mathrm{d}}$ 解法一 考虑 $ d < L$ ...

  10. mybatis学习(六)——参数处理

    先总结一下,后面再一个个解释: 单个参数:直接使用#{参数名}进行取值,mybatis没做特殊处理,参数名可以随便写. 多个参数:使用#{param1},#{param2}取值 命名参数:通过@par ...