39
广州致远电子有限公司 Tel(020)22644399 28872569 Fax338601859 http://www.embedtools.com i 关于本实验教程 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用 以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣。本实验重点讲 8051Core 的应 用,并通过一个简单 C51 程序对 51Core 进行硬件测试。 本实验教程的内容编排如下: 1 章简单的描述了 MC8051 IP core 的基本结构及一些应用说明。 2 章详细的介绍 8051Core 综合、编译应用。包括 Quartus IISynplify Pro 软件的基 本应用,ROMRAM 模块的生成,8051Core 的封装及应用测试。 附录 A MC8051 IP Core 的指令集。 在阅读本教程的过程中,请读者注意以下几点: 本教程在写作过程中遵循“宁可啰唆一点,也不放过细节”的方针。在教程中的某些地 方,有些读者可能觉得很“简单”,甚至显得有些啰唆,但对大多数初学者可能并非如此。 因为作者认为,足够简单甚至可以跳过的内容,对某些读者来说,未必能一下子就弄清楚, 所以,本教程很多地方将尽量阐述清楚,以节省读者理解的时间。但在后面的章节中,如果 涉及的细节在前面章节中已经提及,这些内容就会省略。 最后作者要强调的是,本教程旨在引路,不会带领读者掌握更深层次的开发,更高级的 应用希望读者自己去挖掘。 本实验教程的 MC8051 IP Core (V1.4) 源于 http://oregano.at/ip/8051.htm 网站,读者如有 需要可到该网站下载。

MC8051 IPcore实验教程

Embed Size (px)

Citation preview

Page 1: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

i

关于本实验教程

本教程内容力求以详细的步骤和讲解让读者以最快的方式学会MC8051 IP core的应用

以及相关设计软件的使用,并激起读者对 SOPC技术的兴趣。本实验重点讲 8051Core的应用,并通过一个简单 C51程序对 51Core进行硬件测试。 本实验教程的内容编排如下: 第 1章简单的描述了MC8051 IP core的基本结构及一些应用说明。 第 2章详细的介绍 8051Core综合、编译应用。包括 Quartus II、Synplify Pro软件的基

本应用,ROM、RAM模块的生成,8051Core的封装及应用测试。 附录 A为MC8051 IP Core的指令集。 在阅读本教程的过程中,请读者注意以下几点: 本教程在写作过程中遵循“宁可啰唆一点,也不放过细节”的方针。在教程中的某些地

方,有些读者可能觉得很“简单”,甚至显得有些啰唆,但对大多数初学者可能并非如此。

因为作者认为,足够简单甚至可以跳过的内容,对某些读者来说,未必能一下子就弄清楚,

所以,本教程很多地方将尽量阐述清楚,以节省读者理解的时间。但在后面的章节中,如果

涉及的细节在前面章节中已经提及,这些内容就会省略。 最后作者要强调的是,本教程旨在引路,不会带领读者掌握更深层次的开发,更高级的

应用希望读者自己去挖掘。 本实验教程的MC8051 IP Core (V1.4) 源于 http://oregano.at/ip/8051.htm网站,读者如有

需要可到该网站下载。

Page 2: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

ii

目 录 第 1章 MC8051的基本结构 .....................................................................................3

1.1 功能特点 .........................................................................................................................3 1.2 顶层结构 .........................................................................................................................3 1.3 设计层次 .........................................................................................................................4 1.4 硬件配置 .........................................................................................................................5

1.4.1 定时器/计数器、串口和中断 ..............................................................................5 1.4.2 可选择的指令 .......................................................................................................7

1.5 并行 I/O口 ......................................................................................................................7 1.6 其它说明 .........................................................................................................................8

第 2章 MC8051的硬件运行 .....................................................................................9 2.1 MC8051中 ROM、RAM模块的生成 ..........................................................................9

2.1.1 建立 Quartus II工程 .............................................................................................9 2.1.2 建立图形设计文件 .............................................................................................13 2.1.3 ROM和 RAM模块的生成 ................................................................................14

2.2 MC8051 core RTL的封装 ............................................................................................17 2.2.1 更新 mc8051 core的顶层源文件.......................................................................17 2.2.2 使用 Synplify新建综合工程..............................................................................20 2.2.3 设置综合工程 .....................................................................................................23 2.2.4 综合工程文件 .....................................................................................................24

2.3 MC8051 core 在 Quartus II中的应用 .........................................................................25 2.3.1 建立 PLL数字锁相环模块 ................................................................................25 2.3.2 mc8051 core在 Quartus II中的应用设计 .........................................................28 2.3.3 FPGA参数设置 ..................................................................................................30 2.3.4 下载硬件设计到目标 FPGA ..............................................................................33

2.4 测试MC8051的 I/O、UART和定时器功能..............................................................33 2.4.1 Keil C测试程序..................................................................................................33 2.4.2 测试步骤 .............................................................................................................35

参考文献......................................................................................................................36 附录 A MC8051指令表...........................................................................................37

Page 3: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

3

第1章 MC8051的基本结构

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

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

文档(位于:“MC8051_IPcore\相关参考资料”文件夹里面)。

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 模块,数量是可选择的,在图中用虚线表示。

Page 4: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

4

图 1.1 MC8051 IP Core顶层结构图

表 1.1 顶层信号名

信号名 描述 clk 系统时钟,只用到时钟上升沿

reset 异步复位所有触发器 all_t0_i 定时器/计数器 0输入引脚 all_t1_i 定时器/计数器 1输入引脚

all_txd_i 串口数据接收输入端 int0_i 外部中断 0输入引脚 int1_i 外部中断 1输入引脚 p0_i P0口输入引脚 p1_i P1口输入引脚 p2_i P2口输入引脚 p3_i P3口输入引脚

all_rxdwr_o rxd输入/输出方向控制信号(高电平输出) all_txd_o 串口数据输出引脚 all_rxd_o 串口工作于模式 0时数据输出引脚

p0_o P0口输出引脚 p1_o P1口输出引脚 p2_o P2口输出引脚 p3_o P3口输出引脚

