fpga: update README.md

Signed-off-by: liangkangnan <liangkangnan@163.com>
verilator
liangkangnan 2022-08-18 09:17:40 +08:00
parent a27d949a5d
commit 53ae450762
3 changed files with 224 additions and 204 deletions

View File

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

View File

@ -0,0 +1,16 @@
本目录包含FPGA约束文件vivado tcl脚本和顶层文件。
```
constrs包含FPGA约束文件
scripts包含vivado tcl脚本
tinyriscv_soc_top.sv整个SOC的顶层文件
```
根据vivado的安装路径修改Makefile文件。
生成bit文件
`make bit`
即可在out目录下生成bit文件。

View File

@ -0,0 +1,16 @@
本目录包含FPGA约束文件vivado tcl脚本和顶层文件。
```
constrs包含FPGA约束文件
scripts包含vivado tcl脚本
tinyriscv_soc_top.sv整个SOC的顶层文件
```
根据vivado的安装路径修改Makefile文件。
生成bit文件
`make bit`
即可在out目录下生成bit文件。