冲着能用开源工具链入了一块 iCESugar-Pro,本来想着如果 macOS 环境搞不定就下官方的虚拟机,结果居然给我配成了。

ISE/Vivado/Quartus 的缺点

  • 收费

    我没钱。我用盗版,我让国外资本主义巨头亏麻了,我骄傲。

  • 限定系统

    首先,没有一个有 macOS 支持,其次 Linux 支持也不甚完整(Ubuntu 装 ISE 能强行装上,但基本跑不起来,官方支持列表里好像只有红帽,也许 centos 可以但我真的不是很喜欢这个发行版),基本上只有 Windows 能用……

  • 命令行支持烂(IDE 还丑)

    我就是想用 Vim/VSCode 写 Verilog/Chisel 然后用 Makefile 编译和下载啊!!! 谁想用那些个难看的不得了又卡交互逻辑又奇怪的 IDE 啊!!! 虽说技术上这几个设计工具都有命令行接口,但是资料和例子就基本没有了,好不容易看到一个官方的文档然后打开一看拿几千个选项甩你一脸……

  • 对学习自动综合原理等没有帮助

    看不了代码,学习,学个屁。 不过说实话我是希望有书能讲讲这个的……光看代码还是太痛苦了。

开源工具链

Claire Wolf 的传奇

这个人就是开源硬件世界里的 Richard Stallman1

这个人 2012 年几乎单枪匹马做出了开源 Verilog 逻辑综合工具 Yosys

2015 年(也是几乎单枪匹马)做出了开源 RISC-V 核 picorv32

同年开始 icestorm 项目,开始针对 Lattice FPGA 整合整条开源工具链。

2018 年,开始 FPGA 布局布线工具项目 nextpnr

总之一句话,开源 FPGA 界的基础软件基本上是这个人一个人打的基础。

看完这个人的经历之后我只想用一个表情包表达我的心情:

我也能,像他一样吗.jpg (不会 PS 所以表情包请自行脑补 😄)

说了那么多我们还是看看这些工具怎么用吧,毕竟我现在也就只能用用这些工具了,离去开发这些东西还太远😭。

Yosys 综合工具

虽然说 brew 可以装上,但是那个版本太老了,和其他工具(比如 nextpnr)配合使用会出问题。

clone 代码

git clone https://github.com/YosysHQ/yosys.git

装依赖

yosys 提供了 Brewfile,像官方说的:

brew tap Homebrew/bundle && brew bundle

就好了2

make

make -j$(nproc)
make install

使用

yosys 可以通过 -p 参数接受一个 “综合脚本”,或者通过 -s 接受综合脚本文件,或者不加任何参数的话可以直接 yosys 一个命令直接 REPL 执行,目前我已知的脚本命令有:

  • read_verilog

    用于读取 verilog 文件。

  • synth_ecp5

    用于实际综合,传入 -json 来获取 json 格式的输出。

例如:

yosys -p "read_verilog blink.v; read_verilog rst_gen.v; synth_ecp5 -json main.json"

或者也可以写成:

yosys -p "synth_ecp5 -json main.json" blink.v rst_gen.v

nextpnr 布局布线工具

clone 代码

git clone https://github.com/YosysHQ/nextpnr.git

安装 Trellis 组件与工具库

Trellis 组件库与工具库为 nextpnr 提供了 Lattice ECP5 的组件库以及用于生成 bitstream 的 ecppack 工具。

clone 代码
git clone --recursive https://github.com/YosysHQ/prjtrellis
make
cd libtrellis
# 就算 sudo 了也不能装在 /usr 里,直接跟着 brew 装 /usr/local 里就行
cmake -DCMAKE_INSTALL_PREFIX=/usr/local .
make -j$(nproc)
sudo make install

make

在克隆下来的 nextpnr 仓库下:

cmake . -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install

使用

nextpnr-ecp5 --<型号> --package <封装> --json <刚刚综合出来的 JSON> --lpf <引脚分配文件> --textcfg <输出到 config 文件>

iCESugar-Pro 上的 FPGA 型号是 25k,封装方式是 CABGA256

LPF 文件

主要使用下面几个命令:

  • LOCATE

    LOCATE COMP "<代码内名称>" SITE "<硬件手册上的编号>";
    

    例如:

    LOCATE COMP "clk" SITE "A1";
    

ecppack bitstream 生成器

ecppack 是 Trellis 组件与工具库的一部分,前面已经安装好了。

ecppack <config 文件> --bit <目标 .bit 文件>

下载

iCESugar-Pro 连到电脑上就一U盘,可以直接拖!拽!下!载!作者太 tmd 良心了!!!

1

比 RMS nb 的是,Claire Wolf 是一位 MTF,政治正确的一匹。

2

在 GFW 内约耗时一个世纪。