1.3 设计层次

MC8051 IP Core的层次结构及对应的 VHDL文件如图 1.2所示。 VHDL源文件的命名格式如下: ● VHDL entities entity-name_.vhd

● VHDL architectures entity-name_rtl.vhd (做逻辑设计)

Page 5: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

5

entity-name_struc.vhd(做顶层例化)

● VHDL configurations entity-name_rtl_cfg.vhd

entity-name_struc_cfg.vhd

核心由定时器/计数器、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 定时器/计数器、串口及中断的配置程序

----------------------------------------------------------------------------

-- Select how many timer/counter units should be implemented

-- Default: 1

constant C_IMPL_N_TMR : integer := 1;

----------------------------------------------------------------------------

----------------------------------------------------------------------------

-- Select how many serial interface units should be implemented

-- Default: C_IMPL_N_TMR ---(DO NOT CHANGE!)---

constant C_IMPL_N_SIU : integer := C_IMPL_N_TMR;

Page 6: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

6

----------------------------------------------------------------------------

----------------------------------------------------------------------------

-- Select how many external interrupt-inputs should be implemented

-- Default: C_IMPL_N_TMR ---(DO NOT CHANGE!)---

constant C_IMPL_N_EXT : integer := C_IMPL_N_TMR;

----------------------------------------------------------------------------

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所示。

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

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

Page 7: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

7

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 可选指令配置程序

----------------------------------------------------------------------------

-- Select whether to implement (1) or skip (0) the multiplier

-- Default: 1

constant C_IMPL_MUL : integer := 1;

----------------------------------------------------------------------------

----------------------------------------------------------------------------

-- Select whether to implement (1) or skip (0) the divider

-- Default: 1

constant C_IMPL_DIV : integer := 1;

----------------------------------------------------------------------------

----------------------------------------------------------------------------

-- Select whether to implement (1) or skip (0) the decimal adjustment command

-- Default: 1

constant C_IMPL_DA : integer := 1;

----------------------------------------------------------------------------

这三条可选择指令如果没被设置执行,芯片(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口输出高电平是靠上拉电阻实现的。

Page 8: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

8

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综合编译后,观看时序分析报告,其最高运行频率为18.05MHz(每次编译都可能不同,I/O分配不同结果可能不同),因此系统时钟不能超过时序报告的时钟最高频率(即 fmax)。

Page 9: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

9

第2章 MC8051的硬件运行

本实验的硬件平台是采用 Smart SOPC或 Smart EDA实验箱,关于这个实验箱的详细介 绍,请参看《NiosII SOPC嵌入式系统基础教程》、《NiosII SOPC嵌入式系统实验教程》或《EDA实验教程》,这里就不重复说明。这里只简单说一些本实验用到的硬件资源以及相关软件的基本操作。

本章我们主要讲述MC8051 core的生成及封装,最后进行硬件下载运行并测试 I/O口、UART及定时器。用到的硬件资源有实验箱的 FPGA、LED1~LED8和串口接口。 本章将分以下几部分来讲述:

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模块的生成

由于测试平台是采用 Altera公司的 FPGA,所以我们可以利用 Altera公司的集成开发环 境 Quartus II来完成硬件设计开发。在这一节中将简单介绍 QuartusII的应用,包括 Quartus II工程的创建、图形设计文件的创建及 ROM、RAM模块的生成,关于 Quartus II在本设计中的其它应用将在后面陆续介绍。 本节的内容是建立一个 Quartus II应用工程,并利用 Quartus II自身集成的Megawizard

Plug_in Manager工具来生成MC8051中所需的内部 RAM、外扩 RAM及 ROM。

2.1.1 建立 Quartus II工程

每个开发过程开始时都应建立一个工程,Quartus II是以工程的方式对设计过程进行管理,QuartusII工程中存放创建 FPGA配置文件需要的所有设置和设计文件。 从【开始】>>【程序】>>【Altera】>>【Quartus II 5.0】打开 Quartus II 5.0软件,软

件界面如图 2.1所示。

Page 10: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

10

图 2.1 Quartus II软件界面

在图 2.1中从【File】>>【New Project Wizard…】来新建一项工程,注意不要把 New误认为 New Project Wizard…。新建工程向导对话框如图 2.2所示。

在如图 2.2 所示的新建工程向导说明对话框中可以了解在新建工程的过程中我们要完成哪些工作,这些工作包括:

1.指定项目目录、名称和顶层实体。 2.指定项目设计文件。 3.指定该设计的 Altera器件系列。 4.指定用于该项目的其它 EDA工具。 5.项目信息报告。

图 2.2 新建工程向导说明对话框

在图 2.2中点击 进入图 2.3所示的新建工程路径、名称、顶层实体指定对话框。

Page 11: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

11

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

任何一项设计都是一项工程(project),必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹,此文件夹将被 QuartusII默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。

不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录

中。文件夹所在路径名和文件夹名中不能用中文,不能用空格,不能用括号(),

可用下划线_,最好也不要以数字开头。

图 2.3第一栏用于指定工程所在的工作库文件夹;第二栏用于指定工程名,工程名可以取任何名字,也可以直接用顶层文件的实体名作为工程名(建议使用);第三栏用于指定顶

层文件的实体名。本例工程的路径为 E:\EDA\Example\led_test文件夹,工程名与顶层文件的实体名同名为 led_test。

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

图 2.4 新建工程添加文件对话框

Page 12: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

12

由于是新建工程,暂无输入文件,所以直接单击 ,进入图 2.5 所示的指定目标器件对话框。这里我们选择的是 QuickSOPC核心板上用的 Cyclone系列的 EP1C6Q240C8。

图 2.5 新建工程器件选择对话框

在图 2.5右边的过滤器栏(Filters)中,设计者可以通过指定封装、管脚数以及器件速度等级来加快器件查找的速度。 指定完器件后,单击 进入图 2.6所示的指定 EDA工具对话框。

图 2.6 新建工程 EDA工具设置对话框

本实验利用 QuartusII的集成环境进行开发,不使用任何 EDA工具,因此这里不作任何改动。图 2.6中单击 进入图 2.7所示的工程信息报告对话框。从工程信息报告对话框,设计者可以看到工程文件配置信息报告。点击 ,完成新建工程的建立。

需要注意的是,建立工程后,还可以根据设计中的实际情况对工程进行重新设置,可选

择【Assignments】>> 【Settings…】进行设置,也可以选择工具栏上的 按钮。

Page 13: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

13

图 2.7 新建工程配置信息报告对话框

2.1.2 建立图形设计文件

Quartus II图形编辑器也称为块编辑器(Block Editor),用于以原理图(Schematics)和结构图(Block Diagrams)的形式输入和编辑图形设计设计信息。Quartus II的块编辑器可以读取并编辑结构图设计文件(Block Design Files)和 MAX+PLUS II 图形设计文件(Graphic Design Files)。可以在 Quartus II软件中打开图形设计文件并将其另存为结构图设计文件。 如图 2.8所示,从【File】>>【New…】打开新建文件对话框如图 2.9所示。

图 2.8 新建文件

图 2.9 新建文件对话框

在如图 2.9所示的新建文件对话框中选择 Block Diagram /Schematic File,按 建

立一个空的图形设计文件,缺省名为 Block1.bdf。如图 2.10所示,点击【File】>>【Save As…】

Page 14: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

14

打开将 BDF文件存盘的对话框,如图 2.11所示。

图 2.10 将 BDF文件存盘

图 2.11 BDF文件存盘对话框

在 BDF文件存盘对话框中接受默认的文件名,并默认 Add file to current project选项选中,以使该文件添加到工程中去。至此,完成了图形设计文件的建立,该图形文件将作为

本设计的顶层文件。

2.1.3 ROM和 RAM模块的生成

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

1) 生成ROM模块 (1) 从【Tools】>>【MegaWizard Plug-In Manager…】打开如图 2.12所示添加兆功能

