工程学院自动化及测控系嵌入式技术概述——NIOSⅡ处理器体系结构介绍刘兰军工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/142NIOSⅡ处理器的特点1)NIOSⅡ处理器采用流水线技术、单指令流的32位通用RISC处理器2)提供全32位的指令集、数据总线和地址总线3)提供32个通用寄存器4)提供32个外部中断源5)提供结果为32位的单指令32X32乘除法6)提供专用指令计算结果为64位和128位的乘法7)可以定制单精度浮点计算指令8)单指令桶形移位寄存器9)对各种片内外设的访问及与片外外设和存储器的接口10)硬件辅助的调试模块,在IDE环境下,可完成开始、停止、断点、单步执行、指令跟踪等基本调试和高级调试功能11)基于GNUC/C++工具集和EclipseIDE的软件开发环境12)ALTERA公司的SignalTapⅡ逻辑分析仪,实现对指令、数据、FPGA设计中的逻辑信号进行实时分析13)所有NISOⅡ处理器均兼容的指令系统14)高达218DMIPS的性能工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/143NIOSⅡ处理器的体系结构NIOSⅡ处理器是一种软核处理器,可配置性是其最大特点。NiosII32位软核处理器NiosII/f(快速)NiosII/e(经济)NiosII/s(标准)性能最高,占用逻辑资源最多占用逻辑资源最少,性能最低平衡了逻辑资源占用和性能工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/144NIOSⅡ处理器的体系结构地址发生器&程序控制器异常控制器中断控制器通用寄存器r0..r31控制寄存器ctl0..ctl5指令Cache数据Cache算术逻辑单元(ALU)用户定制指令逻辑JTAG调试模块NiosII处理器核紧耦合指令存储器紧耦合指令存储器紧耦合数据存储器紧耦合数据存储器指令总线数据总线clockreset软件调试JTAG接口中断源[0..31]用户IO信号cpu_resetrequestcpu_resettaken提高系统性能:NIOSⅡ采用哈佛结构:指令总线、数据总线分开方便用户调试,集成了JTAG调试模块提高系统性能:支持用户定制指令,方便指令集扩展支持用户定制指令,方便指令扩展,提升系统性能支持用户定制指令,方便指令扩展,提升系统性能提高系统性能:集成了指令Cache、数据Cache、紧耦合存储器(TCM)接口提高系统性能:集成指令Cache、数据Cache、紧耦合存储器(TCM)接口异常控制器处理内核异常事件中断控制器处理外部硬件中断事件寄存器文件包括32个通用寄存器和6个控制寄存器,允许添加浮点寄存器工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/145NIOSⅡ处理器的体系结构地址发生器&程序控制器异常控制器中断控制器通用寄存器r0..r31控制寄存器ctl0..ctl5指令Cache数据Cache算术逻辑单元(ALU)用户定制指令逻辑JTAG调试模块NiosII处理器核紧耦合指令存储器紧耦合指令存储器紧耦合数据存储器紧耦合数据存储器指令总线数据总线clockreset软件调试JTAG接口中断源[0..31]用户IO信号cpu_resetrequestcpu_resettakenNIOSⅡ处理器核采用硬件实现,实现指令集并支持各功能模块的工作,处理器核不包含外设和接口逻辑;NIOSⅡ体系结构定义了指令集,但并不是特定的硬件实现,体系结构中的各功能模块可由硬件实现、软件实现、也可省去一个NIOSⅡ实现是根据设计要求得到的一个特定的NIOSⅡ处理器核,实现方案体现了NIOSⅡ软核的可配置性:或多或少:如增加或减小缓存的大小要或不要:如选择不采用JTAG调试模块硬件实现或软件模拟:如硬件乘法器的取舍工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/146NIOSⅡ处理器的体系结构地址发生器&程序控制器异常控制器中断控制器通用寄存器r0..r31控制寄存器ctl0..ctl5指令Cache数据Cache算术逻辑单元(ALU)用户定制指令逻辑JTAG调试模块NiosII处理器核紧耦合指令存储器紧耦合指令存储器紧耦合数据存储器紧耦合数据存储器指令总线数据总线clockreset软件调试JTAG接口中断源[0..31]用户IO信号cpu_resetrequestcpu_resettaken工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/147NIOSⅡ处理器的体系结构NIOSⅡ处理器的算术逻辑单元(ALU)对通用寄存器的数据进行操作,ALU从寄存器中取出操作数,运算结果放回寄存器中。ALU支持的运算种类描述算术运算ALU支持有符号和无符号数的加、减、乘、除关系运算支持有符号和无符号数的等于、不等于、大于等于和小于(==,!=,=,)关系运算逻辑运算支持AND、OR、NOR和XOR逻辑运算移位运算支持移位和循环移位运算,每条指令中可以将数据移位和循环移为0~31位,支持算术右移、左移和逻辑右移、左移,还支持循环左、右移位工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/148NIOSⅡ处理器的体系结构未实现指令:NIOSⅡ处理器核未提供硬件乘除法器的实现。当处理器遇到未实现指令时,处理器会产生一个异常,异常管理器会调用相应程序用软件模拟未实现指令的操作。NIOSⅡ处理器对未实现指令的处理对程序员是透明的。用户定制指令:NIOSⅡ处理器的ALU直接与用户定制指令逻辑相连,对用户定制指令的访问等同于系统指令集的指令。浮点指令:NIOSⅡ支持符合IEEESTD754-1985规范的单精度浮点指令,浮点指令以用户定制指令的方式实现。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/149NIOSⅡ处理器的体系结构地址发生器&程序控制器异常控制器中断控制器通用寄存器r0..r31控制寄存器ctl0..ctl5指令Cache数据Cache算术逻辑单元(ALU)用户定制指令逻辑JTAG调试模块NiosII处理器核紧耦合指令存储器紧耦合指令存储器紧耦合数据存储器紧耦合数据存储器指令总线数据总线clockreset软件调试JTAG接口中断源[0..31]用户IO信号cpu_resetrequestcpu_resettaken工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/1410NIOSⅡ处理器的体系结构NIOSⅡ处理器定义了32个32位通用寄存器工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/1411通用寄存器组寄存器助记符功能寄存器助记符功能r0zero清零r16子程序要保存的寄存器r1at汇编的临时变量寄存器r17子程序要保存的寄存器r2函数返回值(低32位)r18子程序要保存的寄存器r3函数返回值(高32位)r19子程序要保存的寄存器r4传递给函数的参数r20子程序要保存的寄存器r5传递给函数的参数r21子程序要保存的寄存器r6传递给函数的参数r22子程序要保存的寄存器r7传递给函数的参数r23子程序要保存的寄存器r8调用者要保存的寄存器r24et为异常处理保留r9调用者要保存的寄存器r25bt为程序断点保留r10调用者要保存的寄存器r26gp全局指针r11调用者要保存的寄存器r27sp堆栈指针r12调用者要保存的寄存器r28fp帧指针r13调用者要保存的寄存器r29ea异常返回地址r14调用者要保存的寄存器r30ba断点返回地址r15调用者要保存的寄存器r31ra函数返回地址r4~r7:用来传递4个非浮点参数给一个子程序。r4传递第一个参数,r5传递第二个参数,以此类推。若四个寄存器不够传递参数,编译器将通过堆栈来传递。r8~r15:习惯上,子程序可以使用其中的值而不用保存它们。但调用者必须清楚:这些寄存器中的值可能被一次子程序调用改变,所以调用者有责任保存它们。r0或zero:总是存放0值,写无效;NiosII无清零指令,常用r0对寄存器清零。r1或at:在汇编程序中常用作临时变量寄存器。r2,r3:用于存放子程序的返回值。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/1412通用寄存器组寄存器助记符功能寄存器助记符功能r0zero清零r16子程序要保存的寄存器r1at汇编中的临时变量r17子程序要保存的寄存器r2函数返回值(低32位)r18子程序要保存的寄存器r3函数返回值(高32位)r19子程序要保存的寄存器r4传递给函数的参数r20子程序要保存的寄存器r5传递给函数的参数r21子程序要保存的寄存器r6传递给函数的参数r22子程序要保存的寄存器r7传递给函数的参数r23子程序要保存的寄存器r8调用者要保存的寄存器r24et异常处理临时寄存器r9调用者要保存的寄存器r25bt程序断点临时寄存器r10调用者要保存的寄存器r26gp全局指针r11调用者要保存的寄存器r27sp堆栈指针r12调用者要保存的寄存器r28fp帧指针r13调用者要保存的寄存器r29ea异常返回地址r14调用者要保存的寄存器r30ba断点返回地址r15调用者要保存的寄存器r31ra程序调用返回地址r16~r23:习惯上,子程序必须保证这些寄存器中的值在调用前后保持不变,即要么在子程序执行时不使用它们,要么使用前把它们保存在堆栈中并在退出时恢复。r24或et:在异常处理时使用。使用时,可以不恢复原来的值。该寄存器很少用作其它用途。r25或bt:在程序断点处理时使用。使用时,可以不恢复原来的值。该寄存器很少作其它用途。r26或gp:全局指针。指向静态数据区中一个运行时临时决定的地址。存取位于gp值上下32KB范围内的数据时,只需要一条以gp作为基指针的指令即可完成。r27或sp:堆栈指针。NiosII没有专门的出栈(POP)入栈(PUSH)指令,在子程序入口处,sp指向栈底部,以sp为基址,用寄存器基址+偏移地址的方式来访问栈中的数据。r28或fp:帧指针,习惯上用于跟踪栈的变化和维护运行环境。r29或ea:保存异常处理时的程序返回地址。r30或ba:保存程序断点处理的程序返回地址。r31或ra:保存子程序调用的返回地址。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/1413NIOSⅡ处理器的体系结构地址发生器&程序控制器异常控制器中断控制器通用寄存器r0..r31控制寄存器ctl0..ctl5指令Cache数据Cache算术逻辑单元(ALU)用户定制指令逻辑JTAG调试模块NiosII处理器核紧耦合指令存储器紧耦合指令存储器紧耦合数据存储器紧耦合数据存储器指令总线数据总线clockreset软件调试JTAG接口中断源[0..31]用户IO信号cpu_resetrequestcpu_resettaken工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/1414NIOSⅡ处理器的体系结构NIOSⅡ处理器定义了6个32位控制寄存器控制寄存器的访问不同于通用寄存器:控制寄存器的读/写访问只能在超级用户模式(SupervisorMode)采用专用的控制寄存器读/写指令(rdctl和wrctl)实现。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2020/3/1415控制寄存器组寄存器名字bit位意义:31…210ct10status保留UPIEct11estatus保留EUEPIEct12bstatus保留BUBPIEct13ienable中断允许位ct14ipending中断发生标志位ct15cpuid唯一的处理器标识号status—状态寄存器:只有第1位和第0位有意义。第1位U—反映处理器当前状态1:表示处于用户