本文作者:AMD 工程師 Prathamesh Suryavanshi
塊 RAM 是基于 FPGA 的系統(tǒng)設計中的關鍵組件,通常用于其高速數(shù)據(jù)存儲功能。然而,地址沖突可能會帶來重大挑戰(zhàn),影響系統(tǒng)的可靠性和性能。本文我們將探討簡單雙端口 RAM 模塊中地址沖突的概念,并深入研究各種寫模式及其對地址沖突的影響。通過實際示例,我們將演示發(fā)生這些沖突的場景,并提供仿真截圖來說明這些問題的實際表現(xiàn)。雖然本文主要介紹簡單雙端口 RAM,但如果設計師想要了解有關真雙端口 RAM 的更多信息,可參閱 UG1485/AM007。
UG1485:
https://docs.amd.com/access/sources/dita/topic?Doc_Version=2025.2%20English&url=ug1485-versal-architecture-premium-series-libraries&resourceid=xpm_memory_tdpram.html
AM007:
https://docs.amd.com/access/sources/dita/topic?url=am007-versal-memory&resourceid=gmg1532372907350.html&ft:locale=en-US
地址沖突:
塊 RAM 中的地址沖突是指針對同一個物理存儲器地址同時執(zhí)行多項讀操作或?qū)懖僮鞯膱鼍啊_@可能導致沖突和不可預測的行為,未能妥善管理或控制這些操作的情況下尤其如此。地址沖突是使用塊 RAM 來設計和實現(xiàn)數(shù)字系統(tǒng)(如,現(xiàn)場可編程門陣列 (FPGA))的過程中的重要考慮因素。
寫模式:
針對每個端口,均有三種可配置的寫模式可供單獨選擇,其中任一模式即可決定寫操作后輸出鎖存器的行為。默認模式為 `WRITE_FIRST`,輸出會立即顯示正在寫入的新數(shù)據(jù)?;蛘呖蛇x `READ_FIRST` 模式,該模式在內(nèi)部對存儲器陣列寫入新數(shù)據(jù)的同時,會將先前存儲的數(shù)據(jù)保留在輸出上。最后是 `NO_CHANGE`,該模式確保寫操作完全不影響輸出,輸出僅在執(zhí)行讀操作后才會改變。
三種寫模式:
寫操作后輸出鎖存器上數(shù)據(jù)的行為由以下三種設置決定:WRITE_FIRST、READ_FIRST 和 NO_CHANGE。針對每個塊 RAM 端口,均可獨立設置該屬性,使您能夠?qū)Υ鎯ζ鞯男袨檫M行精細控制。
1. WRITE_FIRST 模式:
行為:在 WRITE_FIRST 模式下,寫操作優(yōu)先用于輸出。塊 RAM 會將新寫入的數(shù)據(jù)輸出到輸出總線上??梢詫⑵淅斫鉃橐环N“直寫”或“數(shù)據(jù)轉(zhuǎn)發(fā)”機制 - 當前寫入的數(shù)據(jù)直接通過存儲器邏輯傳遞到輸出鎖存器。
使用場景:WRITE_FIRST 是默認且通常最直觀的模式。它非常適合簡單的寄存器文件或緩沖器,在這些場景中您希望隨時獲取最新信息并立即可用。如果寫入一個值,那么在此模式下,您可在下一個周期立即使用它,而沒有任何時延。

2. READ_FIRST 模式:
行為:在 READ_FIRST 模式下,優(yōu)先執(zhí)行讀操作。塊 RAM 會輸出先前存儲的數(shù)據(jù) - 即,發(fā)生寫操作之前該存儲位置中的數(shù)據(jù)。寫操作仍成功并在內(nèi)部更新存儲單元,但輸出反映的是該時鐘周期“之前”的狀態(tài)。
使用場景:READ_FIRST 是需要以流水打拍方式執(zhí)行的“讀-改-寫”操作的主力模式。以如下累加器為例:memory[i] = memory[i] + 1。您需要讀取 memory[i] 的舊值,將其發(fā)送到加法器,然后將結(jié)果寫回。READ_FIRST 允許寫入由前一項操作計算所得的新值的操作與讀取舊值的操作發(fā)生在同一個周期內(nèi)。它對于構建高效的流水線、FIFO 和數(shù)據(jù)路徑處理元素至關重要。