模块向导。选择【Create a new custom megafunction variation】新建一个新的兆功能模块。然后点击 进入向导 page2。

Page 15: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

15

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

(2) 在 page2,选择 storage 下的 LPM_ROM,然后指定生成这个 LPM_ROM 的器件系列(Cyclone),硬件描述语言(Verilog HDL)和输出文件存放路径及名字(mc8051_rom),如图 2.13所示。

图 2.13 megafunction page2

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

Page 16: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

16

图 2.14 megafunction page3

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

图 2.15 megafunction page4

(5) 如图 2.16 所示在 page5 上指定 ROM 的初始化数据文件(也即单片机程序的机器码.hex 文件)。初始化数据文件可以是.mif 或.Hex 文件。对于 ROM 模块,是一定要指定初始化数据的,要不然向导就不能完成。这里我们选择 mcu_test.hex文件(当然也可以先随便找个.hex文件填进去,到后面再更换成我们所要的测试文件),该文件是 51核的 I/O、Timer、UART 测试程序,位于:\mcu_test文件夹里面,详细的情况请看 2.4节——测试 MC8051的I/O、UART和定时器功能。

Page 17: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

17

图 2.16 megafunction page5

(6) 在 page6 上,指定要生成的文件(默认就行)。然后点“finish”即可生成 ROM 宏单元了。其中 mc8051_rom.v为生成的 Verilog HDL源文件。

2) 生成RAM模块 MC8051中 RAM模块包括内部 RAM和扩展 RAM,其生成方法和 ROM的生成方法差不多。这里只简单的说一下参数设置,详细的步骤可参考 ROM模块的生成这一部分的内容。 (1) 内部 RAM的参数设置 在如图 2.13 所示的对话框中选择 LPM_RAM_DQ 模块,并其命名为 mc8051_ram;设置数据宽度为 8bits,数据个数为 128;取消 RAM的数据输出寄存器,同时选中时钟使能信号端;其它的选项默认不变。 (2) 扩展 RAM的参数设置 在如图 2.13所示的对话框中选择 LPM_RAM_DQ模块,并其命名为 mc8051_ramx;设置数据宽度为 8bits,数据个数为 2048;取消 RAM 的数据输出寄存器;其它的选项默认不变。 至此我们已经完成了 mc8051 中 ROM、RAM 模块的生成。下面将介绍如何对 mc8051

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

2.2 MC8051 core RTL的封装

Mc8051 core RTL的封装是通过综合工具 Synplify Pro软件实现的。他的性能和特点这 里就不一一叙述了。本节主要讲述怎样使用 Synplify Pro 软件来综合生成我们最终需要的8051 IP Core(.vqm文件),同时通过本节练习熟悉 Synplify Pro软件的使用;在新建工程之前我们还要对一些 mc8051 core的源文件进行更新修改,使之符合我们的设计。

2.2.1 更新 mc8051 core的顶层源文件

由于我们用的 51 OPcode顶层设计文件中的存储模块(ROM、RAM)是仿真时使用的, 现在要进行硬件测试,所以必须改成我们实际用到的 ROM、RAM 模块(也就是前一节我

们生成的 ROM、RAM模块)。 1)首先新建一个 mc8051core 的文件夹,将 mc8051 core 的源代码文件(位于:\mc8051_Source\VHDL目录)拷贝到 mc8051core文件夹。 2) 打开 mc8051_Source\VHDL目录下的 mc8051_p.vhd文件,将原文件中 ROM、RAM

Page 18: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

18

模块调用的代码(如程序清单 2.1所示)全部替换为符合本设计的程序代码(如程序清单 2.2所示)。

程序清单 2.1 mc8051_p.vhd文件代修改代码

----------------------------------------------------------------------------

-- START: Component declarations for simulation models

----------------------------------------------------------------------------

component mc8051_ram

⋯⋯⋯⋯ --篇幅所限这里省去内容

end component;

component mc8051_ramx

⋯⋯⋯⋯

end component;

component mc8051_rom

