基于RISC技术的8位微控制器设计
表1 PSW各位功能 PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 RAM段选 RAM段选 进位CIN 保留 INT1中断允许 计数器溢出中断 INT0中断允许 启/停计数器
3 流水线技术
3.1 三级流水线结构
微控制器采用取指(IF)、执行(EX)、回写(WB)三级流水线结构,如图2。各阶段的主要功能为:
取指级——从程序存储器中取出一条指令,同时进行指令译码,准备寄存器、存储器的读地址,读/写控制信号;
执行级——数据输入ALU单元运算,同时准备寄存器或存储器的写地址;
回写级——将ALU输出的运算结果写入寄存器或存储器中。
3.2 流水线竞争及解决
控制竞争,由程序PC 指针值的改变引起。当执行跳转指令时,PC指针值要到执行级才能改变,这将会使下一拍的取指操作出错。这时必须由硬件插入一条空操作NOP指令,等待PC指针的值改变后再取下一条指令。
数据竞争,由指令间数据相关引起。存储器访问存在先写后读相关(read after write),前一条指令的写操作要到回写级才能完成。若紧接的下一条指令需要读取同一地址的内容时,必须使用旁路(bypassing)技术,从ALU的输出结果直接反馈到ALU的输入端供下一条指令的执行级使用。
4 指令集和指令格式
微控制器指令长度为16位定长,操作码采用可变长结构。操作码长有4位(立即数运算)、5位(跳转,寄存器-存储器运算)或8位(寄存器-寄存器运算)。支持的指令覆盖了最基本的MOV、ADD、SUB、AND、OR、 XOR指令,以及移位、各种跳转指令等。指令集中可不含清零、取反、自增和自减指令,因这些指令可由AND、 XOR、ADD、SUB指令代替。在51系列单片机中, 累加器的清零、取反、自增和自减运算(单周期)比累加器-立即数的逻辑运算(双周期)快;而在实现了单周期单指令的RISC微控制器中,可用相应的逻辑运算指令实现寄存器的清零、取反、自增和自减操作,对性能没有影响。
图3
5 逻辑综合、仿真和硬件实现
所有模块均在Altera 公司的Quartus II 2.1上进行逻辑综合、仿真测试通过,并在支持存储器的 FLEX10KE系列FPGA器件上验证实现。逻辑综合结果为969个LE数(Logic Elements)。以下是一简单程序,仿真波形如图3。
000: ADD R1,#01H ;指令为1101H,R1对应Pb输出
001: MOV R2,Pa ;指令为FE62H,R2对于Pc输出
002: JMP 000H ;指令为C000H,循环跳转
从仿真波形上可以清楚看到程序执行时PC指针的改变、Pb口自增及Pa口的数据传到Pc口的过程,也可大致看出程序的取指、执行、回写三级流水的执行过程。同时还可看到在执行跳转指令JMP后自动插入一条空操作NOP指令(FFFFH)。
注:源代码见网站fanwen.oyaya.net收集整理。
结 语
从逻辑综合与仿真测试的结果看,该微控制器完全达到了设计指标。设计的关键是三级流水线的实现和数据总线的控制。设计使用Verilog 语言描述,可读性好,易于增减资源和修改功能,可方便地应用于嵌入式系统中。由于时间仓促和水平有限,许多问题未能考虑,不足之处恳请读者赐教。
《基于RISC技术的8位微控制器设计(第2页)》