<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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


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

          圖1 顯示系統(tǒng)控制和同步邏輯的Xilinx


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


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


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

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

          DSP硬件系統(tǒng)


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

          自定制DSP算法


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


          y=f(x)


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


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


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


          y=fft(data,1024)


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

          圖2 AccelDSP 握手接口

          MATLAB運(yùn)算符(如矩陣轉(zhuǎn)置)可以使MATLAB代碼短小易讀。而像矩陣求逆運(yùn)算這類復(fù)雜運(yùn)算可以用MATLAB豐富的線性代數(shù)功能完成。

          AccelDSP和System Generator工具一起使用


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

          卡爾曼濾波器示例


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

          圖3 DSP系統(tǒng)框圖


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


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


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


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


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


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


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

          生成System Generator模型


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


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


          結(jié)束語


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



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();