直方图对数字数据的分析通常是一种有用的工具。不过,要从一个直方图获得可靠的结果,必须获得大量数据,通常是要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. LintCode-72.中序遍历和后序遍历树构造二叉树

    中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: ...

  2. 【redis数据库学习】用JAVA连接redis数据库各种报错

    最近项目中,需要用到redis数据库,然后使用Jedis让JAVA连接redis. 首先,安装redis数据库,参考的是:http://www.runoob.com/redis/redis-insta ...

  3. css那些事儿2 盒子模型

    盒子模型是网页元素所占据页面窗口的矩形范围,是网页布局的核心基础之一,这里的盒子模型与我们平常收到的包裹类似. 一个包裹从内到外,分为真实物品部分,物品与外壳之间的填充区,外壳的厚度,当多个包裹放置在 ...

  4. 【.NET】- Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...

  5. SQL SERVER技术内幕之10 可编程对象

    一.变量 变量用于临时保存数据值,以供在声明它们的同一批处理语句中引用.例如,以下代码先声明一个数据类型为INT的变量@i,再将它赋值为10; DECLARE @i as INT; SET @i = ...

  6. Java SE1.6中的Synchronized

    1 引言 在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本 ...

  7. 第20天:京东nav、footer部分制作

    一.鼠标的4种状态 cursor:pointer; 鼠标变成小手cursor:default;小白cursor:move;移动cursor:text;文本输入 二.网页布局:1.input.butto ...

  8. jzoj3865[JSOI2014]士兵部署

    ‘ 数据范围:n,m<=10^5,传送门:https://jzoj.net/senior/#main/show/3865 感觉jzoj好高明啊,就是访问不太稳定. 首先题意中被n个点控制的区域相 ...

  9. linux系统过一两分钟就断开的时间更改

    vi /etc/ssh/sshd_config LoginGraceTime 参考man sshd_config LoginGraceTime The server disconnects after ...

  10. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...