在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3380|回复: 3

[原创] 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用 上

[复制链接]
发表于 2017-2-17 20:33:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
十、MC8051软核在FPGA上的使用

本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣。本实验重点讲 8051Core 的应用,并通过一个简单 C51 程序对 51Core 进行硬件测试。

本实验教程的内容编排如下:

      第 1 章简单的描述了 MC8051 IP core 的基本结构及一些应用说明。
      第 2 章详细的介绍 8051Core 综合、编译应用。包括 Quartus II软件的基本应用,ROM、RAM 模块的生成,8051Core 的封装及应用测试。 附录 A 为 MC8051 IP Core 的指令集。
在阅读本教程的过程中,请读者注意以下几点:

      本教程在编写时充分借鉴了周立功编写的mc8051 IP核教程,同时针对其中较为落后的一些内容进行了更新(周立功的教程使用的还是Cyclone系列的器件,软件版本也很低,很多操作与目前使用的主流版本有较大区别),同时删除了其教程中使用Synplicity对工程进行综合的部分,转而使用Quartus II软件直接综合。
      本实验教程的 MC8051 IP Core (V1.6) 源于
http://oregano.at/ip/8051.htm
网站,读者如有需要可到该网站下载。


1章 MC8051 的基本结构
这一章将简单的介绍 MC8051 IP Core 的基本硬件结构和一些设计应用的注意事项,具

体内容包括:

      1. 功能特点
      2. 顶层结构
      3. 设计层次
      4. 硬件配置
      5. 并行 I/O 口
      6. 其它说明
本章介绍的内容可能过于简略,如果要更详细的资料可参考 mc8051_user_guide.pdf

文档(位于:“mc8051_v1.6源码.zip\Version1_6\doc”文件夹里面)。


1.1 功能特点
     ● 采用完全同步设计

     ● 指令集和标准 8051 微控制器完全兼容
     ● 指令执行时间为 1~4 个时钟周期,执行性能优于标准 8051 微控制器 8 倍左右
     ● 用户可选择定时器/计数器、串行接口单元的数量

     ● 新增了特殊功能寄存器用于选择不同的定时器/计数器、串行接口单元
     ● 可选择是否使用乘法器(乘法指令 MUL)
     ● 可选择是否使用除法器(除法指令 DIV)
     ● 可选择是否使用十进制调整功能(十进制调整指令 DA)
     ● I/O 口不复用
     ● 内部带 256Bytes RAM

     ● 最多可扩展至 64Kbytes 的 ROM 和 64Kbytes 的 RAM

     ● 最多可扩展至 64Kbytes 的 ROM 和 64Kbytes 的 RAM


1.2 顶层结构


MC8051 IP Core 顶层结构图如图
1.1
所示,图中指示了 mc8051_core 的顶层结构以及同 三个存储模块的连接关系,同时显示了顶层的输入输出 I/O 口,各 I/O 信号的描述如表
1.1
所示。定时器/计数器和串行接口单元对应于图中的 mc8051_tmrctr 和 mc8051_siu 模块,数量是可选择的,在图中用虚线表示。


图片1.jpg
图 1.1 MC8051 IP Core 顶层结构图


表 1.1 顶层信号名
图片2.jpg

1.3 设计层次


MC8051 IP Core 的层次结构及对应的 VHDL 文件如图
1.2
所示。

VHDL 源文件的命名格式如下:

图片3.jpg
核心由定时器/计数器、ALU、串行接口和控制单元各模块组成。ROM 和 RAM 模块不

包括于核心内,处于设计的顶层,方便于不同的应用设计及仿真。


图 1.2 MC8051 IP Core 的设计层次

1.4 硬件配置1.4.1 定时器/计数器、串口和中断

标准的 8051 核只有两个定时器/计数器,一个串口和两个外部中断源。而在 MC8051 IPCore 中,这些单元最多可增加到 256 组,只需要在 VHDL 源程序文件 mc8051_p.vhd 中,更改C_IMPL_N_TMR、C_IMPL_N_SIU、C_IMPL_N_EXT的常量值就可以了,范围是1~256。相关的代码如程序清单
1.1
所示。

程序清单 1.1 定时器/计数器、串口及中断的配置程序

图片5.jpg

