(转)如何使用Pipeline Bridge增進Nios II系統的Fmax?

全文地址:http://www.cnblogs.com/oomusou/archive/2008/12/21/pipeline_bridge.html

Abstract
在DE2-70,隨便一個Nios II系統在Quartus II編譯後,幾乎都會遇到1個critical warning:『Critical Warning: Timing requirements for slow timing model timing analysis were not met. See Report window for details.』,該如何解決呢?

Introduction
使用環境:Quartus II 8.1 + Nios II EDS 8.1 + DE2-70 (Cyclone II EP2C70F896C6N)

小美與阿帥最近正努力的研究Nios II系統,也從DE2平台轉移到更強大的DE2-70平台,不過遇到一個很惱人的問題,隨便一個Nios II系統,編譯幾乎都會有1個critical warning:

pipe_bridge06

『無雙學長說過,Quartus II的warning尚可忽略,但critical warning就沒辦法再裝做不看到了吧?』雖然Nios II執行結果正確,但看到這個critical warning總是很礙眼,阿帥一臉無奈。

小美仔細研究發現,原來是經過Quartus II合成後,時序無法滿足要求。

pipe_bridge04

小美與阿帥原本以為是自己的code有問題,可是將DE2-70 CD 4個包含Nios II系統的範例拿來編譯,除了DE2_70_SD_Card_Audio_Player正常外,其他3個範例也都有critical warning。

DE2_70_NET

pipe_bridge02

DE2_70_NIOS_DEVICE_LED

pipe_bridge04

DE2_70_NIOS_HOST_MOUSE_VGA

pipe_bridge03

DE2_70_SD_Card_Audio_Player (正常)

pipe_bridge05

看到連DE2-70 CD的範例本身都有這個問題時,小美與阿帥確定不是自己的code有問題,但也無計可施,最後只好請教無雙學長。

『無雙學長,為什麼這個時序無法滿足的需求,在DE2都不會遇到呢?而且我也在Quartus II也增加了constraint,希望Quartus II能合成出Fmax為100MHz的系統,但是Quartus II怎麼也合不出我要的100MHz,真是被他打敗了...』心急的阿帥首先提出問題。

『DE2-70這個問題也困擾我很久,以前我使用DE2時也沒遇過這樣的critical warning,一直到最近發現了Pipeline Bridge與Altera提出的Nios II High-Performance Example with Bridges架構,才解決了這個惱人的問題。』

n2-with-bridges-popup

 

『Pipeline Bridge是什麼東西?以前從來沒聽過...』

『Bridge的觀念是Quartus II 7.1之後才提出的,就是為了解決Nios II系統Fmax低落的問題,由上圖可知,一些較慢的slave都透過Pipeline Bridge與master溝通,而不像傳統一樣,每個master都與slave有專屬的通道。』

『為什麼這樣就能增加Fmax呢?』

『主要有兩個原因:』

『1.傳統的master與slave因為有專屬通道,所以有最大的concurrency,只要master不要同時存取同一個slave即可,但也增加了系統的複雜度,所以Fmax拉不高,若系統對於慢速的slave沒有大量concurrency的要求,使用bridge可以降低系統的複雜度,並且提高Fmax。』

『2.Pipeline Bridge對於Avalon Bus的信號,如address、writedata、write、read、byteenable、chipselect、burstcount、readdata、readdatavalid與waitrequest都加上了pipeline register,所以可以拉高Fmax。』無雙學長停頓了一下繼續說明。

『這只是最初步的解釋而以,更詳細的解釋可以在Quartus II Handbook 8.1 vol.4的Chap.11 Avalon Memory-Mapped Bridges找到,或者參考Avalon Memory-Mapped Bridges這份文件。』

『在Nios II High-Performance Example with Bridges一文中的範例,用的是Altera自己的開發版,不知道在DE2-70會如何?』小美看了一下DE2-70,希望這個方法在DE2-70上有用。

『問的好,我最近剛好將我的DE2_70_NIOS 1.1版,也就是(原創) 如何以32 bit的方式存取SDRAM? (SOC) (Nios II) (SOPC Builder) (DE2-70)這篇的範例改成Nios II High-Performance Example with Bridges所提出的架構後,結果非常令人滿意。』

『慢速的slave全部經過pipeline bridge再與Nios II CPU這個master相連!!』

pipe_bridge07

『最後Fmax達到102.44MHz,critical warning也不見了。』

pipe_bridge00

『原來沒有使用pipeline bridge,儘管constraint已經調到100MHz,但Quartus II最後只能合成出68.35MHz』

pipe_bridge01

『哇!!竟然一行code都沒改,Fmax就從68.35MHz變成102.44MHz,真是太神奇了』小美高興的驚叫。

『DE2-70 CD的其他範例,就交給你們自己練習了喔!!』

『OK!!謝謝無雙學長』

完整程式碼下載
DE2_70_NIOS_12_pipeline_bridge.7z

Conclusion
Bridge是個很有彈性的東西,巧妙的使用bridge架構整個系統,將有助於整體效率,在(原創) Altera新的一本Nios II手冊:Embedded Design Handbook (SOC) (Nios II)的ch.6,也提到Bridge使用的一些guideline,又興趣的人可以參考。

See Also
(原創) 如何以32 bit的方式存取SDRAM? (SOC) (Nios II) (SOPC Builder) (DE2-70)
(原創) Altera新的一本Nios II手冊:Embedded Design Handbook (SOC) (Nios II)

Reference
Nios II High-Performance Example with Bridges
Avalon Memory-Mapped Bridges
Embedded Design Handbook

 

posted on 2009-10-26 10:05  神一样驴子  阅读(614)  评论(0编辑  收藏  举报

导航