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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Vivado 高層次綜合演示

          Vivado 高層次綜合演示

          作者: 時間:2012-04-26 來源:網(wǎng)絡(luò) 收藏

          高層次綜合演示

          以下是詳細(xì)的中文說明:

          感謝你對 HLS也就是XILINX’s 高層次綜合解決方案有興趣,這個解決方案綜合c,c++和系統(tǒng)c代碼成Verilog和VHDL RTL結(jié)構(gòu)。

          我們要說明基于c設(shè)計方法在圖像處理算法實現(xiàn)的好處。

          這個算法是工作在一張彩色圖像,完成色彩變化后再進(jìn)行邊緣檢測。
          這個算法是測試不同的色彩變化,然后再進(jìn)行邊緣檢測。
          這個產(chǎn)生了迭代輸出結(jié)果。這是個典型的原始應(yīng)用場景。在這里設(shè)計者想去細(xì)調(diào)這個算法。
          高層次綜合提供內(nèi)嵌的C仿真能力,幫助設(shè)計者做細(xì)調(diào)。
          在這里,我們開始用Vivado 高層次綜合來調(diào)試圖像處理算法。
          這個功能調(diào)用表示了這個設(shè)計被實現(xiàn)成為RTL(寄存器級)。
          在這個設(shè)計規(guī)格里面,兩個函數(shù)調(diào)用體現(xiàn)了濾波器的功能。
          在第一個濾波器里,一個循環(huán)體現(xiàn)了幀內(nèi)像素顏色轉(zhuǎn)化,現(xiàn)在的配置設(shè)置執(zhí)行了彩色到棕褐色的轉(zhuǎn)換。
          使用來自Vivado 高層次綜合的調(diào)試能力,很容易理解設(shè)計描述的執(zhí)行。
          這個定時器顯示了完成c仿真的速度。
          這個測試向量成功地顯示了輸出結(jié)果和參考圖像是相一致的。

          這個說明了基于c設(shè)計好處中的一個,就是算法能全面快速地被驗證。

          現(xiàn)在我們滿足了設(shè)計規(guī)格,我們能繼續(xù)往前綜合成RTL(寄存器級)。
          對于我們的演示,我們想去跑75Mhz的時鐘頻率,這個目標(biāo)就是處理每秒60幀的數(shù)據(jù)。目標(biāo)器件是kintex-7器件。

          首次綜合通常建立一個基準(zhǔn),這個基準(zhǔn)創(chuàng)立了一個全面的報告,設(shè)計者參考這個報告,提供約束,得到所需的架構(gòu)。Vivado 高層次綜合顯示了極其快速的綜合時間,可以在短短幾分鐘內(nèi)處理上千上萬行c代碼。這,反過來,指向了設(shè)計探究的機會,真正地通過性能,資源和功耗指標(biāo)的驅(qū)動去細(xì)調(diào)架構(gòu)。

          作為綜合的結(jié)果,現(xiàn)在可以得到Verilog和VHDL RTL。也就是我們首次基于c語言架構(gòu)解決方案。

          這個相應(yīng)的報告給了我們功耗的評估,還有資源利用率。注意到對于這個算法,存儲器的要求高達(dá)139%,超過了Kintex-7器件的容量。當(dāng)然,也有一個性能指標(biāo)的總結(jié)。9ns的時鐘周期給個我們110Mhz的時鐘頻率,所以我們原本75Mhz的目標(biāo)是沒有問題的。但是5億多個時鐘周期的latency(延時)限制了幀速率少于2幀每秒。對于這個c語言,我們要以新的解決方案來應(yīng)對這個性能的挑戰(zhàn)。


          我們簡單的拷貝來自我們第一個方案的所有的約束。對于第二個方案,我們愿意去引入一些并行進(jìn)程,讓這兩個濾波器并行運行。Vivado 高層次綜合對于我們來說很簡單。因為它從c代碼中提取優(yōu)化的對象,這些都是基本的函數(shù),循環(huán)和數(shù)組。頂層函數(shù)調(diào)用兩個濾波函數(shù),默認(rèn)情況下,Vivado 高層次綜合尊重描述在c代碼中循序進(jìn)程性質(zhì)的。我們能采用一個簡單的約束來強制這個架構(gòu)并行執(zhí)行。Vivado 高層次綜合在函數(shù)級提供的其中一個約束是DATAFLOW(數(shù)據(jù)流水)。這個就是我們想要做的事情。它創(chuàng)造了一種結(jié)構(gòu),讓進(jìn)程獨立的工作,通過渠道互相交換數(shù)據(jù)。我們也可以控制這些進(jìn)程之間的溝通渠道。因為濾波器同一順序執(zhí)行了所有的像素,所以我們能簡化進(jìn)程間的渠道,把他們轉(zhuǎn)化成小數(shù)據(jù)流的FIFO。最后,我們通過循環(huán)操作加快流水的各個功能。
          我們僅僅通過GUI加入了一些約束,然而,這個也是可以通過TCL 命令來做的,它使得更加簡單進(jìn)行設(shè)計探究?,F(xiàn)在,我們準(zhǔn)備做綜合,注意這個c代碼設(shè)計是不變的。這個約束不改變功能,但創(chuàng)造了截然不同的架構(gòu)。

          這份報告顯示了一個比較好的解決方案以及Kintex-7器件可提供的資源范圍。這個性能表明了DATAFLOW這個約束能處理一幀數(shù)據(jù)大約需要90萬個周期。一個75Mhz的時鐘頻率能得到81幀每秒的速度。

          我們進(jìn)行下一步操作,用原始的測試向量來驗證RTL,也封裝這個RTL到 bitstream的實現(xiàn)。
          對于這個驗證,我們挑選SystemC來共同仿真。因為這個仿真是面對RTL級,測試將需要很長時間。這說明了為什么采用c級設(shè)計和細(xì)調(diào)更加強大提高了生產(chǎn)力。很多沒有什么經(jīng)驗的客戶也有30-50%的提高。因為在算法的細(xì)調(diào)過程中加快驗證周期。

          Vivado 高層次綜合可以自動生成RTL仿真所需的Test bench,復(fù)用原有C-level的TB,對RTL進(jìn)行混合(有時序信息)仿真驗證。

          在這點上,讓我們快進(jìn)到RTL的驗證運行結(jié)束。

          我們能看到產(chǎn)生正確結(jié)果的RTL結(jié)構(gòu),圖像也被產(chǎn)生在我們的仿真目錄里。

          Vivado 高層次綜合 也測量了實際的latency(延時),報告了RTL仿真的成功。

          注意基于c級仿真和基于RTL仿真有巨大的差距。對于比較大的設(shè)計或者測試向量,基于RTL微調(diào)花時間太長時間了。

          我們有了一個滿足物理約束,功能正確的結(jié)構(gòu)。
          所有剩下的就是把它傳遞到系統(tǒng)集成環(huán)境去了。

          XILINX 已經(jīng)應(yīng)用了IP-XACT標(biāo)準(zhǔn)去封裝IP,并從一個工具傳遞到兩外一個工具。

          Vivado 高層次綜合封裝RTL架構(gòu),集成到Vivado IP 集成器里。

          總結(jié):

          Vivado 高層次綜合帶來了生產(chǎn)力,加快了驗證流程。
          設(shè)計探究和高級的高層次綜合技術(shù)創(chuàng)造了高質(zhì)量的RTL結(jié)構(gòu)
          RTL驗證和封裝集成使高層次綜合方法容易地應(yīng)用到你存在的設(shè)計流程里。



          關(guān)鍵詞: Vivado 賽靈思

          評論


          相關(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); })();