單口 RAM(Single RAM)、雙口 RAM(Dual RAM)、簡(jiǎn)單雙口 RAM(Simple-Dual?RAM)、真雙口 RAM(True-Dual RAM)有什么不同?
對(duì)于?分布式 RAM,支持簡(jiǎn)單雙口 RAM 和雙口 RAM,不能配置成真雙口 RAM。
問(wèn)題在于:Xilinx 給出的 DRAM(分布式 RAM)支持雙口,我把雙口認(rèn)為包含真雙口了,不對(duì)。
先總結(jié)一下,如有不對(duì),歡迎私信聯(lián)系批評(píng)指正。
對(duì)于 BRAM(Block RAM,塊 RAM)
在 BRAM Controller 控制器下,支持單口 RAM、真雙口 RAM、單口 ROM 和雙口 ROM;
在不使用 AXI 的控制器情況下,支持單口 RAM、簡(jiǎn)單雙口 RAM、真雙口 RAM,單口 ROM 和雙口 ROM。
單口RAM:
1 個(gè)時(shí)鐘,1 個(gè)讀寫地址(要么讀用,要么寫用),可以讀也可以寫,但是不能同時(shí)讀寫;
簡(jiǎn)單雙口 RAM:
2 個(gè)端口,有相互獨(dú)立的時(shí)鐘,一個(gè)口專門負(fù)責(zé)寫,一個(gè)口專門負(fù)責(zé)讀;
真雙口 RAM:
和簡(jiǎn)單雙口的區(qū)別:
簡(jiǎn)單雙口是一個(gè)口專門讀,一個(gè)口專門寫;
真雙口是 2 個(gè)口都可以讀寫;
真雙口可以看成是 2 個(gè)單口拼起來(lái)的,且 2 個(gè)單口共享存儲(chǔ)器。
單口 ROM 和 雙口 ROM
雙口 ROM 可以看成是 2 個(gè)單口拼起來(lái)的,且 2 個(gè)單口共享存儲(chǔ)區(qū)。
對(duì)于 DRAM(Distribute RAM,分布式 RAM)
ROM
給地址,出對(duì)應(yīng)地址的數(shù)據(jù),沒(méi)有時(shí)鐘
RAM:支持單口、簡(jiǎn)單雙口、雙口。
(注意!這里的雙口和真雙口不同,DRAM 不支持真雙口 RAM)
單口 RAM:讀寫共用地址 a[5:0],寫數(shù)據(jù)時(shí) we 拉高,不能同時(shí)讀寫;
簡(jiǎn)單雙口 RAM:1 個(gè)讀地址,1 個(gè)寫地址,1 個(gè)輸入,1 個(gè)輸出;
雙口 RAM:1 個(gè)通道共享讀寫(等同于單口),1 個(gè)通道只讀,2 個(gè)輸出,
spo 數(shù)據(jù)對(duì)應(yīng) a 地址,dpo 數(shù)據(jù)對(duì)應(yīng) dpra 地址;
a[5:0],讀寫共用的地址,當(dāng) we = 1 時(shí)表示寫地址,將 d[15:0] 寫入 RAM,當(dāng) we = 0 時(shí),將 a[5:0] 地址的數(shù)據(jù)從 spo[15:0] 上輸出;
dpra[5:0] 只用于讀的地址,讀出 dpra[5:0] 上的數(shù)據(jù),從 dpo[15:0] 輸出。
當(dāng)進(jìn)行讀取時(shí),簡(jiǎn)單雙口一次讀取 1 個(gè)數(shù)據(jù),雙口可以同時(shí)讀取出 2 個(gè)數(shù)據(jù)。
四口 RAM:1 個(gè)通道共享讀寫,3 個(gè)通道只讀;
單口:
WE = 1 寫入,使用的實(shí)際上是 WA[6:1] 地址,寫入發(fā)生在時(shí)鐘的上升沿,時(shí)序邏輯;
WE = 0 讀出,使用的是 A[6:1] 地址,地址線上有地址,數(shù)據(jù)立刻讀出,組合邏輯輸出;
單口情況下,A 和 WA 連在一起,共享讀寫地址線;
雙端口:
?一個(gè)用于同步寫入和異步讀取的端口
第一個(gè)函數(shù)發(fā)生器與共享讀寫端口地址相連
?一個(gè)用于異步讀取的端口
第二函數(shù)發(fā)生器具有連接到第二個(gè)讀端口地址的A輸入,并且 WA 輸入與第一讀/寫端口地址共享
如下圖所示為雙口 DRAM 的讀寫仿真:
(1)在 WE = 0 時(shí),兩個(gè)口均為讀出口,A 口的地址線 ADDR[3:0] 的地址為 0,在 SPO[7:0] 上讀出數(shù)據(jù) 17,B 口的地址線 DPRA[3:0] 為 0,在 DPO[7:0] 上讀出數(shù)據(jù) 17;
(2)在 WE = 1 時(shí),A 口為寫入口,B 口是只讀口,此時(shí)仍為讀出口,A 口向地址 0 寫入數(shù)據(jù) D[7:0] = 34,B 口仍為讀,讀出 0 地址的數(shù)據(jù) 34;
簡(jiǎn)單雙端口
?一個(gè)用于同步寫入的端口(沒(méi)有來(lái)自寫入端口的數(shù)據(jù)輸出/讀取端口)
?一個(gè)用于異步讀取的端口
參考:
[1] Xilinx ug474_7Series_CLB
[2] Xilinx pg063-dist-mem-gen
[3] Xilinx pg058-blk-mem-gen
審核編輯 :李倩
?
評(píng)論
查看更多