差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
fpga项目_使用arduino玩转fpga [2018/04/02 11:32] group003 [步骤4:配置软核到STEP-MAX10 FPGA开发板] |
fpga项目_使用arduino玩转fpga [2019/10/03 22:46] (当前版本) gongyu [步骤5:定制自己的硬件外设] |
||
---|---|---|---|
行 6: | 行 6: | ||
我们知道在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: | 行 29: | ||
现在FP51-1T已经成功移植到STEP-MAX10开发板并且提供了Arduino板卡支持包。 \\ | 现在FP51-1T已经成功移植到STEP-MAX10开发板并且提供了Arduino板卡支持包。 \\ | ||
下面我们使用STEP FPGA开发板来体验一下这个神奇的操作吧! | 下面我们使用STEP FPGA开发板来体验一下这个神奇的操作吧! | ||
+ | |||
=====使用Arduino开发STEP-MAX10 FPGA===== | =====使用Arduino开发STEP-MAX10 FPGA===== | ||
====准备工作==== | ====准备工作==== | ||
行 33: | 行 35: | ||
* 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封装,小巧、携带方便,板载资源也是十分丰富,包含: | ||
行 44: | 行 47: | ||
<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库的二次封装,不需要太多的单片机基础和编程基础,只需简单学习后,你就可以快速的进行开发。 \\ | ||
行 78: | 行 83: | ||
进入该目录 \\ | 进入该目录 \\ | ||
- | **git submodule update --init --recursive** \\ | + | **git submodule update - - init - - recursive** 注意init和recursive前面是两个 - \\ |
更新所有的submodules \\ | 更新所有的submodules \\ | ||
行 100: | 行 105: | ||
* 36个用户可扩展I/O,这36个可扩展I/O可以与底板外设连接 | * 36个用户可扩展I/O,这36个可扩展I/O可以与底板外设连接 | ||
底板外设模块如下图所示: \\ | 底板外设模块如下图所示: \\ | ||
+ | |||
{{:: 底板外设接口图.png?360 |底板外设接口}} | {{:: 底板外设接口图.png?360 |底板外设接口}} | ||
{{:db.png?650|}} | {{:db.png?650|}} | ||
- | <WRAP centeralign>**step_base_board_demo模块划分**</WRAP> | + | |
+ | <WRAP centeralign> **step_base_board_demo模块划分** </WRAP> | ||
直接从GitHub上clone的项目已默认编译,使用Micro USB数据线连接PC和开发板后,使用Quartus Prime软件可以直接下载到STEP-MAX10芯片。 \\ | 直接从GitHub上clone的项目已默认编译,使用Micro USB数据线连接PC和开发板后,使用Quartus Prime软件可以直接下载到STEP-MAX10芯片。 \\ | ||
{{ ::stepmax10编译结果.png?440 |}} | {{ ::stepmax10编译结果.png?440 |}} | ||
如果不熟悉Quartus prime的使用可以先学习这里的上手教程[[quartus_prime的使用]]。 \\ | 如果不熟悉Quartus prime的使用可以先学习这里的上手教程[[quartus_prime的使用]]。 \\ | ||
如果不熟悉FPGA的开发可以先学习入门教程[[step-max10入门教程]]。 \\ | 如果不熟悉FPGA的开发可以先学习入门教程[[step-max10入门教程]]。 \\ | ||
+ | |||
====步骤2:Arduino IDE安装板卡支持包和软件库==== | ====步骤2:Arduino IDE安装板卡支持包和软件库==== | ||
===1.安装板卡支持包=== | ===1.安装板卡支持包=== | ||
行 128: | 行 137: | ||
<WRAP centeralign>**Arduino中安装库文件**</WRAP> | <WRAP centeralign>**Arduino中安装库文件**</WRAP> | ||
用户在程序中如果需要用到某个库,只需要在**项目**——**加载库**,选择相应的库,即可将该库的头文件包含到应用程序中。 | 用户在程序中如果需要用到某个库,只需要在**项目**——**加载库**,选择相应的库,即可将该库的头文件包含到应用程序中。 | ||
+ | |||
====步骤3:在Arduino IDE中开发应用程序==== | ====步骤3:在Arduino IDE中开发应用程序==== | ||
在Arduino IDE **工具**一栏,选择 **开发板**为**StepFPGA M10**, 搭建好软硬件环境,我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现以下功能: | 在Arduino IDE **工具**一栏,选择 **开发板**为**StepFPGA M10**, 搭建好软硬件环境,我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现以下功能: | ||
行 142: | 行 152: | ||
这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开"Show Verbose Output"选项,这样信息栏中会给出详细的编译结果。 \\ | 这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开"Show Verbose Output"选项,这样信息栏中会给出详细的编译结果。 \\ | ||
{{::fp51arduino编译结果.png?500|}} | {{::fp51arduino编译结果.png?500|}} | ||
+ | |||
====步骤4:配置软核到STEP-MAX10 FPGA开发板==== | ====步骤4:配置软核到STEP-MAX10 FPGA开发板==== | ||
===1.串口一键下载=== | ===1.串口一键下载=== | ||
行 172: | 行 183: | ||
\\ | \\ | ||
**GitHub\step_fpga\submodules\PulseRain_FP51_MCU\submodules\PulseRain_rtl_lib\LCD** 下面的那些文件 \\ | **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\submodules\PulseRain_rtl_lib\LCD** 下面的那些文件 \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
2. 给新增加的外设分配SFR 地址, 地址分配见 \\ | 2. 给新增加的外设分配SFR 地址, 地址分配见 \\ | ||
\\ | \\ | ||
+ | |||
**GitHub\step_fpga\submodules\PulseRain_FP51_MCU\common\SFR.svh** \\ | **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\common\SFR.svh** \\ | ||
+ | |||
**parameter unsigned [DATA_WIDTH - 1 : 0] LCD_CSR_ADDR = 8'hC1;** \\ | **parameter unsigned [DATA_WIDTH - 1 : 0] LCD_CSR_ADDR = 8'hC1;** \\ | ||
+ | |||
**parameter unsigned [DATA_WIDTH - 1 : 0] LCD_DATA_ADDR = 8'hC2;** \\ | **parameter unsigned [DATA_WIDTH - 1 : 0] LCD_DATA_ADDR = 8'hC2;** \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
3. 更改 **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\peripherals\peripherals.sv** \\ | 3. 更改 **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\peripherals\peripherals.sv** \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
把新外设增加到**Peripheral bus** 上. 由于新的外设增加了新的管脚, 所以除了**peripherals.sv** 之外, \\ | 把新外设增加到**Peripheral bus** 上. 由于新的外设增加了新的管脚, 所以除了**peripherals.sv** 之外, \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
**GitHub\step_fpga\submodules\PulseRain_FP51_MCU\source\PulseRain_FP51_MCU.sv** 和 \\ | **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\source\PulseRain_FP51_MCU.sv** 和 \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
**GitHub\step_fpga\source\Mustang_fast.sv** 也要相应修改, 在**port list** 中增加管脚. 比如 \\ | **GitHub\step_fpga\source\Mustang_fast.sv** 也要相应修改, 在**port list** 中增加管脚. 比如 \\ | ||
+ | |||
\\ | \\ | ||
**output wire LCD_BL,** \\ | **output wire LCD_BL,** \\ | ||
- | **output wire LCD_DAT_CMD,** \\ | + | |
+ | **output wire LCD_DAT_CMD,** \\ | ||
**output wire LCD_RES,** \\ | **output wire LCD_RES,** \\ | ||
+ | |||
**inout wire LCD_SDA,** \\ | **inout wire LCD_SDA,** \\ | ||
+ | |||
**inout wire LCD_SCL,** \\ | **inout wire LCD_SCL,** \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
4. 对新增的管脚做**Constrain**, 比如**Pin assignment**, **voltage level** 等 \\ | 4. 对新增的管脚做**Constrain**, 比如**Pin assignment**, **voltage level** 等 \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
5. 由于新增加了**SFR**, **Arduino** 编译器的SFR定义也要相应修改. 编译器的SFR头文件通常被安装在 \\ | 5. 由于新增加了**SFR**, **Arduino** 编译器的SFR定义也要相应修改. 编译器的SFR头文件通常被安装在 \\ | ||
+ | |||
\\ | \\ | ||
+ | |||
**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** \\ | ||
- | \\ | ||
- | ====相关设计资源==== | + | |
- | **Copy from PulseRain Technology** | + | |
+ | #### 相关设计资源 | ||
* {{::step_fpga_m10_user_guide_cn.pdf|STEP FPGA FP51-1T MCU中文用户手册 }} | * {{::step_fpga_m10_user_guide_cn.pdf|STEP FPGA FP51-1T MCU中文用户手册 }} | ||
- | *{{::datasheet_fp8051_1t.pdf|FP51-1T Datasheet}} | + | * {{::datasheet_fp8051_1t.pdf|FP51-1T Datasheet}} |
- | *{{::pulserain_8_bit_mcu_trm.pdf|FP51-1T Technical Reference Manual}} | + | * {{::pulserain_8_bit_mcu_trm.pdf|FP51-1T Technical Reference Manual}} |
- | *[[https://github.com/PulseRain/Mustang/tree/step_fpga|Repository for FPGA]] | + | * [[https://github.com/PulseRain/Mustang/tree/step_fpga|Repository for FPGA]] |
- | *[[https://github.com/PulseRain/Arduino_M10_IDE/tree/step_fpga|Repository for Arduino IDE package]] | + | * [[https://github.com/PulseRain/Arduino_M10_IDE/tree/step_fpga|Repository for Arduino IDE package]] |
- | *[[https://github.com/PulseRain/M10_high_speed_config_rtl|TRM for M10 High Speed Configuration]] | + | * [[https://github.com/PulseRain/M10_high_speed_config_rtl|TRM for M10 High Speed Configuration]] |
- | *[[https://github.com/PulseRain|Repository for Peripherals]] | + | * [[https://github.com/PulseRain|Repository for Peripherals]] |