- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
逻辑分析仪采样控制模块
逻辑分析仪采样控制模块
小梅哥编写, 可适用于芯航线 FPGA 学习套件, 作者保留一切所有权
2016 年 7 月 17 日星期日
逻辑分析仪最核心的功能就是对待测信号的采集。既然有数据采集,也就涉及到数据存
储。对于本DEMO,数据最终存储到FPGA 片上RAM 中。因此,我们只需要控制好将数据在
正确的时间,以正确的方式存储到RAM 中正确的位置即可。如何确保数据在正确的时间,
以正确的方式存储到RAM 中正确的位置呢,这就是采样控制模块的设计核心。
而如何在正确的时间,来存储数据到RAM 中呢?这就涉及到一个触发的概念。以下以
数字存储示波器的触发原理来进行介绍。
采样触发介绍
什么是触发?
任何示波器的存储器容量都是有限的,因此所有示波器都必须使用触发。触发是示波器
应该发现的用户感兴趣的事件。换句话说,它是用户想要在波形中寻找的东西。触发可以是
一个事件(即波形中的问题),但不是所有的触发都是事件。触发实例包括边沿触发、毛刺信
号触发和数字码型触发。
示波器必须使用触发的原因在于其存储器的容量有限。例如,Agilent 90000 系列示波器
具有 20 亿采样的存储器深度。但是,即便拥有如此大容量的存储器,示波器仍需要一些事
件来区分哪 20 亿个采样需要显示给用户。尽管 20 亿的采样听起来似乎非常庞大,但这仍
不足以确保示波器存储器能够捕获到感兴趣的事件。
示波器的存储器可视为一个传送带。无论什么时候进行新的采样,采样都会存储到存储
器中。存储器存满时,最旧的采样就会被删除,以便保存最新采样。当触发事件发生时,示
波器就会捕获足够的采样,以将触发事件存储在存储器要求的位置(通常是在中间),然后将
这些数据显示给用户。
逻辑分析仪触发方式
以上为示波器的触发理论原理介绍,而对于逻辑分析仪,由于采集的是数字信号,因此
触发类型和示波器稍微有些区别。逻辑分析仪中常见的触发方式包括延迟触发、限定触发、
组合触发、毛刺触发等。而本例作为学习型示例,主要目标为讲述一个完整数字系统的设计
过程,重点不在于实现商用逻辑分析仪的完整功能,因此可以简化触发方式,本逻辑分析仪
主要支持以下几种触发方式:
电平触发:低电平触发、高电平触发
边沿触发:上升沿触发、下降沿触发、边沿触发(上升沿或下降沿触发)
立即触发:实时触发
触发电路设计
触发条件检测
整个逻辑分析仪的触发模型就是一组被采样信号输入,根据被采样信号是否满足触发条
件,如果被采样信号满足当前指定的触发条件,则开始存储被采样到的数据到RAM 中。当
RAM 数据存储慢后,停止存储。等待再次满足触发条件,然后重新开始存储。
因此,要想实现正确的数据采样,首先我们需要能够正确的识别触发条件,电平识别非
常简单,而边沿识别则相对复杂些。关于边沿识别的具体原理,在 《小梅哥FPGA 设计思想
与验证方法视频教程》中,“09_A 按键消抖模块设计与验证”一课中有过介绍,关于边沿检
测的具体原理,可参见该视频以及配套的视频精讲手册文档。以下为对输入的带采样数据进
行边沿识别的代码:
reg [9:0]data_r1; //输入信号同步寄存器
reg [9:0]data_r2;
wire [9:0] s_posedge; //上升沿标志
wire [9:0] s_negedge; //下降沿标志
wire [9:0] s_edge; //边沿标志
//同步输入信号
always@(posedge Clk)
if (clken) begin
data_r1 = data_in;//一级寄存器赋值
data_r2 = data_r1;//二级寄存器赋值
end
assign s_posedge = data_r1 ~data_r2;//上升沿检测
assign s_negedge = ~data_r1 data_r2;//下降沿检测
assign s_edge = data_r1 ^ data_r2; //边沿检测
本系统逻辑分析仪总共有10 个输入
文档评论(0)