关于Altera的Nios II和Qsys
0赞从SOPC到Qsys,Altera公司软件的更新频率还算高,同时,Qsys也一直有变化,每个版本都有新的IP核加入。Avalon总线的标准虽然没有太大变化,但是文档也一直在修订之中,其中也有一些变化,比如去掉了Avalon MM Interface去掉了多余的chipselect信号,而对于设备的寻址,从设备不再区分是否为存储设备,因为存储设备要求字节要连续分布,而Qsys中以前的Native addressing已经不再支持,所有地址空间按Dynamic addressing, 所有地址空间按字节连续分布。而且大家需要注意的是,在Qsys环境中,我们定义的一些参数并不是真正的总线上的信号,而是经过Qsys处理过的信号,比如,以Avalon MM Interface为例,address信号在主设备一侧按照字节计算,而在从设备一侧是按字计算的,配合byteeanable信号实现连续地址空间寻址。
下面谈一下Nios II。这么多年来,Altera虽然在推崇Nios II,大学计划做的如火如荼,但实际上呢?恐怕很多时候我们没法应用。根据笔者的观察,从Quartus II 9开始,Nios II的代码已经没什么太大变化了,Altera虽然在软件上下了一些功夫,尤其从Quartus II 10开始,软件应该是重新开发做了较大变化,Qsys更是变化很大。从Quartus II 13到Quartus 14,软件操作界面发生了一些变化,支持了最新的器件,但是实质上的变化也不大。Nios II几乎没什么变化,Altera团队似乎没有把精力花在Nios II上,不过,从事实上来看,Nios II的性能在FPGA平台上也不会有太多的提高了。很多时候Nios II可能不是很理想。
首先,如果吧Nios II作为实时性强一些的MCU,但是Nios II这种中断处理的方式就注定了它不会具备很高的实时性。而这种体系的处理器更适合直接流片作为SOC系统的核心。在FPGA器件上一定程度上限定了它的性能。
其次,Nios II的虽然具备MMU/MPU等为操作系统而准备的单元,但是在一般芯片上用Nios II跑Linux等系统,就算uCLinux似乎也是实在让Nios II为难,笔者曾经在100MHz的时钟下按照Altera wiki的那个文章运行uCLinux,那效率实在是不高。我猜想如果主频能到300MHz以上似乎才能让人满意。
不过,Nios II还有有它的应用空间。
在一些对CPU的处理性能要求不是太高的场合,但是由于计算或者控制灵活性的需要又必须有CPU的情况下,Nios II是个不错的选择,运行FreeRTOS、uC/OS-x等实时内核调度任务还是很好用的。
还有,在有些计算需要CPU来完成时候,某些单元如果采用自定义指令来实现硬件加速计算,用Nios II就凸现出一定的优势。
当然,有些时候我们要验证一些逻辑设计或者算法结果,采用HDL逻辑验证又不方便的时候,Nios II拿来临时做验证还是很不错的。
还有就是,如果你打算入门SOC体系结构,从Qsys和Nios II入手显然比直接采用HDL编码形式自己从头做起要方便的多。但是千万不要陷入误区。大家不要拘泥于Altera的API和Qsys的使用,一定要深入思考为什么是这样,也需要看一下Qsys生成的HDL的写法,还有就是生成软件工程的Altera的API的实现方式,虽然未必是最好,但是与Linux风格极像,对于理解这些设计的思路还是很有好处的,一定不要把精力花在那些华而不实的东西上面。
对于单纯的只是想简单应用而言,Altera的文档已经很详细了,任何IP只要仔细按照文档使用就可以。
对于笔者而言,我觉得Qsys存在的价值远大于Nios II。即便我们不去使用Nios II,Qsys用一下还是很方便的,我们不必像Wishbone总线那样自己编码,更不需要自己实现总线互联体系,它给我们制订了一个总线标准,也有一些IP核供用户使用,更重要的是自己定制IP,在Qsys中完成总线互联,通过Avalon总线实现了数据流的处理过程,我们不需要太多关心总线的冲裁/冲突过程,只需专注于IP核的实现和有利于更高数据带宽的数据流的控制器。
