当前位置:首页 > 基于FPGA的MCU系统设计本科毕业设计
本科毕业设计第13页共37页
3MCU的设计总体思路
3.1 MCU的总体结构设计
本次毕业设计的目的是设计一个功能十分简单的16位MCU。考虑到本次论文要设计的MCU系统并不是完整的单片机系统,只有简单的加减法及简单的逻辑运算,所以将设计的重点放在MPU的设计上,重点考虑数据通路以及控制通路。MCU系统的总体构架如图
3.1。
图3.1
3.2 MCU的设计工具与流程
本次毕业设计是遵循自顶向下的设计方法,使用VHDL硬件编程语言对设计进行编程。整个MCU系统的源码是在Altera公司的QuartusII 11.0集成软件开发平台完成的。时序仿真和功能仿真是在Modelsim仿真工具下完成的。
首先,根据MCU系统的总体设计思路,用VHDL硬件描述语言对整个系统的所有功能模块进行设计,然后利用Modelsim仿真工具对设计的各模块进行仿真,并得到符合设
本科毕业设计第14页共37页
计规则的仿真波形图。
3.3 MCU的各模块划分
本次毕业设计的MCU系统主要包括程序计数器模块(PC)、输入模块(MAR)、指令寄存器模块(IR)、控制器模块(CU)、累加器模块(ACC)、加减法及逻辑运算器模块(ALU)和B寄存器模块等。下面将逐个详细介绍设计过程以及各模块的仿真结果。
3.3.1 程序计数器模块
图3.2
如图3.2为程序计数器模块实现后的实体图。它是一个十六位的计数器,计数范围从0到15。主要功能是记录下每一个要执行的指令地址,并且把该地址传送至MAR寄存器存放。程序计数器的部分主要VHDL语言描述如下。 if(Clk'event and Clk='1')then if C5='1' then temp:=temp+1; elsif C9='1' then
temp:=In_MBR(7 downto 0); else null; end if; Out_MAR<=temp; end if;
从上面的程序中可以看出,程序计数器的时钟触发边沿是上升沿,指令的地址可以由以下两种方法形成:一个是顺序执行的情况,另一个是遇到要改变顺序执行程序的情况,例如执行JMP指令后,需要形成新的指令地址。下面就详细说明PC地址是如何建
本科毕业设计第15页共37页
立的。复位后,指令指针为零,即每次MCU重新启动将从ROM的零地址开始读取指令并执行。每条指令执行完需要用两个时钟,这时计数器已被增2,指向下一条指令。如果正执行的指令是跳转语句,这时MCU状态控制器将会输出进位信号,通过C9口进入程序计数器。程序计数器将装入目标地址,而不是增2。
如图3.3是Modelsim下程序计数器的仿真波形图。
图3.3
3.3.2 MAR输入模块
图3.4
如图3.4为MAR输入模块实现后的实体图。这一模块分为MAR、MBR两部分,一个是接受由输入部分输入到RAM内存的外部程序和数据,另一部分是用来在MCU执行上述所加载的程序时,暂存下一个要执行的指令地址。MAR的部分主要VHDL语言描述如下。 begin
MBR VHDL语言描述 begin
if(Clk'event and Clk='1')then
共分享92篇相关文档