3. NO_CHANGE 模式:
行為:此模式最為獨特。在寫/讀操作沖突期間,塊 RAM 輸出不會改變。它只是保持上一項成功的讀操作的輸出值不變。對存儲單元的內(nèi)部寫操作仍然正確執(zhí)行,但輸出端口在該周期內(nèi)實際上被“凍結(jié)”。
使用場景:NO_CHANGE 的主要優(yōu)勢是降低功耗。通過防止輸出總線翻轉(zhuǎn),可以降低塊 RAM 及其連接的下游邏輯的動態(tài)功耗。在寫周期中,如果從塊 RAM 讀取數(shù)據(jù)的邏輯不需要有效數(shù)據(jù),那么該模式是極佳的選擇。如果控制邏輯可以在發(fā)生寫操作的周期中簡單忽略塊 RAM 輸出,則使用 NO_CHANGE 可以實現(xiàn)更節(jié)能的設計。

下表展示了各種寫模式下的地址沖突場景:


以下是 SDPRAM 中地址沖突的一些實際示例:
共用時鐘 WF 模式:

2. 共用時鐘 RF 模式:

3. 共用時鐘 NC 模式:

4. 獨立時鐘 WF 模式:

5. 獨立時鐘 RF 模式:

6. 獨立時鐘 NC 模式:

同樣,設計師也可以對 TDPRAM 進行仿真。
如何避免地址沖突:
塊 RAM 系統(tǒng)中的 No-change 模式在雙端口 RAM 設置中尤為常見,它提供了一種方法,用于在同一存儲器地址上同時進行讀寫操作時管理潛在數(shù)據(jù)沖突。在這種設置中,可能會在同一地址上并發(fā)執(zhí)行讀寫操作,如果處理不當,可能導致數(shù)據(jù)損壞。No-change 模式通過如下方式來解決此問題:它確保在這些并發(fā)操作期間,讀操作會檢索該位置上最后一個穩(wěn)定的數(shù)據(jù)值,而不是反映同時執(zhí)行寫操作所引入的當前狀態(tài)或瞬態(tài)狀態(tài)。此模式對于維護數(shù)據(jù)完整性和一致性至關重要,可在沖突期間提供可預測的響應。No-change 模式的實現(xiàn)可能因具體的存儲器技術和 FPGA 或類似架構中 RAM 的設計而異,通常是通過設計工具或特定硬件設置來配置的。通過使用 no-change 模式,設計師可以降低與額外仲裁或優(yōu)先級邏輯相關的復雜性,在不犧牲數(shù)據(jù)可靠性的前提下簡化系統(tǒng)設計。此外,它提供了一種簡單有效的方法來確保數(shù)據(jù)讀操作穩(wěn)定可靠,在存儲塊經(jīng)歷同時執(zhí)行讀寫訪問的繁重數(shù)據(jù)處理任務期間,最大限度減少錯誤發(fā)生的可能性。
-
存儲器
+關注
關注
39文章
7756瀏覽量
172179 -
RAM
+關注
關注
8文章
1401瀏覽量
120991 -
鎖存器
+關注
關注
8文章
958瀏覽量
45464
原文標題:開發(fā)者分享 | 塊 RAM 存儲器中的地址沖突場景
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
隨機訪問存儲器(RAM)和只讀存儲器(ROM)的區(qū)別
存儲器RAM單元對應的字節(jié)地址處的值分別是多少
單片機的程序存儲器和數(shù)據(jù)存儲器共處同一地址空間為什么不會發(fā)生總線沖突呢?
單片機中的數(shù)據(jù)存儲器ram
用戶存儲器(RAM) 中的間隔
MCS51 數(shù)據(jù)存儲器(RAM)
組原實驗報告【RAM存儲器實驗】
RAM/ROM存儲器的設計
STEP7-壓縮用戶存儲器(RAM)解析
塊RAM存儲器中的地址沖突場景
評論