17.08.2013 Views

使用 - Xilinx

使用 - Xilinx

使用 - Xilinx

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

技 術 專 欄<br />

<strong>使用</strong> MATLAB 為 System<br />

Generator for DSP 創建 IP<br />

<strong>使用</strong>MATLAB M文件借助AccelChip<br />

綜合工具優化FPGA實現<br />

14 賽靈思中國通訊 27期<br />

作者:Tim Vanevenhoven<br />

<strong>Xilinx</strong> 公司<br />

DSP 工具產品經理<br />

將基於圖形和基於語言的設計方法結<br />

合起來最能準確描述 DSP 系統。DSP 建<br />

模軟件行業領頭羊 The MathWorks 提供了<br />

一種稱為 Simulink 的時序精度的圖形化設<br />

計環境和一種稱為 MATLAB 的數學建模語<br />

言,從而滿足了這種二分法。<br />

Simulink 非常適合 DSP 設計的“系統”<br />

方面,包括輸入輸出接口和存儲器數據<br />

流的控制與同步。Simulink 還以模塊集的<br />

形式提供了一個豐富的預定義 DSP 算法<br />

集,可以用來構建 DSP 系統。不過,對<br />

於專用算法的建模來說,Simulink 並非總<br />

是最有效的開發環境。它不必要地增加<br />

了設計人員考慮時序精度的負擔,並且<br />

強制用圖形模塊集而非簡明的文本錶達<br />

式來構建底層的算術運算和陣列操作。<br />

有些 DSP 算法開發人員發現 MATLAB<br />

語言最能滿足他們喜歡的開發方式。<br />

MATLAB 具有針對信號處理、通訊和小波<br />

處理的 1,000 多種內置函數和工具箱擴<br />

展,為複雜算法的開發和調試提供了豐<br />

富且易用的環境。<br />

Simulink 利用一個嵌入式 MATLAB 模塊<br />

將這兩種建模環境統一起來,該模塊允<br />

許 MATLAB 模型在 Simulink 內部仿真,再<br />

通過 Real-Time Workshop 編譯成 C 代碼後<br />

在 DSP 處理器上實現。<br />

<strong>Xilinx</strong> ® System Generator for DSP 是一種<br />

廣泛公認的高效工具,用於在 FPGA 中創<br />

建 DSP 設計。System Generator for DSP 提供<br />

了基於 Simulink 的圖形環境和 <strong>Xilinx</strong> DSP 核<br />

的預定義模塊集,這同時滿足了系統架<br />

構設計師和硬件設計人員的需要,前者<br />

需要把組件集成到設計中,而後者需要<br />

優化實現。不過,System Generator for DSP<br />

缺少對基於 MATLAB 的設計流程的支持。


<strong>Xilinx</strong> AccelDSP TM 綜合工<br />

具是專為已經熟悉基於語<br />

言的 DSP 算法建模的算法<br />

開發人員和 DSP 架構設計<br />

師開發的。借助 AccelDSP<br />

綜合工具,算法開發人員<br />

可以用浮點 MATLAB M 文<br />

件創建激勵、評估算法並<br />

對結果進行後處理。<br />

DSP 硬件系統<br />

System Generator for DSP 非常適合 DSP<br />

系統建模,它不僅包括核心 DSP 算法,還<br />

包括針對外部總線、存儲器讀寫訪問、<br />

系統數據同步和整體系統控制的同步接<br />

口。System Generator for DSP 提供了面向控<br />

制的模塊(如 MicroBlaze TM 處理器),還<br />

提供了用於實現 DSP 系統同步的各個寄存<br />

器、延時器和存儲器模塊(圖 1)。<br />

自定制 DSP 算法<br />

任何 DSP 系統的核心都是算法。算<br />

法與系統的區別在於所產生的輸出是基<br />

於給定輸入集的函數,與時鐘或硬件無<br />

關。這可以由以下簡單公式錶示:<br />

我們可以分別在 FPGA、DSP 處理器和<br />

軟件上執行一種 MATLAB 定義的算法,它<br />

們對時序精度的理解各不相同。<br />

y = f(x)<br />

算法的這種特有性質具有兩大好處。<br />

首先,算法開發人員完全不用顧及硬件<br />

實現細節,可以只專心於算法功能。正<br />

因為如此,今天在 DSP 中<strong>使用</strong>的算法估<br />

計有 90% 都是首先作為 MATLAB 模型出<br />

現的,即使設計流程錶明它們此後還要<br />

重新實現成 Simulink 圖或 System Generator<br />

for DSP 圖。用一個簡單的 MATLAB 語句就<br />

可以計算 4 x 1,024 數據矩陣的快速傅裡<br />

葉變換 (FFT),不必考慮基數、擴展性、<br />

緩衝或有效信號的同步,如下所示:<br />

y = fft(data,1024);<br />

Sine Wave<br />

Random<br />

Number<br />

simin<br />

From<br />

Workspace<br />

其次,在建立算法模型時,給定的輸<br />

出集總是對應於給定的輸入集;因此,<br />

不必在生成的硬件中解決同步問題。這<br />

就使算法具有可通過 AccelDSP 這樣的綜合<br />

