Address collision 指的是RAM的兩個(gè)port同時(shí)訪問相同的地址可能導(dǎo)致數(shù)據(jù)發(fā)生錯(cuò)誤的情況。在Xilinx中,不同的RAM,不同的RAM配置會導(dǎo)致address collision時(shí)不同的數(shù)據(jù)結(jié)果。
Distributed RAM
對于DRAM,寫數(shù)據(jù)是 synchronous write,需要一個(gè)時(shí)鐘周期, 讀數(shù)據(jù)是 asynchronous read,當(dāng)前時(shí)鐘周期就能讀出數(shù)據(jù)。因此當(dāng)在某一個(gè)cycle讀寫同時(shí)訪問同一地址時(shí),讀數(shù)據(jù)是 old data,即該地址原存放的數(shù)據(jù)而不是新要寫入的數(shù)據(jù)。
Block RAM
BRAM的讀寫都是 synchronous。BRAM的兩個(gè)Port分別為 PortA 和 PortB。
我們可以將 BRAM address collision 分為以下三類。
PortA 和 PortB 同時(shí)讀數(shù)據(jù)
兩個(gè)Port都會正確讀出該地址中的數(shù)據(jù)。
PortA 和 PortB 同時(shí)寫入數(shù)據(jù)
該地址最終被寫入的數(shù)據(jù)是 non-deterministic。因此設(shè)計(jì)中要避免兩個(gè)port同時(shí)寫數(shù)據(jù)的address collision。
PortA 寫數(shù)據(jù)同時(shí) PortB 讀數(shù)據(jù),或者是 PortA 讀數(shù)據(jù)同時(shí) PortB 寫數(shù)據(jù)
在這種情況下,數(shù)據(jù)總是會被正確寫入到RAM中,但是讀出的數(shù)據(jù)內(nèi)容則依賴于BRAM的配置。BRAM的write mode可以配置為三種模式,write first,read first 和 no change。
下圖為不同配置下的數(shù)據(jù)讀寫結(jié)果??梢钥吹疆?dāng) write port 配置為 READ_FIRST時(shí),不管 read port 如何配置,都會讀出 old data。而當(dāng) write port 配置為 WRITE_FIRST 或 NO_CHANGE時(shí),不管 read port 如何配置,讀數(shù)據(jù)都是 X,即 undeterministic。因此在可能發(fā)生address collision 的BRAM,一般將兩個(gè) port都配置為 READ_FIRST,以確保數(shù)據(jù)讀出的正確。
Ultra RAM
URAM的讀寫也都是 synchronous。URAM比較有意思的一點(diǎn)是,PortA 總是先于 PortB 執(zhí)行操作,因此在 address collision 我們會看到不同于BRAM的結(jié)果。
PortA寫,PortB讀。PortB 會讀出new data。(因?yàn)镻ortA先執(zhí)行,所以在PortB讀執(zhí)行時(shí),new data已經(jīng)寫入RAM中了)
PortA讀,PortB寫。PortA 會讀出old data。(同樣的,這也是因?yàn)镻ortA先執(zhí)行)
PortA寫,PortB寫。最終該地址寫入的值是PortB的值。(PortB因?yàn)楹髨?zhí)行會覆蓋PortA寫的值)
Reference
《UltraScale Architecture Configurable Logic Block》
《UltraScale Architecture Memory Resources》
審核編輯 :李倩
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6837瀏覽量
88754 -
RAM
+關(guān)注
關(guān)注
8文章
1365瀏覽量
114476 -
Xilinx
+關(guān)注
關(guān)注
71文章
2158瀏覽量
120874
原文標(biāo)題:Xilinx RAM Address Collision
文章出處:【微信號:FPGA開發(fā)之路,微信公眾號:FPGA開發(fā)之路】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論