天天看點

【示波器】基于FPGA的數字示波器設計實作

1.軟體版本

quartusii

2.本算法理論知識

框圖結構:

【示波器】基于FPGA的數字示波器設計實作

1.緩存裡包含有觸發控制和觸發存儲器;

2.由設計名額需要1GsPs的采樣率,最後的資料流要降到到250MbPs;

3.從名額來看從波形的資料采集到最後的顯示時間要在10s;

4.LED的選擇要能和波形映射子產品相對應;

5.整個設計主要就包含兩個部分,FPGA的波形協處理器這幾以及最後的LED顯示;

6.二維顯示效果,非三維;

步驟一:資料采集子產品 

首先将外部輸入的1G的資料通過思路FIFO緩存,變為每路250M資料,即一路高速資料轉換為多路低速資料,進而使其能夠在FPGA中進行工作。這個時候需要将系統的時鐘倍頻到250M。

【示波器】基于FPGA的數字示波器設計實作

   那麼,這裡在QII中設計如下的結構:

【示波器】基于FPGA的數字示波器設計實作

步驟二:示波器顯示子產品 

【示波器】基于FPGA的數字示波器設計實作

       波形映射子產品就是将經過抽點後的波形資料映射到波形映射庫中,映射庫中的每個存儲單元都是對應LCD顯示器上的一個點,于是将需要顯示的點的波形資料轉換成幅度,幅度在LCD上标示為垂直方向的值,是以抽點後的每一個顯示點都對應LCD上的一個像素點。橫坐标代表時伺資訊,縱坐标代表幅值資訊。這樣就可以将多次采樣得到的波形資料映射到同一個映射庫中,相當于将多次采集的波形重疊起來顯示在一起,展現了高捕獲率的作用,顯示效果也達到了高重新整理率的要求。

3.部分核心代碼

module display(
          clk,
          cs,
          datain,
          RDADDR,
          x_out,
          y_out,
          da_wrx,
          da_wry
          );
input clk;
input cs;
input [7:0] datain;
output reg [9:0] RDADDR;
output [7:0] x_out;
output [7:0] y_out;
output reg da_wrx,da_wry;

reg link_xout,link_yout;
reg [12:0] counttemp;
reg [2:0] bittemp;
reg [7:0] xbuf;
reg [7:0] ybuf;

parameter   GET     = 10'b0_000_000_001,
      COMPARE1  = 10'b0_000_000_010,
      COMPARE2  = 10'b0_000_000_100,  
      COMPARE3  = 10'b0_000_001_000,  
      COMPARE4  = 10'b0_000_010_000,  
      COMPARE5  = 10'b0_000_100_000,
      COMPARE6  = 10'b0_001_000_000,
      COMPARE7  = 10'b0_010_000_000,
      COMPARE8  = 10'b0_100_000_000,
      NEWCOUNT  = 10'b1_000_000_000;

reg [9:0] state;

assign x_out=link_xout?xbuf:8'bz;
assign y_out=link_yout?ybuf:8'bz;

always @(posedge clk)
begin
if (cs)
  begin
  state<=GET;
  link_xout<=0;
  link_yout<=0;
  counttemp<=0;
  bittemp<=0;
  da_wrx<=1;
  da_wry<=1;
  end
else
  begin
  link_xout<=1;
  link_yout<=1;  
  case (state)
  default:  begin             //GET
        RDADDR<=counttemp[12:3];
        bittemp<=7-counttemp[2:0];
        state<=COMPARE1;
        da_wrx<=1;
        da_wry<=1;
        end
  COMPARE1: begin
        da_wrx<=0;
        da_wry<=0;
        if (datain[bittemp])
          begin
          xbuf<={counttemp[6:0],1'b0};
          ybuf<={counttemp[12:7],1'b0};
          state<=COMPARE2;
          end
        else
          begin
          xbuf<=0;
          ybuf<=0;
          state<=NEWCOUNT;
          end
        end 
  COMPARE2: begin
        da_wrx<=1;
        da_wry<=1;       
        state<=COMPARE3;
        end

  COMPARE3: begin
        state<=COMPARE4;
        end

  COMPARE4: begin
        state<=COMPARE5;
        end
                  
  COMPARE5: begin
        state<=NEWCOUNT;
        end             
  NEWCOUNT: begin
        state<=GET;
        if (counttemp==8191) 
          counttemp<=0;
        else  
          counttemp<=counttemp+13'b1;                
        end     
  endcase
  end
end

endmodule                 

4.操作步驟與仿真結論

    系統的仿真結果如下所示:

【示波器】基于FPGA的數字示波器設計實作

仿真波形含義為:

【示波器】基于FPGA的數字示波器設計實作

分别為系統時鐘,以及250M的時鐘,用于讀取外部輸入的AD資料。

Rst為系統的複位信号,0的時候系統正常工作。

下面四個就是思路進入FPGA的采集得到的信号。這四個信号将通過四個FIFO。

【示波器】基于FPGA的數字示波器設計實作

四個為FIFO的輸出資料,最後面一個是送入雙口RAM之前的資料,将思路資料合并為一路資料。

【示波器】基于FPGA的數字示波器設計實作

寫入RAM的位址信号。

5.參考文獻