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