一個雙埠RAM能配置成兩個獨立的單埠RAM?
- 2019 年 10 月 30 日
- 筆記
思考一下:
對於一個單埠RAM,採用RTL程式碼描述,如何在同一個模組中實現如下功能:
(1)寬度可配置
(2)深度可配置
(3)寫模式可配置
實現上述功能主要用到Verilog兩個語法結構:parameter定義參數,實現參數化;generate語句,根據參數調用對應的功能塊。
在FPGA設計中可能會出現對單埠RAM需求較大的情況。儘管Xilinx提供了將BRAM配置為單埠RAM的IP Core,但從資源角度來看,可能會造成浪費。例如,需要2個512×18的單埠RAM,若直接採用單埠RAM的配置方式,1個512×18的單埠RAM將佔用1個18Kb的BRAM,這意味著將要消耗2個18Kb的BRAM。事實上,此時每個BRAM有一半的資源閑置。這裡,採用另一種方式:將BRAM配置為1Kx18的雙埠RAM,其中埠A和埠B均為1Kx18的模式。具體配置方式如下圖左邊區域所示。顯然,此時只佔用了1個18Kb的BRAM。

在該圖左邊區域,需要將埠A的地址訊號ADDRA的最高位接高,埠B的地址訊號ADDRB的最高位接低。這意味著埠A所能覆蓋的地址區間為512~1023共512個地址空間,埠B所能覆蓋的地址區間為0~511共512個地址空間。二者地址空間沒有重疊,因此互相獨立,從而形成了兩個獨立的512×18即9Kb的單埠RAM。此外,埠A和埠B的位寬可以不一致(但不是隨意的),如上圖的右半區域所示。仍將BRAM配置為雙埠RAM,其中埠A為1024×18,埠B為2048×9。將埠B的地址訊號ADDRB的最高位接高,這意味著埠B所能覆蓋的地址區間為1024~2047共1024個地址空間,而埠A的地址區間為0~1023共1024個地址空間。二者地址空間依然沒有重疊,仍相互獨立,從而形成了兩個獨立的9Kb的單埠RAM。
思考一下:
對於URAM是否可以這麼配置?