与开发ARM等通常的处理器不同,NiosII的开发多了一个非常重要的手段:仿真。因为NiosII毕竟还是基于FPGA的软核处理器。在这里,我粗略得介绍一下nios 的仿真;更加详细的帮助信息请您参考Altera公司提供的文档。如果本文能对您有一点点帮助,我都会感到非常高兴。
对于仿真,我主要讲述一下在ModelSim6.0环境下的前仿真(niosII系统生成的时候,可以自动生成仿真环境)。后仿真需要自己建立 TestBench,比较繁琐一点,在此我就不再赘述了)。我只挑要点讲一下,关于仿真的详细指导,请您参考官方提供的help文档。
在硬件调试(Debug as hardware)前,有几个准备工作要做:
1 配置modelsim的路径。在Altera SOPC Builder中,选择File -〉 SOPC Builder Setup ,检察ModelsSim Directory是否被正确得配置。如下图:
2 生成niosII系统的时候,仿真环境被自动生成。也就是在生成sopc系统的时候,Simulation.CreateModelSim(tm) project file被打勾选中。
3 部分组件,比如JTAG UART,PIO,DRAM也有针对仿真选项,请你正确得选择!
4 如果您的系统比较复杂,需要专门生成针对simulation的代码。也就是在ModelSim only,no hardware support前打勾。否则仅仅是系统初始化的过程,就让人无法忍受,因为仿真比正常的运行要慢太多了。但如果系统简单,直接仿真在硬件上实际运行的代码也无妨(也就是无需在ModelSim only,no hardware support前打勾。)
5。适当得修改代码,使之合适于仿真。
比如,我将
i = 0;
while(i<50000)
i++;
修改为:
i = 0;
while(i<5)
i++;
否则,这个循环会花费太多的仿真时间。
6 ModelSim6.0已经被正确得安装。如够没有搞定,请参考我以前写的 EDA软件的安装与配置。
下面我们以调试在Nios无痛入门中生成系统为范例,介绍如何仿真nios处理器。
1 启动Nios II IDE。
2 选中待仿真的C/C++ Project
3 适当得修改代码,使之与仿真相合适。
需要将
i = 0;
while(i<50000)
i++;
修改为:
i = 0;
while(i<5)
i++;
4 专门生成针对simulation的代码。也就是在ModelSim only,no hardware support前打勾。其实这个project比较简单,直接仿真在硬件上实际运行的代码也无妨(也就是无需在ModelSim only,no hardware support前打勾。)
5 然后选择Project -> Build Project (Crtl + Shift + F3)
6 选择 Run -> Run As -> 3.Nios II ModelSim
系统会自动调用ModelSim 6.0 ,进入仿真环境。
7 键入s ,并回车
s是个宏命令,表示重新载入所有的HDL并编译、仿真。
如下是一些预定制的macro的含义:
# @@s-- Load all design (HDL) files.
# @@ re-vlog and re-vsim the design.
# @@
# @@c-- Re-compile memory contents.
# @@ Builds C- and assembly-language programs
# @@ (and associated simulation data-files
# @@ such as UART simulation strings) for
# @@ refreshing memory contents.
# @@ Does NOT re-generate hardware (HDL) files
# @@ ONLY WORKS WITH LEGACY SDK (Not the Nios IDE)
# @@
# @@w-- Sets-up waveforms for this design
# @@ Each SOPC-Builder component may have
# @@ signals 'marked' for display during
# @@ simulation. This command opens a wave-
# @@ window containing all such signals.
# @@
# @@l-- Sets-up list waveforms for this design
# @@ Each SOPC-Builder component may have
# @@ signals 'marked' for listing during
# @@ simulation. This command opens a list-
# @@ window containing all such signals.
# @@
# @@ jtag_uart_0_drive -- display interactive input window for jtag_uart_0
# @@
# @@h-- print this message
8 然后,选择View -> Debug Windows -> Wave,打开WAVE 窗口。
9 在Object中,选中clk,然后点击右键。在弹出来的对话框中,选择Add to Wave -> Selected Sinals,添加clk 信号到Wave 窗口中。
10 如法炮制,添加你感兴趣的信号到WAVE窗口中,比如,我添加了/test_bench/reset_n, /test_bench/out_port_from_the_led_pio 等,如下图:
11 然后键入run 1ms并回车,系统就会开始仿真1ms,你可以键入你感兴趣的仿真时间,比如2ms等等了。注意,不要键入太长的仿真时间,不然会是很很漫长的等待,因为与实际硬件想比较,仿真是很慢很慢很慢的。
12。仿真结束后,可以察看Wave窗口,可以看到led_pio的变化:0 -〉0100 -〉1000 -〉0000 -> 等等,呵呵,与硬件的变化完全一致。
OK。仿真就先介绍到这儿!
在FPGA设计、IC设计中,仿真都是极其重要的手段。仿真的内容也很多,希望你可以参考软件的随机手册,进一步熟练仿真的应用。
我通常仅仅把modelsim作为仿真工具,而察看波形,Debug HDL代码都使用Debussy,因为当设计比较大的时候,ModelSim的Wave窗口的效率、速度实在是不敢恭维。您也可以使用自己喜爱的工具来配合modelsim工作。