⋯⋯⋯⋯

end component;

----------------------------------------------------------------------------

-- END: Component declarations for simulation models

----------------------------------------------------------------------------

程序清单 2.2 mc8051_p.vhd文件更新的源代码

----------------------------------------------------------------------------

-- START: Component declarations for simulation models

----------------------------------------------------------------------------

component mc8051_ram

port ( clock : in std_logic;

data : in std_logic_vector(7 downto 0);

q : out std_logic_vector(7 downto 0);

address : in std_logic_vector(6 downto 0);

wren : in std_logic;

clken : in std_logic);

end component;

component mc8051_ramx

port ( clock : in std_logic;

data : in std_logic_vector(7 downto 0);

q : out std_logic_vector(7 downto 0);

address : in std_logic_vector(10 downto 0);

wren : in std_logic);

end component;

Page 19: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

19

component mc8051_rom

port ( clock : in std_logic;

q : out std_logic_vector(7 downto 0);

address : in std_logic_vector(11 downto 0));

end component;

----------------------------------------------------------------------------

-- END: Component declarations for simulation models

----------------------------------------------------------------------------

3) 打开 mc8051_Source\VHDL 目录下的 mc8051_top_struc.vhd 文件,首先做如程序清

单 2.3所示修改,其中斜体加粗的部分为新增加或修改的内容。然后将原文件中 ROM、RAM模块调用部分的代码修改成如程序清单 2.4所示的代码。这样就完成了源文件更新修改。

程序清单 2.3 mc8051_top_struc.vhd文件新增的代码

architecture struc of mc8051_top is

signal s_rom_adr_sml: std_logic_vector(12 downto 0); -- *** new

signal s_ramx_adr_sml: std_logic_vector(10 downto 0); -- *** new

⋯⋯

begin -- architecture structural

s_rom_adr_sml <= std_logic_vector(s_rom_adr(11 downto 0)); -- *** new

s_ramx_adr_sml <= std_logic_vector(s_ramx_adr(10 downto 0)); -- *** new

i_mc8051_core : mc8051_core

port map( clk => clk,

reset => reset,

⋯⋯

);

程序清单 2.4 mc8051_top_struc.vhd文件中更新的源代码

----------------------------------------------------------------------------

-- Hook up the general purpose 128x8 synchronous on-chip RAM.

i_mc8051_ram : mc8051_ram

port map ( clock => clk,

data => s_ram_data_in,

q => s_ram_data_out,

address => s_ram_adr,

wren => s_ram_wr,

clken => s_ram_en);

-- THIS RAM IS A MUST HAVE!!

----------------------------------------------------------------------------

----------------------------------------------------------------------------

Page 20: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

20

-- Hook up the (up to) 64kx8 synchronous on-chip ROM.

i_mc8051_rom : mc8051_rom

port map ( clock => clk,

q => s_rom_data,

address => s_rom_adr_sml);

-- THE ROM OF COURSE IS A MUST HAVE, ALTHOUGH THE SIZE CAN BE SMALLER!!

----------------------------------------------------------------------------

----------------------------------------------------------------------------

-- Hook up the (up to) 64kx8 synchronous RAM.

i_mc8051_ramx : mc8051_ramx

port map ( clock => clk,

data => s_ramx_data_out,

q => s_ramx_data_in,

address => s_ramx_adr_sml,

wren => s_ramx_wr);

-- THIS RAM (IF USED) CAN BE ON OR OFF CHIP, THE SIZE IS ARBITRARY.

----------------------------------------------------------------------------

2.2.2 使用 Synplify新建综合工程

1) 建立工程 从【开始】>>【程序】>>【Synplicity】>>【Synplify Pro 8.5】打开 Synplify Pro 8.5软

件,软件界面如图 2.17所示。

图 2.17 Synplify软件界面

工程按钮

运行按钮

项目浏览窗

TCL命令窗

Page 21: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

21

点击工程按钮的“Open Project”出现如图 2.18所示的画面;

图 2.18 Synplify打开工程界面

点击“New Project”出现如图 2.19所示的界面;

图 2.19 Synplify工程界面

然后将工程文件保存于 mc8051core目录下,如图 2.20所示。

控制选项

Page 22: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

22

图 2.20 Synplify保存工程

2) 添加工程文件 点击工程按钮的“Add File”出现如图 2.21所示的画面;

图 2.21添加文件

因为 VHDL 编译是有顺序的,根据代码调用顺序编译的。所以添加文件时要按以下步骤

进行。 首先我们选择 mc8051_p.vhd 文件并按“<-Add”按钮添加到工程中,然后再添加的其

它的源文件(配置文件不用添加,即文件名后面为 cfg.vhd 的文件),最后再添加mc8051_top_.vhd和 mc8051_top_ struc.vhd文件,点“OK”完成文件的添加。 注:ROM、RAM源代码文件不必添加到工程里面。

Page 23: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

23

2.2.3 设置综合工程

1) 选择目标器件 点击工程按钮的“Impl Options”弹出设置对话框,在“Device”标签页选择目标器,

选择“EP1C6、-8、QC240”如图 2.22所示。

图 2.22 选择目标器件

2) 设置综合后生成的文件 在如图 2.22所示的对话框中选择“Implementation Results”标签页,出现如图 2.23所

示的界面,将输出的.vqm文件名改为 mc8051_top.vqm(.vqm文件即为最终生成的 8051核模块)。

图 2.23 执行生成选项

3) 选择顶层文件 在如图 2.22 所示的对话框中选择“VHDL”标签页,在“Top_Level”选项中输入

“mc8051_top_”,如图 2.24所示。

Page 24: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

24

图 2.24 选择顶层文件

4) 设置约束频率 在如图 2.22 所示的对话框中选择“Constraints”标签页,在“Frequency”选项中输入约束频率 25MHz,如图 2.25所示。

图 2.25 输入约束频率

2.2.4 综合工程文件

1) 综合工程 在 Synplify软件的主界面按如图 2.17所示“运行”按钮即可对工程进行综合编译;也

