我是靠谱客的博主 孤独大米,最近开发中收集的这篇文章主要介绍FPGA配置MC8051IP软核,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、
准备工具有:
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软核所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部