MyFPGA Forum

 找回密码
 注册
搜索
查看: 4489|回复: 0
打印 上一主题 下一主题

【Altera SOC 体验之旅】Monitor Program在线仿真器的使用

[复制链接]
跳转到指定楼层
1#
发表于 2015-8-10 09:29:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 BOB_Sun 于 2015-8-10 09:44 编辑

[软件使用] 【Altera SOC 体验之旅】Monitor Program在线仿真器的使用

本文转自 http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=456214

大家好,拿到DE1-SOC板子已经快两个月了,之前由于一些原因,虽然一直在熟悉板子官方手册里面的历程,但一直没有好好写点东西总结一下,从现在开始会陆陆续续发一些帖子,希望和大家多多交流。

       一、概要:
今天详细介绍Altera Monitor Program这个工具   
,它是Altera大学计划的一部分,可从官网免费下载,界面如下图1所示。明眼人一看就知道,这其实就是一个simulator,可以进行编译、trace、修改功能。这些功能也许NIOSEDS和DS-5也有而且更强大,但是我想说,从学习ARM和NIOS体系结构的角度,这个工具无疑是最简单,最好用的工具,你可以在上面在线仿真你的每一句汇编指令或者是C指令,看具体Memory或Register的使用情况,甚至实时修改它。闲话不多说,让我们开始学习使用这个软件。


图1

       二、使用思路
              先用Qsys建立硬件系统,然后用文本编辑器编写软件代码,最后下载和调试。

图1


三、
第一步让我们建立一个qsys硬件系统,


图2
首先添加上图所示ip单元:clk, nios2(含jtag_debug),jtag_uart, memory, pio(2个)
  

图3



接下来进行参数定义和连线:
1.设置clk: 50MHZ 然后将所有ip的clk和reset端都连接至clk模块的clk端口和clk_reset端口。
2.nios2:
(1)将data_master端口接至jtag_uart的avalon_jtag_slave端、memory的s1端、leds的s1端和switches的s1端。
(2)将instruction_master端口接至memory端的s1端(因为memory需要得到pc的指令地址作取指令用)。
(3)将jtag_debug_module_reset端口截至nios2的reset_n端,memory的reset1端,led的reset端和switches的reset端。
3. jtag_uart:
将jtag_uart的irq端接至nios2的d_irq端。以达到PC可以对nios2产生中断的要求。

4. nios2参数设置,设为e型,Reset_Vector为memory;Exception_Vector为memory, Advanced Features下RAM memory protection去除勾选(否则导致Monitor Program下载时出错)。
5. leds设为10位,output。Switches设为10位, input。并将leds和switches的externel_connection行的Export列双击命名,随即定义外部引脚。
6.固定memory基地址为0x0000,在base列小锁前双击。
7. 在JTAG UART的IRQ栏设置其中断号为5
8. 点选System Assign baseadresses,进行其余地址的自动分配。
至此,qsys系统就全部定义完毕了。
地下Message栏显示 0 Errors,0 Warning.

图4
最后,总结一下,现有模块的地址分配:
Leds:   0x2010   
switches:0x2000



点选  GENERATE HDL

四、在quartus外围进行配置和全编译。
1.在工程目录下的..\synthesis文件夹下找到.qip(quartus ip)文件,这里我命名的是qsys.qip将其添加到工程文件中。


图 5


这个文件是刚刚创建的qsys系统,是最重要的文件,缺少它在编译综合时就会提示缺少文件。

2.创建top顶层文件:
   首先创建最基本的顶层文件,把CLOCK, LED, SW信号定义好,
   然后,这里有一个例化qsys系统最快速的方法,在..\synthesis文件夹下找到xxx_inst.v这个文件(这里是qsys_inst.v),打开,发现generate hdl的时候人性化地已经生成了例化的格式文件。将其copy到顶层文件中,并稍作改动就可以快速完成端口定义。
       最后效果如下图所示


图6
最后进行一下pinassignment后,进行全编译了。

五、软件代码的编写:

图7
这是一段汇编代码,首先将switches和leds的地址赋值给变量。然后将switches赋值给r3,leds赋值给r3, 并完成将(r2)地址的数据读入至r4寄存器,将r4寄存器的数据写入至(r3)这个地址。不断循环。



        图8
这是一段与图7功能一样的c代码,具体用法显然,就不解释了。

六、下载与综合调试
(1)打开Altera Monitor Program图标
   ,随即打开软件。选Fileànew project, 指定路径和工程名。如图9。(qsys系统基于HPS时Architectuer也可选ARM)


图9


(2)点选Next, Select a System选择Custom System。其余都是默认示例,可以学习里面的示例代码。不过对于非友晶公司出品的DE系列板子,就不适用了,故这里选择的是定制系统。然后在下面两个空格中选中工程文件中的.sopcinfo文件(qsys中generate hdl后生成)和.sof文件(全编译后生成)。再点选Next。



图10  




(3)选择软件语言种类。这里先选Assembly Program。

图11
(4)add选中汇编语言代码start.s。

图12
下面框中的_start是默认的,表示汇编代码中程序开头的地方。
(5)再点Next。如图下图所示,此时连上开发板,上电。

图13
(6)Next,出现下图所示,这里是存储器的设置,这个要配合qsys中的来,当初qsys中添加memory的时候都是使用的是默认大小4096x32bits。故这里可以看到memory地址范围在0x00000000-0x00000fff,正好4096个,对应起来了。点选Next。

图14

插一句,LinkerSection Presets还可以设置为Exception异常,就会如下图所示,这种情况下下可以允许系统有中断。不过这里我们先选Basic类型的做测试。

图15
(7)点选Next,会自动提示是否下载相关硬件进入系统。点选“是”。

图16

(8)稍作等待,提示下载成功。这里的system其实就是.sof硬件。


(9)点选确定后问,是否暂停系统,如选是,会使程序下载后马上暂停,等待仿真器单步、全速执行等调试指令。反之,程序下载后则全速运行。这里点选是。
(10)稍作等待后,可见右下角Sucessfully halted nios2。说明系统已挂起。注意,这里软件程序还没下载呢,选Action->Compile & load,对软件程序先编译、后下载。



                                                                                                                                                     图17

(11)最后可以看到仿真器成功了。点选工具栏中的单步、全速运行按钮查看效果。
右边有详细的寄存器的查看栏。点选全速运行后,即可看到程序正常运作了。Switch一一对应控制小灯。

                                      

七、总结
这一次演示了利用Altera Monitor Program仿真器进行软件的流程。我发现,仿真器工具对于学习NIOS和HPS的体系结构非常有用。
如果进一步需要学习NIOS和ARM详细的指令集用法,请参考附件
Instruction toAltera NiosII soft Prosessor .pdf
Introduction toARM Processor Using Altera Toolchain.pdf
Instruction to Altera NiosII soft Prosessor .pdf (578.38 KB, 下载次数: 1)
Introduction to ARM Processor Using Altera Toolchain.pdf (291.32 KB, 下载次数: 1)
谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-19 20:54 , Processed in 0.044695 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表