C_IMPL_N_TMR、C_IMPL_N_SIU、C_IMPL_N_EXT 这三个常量是不能独立修改数值的,也就是说只能同时增减。C_IMPL_N_TMR 加一,就意味 IP Core 中同时添加了两个定时器/计数器,一个串口单元和两个外部中断源。 为了控制这些新增的控制单元,微控制器在特殊寄存器内存空间增加了两个寄存器。分别是 TSEL(定时器/计数器选择寄存器,地址为 0X8E)和 SSEL(串口选择寄存器,地址为 0X9A),如果没有对这两个寄存器赋值,其缺省值为 1。电路结构如图
1.3
所示。


图片6-1.jpg


图 1.3 使用附加的 TSEL 寄存器选择 TCON 寄存器

如果在中断发生期间设备(寄存器)没被选中(比如 TSEL),那么相应的中断标志位将保持置位,直到中断服务程序被执行。


1.4.2 可选择的指令

在某些场合,有些指令是用不到的,因此可以通过禁用这些指令来节省片上(比如 FPGA)资源。这些指令有 8 位乘法器(MUL)、8 位除法器(DIV)和 8 位十进制调整器(DA)。禁用时只需要在 VHDL 源程序文件 mc8051_p.vhd 中将 C_IMPL_MUL(乘法指令 MUL)、 C_IMPL_DIV(除法指令 DIV)或 C_IMPL_DA(十进制调整指令 DA)的常量值设置为 0。相应的 VHDL 程序代码段如所示。


程序清单 1.2 可选指令配置程序
这三条可选择指令如果没被设置执行,芯片(FPGA)可节省将近 10%的空间(资源)。


1.5 并行 I/O 口

为了便于 IC 设计,MC8051 IP Core 的 I/O 口不提供复用功能,包括 4 个 8 位输入输出口、串行接口、计数器输入端和扩展存储器接口。如果 I/O 要做为双向口应用,其基本电路

结构图如图
1.4
所示。

图1.4 并行I/O口基本结构

1.4
中的两个 D 触发器起同步输入信号的作用(mc8051_core 的输入 I/O 无做同步处理),也可以不用。上拉电阻是必要的,因为 I/O 口输出高电平是靠上拉电阻实现的。


1.6 其它说明

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

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

       (3) MC8051_core 的输入 I/O 没有做同步处理,必要时可自己添加,如图
1.4
所示。

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

       (5) MC8051 IP Core 经 Quartus II 综合编译后,观看时序分析报告,其最高运行频率为 32MHz(每次编译都可能不同,I/O 分配不同结果可能不同),因此系统时钟不能超过时序报告的时钟最高频率(即 fmax)。

2章 MC8051 的硬件运行本实验的硬件平台是采用芯航线FPGA学习套件,关于本实验套件的的详细介绍,请参看《芯航线FPGA学习平台用户手册》,这里就不重复说明。这里只简单说一些本实验用到的硬件资源以及相关软件的基本操作。

本章我们主要讲述 MC8051 core 的生成及封装,最后进行硬件下载运行并测试 I/O 口、 UART 及定时器。用到的硬件资源有为开发套件核心板上的LED0~LED3 、USB转串口接口。 本章将分以下几部分来讲述:

      1. MC8051 中 ROM、RAM 模块的生成;
      2. MC8051 core RTL 的封装;
      3. MC8051 core 在 Quartus II 中的应用;
      4. 测试 MC8051 的 I/O、UART 和定时器功能。 本实验力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及
相关设计软件的使用,并激起读者对 SOPC 技术的兴趣。


2.1 MC8051 中 ROM、RAM 模块的生成
本节的内容是建立一个 Quartus II 应用工程,并利用 Quartus II 自身集成的
Megawizard Plug_in Manager
工具(/在Quartus II 14.0版本及以后,名字改为了IP Catlog)来生成 MC8051 中所需的内部 RAM、外扩 RAM 及 ROM。


2.1.1 建立 Quartus II 工程
【开始】>>【程序】>>Altera>>Quartus II 13.0或直接双击桌面的Quartus II软件图标 图片9.jpg 打开 Quartus II 13.0 软件,软件界面如图
2.1
所示。

图 2.1 Quartus II 软件界面
在图
2.1
中从【File】>>【New】打开新建文件选项卡,在选项卡中选择【New Quartus II Project】来新建一项工程,软件界面如图 2.2 所示。

图 2.2 新建Quartus II 文件
打开后显示界面如下所示:

