Chinaunix首页 | 论坛 | 博客
  • 博客访问: 571297
  • 博文数量: 141
  • 博客积分: 3425
  • 博客等级: 中校
  • 技术积分: 1609
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-23 15:55
文章分类

全部博文(141)

文章存档

2019年(5)

2011年(19)

2010年(36)

2009年(13)

2008年(50)

2007年(18)

分类:

2010-08-07 11:01:04

关于NiosII中程序的启动

这几天又翻出NiosII的板子,玩了几天,对NiosII程序启动的顺序加深了了解,结合Nios 相关的QQ群里部分初学者提出的问题,在下面给出我的理解。

1。上电后,FPGA首先从配置EEPROM(我板子上是EPCS1)中装载FPGA的配置数据,将FPGA配置为你设置的CPU和相关外围设备。

2。假如在NiosII IDE的syslib里将程序设置到Onchip_ram里,则这部分程序也会写在配置EEPROM里,另外,Nios CPU的Reset地址和异常地址,是Nios CPU的一部分,是固定不变的,也会写到配置EEPROM里;  配置EEPROM配置完FPGA后,假如有程序需要写到onchip_ram的话,则将该部分程序写到onchip_ram,然后将控制权交给Nios CPU,Nios CPU接到控制权后,自我复位,程序就从Reset开始执行,该处放的是一条跳转语句,跳到运行代码的开始地址.

3.假如该程序运行代码段在onchip_ram里,则该代码已经由配置eeprom写到onchip_ram里,程序就开始执行,

4.假如该程序代码段设置在sdram里,由于在nios II IDE里将程序配置到sdram里后,该程序不会写到配置eeprom里,所以假如没有其它方法在启动后将程序下载到sdram里的话,启动后实际上sdram里并没有任何执行代码。所以Nios CPU复位后跳转到sdram后,实际上sdram没有程序代码,没有任何程序可以被执行。这时即使将reset地址放到onchip_ram里,由于将程序段设置到sdram,实际上onchip_ram里并没有代码,所以CPU启动复位后跳到onchip_ram里没有任何可执行代码,所以自然没啥好运行的。

5.实际上可以将程序写到Flash芯片里,将Reset地址设置到Flash里,并且在Nios IDE里将程序运行地址放到sdram里,这时,程序启动都跳到的Reset地址是在Flash里,Flash里实际已经烧写了代码,而又因为执行空间在sdram,Nios II 编译器会自动在Flash里的执行代码前嵌入一段Copy代码,将执行代码Copy到sdram里,该段代码完成Copy后,跳转到Copy到sdram里的代码的起始地址处开始执行。

 

以上是我根据实际运行的情况自己总结或者猜测的,基本跟实际的运行情况相符,也许讲的不是完全对,请大家指正, 很晚了,迷迷糊糊的,表达不是很清楚,大家凑合着看,砖头鸡蛋一起来吧。

阅读(3213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~