FPGA:数字示波器 4 - 更多功能

2024-01-12  

现在示波器骨架已开始工作,可以轻松添加更多功能。

本文引用地址:

边沿斜率触发

让我们添加在上升沿或下降沿触发的能力。 任何示波器都可以做到这一点。
我们需要一点信息来决定我们想要触发的方向。 让我们使用 PC 发送的数据的 bit-0。

assign Trigger = (RxD_data[0] ^ Threshold1) & (RxD_data[0] ^ ~Threshold2);

这很容易。

更多选项

让我们添加控制触发阈值的功能。 这是一个 8 位值。 然后我们需要水平采集速率控制、滤波控制...... 这需要来自 PC 的多个控制字节来控制示波器。
最简单的方法是使用“async_receiver”间隙检测功能。 PC以突发方式发送控制字节,当它停止发送时,检测到它并断言“RxD_gap”信号。

wire RxD_gap;
async_receiver async_rxd(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data), .RxD_gap(RxD_gap));

reg [1:0] RxD_addr_reg;
always @(posedge clk) if(RxD_gap) RxD_addr_reg <= 0; else if(RxD_data_ready) RxD_addr_reg <= RxD_addr_reg + 1;

// register 0: TriggerThreshold
reg [7:0] TriggerThreshold;
always @(posedge clk) if(RxD_data_ready & (RxD_addr_reg==0)) TriggerThreshold <= RxD_data;

// register 1: "0 0 0 0 HDiv[3] HDiv[2] HDiv[1] HDiv[0]"
reg [3:0] HDiv;
always @(posedge clk) if(RxD_data_ready & (RxD_addr_reg==1)) HDiv <= RxD_data[3:0];

// register 2: "StartAcq TriggerPolarity 0 0 0 0 0 0"
reg TriggerPolarity;
always @(posedge clk) if(RxD_data_ready & (RxD_addr_reg==2)) TriggerPolarity <= RxD_data[6];
wire StartAcq = RxD_data_ready & (RxD_addr_reg==2) & RxD_data[7];

我们还添加了一个 4 位寄存器 (HDiv[3:0]) 来控制水平采集速率。 当我们想要降低采集速率时,我们要么丢弃来自ADC的样本,要么以我们感兴趣的频率对它们进行滤波/下采样。

越来越多的功能

如您所见,可以添加许多功能。 有趣的是,您可以根据需要设计示波器 - 也许是一种特殊的触发机制?特殊的过滤功能?

轮到你来实验了!

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。