工具進行調度的固有“可調度”性。由<br />

於硬件要求,可能需要<strong>使用</strong>多個時鐘周<br />

期來計算一個輸出(如資源共享 MAC FIR<br />

濾波器的情形),但這種操作卻非常適<br />

合 AccelDSP 綜合工具的自動流程。加入一<br />

個簡單的硬件握手接口即可為集成到整<br />

個系統敞開方便之門,如圖 2 所示。<br />

dbl fpt<br />

Gateway In2<br />

dbl fpt<br />

Gateway In1<br />

dbl<br />

fpt<br />

Gateway In<br />

CurrentState<br />

Inputs<br />

Outputs<br />

Moore State Machine<br />

addr<br />

data<br />

we<br />

z -16<br />

Delay<br />

Single Port RAM<br />

AccelDSP 和 System Generator 工具<br />

一起<strong>使用</strong><br />

AcceDSP 綜合工具可依據浮點 MATLAB<br />

模型生成 System Generator IP 模塊,從而<br />

使 System Generator for DSP 能夠支持 DSP<br />

系統和算法兩種建模方法。這樣可以<br />

產生與用嵌入式 MATLAB 模塊功能相似<br />

的 FPGA 設計流程(圖 3)。我們可以用<br />

<strong>Xilinx</strong> DSP 模塊集實現系統設計,而用浮<br />

點 MATLAB 實現算法設計。用 AccelDSP 綜<br />

合工具創建的 System Generator IP 模塊是<br />

具有時序精度特點的定點模塊。<br />

卡爾曼濾波器示例<br />

我們來看一種用 MATLAB 編寫的高<br />

級算法,<strong>使用</strong> AccelDSP 綜合工具進行綜<br />

合,然後將算法集成到 System Generator<br />

模型中。卡爾曼濾波器是一種特殊類型<br />

的自適應遞歸濾波器,非常適合將多<br />

個有噪聲的信號合併成一個較清晰的信<br />

號。卡爾曼濾波器以對象(如由地面雷<br />

達跟蹤的商用飛機)的數學模型開始,<br />

<strong>使用</strong>該模型預測未來行為。然後,濾波<br />

器<strong>使用</strong>實測信號(如返回到雷達接收器<br />

的飛機特徵信號)定時校正預測。<br />

2 tap<br />

xn yn<br />

圖 1 – 顯示系統控制和同步邏輯的 <strong>Xilinx</strong> System Generator 圖<br />

Data In<br />

New Data Valid<br />

Clock<br />

Data Out<br />

Done<br />

Clock<br />

New Data Valid<br />

Data In<br />

Done<br />

Data Out<br />

FIR<br />

圖 2 – AccelDSP 握手接口<br />

技 術 專 欄<br />

a<br />

b<br />

Add Sub<br />

a+b fpt dbl<br />

Gateway Out<br />

Output data available to downstream system<br />

MATLAB 運算符 (如矩陣轉置) 可以使 MATLAB 代碼<br />

短小易讀。而像矩陣求逆運算這類複雜運算可以用<br />

MATLAB 豐富的線性代數功能完成。<br />

Scope<br />

以下是一個卡爾曼濾波器的 MATLAB<br />

M 文件。該算法定義矩陣 R 和 I,這兩個<br />

矩陣描述了實測信號和預測行為的統計<br />

數據。算法的後九行是前向預測代碼和<br />

自我校正代碼。<br />

function [S] = simple_kalman(A)<br />

DIM = size(A,2);<br />

persistent p P_cap<br />

if isempty(P_cap)<br />

P_cap = [8 0 0; 0 8 0; 0 0 8];<br />

p = ones(DIM,1)/2;<br />

end;<br />

I = eye(DIM);<br />

R = [128 0 0;0 128 0; 0 0 128];<br />

% estimate step:<br />

P_cap_est = P_cap+I;<br />

% correction step:<br />

K = P_cap_est * inv(P_cap_est+R);<br />

p = p + K * ( A’ – p );<br />

P_cap = (I – K)*P_cap_est;<br />

S = p’;<br />

像加減這類常用運算符是在 A 或<br />

P_cap 這類陣列上運算,無需像 C 語言所<br />

要求的那樣編寫循環語句。二維陣列自<br />

動以矩陣相乘,無需任何特別註釋。<br />

2007年冬季刊 15


技 術 專 欄<br />

Simulink<br />

Interface<br />

Logic<br />

Control<br />

Logic<br />

DSP 綜合指令 在所生成硬件上的效果<br />

折/展開 For 循環 通過減少流量來提高輸入採樣速率<br />

擴展矢量和矩陣的加法和乘法運算 通過減少流量來提高輸入採樣速率<br />

陣列的 RAM/ROM 存儲器映射 通過將陣列映射到專用 <strong>Xilinx</strong> Block RAM資源來提高 FPGA 利用率<br />

插入流水線 通過提高時鐘頻率性能來提高輸入採樣速率<br />

移位寄存器映射 通過將移位寄存器邏輯映射到 SRL16 來提高 FPGA 利用率<br />

16 賽靈思中國通訊 27期<br />

MATLAB<br />

