FPGA:數(shù)字示波器 4 - 更多功能
現(xiàn)在示波器骨架已開始工作,可以輕松添加更多功能。
本文引用地址:http://cafeforensic.com/article/202401/454723.htm邊沿斜率觸發(fā)
讓我們添加在上升沿或下降沿觸發(fā)的能力。 任何示波器都可以做到這一點(diǎn)。
我們需要一點(diǎn)信息來決定我們想要觸發(fā)的方向。 讓我們使用 PC 發(fā)送的數(shù)據(jù)的 bit-0。
assign Trigger = (RxD_data[0] ^ Threshold1) & (RxD_data[0] ^ ~Threshold2); |
這很容易。
更多選項(xiàng)
讓我們添加控制觸發(fā)閾值的功能。 這是一個(gè) 8 位值。 然后我們需要水平采集速率控制、濾波控制...... 這需要來自 PC 的多個(gè)控制字節(jié)來控制示波器。
最簡單的方法是使用“async_receiver”間隙檢測功能。 PC以突發(fā)方式發(fā)送控制字節(jié),當(dāng)它停止發(fā)送時(shí),FPGA檢測到它并斷言“RxD_gap”信號(hào)。
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]; |
我們還添加了一個(gè) 4 位寄存器 (HDiv[3:0]) 來控制水平采集速率。 當(dāng)我們想要降低采集速率時(shí),我們要么丟棄來自ADC的樣本,要么以我們感興趣的頻率對(duì)它們進(jìn)行濾波/下采樣。
越來越多的功能
如您所見,可以添加許多功能。 有趣的是,您可以根據(jù)需要設(shè)計(jì)示波器 - 也許是一種特殊的觸發(fā)機(jī)制?特殊的過濾功能?
評(píng)論