基于RISC技术的8位微控制器设计

摘要: 介绍基于risc技术的8位微控制器的设计与实现。主要包括risc指令集的选取;取指单元、译码单元、执行单元的设计;取指、译码、回写三级流水线技术的实现。该微控制器包含8级硬件堆栈、1个8位计数器、1个计数器溢出中断、2个外部中断源、8位数据输入和输出端口、16个通用寄存器、2k×16位的程序存储器、512字节的数据存储器。设计使用可综合的verilog语言描述, quartusⅱ软件仿真,fpga器件验证实现。
关键词: risc verilog 8位微控制器 fpga
引 言
随着微电子技术的不断发展,超大规模集成电路的集成度和工艺水平不断提高,将整个应用电子系统集成在一个芯片中(soc),已成为现代电子系统设计的趋势;以往高复杂度、高成本的嵌入式系统结构能够通过低成本的单片芯片实现。另一方面,复杂可编程逻辑器件(cpld)和现场可编程门阵列(fpga)集成度和速度不断提高,功能不断增强,开发人员可以使用高性能的eda综合开发工具和硬件描述语言(hdl)在短时间内设计出复杂的电子应用系统。目前,嵌入式系统已经在各行各业得到广泛应用。工控、通信、汽车、航空航天以及军事等各个领域都能看到嵌入式系统的身影,而微控制器(mcu)则是嵌入式系统的核心。
1 精简指令集计算机(risc)
1.1 risc的结构特征和设计原则
精简指令集计算机具有单周期单指令,存储器到寄存器的操作,简单的寻址方式和简单的指令格式的结构特征,其设计原则为:
① 选择使用频率高的指令,补充少量高效指令;
② 指令的结构简单,所有指令长度相等;
③ 采用流水线技术,尽量使cpi = 1;
④ 使用load/store操作指令访问存储器;
⑤ 采用通用寄存器(gpr)结构;
⑥ 优化编译,提高执行效率。
1.2 性能因子cpi和执行时间
性能因子是指微控制器每条指令的平均时钟周期数cpi(cycles per instruction):
程序总的执行时间t为:
执行时间是微控制器性能的主要指标。在影响t的三个因素中,时钟频率取决于硬件技术;cpi与指令集和mcu的组成结构有关;而指令数由指令集和编译技术决定。要使微控制器的性能得到提高,优化指令集、减少程序的总指令数和降低cpi值是设计主要考虑的问题。
2 微控制器的系统结构
图1所示的微控制器主要由以下几个模块组成:
① prom程序存储器单元(program rom)。程序存储器容量为2k×16位。系统复位后,程序计数器pc指向程序存储器000h单元,程序从000h处开始执行。
② idec指令译码单元(instruction decoder)。指令译码器对输入的16位宽指令进行译码,输出寄存器、数据存储器的地址和读/写控制信号。
③ alu算术逻辑运算单元(arithmetic logic unit)。alu单元是mcu数据处理的核心部分,数据宽度为8位,具有加、减、逻辑运算和移位功能。alu单元有2个8位的数据输入和1个8位数据输出,1位进位输入,1位进位标志输出和零标志输出。运算操作码输入为4位,由译码单元提供。
④ regs寄存器单元(register)。1组16个8位寄存器,用于数据的高速存取。寄存器组具有2个数据输出端口和1个数据输入端口,读和写地址分开,可同时进行读/写操作。
⑤ dram数据存储器单元(data ram)。包含4段共512字节(每段128字节)的数据存储器,直接寻址能力为128字节,间接寻址能力为256字节,由程序状态控制寄存器psw的高2位控制段选地址。
⑥ ctrl控制单元(control unit)。整个mcu的控制中心,主要控制流水线操作、数据总线的控制和程序计数器的转移。另外,还包括中断、计数器和堆栈控制。
⑦ 其它。定义了1组数据输入端口、2组数据输出端口,数据位宽均为8位;2个外部中断输入int0和int1;1个8位计数器timer;7级程序堆栈stack,可实现7级子程序调用;1个8位的程序状态控制寄存器psw。各位功能如表1。
表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)。
注:源代码见网站www.dpj.com.cn。
结 语
从逻辑综合与仿真测试的结果看,该微控制器完全达到了设计指标。设计的关键是三级流水线的实现和数据总线的控制。设计使用verilog 语言描述,可读性好,易于增减资源和修改功能,可方便地应用于嵌入式系统中。由于时间仓促和水平有限,许多问题未能考虑,不足之处恳请读者赐教。

中欣晶圆混改和扩产增资轮投资完美收官
耐能收购OTUS(欧特斯)公司,加速智能驾驶应用
为什么以FPGA来说嵌入式的出路 FPGA属于嵌入式吗
怎么设计一个32位超前进位加法器?
电商支付是怎样被生物识别改变的
基于RISC技术的8位微控制器设计
多土层土壤参数监测仪的详细介绍
绝缘轴承因其独特的工艺和特性而有着广泛应用
采用热敏电阻构成的超温报警器电路
有哪些因素会导致安规电容的损坏
工业自动化领域如何降低机器人风险
热水器泄压阀安装位置_热水器泄压阀一直流水
热保护器和温控器的区别
虚拟网络流量的采集与分析有什么作用?应该怎么做?
Xilinx KU系列三速以太网IP核RGMII时序约束方法
调频发射又一新招
Bebop无人机目标跟踪与运动控制环境搭建
基于R&S的矢量源和信号分析仪构建无线系统仿真平台的方案
紫光展锐CEO楚庆表示未来的趋势将是5G+AI并举
慕尼黑展览(上海)有限公司携手IPC升级新一轮战略合作,共创电子智造新未来