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