芯片原厂必学课程 - 第十篇章 - 基于 RISC-V SoC 的 1024 点 FFT 设计
10-02-09 1024 点 FFT 程序的交叉编译
新芯设计:专注,积累,探索,挑战
文章目录
引言
本次项目主要设计了一个基于 RISC-V 指令集架构的 SoC,这是一个具有 1024 点的时频转换功能的 FFT 系统。在理想情况下,只要指令存储器和数据存储器的容量足够大,基本上可以实现任意点的 FFT。本章《基于 RISC-V SoC 的 1024 点 FFT 设计》针对 1024 点的 FFT,首先给出了 FFT 系统的整体架构和 RISC-V 内核的硬件设计。接着,对于 RISCV 交叉编译环境的搭建进行了相关的概述。最终,针对基于 RISC-V SoC 的 FFT 设计,构造了基于软硬件协同仿真验证的 UVM 框架,证实了大点数 FFT 的 C 软件程序及其 RISC-V 硬件设计系统功能的正确性。
NOTES:本文来自《芯片原厂必学课程 - 第十篇章 - 基于 RISC-V SoC 的 1024 点 FFT 设计》技术专栏
🌏 一、1024 点 FFT 程序的交叉编译
对于 1024 点 FFT 的 C 语言程序的交叉编译,需要在原始的 RISC-V 交叉编译环境的基础之上,添加一些必要的嵌入式开发文件、相关的链接处理步骤以及具体的 SoC 实现平台等等。
RISC-V 交叉编译环境配备完毕之后,还需要针对性地修改 1024 点 FFT 的 C 代码。主要是在 FFT 纯软件程序实现的基础上,加入了一些基于嵌入式开发的软件编程。
接下来,就可以在 Ubuntu 16.04 的 Linux 开发环境中,生成 FFT.c 对应的 FFT.o 目标文件。同时,还需要生成 1024 点 FFT 的 RISC-V 嵌入式系统的其余的目标文件。其中,包括了系统上电初始化文件 init.o、系统上电启动引导程序文件 start.o、串口外设文件 uart.o 以及串口输出文件 xprintf.o 等等。这些文件的生成不仅仅依赖于 FFT 设计的板级支持包(Board Support Package,BSP)、部分的主程序以及相关的库文件,还必须具备 RISC-V 嵌入式系统的链接脚本文件 Link.lds 和编译脚本文件 Makefile 等等。这里,Makefile 编译脚本文件定义了 RISC-V 交叉编译选项、交叉编译目标、最终生成目标、工具链目录以及导出的路径等等。如下所示,这是 make 自动编译工具执行 Makefile 编译脚本文件的示意图。
对于 make 工具,其主要是执行 Makefile 文件中一系列的脚本命令,对各类文件进行相应的编译处理。最终,生成了许多的目标文件与唯一的可执行文件。
此外,在上述的脚本自动化编译的过程中,还特地添加了“riscv-none-embed-objcopy”二进制程序处理工具,将 FFT.elf 格式的文件翻译为 FFT.bin 格式的文件。最终,通过“BinToMem”格式转换工具或者 Python 脚本文件的编写,生成可载入 RISC-V 软核中的指令存储器的 FFT.coe 文件。这是 Xilinx Vivado 的存储器 IP 初始化的专属格式文件,其生成也就意味着 1024 点 FFT 的 C 程序的交叉编译流程就此完成。