<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 使用MATLAB為System Generator for DSP創(chuàng )建IP(圖)

使用MATLAB為System Generator for DSP創(chuàng )建IP(圖)

作者: 時(shí)間:2008-05-20 來(lái)源:網(wǎng)絡(luò ) 收藏

M文件借助AccelChip綜合工具優(yōu)化FPGA實(shí)現

將基于圖形和基于語(yǔ)言的設計方法結合起來(lái)最能準確描述系統。建模軟件行業(yè)專(zhuān)家The MathWorks提供了一種稱(chēng)為Simulink的時(shí)序精度的圖形化設計環(huán)境和一種稱(chēng)為的數學(xué)建模語(yǔ)言,從而滿(mǎn)足了這種二分法。


Simulink非常適合設計的“系統”方面,包括輸入輸出接口和存儲器數據流的控制與同步。Simulink還以模塊集的形式提供了一個(gè)豐富的預定義DSP算法集,可以用來(lái)構建DSP系統。不過(guò),對于專(zhuān)用算法的建模來(lái)說(shuō),Simulink并非總是最有效的開(kāi)發(fā)環(huán)境。它不必要地增加了設計人員考慮時(shí)序精度的負擔,并且強制用圖形模塊集而非簡(jiǎn)明的文本表達式來(lái)構建底層的算術(shù)運算和數組操作。

圖1 顯示系統控制和同步邏輯的Xilinx


有些DSP算法開(kāi)發(fā)人員發(fā)現語(yǔ)言最能滿(mǎn)足他們喜歡的開(kāi)發(fā)方式。MATLAB具有針對信號處理、通信和小波處理的1000多種內置函數和工具箱擴展,為復雜算法的開(kāi)發(fā)和調試提供了豐富且易用的環(huán)境。


Simulink利用一個(gè)嵌入式MATLAB模塊將這兩種建模環(huán)境統一起來(lái),該模塊允許MATLAB模型在Simulink內部仿真,再通過(guò)Real-Time Workshop編譯成C代碼后在DSP處理器上實(shí)現。


Xilinx DSP是一種廣泛公認的高效工具,用于在FPGA中DSP設計。 DSP提供了基于Simulink的圖形環(huán)境和Xilinx DSP核的預定義模塊集,這同時(shí)滿(mǎn)足了系統架構設計師和硬件設計人員的需要,前者需要把組件集成到設計中,而后者需要優(yōu)化實(shí)現。不過(guò),System Generator DSP缺少對基于MATLAB的設計流程的支持。

Xilinx AccelDSPTM綜合工具是專(zhuān)為已經(jīng)熟悉基于語(yǔ)言的DSP算法建模的算法開(kāi)發(fā)人員和DSP架構設計師開(kāi)發(fā)的。借助AccelDSP綜合工具,算法開(kāi)發(fā)人員可以用浮點(diǎn)MATLAB M文件激勵、評估算法并對結果進(jìn)行后處理。

DSP硬件系統


System Generator for DSP非常適合DSP系統建模,它不僅包括核心DSP算法,還包括針對外部總線(xiàn)、存儲器讀寫(xiě)訪(fǎng)問(wèn)、系統數據同步和整體系統控制的同步接口。System Generator for DSP提供了面向控制的模塊(如MicroBlazeTM處理器),還提供了用于實(shí)現DSP系統同步的各個(gè)寄存器、延時(shí)器和存儲器模塊(如圖1所示)。

自定制DSP算法


任何DSP系統的核心都是算法。算法與系統的區別在于所產(chǎn)生的輸出是基于給定輸入集的函數,與時(shí)鐘或硬件無(wú)關(guān)。這可以由以下簡(jiǎn)單公式表示:


y=f(x)


我們可以分別在FPGA、DSP處理器和軟件上執行一種MATLAB定義的算法,它們對時(shí)序精度的理解各不相同。


算法的這種特有性質(zhì)具有兩大好處。


首先,算法開(kāi)發(fā)人員完全不用顧及硬件實(shí)現細節,可以只專(zhuān)心于算法功能。正因為如此,今天在DSP中的算法估計有90%都是首先作為MATLAB模型出現的,即使設計流程表明它們此后還要重新實(shí)現Simulink圖或System Generatorfor DSP圖。用一個(gè)簡(jiǎn)單的MATLAB語(yǔ)句就可以計算41024數據矩陣的快速傅里葉變換(FFT),不必考慮基數、擴展性、緩沖或有效信號的同步,如下所示:


y=fft(data,1024)


其次,在建立算法模型時(shí),給定的輸出集總是對應于給定的輸入集;因此,不必在生成的硬件中解決同步問(wèn)題。這就使算法具有可通過(guò)AccelDSP這樣的綜合工具進(jìn)行調度的固有“可調度”性。由于硬件要求,可能需要多個(gè)時(shí)鐘周期來(lái)計算一個(gè)輸出(如資源共享MAC FIR濾波器的情形),但這種操作卻非常適合AccelDSP綜合工具的自動(dòng)流程。加入一個(gè)簡(jiǎn)單的硬件握手接口即可為集成到整個(gè)系統敞開(kāi)方便之門(mén),如圖2所示。

圖2 AccelDSP 握手接口

MATLAB運算符(如矩陣轉置)可以使MATLAB代碼短小易讀。而像矩陣求逆運算這類(lèi)復雜運算可以用MATLAB豐富的線(xiàn)性代數功能完成。

AccelDSP和System Generator工具一起使用


