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 />
一種有效的手段。