实验工具:锆石A4开发板
软件:quartus 13.1

Signal Tap 就相当于逻辑分析仪,signal Tap是利用FPGA的内部逻辑资源形成一个内部的逻辑分析仪


有时候内部管脚还多于外部管脚,这个时候更没法测试

使用流程

//---------------------------------------------------------------------------
//--    文件名     :   A4_Ked2.v
//--    作者      :   ciscomonkey,代码搬移的锆石科技的
//--    描述      :   按键消抖
//--    修订历史    :
//---------------------------------------------------------------------------
module A4_Key2
(//输入端口CLK_50M,RST_N,KEY,//输出端口LED
);  //---------------------------------------------------------------------------
//--    外部端口声明
//---------------------------------------------------------------------------
input                   CLK_50M;                //时钟的端口,开发板用的50MHz晶振
input                   RST_N;              //复位的端口,低电平复位
input       [ 7:0]  KEY;                    //对应开发板上的KEY
output  [ 7:0]  LED;                    //对应开发板上的LED//---------------------------------------------------------------------------
//--    内部端口声明
//---------------------------------------------------------------------------
reg     [20:0]  time_cnt;           //用来计数按键延迟的定时计数器
reg     [20:0]  time_cnt_n;         //time_cnt的下一个状态
reg     [ 7:0]  key_in_r;           //用来接收按键信号的寄存器
reg     [ 7:0]  key_out;                //消抖完成输出按键
reg     [ 7:0]  key_out_n;          //key_out的下一个状态
wire                    key_press;          //检测按键有没有变化//设置定时器的时间为20ms,计算方法为  (20*10^3)us / (1/50)us  50MHz为开发板晶振
parameter SET_TIME_20MS = 21'd1_000_000;  //---------------------------------------------------------------------------
//--    逻辑功能实现  ,按一下,灯变化一次
//---------------------------------------------------------------------------
//时序电路,用来key_in_r寄存器赋值always @ (posedge CLK_50M, negedge RST_N)beginif(!RST_N)                              //判断复位key_in_r <= 8'h00;               //初始化key_in_r值elsekey_in_r <= KEY;                  //将按键的值赋值给key_in_rendassign key_press = key_in_r ^ KEY;    //检测按键有没有变化//时序电路,用来给time_cnt寄存器赋值always @ (posedge CLK_50M, negedge RST_N)beginif(!RST_N)                              //判断复位time_cnt <= 21'h0;               //初始化time_cnt值elsetime_cnt <= time_cnt_n;           //用来给time_cnt赋值end//组合电路,实现20ms的定时计数器always @ (*)beginif(time_cnt == SET_TIME_20MS || key_press) //判断按键有没有变化、时间有没有到time_cnt_n = 21'h0;              //如果到达20ms或者按键有了变化,那么定时计数器将会被清零elsetime_cnt_n = time_cnt + 1'b1; //如果未到20ms或者按键没有变化,那么定时计数器将会继续累加end//时序电路,用来key_out寄存器赋值always @ (posedge CLK_50M, negedge RST_N)beginif(!RST_N)                                //判断复位key_out <= 8'h00;                    //初始化key_out值elsekey_out <= key_out_n;          //用来给key_out赋值end//组合电路,每20ms接收一次按键的值always @ (*)beginif(time_cnt == SET_TIME_20MS)       //判断20ms时间key_out_n = key_in_r;            //如果到达20ms,接收一次按键的值elsekey_out_n = key_out;                //如果未到20ms,保持原状态不变endassign LED = key_out;                 //将消抖的按键值赋值给LEDendmodule

选择New----》signal tap II

或者在tool下面选择signal tap II


在这里可以保存signal Tap II

signal Tap II界面的选项介绍


在信号的观察界面,右键点击Add Nodes

选中Design Entry(设计条目)
然后点击list
选择要观察的信号

观察信号界面弹出我们选中的信号。

有的时候,可能我们要观察内部的信号时红色的,这个时候往往是被优化掉了,导致我们没法观察到想要观察的信号。
这个时候有两种办法:
1,将我们要观察的信号拉到顶层接口
2. 在观察的wire信号旁边加上/synthesis keep/
对于reg信号则加 /synthesis noprune/ 或者 /synthesis preserve/


配置采样属性

对signal tap II的时钟进行配置

