URAM和BRAM有什麼區別

  • 2019 年 10 月 31 日
  • 筆記

無論是7系列FPGA、UltraScale還是UltraScale Plus系列FPGA,都包含Block RAM(BRAM),但只有UltraScale Plus晶片有UltraRAM也就是我們所說的URAM。BRAM和URAM都是重要的片上存儲資源,但兩者還是有些顯著的區別。

容量

BRAM的容量為36Kb,且可當作兩個獨立的18KbBRAM使用。對於一個36Kb的BRAM,其最能達到的最大位寬為72bit。URAM容量為288Kb,一個URAM深度為4K(4×1024),寬度為72b。

時鐘

BRAM有兩個時鐘,在RAMB36E2的Primitive聲明中就可以看到這兩個時鐘CLKARDCLK和CLKBWRCLK。而URAM只有一個時鐘,在URAM288的Primitive聲明中可以看到該時鐘CLK。儘管在使用XPM_MEMORY實例化URAM時可以看到clka和clkb,但這兩個埠最終都連接到URAM的物理埠CLK上。

初始值

BRAM的初始值是可以設定的,無論BRAM是單埠、簡單雙埠還是真雙埠都可以通過COE文件設定其初始值。而URAM的初始值只能為0,且無法更改,換言之,其初始值是不可設定的。這也就意味著BRAM可以配置成ROM而URAM不可以。

工作模式

BRAM可配置為單埠、簡單雙埠和真雙埠,但對於URAM,不能簡單地將這三種模式映射過來,其工作行為如下圖所示。可以看到,A/B埠不是獨立的,例如,A埠讀而B埠寫同一地址,讀出的是該地址原有數據;A埠寫而B埠讀同一地址,讀出的是新寫入的數據。

圖片來源:Table 2-6, ug573

實例化方式

對於BRAM,可採用原語、XPM_MEMORY、RTL程式碼或者IP Core的方式進行實例化,但URAM目前只支援原語、XPM_MEMORY和RTL程式碼的方式。相比而言,XPM_MEMORY的方式更為快捷,也是Xilinx建議的方式。

級聯方式

BRAM和URAM都可級聯,只是級聯方式不同。在使用BRAM時,我們只需要設定寬度和深度,並根據時鐘頻率合理選擇Latency,也就是選擇是否需要使用BRAM自帶的輸出暫存器或Slice中的暫存器。而URAM提供了專門的級聯暫存器,同樣需要根據時鐘頻率合理選擇Latency,此時會影響到級聯暫存器的使用。如下圖所示,是4個URAM的級聯情形。

文 | Lauren 圖 | Lauren

Copyright @ Lauren的FPGA