[经验] 【小梅哥FPGA进阶教程】第十章 MC8051软核在FPGA上的使用 下

[复制链接]
发表于 2017-2-17 22:17:50   920 查看 4 回复 显示全部楼层 倒序浏览
分享
2.2 MC8051 core 的组装
到现在为止,MC8051核RTL级实现的所有模块都已经具备了,接下来就使用将这些模块组装到一起,得到一个含完整mc8051核的Quartus· II工程,在新建工程之前我们还要对一些 mc8051 core 的源文件进行更新修改,使之符合我们的设计。
2.2.1 更新 mc8051 core 的顶层源文件
由于默认提供的源码中的顶层设计文件中的存储模块(ROM、RAM)是仿真时使用的, 现在要进行硬件测试,所以必须改成我们实际用到的 ROM、RAM 模块(也就是前一节我们生成的 ROM、RAM 模块)。
(1) 首先在工程目录下新建一个 mc8051core 的文件夹,将 mc8051 core 的源代码文件(位于:\mc8051_Source\VHDL 目录)拷贝到 mc8051core 文件夹。
(2) 打开 mc8051_Source\VHDL 目录下的 mc8051_p.vhd 文件,将原文件中 ROM、RAM 模块调用的代码(如程序清单 2.1 所示)全部替换为符合本设计的程序代码(如程序清单 2.2 所示)。
程序清单 2.1 mc8051_p.vhd 文件代修改代码

图片37-1.jpg
图片37-2.jpg



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

图片38-1.jpg
图片38-2.jpg



(3) 打开 mc8051core目录下的 mc8051_top_struc.vhd 文件,首先做如程序清单 2.3 所示修改,其中行末标注“--new”的行为新增加的内容。然后将原文件中 ROM、RAM 模块调用部分的代码修改成如程序清单 2.4 所示的代码。这样就完成了源文件更新修改。
程序清单 2.3 mc8051_top_struc.vhd 文件新增的代码

图片39-1.jpg
图片39-2.jpg



其中,

图片40.jpg


图片41.jpg
就是新增加的内容
程序清单 2.4 mc8051_top_struc.vhd 文件中更新的源代码

图片42-1.jpg
图片42-2.jpg



2.2.2 添加mc8051 Core相关文件到Quartus II工程中
在将mc8051的源码添加到Quartus II工程前,我们需要首先对部分文件的文件名进行更改。原版的VHDL源码,部分文件的文件名末尾加了有“_”,而实际源码中的模块名没有加“_”,因此,如果将这些文件直接添加到Quartus II工程中,编译就会报错,提示找不到模块。

图片43.jpg

因此我们首先将源码文件以“_”结尾的文件名中的“_”全部去掉,例如,将“addsub_core_.vhd”更改为“addsub_core.vhd”。当所有的文件名更改完成之后,方可添加这些文件到工程中。
在Quartus II软件中,点击【Project】>>Add/Remove Files in Project】,在弹出的对话框中,点击浏览文件符号,如图 2.21 所示:

图片44.jpg
图 2.21 添加文件按钮

选择mc8051core文件夹下的所有非配置文件(即以cfg结尾的文件不用选中),然后点击打开按钮,即可将文件添加到工程中来。如图 2.22 所示:

图片45.jpg
图 2.22 选择需要添加的文件
点“OK”完成文件的添加。  
2.2.3设置工程顶层文件在Files栏中,选中mc8051_top.vhd文件,点击右键,选择“Set as Top-Level Entity”,即可将mc8051_top.vhd设置为工程的顶层文件,(这里设置为顶层主要是为了封装IP核方便,临时性的,并不是最终作为工程顶层)。如图 2.23 所示:

图片46.jpg
图 2.23 选择需要添加的文件
2.2.4 综合工程文件
      (1) 综合工程
在 Quartus II 软件的主界面,点击分析和综合按钮 图片47.jpg (或者直接按键盘组合键ctrl+k),即可开始对工程进行分析和综合。这个过程大概需要几分钟到十几分钟,视软件版本和电脑配置,耗费时间有差异。
      (2) 查看RTL图
综合编译后我们需要检查顶层设计是否正确,这时可以通过 RTL 图来检查,双击RTL Viewer,如图2.24 所示

图片48.jpg
图 2.24 点击打开RTL Viewer

按钮可以打开 RTL 图,我们可以很清晰的看到 8051 core 的顶层结构图,如图 2.25所示。如果没问题我们就可以进行下一步的设计了。