可以通过【Run】>>【Synthesize】菜单实现。如果 VHDL代码没有错误,将映射生成输出.vqm文件,这个过程大概需要十几分钟。 生成的 8051 core 位于:工程目录\rev_1\里面,文件名为 mc8051_top.vqm。

2) 查看RTL图 综合编译后我们需要检查顶层设计是否正确,这时可以通过 RTL 图来检查,按工具栏

上的 按钮可以打开 RTL图,我们可以很清晰的看到 8051 core 的顶层结构图,如图 2.26

所示。检查 ROM、RAM模块的连线是否正确,利用工具栏上的 按钮

可以实现放大、缩小等操作。如果没问题我们就可以进行下一步的设计了。

Page 25: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

25

mc8051_core

i_mc8051_core

mc8051_ram

i_mc8051_ram

mc8051_rom

i_mc8051_rom

mc8051_ramx

i_mc8051_ramx

all_rxdwr_o[0]all_txd_o[0]all_rxd_o[0]

p3_o[7:0][7:0]p2_o[7:0][7:0]p1_o[7:0][7:0]p0_o[7:0][7:0]

p3_i[7:0] [7:0]p2_i[7:0] [7:0]p1_i[7:0] [7:0]p0_i[7:0] [7:0]

all_rxd_i[0]

all_t1_i[0]all_t0_i[0]

int1_i[0]int0_i[0]

reset

clk

clkresetint0_i[0]int1_i[0]all_t0_i[0]all_t1_i[0]all_rxd_i[0]

[7:0] rom_data_i[7:0][7:0] ram_data_i[7:0][7:0] p0_i[7:0][7:0] p1_i[7:0][7:0] p2_i[7:0][7:0] p3_i[7:0][7:0] datax_i[7:0]

all_rxd_o[0]all_txd_o[0]

all_rxdwr_o[0]ram_wr_oram_en_o

wrx_o

[7:0]p0_o[7:0]

[7:0]p1_o[7:0]

[7:0]p2_o[7:0]

[7:0]p3_o[7:0]

[15:0]rom_adr_o[15:0]

[7:0]ram_data_o[7:0]

[6:0]ram_adr_o[6:0]

[7:0]datax_o[7:0]

[15:0]adrx_o[15:0]

clockwrenclken

[7:0] data[7:0][6:0] address[6:0]

[7:0]q[7:0]

clock[11:0] address[11:0]

[7:0]q[7:0]

clockwren

[7:0] data[7:0][10:0] address[10:0]

[7:0]q[7:0]

图 2.26 mc8051 core RTL图

2.3 MC8051 core 在 Quartus II中的应用

在看这节内容之前建议大家先看一下 2.4节,了解一下单片机的应用测试程序及测试流程,因为这两部分内容是同时进行,密切关联。 在这一节我们将对 2.1节建立的 Quartus工程做进一步的设计,并将 mc8051 core应用

于设计中。同时对 Quartus的简单应用做进一步的学习。具体包括以下内容: 1. 建立 PLL数字锁相环模块; 2. mc8051 core在 Quartus II中的应用设计; 3. FPGA参数设置; 4. 下载硬件设计到目标 FPGA。

2.3.1 建立 PLL数字锁相环模块

从所周知,单片机需要时钟信号才能运行,那怎样才能得到一个稳定而可靠的时钟 源呢?我们的实验板上有一个 48MHz的有源晶振,但对于 mc8051core来说,频率比较高,需要分频,这时可以用 FPGA自带的 PLL调整时钟频率,PLL输出的时钟频率、相位都可调而且精度很高,下面我们将介绍如何在 Quartus II中调用 PLL模块。

(1) 打开我们在 2.1 节建立的 QuartusII 工程,从【Tool】>>【MegaWizard Plug-In Manager…】打开如图 2.12所示的添加宏单元的向导。

(2) 在图 2.12中按 进入向导第 2页,按图 2.27所示选择 ALTPLL,并选择器件

类型及存放路径,注意标记部分。

Page 26: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

26

图 2.27 MegeWizard Plug-In Manager page2

(3) 在图 2.27中按 进入向导第 3页,按图 2.28所示选择和设置,注意标记部分。由于电路板上的有源晶振频率为 48MHz,所以输入频率设为 48MHz。注意,输入时钟频率不能低于 16MHz。

图 2.28 page3

(4) 在图 2.28中按 进入向导第 4页,在图 2.29所示的窗口选择 PLL的控制信号,如 PLL使能控制“pllena”;异步复位“areset”;锁相输出“locked”等。这里我们不选任何

Page 27: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

27

控制信号。

图 2.29 page4

(5) 在图 2.29中按 进入向导第 5页,按图 2.30所示选择 c0输出频率为 18MHz(c0为片内输出频率),时钟相移和时钟占空比不改变。

图 2.30 page5

(6) 在图 2.30 中按 进入向导第 6 页 c1 的设置界面,由于 c1 不使用,所以直接按 进入向导第 7页 e0的设置界面,这里也不使用,所以直接按 跳过进入向导

第 8页,如图 2.31所示,选中要生成的文件,最后按 完成 PLL兆功能模块的定制。

Page 28: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

28

图 2.31 page8

在完成定制 PLL后,在Quartus II工程文件夹中将产生 pll.bsf文件和 pll.v的Verilog HDL源文件。

2.3.2 mc8051 core在 Quartus II中的应用设计

这一小节将讲述 Quartus II图形设计的基本过程,并完成 mc8051 core图形文件的设计。 具体步骤如下:

(1) 将我们在 2.2节生成的 mc8051_top.vqm文件拷贝 Quartus工程目录里面。 (2) 打开 Quartus 工程,将.vqm文件添加到工程里面,在如图 2.32所示的工程向导中 的工程文件点击鼠标右键,选择“Add/Remove Files in Project”菜单,把.vqm文件添加进来,如图 2.33所示。

图 2.32 添加文件

图 2.33 创建图形模块

