概述
一、
准备工具有:
1.Altera FPGA开发板 型号:EP4CE6F17C8
配置51软核过程中我发现配置成功与否和Altera FPGA型号关系不大,可以根据不同的AlteraFPGA型号来选定本工程的Device
2.两根Mini USB接口的数据线
一根用于供电和串口通信,另一根用于配置程序。
3.USB Blaster下载器
4.Quartus II开发工具(13版本)
其他的Quartus II版本没有尝试过
5.MDK开发工具
用来开发51,keil4和keil5皆可
6.此FPGA的用户手册
用于为配置好的51软核连接好必要的外围线路,如时钟信号,复位信号,外设连线等。
二、
接下来是配置51软核的网页教程和MC8051核的源文件。
网页教程
MC8051核源文件下载网址:
https://www.oreganosystems.at/products/ip-cores/8051-ip-core
选中Source Files并下载。由于是国外站点,下载速度会稍慢些,文件大小约200KB+。
三、简单总结
FPGA配置51软核就是利用片内资源直接构建成51系统,这得益于FPGA实现了51系统内各个模块的构建,这才能将它们组合起来成为51系统。
因为下载的MC8051核源文件中片内ROM和RAM存储模块不符合我们的使用要求,因此Quartus II新建一个空白工程后需要利用Quartus II自带的MegaWizard Plug-In Manager工具构建符合要求的ROM和RAM存储模块,还有一个RAMX外置存储模块。
新建PLL锁相环模块用于给MC8051提供时钟信号,其中ROM、RAM和RAMX在一定范围内可以任意调整,PLL锁相环模块输出频率也可调,但是不能超出MC8051的规定最大容量和运行频率。其他的寄存器根据需要也可以增加,增加端口和引脚等,是不是越来越体现出FPGA硬件资源灵活的调整性?
原文的构建工程篇幅非常长,如果不想按部就班来构建工程,可以直接使用我完成好的工程文件。
只需要更改FPGA型号和更改引脚关联并重新编译综合就行。但FPGA型号最好是和我FPGA同一时代的系列产品,拿年代久远的型号不一定成功。
原文中没有给出完成的工程文件,我这边就打包在百度网盘了,方便有需要的人下载,附带有PL2303串口驱动程序。
百度网盘链接:
https://pan.baidu.com/s/1jb97JOUb1tUOoJdh_aIFbQ 提取码: shr1
四、成品
点亮LED、串口通信、数码管显示。这里51系统的外设是关联FPGA板载的LED,数码管。
51c程序代码:
#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 计数器
//*************************** 延时程序
sbit p20=P2^0;
sbit p21=P2^1;
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==35) //500ms 计数
{
/*counter=0;
if(led==0xf0)
led=0xff;
else
led<<=1; //左移 1 位 */
}
//P1=led; //输出到 P0 口
ET0=1;
}
//*************************** UART 程序
char putchar(char c)
{
SBUF = c;
if (c == 'n') SBUF = 0x0d;
while (!TI);
TI = 0;
return (c);
}
//*************************** 主程序
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; //开总中断
Xcount=0;
while(1)
{
P1=0xf1;
p20=0;
p21=1;
P0=0xf0;
printf("Xcount = %02bXn",Xcount++);
printf("Hello World.n");
delay(300000);
delay(300000);
delay(300000);
delay(300000);
p20=1;
p21=0;
P0=0xf0;
delay(300000);
delay(300000);
delay(300000);
//P1=0xf0;
}
}
五、
关于FPGA配置51软核,我只粗略介绍了一些内容,或许有不正确或不全面的地方,建议想专业学习FPGA开发的读者寻找更专业的书籍和教程资源来学习。
最后
以上就是孤独大米为你收集整理的FPGA配置MC8051IP软核的全部内容,希望文章能够帮你解决FPGA配置MC8051IP软核所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复