🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/全国大学生集成电路创新创业大赛/如何直接从main函数开始仿真
如何直接从main函数开始仿真
全国大学生集成电路创新创业大赛 作者 leon 发布于 2021-03-20 11:27(2030 天前) 6234 浏览

提出问题

用最新的官方编译器得到的汇编文件在程序开始运行时会有很多初始化和预处理的步骤,但是仿真时不需要这些初始化,我们只关心main函数开始后CPU及NICE_core的表现。否则可能会仿真很久。

解决办法

1. 首先我们要将.verilog文件的地址全部改成0开头的,@8000_0000是ITCM的寻址基址,我们要将其写到存储器中就要从@0000_0000开始。(源文件共有4个@,后面是数据段地址也要修改)

2. 修改前三条指令:      

80000000:	10010117	auipc	sp,0x10010	#堆栈指针从90010000开始
80000004:	293000ef	jal	ra,80000a92	#跳转到main所在80000a96,需要根据具体地址更改
80000008: a001 j 80000008 #原地跳转等待仿真结束
  • 替换原.Verilog文件的前10个字节:
  • 3. 最后修改一下tb_top.v的仿真时间
  • 40000000太长了,可能几万ns就够了吧。
  initial begin
    #40000000
        $display("Time Out !!!");
     $finish;
  end
  • 4. 仿真结果
  • 程序正确从80000a96开始运行了
  • 这里到30000多ns就运行完毕了,这个可能要试一下。
  • 5. 该方法没有经过大量检测,仅给大家提供个思路

全部回复 2
leon
leon1681 天前 · 1 楼
回复 匿名用户:

堆栈stack指针sp不赋值,会不会运行出错呀

第一条指令就修改了啊

匿
1681 天前 · 2 楼

堆栈stack指针sp不赋值,会不会运行出错呀

💡 请 登录 后参与讨论(微信扫码即登录/注册)