如上图所示,如果我们选择输入时钟,会弹出以上对话框,也就是说我们的输入时钟不能够又作为signal tap II 的采样时钟,又作为我们的系统时钟。这个时候,可以用PLL生成一个更高倍的时钟作为采样时钟。

这里我们把观察信号里面的输入时钟移去。
右下角的触发条件我们可以不用管,在观察信号里的圆圈里对每一个信号设置出发条件,就是说在观察信号的下降沿采样,还是说在信号的上升沿进行采样,还是说dont care


对采样的深度进行设置

连接好我们的板子。进行重新编译,然后选好SOF


然后下载我们的SOF文件

我们发现signal tap II 已经变成了 ready to acquire

点击run analysis,或者auto run analysis

当我按下复位键的时候,变为低电平,然后进行采样。
如果我设置为要么在按下Key键,要么在RST键采样,设置为OR即可

工程:
https://download.csdn.net/download/ciscomonkey/10801959

verilog 基础篇 signal_tap 的使用相关推荐

  1. verilog基础篇--常用的信号生成模块

    背景 有时候被叫写一些简单的测试信号,翻来覆去的写.这里我留个底,下次直接复制这些模块. 常用信号 1.//模块功能:产生脉宽可调的周期脉冲信号 //模块功能:产生脉宽可调的周期脉冲信号 `times ...

  2. verilog基础篇RAM IP核的使用

    在该页面中,我们去掉了q output port(去掉输出寄存器),并且添加了一个rden读使能信号,所谓rden读使能信号就是,当该信号为高电平时,我们才可以读取RAM IP核中的数据. 其余的页面 ...

  3. Verilog基础知识(数值表示总结,signed,原码,反码,补码)

    以前虽然是用过verilog,但是只使用了其中最常见wire,reg类型数据,并且是无符号的,因为是及处理过程很多数据就是无符号的.但是想进一步拓展无符号数,或者其底层的补码形式存储与运算方式,就需要 ...

  4. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  5. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  6. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  7. ES6 你可能不知道的事 – 基础篇

    ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...

  8. python多线程并发_Python进阶记录之基础篇(二十四)

    回顾 在Python进阶记录之基础篇(二十三)中,我们介绍了进程的基本概念以及Python中多进程的基本使用方法.其中,需要重点掌握多进程的创建方法.进程池和进程间的通信.今天我们讲一下Python中 ...

  9. 基础篇9-python基本数据结构-列表

    基础篇9-python基本数据结构-列表 一.列表: 1.有序的集合 2.通过偏移来索引,从而读取数据 3.支持内嵌 a =[[1,2,3],[4,5,6]] 4.可变类型 a[0][1] = 7 二 ...

最新文章

  1. spring26-2: bean的作用域
  2. 4kyu Twice linear
  3. Ubuntu下安装pip
  4. 前端面试常见HTML问题(一)
  5. jzoj4228-C【dp】
  6. 【机器学习】EM最大期望算法
  7. 5 批量更新多条记录_批量更新现有记录的默认表格方法
  8. java tts引擎_让Java说话-用Java实现语音引擎
  9. MFC DoDataExchange()绑定技术
  10. C/C++[codeup 1926]EXCEL排序
  11. 计算机视觉教程(第2版)1-8章期末复习
  12. drawio中添加数学公式
  13. 计算机玩游戏黑屏的原因,为什么电脑玩一会游戏就黑屏,这是为什么??????...
  14. 运动耳机哪个好?六款耳机教会你选运动耳机
  15. 车牌号测试打分最准确的软件,车牌号码测吉凶准吗?手把手教你选好的车牌号...
  16. 教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)
  17. H5+CSS+JS Tab导航栏自动切换
  18. 开发微信公众平台的基本功能
  19. uc浏览器视频缓存合并工具
  20. 使用正则表达式 匹配 HTML 标签内的内容

热门文章

  1. 通过反射获取DLL的类实现加载窗体
  2. 自定义UICollectionView
  3. javascript优化--13模式1(DOM和浏览器模式)
  4. 关于谷歌自动换行的奇异效果
  5. hdu 1054(最小顶点覆盖)
  6. 一位程序员的奋斗历程!------转载
  7. 组合恒等式7 组合变换的互逆公式 简介与简单例子
  8. 直接修改PE文件头PE标识字段的实验
  9. 不同浏览器前端调试查看返回页面的json数据
  10. C# - Marshal 学习总结