FPGA數字訊號處理(25)數字相關器設計(經典結構)
上一篇介紹了幀同步字檢測、數字相關器的一些基本概念,並設計了一種簡化模型的數字相關器(異或單元+累加器)。本文將完成經典結構(移位暫存器+乘法器+累加器)的數字相關器的設計。
MATLAB設計
假設一幀包含1500個位元組,前165個為幀同步字,後1350個為資訊碼元。由上一篇知數字相關器的經典結構如下:
延時線取值為取樣時鐘與資料碼元時鐘的倍數。在MATLAB中生成隨機測試資料,進行演算法模擬,完整MATLAB程式碼如下:
clc; clear; close all;
load('data.mat'); %匯入幀同步頭din,165點
din = din/max(din);
din_s = fliplr(din);
%生成測試資料
x = rand(1, 5340);
x = x*2-1;
x = [din_s,x(1:1335),din_s,x(1336:2670),din_s,x(2671:4005),din_s,x(4006:5340)];
%x = [(1:6000)',x'];
y = zeros(1,165);
res = zeros(1,5835);
for i = 1 : length(x)-165
for j = 1 : 165
y(j) = x(j+i-1)*din_s(j);
end
res(i) = sum(y);
end
plot(res);
模擬結果如下:
可以明顯看到檢測結果中的相關峰。
FPGA設計
在Vivado中完成演算法設計及模擬。設計中需要兩組暫存器,一組暫存器用來儲存本地幀同步字;一組165點長的移位暫存器儲存輸入碼元。幀同步字的儲存很簡單,直接賦值即可。移位暫存器部分的程式碼如下:
//------------------------------------------------------
// 輸入資料移位暫存器
//------------------------------------------------------
reg signed [7:0] a [164:0];
integer i,j;
always @ (posedge clk or negedge rst_n)
if (!rst_n) begin
for (i=0; i<165; i=i+1)
a[i] <= 'd0;
end
else begin
for (j=0; j<164; j=j+1)
a[j+1] <= a[j];
a[0] <= din;
end
接下來是乘法器部分設計,採用全並行,需要165個乘法器同時對165點資料進行計算,乘法器配置為3級流水。如果一個一個例項化實在麻煩,可以用Verilog提供的generate語法實現批量例項化,程式碼如下:
//---------------------------------------------------------------------
// 相關運算
//---------------------------------------------------------------------
genvar gv_i;
wire signed [15:0] y [164:0];
generate
for (gv_i = 0; gv_i < 165; gv_i = gv_i+1)
begin : ins0
mult your_instance_name (
.CLK(clk), // input wire CLK
.A(a[164-gv_i]), // input wire [7 : 0] A
.B(b[gv_i]), // input wire [7 : 0] B
.P(y[gv_i]) // output wire [15 : 0] P
);
end
endgenerate
以上便完成了165個乘法器的例項化。最後是累加器,累加器可以使用像上一篇一樣的多級累加設計方法,這樣做的好處是整個資料流程受設計者的控制。但是這樣也需要像例項化乘法器一樣例項化大量的加法器。其實如果直接在一個語句中將所有的乘法器結果相加,Vivado的綜合器也可以將其綜合為多級累加的結果,只不過從程式碼上看這種結構並不直觀。
測試資料由MATLAB生成並儲存到txt檔案,在testbench中讀取。Vivado中模擬結果如下:
可以明顯看到其中的相關峰。系統時鐘約束為500MHz(K7410的晶片),綜合後時序分析報告如下,完全滿足:
System Generator設計
System Generator的設計方法可以參考博主的《學會System Generator系列》。模型的部分結構如下圖所示(完整的圖太大):
延遲線便相當於移位暫存器,與本地幀同步字乘法結果送入多級累加器。模擬結果如下:
可以明顯看到其中的相關峰。系統時鐘設定為500MHz(k7410的晶片)。到處HDL模型。綜合後時序分析結果如下:
最大路徑延遲為1.326ns,時序完全滿足。綜合後的資源分析結果如下:
本文使用Vivado和System Generator兩種設計方法完成了同樣的設計,且模擬結果相同。實際中只需要選擇一種即可,而且System Generator可以將設計以IP核的形式匯出,供其它工程呼叫。
相關文章
- FPGA數字訊號處理(24)數字相關器設計(簡化結構)FPGA
- FPGA數字訊號處理(26)加擾器與解擾器設計FPGA
- 數字訊號處理實驗(四):數字濾波器結構
- FPGA數字訊號處理(27)卷積編碼器與Viterbi譯碼器設計FPGA卷積Viterbi
- FPGA數字訊號處理(22)FSK調製技術FPGA
- MATLAB訊號處理——數字濾波器的設計Matlab
- FPGA數字訊號處理(十三)鎖相環位同步技術的實現FPGA
- MATLAB數字訊號處理(1)四種經典功率譜估計方法比較Matlab
- 語音訊號預處理——數字濾波器音訊
- 數字影像處理相關練習
- FPGA經典:Verilog傳奇與基於FPGA的數字影像處理原理及應用FPGA
- FPGA數字訊號處理(23)FSK解調技術(包絡檢波法)FPGA
- 數字訊號處理c語言程式集C語言
- 數字訊號處理基礎----插值、抽取濾波器
- 大牛講解訊號與系統以及數字訊號處理
- 數字訊號處理:運用FFT簡單濾波FFT
- 數字影像處理,經典對比度增強演算法演算法
- C++數字訊號處理演算法庫SP++C++演算法
- 關於數字的經典SQL程式設計:連續範圍問題SQL程式設計
- MATLAB數字訊號處理(2)LFM脈衝雷達回波處理模擬Matlab
- 數字影象處理DIP
- 數字訊號處理實驗一(離散時間訊號的MATLAB實現)Matlab
- FPGA設計--數字的表示形式(程式碼+波形圖)FPGA
- 數字中國已經成為中國數字經濟的時代符號符號
- 訊號處理基本引數
- 數學是結構,不是數字!
- 數字訊號處理:線性卷積、迴圈卷積、圓周卷積計算卷積
- php 處理 浮點數 精度運算 數字處理等PHP
- 數字影象處理-第一節
- 數字影象處理目錄列表
- 關於數字化工廠&智慧工廠建設 IT 經驗總結
- 殊不知這些行業與智慧數字經營相關行業
- 高速數字PCB設計(1)—淺析PCB層疊結構(stackup)設計
- [00]數字影像處理-matlab速成Matlab
- 什麼是智慧數字經營 養豬 山海經 數字經營
- 中文數字與阿拉伯數字:數字符號的文化交融符號
- 《數字經濟產業》產業
- java:識別符號 關鍵字 變數Java符號變數