一、
准备工具有:
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程序代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89#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软核内容请搜索靠谱客的其他文章。
发表评论 取消回复