双核CPU构建复位系统
在NIOS II构建双核处理器时,一般都需要双核之间互相控制,假如存在这样一种应用:系统中存在两个CPU一个叫CPU_master,另一个叫CPU_slave,CPU_mater需要控制CPU_slave程序运行,在上电时候必须只有CPU_mater,CPU_slave需要处于复位状态,为了实现这种机制,就必须引CPU_slave复位管脚,然后用于控制,但是默认双核系统的两个CPU的复位管脚是连接到一起。因此需要在软件里面进行设置,引出CPU_slave的复位管脚,设置方式如下图所示:
双击CPU_slave,然后出现对话框,跳转到如下界面进行勾选。
构建好系统后如图所示,可以看出有一个系统复位,并且还有一个CPU_slave的复位脚。
为了进行测试双核构建是否成功,先把两个复位脚连接到一起,然后分别对两个CPU进行下载测试代码进行测试。
CPU_master测试很成功,下载近CPU即可进行运行。
现在测试CPU_slave,但是当一个测试程序下载到CPU_slave后,无任何现象,马上进行调试,才发现出现如下错误:
提示未发现_start()函数,这是系统启动代码里面的函数,怎么会提示找不到呢?百思不得其解,后来询问俊哥才知道,SOPC中主动引出的CPU复位管脚为高电平复位,因此,必须在复位管脚前端添加一个非门。如下图所示:
加上复位后,再进行测试,一切正常。当未加非门时候为什么会出现先前那个错误呢?是由于CPU内核其实是高电平复位,所以当时CPU_slave一直处于复位状态,并不会进行地址跳转,所以当系统在启动地址时候CPU并不会跳转到_start()函数区,因此出现软件提示找不到_start()函数,可以进一步单步运行程序可以无论怎么单步运行,程序永远在第一条指令,也就是复位地址的地方,如下图:
这是一点小经验,以后用的时候注意复位脚接法就可以了,如果NIOS双核在内部都未引出复位脚,也就是直接内部接系统复位,那就不会存在这个问题。