(原創) 如何計算SDRAM使用頻寬? (SOC) (DE2) (DE2-70) (TRDB-DC2) (TRDB-D5M) (TRDB-LCM) (TRDB-LTM)

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 2009-02-10 19:28  真 OO无双  阅读(10886)  评论(26编辑  收藏  举报

导航