图片49.jpg
图 2.25 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 数字锁相环模块
众所周知,单片机需要时钟信号才能运行,那怎样才能得到一个稳定而可靠的时钟源呢?我们的实验板上有一个 50MHz 的有源晶振,但对于 mc8051core 来说,频率比较高,需要分频,这时可以用 FPGA 自带的 PLL 调整时钟频率,PLL 输出的时钟频率、相位都可调而且精度很高,下面我们将介绍如何在 Quartus II 中调用 PLL 模块。
(1) 打开我们在 2.1 节建立的 QuartusII 工程,从【Tool】>>【MegaWizard Plug-In Manager…打开如图 2.13 所示的添加宏单元的向导。
(2) 在图 2.13 中按 图片50.jpg 进入向导第 2 页,按图 2.26 所示输入“pll”选择 ALTPLL,并选择器件类型及存放路径,注意标记部分。

图片51.jpg
图 2.26 MegeWizard Plug-In Manager page2

(3) 在图 2.26 中按 图片52.jpg 进入向导第 3 页,按图 2.27 所示选择和设置,注意标记部分。由于电路板上的有源晶振频率为 50MHz,所以输入频率设为 50MHz。

图片53.jpg
图 2.27 page3 设置输入时钟频率

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

图片55.jpg
图 2.28 page4 设置控制信号

(5) 在图 2.28中按连续按下 图片56.jpg 直到进入向导第8页,按图2.30所示选择c0输出频率为18MHz,时钟相移和占空比不改变。

图片57.jpg
图 2.29 page8 设置时钟输出频率

(6) 在图 2.29 中按 图片58.jpg 进入向导第 9 页 c1 的设置界面,由于c1以及后续其他输出都不再使用,因此,这里可以直接跳过其他所有输出的配置,直到最后按 图片59.jpg 完成 PLL 兆功能模块的定制。
在完成定制 PLL 后,在 Quartus II工程文件夹中将产生 pll.bsf文件和 pll.v 的Verilog HDL源文件。
2.3.2 建立MC8051应用工程,
这一小节将讲述如何使用以上移植的mc8051的核建立一个实际的Quartus II 工程并能够在芯航线FPGA学习套件的主板上运行。 具体步骤如下:

      (1) 在工程顶层中例化mc8051核
      (2) 在工程顶层中例化pll
      (3) 对工程进行分析和综合
      (4) 分配引脚
      (5) 编译并生成FPGA配置文件
      (6) 使用USB Blaster配置FPGA

打开之前建立的Quartus II工程,打开mc8051_test.v文件,首先编写模块的端口,这个模块的端口也是工程最终的对外引脚,这里直接设置模块端口为mc8051的IO。 如程序清单2.5的第1行至第23行所示。
接着在工程中例化mc8051核,这里就是例化mc8051_top。Quartus II中,可以直接在Verilog文件中例化使用VHDL编写的模块,因此这里直接按照Verilog的格式例化mc8051_top即可,如程序清单2.5的第33行至第56行所示。注意,mc8051核的复位端口是高电平复位,而我们开发板上是将复位信号接到了轻触按键上,轻触按键在没有被按下时,输出的是高电平,因此该信号不能直接接到mc8051的复位输入端,需要先将其取反,因此直接在例化时将Rst_n取反后连接到mc8051的reset端即可(第36行)。
然后在工程中例化pll核,例化pll的代码如程序清单2.5的第27行至第31行所示,pll的时钟输入端连接到芯片的时钟输入信号Clk50M上,c0输出为18M,连接到mc8051的时钟输入端口clk上。

程序清单 2.5 mc8051_test.v 文件的源代码
图片60-1.jpg
图片60-2.jpg
图片60-3.jpg
图片60-4.jpg



接着我们将mc8051_test.v文件设置为工程顶层,然后点击分析和综合按钮(或者按下键盘组合键ctrl+k)来对工程进行分析和综合。
分析和综合完成后,我们打开Pin planner,进行引脚的锁定。依次点击【Assignments】>>【Pin Planner】,如图 2.30所示:

图片61.jpg
图 2.30 打开引脚分配卡

这里,我们只需要分配我们使用到的部分外设,没有使用到的暂不做引脚分配。本例中,我们将在Keil中编写软件代码测试mc8051的定时器、串口和P1口。我们使用开发板上板载的4个led灯进行测试P1口P1_o[0:3]的测试。因此我们需要分配引脚的端口有P1_o[0:3],all_rxd_i,all_txd_o,Clk50M以及Rst_n。其他没有使用的端口暂不分配引脚。引脚分配表如下所示:

图片62.jpg

将以上引脚对应分配给相应的信号即可。分配结果如图 2.31所示:

图片63.jpg
图 2.31 引脚分配结果

引脚分配完毕后,关闭Pin Planner,点击Start Compilation(或者键盘组合键ctrl+L)·来对工程进行全编译并生成FPGA配置文件(.sof)。
编译完毕后,使用USB Mini线连接芯航线FPGA开发板,连接上USB Blaster,然后打开Programmer,在Hardware Setup中选择USB Blaster。添加mc8051_test.sof文件,然后点击start即可将生成的配置文件下载到FPGA芯片中。如图 2.32所示:

