如何計算SDRAM使用頻寬?
Abstract
只要使用了VGA、TRDB-LCM或者TRDB-LTM,就會使用SDRAM當作frame buffer,由於SDRAM頻寬有限,若沒妥善分配頻寬,最後影像就會不正確。
Introduction
為什麼需要了解如何計算SDRAM使用頻寬呢?
1.若需自行更改VGA、TRDB-LCM、TRDB-LTM輸出的解析度,則必須更改其clk,所以SDRAM頻寬必須重新分配。
2.若加上TRDB-DC2、TRDB-D5M之後,則SDRAM頻寬更為吃緊,必須小心分配SDRAM頻寬。
3.為了將DE_CCD、DE2_LCM_CCD、DE2_70_D5M_LTM等範例移植到SOPC上,必需先對SDRAM頻寬有概念,轉而設定Avalon Bus Arbitration Rule。
本文分析3個經典範例DE2_CCD、DE2_CCD_detect、DE2_70_D5M_LTM的SDRAM頻寬使用方式,其他範例可舉一反三。
DE2_CCD :這是DE2 + TRDB-DC2 + VGA的組合,TRDB-DC2跑25MHz,VGA跑25MHz,SDRAM為TRDB-DC2與VGA之間的frame buffer,跑100MHz。 由於DE2只有1顆16 bit SDRAM,但RGB各為10 bit,1個pixel已經30 bit,顯然16 bit的SDRAM已經不夠用,所以DE2_CCD使用了Sdram_Control_4Port,將SDRAM模擬成2 read 2 write,這樣相當於一次可寫入32 bit,一次可讀出32 bit,好像是1顆32 bit SDRAM一樣。 不過當SDRAM變成2 read 2 write之後,由於讀寫同時進行,所以100MHz /4 = 25MHz,每個port的有效頻寬剩下25MHz而以,這是讓16 bit SDRAM當32 bit SDRAM的一種trade off。 當TRDB-DC2以25MHz寫入SDRAM時,由於一個pixel是30 bit,所以2個write port都用上了,因此是25MHz * 2 = 50MHz。 當VGA以25MHz讀取SDRAM時,也是以32 bit讀取,所以2個read port都用上了,因此25MHz * 2 = 50MHz。 如此TRDB-DC2的50MHz加上VGA的50MHz,剛好是100MHz,完全瓜分了SDRAM的100MHz頻寬。
由於VGA只有640 x 480,若想提高解析度,必須參考(筆記) D-Sub VGA timing table (SOC) (DE2) (DE2-70)的規格,設定適當的解析度,不過這樣還不夠,由於VGA的時脈提高,而SDRAM頻寬有限,勢必還得降低TRDB-DC2的時脈,如此SDRAM頻寬才夠TRDB-DC2與VGA瓜分。
DE2_CCD_detect: 這是DE2 + TRDB-DC2 + VGA的組合,主要實現real time的motion detection,TRDB-DC2跑25MHz,VGA跑25MHz,SDRAM跑100MHz。 由於motion detection需要2個frame做比對,所以SDRAM需要存2個frame,也就是2個read port可以讀出2的frame資料做比對,因此就不可能如DE2_CCD那樣,使用32 bit來存一個pixel的RGB,只能使用16 bit存1個pixel,因此只用了1個write port。 當TRDB-DC2以25MHz寫入SDRAM時,由於只使用了1個write port,因此25MHz * 1 = 25MHz。 當VGA以25MHz讀取SDRAM時,由於2個read port都用上了,因此25MHz * 2 = 50MHz。 所以25MHz + 50MHz = 75MHz,SDRAM的100MHz只使用了75MHz,頻寬足足有餘。 在(原創) 如何將CMOS影像以RGB16的方式存入SDRAM? (SOC) (DE2-70) (TRDB-D5M) (TRDB-LTM)中,我曾經使用DE2_CCD_detect的技巧,只存了RGB 16bit,主要為了省記憶體與留下1 read port與1 write port另作他用。
DE2_70_D5M_LTM :這是DE2-70 + TRDB-D5M + TRDB-LTM的組合,TRDB-D5M跑25MHz,TRDB-LTM跑33MHz,SDRAM跑166MHz。 由於DE2-70有2顆SDRAM,所以這個範例就不再使用DE2那樣4 port的方式,而是1 read、1 write在第一顆SDRAM,另外的1 read、1 write在另一顆SDRAM。 當TRDB-D5M以25MHz寫入SDRAM時,由於只使用了1個write port,因此25MHz * 1 = 25MHz。 當TRDB-LTM以33MHz讀取SDRAM時,由於只使用了1個read port,因此33MHz * 1 = 33MHz。 所以25MHz + 33MHz = 58MHz,SDRAM的166MHz只使用了58MHz,頻寬足足有餘。
Conclusion 大家幾乎都會拿DE2/DE2-70 CD的範例加以修改,改成自己要的結果,不過很多人忽略了SDRAM頻寬的計算,導致最後結果不正確,DE2因為只有1顆16 bit SDRAM,所以Sdram_Control_4Port來模擬32 bit SDRAM,頻寬的計算比較麻煩;而DE2-70因為有2顆SDRAM,可以直接使用雙通道的方式將16 bit兩倍成32 bit,而頻寬計算的方式也比較單純。 See Also (筆記) D-Sub VGA timing table (SOC) (DE2) (DE2-70) (原創) 如何將CMOS影像以RGB16的方式存入SDRAM? (SOC) (DE2-70) (TRDB-D5M) (TRDB-LTM)
posted on 2012-03-14 15:52 CrazyBingo 阅读(722) 评论(0) 编辑 收藏 举报