本文作者:AMD 工程師 Prathamesh Suryavanshi
塊 RAM 是基于 FPGA 的系統(tǒng)設(shè)計(jì)中的關(guān)鍵組件,通常用于其高速數(shù)據(jù)存儲(chǔ)功能。然而,地址沖突可能會(huì)帶來(lái)重大挑戰(zhàn),影響系統(tǒng)的可靠性和性能。本文我們將探討簡(jiǎn)單雙端口 RAM 模塊中地址沖突的概念,并深入研究各種寫(xiě)模式及其對(duì)地址沖突的影響。通過(guò)實(shí)際示例,我們將演示發(fā)生這些沖突的場(chǎng)景,并提供仿真截圖來(lái)說(shuō)明這些問(wèn)題的實(shí)際表現(xiàn)。雖然本文主要介紹簡(jiǎn)單雙端口 RAM,但如果設(shè)計(jì)師想要了解有關(guān)真雙端口 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 中的地址沖突是指針對(duì)同一個(gè)物理存儲(chǔ)器地址同時(shí)執(zhí)行多項(xiàng)讀操作或?qū)懖僮鞯膱?chǎng)景。這可能導(dǎo)致沖突和不可預(yù)測(cè)的行為,未能妥善管理或控制這些操作的情況下尤其如此。地址沖突是使用塊 RAM 來(lái)設(shè)計(jì)和實(shí)現(xiàn)數(shù)字系統(tǒng)(如,現(xiàn)場(chǎng)可編程門(mén)陣列 (FPGA))的過(guò)程中的重要考慮因素。
寫(xiě)模式:
針對(duì)每個(gè)端口,均有三種可配置的寫(xiě)模式可供單獨(dú)選擇,其中任一模式即可決定寫(xiě)操作后輸出鎖存器的行為。默認(rèn)模式為 `WRITE_FIRST`,輸出會(huì)立即顯示正在寫(xiě)入的新數(shù)據(jù)?;蛘呖蛇x `READ_FIRST` 模式,該模式在內(nèi)部對(duì)存儲(chǔ)器陣列寫(xiě)入新數(shù)據(jù)的同時(shí),會(huì)將先前存儲(chǔ)的數(shù)據(jù)保留在輸出上。最后是 `NO_CHANGE`,該模式確保寫(xiě)操作完全不影響輸出,輸出僅在執(zhí)行讀操作后才會(huì)改變。
三種寫(xiě)模式:
寫(xiě)操作后輸出鎖存器上數(shù)據(jù)的行為由以下三種設(shè)置決定:WRITE_FIRST、READ_FIRST 和 NO_CHANGE。針對(duì)每個(gè)塊 RAM 端口,均可獨(dú)立設(shè)置該屬性,使您能夠?qū)Υ鎯?chǔ)器的行為進(jìn)行精細(xì)控制。
1. WRITE_FIRST 模式:
行為:在 WRITE_FIRST 模式下,寫(xiě)操作優(yōu)先用于輸出。塊 RAM 會(huì)將新寫(xiě)入的數(shù)據(jù)輸出到輸出總線上??梢詫⑵淅斫鉃橐环N“直寫(xiě)”或“數(shù)據(jù)轉(zhuǎn)發(fā)”機(jī)制 - 當(dāng)前寫(xiě)入的數(shù)據(jù)直接通過(guò)存儲(chǔ)器邏輯傳遞到輸出鎖存器。
使用場(chǎng)景:WRITE_FIRST 是默認(rèn)且通常最直觀的模式。它非常適合簡(jiǎn)單的寄存器文件或緩沖器,在這些場(chǎng)景中您希望隨時(shí)獲取最新信息并立即可用。如果寫(xiě)入一個(gè)值,那么在此模式下,您可在下一個(gè)周期立即使用它,而沒(méi)有任何時(shí)延。

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

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

下表展示了各種寫(xiě)模式下的地址沖突場(chǎng)景:


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

2. 共用時(shí)鐘 RF 模式:

3. 共用時(shí)鐘 NC 模式:

4. 獨(dú)立時(shí)鐘 WF 模式:

5. 獨(dú)立時(shí)鐘 RF 模式:

6. 獨(dú)立時(shí)鐘 NC 模式:

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