(转)如何使用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:
『無雙學長說過,Quartus II的warning尚可忽略,但critical warning就沒辦法再裝做不看到了吧?』雖然Nios II執行結果正確,但看到這個critical warning總是很礙眼,阿帥一臉無奈。
小美仔細研究發現,原來是經過Quartus II合成後,時序無法滿足要求。
小美與阿帥原本以為是自己的code有問題,可是將DE2-70 CD 4個包含Nios II系統的範例拿來編譯,除了DE2_70_SD_Card_Audio_Player正常外,其他3個範例也都有critical warning。
DE2_70_NET
DE2_70_NIOS_DEVICE_LED
DE2_70_NIOS_HOST_MOUSE_VGA
DE2_70_SD_Card_Audio_Player (正常)
看到連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架構,才解決了這個惱人的問題。』
『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相連!!』
『最後Fmax達到102.44MHz,critical warning也不見了。』
『原來沒有使用pipeline bridge,儘管constraint已經調到100MHz,但Quartus II最後只能合成出68.35MHz』
『哇!!竟然一行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