最新有客戶在詢問soc的片上RAM啟動方案。于是有了本篇文章。如果soc不 使用外部存儲而是使用片上RAM的話,文檔上似乎沒有給出詳細的說明,那這里我們就來介紹一下。
首先片上RAM啟動要在IP上關閉外部存儲,如下圖,Include the external memory AXI interface。
這里要說,on chip RAM的啟動方式與外部存儲方式的啟動方式有個很大的區別就是不需要bootloader從flash中搬運數據到存儲器。on chip RAM啟動方式不需要bootloader或者說應用程序就是bootlaoder。
另外,在新版本的sapphire IP中,已經支持把應用程序的hex文件直接添加到IP,相對于老的版本來說方便了很多。這時只需要勾選Overwrite the default SPI flash bootloader with the user application并且在User Application Path中添加用戶程序生成的hex文件即可。
但是這樣重新編譯之后可能不能運行。因為soc RAM的初始化文件默認是工程目錄下的bin文件,所以最好把這個工程目錄下的bin文件先刪除掉,然后再重新編譯。當然也可能是別的原因,先不必深究。
在生成IP的過程中應該是把hex文件轉換成了4個bin文件,與IP同一個目錄。所以每次修改程序并生成hex之后,都要打開IP重新生成IP,這時才會重新生成bin文件。
這樣之后重新編譯就可以了。
有一個問題:我們每次修改RISCV的工程,重新生成hex文件。都需要重新編譯工程,這是很耗時的。所以需要一個辦法把修改后的hex——也就是RAM的初始化文件使用一個簡單的方法合成bit文件,以避免重新編譯。
易靈思Efinity從2023.1.150開始增加了一個功能叫Open BRAM Initial Content Updater。它可以讓用戶快速更新BRAM初始化的數據而不需要全編譯。它是更新elaborated網表的數據,
說明:--optimize-zero-init-rom綜合選項是告訴軟件優化初始化值為0的ROM的,如果你的ROM初始值是0,又想通過Open BRAM Initial Content Updater工具來修改初始值,需要把--optimize-zero-init-rom選項Disable。
RISCV片上ROM更新
(1)當工程編譯完成之后,打開該工具就可以看到可以初始化的BRAM塊。其中ram_symbol0,1,2,3就是RISCV的初始化文件。用戶只需要選擇相應的文件,然后再點擊Update memory content就會把初始化文件更新掉,RISCV有4個bin文件,所以要對每個bin文件都進行更新。
至于怎么生成要更新的bin文件呢?請參考embedded_sw/sapphire/tool下面的README-binGen.txt
(2)當4個文件都更新完成之后點擊Genarate a new Bitstream,就會有提示是否要重樣綜合還是繼續生成Bitstream的過程,按下圖選擇Proceed with Bitstream Generation.軟件會運行最后一步生成新的bit流。
(3)用新生成的數據流就可以重新下載看效果了。新生成的文件不會影響debug。
一般ROM的初始化
在Efinity的安裝目錄下提供了一個T20的參考工程。
/debugger/demo/helloworlddbg_GOLD
我把它修改成了Ti60F225的demo工程(因為手上沒有T20的demo板)
鏈接:https://pan.baidu.com/s/106I_xipVjXc1sfV9c5982A?pwd=1234
提取碼:1234
具體的操作步驟請參考efinity-ug.pdf的About the BRAM Initial Content Updater部分,有詳細的說明,這里先不贅述。
審核編輯 黃宇
-
RAM
+關注
關注
8文章
1367瀏覽量
114527 -
soc
+關注
關注
38文章
4118瀏覽量
217928
發布評論請先 登錄
相關推薦
評論