LiteXで学ぶはじめてのSoC自作
Recently, I stumbled upon an excellent open-source project that allows for the quick customization of an SoC on one’s FPGA development board. so, what is LiteX?
LiteX is a Migen/MiSoC based Core/SoC builder that provides the infrastructure to easily create Cores/SoCs (with or without CPU).
1 | +---------------+ |
This article documents my feasibility study:
- Install LiteX and required FPGA toolchain
- Build an example SoC and load it on an FPGA dev board
Okay, let’s go!
安装 LiteX
从GitHub上拉取安装脚本(注意:需要提前安装pip3 sudo apt-get install python3-pip),安装过程会下载非常多的 LiteX 模块到单独的目录,所以建议单独新建一个文件夹执行 LiteX 安装脚本,命令如下:
1 | mkdir litex && cd litex |
安装的过程中需要给网络施加一点魔法,至于怎么施加这里就不赘述了「すみません」,自行 Google。当安装结束后,我们可以看到最后的提示需要我们确保 ~/.local/bin is 在我们的 PATH 中。
1 | [ 76.646] Make sure that ~/.local/bin is in your PATH |
我们可以输入 echo $PATH 查看 ~/.local/bin 是否在我们的环境变量中,如若不在,需要添加环境变量,如下:
1 | sudo gedit ~/.zshrc # vim or gedit 都可,笔者更喜欢 gedit |
接下来安装 RISC-V 工具链
1 | pip3 install meson ninja |
到此,LiteX 就已经安装完成了。
生成 SOC
在 LiteX 中, SOC 的 Verilog HDL 代码和 ROM 的生成都在 litex-boards 目录下。在上一步安装 LiteX 环境时会自动下载,该目录结构如下:
1 | . |
LiteX 目前支持的 FPGA 有 Xilinx (AMD), Altera (Intel), Lattice, Anlogic 各种平台,如果自己的开发板不被 Litex 默认支持,也可以自己添加platform (FPGA 型号、板载资源) 和 target (期望生成的 SoC)。这里我使用的是正点原子的达芬奇开发板(XC7A35TFGG484I),貌似没有被官方支持,but 在官方支持的板子中有 xc7a35t 芯片的 board,身为”资深”的 ctrl cv 工程师表示我们直接拿来改改就可以用了(bushi)。我们在项目根目录下新建一个 soc 文件夹存放我们的 platform 和 target 定义。
LiteX 自定义开发板
对于已经被官方支持的开发板,它们的定义会存储在 litex_boards/platforms 和 litex_boards/targets 目录下的相应的 Python 文件中。对于新的开发板我们可以在 litex_boards/platforms 目录下新增 platforms 文件,用来定义你的开发板。文件名应该采用 <vendor>_<board>.py 的格式,其中 <vendor> 是开发板制造商的名称,<board> 是开发板型号的名称,在这个新的 Python 文件中,需要定义一个继承自 litex_boards.platforms.Platform 的类,这个类包含开发板的一些基本信息,例如时钟频率、I/O 管脚、Flash 存储器等,也可以在这个类中定义一些额外的方法,用于初始化和配置硬件。在 litex_boards/targets 目录下新增 targets 文件,以包含针对开发板的应用程序。后将我们新增的文件添加到 Makefile 中。
这里笔者使用的是正点原子的达芬奇开发板,该系列采用的是 Xilinx Artix7 系列 XC7A35T-FGG484-2作为主控芯片,其余参数请自行查阅官方Wiki。
编译位流
在任意目录下执行以下语句:
1 | python3 <PATH>/targets/<vendor>_<board>.py --build |
会在当前目录下生成一个 build 目录
1 | . |
下载位流
上一步我们已经成功构建出了我们的 hardware Soc,接下来就是将位流下载至开发板。进入 build/<board>/gateware 目录,在该目录下找到 <board>.bit 将其下载至开发板。这里我是在虚拟机进行开发的,而硬件板卡连接的是本地电脑,所以我们要在本地电脑打开 vivado_path/bin/hw_server.bat 软件,如下图所示:
服务器端打开 open hardware manager -> open target -> open new target
下载成功后可以看到流水灯闪烁同时串口有数据输出。
Okay,测试通过,接下来就是在 Litex SoC 上运行Linux。Enjoy Digital 团队创建了一个名为 Linux-on-Litex 的项目,该项目使用 Litex 生成能够运行 Linux 的 SoC,只要你的板子有 32MB RAM 和一个串口以及足够的逻辑资源就可以运行这个项目。非常感谢 Enjoy Digital!
Linux on LiteX-VexRiscv
TODO