图 2.3 新建工程路径、名称、顶层实体指定对话框

         不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。文件夹所在路径名和文件夹名中不能用中文,不能用空格,不能用括号(),可用下划线_,最好也不要以数字开头。


2.3
第一栏用于指定工程所在的工作库文件夹;第二栏用于指定工程名,工程名可以取任何名字,也可以直接用顶层文件的实体名作为工程名(建议使用);第三栏用于指定顶层文件的实体名。本例工程的路径为
E:\CoreCourse_fpga\mc8051_test
文件夹,工程名与顶层文件的实体名同名为 mc8051_test。

接着单击 图片13.jpg 进入2.4所示的添加文件对话框。

图片14.jpg
图 2.4 新建工程添加文件对话框
由于是新建工程,暂无输入文件,所以直接单击 图片15.jpg ,进入图2.5所示的指定目标器件对话框。这里我们选择芯航线FPGA核心板上使用的Cyclone IV系列的EP4CE10F17C8
图片16.jpg
图 2.5 新建工程器件选择对话框

在图
2.5
右边的过滤器栏(Filters)中,设计者可以通过指定封装、管脚数以及器件速

度等级来加快器件查找的速度。

指定完器件后,单击 图片17.jpg 进入图2.6所示的自定EDA工具对话框。

图片18.jpg
图 2.6 新建工程 EDA 工具设置对话框

本实验利用 QuartusII 的集成环境进行开发,不进行仿真验证,故不使用任何 EDA 工具,因此这里不作任何改动。图
2.6
中单击 图片19.jpg
进入图

2.7
所示的工程信息报告对话框。从工程信息报告对话框,设计者可以看到工程文件配置信息报告。点击 图片20.jpg ,完成新建工程的建立。 需要注意的是,建立工程后,还可以根据设计中的实际情况对工程进行重新设置,可选择Assignments>>
Settings…进行设置,也可以选择工具栏上的 图片21.jpg 按钮。
图 2.7 新建工程配置信息报告对话框

2.1.2 建立工程顶层文件


在Quartus II中,常见的顶层文件有原理图形式和Verilog/VHDL形式,早期高校教学多选择以原理图形式为主。采用原理图形式作为工程顶层,在工程并不复杂的情况下,方便清晰的展示设计结构。但是当设计变的复杂,顶层中需要添加的模块越来越多之后,原理图形式的顶层文件,弱点也明显的暴露出来,主要表现为连线复杂,容易出错,可读性差,不便于修改。同时,随着Quartus II新版本软件的推出,不同版本间对于原理图形式的文件解析方式有差异,导致同一工程在不同的软件版本中打开的样式并不一致,在升级中很容易出错。因此这里采用Verilog/VHDL的形式创建文件顶层。

由于目前Verilog的普及率越来越高,熟悉Verilog的人远远大于熟悉VHDL的人,因此这里我们使用Verilog格式的文件来作为工程顶层。

点击File>>New…】,选择Verilog HDL File,如图
2
.8
所示:


图 2.8 新建Verilog HDL文件对话框


点击OK即可创建一个新的Verilog文件。

接着点击File>>Save As…将文件存储为” mc8051_test.v”, 如图
2
.9
所示:


图 2.9 保存Verilog文件
该文件就将作为我们工程的顶层文件


2.1.3 ROM 和 RAM 模块的生成

