0

我正在我的一个 verilog 模块中生成某个信号(数字脉冲),该模块在 Xilinx Zynq 芯片的可编程逻辑上运行。信号非常快,时钟约为 200MHz。我还运行了一个简单的 linux 和 framebuffer Qt 接口,用于稍后控制我的应用程序。

如何对信号进行采样以便在我的 Qt 应用程序中制作类似示波器的界面?我希望能够提供我正在生成的脉冲的视觉效果。

我需要使用什么才能以这样的时钟频率采样足够的数据?以及如何将它与内核模块或 mmap 一起传递给 Qt?

4

1 回答 1

0

您最好做大多数示波器所做的事情:将数据采样到 RAM,然后以更“轻松”的速度将其传输到处理器进行显示/分析。

在 FPGA 端,您将需要一个状态机来检测某种启动或触发条件,可能是在从软件端设置模式寄存器中的某个位以将其启用之后。

然后状态机将样本填充到由一个或多个块 RAM 组成的缓冲区中。如果要将触发放置在捕获的样本中间的某个位置,则应将其作为循环缓冲区,并使其连续记录,在触发后停止可配置的样本数量,以便保留触发条件之前的一些所需数量未被跟随它的较新的覆盖。

由于 FPGA 块 RAM 通常是双端口,您可以简单地将另一个端口连接到您的 CPU 总线以进行读取。您可能需要一个寄存器来读取采样状态机的状态,如果您采用循环缓冲区方法,则需要它停止的地址,以便您可以将数据解包为时间的线性记录。

尝试进行流式实时采样可能是可能的,但会困​​难得多,而且尚不清楚您是否可以对实时生成的数据做任何有意义的事情。尽管如此,如果您想尝试,您可能需要在采样和处理器总线之间放置一个 FIFO 缓冲区,因为您可能只能以块的形式使用数据,而必须在两者之间为其他操作提供服务,所以有些事情是需要吸收样品的恒定速率流入。另一种方法是尝试构建一个 DMA 引擎,将样本直接写入外部系统内存,但这可能会更难。

您还可以查看 CPU 中是否有任何可以利用的高速接口——例如,它们可能是最初用于视频的接口。

您似乎也只是在测量一个数字信号,即可能是一位。如果您想处理比 FPGA 架构可以支持的更高的输入采样率,这可能意味着您可能会使用 FPGA 边缘的解串器块之类的东西来将 1 位输入流转换为较慢的更宽样本流储藏。

在输出方面,一旦你在缓冲区中有一个样本向量,就很容易将其转换为示波器/逻辑分析仪类型的图,具有尽可能多的缩放、光标注释、自动测量或任何你喜欢的东西。

另外不要忘记,如果只是在开发过程中使用它,FPGA 及其工具通常能够将逻辑分析仪直接构建到设计中,并通过编程接口声明数据以在 PC 上绘图。

于 2016-06-06T07:00:40.303 回答