文章分类

当前位置:首页>技术文章>16位MCU硬布线控制方式的设计与实现

16位MCU硬布线控制方式的设计与实现

1.1 MSC-96 体系结构 Intel 8096 微控制器是由通用寄存器阵列、算术逻辑单元(RALU)和微程序控制器等模块组成。其采用的是微程序控制方式,需要使用一个片内 ROM 存储器,因而会造成面积和功耗都会较大。MCU 内部的寄存器阵列通过一个控制器和 2 条总线与 RALU 相连。这两条总线是 8 位的 A-BUS 和 16 位的 D-BUS。DBUS 只用于 RALU 与寄存器之间的数据传输,而 A-BUS 用作上述传输过程中的地址总线。当 MCU 通过寄存器控制器访问片内外寄存器时,A-BUS 可作为多路转换的地址/数据总线。

1.2 A8096 总体结构为了减少面积和功耗,A8096 采用硬布线逻辑控制方式取代上述的微程序控制器。依据 MSC-96 的体系结构,A8096 主要功能模块包括:IPU(InstrucTIon Pre-fetch Unit。指令预取单元)、CU(Control Unit,控制单元)、ALU(Arithmetic Logical Unit,算术逻辑单元)、MEM_C-TRL(MEM 控制器)、RF_CTRL(寄存器堆控制器)、ISR(Interrupt Service Routine unit,中断服务单元)、GPIO(General Purpose Input Out-put,通用输入输出单元)等主要功能部件。

1.3 系统总线 A8096 采用 3 条总线:一条是 MEM 总线,用于 IPU 和 MEM CTRL 对程序空间和数据空间的读写控制;16 bit 的数据线,16 bit 的地址线,读写信号 memrd/memwr;一条是内部寄存器阵列(Register File)总线,用于 RF_CTRL 对内部寄存器阵列的读写访问,地址线是 8 bit 的,数据线为 16 bit,读写信号为 rf_rd/rf_wr;一条是 SFR 总线,用于访问数据空间地址在 00H~19H 的特殊定义的寄存器空间。

8 bit 的地址总线,16bit 的数据总线,读写信号 sfrrd/sfrwr。另外 IPU 和 MEMCTR 的数据交互是通过 8 bit 的数据线 instr_bus 完成的,其作用是从预取指令队列中将指令传给 CU 单元等。2 MCU 设计与实现 2.1 MCU 工作原理 A8096 通过 IPU(指令预取单元)指令预取,并存放在预取指令队列中,CU(控制单元)从 IPU 指令队列中取指并进行译码,产生控制时序等信号。

ALU 单元、RAM 控制器、MEM 控制器等部件中均有译码模块,依据当前指令和当前指令周期主动工作。如:RAM 控制器在加法指令的相应周期取操作数送往 ALU 单元,ALU 在相应周期接收数据,然后进行运算并将结果输出。

2.2 MCU 启动过程在上电复位时,MCU 处于复位态(rst 信号有效)。复位时,IPU 单元中的指令队列清空(empty 信号有效),总线处于空闲态,IPU 立刻进行指令预取动作,程序空间的首地址(2080H)指令即被取人指令队列,随后队列空信号(empty)无效,同时指令被发送出去(instr_bus)。在复位同时,控制单元(CU)的取指信号(codefetche)即一直有效,在指令队列空信号 empty 无效后(在 empty 无效之前 CU 一直等待),指令即通过 instr_ bus 进入了 CU,指令操作码被存入了指令寄存器,instr 寄存器更新为加法指令的操作码 74。

至此,MCU 完成了复位、自动取指操作,并开始往下执行该指令,IPU 单元也会继续进行指令预取操作。

