差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
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]] ​\\