FutureDynasty在下文中我们一般简称FD。
FD工程创建
在FD解压后的目录里,双击FutureDynasty.exe启动FD软件

启动前会让你先选择一个目录作为FD的Workspace,为了方便学习后面的教程,建议以我们提供的demo_riscv下的wkspace目录作为Workspace。

在选完后wkspace目录下会多出来一个.metadata的目录这个就是存储workspace的设置的。如果不想每次启动都选工作空间,可以勾选上面的 Use this as the default and do not ask again 复选框。

点击完Launch后软件就会启动

在建立 workspace 后,进入 FD 环境,通过 File > New > Project,选择 C Project,如图所示。

在下一页中选择 C Managed Build,继续进入工程类型选择界面。在其中选择 Anlogic SDK project for softcore SoC,

注意:在下一步中,将选择软核的类型和优化配置,紧凑型软核选择 Light,标准型软核选择 Medium。 如果需要优化软核固件运行的速度,推荐使用-O2 等级的优化;如需优化软核固件的尺寸,推荐使用- Os 等级的优化。

完成工程向导后,工程窗口将自动导入样例工程,

FD工程设置
可以在工程属性中对工程优化参数进行调整。在左侧工程栏中右击工程,选择 Properties。在打开的窗口中逐级展开 C/C++ Build -> Setting,展开下图中的页面。
页面中有几个较为关键的子页面:
Target Processor 页面用于设定编译文件的指令集支持(轻量级不应勾选 RVM/RVA/RVC 支持,标 准型核应当勾选 RVM/RVC 两个指令集扩展的支持)

Optimization 选项卡中用于选择固件编译阶段采取的优化手段。其中, Optimization Level 中的设定的相关说明与建工程时的软核配置页面一致,在此不再赘述。建议勾选“Function Segments”和 “Data Segments”选项,将该选项勾选之后可以将函数和数据分段,方便在后续的链接步骤中去除未用到的函数和数据以减小固件体积。

在 GNU RISC-V Cross C++ Linker 选项卡中,我们可以选择使用的链接脚本(Script File),并且可以在该页面开启去除未使用的段的选项(需要配合前述的在编译步骤中拆分分段的选项)

本步骤中我们提供了三个版本的 linker 脚本,其特性由下表所示
linker 文件特性表
| Linker 文件 | 默认启动地址 | 备注 |
| linker_ahbtcm.ld | 0x8000_0000 | 两者同为从片内 TCM 启动使用的 linker 脚本。根据软核 使用的总线选择。 length 设置必须等于或小于硬件工程中 配置的 TCM 的大小 |
| linker_axitcm.ld | 0xF000_0000 | |
| linker_axiemem.ld | 0x4000_0000 | 从 AXI 外部内存运行使用的 linker 脚本。一般而言,使 用该文件编译的固件必须要使用 TCM 内存放 bootloader, 并从外部存储器或者上位机中读入固件跳转运行 |
如果用户需要修改软核的内存分配,可以修改对应的 linker 脚本文件。其中有三个参数需要用户特别关心: MEMORY LENGTH(分配内存总长度) _stack_size(栈内存尺寸,当用户程序较大时建议适当改大) _heap_size(堆内存尺寸,如果用户有使用 malloc 一类动态内存管理函数需要改大该参数).
以 linker_ahbtcm.ld 文件为案例,下图中展示了三个变量所在的位置。如果固件运行在片内 TCM 中,用户需要格外注意查询硬件工程中 TCM 的容量,如果分配内存总长度超过了硬件上 TCM 的容量,固件运行时极有可能发生异常。一个在硬件工程中查询 TCM 容量的示例如图所示

Linker 脚本修改示例

TCM 内存容量查询示例
经过上述配置,对工程进行编译,输出最终的二进制文件,如图所示。

FD工程编译
在工程栏hello_world工程这里点右键,选择Build Project

或者菜单栏选择Build Project

编译完成后会在Console输出如下内容

FD生成mif
在FD菜单栏点击 AnlogicTools –> Create Mif

在窗口中填写 ROM 长度(应当与硬件工程定义的 TCM 的大小一致,否则 TD 软件无法读入)。点击 Create 后将在对应的文件夹内生成用于装入码流的 MIF 文件和用于仿真的 HEX 文件。 ROM Offset 用于在固件开始前填充固定长度的 0,一般无需使用。

MIF 文件生成界面
针对FD 2024.07之后的版本已经没有了Create Mif, 改为在编译选项里选择,步骤如下:
1. 在工程上右键选择属性![图片[20]-PotatoPie 4.0 实验教程(40) —— FPGA实现RISC-V工程创建和调试-Anlogic-安路社区-FPGA CPLD-ChipDebug](https://chipdebug.com/wp-content/uploads/2024/11/20241107173207735-1.png?v=1730971928)
2. 在build c++勾选生成
![图片[21]-PotatoPie 4.0 实验教程(40) —— FPGA实现RISC-V工程创建和调试-Anlogic-安路社区-FPGA CPLD-ChipDebug](https://chipdebug.com/wp-content/uploads/2024/11/20241107173515387-%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20241107173353-1024x1002.png?v=1730972117)
3. 重新编译生成就可以在工程的build目录看到生成了MIF文件。
在工程的Debug目录下就能看到最终生成的mif文件。

而这个文件就是我们在TD工程中指定的TCM0_INITFILE的值。
我们打开提供的TD工程,在demo_riscv目录的如下路径中

将TCM0_INITFILE改为上文FD生成的mif路径,这里为了便于工程管理,我们用的是相对路径。

编译FPGA工程,并进行JTAG下载。

这样我们的FPGA里面就有了一个RISCV的核,这个时候我们就可以在FD上面进行软件的运行和调试了,在接下来的步骤里我们不需每次都去编译TD工程,只要FPGA工程没改动过,我们在FD里面作的软件代码的修改可以直接通过JTAG下载或者调试。
FD项目在线运行

从模板创建的项目会根据项目类型自动生成相应的配置

如果需要也可以自行修改相应的参数,修改完成点击 Run 即可启动运行

从串口可以看到输出

FD项目调试
右键项目 Debug As -> Debug Configurations… 可配置调试参数

或者左键点击选中项目后 Run -> Debug Configurations…

从模板创建的项目会根据项目类型自动生成相应的调试配置

如果需要也可以自行修改相应的调试参数,

上图调试选项框中Startup 一页中的红框内容默认勾选,表示程序启动调试后会停在main函数处,修改完成点击 Run 即可启动调试。

可以看到程序停留在了main函数的第一行。



为啥我的工具没有这个选项呢?

这是我从你们提供的资料盘下载的FD

