差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
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]] \\+