- Links:
Lattice ECP5
和ECP5-5G
系列FPGA
简介
ECP5
是属于Lattice
公司里的高端产品线,ECP5 FPGA
器件提供低成本,低功耗,小尺寸的解决方案,用于实现大批量应用中的连接,视频和图像功能,如小型蜂窝网络,工业摄像头和宽带接入设备。- 特點:
- 新型应用中
FPGA
与ASIC
和ASSP
相结合, - 快速构建灵活的系统,可以满足严格的成本,功耗和尺寸限制。
- 在开发
ECP5TM FPGA
系列的过程中,莱迪思打破了FPGA
产品密度极高,功耗惊人和价格昂贵的陈规。 ECP5
和ECP5-5G
针对低成本,小封装尺寸和低功耗进行了优化,- 比竞争对手的
FPGA
产品成本更低,使用更好的布线架构,双通道SERDES
以及增强的DSP
模块,减少高达4倍的乘法器资源使用,这些特性使得ECP5器件非常适用于辅助ASIC和ASSP的可编程连接解决方案。
- 新型应用中
- 用途:
- ECP5/ECP5- 5g设备系列FPGA包括可查找表(LUT)容量为85K的逻辑元件,支持最多365个用户I/O。
- 同时还提供多达156个18x18乘法器和广泛的并行I/O标准。
- ECP5/ECP5- 5g FPGA在低功耗,低成本的前提下进行了高性能的优化。
- 利用可重新配置的
SRAM
逻辑技术,提供lutb
的逻辑,分布式和嵌入式内存,锁相环(PLLs),延迟锁相环(DLLs),预先设计的源同步I/O支持,增强的sysDSP
片和高级配置支持,包括加密和双启动功能。 - 支持广泛的接口标准,包括
DDR2/3,LPDDR2/3,XGMII和7:1 LVDS
。
- 特點:
开源工具
开发FPGA,从
verilog
到可以烧录的bitstream
有以下几步:Synthesis
:一般叫合成,把verilog
的RTL
生成为逻辑门。Place and Route
:布线,依照逻辑门的的数量限制,生成逻辑的连线。Bitstream Creation
:將逻辑门的连线,依照对应的FPGA
型号生成可烧写的bitstream
的文件。
开源
Verilog
逻辑综合(Synthesis)工具Yosys
,可以用于Lattice
和Xilinx
的FPGA
。Clifford Wolf
创建了FPGA
的整条开源工具链:- YosysHQ/yosys:用来将
verilog RTL
综合生成网表文件 - YosysHQ/nextpnr: 根据网表文件和约束文件进行布局布线
- YosysHQ/prjtrellis:针对
Lattice ECP5 FPGA
架构信息库和完整生成bitstream
的烧写文件。 - icestorm:针对
Lattice iCE40 FPGA
架构信息库和完整生成bitstream
工具链组合,依靠反向工程创建出来的。
- YosysHQ/yosys:用来将
上面三个开源工具链被SymbiFlow收入整合了。也可以用YosysHQ/oss-cad-suite-build去做开发环境的构建。
SymbiFlow
SymbiFlow is a fully open source toolchain for the development of FPGAs of multiple vendors. Currently, it targets the Xilinx 7-Series, Lattice iCE40, Lattice ECP5 FPGAs, QuickLogic EOS S3 and is gradually being expanded to provide a comprehensive end-to-end FPGA synthesis flow.
SymbiFlow
相当于是FPGAs
开源界的GCC
工具。
构建环境
prjtrellis
1 | ~$ git clone --recursive https://github.com/YosysHQ/prjtrellis |
- 如果出现
python3
开发版本不匹配的错误,可以参照下面修改到合适的版本。删除CMakeCache.txt
,重新运行cmake
生成配置。
1 | prjtrellis/libtrellis$ rm CMakeCache.txt |
nextpnr
- 我现在手上只有
ECP5 Evaluation Board
,这只选择编译-DARCH=ecp5
,具体更多的参数,查看源码脚本。1
2
3~$ git clone --recursive https://github.com/YosysHQ/nextpnr
~$ cmake . -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=$LATTICE_TOOLS_PATH -DCMAKE_INSTALL_PREFIX=$LATTICE_TOOLS_PATH
~$ make install
Yosys
安装编译工具与其它依赖,命令文档指南.注意别与
apt-get install yosys
混用了,旧版的yosys
会报错ERROR: Found netlist using legacy-style JSON parameter values, please update your Yosys.
1
2
3
4~$ sudo apt-get install build-essential clang bison flex \
libreadline-dev gawk tcl-dev libffi-dev git \
graphviz xdot pkg-config python3 libboost-system-dev \
libboost-python-dev libboost-filesystem-dev zlib1g-dev libjson11-1-dev编码编译,安装目录与前面的工具一样,默认使用
clang
,可以传送参数变量CONFIG=gcc
,用gcc
来编译。1
2
3
4~$ git clone https://github.com/YosysHQ/yosys
~$ cd yosys && mkdir build
~$ cd build
~$ PREFIX=$LATTICE_TOOLS_PATH make -j20 -f ../Makefile install因为系统安装了
qflow
它会依赖安装一个较旧的发行版,最终还是使用了最新源码去覆盖旧的发行版。
1 | ~$ PREFIX=/usr sudo make -j20 -f ../Makefile install |
openFPGALoader
- openfpgaloader
- Welcome to the documentation of openFPGALoader!
- openFPGALoader是一个用于
FPGA
编程的通用实用程序,支持众多主流FPGA
厂商的产品与烧写器,如:Xilinx, Altera/Intel, Lattice, Gowin, Efinix, Anlogic, Cologne Chip
. 并且支持Linux, Windows,macOS
多平台系统.
编译openFPGALoader
1 | ~$ apt-get install libftdi1-2 libftdi1-dev libudev-dev cmake # 这装必要的支持库 |
- 支持的板子型号,查看这里,或者运行:
1 | ~$ openFPGALoader --list-boards |
测试编译示例
编译
1 | ~$ cd prjtrellis/examples/ecp5_evn |
默认编译显示上面的错误,找到错误行,显示:
yosys -p "synth_ecp5 -json $@" $<
.按照理论上来,我安装的是最新版本的yosys
版本,不应该出现这样的错误。这种写法是省掉的读取verilog
的参数,完整的命令行写法,如下:1
~$ yosys -p "read_verilog blink.v; read_verilog rst_gen.v; synth_ecp5 -json main.json"
这里需要修改
Makefile
,修改成如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20prjtrellis/examples/ecp5_evn$ git diff
diff --git a/examples/ecp5_evn/Makefile b/examples/ecp5_evn/Makefile
index 40622b0..02f0d9d 100644
--- a/examples/ecp5_evn/Makefile
+++ b/examples/ecp5_evn/Makefile
@@ -4,7 +4,7 @@ TRELLIS?=/usr/share/trellis
all: ${PROJ}.bit
%.json: %.v
- yosys -p "synth_ecp5 -json $@" $<
+ yosys -p "read_verilog -sv $<" -p "synth_ecp5 -json $@" $<
%_out.config: %.json
nextpnr-ecp5 --json $< --textcfg $@ --um5g-85k --package CABGA381 --lpf ecp5evn.lpf
~$ make
[...]
Info: Program finished normally.
ecppack --svf blinky.svf blinky_out.config blinky.bit
rm blinky.json blinky_out.config
烧写到板上的RAM
openFPGALoader
默认是加载到FPGA
的内存里的。1
2
3
4
5
6
7
8
9
10~$ openFPGALoader -b ecp5_evn blinky.bit
write to ram
Jtag frequency : requested 6.00MHz -> real 6.00MHz
Open file: DONE
Parse file: DONE
Enable configuration: DONE
SRAM erase: DONE
Loading: [==================================================] 100.00%
Done
Disable configuration: DONE烧写成功后,就能看到板上的流水灯的效果。
这里也可以使用一个外部的
JTAG
烧写。比如使用一个独立的FTDI 2232HL
连接到板上的J1 JTAG
,再把JP1
跳线安装上,就可以下载调试了。
1 | ~$ openFPGALoader -d /dev/ttyUSB1 --detect |
烧写到SPI Flash
1 | prjtrellis/examples/ecp5_evn_multiboot$ openFPGALoader -b ecp5_evn -f blinky1.bit |
- 烧写
flash
的时间会略长一些。每次上电启动,都是从spi flash
加载程序来运行。如果烧写的是openFPGALoader -b ecp5_evn -f multiboot.bin
,可以通过板上的PGMN SW3
按键来切换从不同的flash
位置加载启动。
RISC-V
VexRiscv
运行linux-on-litex-vexriscv
这里可以接合参照我写的另一篇文章
XILINX_Arty-A7-35T实践指南
去实践。要先编译安装riscv toolchains
.编译工程
1
~$ ./make.py --board ecpix5 --toolchain=symbiflow --build
加载工程
1 | ~$ ./make.py --board ecpix5 --load |
直接运行litex-boards
编译工程
1
~$ litex-boards/litex_boards$ ./targets/lattice_ecp5_evn.py --cpu-type vexriscv --sys-clk-freq 100e6 --build
加载工程
1
2~$ litex-boards/litex_boards$ ./targets/lattice_ecp5_evn.py --cpu-type vexriscv --sys-clk-freq 100e6 --load
更换连接
uart
的管脚配置,把原板上的FTDI P2,P3
换成M19,M20
,因为P2,P3
有复用到其它功能。
1 | litex-boards/litex_boards$ git diff platforms/lattice_ecp5_evn.py |
- 连接成功后如下。
1 | litex> |
通过SDCard Boot
加载linux
系统
其它
- Write 8-bit code in your browser.
- 在线Verilog仿真
- 在线电路原理仿真
- Innovate by reaching for the open source FPGA tooling
- Beginning FPGA Graphics
- Learn FPGA
谢谢支持
- 微信二维码: