您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制使用ModelSim-Altera对NiosII进行仿真 正文
使用ModelSim-Altera对NiosII进行仿真

使用ModelSim-Altera对NiosII进行仿真

点击数:7505 次   录入时间:08-30 09:30:05   整理:http://www.55dianzi.com   电脑-单片机-自动控制

初学者可能会遇到这样的问题,在Run As Nios II Hardware下方,看到Run As Nios II ModelSim就觉得很奇怪,Nios II明明是嵌入式系統,怎么能用ModelSim仿真呢?

使用環境:QUARTus II 7.2 SP3 + Nios II EDS 7.2 SP3 + ModelSim-ALTEra 6.1g + DE2(Cyclone II EP2C35F627C6)

用ModelSim对数字系统作仿真,这个大家可能都很熟悉。Nios II虽然是个嵌入式系统,但毕竟基于FPGA技术,所以比ARM这类hardcore多了使用ModelSim仿真的方式。这也是Altera四大天王(Quartus II、Nios II EDS、ModelSim-Altera、DSP Builder)中的三大天王首次同台演出。

Altera在文件中,有谈到如何用ModelSim-Altera对Nios II作仿真,不过一如以往,Altera的文件要在DE2能动,还是得做不少修改。

Quartus II与SOPC Builder部分
Step 1:

文件中的那个系统并不适合DE2,用了一定不能动,所以就自己建立一个最简单的Nios II系统。为了要简单,就先使用onChip memory与LEDg与button就好,其他IP都先别用,以减少失败的变因。

nios_ii_modelsim_01

Step 2:
JTAG UART设定

使用ModelSim-Altera仿真后,对于C的printf()要怎么显示呢?这要对JTAG UART做设定。

nios_ii_modelsim_02

Step 3:


Button本来是在runtime由user去决定,若你想在testbench就模拟user的按键,可在此设定,此步骤并非必须,只是demo可藉由此方式设定PIO的初始值。

nios_ii_modelsim_03

Step 4:
在SOPC Builder设定ModelSim-Altera路径

Tools -> Options -> Category:HDL Simulator

nios_ii_modelsim_04

Step 5:

记得要将『Simulation. Create project simulator files』打勾。

nios_ii_modelsim_05

Step 6:
DE2_NIOS_ModelSim2.v / Verilog

 

1 /* 
2 (C) OOMusou 2008 http://oomusou.cnblogs.com

4 Filename    : DE2_NIOS_ModelSim2.v
5 Compiler    : Quartus II 7.2 SP3
6 Description : Demo how to simulate Nios II by ModelSim-Altera
7 Release     : 08/02/2008 1.0
8 */

10 module DE2_NIOS_ModelSim2 (
11   input CLOCK_50,
12   input [3:0] KEY,
13   output [8:0] LEDG
14 );
15 
16 wire    CPU_CLK;
17 wire    CPU_RESET;
18 
19 Reset_Delay    delay1 (
20   .iRST(KEY[0]),
21   .ICLK(CLOCK_50),
22   .oRESET(CPU_RESET)
23 );
24 
25 SDRAM_PLL PLL1 (
26   .inclk0(CLOCK_50),
27   .c1(CPU_CLK)
28 );
29 
30 nios_ii u0 (
31   .clk(CPU_CLK),
32   .reset_n(CPU_RESET),
33   .in_port_to_the_button_pio(KEY),
34   .out_port_from_the_ledg_pio(LEDG)
35 );
36 
37 endmodule


25行
 

SDRAM_PLL PLL1 (
  .inclk0(CLOCK_50),
  .c1(CPU_CLK)
);

别被SDRAM_PLL吓到了,只是借用这个PLL产生100 MHz的clock给Nios II用,你也可以自己重新产生一个100 Mhz的clock而不用SDRAM_PLL。

Quartus II与SOPC Builder部分已经完成,编译后可烧进DE2。

(

www.55dianzi.com
Nios II EDS部分
Step 1:
建立Hello World project

hello_world.c / C
 

1 #include <stdio.h>
2 #include "system.h"
3 #include "aLTEra_avalon_pio_regs.h"

5 int main() {
6   int i;
7   printf("Hello from Nios II!\n");
8  
9   for(i = 0; i < 256; i++)
10     IOWR_ALTERA_AVALON_PIO_DATA(LEDG_PIO_BASE, i);
11 
12   return 0;
13 }


LEDG_PIO_BASE這個巨集跟文件的不一樣,因為在SOPC Builder中,我們已經使用了不同的名稱。

Step 2:
修改System Library设定

由于我们使用的onChip memory只有40K,正常的Nios II是无法执行的,所以必须做些设定,让code size变小。在Altera原厂文件并没有这一步,因为它用的是SDRAM够大,根本不用考虑code size的问题。

nios_ii_modelsim_06

选择不支援C++会让code size小一点,另外要勾选ModelSim only, no hardware。

nios_ii_modelsim_07

设定让gCC编译出的code size小一点,若你对code size最佳化有兴趣,建议参考。

Step 3:
编译Hello World且Run As Nios II ModelSim。

Nios II EDS部分已经完成,接着会出现ModelSim-Altera。

(

www.55dianzi.com

ModelSim-ALTEra部分
Step 1:
编译Verilog

QUARTus II已经产生好ModelSim的macro,你只要打s就可重新编译,这是最危险的时刻,若会失败都是出在这个时候,我之前曾经使用友晶的Nios II Reference Design来做仿真,但有些module无法编译成功,目前原因还不明。若成功编译,会有以下的结果:
 

# Reading C:/altera/72/modelsim_ae/tcl/vsim/pref.tcl
# Reading D:/0Clare/DE2/DE2_NIOS_ModelSim2/nios_ii_sim/modelsim.tcl
# c:/altera/72/quartus//sopc_builder
# c:/altera/72/quartus//bin/perl
# Sopc_Builder Directory: c:/altera/72/quartus//sopc_builder
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@
# @@ setup_sim.do
# @@
# @@ Defined aliases:
# @@
# @@ s -- Load all design (HDL) files.
# @@ re-vlog/re-vcom 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

[1] [2] [3] [4] [5]  下一页


本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制