(3) 如图 2.33 所示在 mc8051_top.vqm 点击鼠标右键,选择“Creata Symbol Files for Current File”菜单,生成 mc8051_top.bsf文件(该文件为 mc8051_top.vqm模块的图

Page 29: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

29

形文件,.bsf文件通常用于原理图设计文件中)。 (4) 打开 mc8051_test.bdf 文件,在空白处双击鼠标左键,在弹出的对话框中

Libraries>>Project选择 mc8051_top按“OK”按钮添加进来,如图 2.34所示,用同样的方法添加 PLL模块。

图 2.34 添加图形模块

(5) 添加输入输出引脚,如图 2.34所示的 Name栏目中,输入 input添加输入管脚,再用同样的方法输入 output、和 not 分别添加输出管脚和非门。最终的图形设计如图 2.35所示。各模块的连线关系和输入输出引脚的命名按图 2.35所示设置。

1、双击空白处

2、选择要的模块

3、硬认添加

可直接输入模

块名称查找

模块封装

Page 30: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

30

VCCreset INPUT

VCCclock INPUT

VCCint0_i INPUT

VCCint1_i INPUT

VCCt1_i INPUT

VCCt0_i INPUT

VCCrxd_i INPUT

VCCp0_i[7..0] INPUT

VCCp2_i[7..0] INPUT

VCCp3_i[7..0] INPUT

VCCp1_i[7..0] INPUT

p0_o[7..0]OUTPUT

p2_o[7..0]OUTPUT

p3_o[7..0]OUTPUT

rxd_oOUTPUT

txd_oOUTPUT

rxdwr_oOUTPUT

p1_o[7..0]OUTPUTclk

reset

int0_i[0..0]

int1_i[0..0]

all_t0_i[0..0]

all_t1_i[0..0]

all_rxd_i[0..0]

p0_i[7..0]

p1_i[7..0]

p2_i[7..0]

p3_i[7..0]

p0_o[7..0]

p1_o[7..0]

p2_o[7..0]

p3_o[7..0]

all_rxd_o[0..0]

all_txd_o[0..0]

all_rxdwr_o[0..0]

mc8051_top

inst

NOT

inst2

Cy clone

inclk0 f requency : 48.000 MHzOperation Mode: Normal

Clk Ratio Ph (dg) DC (%)

c0 3/8 0.00 50.00

inclk0 c0

pll

inst1

18MHz时钟信号

48MHz输入时钟

图 2.35 mc8051_test顶层设计原理图

2.3.3 FPGA参数设置

这部分的内容包括 FPGA器件的选型、引脚的分配及其它配置和工程的编译及设置。

1) 选择器件型号 每种型号的 FPGA 芯片的管脚可能都不相同,因此在进行管脚分配之前都应选择相应

目标 FPGA芯片型号。这一步其实在 2.1节中已经完成,这里只是让读者了解,在 Quartus II工程创建好后仍然可以选择并修改器件型号。 如图 2.36所示,选择【Assignments 】>>【Device…】打开器件选择对话框如图 2.37

所示。在对话框中,指定所需的目标器件型号,本实验为 EP1C6Q240C8。

图 2.36 打开器件选择对话框

Page 31: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

31

图 2.37 器件选择对话框

2) 分配FPGA管脚 本设计(单片机应用程序请参考 2.4节)中需要用到的管脚(I/O口)复位端、时钟端、

P1口输出端和 UART的两个 I/O口,命名以及与目标 FPGA器件管脚号的关系如表 2.1所示。如其它引脚因为没用到这里就不做分配了,如有需要用户可自已分配。

表 2.1 引脚锁定方法

引脚 信号 引脚 信号 引脚 信号 50 p1_o[0] 176 p1_o [4] 133 txd_o 53 p1_o[1] 47 p1_o [5] 135 rxd_i 54 p1_o[2] 48 p1_o [6] 152 reset 55 p1_o[3] 49 p1_o [7] 28 clock

要执行 FPGA管脚的位置,执行下面步骤: (1) 在主菜单,选择【Assignments】>>【Pins】打开管脚分配对话框如图 2.38所示。 (2) 按照表 2.1在 To栏中,输入各管脚名称,在 Location下拉选择相应的管脚,也可

以在 Location下输入管脚号(如 pin_50)来快速定位,最终分配的结果如图 2.38所示。 (3) 选择【File】>>【Save】来保存分配,然后关闭 Assignment Editor。

图 2.38 分配管脚对话框

Page 32: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

32

3) 器件和管脚的其它设置

点击图 2.37中的 ,打开 Device&Pin Options对话框。在 Device&Pin

Options对话框中选择Configuration标签页按图 2.39所示设置,即采用串行配置器件EPCS1

的主动配置方式。在 Device&Pin Options对话框中选择 Unused Pins标签页进行没有使用管

脚的设置,按照图 2.40所示设置将未使用管脚设置为高阻输入,这样上电后 FPGA的所有

不使用管脚后将进入高阻抗状态。

图 2.39 Configuration设置

图 2.40 未用管脚设置

在设计中一定要将未定义的管脚定义为三态输入,如图 2.40所示。注意一定不能将未定义(不使用)管脚模式设置为输出,并连接到地(As outputs,driving ground)。否则,可能会造成连接在核心板上的 Flash、sram等未使用的芯片冲突而损坏芯片。

4) 设置编译选项并编译硬件系统 (1) 设置编译选项 在图 2.37中的左边框中,选择相应的设置选项进行设置,本实验采用默认的编译设置,

不进行任何修改,若要进行编译选项设置,请参考 Altera的 Quartus II使用手册。 (2) 编译硬件系统 在编译过程中,编译器定位并处理所有工程文件,生成与编译相关的消息与报告,创建

SOF文件及任何可选配置文件。 如图 2.33所示,在Project Navigator窗口的Files标签中的mc8051_test.bqf文件单击鼠标右

键,在弹出的菜单中点击Set at Top-level Entity选项。将mc8051_test.bqf设置为顶层实体。

