2020-12-21 16:27:44 +08:00
|
|
|
|
# 芯来科技蜂鸟FPGA评估板
|
2020-09-01 08:47:21 +08:00
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
|
2020-12-21 16:27:44 +08:00
|
|
|
|
**蜂鸟FPGA系列评估板** 是由芯来科技公司推出的用于一系列测试评估芯来RISC-V内核处理器的FPGA评估板。
|
2020-09-01 08:47:21 +08:00
|
|
|
|
|
2020-12-21 16:27:44 +08:00
|
|
|
|
更多关于 **蜂鸟FPGA评估板** 开发板的详细资料请参见:
|
|
|
|
|
|
|
|
|
|
* [Nuclei DDR200T开发板](https://nucleisys.com/developboard.php#ddr200t)
|
|
|
|
|
* [Nuclei MCU200T开发板](https://nucleisys.com/developboard.php#mcu200t)
|
|
|
|
|
* [蜂鸟开发板](https://nucleisys.com/developboard.php#hbird100t)
|
2020-09-01 08:47:21 +08:00
|
|
|
|
|
|
|
|
|
### 板载资源
|
|
|
|
|
|
|
|
|
|
| 硬件 | 描述 |
|
|
|
|
|
| --- | --- |
|
|
|
|
|
| 内核 | Nuclei RISC-V N/NX/UX 内核 |
|
|
|
|
|
| 架构 | RV32 or RV64 |
|
|
|
|
|
| 主频 | 8MHz or uncertain freq |
|
|
|
|
|
|
|
|
|
|
**注意**: 这个上面烧写的是FPGA bitstream文件,所以处理器内核版本根据型号来定,通过修改**rtconfig.py**中的**NUCLEI_SDK_CORE**.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 工具安装
|
|
|
|
|
|
|
|
|
|
### 安装工具链
|
|
|
|
|
|
|
|
|
|
请根据[安装Nuclei RISC-V GCC Toolchain和OpenOCD](https://doc.nucleisys.com/nuclei_sdk/quickstart.html#setup-tools-and-environment) 来安装依赖的工具。
|
|
|
|
|
|
|
|
|
|
### 添加环境变量
|
|
|
|
|
|
|
|
|
|
将Nuclei RISC-V GCC Toolchain和OpenOCD的环境变量进行设置。
|
|
|
|
|
|
|
|
|
|
#### Windows
|
|
|
|
|
|
|
|
|
|
假设工具安装在 **D:\Software\Nuclei**目录下, 则可以修改系统环境变量**PATH**,
|
|
|
|
|
将**D:\Software\Nuclei\gcc\bin;D:\Software\Nuclei\openocd\bin;**增加到**PATH**中。
|
|
|
|
|
|
|
|
|
|
或者在ENV工具命令行中运行
|
|
|
|
|
|
|
|
|
|
~~~cmd
|
|
|
|
|
set PATH=D:\Software\Nuclei\gcc\bin;D:\Software\Nuclei\openocd\bin;%PATH%
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
#### Linux
|
|
|
|
|
|
|
|
|
|
假设工具安装在 **~/Software/Nuclei**目录下, 通过在Linux的``.bashrc``增加如下一行代码
|
|
|
|
|
来添加环境变量。
|
|
|
|
|
|
|
|
|
|
~~~bash
|
|
|
|
|
export PATH=~/Software/Nuclei/gcc/bin:~/Software/Nuclei/openocd/bin:$PATH
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
或者在ENV工具命令行中运行
|
|
|
|
|
|
|
|
|
|
~~~bash
|
|
|
|
|
export PATH=~/Software/Nuclei/gcc/bin:~/Software/Nuclei/openocd/bin:$PATH
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
**注意**: 对应的RISC-V GCC和OPENOCD的路径请替换成自己安装的路径。
|
|
|
|
|
|
|
|
|
|
## 烧写及执行
|
|
|
|
|
|
2020-12-21 16:27:44 +08:00
|
|
|
|
### 驱动设置
|
|
|
|
|
|
|
|
|
|
驱动安装设置,请参考[Nuclei FPGA开发板介绍](https://nucleisys.com/upload/files/fpga/doc/Nuclei_FPGA_DebugKit_Intro_202012.pdf)
|
2020-09-01 08:47:21 +08:00
|
|
|
|
|
|
|
|
|
### 编译程序
|
|
|
|
|
|
|
|
|
|
下载好[RT-Thread](https://github.com/RT-Thread/rt-thread)的代码和[ENV工具](https://www.rt-thread.org/document/site/tutorial/env-video/)以后。
|
|
|
|
|
|
|
|
|
|
按照ENV工具的教程, 在**rt-thread\bsp\nuclei\hbird_eval**目录打开ENV工具命令行。
|
|
|
|
|
|
|
|
|
|
**注意**: 请确保Nuclei GCC和Nuclei OpenOCD的路径设置正确无误。
|
|
|
|
|
|
|
|
|
|
1. 运行 ``pkgs --update``来下载最新的依赖的**Nuclei SDK**开发包
|
|
|
|
|
2. **可选**: 运行 ``menuconfig``来进行内核配置
|
|
|
|
|
3. 运行 ``scons -c``清理之前的编译结果
|
2020-09-01 09:17:33 +08:00
|
|
|
|
4. 根据你当前评估的Nuclei RISC-V内核情况,修改 ``rtconfig.py``中的``NUCLEI_SDK_CORE``和``NUCLEI_SDK_DOWNLOAD``参数。
|
|
|
|
|
- ``NUCLEI_SDK_CORE``可选的参数为[Supported Nuclei Cores](https://doc.nucleisys.com/nuclei_sdk/develop/buildsystem.html#core)
|
|
|
|
|
- ``NUCLEI_SDK_DOWNLOAD``可选的参数为``ilm``,``flash``或者``flashxip``, 关于该选项的说明参见[Supported Download Modes](https://doc.nucleisys.com/nuclei_sdk/develop/buildsystem.html#download)
|
|
|
|
|
- 假设你手头拿到的Nuclei评估处理器内核为N307(rv32imafc), 想程序运行模式为``flash``,
|
|
|
|
|
则修改``NUCLEI_SDK_CORE``为``n307``, ``NUCLEI_SDK_DOWNLOAD``为``flash``.
|
|
|
|
|
5. 修改完对应的``rtconfig.py``参数配置并保存后,运行 ``scons``来进行代码的编译
|
2020-09-01 08:47:21 +08:00
|
|
|
|
|
|
|
|
|
### 下载程序
|
|
|
|
|
|
|
|
|
|
在保证程序能够正常编译后, 在相同ENV终端执行``scons --run upload``进行代码的下载。
|
|
|
|
|
|
|
|
|
|
正常下载的输出如下:
|
|
|
|
|
|
|
|
|
|
~~~
|
|
|
|
|
scons: Reading SConscript files ...
|
|
|
|
|
Supported downloaded modes for board hbird_eval are ('ilm', 'flash', 'flashxip'), chosen downloaded mode is ilm
|
|
|
|
|
Upload application rtthread.elf using openocd and gdb
|
|
|
|
|
riscv-nuclei-elf-gdb rtthread.elf -ex "set remotetimeout 240" -ex "target remote | openocd --pipe -f D:/workspace/Sourcecode/rt-thread/bsp/nuclei/hbird_eval/packages/nuclei_sdk-latest/SoC/hbird/Board/hbird_eval/openocd_hbird.cfg"
|
|
|
|
|
--batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" -ex "monitor resume" -ex "monitor shutdown" -ex "quit"
|
|
|
|
|
D:\Software\Nuclei\gcc\bin\riscv-nuclei-elf-gdb.exe: warning: Couldn't determine a path for the index cache directory.
|
|
|
|
|
Nuclei OpenOCD, i386 Open On-Chip Debugger 0.10.0+dev-g11f0cf429 (2020-07-15-04:09)
|
|
|
|
|
Licensed under GNU GPL v2
|
|
|
|
|
For bug reports, read
|
|
|
|
|
http://openocd.org/doc/doxygen/bugs.html
|
2020-09-02 11:10:54 +08:00
|
|
|
|
rt_list_insert_before (n=0xdeadbeef, l=0x90000f80 <timer_thread_stack+464>) at D:\workspace\Sourcecode\rt-thread\include/rtservice.h:79
|
|
|
|
|
79 n->next = l;
|
2020-09-01 08:47:21 +08:00
|
|
|
|
cleared protection for sectors 0 through 63 on flash bank 0
|
|
|
|
|
|
|
|
|
|
Loading section .init, size 0x284 lma 0x80000000
|
2020-09-02 11:10:54 +08:00
|
|
|
|
Loading section .text, size 0xb30a lma 0x800002c0
|
|
|
|
|
Loading section .rodata, size 0x3248 lma 0x8000b5d0
|
|
|
|
|
Loading section .data, size 0x340 lma 0x8000e818
|
|
|
|
|
Start address 0x80000198, load size 60182
|
|
|
|
|
Transfer rate: 48 KB/sec, 10030 bytes/write.
|
2020-09-01 08:47:21 +08:00
|
|
|
|
shutdown command invoked
|
|
|
|
|
A debugging session is active.
|
|
|
|
|
|
|
|
|
|
Inferior 1 [Remote target] will be detached.
|
|
|
|
|
|
|
|
|
|
Quit anyway? (y or n) [answered Y; input not from terminal]
|
2020-12-21 16:27:44 +08:00
|
|
|
|
[Inferior 1 (Remote target) detached]
|
2020-09-01 08:47:21 +08:00
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
下载程序之后, 连接**串口(57600-N-8-1)**, 可以看到 RT-Thread 的输出信息:
|
|
|
|
|
|
|
|
|
|
> 由于FPGA评估的Nuclei RISC-V内核主频一般在8MHz左右, 而评估SoC串口
|
|
|
|
|
> 在8MHz主频下,工作大于在115200 bps时,串口读取工作不正常,因此这里设置
|
|
|
|
|
> 波特率为57600bps,特此说明.
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
initialize rti_board_start:0 done
|
|
|
|
|
|
|
|
|
|
\ | /
|
|
|
|
|
- RT - Thread Operating System
|
|
|
|
|
/ | \ 4.0.3 build Apr 23 2020
|
|
|
|
|
2006 - 2020 Copyright by rt-thread team
|
|
|
|
|
do components initialization.
|
|
|
|
|
initialize rti_board_end:0 done
|
|
|
|
|
initialize dfs_init:0 done
|
|
|
|
|
initialize libc_system_init:0 done
|
|
|
|
|
initialize finsh_system_init:0 done
|
|
|
|
|
msh />
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在串口终端(我这里使用的是TeraTerm)输入``ps``即可查看当前线程工作情况:
|
|
|
|
|
|
|
|
|
|
~~~
|
|
|
|
|
msh />ps
|
|
|
|
|
thread pri status sp stack size max used left tick error
|
|
|
|
|
-------- --- ------- ---------- ---------- ------ ---------- ---
|
2020-09-02 11:10:54 +08:00
|
|
|
|
serrxsim 5 suspend 0x00000134 0x0000018c 77% 0x00000005 000
|
|
|
|
|
tshell 20 running 0x000002b0 0x00001000 17% 0x00000005 000
|
|
|
|
|
tidle0 31 ready 0x00000164 0x0000018c 89% 0x0000000b 000
|
|
|
|
|
timer 4 suspend 0x00000120 0x00000200 56% 0x00000009 000
|
2020-09-01 08:47:21 +08:00
|
|
|
|
msh />
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
### 调试程序
|
|
|
|
|
|
|
|
|
|
在保证程序编译成功后, 在相同ENV终端执行``scons --run debug``进行代码在命令行下进行GDB调试。
|
|
|
|
|
|
|
|
|
|
正常的调试输出如下:
|
|
|
|
|
|
|
|
|
|
~~~
|
|
|
|
|
scons: Reading SConscript files ...
|
|
|
|
|
Supported downloaded modes for board hbird_eval are ('ilm', 'flash', 'flashxip'), chosen downloaded mode is ilm
|
|
|
|
|
Debug application rtthread.elf using openocd and gdb
|
|
|
|
|
riscv-nuclei-elf-gdb rtthread.elf -ex "set remotetimeout 240" -ex "target remote | openocd --pipe -f D:/workspace/Sourcecode/rt-thread/bsp/nuclei/hbird_eval/packages/nuclei_sdk-latest/SoC/hbird/Board/hbird_eval/openocd_hbird.cfg"
|
|
|
|
|
D:\Software\Nuclei\gcc\bin\riscv-nuclei-elf-gdb.exe: warning: Couldn't determine a path for the index cache directory.
|
|
|
|
|
GNU gdb (GDB) 8.3.0.20190516-git
|
|
|
|
|
Copyright (C) 2019 Free Software Foundation, Inc.
|
|
|
|
|
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
|
|
|
|
This is free software: you are free to change and redistribute it.
|
|
|
|
|
There is NO WARRANTY, to the extent permitted by law.
|
|
|
|
|
Type "show copying" and "show warranty" for details.
|
|
|
|
|
This GDB was configured as "--host=i686-w64-mingw32 --target=riscv-nuclei-elf".
|
|
|
|
|
Type "show configuration" for configuration details.
|
|
|
|
|
For bug reporting instructions, please see:
|
|
|
|
|
<http://www.gnu.org/software/gdb/bugs/>.
|
|
|
|
|
Find the GDB manual and other documentation resources online at:
|
|
|
|
|
<http://www.gnu.org/software/gdb/documentation/>.
|
|
|
|
|
|
|
|
|
|
For help, type "help".
|
|
|
|
|
Type "apropos word" to search for commands related to "word"...
|
|
|
|
|
Reading symbols from rtthread.elf...
|
|
|
|
|
Remote debugging using | openocd --pipe -f D:/workspace/Sourcecode/rt-thread/bsp/nuclei/hbird_eval/packages/nuclei_sdk-latest/SoC/hbird/Board/hbird_eval/openocd_hbird.cfg
|
|
|
|
|
Nuclei OpenOCD, i386 Open On-Chip Debugger 0.10.0+dev-g11f0cf429 (2020-07-15-04:09)
|
|
|
|
|
Licensed under GNU GPL v2
|
|
|
|
|
For bug reports, read
|
|
|
|
|
http://openocd.org/doc/doxygen/bugs.html
|
2020-09-02 11:10:54 +08:00
|
|
|
|
0x0000000080000e80 in rt_thread_idle_entry (parameter=<optimized out>)
|
|
|
|
|
at D:\workspace\Sourcecode\rt-thread\src\idle.c:253
|
|
|
|
|
253 idle_hook_list[i]();
|
2020-09-01 08:47:21 +08:00
|
|
|
|
(gdb) load
|
|
|
|
|
Loading section .init, size 0x284 lma 0x80000000
|
2020-09-02 11:10:54 +08:00
|
|
|
|
Loading section .text, size 0xb30a lma 0x800002c0
|
|
|
|
|
Loading section .rodata, size 0x3248 lma 0x8000b5d0
|
|
|
|
|
Loading section .data, size 0x340 lma 0x8000e818
|
|
|
|
|
Start address 0x80000198, load size 60182
|
|
|
|
|
Transfer rate: 49 KB/sec, 10030 bytes/write.
|
2020-09-01 08:47:21 +08:00
|
|
|
|
(gdb) b main
|
2020-09-02 11:10:54 +08:00
|
|
|
|
Breakpoint 1 at 0x800002c0: file applications\main.c, line 35.
|
2020-09-01 08:47:21 +08:00
|
|
|
|
(gdb) c
|
|
|
|
|
Continuing.
|
|
|
|
|
|
2020-09-02 11:10:54 +08:00
|
|
|
|
Breakpoint 1, main () at applications\main.c:35
|
|
|
|
|
35 board_serial_init();
|
2020-09-01 08:47:21 +08:00
|
|
|
|
(gdb) n
|
2020-09-02 11:10:54 +08:00
|
|
|
|
rt_thread_exit () at D:\workspace\Sourcecode\rt-thread\src\thread.c:277
|
|
|
|
|
277 return rt_current_thread;
|
2020-09-01 08:47:21 +08:00
|
|
|
|
(gdb) c
|
|
|
|
|
Continuing.
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
调试例子参见如下文档:
|
|
|
|
|
|
|
|
|
|
* https://doc.nucleisys.com/nuclei_sdk/quickstart.html#debug-application
|
|
|
|
|
|
|
|
|
|
为了更方便的进行调试, 也可以下载**Nuclei Studio**集成开发环境, 创建一个Debug Configuration, 选择编译好的
|
|
|
|
|
ELF文件, 然后配置OPENOCD和GDB即可, OPENOCD配置文件路径为**bsp\nuclei\hbird_eval\packages\nuclei_sdk-latest\SoC\hbird\Board\hbird_eval\openocd_hbird.cfg**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 驱动支持情况
|
|
|
|
|
|
|
|
|
|
| 驱动 | 支持情况 | 备注 |
|
|
|
|
|
| ------ | ---- | :------: |
|
|
|
|
|
| UART | 支持 | 蜂鸟开发板载串口是UART0 |
|
|
|
|
|
|
|
|
|
|
**注:**
|
|
|
|
|
|
|
|
|
|
- 适配RT-Thread的驱动框架的代码在 [../libraries/hbird/HAL_Drivers](../libraries/hbird/HAL_Drivers)目录下。
|
|
|
|
|
- 如果有开发者想适配更多的驱动, 请在对应目录下增加驱动适配支持。
|
|
|
|
|
- 目前串口读取功能在主频为8MHz情况下需要工作在57600bps
|
|
|
|
|
- 目前串口读取没有采用中断的方式进行,而是采用单独的任务来读取,等中断信号接入后可以直接中断方式读取
|
|
|
|
|
|
|
|
|
|
## 联系人信息
|
|
|
|
|
|
|
|
|
|
维护人:
|
|
|
|
|
|
|
|
|
|
- [fanghuaqi](https://github.com/fanghuaqi)
|
|
|
|
|
|