2.3 指令执行过程在 A8096 中,有两级指令预取概念:一级是指令预单元 IPU 利用总线空闲从程序空间不断预取指令存入指令队列中;一级则是指令执行过程中的指令预取,当一条指令执行到最后一个时钟周期时,CU 单元就会发送取指信号,进行指令执行级的预取指动作,下一条指令的操作码即被预取出来(指令队列为空时需等待),并立刻进行译码确定指令的字节长度和指令执行周期数。如图 4 所示,在加法指令的最后一个周期(cycle=05),CU 单元取指信号 codefetche 有效,则下一条指令的操作码(6C,乘法操作码)被预取出来,同时进行查表译码确定其指令字节长度和指令周期数,随后操作码被存入指令寄存器 instr 中(此时,指令周期计数器 cycle 又从 01 开始计数)。

后面乘法指令的操作数也会不断被取进来执行,直到乘法指令最后一个周期时,又将下一条指令的操作码预取进来。需要说明:codefetche 为取操作码信号,datafetche 为取操作数信号。在指令最后一个周期时若有中断请求,则插入 LCALL 指令进行中断处理,读取下一条指令。

2.4 指令译码过程在 MCU 设计过程中,首先完成对各条指令的指令分析工作,确定每个周期该做的动作,然后各部件依据指令分析表进行相关的指令译码(RAM 控制器只译 RAM 要做的动作,ALU 只译 ALU 要做的动作)。过程描述如下:在预取操作码时,CU 单元对操作码进行译码确定指令的字节长度(nr_bytes)和指令周期数(nr_cycles)。然后 CU 依据指令字节长度(nr_bytes)取操作数,其他部件依据指令和当前指令周期(curcycle)执行相应的指令操作。表 1 为加法指令分析表,下面以加法指令的译码过程来说明整个译码流程:

1)加法指令 ADD OPl OP2(将 OPl+0P2 结果写入 OPl 中);其目标码格式为:ADD OP2 OPl,其中 OPl 和 OP2 均为操作数地址。

2)0 周期实际指上一条指令的最后一个时钟周期,此周期 codefetche 取指信号有效,IPU 单元将指令送入 CU 单元确定了指令周期和指令长度。

3)l 周期取操作数信号 datafetche 有效,op2(地址)进来,被送入 RAM 地址线,发读信号(从 RAM 寄存器阵列取操作数 2)。

4)2 周期操作数 2 被取入,并存入 ALU 中的 a 寄存器;此周期取操作数信号 datafetche 有效,opl(地址)进来,被送入 RAM 地址线,发读信号。

5)3 周期操作数 l 被取入,并存入 ALU 中的 b 寄存器;加法器立刻进行 a+b 运算。

6)4 周期将加法结果放到 RAM 数据线上,地址线=opl,发写信号。将加法结果写回到 opl 中,并依据结果对 PSW 进行处理。

7)5 周期无动作,用于写回操作的过程。3 验证结果 3.1 仿真验证芯片的功能与结构设计,只是设计流程的一部分,为保证最终设计成功,必须对其全面仿真与功能验证。对 MCU 的测试方法如下:

1)功能模块的单元测试,验证模块的功能正确性,包括接口时序等。

2)系统集成测试,首先编写简单的机器码测试向量进行初步调试:然后使用编译器写汇编程序,编译成二进制机器码进行程序功能测试。在集成测试中,编写汇编测试程序,用编译器编译成机器码,在 Cadenee NC 下运行这些测试程序进行仿真测试。对每条指令均测试了其各种寻址方式,且测试程序自动向 DEBUG 寄存器写测试结果,以方便调试。经过复杂的测试和不断修正,验证结果显示 MCU 指令执行的正确性。

3.2 FPGA 验证使用的 FPGA 器件是 StratixⅡ型号为 EP1S40F780C7。综合结果显示:A8096 使用 3 565 个 LE(Logic Element)。时序分析结果:A8096 可以运行在 49.93 MHz 的时钟频率下。


© 星光电子技术工作室 2021 All Rights Reserved.
如有任何问题、建议、业务、合作,请联系手机/微信:13713820066