基于51单片机IP核的FPGA实现与应用

文章正文
发布时间:2024-08-20 11:53

  长期以来,单片机以其性价比高、体积小、功能灵活等方面的独特优点被广泛应用。但受其内部资源的限制,单片机需要在片外扩展相关资源。为了达到处理速度和控制灵活性方面的需求,采用微控制器和可编程逻辑器件设计单片机嵌入式系统。随着现场可编程逻辑阵列(FPGA)及EDA技术的发展,百万门级的FPGA、可重构的嵌入式MCU核、功能复杂的IP核及各种功能强大的EDA工具的出现,实现将MCU、存储器和一些外围电路集成到一个芯片成为可能。随着IP核技术在FPCA中的应用,特别是MCU IP核技术的发展。出现了性能不同的嵌入式MCU软核。MCS-51系列MCU是目前应用时间最长、最普及、可获得应用资料最多的功能强大的8位MCU,建立805l MCU可综合IP核对于各种嵌入式系统和片上系统(SOC)的应用。针对8051MCU的应用前景,出现了几个比较典型的805l IP核,如DW8051核.OpenCore组织的0C8051核及T51核,MC805l核等。这些IP核都是采用HDL语言描述的软MCU内核,其与工艺无关,能够在多种FPGA上进行逻辑综合及实现。这里采用免费的MC805lIP核,通过对MC8051结构原理的分析,详细论述其在FPCA中的实现及应用。

  2 MC8051 IP核基本结构及原理

  MC8051是与MCS一5l系列微处理器指令集完全兼容的8位嵌入式微处理器,通过芯核重用技术,可广泛应用在一些面积要求比较苛刻,而对速度要求不是很高的片上系统中。

  2.1 MC8051功能特点

  采用完全同步设计:指令集和标准8051微控制器完全兼容;指令执行时间为l~4个时钟周期,执行性能优于标准805l微控制器8倍左右;用户可选择定时/计数器、串行接口单元的数量,最多可增加到256组;新增特殊功能寄存器用于选择不同的定时/计数器、串行接口单元;可选择是否使用乘法器(乘法指令MUL);可选择是否使用除法器(除法指令DIV);可选择是否使用十进制调整功能(十进制调整指令DA);I/0口不复用,无双向数据I/O端口,输入、输出端口独立;内部带256Byte RAM;⑾最多可扩展至64 KB的ROM和64 KB的RAM;与工艺无关,可通过修改VHDL源代码扩展及参数化设置。

  2.2 MC8051结构及设计层次

  图1给出MC805l_eore的顶层设计模块及其子模块,包括顶层的各个信号端口及3个存储器模块。同时给出了顶层的输入输出I/O口。定时/计数器和串行接口单元,对应于图中的MC805l_tmrctr和MC8051_siu模块,数量可选择,图中用虚线表示。MC8051 IP核与工业标准8051单片机不同,MC8051的输入、输出并口分别映射到独立的端口上。其顶层各I/O信号的描述如表l所示。

MC805l

顶层各I

  MC805lIP核的设计层次及对应的VHDL文件如图2所示嘲。它由定时/计数器、ALU算数逻辑单元、串行接口单元和控制单元组成。RAM及ROM模块不包括在IP核内,处于设计的顶层,方便于不同的应用设计及仿真。

MC805lIP核的设计层次及对应的VHDL文件

  图2中,最顶层是用户的实际应用设计模块,它将ROM、RAM及mc8051_core封装在内部。实际应用中用户可添加自定义附加逻辑模块,与设计层次中的RAM、ROM模块处于同一个层次。

  2.3 MC8051硬件模块

  单片机作为一个大型设计,其内核由定时器时钟管理单元、ALU算数逻辑单元、串口及控制单元、存储单元RAM及ROM等模块组成。

  2.3.1 时钟管理单元

  MC8051内核采用完全同步的时钟设计。只有一个时钟信号控制每个存储单元的输入。没有使用门时钟,时钟没有输入到任何组合逻辑单元。中断输入线使用两级同步(锁存2次)与全局时钟同步。可以达到完全同步,即使用其他时钟的外部电路在驱动。并行I/0端口没有采用这种同步方式。

  2.3.2 定时器、串口和中断

  标准8051微控制器只提供两个定时/计数器单元、一个串口单元及两个外部中断源。而在MC805l IP核中,这些单元最多可增加到256组,只需修改VHDL源代码增加兼容的单元数。在VHDL源程序文件mc8051_p.vhd中,更改C_IMPL_N_TMR、C_IMPL_N_SIU、C_IMPL_N_EXT的常量值就可以,其范围是1~256。相关的VHDL代码如图3所示。

