NiosII CPU的结构与编程模型

NiosII CPU的结构与编程模型
NiosII CPU属于典型的RISC CPU,其特点是:结构简洁、指令集简练、指令等长、具有大量的通用寄存器。下图为NiosII的结构框图。


NiosII CPU由若干基本模块和一系列可选模块构成。基本模块包括:ALU、程序控制器、地址发生器、中断控制器、寄存器组等;可选模块有:Jtag调试器、用户指令逻辑、指令Cache、数据Cache等。
NiosII 共有39个工作寄存器,包括32个通用寄存器,5个控制器存器,1个CPUID寄存器、1个PC指针寄存器,每个寄存器都是32位的寄存器,都可以做32位的操作。


NiosII的32个通用寄存器,除R0外都可做为累加器进行各种算术、逻辑运算。R0 为0值寄存器,对其进行读操作返回值是0,写操作对其没有影响,这一寄存器在指令集中有特殊的应用。R24是中断处理程序专用寄存器,它是给中断处理程序专用的,虽然在用户程序中许访问,但不要用来保存数据,因为其中数据有可能被中断处理程序覆盖掉。同样,R25是调试代理专用寄存器,也不要在用户程序中使用。R29是PC指针的中断堆栈寄存器,当有中断发生时,这一寄存器用来保留一个返回地址,以便从中断处理程序返回到被中断的程序。R30是PC指针的断点堆栈寄存器,用于系统调试。当程序运行过程中遇到断点,这一寄存器中保留一个返回地址,以便从调试代理程序返回。R31是PC指针的调用堆栈,用于子程序调用。执行子程序调用指令时,这一寄存器中保留返回地址,以便从子程序返回。R26、R27、R28在C开发系统中付予了一些特殊的应用,其中R27被作堆栈指针。


NiosII 有5个控制寄存器和一个CPUID寄存器。Ctl0是程序状态字,目前只有BIT0、BIT1两位是有效的,高30位保留。BIT0是全局中断控制位,用于中断的全局管理,1为允许,0为禁止。BIT1是工作模式控制位。当这一位为1时,系统工作于用户模式,当其为0时,系统工作于管理模式。Ctl1又叫estatus寄存器,是Ctl0的一个堆栈寄存器。当系统发生中断时,其中保留一个Ctl0的副本,以便从中断处理程序返回时恢复现场。Ctl2也叫bstatus,是Ctl0的另一堆栈寄存器。当有断点发生时,该寄存器中保留Ctl0的副本,用于从调方式代理返回时恢复现场。Ctl3是中断控制寄存器,用于控制外部中断申请的输入。每一位对应一个外部中断源,1表示允许,0表示禁止,共计32位。Ctl4是中断请求寄存器,代表外部中断源和中断请求,1为有中断请求,0为没有中断请求,共计32位。Ctl5也称为CPUID,是CPU的一个标识,在多CPU系统作为CPU的代号。
NiosII CPU 有三种工作模式:
1、 Supervisor Mode
2、 User Mode
3、 Debug Mode

 
Supervisor Mode 也叫特权模式。在这种模式下,所有的系统资源都是可以访问的,不受任何的限制。一般来说,这种工作模式是给操作系统内核准备的。在有操作系统的应用中,往往是操作系的内核工作在特权模式,而应用程序工作在用户模式。对于比较简单的应用来说,也可以直接让应用程序工作在特权模式。在特权模式下,通用寄器组中的R25和R30是允许访问的,然而在实际应用中不要使用这两个寄存器,因为这两个寄存器是系统留给Debug模式专用的,其中的数据有可能会被调试代理程序覆盖掉。同样,Ctl2也是不能使用的。
User Mode 是用户模式。这种模式相当于特权模式的一个子集,在这种模式下某些资源的访问上是受限的,如果试图访问这些资源,将会产生一个中断。在用户模式下,CPU的控制寄存器是不允许访问的,另外,通用寄存器组中的R24、R25、R29、R30 虽然是可以访问,但其中的数据有可能被特权模式或调试模式所修改,因此是不能用的。
Debug Mode 是给调试器准备的工作模式,一般的系统程序或应用程序无法在这一模式下运行。系统在遇到断点指令或接到来自Jtag Debug Module的打断信号时会进入这一工作模式。在这种工作模式下,所有的系统资源都是可以访问的。
NiosII的总线结构为哈佛结构,但指令空间与数据空间统一编址,总计4GB的地址空间, 总线宽度为32bit,信号及时序遵循Avalon总线规范。
NiosII支持32个外部中断请求。这32个外部中断请求分为32个优先级,请求号越小,优先级越高。外部中断请求由两个专用寄存器管理,Ctl3为控寄存器,Ctl4为请求寄存器。NiosII的所有中断都从同一地址进入中断处理程序。在中断处理程序中,用软件的方式区分中断源,并用软件的方式维护一个中断向量表,所以,在这一点上NiosII的处理效率不如复杂指令集CPU,对于实时性要求特高的处理,应充份发挥硬件逻辑的优势。
在NiosII的架构中,有一个叫做Custom Instruction Logic的可选部件,这一部件是用来对NiosII的ALU进行功能补充的。NiosII向用户提供了一个开放式的ALU,用户可以根据具体的需求,对ALU进行补充,从而实现自定义的指令。利用这一特性,可以大大提高整个系的处理效率,这也是使用NiosII的精华所在。
以上对NiosII的基本结构做了一个简要的介绍,部分结构会在专项介绍中做详细的说明。

你可能感兴趣的:(汇编)