选择 【Processing】>>【Start Compilation】 进行全程编译,也可以选择工具栏上的

按钮启动编译,对该工程文件进行编译处理,若在编译过程中发现错误,则找出并更正错误,

直至编译成功为止。在编译硬件系统时,状态窗口显示整个编译进程及每个编译阶段所用的

未定义的管脚定

义为三态输入

Page 33: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

33

时间。编译结果显示在 Compilation Report窗口中。整个编译过程需要几分钟,这取决于计

算机的性能以及编译选项设置。

在编译过程中,可能产生一些警告信息,但这些不会影响设计结果。

2.3.4 下载硬件设计到目标 FPGA

成功编译硬件系统后,将产生 mc8051_test.sof 的 FPGA 配置文件输出。本节简单介绍将 SOF文件下载到到目标 FPGA器件的步骤。

(1) 通过 ByteBlaster II下载电缆连接实验箱 JTAG口和主计算机,接通实验箱电源。

(2) 在 QuartusII软件中选择【Tools】>>【Programmer】,也可以按工具栏上的 按钮。

打开编程器窗口并自动打开配置文件(led_test.sof),如图 2.41所示。如果没有自动打开配置文件,则需要自己添加需要编程的配置文件。

(3) 确保编程器窗口左上角的 Hardware Setup栏中硬件已经安装。 (4) 确保 Program/Configure下的方框选中。

(5) 单击 开始使用配置文件对 FPGA进行配置,Progress栏显示配置进度。

如果核心板上的配置绿色指示灯 CONF 亮,说明配置成功。本实验只讲述了将配置文件下载到 FPGA 中,掉电后 FPGA 中的配置数据将丢失。也可以将配置文件写入掉电保持的 EPCS,在上电时使用 EPCS对 FPGA进行配置。

图 2.41编程窗口

2.4 测试 MC8051的 I/O、UART和定时器功能

在这一节中我们将通过一个简单的流水灯、UART程序验证我们的 mc8051 core。

2.4.1 Keil C测试程序

我们的 mc8051 core已经建立起来了,现在需要一个程序进行硬件测试,这里的程序 是指普通的 51程序,可以用 Keil C或其它工具来编译我们写的测试程序,并生成.HEX文件具体的操作过程就不用做介绍了。 如程序清单 2.5所示是一个简单的测试程序,用于测试 I/O、定时器和 UART。定时器

0用来做流水灯控制,从 P1口输出;串口波特率(9600b/s)由定时器 1决定 。

程序清单 2.5 mc8051 IP核测试程序

/**************************************************************************/

/* mc8051 IP核 I/O、Timer、UART 测试程序 */

/* 时钟频率:18MHz */

/* 文件名:mcu_test.c */

/**************************************************************************/

选 中 该选项

确保硬件

已 安 装

Page 34: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

34

#include<reg51.h>

#include<stdio.h>

#define uchar unsigned char

#define uint unsigned int

char xdata Xcount _at_ 0x500; //定义外部 RAM变量

uchar led=0xff; //LED初化值

uchar counter; //500ms计数器

//*************************** 延时程序

void delay(uint n)

{

uint k;

while(n--);

{

for (k=0;k<40000;k++)

{;}

}

}

//*************************** 定时器中断 0程序

void timer0(void) interrupt 1

{

ET0=0; //关定时器 0中断

TR0=0; //不允许定时器 0计数

TH0=0x8a; //重装定时初值(18MHz)

TL0=0xd0;

TR0=1; //允许时器 0计数

if(++counter==25) //500ms计数

{

counter=0;

if(led==0)

led=0xff;

else

led<<=1; //左移 1位

}

P1=led; //输出到 P1口

ET0=1;

}

//*************************** UART程序

char putchar(char c)

{

SBUF = c;

if (c == '\n') SBUF = 0x0D;

while (!TI);

TI = 0;

return (c);

Page 35: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

35

}

//*************************** 主程序

main()

{

SCON = 0x50; //选择模式 1,8位数据格式,使能 UART

PCON |= 0x80; //波特率加倍

TMOD = 0x21; //定时器 0:模式 1;定时器 1:模式 2

TH0=0x8a; //20ms定时初值(18MHz)

TL0=0xd0;

TH1 = 0xF6; //定时器 1自动装载初值,时钟频率 18MHz,0xF6(9600bps)

TL1 = 0xF6;

TR0=1; //允许定时器 0计数

TR1 = 1; //定时器 1计数使能

ET0=1; //允许定时器 0中断

EA=1; //开总中断

while(1)

{

printf("Xcount = %02bX\n",Xcount++);

delay(3000);

}

}

2.4.2 测试步骤

1) 将程序清单 2.5的程序进行编译并生成.hex文件。 2) 将生成的.hex文件代替原 ROM的.hex文件,对 Quartus工程重新编译。 3) 拿出跳线短接帽跳接到 SmartSOPC实验箱上 JP6的 LED0~LED7,使 LED1~LED8分别与 FPGA对应的引脚相连,拿出串口线将实验箱上的串口接口与 PC机的串口相连接。

4) 从【开始】>>【程序】>>【附件】>>【通讯】>>【超级终端】打开超级终端(或者打开串口调试软件),并设置通讯波特率为 9600b/s,8 位数据格式,1 位停止位,无较验位。

5) 打开实验箱电源,下载 FPGA程序。 6) 观察实验箱上的 LED的状态和 PC机上超级终端收到的数据(如图 2.42所示)。

图 2.42串口接收的数据

Page 36: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

36

参考文献

[1] http://oregano.at/ip/8051.htm [2] http://www.icwin.net

Page 37: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

37

附录 A MC8051指令表

附表 1 MC8051指令表

序号 助记符 字节数MC8051 IP 核

时钟周期

标准 8051

指令周期

标准 8051

时钟周期

执行优势

(倍)

1 ACALL 2 2 2 24 12

2 ADD_A_RR 1 2 1 12 6

3 ADD_A_D 2 3 1 12 4

4 ADD_A_ATRI 1 2 1 12 6