定时器

  这里C_IMPL_N_TMR、C_IMPL_N_SIU、C_IMPL_N_EXT3个常量参数不能独立修改数值,只能同时增减。C_IMPL_N_TMR加l意味着对应的添加了2个定时/计数器、一个串口单元和2个外部中断源。为了能寻址所生成的单元而不改变微控制器的地址空间,在微控制器的特殊功能寄存器(SFR)内存空间增加了2个8位寄存器作为附加功能寄存器:分别是TSEL(定时/计数器选择寄存器,地址为Ox8E)和SSEL(串口选择寄存器,地址为Ox9A)。如果以上的寄存器指向不存在的器件单元,将使用默认的l单元,如果没有对这两个寄存器赋值,其缺省值为1。如果在中断发生期间设备(寄存器)没被选中(比如TSEL),那么相应的中断标志位将保持置位,直到执行中断服务程序。

  2.3.3 存储器接口单元

  由于采用优化结构设计,存储器采用同步结构,限制输入、输出的时序,因而存储器输入、输出数据没用寄存器寄存。

  2.3.4 可选择指令

  在某些场合,有些指令是用不到的,因此,通过禁用这些指令节省片上资源。这些指令有8位乘法器(MUL)、8位除法器(DIV)和8位十进制调整器(DA)。禁用时只需要在VHDL源程序文件MC8051_p.vh中将C_IMPL_MUL(乘法指令MUL)、C_IMPL_DIV(除法指令DIV)或C_IMPL_DA(十进制调整指令DA)的常量值设置为0即可。如果这3条可选指令没有被执行,器件可节省约10%的资源。相应的VHDL程序代码段如图4所示。

可选择指令设置VHDL程序代码

[next]

  2.3.5 并行I/O端口

  为了便于IC设计,MC805l IP核的I/0口不提供复用功能,包括4个8位输入输出口、串行接口、计数器输入端和扩展存储器接口。如果要想将。MC8051 IP核的并行I/O端口改为双向I/0端口,设计时可以添加一些外围逻辑电路来实现。其基本电路结构如图5所示。图中的2个D触发器起同步输入信号的作用(mc805l_core的输入I/O不做同步处理),也可以不用。上拉电阻是必要的,因为I/0端口输出高电平是靠上拉电阻实现的。

并行双向I/O端口基本结构

  2.4 MC8051其他说明

  (1)MC8051 IP核的定时器和串口波特率的计算与标准8051一样,由系统时钟经12倍分频获得计数时钟。

  (2)外部中断信号是经两级寄存器做同步处理后输入的。

  (3)MC805l_core的输入I/0不做同步处理,必要时可自行添加,如图5所示。

  (4)写应用程序时,I/O端口如果没有做成双向端口,而是输入和输出分开的,应特别注意诸如Pl=一P1、P1^O=P1^0这样的I/0取反操作是无效的,因为读回的值不是I/O寄存器的值,而是输入引脚的状态。

  3 MC8051的RTL封装

  利用综合工具Synplify Pro软件实现对MC8051核的RTL封装,从而生成最终所需的MC8051 IP核(.vqm文件)。

  3.1 MC8051存储模块生成

  MC8051中所需的存储模块:内部RAM、扩展RAM和ROM。其中内部RAM和ROM是必要的,内部RAM固定为128字节,ROM最大可选64 K字节,鉴于FPGA片上RAM资源有限,这里选用4 K字节(可根据需要修改);扩展RAM是可选,最大也可以达到64 K字节,这里选用2 K字节。

  由于采用Altera公司的FPGA来实现,所以可以利用Al—tera公司的集成开发环境Quartus II来创建ROM、RAM模块。在具体的FPGA实现中,可根据不同厂家的器件,用厂家提供的工具来生成ROM和RAM,或者采用HDL描述实现。

  3.2 MC8051 IP核RTL封装

  由于用的MC8051 IP核源代码顶层设计文件中的存储模块(RAM、ROM)是仿真时使用的,实际应用设计时,必须改成实际应用中用到的RAM、ROM模块(也就是前面生成的RAM、ROM模块)。

  (1)打开源代码中的mc805l_p.vhd程序包文件,将原文件中的RAM(包括内部RAM、扩展RAM)、ROM元件例化语句全部替换成实际应用设计的程序代码;

  (2)打开源代码中的mc805l_top_stru.vhd文件,将原文件中的RAM(包括内部RAM、扩展RAM)ROM元件端口映射语句全部修改成应用设计的端口映射。因为实际应用中RAM、ROM的容量与MC8051核中存储器容量不一致及控制信号的差异,需要修改实际应用中RAM、ROM的地址线及控制信号线的端口映射。

  (3)新建Synplify Pro工程,将修改后的MC8051 IP核的VHDL文件添加到工程中。选择综合的目标FPGA器件,设置相关综合参数,生成MC8051 IP核的RTL封装文件.vqm,其综合后的RTL图如图6所示。