AcceDSP綜合工具可依據浮點(diǎn)MATLAB模型生成System Generator 模塊,從而使System Generator for DSP能夠支持DSP系統和算法兩種建模方法。這樣可以產(chǎn)生與用嵌入式MATLAB模塊功能相似的FPGA設計流程(見(jiàn)圖3)。我們可以用Xilinx DSP模塊集實(shí)現系統設計,而用浮點(diǎn)MATLAB實(shí)現算法設計。用AccelDSP綜合工具的System Generator 模塊是具有時(shí)序精度特點(diǎn)的定點(diǎn)模塊。

卡爾曼濾波器示例


我們來(lái)看一種用MATLAB編寫(xiě)的高級算法,使用AccelDSP綜合工具進(jìn)行綜合,然后將算法集成到System Generator模型中??柭鼮V波器是一種特殊類(lèi)型的自適應遞歸濾波器,非常適合將多個(gè)有噪聲的信號合并成一個(gè)較清晰的信號??柭鼮V波器以對象(如由地面雷達跟蹤的商用飛機)的數學(xué)模型開(kāi)始,使用該模型預測未來(lái)行為。然后,濾波器使用實(shí)測信號(如返回到雷達接收器的飛機特征信號)定時(shí)校正預測。

圖3 DSP系統框圖


以下是一個(gè)卡爾曼濾波器的MATLABM文件。該算法定義矩陣R和I,這兩個(gè)矩陣描述了實(shí)測信號和預測行為的統計數據。算法的后九行是前向預測代碼和自我校正代碼。


表1 控制所生成硬件的綜合指令


像加減這類(lèi)常用運算符是在A(yíng)或P_cap這類(lèi)數組上運算,無(wú)須像C語(yǔ)言所要求的那樣編寫(xiě)循環(huán)語(yǔ)句。二維數組自動(dòng)以矩陣相乘,無(wú)須任何特別注釋。


MATLAB運算符(如矩陣轉置)可以使MATLAB代碼短小易讀。而像矩陣求逆這類(lèi)復雜運算可以用MATLAB豐富的線(xiàn)性代數功能完成。雖然可以將這種算法構建成框圖,但這樣做很容易使算法結構在MATLAB中顯得費解。有了AccelDSP綜合工具,就可以用AccelWare 工具套件將復雜的MATLAB工具箱和內置函數(如卡爾曼濾波器示例中使用的矩陣求逆)直接賦予硬件。這些工具套件提供多種矩陣求逆方法。核的選擇取決于矩陣的大小、結構和值。


我們再回到卡爾曼濾波器示例,最適宜的方法是使用AccelWare QR矩陣求逆核。AccelWare核是依據MATLAB語(yǔ)法生成的,可有多種硬件實(shí)現架構,這些架構允許用戶(hù)對設計進(jìn)行速度、面積、功耗和噪聲優(yōu)化。為了使用AccelWare功能,需要對代碼進(jìn)行以下小修改:


用AccelDSP綜合工具綜合MATLAB可以使用AccelDSP綜合工具進(jìn)行浮點(diǎn)仿真,以建立一個(gè)基準來(lái)參考。然后將設計轉換成定點(diǎn),以便進(jìn)行定點(diǎn)效果仿真。有諸多功能可以幫助分析這些效果和定點(diǎn)設計(如飽和與四舍五入)。數據位寬的增長(cháng)可以用戶(hù)控制的方式自動(dòng)傳播到整個(gè)設計中。這種算法設計瀏覽過(guò)程可以幫助您獲得理想的量化結果,此量化結果能夠在控制上溢出/下溢出的同時(shí)盡量縮小位寬,以便盡早在硅片面積與性能指針之間進(jìn)行權衡。一旦確定了適宜的量化結果,使用AccelDSP綜合工具的下一步就是為Xilinx目標器件生成RTL??梢酝ㄟ^(guò)使用表1所列綜合指令來(lái)規定硬件含義。使用這些指令可以規范基于硬件的設計瀏覽,使設計小組能夠進(jìn)一步提高結果質(zhì)量。在綜合RTL時(shí),AccelDSP綜合工具評估和調度整個(gè)算法,并且在可能時(shí)進(jìn)行邊界優(yōu)化。


AccelDSP工具在整個(gè)流程中都保持始終如一的驗證環(huán)境,這是因為使用了自校驗式測試平臺,即使用MATLAB定點(diǎn)設計時(shí)生成的輸入/輸出向量來(lái)驗證生成的RTL。AccelDSP綜合工具還會(huì )報告卡爾曼濾波器的流量和延時(shí)量,這是衡量設計是否滿(mǎn)足指標以及生成時(shí)序精度的SystemGenerator模型所必需的。

生成System Generator模型


成功完成RTL驗證之后,即可通過(guò)單擊“Generate System Generator”圖標來(lái)為設計生成System Generator模型。AccelDSP工具產(chǎn)生一個(gè)可支持仿真和RTL代碼的System Generator IP模塊。


此時(shí),設計流程過(guò)渡到System Generator for DSP,其中可以在Simulink庫瀏覽器中使用卡爾曼濾波器的新模塊,只需選擇卡爾曼濾波器模塊,然后將其拖入到目標環(huán)境中,便可將AccelDSP生成的卡爾曼濾波器集成到System Generator設計中。


結束語(yǔ)


自定制DSP算法最適于用MATLAB建立數學(xué)模型,而完整的系統則最適于用Simulink建立時(shí)序精度的模型。這兩種建模域緊密結合即可使用豐富的MATLAB語(yǔ)言(包括內置函數和工具箱函數)來(lái)創(chuàng )建復雜DSP算法的System Generator IP模塊,從而為在FPGA中設計DSP系統提供一種有效的手段。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>