冲着能用开源工具链入了一块 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 良心了!!!
比 RMS nb 的是,Claire Wolf 是一位 MTF,政治正确的一匹。
在 GFW 内约耗时一个世纪。