开源wujian100-modlesim仿真

1、说明

阿里的平头哥在github上开源了riscv项目-wujian100_open。本文是使用windows下的modelsim对该项目进行仿真(原开源项目是使用linux下的开源软件iverilog进行仿真)。

由于wujian100没有使用xilinx ip(我看ram'是使用触发器数组写的),所以可能可以不编译xilinx的仿真库。我电脑上xilinx仿真库是编译好且放到了modelsim.ini文件的。

把c代码的编译结果,hex文件,通过工具转换为pat文件。然后通过tb.sv把pat数据初始化到指令RAM里面,开始执行(即开始仿真)。我使用的git代码是2019.10.22的,激励文件是inst.pat,后面代码把文件名改成test.pat了(把激励文件名改为test.pat,放到仿真目录下即可)。

c编译结果到pat的转换,另外一个文档单独描述。本文只介绍modelsim的仿真过程。

仿真遇到的问题有:1、sv语法;2、timescale定义;3、tc文件增加模块调用。

对应提交了仿真的do文件,可以在wujian100并列的目录,建立目录sim1,然后执行附件里的do文件。新版无剑代码,需要把inst.pat改名为test.pat。

2、仿真过程

使用modelsim仿真,我习惯先在vivado的项目里启动modelsim,目的是自动获得编译do文件和vsim的do文件。(好处是文件列表自动生产了)。

  • vivado项目中加入仿真文件,解决语法问题

无论modelsim直接仿真,还是vivado里启动modelsim仿真,有2个文件出现语法错误:busmnt.v和tb.v都会有语法错误。这是因为两个文件是sv语法写的。我采用的方法是可以把.v后缀改为.sv,就可以解决。其实直接使用modelsim时,也可以把compile的option从缺省的自动,修改为强制sv。

  • 编译,解决timescale问题,这是编译方法导致的

 按照vivado里启动modelsim。编译xilinx库和加入simulation文件(tb目录下的文件),vivado的settiing里设置对应工具与库(这是基本操作,看vivaod使用吧)。

选择run simulation,modelsim启动,会报告:Module 'fsmc' does not have a timeunit/timeprecision specification in effect, but other modules do.。

修改报错的文件,包括:

wujian100_open/tb/virtual_counter.v,

wujian100_open/soc/usi0.v

wujian100_open/soc/dmac.v

加入:`timescale 1ns/100ps语句。

经过上述修改后,vivado可以启动modelsim并vsim加载成功了。

  • 建立独立的仿真目录,使用modelsim直接运行仿真

完成前面的修改(修改v到sv;增加timescale定义);建立一个仿真目录,该目录和wujian100_open目录并列(我起名sim1);

获得vivado产生的do文件,将vivado仿真目录下的complie和simulation的do文件,复制到仿真目录;同时复制modelsim.ini和glbl.v到该目录。

  • 修改compile.do:

1、修改相对路径;2、只建立xil_default库就可以;3、加上选定的case仿真文件;4、去掉quit、wave的语句.修改可参见我的do文件。

  • 修改case文件。

需要在tc文件里,增加`define  TB_MODULE             wujian100_open_tb语句;增加对tb的例化:wujian100_open_tb wujian100_open_tb();

我是把case里的gpio_test.v,增加上面两句,并修改文件后缀,改为gpio_test.sv。

  • 执行compile和simulation即可。

   上传的inst.bat是timer.c产生的指令文件。已上传。

附注:解决sv和timescale问题,可以使用一个do文件里统一解决:1、v到sv,可以不修改,使用vlog参数或设置modelsim option;2、timescale和增加define,都是编译顺序,使用file list编译,应该都可以的。我不花时间去尝试了。

 

你可能感兴趣的:(RISCV)