賽靈思|RAM

Vivado中RAM分爲分佈式RAM塊RAM。兩種實現方法在向RAM寫入數據時都是採取同步方式,區別在於從RAM讀取數據時,分佈式RAM採用異步方式,塊RAM採用同步方式。

塊RAM分爲單口RAM和雙口RAM. 單口RAM只有一組數據線與地址線,因此讀寫不能同時進行。而雙口RAM有兩組數據線與地址線,讀寫可同時進行。FIFO讀寫可同時進行,可以看作是雙口。

賽靈思官方將雙口RAM分爲Simple Dual Port RAM(僞雙口RAM)和True Dual Port RAM(雙口RAM)。

僞雙口RAM,一個端口只寫,另一個端口只讀;而雙口RAM兩個端口都可以讀寫。FIFO也是一個端口只讀,另一個端口只寫。FIFO與僞雙口RAM的區別在於,FIFO爲先入先出,沒有地址線,不能對存儲單元尋址;而僞雙口RAM兩個端口都有地址線,可以對存儲單元尋址。

僞雙口RAM只有一個寫端口,一個讀端口。

blk_mem_gen_0 IP_sram (
  .clka(clk),    // input wire clka
  .ena(ena),      // input wire ena
  .wea(wr),      // input wire [0 : 0] wea
  .addra(addr_wr),  // input wire [3 : 0] addra
  .dina(map_in),    // input wire [15 : 0] dina
  .clkb(clk),    // input wire clkb
  .enb(enb),      // input wire enb
  .addrb(addr_rd),  // input wire [3 : 0] addrb
  .doutb(map_out)  // output wire [15 : 0] doutb
);

真雙口RAM分別有兩個寫端口和兩個讀端口。

無論是簡單雙口RAM還是真雙口RAM,在沒有讀操作的情況下,應將讀使能rden信號拉成低電平,節省功耗。

在兩種情況下,都應當避免read-during-write,雖然可在軟件中進行設置,但是,作爲設計者,應當儘量避免此種情況。

對於真雙口RAM,還應當避免兩個讀端口或者兩個寫端口同時操作同一個地址,RAM中並沒有此種衝突解決電路,設計者應該避免這種衝突。

無論是那種雙口RAM,讀時序圖是相同的。

當讀使能有效時,數據會在時鐘下一個上升沿從Q端輸出。

真雙口RAM給設計帶來很多便利。在高速存儲中,需要對連續的數據同時處理,使用簡單雙口RAM只能讀取一個數據,而使用真雙口RAM可以同時讀取兩個數據,這樣明顯提高讀取速度以及處理速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章