XILINX之RAM使用指南(加個人總結)

XILINX之RAM使用指南(加個人總結)

一、 RAM 分類

XILINX 的 RAM 可分爲三種,分別是:單口 RAM,簡化雙口 RAM 和真雙口 RAM。如下 圖所示:

 

圖1 單口 RAM

 

圖2 簡化雙口 RAM A 口寫入數據,B 口讀數據

圖3 真雙口 RAM A,B 任意一個口都可

以讀寫數據,可從 A 寫入,B 讀數據

 

二、選擇數據位寬和深度

Block RAM 的數據位寬爲 1-1152bit,深度取決於所選擇 FPGA 器件中 block 的數量。超出地址範圍之外的寫操作,寫進去的數據不會與存儲器件中的數據衝突。 讀超出地址範圍之 外數據將會返回無效數據。注意, 當對超出範圍的地址進行操作的時候, 不能置位 set 或 reset信號,因爲這仍然會讀出無效數據。

 

三、操作模式

每個端口的操作模式決定了此端口的讀和寫之間關係。端口 A 和 B 可以獨立配置爲以 下三種模式中任一模式:寫優先模式,讀優先模式,不改變模式。這些模式詳解見下面。當 A 和 B 端口地址有衝突時,操作模式就會影響 A 和 B 口之間關係。

 

1.寫優先模式(write first mode)

在寫優先模式中,輸入數據被自動寫入存儲器件中,並且出現在數據輸出端口。時序見下圖。這種傳輸模式增強了在同一端口寫操作時使用數據輸出總線的靈活性。(即輸入數據的同時自動寫進存儲器和驅動數據到數據輸出端

圖4 寫優先操作模式

2.讀優先模式(read first mode)

在讀優先模式中,預先存儲在寫地址中的數據會被輸出,而輸入數據被存入存儲器件中。這種模式見下圖。(即以前寫進當前寫地址的數據出現在數據輸出端,此時輸入的數據被保存到存儲器中

圖5 讀優先模式

 

3.不改變模式(no-change mode)

在不改變模式中,輸出鎖存在寫操作時候保持不變,見下圖。在同一端口 的寫操作不會對數據輸出端口產生影響,輸出仍然是以前的讀數據。(即輸出鎖存器保持不改變在寫操作期間。說明在寫期間輸出端不會輸出寫期間地址的數據,不管以前保存數據還是現在的輸入數據

圖6 不改變模式

 

四、數據位寬比例

Block RAM 產生器支持端口 A 和 B 的位寬不同。即DINA,DINB,DOUA,DOUTB 位寬可以互 不相同。支持 1:32 到 32:1 之間的比例,端口 A 的寬度最大可達端口 B 的 32 倍,反之亦然。

例如一個 A 口位寬 32bit 深度 2048 的真雙口RAM, 如果 B 端口寬度爲 8bit 深度爲 8192。 那麼 A 地址總線位寬爲11bits, 地址總線位寬爲 13bits。 B 數據存在 little-endian 中, 見下圖。 An 是相對 A 端口在地址 n 的數據,Bn 是相對於 B 端口在地址 n 的數據。A0 由 B3,B2,B1,B0 構成。(雙端口有獨立的地址和數據總線以及控制信號,但仍訪問同一個存儲空間,數據寬度可以不相同,深度和數據寬度比例成反比。各端口地址是各自端口讀或寫的最寬地址的寬度。

圖7 數據位寬比例示意圖

 

五、比特寫功能(Byte_Write)

比特寫功能在 8bit 或 9bit 一字節時候都有效。當使用 8bit 一字節時候,沒有優先級位,而且存儲寬度限定爲 8bit 的倍數。當用 9bit 一字節時候,每一個字節都包含一個優先級位,存儲位寬限定爲9bit 的倍數。

當打開比特寫功能時候, WEA 或 WEB 總線位寬爲 N 位。等於DINA 或 DINB 總線的字節數。N 寫使能總線的最高位對應着輸入字的最高字節。只有寫使能總線在寫操作時候置位, 相應的 字節纔會存入存儲器中。 選擇 8bit 字節時候,DIN 和 DOUT 總線都由 8bit的字節構成,沒有優先級。當選擇 9bit 字節 時候,DIN 和 DOUT 總線由 9bit 的字節,每一個字節的第 9 位都做爲相應字節的優先級位。 字節寫功能一般用於連接數據位寬方面,這可能限制了數據位寬選擇的靈活性。然而,它不 太可能用於 NO_CHANGE 操作模式。

下面是一個單端 RAM 數據位寬 24bits,寫使能總線 WEA 爲3bits 的字節寫功能的示意圖。

圖8 字節寫功能示意圖

 

六、衝突

Block 模塊支持雙口 RAM,每一個口都是獨立且平等的,這樣就會有數據衝突。下面分別在異步和同步時鐘域中描述這種衝突的後果。

 

1.衝突和異步時鐘:

使用異步時鐘時候,當一個端口往某個存儲地址中寫數據時,另一個端口在指定的時間就不能從此存儲地址讀或寫數據。在器件手冊中定義了此clock- to-clock 置位時間,和其它 block ram 的轉換特性。(對於異步時鐘,當一個端口寫數據到存儲空間,另一個端口不能讀或寫那個存儲空間爲一段時間。

 

2.衝突和同步時鐘:

同步時鐘倒是一系列特殊的衝突,如下:

A、同步寫-寫衝突。

當兩個端口都往存儲器中同一個地址寫數據時候,就會發生衝突。這會導致此存儲地址中的內容是未知的。注意,寫-寫衝突只會影響存儲內容,與之相反寫-讀衝突隻影響數據輸出。

B、使用字節寫。

使用字節寫功能,當分散的字節寫入同樣數據字,存儲內容不會腐爛。RAM 內容只有在每個端口都寫入相同的字節。下圖描述了當ADDRA=ADDRB=0 時候的情況。

圖9 寫-寫衝突示例

C、同步讀-寫衝突。

當一個端口寫數據,另一個端口從同樣地址讀數據時就會產生同步寫-讀衝突。當存儲內容在讀-寫衝突時候沒有腐爛,輸出數據的有效性就取決於寫端口的操作模式。

a) 如果寫端口是讀優先模式,那麼另一個口就很可能讀取舊的存儲內容。

b) 如果寫端口是寫優先或不改變模式,那麼讀端口的輸出數據是無效的。

c) 如果打開字節寫功能,讀端口輸出只有最新的字節是無效的。

下圖描述了字節寫的寫-讀衝突的影響。當端口 A 爲寫優先模式和讀優先模式時的 DOUTB。 假設 ADDRA=ADDRB=0,端口 B 一直在讀,所有的存儲地址都初始化爲 0.RAM 內容在寫-讀 衝突中從沒有corrupt。

圖10 寫讀衝突示例

 

七、衝突和簡單雙口 RAM

對於簡單雙口 RAM,操作模式是不可選的,但是會自動設置爲要麼讀優先或寫優先模式,這個取決於目標器件和時鐘配置。操作模式決定了 A 或 B 端口的讀寫關係,只有在地址衝突時候纔會影響 A 和 B 端口之間關係。



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章