差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
fpga项目_使用arduino玩转fpga [2018/04/02 11:01] group003 [步骤4:配置软核到STEP-MAX10 FPGA开发板] |
fpga项目_使用arduino玩转fpga [2019/04/04 15:05] (当前版本) group003 [步骤5:定制自己的硬件外设] |
||
|---|---|---|---|
| 行 61: | 行 61: | ||
| - 配置软核到STEP-MAX10 FPGA开发板 | - 配置软核到STEP-MAX10 FPGA开发板 | ||
| - 定制自己的硬件外设 | - 定制自己的硬件外设 | ||
| + | 使用Arduino IDE开发STEP-MAX10 FPGA的操作流程图如下: | ||
| {{ ::m10_bsp_for_arduino_ide.png?700 |m10_bsp_for_arduino_ide}} | {{ ::m10_bsp_for_arduino_ide.png?700 |m10_bsp_for_arduino_ide}} | ||
| <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上,你可用如下的命令得到代码 \\ | ||
| 行 77: | 行 78: | ||
| 进入该目录 \\ | 进入该目录 \\ | ||
| - | **git submodule update --init --recursive** \\ | + | **git submodule update - - init - - recursive** 注意init和recursive前面是两个 - \\ |
| 更新所有的submodules \\ | 更新所有的submodules \\ | ||
| 行 83: | 行 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结构图}} | ||
| 行 101: | 行 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,打开 **文件**——**首选项**——**附加开发板管理器网址**,添加如下链接: \\ | ||
| 行 114: | 行 117: | ||
| <WRAP centeralign>**Arduino中添加板卡支持包链接**</WRAP> | <WRAP centeralign>**Arduino中添加板卡支持包链接**</WRAP> | ||
| 确定后,打开 **工具**——**开发板**——**开发板管理器**,在搜索框中输入“STEPFPGA”会出现名为StepFPGA_M10的板卡支持包,点击**安装** | 确定后,打开 **工具**——**开发板**——**开发板管理器**,在搜索框中输入“STEPFPGA”会出现名为StepFPGA_M10的板卡支持包,点击**安装** | ||
| - | {{ ::arduino安装板卡支持包2.png?400 |}} | + | {{ ::arduino安装板卡支持包2.png?500 |}} |
| <WRAP centeralign>**Arduino中安装板卡支持包**</WRAP> | <WRAP centeralign>**Arduino中安装板卡支持包**</WRAP> | ||
| 下载安装完成后在板卡管理器中有StepFPGA M10这个选项。 | 下载安装完成后在板卡管理器中有StepFPGA M10这个选项。 | ||
| 该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 |]]。 \\ | ||
| - | 我们在Arduino IDE中打开 **项目**——**加载库**——**管理库**,在库管理器窗口搜索框中输入“M10”,会有M10LCD,M10PWM等外设库。点击 **安装** 需要的库文件。这里我们安装M10LCD,M10PWMM,10SevenSeg三个库文件。 | + | 我们在Arduino IDE中打开 **项目**——**加载库**——**管理库**,在库管理器窗口搜索框中输入“M10”,会有M10LCD,M10PWM等外设库。 \\ |
| + | 点击 **安装** 需要的库文件。这里我们安装M10LCD,M10PWMM,10SevenSeg三个库文件。 | ||
| {{ ::arduino加载库.png?500 |}} | {{ ::arduino加载库.png?500 |}} | ||
| <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 | ||
| 行 140: | 行 145: | ||
| 这里建议用户在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.串口一键下载 | ||
| 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区。 \\ | ||
| 行 151: | 行 158: | ||
| <WRAP centeralign>**Arduino中开发STEP-MAX10 FPGA演示效果**</WRAP> | <WRAP centeralign>**Arduino中开发STEP-MAX10 FPGA演示效果**</WRAP> | ||
| \\ | \\ | ||
| - | ===片上闪存的配置(Onchip Flash Memory)=== | + | |
| + | #### 2.片上闪存的配置(Onchip Flash Memory) | ||
| Step FPGA M10采用Single Compressed Image设置, 在该设置下, 其片上闪存的地址如下图所示: | Step FPGA M10采用Single Compressed Image设置, 在该设置下, 其片上闪存的地址如下图所示: | ||
| - | {{:max10闪存配置.png|}} | + | {{ :max10闪存配置.png |}} \\ |
| - | ===烧录程序到MAX10 FPGA内部Flash=== | + | 在上图所示的4个分区中, 分区1和2一共有32KB, 被用来存放代码。 PulseRain FP51-1T MCU的缺省配置有32KB Instruction RAM和8KB Data RAM. 分区1和2 正好和FP51-1T MCU的 Instruction RAM 大小相对应.在上电启动时,source / code_mem_power_on_loader.sv 会把用户的代码从闪存分区1和2载入到Instruction RAM 中并执行。 \\ |
| + | 闪存分区3目前被用来存放LOGO图片,该图片可以在LCD上显示。STEP Base Board自带的LCD有132 x 162的分辨率。这里建议用户存放一个大小为128 x 154的真彩图片在这个分区。 \\ | ||
| + | 在 synth / output_files下有一个叫pic2hex.py的Python Script,可以把图片转换为 .hex 文件。该目录下的 bitmap.hex 就是由同一目录下的pulse_step.png生成的。 \\ | ||
| + | 当用户用Arduino IDE 编译Sketch以后,可以把Arduino生成的.hex 文件的最后一行删除,并与bitmap.hex合并,并将合并后的文件命名为synth/output_files/ufm.hex。 \\ | ||
| + | 这样在生成FPGA Image时,ufm.hex 会被自动包含在最后生成的Image里面。 | ||
| + | |||
| + | #### 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会自动做文件合成与转换. \\ | ||
| 行 160: | 行 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** | + | \\ |
| - | *{{::datasheet_fp8051_1t.pdf|FP51-1T Datasheet}} | + | Copy from PulseRain Technology \\ |
| - | *{{::pulserain_8_bit_mcu_trm.pdf|FP51-1T Technical Reference Manual}} | + | {{::step_fpga_m10_user_guide_cn.pdf|STEP FPGA FP51-1T MCU中文用户手册 }} \\ |
| - | *[[https://github.com/PulseRain/Mustang/tree/step_fpga|Repository for FPGA]] | + | {{::datasheet_fp8051_1t.pdf|FP51-1T Datasheet}} \\ |
| - | *[[https://github.com/PulseRain/Arduino_M10_IDE/tree/step_fpga|Repository for Arduino IDE package]] | + | {{::pulserain_8_bit_mcu_trm.pdf|FP51-1T Technical Reference Manual}} \\ |
| - | *[[https://github.com/PulseRain/M10_high_speed_config_rtl|TRM for M10 High Speed Configuration]] | + | [[https://github.com/PulseRain/Mustang/tree/step_fpga|Repository for FPGA]] \\ |
| - | *[[https://github.com/PulseRain|Repository for Peripherals]] | + | [[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|Repository for Peripherals]] \\ | ||