2020-04-25 12:13:58 +00:00
|
|
|
|
# 1.概述
|
|
|
|
|
|
2020-07-07 15:09:48 +00:00
|
|
|
|
介绍如何将tinyriscv移植到FPGA平台上和如何通过JTAG或者UART下载程序到FPGA。
|
2020-04-25 12:13:58 +00:00
|
|
|
|
|
|
|
|
|
1.软件:xilinx vivado(以2018.1版本为例)开发环境。
|
|
|
|
|
|
|
|
|
|
2.FPGA:xilinx Artix-7 35T。
|
|
|
|
|
|
2020-05-13 13:48:44 +00:00
|
|
|
|
3.调试器:CMSIS-DAP或者DAPLink。
|
|
|
|
|
|
2020-07-07 15:09:48 +00:00
|
|
|
|
这里只是以Xilinx平台为例,实际上可以移植到任何FPGA平台(只要资源足够)。
|
|
|
|
|
|
2020-05-13 13:48:44 +00:00
|
|
|
|
# 2.FPGA移植步骤
|
2020-04-25 12:13:58 +00:00
|
|
|
|
|
|
|
|
|
## 2.1创建工程
|
|
|
|
|
|
|
|
|
|
首先打开vivado软件,新建工程,方法如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/create_prj_1.png)
|
|
|
|
|
|
|
|
|
|
或者通过File菜单新建工程,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/create_prj_2.png)
|
|
|
|
|
|
|
|
|
|
然后进入下一步,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/create_prj_3.png)
|
|
|
|
|
|
|
|
|
|
直接点击Next按钮,进入下一步,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/create_prj_4.png)
|
|
|
|
|
|
|
|
|
|
输入工程名字和工程路径,勾选上Create project subdirectiry选项,然后点击Next按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/create_prj_5.png)
|
|
|
|
|
|
2020-04-25 12:19:03 +00:00
|
|
|
|
选择RTL Project,并勾选上Do not specify sources at this time,然后点击Next按钮,如下图所示:
|
2020-04-25 12:13:58 +00:00
|
|
|
|
|
|
|
|
|
![](./images/create_prj_6.png)
|
|
|
|
|
|
|
|
|
|
在Search框里输入256-1,然后选中xc7a35tftg256-1这个型号,然后点击Next按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/create_prj_7.png)
|
|
|
|
|
|
|
|
|
|
直接点击Finish按钮。
|
|
|
|
|
|
|
|
|
|
至此,工程创建完成。
|
|
|
|
|
|
|
|
|
|
## 2.2添加RTL源文件
|
|
|
|
|
|
|
|
|
|
在工程主界面,点击左侧的Add Sources按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_1.png)
|
|
|
|
|
|
|
|
|
|
进入到如下图的界面:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_2.png)
|
|
|
|
|
|
|
|
|
|
选中第二项Add or create design sources,然后点击Next按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_3.png)
|
|
|
|
|
|
|
|
|
|
点击Add Directories按钮,选择tinyriscv项目里的整个rtl文件夹,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_4.png)
|
|
|
|
|
|
|
|
|
|
勾选上红色框里那两项,然后点击Finish按钮。
|
|
|
|
|
|
|
|
|
|
至此,RTL源文件添加完成。
|
|
|
|
|
|
|
|
|
|
## 2.3添加约束文件
|
|
|
|
|
|
|
|
|
|
在工程主界面,点击左侧的Add Sources按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_1.png)
|
|
|
|
|
|
|
|
|
|
进入到如下图的界面:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_5.png)
|
|
|
|
|
|
|
|
|
|
选择第一项Add or create constraints,然后点击Next按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_6.png)
|
|
|
|
|
|
|
|
|
|
点击Add Files按钮,选择tinyriscv项目里的FPGA/constrs/tinyriscv.xdc文件,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_7.png)
|
|
|
|
|
|
2020-07-04 08:27:53 +00:00
|
|
|
|
勾选上Copy constraints files into project,然后点击Finish按钮。
|
|
|
|
|
|
|
|
|
|
**注意:如果你的开发板和我的不一样,则需要将约束文件里的引脚配置改成你的开发板上对应的引脚**。
|
2020-04-25 12:13:58 +00:00
|
|
|
|
|
|
|
|
|
至此,约束文件添加完成。
|
|
|
|
|
|
|
|
|
|
## 2.4生成Bitstream文件
|
|
|
|
|
|
|
|
|
|
点击下图所示的Generate Bitstream按钮,即可开始生成Bitstream文件。
|
|
|
|
|
|
|
|
|
|
这包括综合、实现(布局布线)等过程,因此时间会比较长。
|
|
|
|
|
|
|
|
|
|
![](./images/add_src_8.png)
|
|
|
|
|
|
|
|
|
|
## 2.5下载Bitstream文件到FPGA
|
|
|
|
|
|
|
|
|
|
连接好下载器和FPGA开发板,将下载器插入PC,然后给板子上电,接着点击vivado主界面的左下角的Open Hardware Manager按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/download_1.png)
|
|
|
|
|
|
|
|
|
|
接着,点击Open target按钮,然后选择Auto Connect,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/download_2.png)
|
|
|
|
|
|
|
|
|
|
连接成功后,点击Program device按钮,如下图所示:
|
|
|
|
|
|
|
|
|
|
![](./images/download_3.png)
|
|
|
|
|
|
|
|
|
|
弹出如下界面,然后直接点击Program按钮。
|
|
|
|
|
|
|
|
|
|
![](./images/download_4.png)
|
|
|
|
|
|
2020-05-13 13:48:44 +00:00
|
|
|
|
至此,即可将Bitstream文件下载到FPGA。
|
|
|
|
|
|
2020-07-04 14:58:25 +00:00
|
|
|
|
## 2.6固化软核到FPGA
|
|
|
|
|
|
|
|
|
|
对于下载Bitstream文件到FPGA这种方式,当断电后再上电就要重新下载,因此可以将tinyriscv软核固化到FPGA,这样每次上电后就不需要重新下载Bitstream文件了,只需要下载bin文件就可以。
|
|
|
|
|
|
|
|
|
|
点击vivado工具栏的Tools-->Generate Memory Configuration File...选项后会出现以下界面:
|
|
|
|
|
|
|
|
|
|
![config_mcs](./images/config_mcs.png)
|
|
|
|
|
|
|
|
|
|
按照图中红色框来设置,然后点击确定。
|
|
|
|
|
|
|
|
|
|
然后点击Open Hardware Manager,按下图选择:
|
|
|
|
|
|
|
|
|
|
![add_mcs_device](./images/add_mcs_device.png)
|
|
|
|
|
|
|
|
|
|
然后按下图设置:
|
|
|
|
|
|
|
|
|
|
![select_spi](./images/select_spi.png)
|
|
|
|
|
|
|
|
|
|
弹出如下对话框,点击确定。
|
|
|
|
|
|
|
|
|
|
![mcs_ok](./images/mcs_ok.png)
|
|
|
|
|
|
|
|
|
|
最后按下图设置:
|
|
|
|
|
|
|
|
|
|
![mcs_prog](./images/mcs_prog.png)
|
|
|
|
|
|
|
|
|
|
点击确定后开始固化。固化过程比下载Bitstream文件的时间要长,耐心等待一下即可。
|
|
|
|
|
|
2020-05-13 13:48:44 +00:00
|
|
|
|
# 3.下载程序到FPGA
|
|
|
|
|
|
2020-07-04 08:27:53 +00:00
|
|
|
|
## 3.1通过JTAG方式下载
|
|
|
|
|
|
2020-05-13 13:48:44 +00:00
|
|
|
|
将CMSIS-DAP调试器连接好FPGA板子和PC电脑。
|
|
|
|
|
|
|
|
|
|
打开一个CMD窗口,然后cd进入到tinyriscv项目的tools/openocd目录,执行命令:
|
|
|
|
|
|
|
|
|
|
`openocd.exe -f tinyriscv.cfg`
|
|
|
|
|
|
|
|
|
|
如果执行成功的话则会如下图所示:
|
|
|
|
|
|
|
|
|
|
![openocd](./images/openocd.png)
|
|
|
|
|
|
|
|
|
|
然后打开另一个CMD窗口,执行以下命令来连接openocd,注意电脑要启用telnet host服务。
|
|
|
|
|
|
|
|
|
|
`telnet localhost 4444`
|
|
|
|
|
|
2020-06-07 13:55:28 +00:00
|
|
|
|
然后在这个CMD窗口下使用load_image命令将固件下载到FPGA,这里以freertos.bin文件为例,如下所示:
|
2020-05-13 13:48:44 +00:00
|
|
|
|
|
|
|
|
|
`load_image D:/gitee/open/tinyriscv/tests/example/FreeRTOS/Demo/tinyriscv_GCC/freertos.bin 0x0 bin 0x0 0x1000000`
|
|
|
|
|
|
|
|
|
|
使用verify_image命令来校验是否下载成功,如下所示:
|
|
|
|
|
|
|
|
|
|
`verify_image D:/gitee/open/tinyriscv/tests/example/FreeRTOS/Demo/tinyriscv_GCC/freertos.bin 0x0`
|
|
|
|
|
|
|
|
|
|
如果下载出错的话会有提示的,没有提示则说明下载成功。
|
|
|
|
|
|
2020-06-07 13:55:28 +00:00
|
|
|
|
最后执行以下命令让程序跑起来:
|
2020-05-13 13:48:44 +00:00
|
|
|
|
|
2020-06-07 13:55:28 +00:00
|
|
|
|
`resume 0`
|
2020-05-31 04:14:29 +00:00
|
|
|
|
|
2020-06-07 13:55:28 +00:00
|
|
|
|
**注意:每次下载程序前记得先执行halt命令停住CPU。**
|
2020-05-13 13:48:44 +00:00
|
|
|
|
|
2020-07-04 08:27:53 +00:00
|
|
|
|
## 3.2通过UART方式下载
|
|
|
|
|
|
|
|
|
|
通过UART方式下载前需要先使能UART debug模块。在约束文件里指定的uart_debug_en引脚,当其输入为高电平时表示使能UART debug模块,输入为低电平时表示关闭UART debug模块。
|
|
|
|
|
|
|
|
|
|
当使能了UART debug模块后,就可以通过tools/tinyriscv_fw_downloader.py脚本来下载程序。
|
|
|
|
|
|
2020-07-07 15:09:48 +00:00
|
|
|
|
tinyriscv_fw_downloader.py脚本使用方法:
|
|
|
|
|
|
|
|
|
|
`python tinyriscv_fw_downloader.py 串口号 bin文件`
|
|
|
|
|
|
2020-07-04 08:27:53 +00:00
|
|
|
|
打开CMD窗口,进入到tools目录,比如输入以下命令:
|
|
|
|
|
|
|
|
|
|
![uart_debug](./images/uart_debug.png)
|
|
|
|
|
|
|
|
|
|
即可下载freertos.bin程序到软核里。下载完后,先关闭UART debug模块,然后按板子上的复位(rst)按键即可让程序跑起来。
|
|
|
|
|
|
2020-05-21 14:04:23 +00:00
|
|
|
|
# 4.Vivado仿真设置
|
|
|
|
|
|
2020-05-27 15:07:14 +00:00
|
|
|
|
如果要在vivado里进行RTL仿真的话,还需要添加tb目录里的tinyriscv_soc_tb.v文件,具体方法和添加RTL源文件类似,只是在源文件类型里选择simulation sources,如下图所示:
|
2020-05-21 14:04:23 +00:00
|
|
|
|
|
|
|
|
|
![add_sim](./images/add_sim.png)
|
|
|
|
|
|
|
|
|
|
最后设置一下define.v文件的路径,如下图所示:
|
|
|
|
|
|
|
|
|
|
![defines](./images/defines.png)
|
|
|
|
|
|
2020-05-24 05:37:45 +00:00
|
|
|
|
最后,还要指定inst.data文件的路径,即修改tinyriscv_soc_tb.v文件里的下面这一行:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
// read mem data
|
|
|
|
|
initial begin
|
|
|
|
|
$readmemh ("F://yourpath/inst.data", tinyriscv_soc_top_0.u_rom._rom);
|
|
|
|
|
end
|
|
|
|
|
```
|
|
|
|
|
|
2020-05-21 14:04:23 +00:00
|
|
|
|
设置完成后,即可进行RTL仿真。
|