MyFPGA Forum

 找回密码
 注册
搜索
查看: 1522|回复: 0
打印 上一主题 下一主题

【参考案例】在友晶科技DE10-Standard开发板上实现8051单片机

[复制链接]
跳转到指定楼层
1#
发表于 2022-8-25 17:01:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Doreen 于 2022-9-5 11:44 编辑

DE10-Standard工程下载地址http://mail.terasic.com.cn/~dongliu/8051_on_FPGA/8051_de10_standard.zip

DE1-SOC 程下载地址http://mail.terasic.com.cn/~dongliu/8051_on_FPGA/8051_De1_SoC.zip

如果论坛图片加载不畅,可以直接跳转到友晶知乎网页阅读完整步骤: https://zhuanlan.zhihu.com/p/557378175



       链接https://www.sohu.com/a/252890756_796852 是基于北邮学生自主设计的FPGA开发板实现8051单片机的设计,下面将演示如何参考该链接将8051的设计移植到DE10-Standard开发板。

      首先是在FPGA内配置51软核。就是利用FPGA片内资源直接构建成51系统。链接中提供的Quartus工程 FPGA8051.zip 使用的是https://www.oreganosystems.at/ 网站提供的开源8051内核。将该工程移植到DE10-Standard以后 8051内核源码全部在src文件夹下:



      然后是添加其他必要组件。有了这个核还不是完整的8051核,还需要给它添加 rom、ram和扩展ramx。rom 用来存放51单片机的程序,也就是存放单片机C程序编译后的 .hex文件。ram 用来运行51单片机的程序。

       以下是8051微控制器IP完整框图,更多8051 IP核的说明请前往https://www.oreganosystems.at网站下载其说明手册。



       当然还要添加PLL IP等(这个在后面会讲到)。

       最后是引脚分配和编译成FPGA配置文件.sof文件(这个在后面会讲到)。

       因为参考工程 FPGA8051.zip 里面已经完成了这些工作,现在我们只需将这个工程移植到友晶DE10-Standard开发板上即可,所以只会涉及到一些细小的改动,下面我们将整个移植过程呈现如下:

       整个移植过程

(1)FPGA8051.zip 工程里面的器件是Cyclone IV,先将FPGA 器件改为DE10-Standard 的 FPGA 器件 5CSXFC6DEF31C6。

(2)依次打开 rom、ram 和ramx IP,把device从Cyclone IV 改为 Cyclone V,然后点击Finish:



点击Finish的时候会提示你先指定hex文件,你可以点击Browse直接指定到8051_de10_standard\Example\main.hex文件(当然这个hex文件 后面是可以改的,我们后面会讲到),然后再点击Finish。

ram IP 的器件选择修改如下:

ramx IP 的器件选择修改如下:

(3) 重建PLL IP。因为Cyclone V 的 PLL IP和Cyclone IV 的不一样,需要删掉之前的PLL IP然后重建:

在IP Catalog里面找到 PLL Intel FPGA IP:

然后设置PLL IP的参数如下:

注意因为新的PLL Intel FPGA IP 是有rst信号的,而之前的PLL IP 没有:

所以在mc8051.v文件里面例化 PLL 时要记得设定rst信号:

(4)DE10-Standard上的数码管硬件是共阳极的,是低电平点亮,而 FPGA8051.zip 里面的代码是高电平点亮:

所以我们在mc8051.v文件里将数码管信号进行取反操作:

(5)8051的rst信号是高电平有效,DE10-Standard的按键则是低电平有效,所以进行移植时需要对DE10-Standard的按键进行取反:

(6)引脚分配。先点击分析综合:




分析综合完成以后就可以按照 DE10-Standard_v.x.x.x_SystemCD\Manual\DE10-Standard_User_manual.pdf手册的第3.6.1章节分配管脚:

注意其中数码管的分配,DE10-Standard手册第24页标注了数码管段顺序是这样:

但是在main.c里面数码管顺序如下所示:

所以我们在数码管引脚分配的时候需要这样调整:

(7)因为北邮板子和DE10-Standard外设略有不同,工程FPGA8051.zip 的mc8051.v 內能对应到DE10-Standard上主要有开关(switch) 、灯(led)、数码管(digit_seg)以及按钮(buttom)等这些信号,其他不支持的pin可以在.qsf 文件中设置为virtual pin ,否则在编译的时候quartus会随意分配引脚(然后就会看到DE10-Standard其他数码管乱闪)。具体做法是在引脚分配完后打开工程文件夹下的mc8051.qsf文件并添加这些内容:

#de10-standart not support pin
set_instance_assignment -name VIRTUAL_PIN ON -to digit_cath*
set_instance_assignment -name VIRTUAL_PIN ON -to digit_seg[0]
set_instance_assignment -name VIRTUAL_PIN ON -to rgb_led1*
set_instance_assignment -name VIRTUAL_PIN ON -to rgb_led2*
set_instance_assignment -name VIRTUAL_PIN ON -to input_pin*
set_instance_assignment -name VIRTUAL_PIN ON -to output_pin*

至此,移植工作就完成了,点击Quartus的编译按钮完成编译,生成sof文件。

下面开始验证这个 在DE10-Standard开发板上实现的 8051单片机。

首先是安装51单片机开源编译器SDCC,进入ToolChain文件夹双击sdcc-3.6.0-x64-setup.exe,然后一路按Next直至完成安装即可。

2. .将C代码编译成十六进制文件。进入Example文件夹,双击make.bat执行该批处理文件:

这就把事先写好的main.c程序编译成十六进制文件main.hex:

3. 进入MC8051-RTL文件夹,双击Quartus工程文件mc8051.qpf打开工程,然后点击Tools——>In-System Memory Content Editor:

(a) 如下图,将 Hardware 设为 连接DE10-Standard 开发板的 USB Blaster 口;

(b) 在Device处选择@2: 5CSEBA6(.|ES)/5CSEMA6/..(0X02D020DD)的设备;

(c) 点击 ... 选择前面编译生成的8051_de10_standard\MC8051-RTL\output_files\mc8051.sof文件,然后点击蓝色的下载按钮进行FPGA配置;

(d)配置完成后点击Import Data from File...,找到8051_de10_standard\Example\main.hex文件,点击Open。


4. 点击instance Manager栏的写入键,如果看到流水灯、数码管0显示数字,则实验成功。


正确的实验现象请参考B站视频:https://www.bilibili.com/video/BV17t4y1E71f?spm_id_from=333.999.0.0


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-26 04:12 , Processed in 0.044640 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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