直方图对数字数据的分析通常是一种有用的工具。不过,要从一个直方图获得可靠的结果,必须获得大量数据,通常是要10万到100万个点。如果需要分析一个ADC的数字输出,可以采用一片FPGA(图1)。

  图中显示了直方图、RAM和脉冲发生器部分,用于捕捉和显示基于14 位数据计算出来的直方图。RAM块是FPGA的内置RAM,而直方图块是用于计算的VHDL(高级设计语言)代码。本应用的VHDL代码也可以从http://www.edn.com/file/25820-Compute_a_histogram_in_an_FPGA_with_one_clock_code.doc下载。

  来自ADC的14 位并行数据Device_ Data[13..0]进入直方图块,并进入RAM的Rd_Addr输入端。RAM在其地址位置RAMDataOut[ 15..0]上提供数据。这个数据环回到直方图块,将其加1后送至一个16 位数据的输出端DataOut[15..0]。当WREN(写使能)端为逻辑电平1时,数据被写在管脚Wr_Addr[13..0]处的地址。这种方法与数据来自Device_Data[13..0]是相同的。

  RAM从输入到输出有一个固定的延迟。即,当输入为Rd_Addr时,经过一个固定延迟后,数据出现在其输出端RAMDataOut。这个延迟随不同FPGA而改变。要注意这个延迟,使得有两个时钟的延迟到Device_Data,然后再计算直方图。RAM中的延迟应小于两个时钟周期;否则,就可能有数据丢失。这个约束限制了Device_Clk的最大频率。

  Cntr_Value给出了用于计算直方图的输入数据数量。Pulse_Gen块产生一个脉冲,进入输入端Rst_Cntr,用于复位计数器。此时,直方图部分再次用Cntr_Value的下组输入数据计算直方图。Cntr_Value为15 位,但可以增加它,获得更多的直方图数据。

  Sel_Data与Rst_RAM信号是重置在FPGA RAM中存储的数据。当Rst_RAM脚出现高信号时,直方图块的DataOut脚的所有位均为0。当直方图块的Sel_Data输入脚为高信号时,RAM_Wr_Addr的输出不是Device_Data,而是一个从0上升至16384的内部生成的斜波。直方图块不做计算,因为这样做会重置RAM的地址。

图1,直方图计算电路从一个FPGA的RAM块中获取数据。

  当FPGA完成了直方图计算时,RAM就可以选择Sel_ Data为逻辑高,而将保持Rst_ RAM为逻辑低,从而读取直方图数据。RAM地址中的数据顺序地退出输出脚,并且可以将数据传输给一台PC。由于所有块都以一个单时钟Device_Clk工作,因此本设计很简单,有助于满足时序的约束。可以方便地修改本设计,从而获得16 位或12 位数据直方图。

用一个时钟在FPGA中计算直方图的更多相关文章

  1. 编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义 Gymnastics 类和 School 类,它们都是 ComputerAverage 的子类。Gymnastics 类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分;School 中计算平均分的方法是所有科目的分数之和除以总科目数。 要求:定义ComputerAv

    题目: 编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数. 定义 Gymnastics 类和 School 类,它们都是 ComputerAverag ...

  2. FPGA中的时序分析(四)

    常用约束语句说明 关于Fmax      上述是实现Fmax的计算公式,clock skew delay的计算如下图, 就是两个时钟的差值.到头来,影响Fmax的值的大小就是组合逻辑,而Fmax是针对 ...

  3. FPGA中的除法运算及初识AXI总线

    FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...

  4. FPGA中IBERT核的应用(转)

    https://wenku.baidu.com/view/50a12d8b9ec3d5bbfd0a74f7.html (必看)    摘要 IBERT即集成式比特误码率测试仪,是Xilinx专门用于具 ...

  5. FPGA中的时序分析(一)

    谈及此部分,多多少少有一定的难度,笔者写下这篇文章,差不多是在学习FPGA一年之后的成果,尽管当时也是看过类似的文章,但是都没有引起笔者注意,笔者现在再对此知识进行梳理,也发现了有很多不少的收获.笔者 ...

  6. 【转】关于FPGA中建立时间和保持时间的探讨

      时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...

  7. 【转载】FPGA 中的latch 锁存器

    以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...

  8. 低成本FPGA中实现动态相位调整

    在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的F ...

  9. FPGA中竞争冒险问题的研究

    什么是竞争冒险? 1 引言     现场可编程门阵列(FPGA)在结构上由逻辑功能块排列为阵列,并由可编程的内部连线连接这些功能块,来实现一定的逻辑功能. FPGA可以替代其他PLD或者各种中小规模数 ...

随机推荐

  1. 【转】自定义(滑动条)input[type="range"]样式

    1.如何使用滑动条? 用法很简单,如下所示: <input type="range" value="0"> 各浏览器原始样式如下: Chrome:  ...

  2. 从电梯问题,看c和c++之间的区别(有点懂了)错觉错觉

    磕磕碰碰的也相继用c和c++构造了不少的电梯了.虽然对自我的表现不满意,但是总体来说还是有一定的收获的,对于c和c++之间的区别感觉也摸到了一点点门道了... 用c语言构造电梯的步骤: 第一步: 分析 ...

  3. lintcode-186-最多有多少个点在一条直线上

    186-最多有多少个点在一条直线上 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. ...

  4. iOS- AVSpeechSynthesizer——iOS7语音合成器

    语音合成器的技术是iOS7推出的,可以实现无网络语音功能,支持多种语言 1. 定义一个成员变量,记录语音合成器 AVSpeechSynthesizer #import <AVFoundation ...

  5. arcgis api for javascript 各个版本的SDK下载

    1.首先,进入下载网站,需要登录才能下载.下载链接 2.选择需要下载的版本,进行下载.

  6. Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)

    举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖).这里 ...

  7. Android基础------高级ul:消息对话框

    前言:Android消息对话框提示笔记,刚刚接触Android 1.经典模式 //列表对话框 //经典模式 public void listdialog_01(View view){ final St ...

  8. Java中的日志——Java.util.logging、log4j、commons-logging

    Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-loggin ...

  9. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  10. [洛谷P3332][ZJOI2013]K大数查询

    题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...