RAM的初始化并沒有那么神秘,如果是采用Xilinx的IP Core,只需提供一個.coe文件,其內容就是RAM的初始值,只需要注意coe文件的格式就好,這里就不再贅述。
初始化方法
如果是自己寫的RTL代碼,如何初始化呢?這里提供兩個常用方法。來看一個例子,如下圖所示。
代碼第16行,通過default將所有地址的初始值設置為0;
代碼第17行,通過索引結合default的方式,將地址0的初始值設置為4,地址1的初始值設置為5,其余地址的初始值設置為0;
代碼第19行至第25行,采用initial語句,通過調用readmemb(類似的還有readmemh)實現對RAM的初始化。使用$readmemb時,需要提供一個.mem文件,文件內容就是RAM的初始值,這里給出一個.mem的例子,如下圖所示。
仿真問題
使用$readmemb時,需要把.mem文件加入到Vivado工程中,如下圖所示。
如果沒有添加此文件,會顯示如下Warning信息。
綜合問題
無論是default還是readmemb定義的初始值,在綜合時都是可以生效的。對于一個深度為4寬度為4的單端口RAM,綜合后的網表如下圖所示。
通過如下圖所示的Tcl命令可獲得相應的初始值,與init_data.mem中定義的初始值是一致的。
結論
兩種RAM初始化的方式:
采用default或地址索引加default的方式;采用$readmemb或$readmemh的方式
-
RAM
+關注
關注
8文章
1368瀏覽量
114725 -
初始化
+關注
關注
0文章
50瀏覽量
11868
原文標題:對RAM初始化怎么做
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論