5 ADD_A_DATA 2 2 1 12 6

6 ADDC_A_RR 1 2 1 12 6

7 ADDC_A_D 2 3 1 12 4

8 ADDC_A_ATRI 1 2 1 12 6

9 ADDC_A_DATA 2 2 1 12 6

10 AJMP 2 2 2 24 12

11 ANL_A_RR 1 2 1 12 6

12 ANL_A_D 2 3 1 12 4

13 ANL_A_ATRI 1 2 1 12 6

14 ANL_A_DATA 2 2 1 12 6

15 ANL_D_A 2 3 1 12 4

16 ANL_D_DATA 3 3 2 24 8

17 ANL_C_BIT 2 3 2 24 8

18 ANL_C_NBIT 2 3 2 24 8

19 CJNE_A_D 3 3 2 24 8

20 CJNE_A_DATA 3 3 2 24 8

21 CJNE_RR_DATA 3 3 2 24 8

22 CJNE_ATRI_DATA 3 3 2 24 8

23 CLR_A 1 1 1 12 12

24 CLR_C 1 1 1 12 12

25 CLR_BIT 2 2 1 12 6

26 CPL_A 1 1 1 12 12

27 CPL_C 1 1 1 12 12

28 CPL_BIT 2 3 1 12 4

29 DA_A 1 1 1 12 12

30 DEC_A 1 1 1 12 12

31 DEC_RR 1 2 1 12 6

32 DEC_D 2 3 1 12 4

33 DEC_ATRI 1 2 1 12 6

34 DIV_AB 1 3 4 48 16

35 DJNZ_RR 2 2 2 24 12

36 DJNZ_D 3 3 2 24 8

37 INC_A 1 1 1 12 12

Page 38: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

38

序号 助记符 字节数MC8051 IP 核

时钟周期

标准 8051

指令周期

标准 8051

时钟周期

执行优势

(倍)

38 INC_RR 1 2 1 12 6

39 INC_D 2 3 1 12 4

40 INC_ATRI 1 2 1 12 6

41 INC_DPTR 1 4 2 24 6

42 JB 3 3 2 24 8

43 JBC 3 3 2 24 8

44 JC 2 2 2 24 12

45 JMP_A_DPTR 1 1 2 24 24

46 JNB 3 3 2 24 8

47 JNC 2 2 2 24 12

48 JNZ 2 2 2 24 12

49 JZ 2 2 2 24 12

50 LCALL 3 3 2 24 8

51 LJMP 3 3 2 24 8

52 MOV_A_RR 1 2 1 12 6

53 MOV_A_D 2 3 1 12 4

54 MOV_A_ATRI 1 2 1 12 6

55 MOV_A_DATA 2 2 1 12 6

56 MOV_RR_A 1 1 1 12 12

57 MOV_RR_D 2 3 2 24 8

58 MOV_RR_DATA 2 2 1 12 6

59 MOV_D_A 2 2 1 12 6

60 MOV_D_RR 2 2 2 24 12

61 MOV_D_D 3 3 2 24 8

62 MOV_D_ATRI 2 2 2 24 12

63 MOV_D_DATA 3 3 2 24 8

64 MOV_ATRI_A 1 1 1 12 12

65 MOV_ATRI_D 2 3 2 24 8

66 MOV_ATRI_DATA 2 2 1 12 6

67 MOVC_A_ATDPTR 1 2 2 24 12

68 MOVC_A_ATPC 1 2 2 24 12

69 MOVX_A_ATRI 1 2 2 24 12

70 MOVX_A_ATDPTR 1 2 2 24 12

71 MOVX_ATRI_A 1 1 1 12 12

72 MOVX_ATDPTR_A 1 1 2 24 24

73 MOV_C_BIT 2 3 1 12 4

74 MOV_BIT_C 2 2 2 24 12

75 MOV_DPTR_DATA 3 3 2 24 8

76 MUL_AB 1 3 4 48 16

77 NOP 1 1 1 12 12

78 ORL_A_RR 1 2 1 12 6

Page 39: MC8051 IPcore实验教程

广州致远电子有限公司 Tel:(020)22644399 28872569 Fax:338601859 http://www.embedtools.com

39

序号 助记符 字节数MC8051 IP 核

时钟周期

标准 8051

指令周期

标准 8051

时钟周期

执行优势

(倍)

79 ORL_A_D 2 3 1 12 4

80 ORL_A_ATRI 1 2 1 12 6

81 ORL_A_DATA 2 2 1 12 6

82 ORL_D_A 2 3 1 12 4

83 ORL_D_DATA 3 3 2 24 8

84 ORL_C_BIT 2 3 2 24 8

85 ORL_C_NBIT 2 3 2 24 8

86 POP 2 2 2 24 12

87 PUSH 2 3 2 24 8

88 RET 1 3 2 24 8

89 RETI 1 3 2 24 8

90 RL_A 1 1 1 12 12

91 RLC_A 1 1 1 12 12

92 RR_A 1 1 1 12 12

93 RRC_A 1 1 1 12 12

94 SETB_C 1 1 1 12 12

95 SETB_BIT 2 2 1 12 6

96 SJMP 2 2 2 24 12

97 SUBB_A_RR 1 2 1 12 6

98 SUBB_A_D 2 3 1 12 4

99 SUBB_A_ATRI 1 2 1 12 6

100 SUBB_A_DATA 2 2 1 12 6

101 SWAP_A 1 1 1 12 12

102 XCH_A_RR 1 3 1 12 4

103 XCH_A_D 2 4 1 12 3

104 XCH_A_ATRI 1 3 1 12 4

105 XCHD_A_ATRI 1 3 1 12 4

106 XRL_A_RR 1 2 1 12 6

107 XRL_A_D 2 3 1 12 4

108 XRL_A_ATRI 1 2 1 12 6

109 XRL_A_DATA 2 2 1 12 6

110 XRL_D_A 2 3 1 12 4

111 XRL_D_DATA 3 3 2 24 8