差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
fpga项目_使用arduino玩转fpga [2018/09/06 15:43] group003 [步骤1:获取PulseRain FP51-1T MCU软核] |
fpga项目_使用arduino玩转fpga [2019/04/04 15:05] (当前版本) group003 [步骤5:定制自己的硬件外设] |
||
---|---|---|---|
行 84: | 行 84: | ||
(**注意转发源码时请保留源码开头的版权声明**) \\ | (**注意转发源码时请保留源码开头的版权声明**) \\ | ||
- | ===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结构图}} | ||
行 102: | 行 102: | ||
{{:: 底板外设接口图.png?360 |底板外设接口}} | {{:: 底板外设接口图.png?360 |底板外设接口}} | ||
{{:db.png?650|}} | {{:db.png?650|}} | ||
- | <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安装板卡支持包和软件库==== | + | |
- | ===1.安装板卡支持包=== | + | ### 步骤2:Arduino IDE安装板卡支持包和软件库 |
+ | |||
+ | #### 1.安装板卡支持包 | ||
Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。 \\ | Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。 \\ | ||
打开Arduino IDE,打开 **文件**——**首选项**——**附加开发板管理器网址**,添加如下链接: \\ | 打开Arduino IDE,打开 **文件**——**首选项**——**附加开发板管理器网址**,添加如下链接: \\ | ||
行 120: | 行 122: | ||
该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 |]]。 \\ | ||
行 128: | 行 130: | ||
<WRAP centeralign>**Arduino中安装库文件**</WRAP> | <WRAP centeralign>**Arduino中安装库文件**</WRAP> | ||
用户在程序中如果需要用到某个库,只需要在**项目**——**加载库**,选择相应的库,即可将该库的头文件包含到应用程序中。 | 用户在程序中如果需要用到某个库,只需要在**项目**——**加载库**,选择相应的库,即可将该库的头文件包含到应用程序中。 | ||
- | ====步骤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 | ||
行 142: | 行 145: | ||
这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开"Show Verbose Output"选项,这样信息栏中会给出详细的编译结果。 \\ | 这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开"Show Verbose Output"选项,这样信息栏中会给出详细的编译结果。 \\ | ||
{{::fp51arduino编译结果.png?500|}} | {{::fp51arduino编译结果.png?500|}} | ||
- | ====步骤4:配置软核到STEP-MAX10 FPGA开发板==== | + | |
- | ===1.串口一键下载=== | + | ### 步骤4:配置软核到STEP-MAX10 FPGA开发板 |
+ | |||
+ | #### 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区。 \\ | ||
行 153: | 行 158: | ||
<WRAP centeralign>**Arduino中开发STEP-MAX10 FPGA演示效果**</WRAP> | <WRAP centeralign>**Arduino中开发STEP-MAX10 FPGA演示效果**</WRAP> | ||
\\ | \\ | ||
- | ===2.片上闪存的配置(Onchip Flash Memory)=== | + | |
+ | #### 2.片上闪存的配置(Onchip Flash Memory) | ||
Step FPGA M10采用Single Compressed Image设置, 在该设置下, 其片上闪存的地址如下图所示: | Step FPGA M10采用Single Compressed Image设置, 在该设置下, 其片上闪存的地址如下图所示: | ||
{{ :max10闪存配置.png |}} \\ | {{ :max10闪存配置.png |}} \\ | ||
行 161: | 行 167: | ||
当用户用Arduino IDE 编译Sketch以后,可以把Arduino生成的.hex 文件的最后一行删除,并与bitmap.hex合并,并将合并后的文件命名为synth/output_files/ufm.hex。 \\ | 当用户用Arduino IDE 编译Sketch以后,可以把Arduino生成的.hex 文件的最后一行删除,并与bitmap.hex合并,并将合并后的文件命名为synth/output_files/ufm.hex。 \\ | ||
这样在生成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", \\ | ||
Mustang project 内含一个叫post_flow.tcl的script.这个script会自动做文件合成与转换. \\ | Mustang project 内含一个叫post_flow.tcl的script.这个script会自动做文件合成与转换. \\ | ||
行 167: | 行 175: | ||
并放到synth/output_files/之下, post_flow.tcl 会自动将其包含到最终的FPGA Image里面. \\ | 并放到synth/output_files/之下, post_flow.tcl 会自动将其包含到最终的FPGA Image里面. \\ | ||
使用Quartus Prime下载.pof文件到FPGA内部Flash中。 \\ | 使用Quartus Prime下载.pof文件到FPGA内部Flash中。 \\ | ||
- | ====步骤5:定制自己的硬件外设==== | + | |
+ | ### 步骤5:定制自己的硬件外设 | ||
如果用户需要增加新的外设的话, 具体步骤如下(以LCD为例) \\ | 如果用户需要增加新的外设的话, 具体步骤如下(以LCD为例) \\ | ||
1. 编写RTL模块, 并且simulate, 比如 \\ | 1. 编写RTL模块, 并且simulate, 比如 \\ | ||
- | \\ | + | 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 \\ |
- | \\ | + | 把新外设增加到Peripheral bus上. 由于新的外设增加了新的管脚, 所以除了peripherals.sv 之外, \\ |
- | 3. 更改 **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\peripherals\peripherals.sv** \\ | + | GitHub\step_fpga\submodules\PulseRain_FP51_MCU\source\PulseRain_FP51_MCU.sv 和 \\ |
- | \\ | + | GitHub\step_fpga\source\Mustang_fast.sv 也要相应修改, 在port list 中增加管脚. 比如 \\ |
- | 把新外设增加到**Peripheral bus** 上. 由于新的外设增加了新的管脚, 所以除了**peripherals.sv** 之外, \\ | + | output wire LCD_BL, \\ |
- | \\ | + | output wire LCD_DAT_CMD, \\ |
- | **GitHub\step_fpga\submodules\PulseRain_FP51_MCU\source\PulseRain_FP51_MCU.sv** 和 \\ | + | output wire LCD_RES, \\ |
- | \\ | + | inout wire LCD_SDA, \\ |
- | **GitHub\step_fpga\source\Mustang_fast.sv** 也要相应修改, 在**port list** 中增加管脚. 比如 \\ | + | inout wire LCD_SCL, \\ |
- | \\ | + | 4. 对新增的管脚做Constrain, 比如Pin assignment, voltage level 等 \\ |
- | **output wire LCD_BL,** \\ | + | 5. 由于新增加了SFR, Arduino 编译器的SFR定义也要相应修改. 编译器的SFR头文件通常被安装在 \\ |
- | **output wire LCD_DAT_CMD,** \\ | + | C:\Users\...\AppData\Local\Arduino15\packages\StepFPGA_M10\tools\M10_compiler\...\SDCC\include\mcs51\8051.h \\ |
- | **output wire LCD_RES,** \\ | + | |
- | **inout wire LCD_SDA,** \\ | + | |
- | **inout wire LCD_SCL,** \\ | + | |
- | \\ | + | |
- | 4. 对新增的管脚做**Constrain**, 比如**Pin assignment**, **voltage level** 等 \\ | + | |
- | \\ | + | |
- | 5. 由于新增加了**SFR**, **Arduino** 编译器的SFR定义也要相应修改. 编译器的SFR头文件通常被安装在 \\ | + | |
- | \\ | + | |
- | **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中文用户手册 }} | + | 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]] \\ |