差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
fpga_arduino_8051 [2019/04/21 17:59] gongyu 创建 |
fpga_arduino_8051 [2019/10/04 15:49] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ======使用Arduino玩转FPGA====== | + | #### 使用Arduino玩转FPGA |
- | ====鱼与熊掌,不可兼得?==== | + | |
+ | --- | ||
+ | #### 鱼与熊掌,不可兼得? | ||
FPGA作为一种非常底层的硬件可编程逻辑芯片,实现数字逻辑电路可谓非常灵活,但是对于习惯了C语言和MCU编程的同学来说,从底层电路写到上层应用还是要费一番工夫的。\\ | FPGA作为一种非常底层的硬件可编程逻辑芯片,实现数字逻辑电路可谓非常灵活,但是对于习惯了C语言和MCU编程的同学来说,从底层电路写到上层应用还是要费一番工夫的。\\ | ||
行 6: | 行 8: | ||
我们知道在MCU(Microcontroller Unit)中运行的是CPU硬核,比如Intel的8051核,ARM的Cortex-M核,Arduino板上用的AVR核等,各大半导体厂商在CPU Core的基础上集成了各种各样的外设模块,以适用于不同的应用需求。用户需要关心的就是这款MCU有哪些资源,寄存器如何配置。如果我想根据自己的应用需求来定制一款MCU,但是半导体厂商又不理我怎么办呢?办法总是有的,那就回到MCU出生之前的状态。通过将处理器内核移植到FPGA中,使用FPGA内部的逻辑资源和存储资源来构建一个软MCU,再通过内部总线挂载需要的外设电路就构成了一个定制化的MCU,我们称之为软核。 \\ | 我们知道在MCU(Microcontroller Unit)中运行的是CPU硬核,比如Intel的8051核,ARM的Cortex-M核,Arduino板上用的AVR核等,各大半导体厂商在CPU Core的基础上集成了各种各样的外设模块,以适用于不同的应用需求。用户需要关心的就是这款MCU有哪些资源,寄存器如何配置。如果我想根据自己的应用需求来定制一款MCU,但是半导体厂商又不理我怎么办呢?办法总是有的,那就回到MCU出生之前的状态。通过将处理器内核移植到FPGA中,使用FPGA内部的逻辑资源和存储资源来构建一个软MCU,再通过内部总线挂载需要的外设电路就构成了一个定制化的MCU,我们称之为软核。 \\ | ||
- | ====软核中的野马战斗机——FP51-1T==== | + | |
+ | #### 软核中的野马战斗机——FP51-1T | ||
目前,在FPGA中移植软核已经是一种常见的做法,但是大多数MCU软核都是FPGA厂商定制的,比如Altera的Nios II、Xilinx的MicroBlaze和Lattice的MICO32/MICO8,这些软核并不完全开源并且对用户做了诸多限制。国外有一家名叫PulseRain Technology的公司开发并开源了一款高性能的MCU软核[[https://www.pulserain.com/fp51|FP51-1T]],该软核虽然基于8位的8051体系,但是它巧妙地实现了RISC架构,并且优化了指令集,大部分指令都可以单时钟周期实现,主频可以飙到100MHz以上,以二战时彪悍的野马战斗机P51来命名这款软核再合适不过了。 \\ | 目前,在FPGA中移植软核已经是一种常见的做法,但是大多数MCU软核都是FPGA厂商定制的,比如Altera的Nios II、Xilinx的MicroBlaze和Lattice的MICO32/MICO8,这些软核并不完全开源并且对用户做了诸多限制。国外有一家名叫PulseRain Technology的公司开发并开源了一款高性能的MCU软核[[https://www.pulserain.com/fp51|FP51-1T]],该软核虽然基于8位的8051体系,但是它巧妙地实现了RISC架构,并且优化了指令集,大部分指令都可以单时钟周期实现,主频可以飙到100MHz以上,以二战时彪悍的野马战斗机P51来命名这款软核再合适不过了。 \\ | ||
\\ | \\ | ||
行 28: | 行 31: | ||
现在FP51-1T已经成功移植到STEP-MAX10开发板并且提供了Arduino板卡支持包。 \\ | 现在FP51-1T已经成功移植到STEP-MAX10开发板并且提供了Arduino板卡支持包。 \\ | ||
下面我们使用STEP FPGA开发板来体验一下这个神奇的操作吧! | 下面我们使用STEP FPGA开发板来体验一下这个神奇的操作吧! | ||
- | =====使用Arduino开发STEP-MAX10 FPGA===== | + | |
- | ====准备工作==== | + | #### 使用Arduino开发STEP-MAX10 FPGA |
+ | |||
+ | ##### 准备工作 | ||
* 小脚丫FPGA开发板 STEP-MAX10 08系列 | * 小脚丫FPGA开发板 STEP-MAX10 08系列 | ||
* Intel Quantus Prime软件 | * Intel Quantus Prime软件 | ||
* Arduino IDE | * Arduino IDE | ||
- | ===准备1:STEP-MAX10 FPGA开发板 — FPGA型号Intel MAX10-08系列=== | + | |
+ | ###### 准备1:STEP-MAX10 FPGA开发板 — FPGA型号Intel MAX10-08系列 | ||
STEP-MAX10是小脚丫FPGA系列中基于Intel/Altera公司的FPGA芯片MAX10M08的FPGA开发板,它同样也采用了DIP40封装,小巧、携带方便,板载资源也是十分丰富,包含: | STEP-MAX10是小脚丫FPGA系列中基于Intel/Altera公司的FPGA芯片MAX10M08的FPGA开发板,它同样也采用了DIP40封装,小巧、携带方便,板载资源也是十分丰富,包含: | ||
* 4路轻触按键 | * 4路轻触按键 | ||
行 44: | 行 50: | ||
<WRAP centeralign> **小脚丫STEP-MAX10实物图片** </WRAP> | <WRAP centeralign> **小脚丫STEP-MAX10实物图片** </WRAP> | ||
- | ===准备2:Intel Quantus Prime软件=== | + | |
+ | ###### 准备2:Intel Quantus Prime软件 | ||
Quartus Prime是Altera被Intel收购之后推出的免费、强大的设计软件,包括了从设计输入到综合直至优化、验证以及仿真等各个阶段所需的一切功能。Quartus Prime Lite是大批量器件系列的理想设计工具,可以免费下载使用。 | Quartus Prime是Altera被Intel收购之后推出的免费、强大的设计软件,包括了从设计输入到综合直至优化、验证以及仿真等各个阶段所需的一切功能。Quartus Prime Lite是大批量器件系列的理想设计工具,可以免费下载使用。 | ||
Quartus Prime下载安装、使用☞: [[Quartus Prime]] | Quartus Prime下载安装、使用☞: [[Quartus Prime]] | ||
- | ===准备3:Arduino IDE软件=== | + | |
+ | ###### 准备3:Arduino IDE软件 | ||
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)两大核心部分。Arduino IDE基于processing IDE开发,对于初学者来说极易掌握,同时有足够的灵活性。Arduino语言是基于wiring语言开发的,是对 avr-gcc库的二次封装,不需要太多的单片机基础和编程基础,只需简单学习后,你就可以快速的进行开发。 \\ | Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)两大核心部分。Arduino IDE基于processing IDE开发,对于初学者来说极易掌握,同时有足够的灵活性。Arduino语言是基于wiring语言开发的,是对 avr-gcc库的二次封装,不需要太多的单片机基础和编程基础,只需简单学习后,你就可以快速的进行开发。 \\ | ||
Arduino IDE的下载安装 | Arduino IDE的下载安装 | ||
行 55: | 行 63: | ||
---- | ---- | ||
- | ====操作步骤==== | + | #### 操作步骤 |
- 获取PulseRain FP51-1T MCU软核 | - 获取PulseRain FP51-1T MCU软核 | ||
- Arduino IDE安装板卡和软件支持包 | - Arduino IDE安装板卡和软件支持包 | ||
行 65: | 行 73: | ||
<WRAP centeralign> **M10 BSP for Arduino IDE(Copy from PulseRain) ** </WRAP> | <WRAP centeralign> **M10 BSP for Arduino IDE(Copy from PulseRain) ** </WRAP> | ||
- | ====步骤1:获取PulseRain FP51-1T MCU软核==== | + | ##### 步骤1:获取PulseRain FP51-1T MCU软核 |
- | ===1.Clone 软核源代码=== | + | |
+ | ###### 1.Clone 软核源代码 | ||
FP51-1T的工程源代码已经开源在Github上,你可用如下的命令得到代码 \\ | FP51-1T的工程源代码已经开源在Github上,你可用如下的命令得到代码 \\ | ||
行 84: | 行 93: | ||
(**注意转发源码时请保留源码开头的版权声明**) \\ | (**注意转发源码时请保留源码开头的版权声明**) \\ | ||
- | #### 2.软核外设介绍 | + | ###### 2.软核外设介绍 |
FP51-1T是一个兼容8051体系的高性能8位MCU,通过巧妙地RISC架构实现,大部分指令都可以单周期实现,主频可以跑到96MHz。为方便调试,在软核内部集成了OCD(On Chip Debugger - 片上调试)模块,PC主机只要通过RS232接口就可以实现程序的下载、单步执行、设置断点等调试功能。另外,该软核通过Wishbone总线挂载了多个外设模块,如Timer、UART、SPI/I2C、PWM、Voice CODEC、microSD socket、 SRAM、onchip ADC等,用户可以裁剪和添加这些外设。 \\ | FP51-1T是一个兼容8051体系的高性能8位MCU,通过巧妙地RISC架构实现,大部分指令都可以单周期实现,主频可以跑到96MHz。为方便调试,在软核内部集成了OCD(On Chip Debugger - 片上调试)模块,PC主机只要通过RS232接口就可以实现程序的下载、单步执行、设置断点等调试功能。另外,该软核通过Wishbone总线挂载了多个外设模块,如Timer、UART、SPI/I2C、PWM、Voice CODEC、microSD socket、 SRAM、onchip ADC等,用户可以裁剪和添加这些外设。 \\ | ||
{{ ::fp51-1t结构图.png?800 |FP51-1T MCU结构图}} | {{ ::fp51-1t结构图.png?800 |FP51-1T MCU结构图}} | ||
行 108: | 行 117: | ||
如果不熟悉FPGA的开发可以先学习入门教程[[step-max10入门教程]]。 \\ | 如果不熟悉FPGA的开发可以先学习入门教程[[step-max10入门教程]]。 \\ | ||
- | ### 步骤2:Arduino IDE安装板卡支持包和软件库 | + | ##### 步骤2:Arduino IDE安装板卡支持包和软件库 |
- | #### 1.安装板卡支持包 | + | ###### 1.安装板卡支持包 |
Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。 \\ | Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。 \\ | ||
打开Arduino IDE,打开 **文件**——**首选项**——**附加开发板管理器网址**,添加如下链接: \\ | 打开Arduino IDE,打开 **文件**——**首选项**——**附加开发板管理器网址**,添加如下链接: \\ | ||
行 122: | 行 131: | ||
该BSP主要包括三部分:FP51 Core、[[http://sdcc.sourceforge.net/|SDCC]] Compiler和Target Downloade Tools | 该BSP主要包括三部分:FP51 Core、[[http://sdcc.sourceforge.net/|SDCC]] Compiler和Target Downloade Tools | ||
- | #### 2.安装软件库 | + | ###### 2.安装软件库 |
Arduino之所以开发简单快速,是因为Arduino官方和众多的开源硬件爱好者贡献了大量的应用软件库,对于常见外设接口或模块的软件库都可以从网上下载到,而且能非常方便的嵌入到我们的程序中。\\ | Arduino之所以开发简单快速,是因为Arduino官方和众多的开源硬件爱好者贡献了大量的应用软件库,对于常见外设接口或模块的软件库都可以从网上下载到,而且能非常方便的嵌入到我们的程序中。\\ | ||
PulseRain 为FT51-1T MCU提供了常用外设接口的软件库如I2C,microSD,CODEC,PWM,ESP8266等,而且有详细的文档说明 ☞[[https://www.pulserain.com/m10 |]]。 \\ | PulseRain 为FT51-1T MCU提供了常用外设接口的软件库如I2C,microSD,CODEC,PWM,ESP8266等,而且有详细的文档说明 ☞[[https://www.pulserain.com/m10 |]]。 \\ | ||
行 131: | 行 140: | ||
用户在程序中如果需要用到某个库,只需要在**项目**——**加载库**,选择相应的库,即可将该库的头文件包含到应用程序中。 | 用户在程序中如果需要用到某个库,只需要在**项目**——**加载库**,选择相应的库,即可将该库的头文件包含到应用程序中。 | ||
- | ### 步骤3:在Arduino IDE中开发应用程序 | + | ##### 步骤3:在Arduino IDE中开发应用程序 |
在Arduino IDE **工具**一栏,选择 **开发板**为**StepFPGA M10**, 搭建好软硬件环境,我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现以下功能: | 在Arduino IDE **工具**一栏,选择 **开发板**为**StepFPGA M10**, 搭建好软硬件环境,我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现以下功能: | ||
*在串口以115200 bps 输出 Hello World!然后输出PS2键盘的Scancode | *在串口以115200 bps 输出 Hello World!然后输出PS2键盘的Scancode | ||
行 146: | 行 155: | ||
{{::fp51arduino编译结果.png?500|}} | {{::fp51arduino编译结果.png?500|}} | ||
- | ### 步骤4:配置软核到STEP-MAX10 FPGA开发板 | + | ##### 步骤4:配置软核到STEP-MAX10 FPGA开发板 |
- | #### 1.串口一键下载 | + | ###### 1.串口一键下载 |
Arduino开发板之所以能够使用串口实现一键下载,是因为在主控制器内部有Bootloader,而在我们的软核内部没有使用软件bootloader,而是在软核中嵌入了OCD (onchip debugger)模块,相当于MCU内部的硬件BOOT模块,通过外接串口同样可以实现串口一键下载。只不过程序下载到FPGA内部的SRAM区,掉电数据会丢失,如果想程序掉电不丢失还是需要将Arduino IDE 生成的.hex文件通过Quatus prime烧录到MAX10内部的Flash区。 \\ | Arduino开发板之所以能够使用串口实现一键下载,是因为在主控制器内部有Bootloader,而在我们的软核内部没有使用软件bootloader,而是在软核中嵌入了OCD (onchip debugger)模块,相当于MCU内部的硬件BOOT模块,通过外接串口同样可以实现串口一键下载。只不过程序下载到FPGA内部的SRAM区,掉电数据会丢失,如果想程序掉电不丢失还是需要将Arduino IDE 生成的.hex文件通过Quatus prime烧录到MAX10内部的Flash区。 \\ | ||
行 159: | 行 168: | ||
\\ | \\ | ||
- | #### 2.片上闪存的配置(Onchip Flash Memory) | + | ###### 2.片上闪存的配置(Onchip Flash Memory) |
Step FPGA M10采用Single Compressed Image设置, 在该设置下, 其片上闪存的地址如下图所示: | Step FPGA M10采用Single Compressed Image设置, 在该设置下, 其片上闪存的地址如下图所示: | ||
{{ :max10闪存配置.png |}} \\ | {{ :max10闪存配置.png |}} \\ | ||
行 168: | 行 177: | ||
这样在生成FPGA Image时,ufm.hex 会被自动包含在最后生成的Image里面。 | 这样在生成FPGA Image时,ufm.hex 会被自动包含在最后生成的Image里面。 | ||
- | #### 3.烧录程序到MAX10 FPGA内部Flash | + | ###### 3.烧录程序到MAX10 FPGA内部Flash |
用户可以用Intel Quartus Prime打开synth / Mustang_fast.qpf , 并点击"Start a new compilation", \\ | 用户可以用Intel Quartus Prime打开synth / Mustang_fast.qpf , 并点击"Start a new compilation", \\ | ||
行 176: | 行 185: | ||
使用Quartus Prime下载.pof文件到FPGA内部Flash中。 \\ | 使用Quartus Prime下载.pof文件到FPGA内部Flash中。 \\ | ||
- | ### 步骤5:定制自己的硬件外设 | + | ##### 步骤5:定制自己的硬件外设 |
如果用户需要增加新的外设的话, 具体步骤如下(以LCD为例) \\ | 如果用户需要增加新的外设的话, 具体步骤如下(以LCD为例) \\ | ||
1. 编写RTL模块, 并且simulate, 比如 \\ | 1. 编写RTL模块, 并且simulate, 比如 \\ | ||
行 198: | 行 206: | ||
C:\Users\...\AppData\Local\Arduino15\packages\StepFPGA_M10\tools\M10_compiler\...\SDCC\include\mcs51\8051.h \\ | C:\Users\...\AppData\Local\Arduino15\packages\StepFPGA_M10\tools\M10_compiler\...\SDCC\include\mcs51\8051.h \\ | ||
- | ====相关设计资源==== | + | #### 相关设计资源 |
- | \\ | + | * {{::step_fpga_m10_user_guide_cn.pdf|STEP FPGA FP51-1T MCU中文用户手册 }} \\ |
- | Copy from PulseRain Technology \\ | + | * {{::datasheet_fp8051_1t.pdf|FP51-1T Datasheet}} \\ |
- | {{::step_fpga_m10_user_guide_cn.pdf|STEP FPGA FP51-1T MCU中文用户手册 }} \\ | + | * {{::pulserain_8_bit_mcu_trm.pdf|FP51-1T Technical Reference Manual}} \\ |
- | {{::datasheet_fp8051_1t.pdf|FP51-1T Datasheet}} \\ | + | * [[https://github.com/PulseRain/Mustang/tree/step_fpga|Repository for FPGA]] \\ |
- | {{::pulserain_8_bit_mcu_trm.pdf|FP51-1T Technical Reference Manual}} \\ | + | * [[https://github.com/PulseRain/Arduino_M10_IDE/tree/step_fpga|Repository for Arduino IDE package]] \\ |
- | [[https://github.com/PulseRain/Mustang/tree/step_fpga|Repository for FPGA]] \\ | + | * [[https://github.com/PulseRain/M10_high_speed_config_rtl|TRM for M10 High Speed Configuration]] \\ |
- | [[https://github.com/PulseRain/Arduino_M10_IDE/tree/step_fpga|Repository for Arduino IDE package]] \\ | + | * [[https://github.com/PulseRain|Repository for Peripherals]] \\ |
- | [[https://github.com/PulseRain/M10_high_speed_config_rtl|TRM for M10 High Speed Configuration]] \\ | + | |
- | [[https://github.com/PulseRain|Repository for Peripherals]] \\ | + |