要利用ORPSoC进行开发,最直接的方式当然是直接用FPGA开发板进行调试,当往往很多时候,直接在FPGA板子上运行的时候会出现问题。这时候,对ORPSoC进行仿真就是非常必要的了,通过仿真,可以尽快的锁定问题,解决问题。本小节就以ORPSoC针对ML501开发板为例,解决这个问题。
在opencores提供的ubuntu镜像里面,对于通用的版本(ORPSoC除了通用版本外,针对不同的开发板,有些模块有所差异),ORPSoC的RTL仿真器使用的是icarus,镜像里面已经安装好了,不需要任何工作,就可以对通用版本的ORPSoC进行仿真。请参考orpsoc.pdf的4.4章节。在~/soc-design/orpsocv2/sim/run目录下执行make rtl-tests VPI=1 即可建立VPI和RSP server,给or32-linux-gdb的端口号是50002,
运行or32-linux-gdb,target remote:50002 即可和ORPSoC通信,向ORPSoC中的RAM中load 程序(eg.vmlinux)。
整个仿真系统由or32-linux-gdb,RSP server,VPI,ORPSoC的jtag tap以及SoC中的其它模块组成。
关于具体细节,我们在介绍advanced debug system时,已经介绍过了,这里不再赘述。
如有疑问,请参考,其中的VPI模式。
http://blog.csdn.net/rill_zhen/article/details/14167515
1>opencores提供的ubuntu镜像,里面预装了openRISC的gun工具链,以及ORPSoCv2的源文件和由makefile组成的工程结构。
http://opencores.org/or1k/Ubuntu_VirtualBox-image_updates_and_information
2>linux版本的modelsim
文件太大,无法上传,我用的是modelsim10.1c。
3>linux版本的ISE
我用的是14.1。
1》modelsim的安装
a,在unbuntu下安装modelsim(命令前面不要加sudo,假设安装目标目录是:/home/openrisc/modelsim)
./install.linux
2》modelsim的破解
a,修改license.src文件
修改license.src文件中的前两行:
SERVER openrisc-VirtualBox 080072d8c85c 1717
VENDOR mgcld /home/zhanglei/modelsim-10.1c/modeltech/linux
其中openrisc-VirtualBox是hostname,可以通过hostname命令查看,
080072d8c85c 是虚拟网卡的MAC,通过虚拟机的设置->网络菜单就可以看到。
/home/openrisc/modelsim/是安装目录,在安装modelsim
b,生成:mentor.dat
在wendows下双击run_me.bat,生成mentor.dat,并将mentor.dat复制到安装目录下。
需要注意的是,如果你直接用的是我安装好的虚拟机,你需要修改mentor.dat中的网卡号为你自己的网卡号,并重启虚拟器。
c,修改环境变量
修改/home/openrisc/.bashrc文件,在文件末尾增加如下内容:
export LM_LICENSE_FILE="/home/openrisc/modelsim/mentor.dat"
export PATH=$PATH:/home/openrisc/modelsim/modeltech/linux
alias licm="lmgrd -c /home/openrisc/modelsim/mentor.dat"
其中"/home/openrisc/modelsim/mentor.dat"是mentor.dat的存放目录,
/home/openrisc/modelsim/modeltech/linux是modelsim运行需要的库文件目录,安装完modelsim会自动生成。
lmgrd -c /home/openrisc/modelsim/mentor.dat是使能license。
d,复制并运行patch
将crack目录下的patch_2010和sfk两个文件copy到/home/openrisc/modelsim/modeltech/linux/mgls/lib
进入目录:cd /home/openrisc/modelsim/modeltech/linux/mgls/lib
执行:./sfk rep -yes -pat -bin /5589E557565381ECD00000008B5508/31C0C357565381ECD00000008B5508/ -dir .
执行上述命令后会出现如下信息:
error: failed to read+write: sfk - skipping
4 files checked, 2 changed.
1 errors occurred.
不影响使用。
e,使能环境变量
source /home/openrisc/.bashrc
f,使能license
licm&
如果程序没有退出的话,说明license有效,否则根据错误提示把对应的问题解决掉。
g,测试
执行vsim命令,就会出现我们熟悉的modelsim的窗口,modelsim就安装成功了。如下所示:
1》安装
在linux下直接双击setup文件,按照窗口提示,完成安装即可。在最后需要指定license时,选择xilinx_ise.lic文件即可。
2》修改环境变量
修改/home/openrisc/.bashrc文件,在文件末尾增加如下内容:
source /opt/Xilinx/I14.1/ISE_DS/settings32.sh
保存退出之后,执行source /home.openrisc/.bashrc 使新加的内容起效。
3》测试
执行/opt/Xilinx/14.1/ISE_DS/ISE/bin/lin/ise 就会出现我们熟悉的ISE的窗口,如下所示:
1>修改soc-design/orpsocv2/boards/xilinx/ml501/bench/verilog/include/eth_stim.v文件,将123行和124行末尾的分号(‘;’)去掉。
2>修改~/soc-design/orpsocv2/bench/verilog/vpi/c/Makefile文件,在文件中增加对MGC_PATH的定义:modelsim的安装目录
在安装完modelsim和ISE之后,对ORPSoC稍作修改,ORPSoC的RTL仿真环境就搭好了,下面我们就可测试一下吧。
在~/soc-design/orpsocv2/boards/xilinx/ml501/sim/run 目录下执行 make rtl-tests VPI=1
如果有什么问题,可以先执行make distclean将之前生成的文件去掉,重新执行make rtl-test VPI=1
如果想看波形,执行 make rtl-test VPI=1 VCD=1
通过修改~/soc-design/orpsocv2/boards/xilinx/ml501/sw/board/include/board.h中的#define BOOTROM_SPI_FLASH来从spi flash启动。
通过修改~/soc-design/orpsocv2/boards/xilinx/ml501/rtl/verilog/include/or1200-defines.h末尾的启动地址来设置第一条指令的地址。
此外,还有一点需要注意,orpsoc的工程里,bootrom.S使用的board.h默认是ordb2a-ep4ce22的,需要在~/soc-design/orpsocv2/sw/目录下执行
ln ~/soc-design/orpsocv2/boards/xilinx/ml501/sw/board/include/board.h board.h重新设置连接文件,执行ml501的board.h
执行make rtl-tests VPI=1结果如下:
自此,我们把ORPSoC的仿真环境搭起来了。需要说明的是,ML501的ORPSoC的仿真器用的是modelsim,如果你想用其它的仿真器,则需要自改~/soc-design/orpsocv2/sim/bin/Makefile中的相关参数。
Enjoy!
http://opencores.org/or1k/ORPSoC_RTL_simulation_debugging
下面是我仿真的波形: