verilog 基础篇 signal_tap 的使用
实验工具:锆石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 的使用相关推荐
- verilog基础篇--常用的信号生成模块
背景 有时候被叫写一些简单的测试信号,翻来覆去的写.这里我留个底,下次直接复制这些模块. 常用信号 1.//模块功能:产生脉宽可调的周期脉冲信号 //模块功能:产生脉宽可调的周期脉冲信号 `times ...
- verilog基础篇RAM IP核的使用
在该页面中,我们去掉了q output port(去掉输出寄存器),并且添加了一个rden读使能信号,所谓rden读使能信号就是,当该信号为高电平时,我们才可以读取RAM IP核中的数据. 其余的页面 ...
- Verilog基础知识(数值表示总结,signed,原码,反码,补码)
以前虽然是用过verilog,但是只使用了其中最常见wire,reg类型数据,并且是无符号的,因为是及处理过程很多数据就是无符号的.但是想进一步拓展无符号数,或者其底层的补码形式存储与运算方式,就需要 ...
- Python Qt GUI设计:信号与槽的使用方法(基础篇—7)
目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...
- Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)
目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...
- Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)
目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...
- ES6 你可能不知道的事 – 基础篇
ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...
- python多线程并发_Python进阶记录之基础篇(二十四)
回顾 在Python进阶记录之基础篇(二十三)中,我们介绍了进程的基本概念以及Python中多进程的基本使用方法.其中,需要重点掌握多进程的创建方法.进程池和进程间的通信.今天我们讲一下Python中 ...
- 基础篇9-python基本数据结构-列表
基础篇9-python基本数据结构-列表 一.列表: 1.有序的集合 2.通过偏移来索引,从而读取数据 3.支持内嵌 a =[[1,2,3],[4,5,6]] 4.可变类型 a[0][1] = 7 二 ...
最新文章
- spring26-2: bean的作用域
- 4kyu Twice linear
- Ubuntu下安装pip
- 前端面试常见HTML问题(一)
- jzoj4228-C【dp】
- 【机器学习】EM最大期望算法
- 5 批量更新多条记录_批量更新现有记录的默认表格方法
- java tts引擎_让Java说话-用Java实现语音引擎
- MFC DoDataExchange()绑定技术
- C/C++[codeup 1926]EXCEL排序
- 计算机视觉教程(第2版)1-8章期末复习
- drawio中添加数学公式
- 计算机玩游戏黑屏的原因,为什么电脑玩一会游戏就黑屏,这是为什么??????...
- 运动耳机哪个好?六款耳机教会你选运动耳机
- 车牌号测试打分最准确的软件,车牌号码测吉凶准吗?手把手教你选好的车牌号...
- 教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)
- H5+CSS+JS Tab导航栏自动切换
- 开发微信公众平台的基本功能
- uc浏览器视频缓存合并工具
- 使用正则表达式 匹配 HTML 标签内的内容