RISC-V MCU中文社区

如何直接从main函数开始仿真

发表于 全国大学生集成电路创新创业大赛 2021-03-20 11:27:41
2
3384
2

提出问题

用最新的官方编译器得到的汇编文件在程序开始运行时会有很多初始化和预处理的步骤,但是仿真时不需要这些初始化,我们只关心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
用户评论 (2)
  • leon

    2022-03-04 10:19:42 leon 1#

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

    第一条指令就修改了啊

  • 2022-03-04 09:58:58 2#

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

leon

leon 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板