图片64.jpg
图 2.32 引脚分配结果

2.4 测试 MC8051 的 I/O、UART 和定时器功能
在这一节中我们将通过一个简单的流水灯、UART 程序验证我们的 mc8051 core。

2.4.1 Keil C 测试程序
我们的 mc8051 core 已经建立起来了,现在需要一个程序进行硬件测试,这里的程序
是指普通的 51 程序,可以用 Keil C 或其它工具来编译我们写的测试程序,并生成.HEX 文件具体的操作过程就不用做介绍了。
如程序清单 2.6 所示是一个简单的测试程序,用于测试 I/O、定时器和 UART。定时器 0 用来做流水灯控制,从 P1 口输出;串口波特率(9600b/s)由定时器 1 决定 。

程序清单 2.6 mc8051 IP核测试程序
图片65-1.jpg
图片65-2.jpg
图片65-3.jpg
图片65-4.jpg
图片65-5.jpg



2.4.2 测试步骤
将程序清单 2.6 的程序进行编译并生成.hex 文件,为了方便大家测试,我们提供了一个创建好的Keil工程,在“mc8051_test\Cproject\uart_led”目录下,使用Keil C51 v4打开。
在Quartus II软件中,依次选择【Tools】>>【In-System Memory Content Editor】,打开In-System Memory Content Editor工具,右侧选择Hardware为USB-Blaster [USB-0],如图 2.33所示:
图片66.jpg
图 2.33 选择下载器

然后工具会自动搜索到器件和器件中存在的支持该工具的节点,搜索完成后整个工具界面如图 2.34所示:

图片67.jpg
图 2.34 In-System Memory Content Editor界面

鼠标选中ROM0(这里是我在配置ROM核的时候修改的索引名,如果你在配置的时候忘了修改索引名,则这里默认显示的名字应该是NONE),点击右键,选择Import Data From File。定位到C工程目录下,我这里为:E:\CoreCourse_fpga\mc8051_test\Cproject\uart_led,选择uart_led_test.hex文件并打开。这时候我们可以看到,工具下方已经有数据了,我们点击 图片68.jpg 下传按钮以将数据传输进FPGA中的ROM中。如图 2.35所示:

图片69.jpg
图 2.35 下载程序到mc8051的ROM中

然后,我们打开电脑上的串口调试工具(任意一个你熟悉的就行),我这里使用友善串口调试助手,选择板子端口对应串口,设置波特率为9600,数据位为8位,无校验位,1位停止位,接收格式为ASCII。然后点击打开串口,则可以看到串口接收窗口中接收到了开发板传输过来的数据。同时板子开发板上的4个LED灯循环依次点亮。如图 2.36所示:

图片70.jpg
图 2.36 串口接收的数据

当我们的程序调试无误后需要固定到芯片中永久使用时,就将编译好的hex文件名称修改为mcu_test.hex,替换工程目录下原有的mcu_test.hex文件,然后重新编译文件,然后配置FPGA即可。


小梅哥
2016年2月26日星期五
芯航线电子工作室


小梅哥店铺链接:https://xiaomeige.taobao.com/
关于学习资料,小梅哥系列所有能够开放的资料和更新(包括视频教程,程序代码,教程文档,工具软件,开发板资料)都会发布在我的云分享。(记得订阅)链接:http://yun.baidu.com/share/home?uk=402885837&view=share#category/type=0
赠送芯航线AC6102型开发板配套资料预览版下载链接:链接:http://pan.baidu.com/s/1slW2Ojj 密码:9fn3
赠送SOPC公开课链接和FPGA进阶视频教程。链接:http://pan.baidu.com/s/1bEzaFW 密码:rsyh


附录 A MC8051 指令表
附表 1 MC8051 指令表
图片72-1.jpg
图片72-2.jpg
图片72-3.jpg
图片72-4.jpg
图片72-5.jpg
图片72-6.jpg
图片72-7.jpg








mc8051_test.rar

7.48 MB, 下载次数: 22, 下载积分: 积分 -1 分

第十章_MC8051软核在FPGA上的使用.pdf

3.58 MB, 下载次数: 9, 下载积分: 积分 -1 分

标签:Altera FPGA

工程师

发表于 2017-3-20 13:23:51  
谢谢分享,学习学习。。。
回复

点赞 举报

技术员

发表于 2017-3-21 14:30:04  

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6
小梅哥铁粉,感谢小梅哥分享
回复

点赞 举报

技术员

发表于 2017-4-9 22:19:03  
小梅哥铁粉,感谢小梅哥分享
回复

点赞 举报

助理工程师

发表于 2017-4-10 09:11:04  
学习了,谢谢!
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

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

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区