MC8051 中所需要的存储模块有,内部 RAM、扩展 RAM 和 ROM。其中内部RAM 和ROM 是必要的,内部 RAM 固定为 128Bytes,ROM 最大可选 64KBytes,鉴于 FPGA(这里我们选用 EP4CE10)片上 RAM 资源有限(EP4CE10的片上 RAM 约 51.75KBytes,这里我们选择 4Kbytes(可根据自己需要修改);扩展 RAM 是可选,最大也可以达到 64KBytes,这里我们选择 2Kbytes。


(1)创建一个ROM模块所需使用的初始化文件

这里首先创建该文件是为了使后面创建ROM模块时能够顺利进行。因为在生成ROM模块时,如果不指定一个存在的hex或mif格式的初始化文件,生成过程是无法顺利完成的。

点击File>>New…】,选择Hexadecimal (Intel-Format)File。然后点击OK。如图
2
.10所示:


图 2.10 新建hex文件

在弹出的对话框中,设置Number of words为4096,Word size为8,然后点击OK,即可创建一个新的hex文件,如图
2
.11所示:


图 2.11 设置hex文件大小
接着点击File>>Save As…将文件存储为” mcu_test.hex”。
如图

2
.12所示:


图 2.12 保存hex文件

(2) 生成ROM模块


(1) 从Tools>>MegaWizard Plug-In Manager…打开如图
2.13
所示添加兆功能模块向导。选择【Create a new custom megafunction variation】新建一个新的兆功能模块。然后点击 图片28.jpg 进入向导 page2。


图 2.13 添加兆功能模块向导对话框

(2) 在 page2,在搜索框中输入“rom”,选择搜索结果中的ROM:1-PORT,然后指定生成这个ROM 的器件系列(默认已经是Cyclone IV E),硬件描述语言(VHDL)和输出文件存放路径及名字(mc8051_rom),如图2.14所示。


图 2.14 page2创建ROM IP核

(3) 在 page3 上,设置 ROM 的信息:数据宽度 8bits,数据个数 4069。其余默认就行了。如图
2.15
所示。


图 2.15 page3 设置存储器大小

(4) 在 page4 上,取消 ROM 的输出寄存器,时钟使能信号及异步清零信号不用选,如图2.16所示


图 2.16 page4 取消输出寄存器

(5) 如图
2.17
所示在 page5 上指定 ROM 的初始化数据文件(也即单片机程序的机器码.hex 文件)。初始化数据文件可以是.mif 或.Hex 文件。对于 ROM 模块,是一定要指定初始化数据的,要不然向导就不能完成。这里我们选择之前创建的那个空白hex文件mcu_test.hex 文件(这里我们是先先随便找了个.hex 文件填进去,到后面再更换成我们所要的测试文件)。

然后我们勾选“Allow In-System Memory Content Editor to capture and update content independently of the system clock”,这样,当我们更改了我们的软件代码并生成了新的Hex文件时,就可以直接使用In-System Memory Content Editor工具来在线将新的hex文件下载到ROM中,从而避开在工程中重新替换hex文件并编译工程的工作。


图 2.17 page5 指定ROM的初始化hex文件
(6) 在 page6 上,不需要进行任何更改

(7) 在page7上,选择需要生成的文件,这里我们勾选上mc8051_rom_inst.vhd。然后点“finish”即可生成 ROM 宏单元了。其中 mc8051_rom.vhd 为生成的VHDL 源文件。如图
2.18
所示


图 2.18 page7 指定需要生成的文件
(2) 生成RAM模块

MC8051 中 RAM 模块包括内部 RAM 和扩展 RAM,其生成方法和 ROM 的生成方法差不多。这里只简单的说一下参数设置,详细的步骤可参考 ROM 模块的生成这一部分的内容。

(1) 内部 RAM 的参数设置 在如图
2.14
所示的对话框中输入ram,在搜索结果中选择 RAM:1-PORT 模块,并将其命名为 mc8051_ram;设置数据宽度为 8bits,数据个数为 128;取消 RAM 的数据输出寄存器,同时选中时钟使能信号端,如图
2.19
所示;勾选上生成mc8051_ram_inst.vhd文件,其它的选项默认不变。


图 2.19 page7 RAM设置
(2) 扩展 RAM 的参数设置 在如图
2.14
所示的对话框中输入ram,在搜索结果中选择 RAM:1-PORT 模块,并将其命名为 mc8051_ramx;设置数据宽度为 8bits,数据个数为 2048;取消 RAM 的数据输出寄存器;不需要选中时钟使能信号端,如图
2.20
所示;勾选上生成mc8051_ramx_inst.vhd文件,其它的选项默认不变。


图 2.20 page7 RAM设置

至此我们已经完成了 mc8051 中 ROM、RAM 模块的生成。下面将介绍如何对 mc8051

core 进行封装,也可以说是对 mc8051 core 进行打包,方便于以后的设计调用。

小梅哥
2016年2月26日星期五
芯航线电子工作室
发表于 2017-2-18 11:52:46 | 显示全部楼层
回复 1# 芯航线跑堂


    thanks
发表于 2020-2-25 10:37:26 | 显示全部楼层
thankss
发表于 2020-3-5 12:02:08 | 显示全部楼层
这里也有小梅哥的·资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-27 03:37 , Processed in 0.023702 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表