y = f(x)<br />

圖 3 – DSP 系統框圖<br />

MATLAB 運算符(如矩陣轉置)可以<br />

使 MATLAB 代碼短小易讀。而像矩陣求逆<br />

這類複雜運算可以用 MATLAB 豐富的線性<br />

代數功能完成。雖然可以將這種算法構<br />

建成框圖,但這樣做很容易使算法結構<br />

在 MATLAB 中顯得費解。<br />

有了 AccelDSP 綜合工具,就可以用<br />

AccelWare IP 工具套件將複雜的 MATLAB 工<br />

具箱和內置函數(如卡爾曼濾波器示例<br />

中<strong>使用</strong>的矩陣求逆)直接賦予硬件。這<br />

些工具套件提供多種矩陣求逆方法。核<br />

的選擇取決於矩陣的大小、結構和值。<br />

我們再回到卡爾曼濾波器示例,最適宜<br />

的方法是<strong>使用</strong> AccelWare QR 矩陣求逆核。<br />

AccelWare 核是依據 MATLAB 語法生成的,<br />

可有多種硬件實現架構,這些架構允許<br />

用戶對設計進行速度、面積、功耗和噪<br />

聲優化。為了<strong>使用</strong> AccelWare 功能,需要<br />

對代碼進行以下小修改:<br />

% K = P_cap_est * inv(P_cap_est+R);<br />

K = P_cap_est *<br />

accel_qr_inverse (P_cap_est+R);<br />

用 AccelDSP 綜合工具綜合 MATLAB<br />

可以<strong>使用</strong> AccelDSP 綜合工具進行浮點<br />

仿真,以建立一個基准來參考。然後將<br />

設計轉換成定點,以便進行定點效果仿<br />

真。有諸多功能可以幫助分析這些效果<br />

和定點設計(如飽和與四捨五入)。數<br />

據位寬的增長可以用戶控制的方式自動<br />

傳播到整個設計中。這種算法設計瀏覽<br />

過程可以幫助您獲得理想的量化結果,<br />

錶 1 – 控制所生成硬件的綜合指令<br />

Simulink<br />

Memory<br />

Processor<br />

Interface<br />

此量化結果能夠在控制上溢出/下溢出的<br />

同時盡量縮小位寬,以便盡早在硅片面<br />

積與性能指標之間進行權衡。<br />

一旦確定了適宜的量化結果,<strong>使用</strong><br />

AccelDSP 綜合工具的下一步就是為 <strong>Xilinx</strong><br />

目標器件生成 RTL。可以通過<strong>使用</strong>錶 1 所<br />

列綜合指令來規定硬件含義。<br />

<strong>使用</strong>這些指令可以規範基於硬件的設<br />

計瀏覽,使設計小組能夠進一步提高結<br />

果質量。在綜合 RTL 時,AccelDSP 綜合工<br />

具評估和調度整個算法,並且在可能時<br />

進行邊界優化。<br />

圖 4 – AccelDSP 綜合工具中的<br />

“Generate System Generator”命令<br />

圖 5 – 添加到 System Generator 設計的卡爾曼濾波器<br />

下一步(請瀏覽 www.xilinx.com/cn/xcell27 了解下列資料的詳細內容:)<br />

觀看 System Generator 和 AccelDSP 工具的在線演示<br />

評價或購買:<br />

AccelDSP 綜合工具<br />

System Generator for DSP<br />

AccelDSP 工具在整個流程中都保持始<br />

終如一的驗證環境,這是因為<strong>使用</strong>了自<br />

校驗式測試平台,即<strong>使用</strong> MATLAB 定點設<br />

計時生成的輸入/輸出矢量來驗證生成的<br />

RTL。AccelDSP 綜合工具還會報告卡爾曼<br />

濾波器的流量和延時量,這是衡量設計<br />

是否滿足指標以及生成時序精度的 System<br />

Generator 模型所必需的。<br />

生成 System Generator 模型<br />

成功完成 RTL 驗證之後,即可通過單<br />

擊“Generate System Generator”圖標來為<br />

設計生成 System Generator 模型,如圖 4<br />

所示。AccelDSP 工具產生一個可支持仿真<br />

和 RTL 代碼的 System Generator IP 模塊。<br />

此時,設計流程過渡到 System<br />

Generator for DSP,其中可以在 Simulink 庫<br />

瀏覽器中<strong>使用</strong>卡爾曼濾波器的新模塊,<br />

只需選擇卡爾曼濾波器模塊,然後將其<br />

拖入到目標環境中,便可將 AccelDSP 生<br />

成的卡爾曼濾波器集成到 System Generator<br />

設計中,如圖 5 所示。<br />

結論<br />

自定制 DSP 算法最適於用 MATLAB 建<br />

立數學模型,而完整的系統則最適於用<br />

Simulink 建立時序精度的模型。這兩種建<br />

模域緊密結合即可<strong>使用</strong>豐富的 MATLAB 語<br />

言(包括內置函數和工具箱函數)來創<br />

建複雜 DSP 算法的 System Generator IP 模<br />

塊,從而為在 FPGA 中設計 DSP 系統提供<br />

一種有效的手段。

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!