Nios/NiosII 处理器简介
Nios以及NiosII处理器是Altera公司为其FPGA产品配套开发的软核CPU。在逻辑功能上,它们是32位的精简指令集CPU;在实现方式上,它们是在FPGA上通过编程的方式实现的,这也是与传统的CPU的一个根本的差别。
2000年,ALtera公司推出第一代软核CPU--Nios,实现的载体为APEX系列FPGA,后期推出新型FPGA也都持它的实现。Nios包两个型号:16位Nios和32位Nios。这两个型的指令集是完全相同的,差别在于它们的总线宽度.。16位Nios的总线宽度为16bit,32位Nios的总线宽度为32bit。不过,按传统的CPU分类标准,它们都属于32位的CPU,因为们的处理字长都是32bit的,这与其总线宽度无关。16bit的Nios有着更小的体积,而32bit的Nios可以实现更高的性能,所以这两个型号分别针对着不同的应用。Nios CPU 可以实现50DMIPs的性能,最小体积为1000个LEs,和同一时期的其它嵌入式处理器相比,已属于高性能之列。
NiosII处理器是Altera公司在2004年推出的第二代软核CPU。同前一代软核CPU相比,NiosII有着更高的性能,更小的体积。其最大处理力是第一代软核的3倍,而小的体积只有550LEs,只有第一代软核的1/2大。NiosII有三个型号,分别为e型、s型、f型。它们分别是针对不同应用要求优化的。E型的体积最小,只有550个LEs;f型的性能最高,最大可以达到200DMIPs以上;s型又叫标准型,其体积与性能介于e型与f型之间。下表是一个实例对照表,通过它可以大致看出这三个型号的软核,在性能与体积上处于一个什么水平。不过应当注意,其中的测试结果是有条件的,不是绝对的。
NiosII的三个型号都是32位机,其总线宽度为32bit,总线结构为哈弗结构。它们指令集完全相同,所以,同一个软件可以不做任何的修改就可以三个型号间交换。它们的实现平台可以是Altera 的任何一款FPGA。
由于Nios和NiosII是在FPGA上实现的,所以先天的付予了它们很多独有的新特性,使之成为可裁剪、可调整、可补充的系统,更使其成为软硬件紧密融合的系统。
Nios/NiosII有着一个开放式的ALU,用户可以根据自己的需要对其进行补充,从而实现用户自己定义的指令。用户自定义指令在处理方式上同原有指令集中的指令是一样的,ALU面前它们一律平等,所以,在处理速度方面等同于原有指令;而用户自定义指令在专项处理方面要优于原有指令,因为它是有针对性的设计的,所以,应用用户自定义指令可以在不改变CPU主频的情况下大大提高系统处理能力。这个特性比较适合那些要求高处理速度,又不便于提高系统主频的场合。
Nios和NiosII的总线采用了哈佛结构,在很大程度上提高了系统的处理速度。由于系统的总线控制器是在FPGA中实现的,可以进行灵活的配置,在某些外设需要具有冯诺依曼特性时又可以把两套总线合二为一,从而在局部实现冯诺依曼结构,这样就使得系统总线兼有哈佛结的高效率与冯诺依曼结构的灵活性。Nios/NiosII系统总线自动对不同时钟域进行协调,可以使挂在总线上的组件工作在不同的主频下,使系统更为灵活。最新版的NiosII软核又增加了紧凑总线接口,可以让挂在其上的存贮设备工作在cache的速度。
NiosII软核从硬件上支持系统调试、程序下载、指令追踪、数据追踪,而不需要任何的boot程序。与NiosII配套的有四种Jtag调试模块,它们的调试功能有强有弱,占用资源有多有少,由用户根据需求自行选择。由于整个系统具有可重构性,所以,选择较强功能的调试模块不会造成系统资源的浪费,因为可以在调试工作完成以后对系统进行重构,去掉调试模块,释放其所占的资源。在其它的SOC系统中没办法把调试模块的功能做得太强,因为调试模块的选择是要折中考虑的,性能和资源占用是矛盾的,是鱼和熊掌的关系。
Nios/NiosII系统中的外设也具有可配置性,用户可以根据需求自主的选择要哪些外设,不要哪些外设,还可以自己建立外设加到系统中。相信很多人都遇到过这样的问题:对各家的芯片挑来选去也很难决定用哪个,因为没有一个完全符合要求,不是缺这个,就是少那个。也没办法,因为没有一个芯片是专门给你定做的。对于Nios/NiosII系统,完全没这个苦恼,因为系统当中有什么、没有什么是自己说了算,当然,如果不会设计相关的外设,又找不到现成的IP核来用则是另外一回事。
以上对Nios以及NiosII做了个简要的介绍,要想详细的了解还要自己动手实践。
Stoneway Qi
[此贴子已经被Stoneway于2006-2-21 13:35:55编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |