分类:
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里的代码的起始地址处开始执行。
以上是我根据实际运行的情况自己总结或者猜测的,基本跟实际的运行情况相符,也许讲的不是完全对,请大家指正, 很晚了,迷迷糊糊的,表达不是很清楚,大家凑合着看,砖头鸡蛋一起来吧。