搭建蜂鸟E203FLASH启动的仿真环境,运行Hello World例程 一.前言蜂鸟E203是支持FLASH启动的可是官方并没有提供 FLASH 启动的仿真环境只是提供了利用 HBird SDK 进行 FLASH 下载的编译因此需要自行搭建 FLASH 启动的仿真环境。在这过程中也遇到很多问题但最终也是成功运行 helloworld 例程当然也可能有其他的方式这里只是提供借鉴和参考也欢迎大家批评和指正!二.准备需要我们了解蜂鸟E203的整个仿真过程能完成ILM启动运行helloworld。这里可以参考官方文档以及芯王国博主的关于虚拟机以及蜂鸟E203系列的一些文章。官方文档 1. Overview — Hummingbirdv2 E203 Core and SoC 0.2.1 documentation芯王国芯王国-CSDN博客三.搭建1.将QSPI FLASH添加工程中1需要一个QSPI FLASH仿真模型链接:项目首页 - QSPIFLASHVerilog模型下载:QSPI FLASH Verilog模型下载 - GitCode2新建IOBUF.v文件将IOBUF.vMX25L6473F.vQSPI FLASH仿真模型文件添加到e203_hbirdv2-master/rtl/e203/soc中3修改MX25L6473F.v文件中的TOP_Add和tVSL(FLASH启动时间)TOP_Add可以改小一点tVSL(FLASH启动时间)让其在芯片复位运行开始时间之前即可这里直接改成0。2.找到e203_hbirdv2-master/tb/tb_top.v文件。1添加qspi内部信号线以及外部引脚线将内部信号线添加到e203_soc_top模块调用中2利用IOBUF将QSPI引脚信号引出连接QSPI FLASH模块3修改bootrom脚使芯片从FLASH启动4修改FLASH读取程序的代码有两种方式a.在tb_top.v文件中修改将原本加载到ITCM的注释掉改为加载到QSPI FLASH的数组里readmemh里的路径名为程序加载的绝对路径/程序.verilog这里用的是helloworld例程即为(helloworld的绝对路径/helloworld.verilog)可以在对应位置pwd一下得到绝对路径。b.在MX25L6473F.v中修改将File_Name 的none改为程序加载的绝对路径/程序.verilog跟第一种是一样的只是改的位置不同两种方式选一个就行。5修改总仿真时间因为从FLASH运行时间相对较长需要增加仿真时间3.编译helloworld例程方式是FLASHXIP从FLASH运行。source setup.sh echo $PATH which riscv-nuclei-elf-gcc make rm make helpcd application/baremetal/helloworld make dasm SOChbirdv2 BOARDddr200t COREe203 DOWNLOADflashxip4.修改编译后生成的helloworld.verilog文件将2000全部替换为0000虽然芯片从FLASH启动的地址是0x20000000但实际在FLASH里保存还是从0x00000000开始的需要映射好。5.进入到e203_hbirdv2-master/vsim目录下开始仿真make clean make install make compile SIMvcs make run_test SIMvcs最终运行结果观看波形make wave SIMvcs四.总结FLASH启动的仿真环境其主要就是两步1.将QSPI flash通过蜂鸟E203的QSPI0接口与芯片连接。2.用hbird-sdk编译出helloworld.verilog文件下载模式为flashxip并加载到QSPI flash的数组里。编译过程中下载模式改为flash也是可以的从flash读出再加载到ILM运行就是需要将tb_top.v文件的检测代码注释掉不然仿真代码没运行完会被提前终止显示FAIL。其次就是注意一些细节1修改bootrom让其从FLASH启动2编译出的.verilog文件地址映射的更改3 QSPI flash启动时间要在芯片开始运行之前后面就是正常的仿真过程。