综合后的RTL图

点击看原图

  (4)因为VHDL文件编译是有顺序的,所以在向SynplifyPro工程添加VHDL源代码文件时,应注意的是:首先添加MC805l_p.vhd文件,然后添加其他文件,最后添加mc805l_top_.vhd和mc8051_top_strut.vhd文件。注意文件名后为_cfg.vhd的配置文件可以不添加到工程中,前面生成的RAM、ROM源代码文件也不必添加到工程里面。

  (5)综合编译成功后,需要检查顶层设计是否正确,这时可通过RTL图来检查。在RTL图中可看到MC8051 IP核的顶层结构图。在RTL图中主要检查ROM、RAM模块的连线是否正确,是否符合实际应用设计。

  4 MC8051 IP核应用构建

  采用Ahera公司的FPGA实现,可以利用Ahera公司的集成开发环境0uartus II构建实际应用系统。

  4.1 MC8051硬件系统构建

  在QuartusⅡ中新建应用工程,创建顶层图形设计文件并保存。

  (1)将MC8051 IP核进行RTL封装时用Quartus II创建的RAM、ROM模块文件添加到工程中;

  (2)在工程中调用FPGA自带的PLL数字锁相环模块,将目标系统板上的时钟调整到MC805l IP核的应用时钟频率。MC805l IP核经Quartus II综合编译后,查看时序分析报告,其最高运行频率为18.96 MHz(每次编译都可能不同,I/0分配不同结果可能不同),因此系统时钟不能超过时序报告的时钟最高频率(即fmax)。可以选择18 MHz,利用PLL对目标系统板上的时钟进行分频;

  (3)将Synplifyr Pro综合生成的RTL封装文件.vqm拷贝到Quartus II工程文件目录下,并添加到工程中。然后再将添加.vqm文件生成MC8051_top.bsf图形文件;

  (4)打开创建的应用设计顶层图形设计文件,将前面生成的PLL模块、MC8051_top模块添加到顶层设计文件中。添加输入/输出引脚,并对引脚命名,连接引脚与各模块.设置相关编译参数。生成FPGA的配置文件*.sof。其实际应用系统顶层原理图如图7所示。

实际应用系统顶层原理图

  可将并行I/O端口设计成双向I/O端口,以节约FPGA的引脚资源,其方法参见图5。根据实际应用的需要,利用FPGA剩余的资源,添加其他逻辑模块,与MC8051 core模块、PLL模块一起构成应用系统。这里只讨论MC8051 IP核的FPGA实现。

  4.2 MC8051应用程序创建

  在MC8051应用系统建立后,根据具体应用编写应用程序。可以是C语言程序,也可以是汇编语言程序。MC8051的应用程序与标准的8051应用程序完全兼容,可以采用熟悉的开发工具进行应用程序的编写。在编写完成、仿真调试通过后,利用编译工具编译生成.hex文件,供固化ROM使用。

  4.3 MC8051实际应用系统实现

  将生成的.hex应用程序文件拷贝到Quartus II工程文件目录下,替代原创建ROM存储器模块时使用的初始化.hex文件。然后重新编译Quarius II工程生成FPGA的配置文件.sof,将应用程序代码嵌入(同化)到ROM中。最后利用Quartus II的Programmer将FPGA的配置文件.sof下载到FPGA或EPCS中,实现MC8051的实际应用系统。

  5 结语

  本文在分析了MC805lIP Core的结构原理,设计层次,内核各组成模块及参数设置的基础上,详细论述了MC8051 IP核的FPGA实现与应用的实际设计步骤。试验验证,根据需求修改后的MC8051 IP核,能很好满足对8051MCU的应用需求,而且其性能比标准8051 MCU高,系统集成度也比采用标准8051 MCU构成的应用系统高。因此,MC8051 IP核在基于可编程逻辑和MCU的应用领域中具有广泛的应用前景。