我在Verilog基於Berkeley的Vscale處理器開發了硬件設計。爲了測試設計,我想編譯一些C程序並生成hexfiles。我最終希望從hexfiles生成ROM並執行Verilog仿真。哪個編譯器最能達到目的,riscv64-unknown-elf-gcc或riscv32-unknown-elf-gcc? Vscale處理器的架構是RV32IM。如何從C代碼生成一個用於測試32位RISC-V硬件設計的十六進制文件?
1
A
回答
1
可以以創建從ELF文件.hex文件使用elf2hex命令(使用gcc -o創建), 即:elf2hex 16 4096 my_elf_file > output.hex
如果你要使用32位架構,我會使用編譯riscv32未知的小精靈 - 海灣合作委員會。
0
我目前使用objcopy來測試我的核心設計。當前版本的gcc包含一個patch,它使objcopy能夠輸出verilog內存文件。
riscv32-unknown-elf-objcopy -O verilog input.elf output.vh
我可以輕鬆地將這些文件加載到我在simulationim中的模擬中。
但要回答你的問題,這將生成intel格式的十六進制文件。
riscv32-unknown-elf-objcopy -O ihex input.elf output.hex
Objcopy還支持指定要導出哪些代碼段以及哪些內存位置。
相關問題
- 1. 如何從十六進制代碼'建立'一個文件?
- 2. 如何用PHP生成一個隨機的DARK十六進制顏色代碼?
- 3. 如何將十六進制文件刻錄到圖片? 「硬件」
- 4. 在64位環境中將一個32位的十六進制讀取成一個長的文件
- 5. 生成128位十六進制數
- 6. Visual c#十六進制代碼到文本文件
- 7. 基於十六進制代碼的SetBackgroundColor
- 8. 創建從十六進制二進制文件用C
- 9. 使用十六進制表示一個7位代碼
- 10. 將十進制值轉換爲32位浮點十六進制
- 11. 用於產生shell的十六進制代碼實現
- 12. 從十六進制代碼轉換爲exe文件在vb.net
- 13. 將MIDI文件軌道長度寫爲32位十六進制值(Objective-C)
- 14. 十六進制編輯C#文件?
- 15. 將十六進制寫入文件C++
- 16. 如何發送十六進制代碼
- 17. 使用gcc生成十六進制文件
- 18. 從二進制文件創建十六進制文本文件
- 19. 生成所有顏色的十六進制值的代碼
- 20. 瞭解由Java生成的文件的十六進制轉儲?
- 21. 從pcb回傳十六進制文件
- 22. 從文件中讀取十六進制
- 23. 如何根據十六進制值測試一個字節?
- 24. 如何讀取從十六進制編輯器一個文件,並在C++
- 25. 使用十六進制位置從文件中刪除行
- 26. 在C中指定位圖文件中的十六進制值
- 27. 用Python寫的十六進制文件
- 28. 如何讀取包含16位十六進制值的文件?
- 29. 如何將UTF-32(十六進制)轉換爲UTF-8(十六進制)
- 30. 十六進制顏色代碼多個#
我可以直接在我的處理器上運行由riscv32-unknown-elf-gcc生成的代碼嗎?我認爲,riscv-tests repo生成的代碼可以直接在我的處理器上運行,但這些都是彙編程序。我怎樣才能從C程序生成這樣的代碼? – Shrek
按照上面的建議使用elf2hex。您還可以查看riscv_tests的Makefiles以瞭解它們是如何生成的。 – user2548418
是的,你可以。如上所述,看看Makefile,在這種情況下,在測試回購的基準文件夾內。它從C文件創建一個可執行文件和一個.hex。然後你可以使用spike,將它加載到fpga中,等等。 ie'riscv32-unknown-elf-gcc -o myexecutable.riscv mycode.c'並運行它使用'spike(-d選項,如果你想調試的話)pk myexecutable.riscv' –