什么是冰风暴项目?
Project IceStorm旨在记录Lattice iCE40 FPGA的比特流格式,并提供用于分析和创建比特流文件的简单工具。 冰风暴流(Yosys Arachne公司 和IceStorm)是一个用于iCE40 FPGA的完全开源Verilog-to-Bitstream流。
该项目的重点是iCE40 LP/HX 1K/4K/8K芯片。 (大部分工作是在HX1K-TQ144和HX8K-CT256部件上完成的。)iCE40 UltraPlus部件也受支持,包括DSP、振荡器、RGB和SPRAM。iCE40 LM、Ultra和UltraLite部件尚不受支持。
2018-01-30: 已发布对iCE40 UltraPlus设备的支持。 2017-03-13: 已发布对LP384芯片的支持(在所有软件包变体中)。 2016-02-07: 支持LP1K、LP4K、LP8K和HX1K、HX4K和HX8K的所有封装变体。 2016-01-17: IceTime计时分析的首次发布。 视频: https://youtu.be/IG5CpFJRnOk 2015-12-27: 32C3处冰暴流的显示( Youtube上的视频 ). 2015-07-19: 发布了对8k芯片的支持。 已将IceStorm源代码移动到GitHub。 2015-05-27: 我们与Yosys和 阿拉伯-pnr ! 视频: http://youtu.be/yUiNlmvVOq8 2015-04-13: 完全重写IceUnpack,添加了IcePack,一些主要文档更新 2015-03-22: 首次公开发布和YouTube视频短片,展示我们的工作: http://youtu.be/u1ZHcSNDQMM(中文)
Project IceStorm是由 克利福德·沃尔夫 旨在为使用莱迪思iCE40系列FPGA(现场可编程门阵列)提供一套全面的工具。 iCE40系列FPGA以其低成本和低功耗而闻名,这使得它们对爱好者、制造商和研究人员特别有吸引力。
Project IceStorm特别致力于实现完全开源的FPGA工具链,这与大多数FPGA制造商提供的专有工具链有很大的不同。 项目的工具链包括几个关键组件:
冰咆哮 –IceStorm是该项目的核心,它负责处理比特流文档,并为iCE40 FPGA提供比特流分析和创建工具。
阿拉伯-PNR –最初与IceStorm一起使用的位置和路线工具(后来被nextpnr取代)。
下一个pnr –一种改进的多功能位置和路线工具,在开源FPGA社区中基本上取代了Arachne-PNR。 它被设计成一种供应商中立、时间驱动的位置和路线工具。
尤瑟斯 –一个开源合成工具,用于将Verilog(硬件描述语言)代码转换为可与位置和路线工具一起使用的网关级表示。 Yosys具有高度的灵活性,支持各种合成任务。
通过提供传统的FPGA闭源环境的开源替代方案,Project IceStorm使爱好者和小型开发人员能够更轻松地探索和创新FPGA技术。 检查和修改工具链的各个方面的能力对于教育、研究和高度定制硬件解决方案的开发都是非常强大的。
为什么选择Lattice iCE40?
它的建筑非常简约,结构非常规则。 没有很多不同种类的瓷砖或特殊功能单元。 这使得它既适用于创建比特流文档,也可作为通用FPGA工具开发的参考平台。
此外,有了Lattice iCEstick,就有了一个廉价且易于使用的开发平台,这使得该部分对各种项目都很有趣。 (iCEstick采用HX1K设备。Lattice还销售采用HX8K芯片的iCE40-HX8K转接板。)
项目的状态是什么?
我们非常有信心,我们已经完全记录了1K和8K设备。 例如,我们似乎可以使用我们的icebox_vlog工具为Lattice iCEcube2为iCE40 HX1K-TQ144和iCE40 HX8K-CT256生成的所有比特流创建正确的功能Verilog模型。
以下是当前支持的部件列表以及arachne-pnr(地点和路线)和icetime(时间分析)的相应选项:
零件 包裹 引脚间距 输入/输出 nextpnr选项 蜘蛛侠pnr opts 冰期opts iCE40-LP1K-SWG16TR 16球WLCSP(1.40 x 1.48毫米) 0.35毫米 10 –lp1k–软件包swg16tr -d 1k-P开关16tr -d液化石油气1k iCE40-UP3K-UWG30 30球WLCSP(2.15 x 2.55毫米) 0.40毫米 21 –up5k–包装uwg30 -d 5k-P uwg30 -向上5公里 iCE40-UP5K-UWG30 30球WLCSP(2.15 x 2.55毫米) 0.40毫米 21 –up5k–包装uwg30 -d 5k-P uwg30 -向上5公里 iCE40-LP384-CM36 36球ucBGA(2.5 x 2.5毫米) 0.40毫米 25 –lp384–包装cm36 -d 384-P厘米36 -d lp384型 iCE40-LP1K-CM36 36球ucBGA(2.5 x 2.5毫米) 0.40毫米 25 –lp1k–包装cm36 -d 1k-P厘米36 -d液化石油气1k iCE40-LP384-CM49 49球ucBGA(3 x 3毫米) 0.40毫米 37 –lp384–包装cm49 -d 384-P厘米49 -d lp384型 iCE40-LP1K-CM49 49球ucBGA(3 x 3毫米) 0.40毫米 35 –lp1k–包装cm49 -d 1k-P厘米49 -d升1千克 iCE40-LP1K-CM81 81球ucBGA(4 x 4毫米) 0.40毫米 63 –lp1k–包cm81 -d 1k-P厘米81 -d液化石油气1k iCE40-LP4K-CM81 81球ucBGA(4 x 4毫米) 0.40毫米 63 –lp8k–封装cm81:4k -d 8k-P厘米81:4k -d液化石油气8k iCE40-LP8K-CM81 81球ucBGA(4 x 4毫米) 0.40毫米 63 –lp9k–包cm81 -d 8k-P厘米81 -d液化石油气8k iCE40-LP1K-CM121 121球ucBGA(5 x 5毫米) 0.40毫米 95 –lp1k–包cm121 -d 1k-P cm121 -d液化石油气1k iCE40-LP4K-CM121型 121球ucBGA(5 x 5毫米) 0.40毫米 93 –lp8k–包cm121:4k -d 8k-P cm121:4k -d液化石油气8k iCE40-LP8K-CM121 121球ucBGA(5 x 5毫米) 0.40毫米 93 –lp8k–包cm121 -d 8k-P cm121 -d液化石油气8k iCE40-LP4K-CM225 225球ucBGA(7 x 7毫米) 0.40毫米 167 –lp8k–包装cm225:4k -d 8k-P cm225:4k -d液化石油气8k iCE40-LP8K-CM225 225球ucBGA(7 x 7毫米) 0.40毫米 178 –lp8k–包装cm225 -d 8k-P cm225 -d升8公里 iCE40-HX8K-CM225 225球ucBGA(7 x 7毫米) 0.40毫米 178 –hx8k–包装cm225 -d 8k-P cm225 -天hx8k iCE40-LP384-QN32 32针QFN(5 x 5毫米) 0.50毫米 21 –lp384–包装qn32 -d 384-Pqn32 -d lp384型 iCE40-UP5K-SG48 48英寸QFN(7 x 7毫米) 0.50毫米 39 –up5k–包装sg48 -d 5k-P sg48 -向上5公里 iCE40-LP1K-QN84 84英寸QFNS(7 x 7毫米) 0.50毫米 67 –lp1k–包装qn84 -d 1k-Pqn84 -d液化石油气1k iCE40-LP1K-CB81 81球csBGA(5 x 5毫米) 0.50毫米 62 –lp1k–包cb81 -d 1k-P cb81 -d液化石油气1k iCE40-LP1K-CB121 121球csBGA(6 x 6毫米) 0.50毫米 92 –lp1k–包装cb121 -d 1k-P cb121 -d液化石油气1k iCE40-HX1K-CB132 132球csBGA(8 x 8毫米) 0.50毫米 95 –hx1k–包装cb132 -d 1k-P cb132 -d高x1k iCE40-HX4K-CB132 132球csBGA(8 x 8毫米) 0.50毫米 95 –hx8k–包装cb132:4k -d 8k-P cb132:4k -天hx8k iCE40-HX8K-CB132 132球csBGA(8 x 8毫米) 0.50毫米 95 –hx8k–包装cb132 -d 8k-P cb132 -天hx8k iCE40-HX1K-VQ100 100针VQFP(14 x 14毫米) 0.50毫米 72 –hx1k–包装vq100 -d 1k-P vq100 -d高x1k iCE40-HX1K-TQ144 144英寸TQFP(20 x 20毫米) 0.50毫米 96 –hx1k–包装tq144 -d 1k-P tq144 -d高x1k iCE40-HX4K-TQ144 144英寸TQFP(20 x 20毫米) 0.50毫米 107 –hx8k–包装tq144:4k -d 8k-P tq144:4k -天hx8k iCE40-HX4K-BG121 121球caBGA(9 x 9毫米) 0.80毫米 93 –hx8k–封装bg121:4k -d 8k-P bg121:4k -天hx8k iCE40-HX8K-BG121 121球caBGA(9 x 9毫米) 0.80毫米 93 –hx8k–包bg121 -d 8k-P bg121 -天hx8k iCE40-HX8K-CT256 256球caBGA(14 x 14毫米) 0.80毫米 206 –hx8k–包装ct256 -d 8k-P ct256 -天hx8k
目前的工作重点是进一步改进我们的时序分析流程。
如何使用完全开源iCE40流?
iCE40 FPGA的合成可以用Yosys完成。 位置和路线可以通过 蜘蛛侠 。下面是用于实现和编程 arachne-pnr的rot示例 (本例针对iCEstick开发板):
yosys-p“synth_ice40-blif rot.blif”rot.v 蜘蛛侠-pnr-d 1k-p rot.pcf rot.blif-o rot.asc 冰袋rot.asc rot.bin iceprog rot.bin公司
可以使用icetime实用程序生成简单的定时分析报告:
结冰时间-tmd hx1k rot.asc
工具在哪里? 如何安装?
安装必备组件(此命令适用于Ubuntu 14.04):
sudo apt-get安装build-essential clang bison flex libreadline-dev\ gawk tcl-dev libffi-dev git汞图形\ xdot-pkg-config python python3 libftdi-dev\ qt5-默认python3-dev libboost-all-dev cmake libeigen3-dev
在Fedora 24上,以下命令安装所有先决条件:
sudo dnf安装make automake gcc gcc-c++内核级clang bison\ flex readline-devel gawk tcl-devel libffi-evel git-mercurial\ graphviz-python-xdot pkgconfig python-python3 libftdi开发\ qt5-devel python三电平提升电平提升-python三电平本征三电平
注意:所有工具都将相对于/usr/local进行安装
安装 IceStorm工具 (icepack、icebox、iceprog、icetime、芯片数据库):
git克隆 https://github.com/YosysHQ/icestorm.git 冰暴 cd冰暴 制造商-j$(nproc) sudo make安装
正在安装 阿拉伯-PNR (放置和布线工具,NextPNR的前身):
git克隆 https://github.com/cseed/arachne-pnr.git 蛛网膜下腔 cd蜘蛛侠pnr 制造商-j$(nproc) sudo make安装
正在安装 下一个PNR (放置和布线工具,Arachne-PNR更换):
git克隆 https://github.com/YosysHQ/nextpnr 下一个pnr 光盘nextpnr cmake-DARCH=ice40-DCMAKE_INSTALL_PREFIX=/usr/local。 制造商-j$(nproc) sudo make安装
安装Yosys(Verilog合成):
git克隆 https://github.com/YosysHQ/yosys.git 尤瑟斯 cd-yosys公司 制造商-j$(nproc) sudo make安装
放置和路由工具(Arachne-PNR和NextPNR)在构建期间将IceStorm文本芯片数据库转换为相应的PNR二进制芯片数据库。 始终在更新IceStorm安装后重建PNR工具。
Linux注意事项: 创建一个文件/etc/udev/rules.d/53-lattice-ftdi.rules,其中包含以下行,以允许以非特权用户身份将比特流上传到lattice iCEstick和/或lattice iCE40-HX8K Breakout Board:
ATTRS{idVendor}=“0403”,ATTRS{idProduct}=“6010”,MODE=“0660”,GROUP=“plugdev”,TAG+=“uaccess”
Archlinux注意事项: 只需安装 冰暴-比特 , 蛛网膜蛋白-pnr-git 和 尤西斯·吉特 (无需遵循上述安装说明)。
OSX注意事项: 请按照OSX的附加说明在OSX上安装。
求你了 在github上提交问题 如果您有关于所选操作系统上的安装过程的其他注释要共享。
什么是IceStorm工具?
IceStorm Tools是两个小程序,用于处理iCE40位流文件及其ASCII表示 IceStorm工具 , 阿拉伯-PNR 和Yosys。
IcePack/IceUnpack
iceunpack程序将iCE40.bin文件转换为IceStorm ASCII格式,其中芯片中每个磁贴的配置位为0和1。 icepack程序将这样的ASCII文件转换回iCE40.bin文件。 所有其他IceStorm工具都使用ASCII文件格式,而不是比特流二进制文件。
冰岛时间
icetime程序是一个iCE40计时分析工具。 它读取IceStorm ASCII格式的设计,并写入可用于外部计时分析器的计时网表。 它还包括一个简单的拓扑时序分析仪,可用于创建时序报告。
冰盒子
一个python库和各种工具,用于处理IceStorm ASCII文件和访问设备数据库。 例如,icebox_vlog将比特流的ASCII文件转储转换为实现等效电路的Verilog文件。
冰上程序
iCEstick和HX8K开发板上使用的基于FTDI的程序员的小型驱动程序。
IceMulti系列
用于将多个位流文件打包为一个iCE40多引导映像文件的工具。
IcePLL公司
一个计算iCE40 PLL配置参数的小程序。
冰BRAM
一个小程序,用于交换IceStorm ASCII文件中的BRAM内容。 例如,用于在SoC设计中更改固件映像,而无需重新运行合成和放置&路由。
芯片数据库
IceStorm Makefile构建并安装两个文件:chipdb-1k.txt和chipdb-8k.txt。 这些文件包含arachne pnr放置和布线设计以及为放置和布线的设计创建IceStorm ASCII文件的所有相关信息。
IcePack/IceUnpack、IceBox、IceProg、Ice Time和IcePLL均由克莱尔·沃尔夫编写。 IcePack/IceUnpack基于Mathias Lasser提供的参考实现。 《IceMulti》由马库斯·康斯特特(Marcus Comstedt)撰写。
我在哪里获得支持或会见其他IceStorm用户?
如果您对IceStorm流有疑问,请使用 stackoverflow上的yosys标签 来问你的问题。 如果您的问题是关于Verilog HDL设计的一般问题,请考虑使用 stackoverflow上的verilog标记 相反。
有关一般性讨论,请访问Yosys Subreddit或 #freenode IRC上的yosys .
如果您有错误报告,请在github上提交问题。 ( IceStorm问题跟踪程序 , Yosys问题跟踪程序 , Arachne PNR问题跟踪 )
文件在哪里?
推荐阅读:莱迪思iCE40 LP/HX系列数据表、莱迪思eCE技术库(尤其是莱迪思i CE40 LP/HX系列数据库中关于“架构概述”、“PLB模块”、“路由”和“时钟/控制分配网络”的三个页面。请先阅读,然后再回到这里。)
FPGA结构分为块。 有IO、RAM和逻辑块。
逻辑瓷砖文件
IO磁贴文档
RAM Tile文档
比特流文件格式
iCE40 HX1K Bit文档
iCE40 HX8K Bit文档
UltraPlus功能说明
iceunpack程序可用于将比特流转换为ASCII文件,该文件的每个分片有一个由0和1个字符组成的块。 例如:
逻辑文件12 12 000000000000000000000000000000000000000000000000000000 000000000000000000000011010000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000001011000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000001000001000010101010000000000 000000000000000000000000000101010000101010100000000000
该位称为B 年 [ x ]在文档中。 例如,B0是第一行,B0[0]是第一行中的第一位,B15[53]是最后一行中的最后一位。
icebox_explain程序可用于将此配置位块转换为单元配置的描述:
.logic_tile 12 12 LC_7 0101010110101010 0000 缓冲区local_g0_2 lutff_7/in3 缓冲区local_g1_4 lutff_7/in0 缓冲区sp12_h_r_18本地_g0_2 缓冲区sp12_h_r20本地g1_4
IceBox包含iCE40瓷砖中可以找到的电线和配置位数据库。 可以通过IceBox Python API访问此数据库。 但IceBox是一个大破解。 因此,建议只使用IceBox API将此数据库导出为适合目标应用程序的格式。 请参阅icebox_chipdb以获取实现此功能的示例程序。
学习如何使用此文档的推荐方法是使用Yosys和Arachne-pnr合成非常简单的电路,对生成的比特流文件运行icestorm工具icebox_explain,并使用上述数据库的HTML导出分析结果。 可以使用icebox_vlog将比特流转换为Verilog。 此工具的输出文件还将在添加到生成的Verilog代码的注释中列出信号路径。
例如,考虑以下Verilog和PCF文件:
//示例.v 模块顶部(输入a、b、输出y); 指定y=a&b; 末端模块 #示例.pcf 设置为1 集合_io b 10 集合_io y 11
通过Yosys、Arachne-PNR和IcePack运行:
$yosys-p“synth_ice40-top top-blif example.blif”示例.v $arachne-pnr-d 1k-o示例.asc-p示例.pcf示例.blif $icepack示例.asc示例.bin
我们会得到如下的icebox_explain输出:
$icebox_explain示例.asc 正在读取文件“example.asc”。。 面料尺寸(不含IO瓷砖):12 x 16 .io_文件0 10 IOB_1针脚类型_0 IOB_1针脚类型_3 IOB_1针脚类型_4 IoCtrl IE_0 IoCtrl IE_1 IoCtrl REN_0 缓冲区local_g0_5 io_1/D_OUT_0 缓冲区逻辑op_tnr5本地g05 .io_文件0 14 IOB_1针脚类型_0 IoCtrl IE_1 IoCtrl REN_0 缓冲区io_1/D_IN_0 span4_vert_b_6 .io_文件0 11 IOB_0 PIN码_0 IoCtrl IE_0 IoCtrl REN_1 布线span4_vert_t_14 span4_horz_13 .logic_tile 1 11 LC_5 00010000000000000000000 缓冲区local_g0_0 lutff_5/in_1 缓冲区local_g3_0 lutff_5/in_0 缓冲区邻op_lft_0本地g0_0 缓冲区sp4_h_r-24本地_g3_0
类似于以下icebox_vlog输出:
$icebox_vlog-p示例.pcf示例.asc //正在读取文件“example.asc”。。 模块芯片(输出y,输入b,输入a); 导线y; //io_0_10_1 //(0,10,'io_1/D_OUT_0') //(0,10,‘io_1/PAD’) //(0,10,'本地_g0_5') //(0,10,'逻辑_op_tnr_5') //(0,11,'logic_op_rgt_5') //(0,12,'逻辑_op_bnr_5') //(1,10,'邻近_ op_top_5') //(1,11,‘lutff_5/out’) //(1,12,'邻近_ op_bot_5') //(2,10,'邻近_ op_tnl_5') //(2,11,'相邻_ op_lft_5') //(2,12,'相邻_ op_bnl_5') 导线b; //io_0_11_0 //(0,11,“io_0/D_IN_0”) //(0,11,‘io_0/PAD’) //(1,10,'邻近_ op_tnl_0') //(1,10,'邻近_ op_tnl_4') //(1,11,“本地_g0_0”) //(1,11,‘lutff_5/in_1’) //(1,11,'相邻_ op_lft_0') //(1,11,'相邻_ op_lft_4') //(1,12,'邻居_op_bnl_0') //(1,12,'相邻_ op_bnl_4') 导线a; //io_0_14_1 //(0,11,'span4_horz_13') //(0,11,'span4_vert_t_14') //(0,12,'span4_vert_b_14') //(0,13,'span4_vert_b_10') //(0,14,“io_1/D_IN_0”) //(0,14,'io_1/PAD') //(0,14,'span4_vert_b_6') //(0,15,“span4_vert_b2”) //(1,11,'本地_g3_0') //(1,11,‘lutff_5/in_0’) //(1,11,‘sp4_h_r_24') //(1,13,'邻近_ op_tnl_2') //(1,13,'邻近_ op_tnl_6') //(1,14,'相邻_ op_lft_2') //(1,14,'相邻_ op_lft_6') //(1,15,'neigh_op_bnl2') //(1,15,'相邻_ op_bnl_6') //(2,11,‘sp4_h_r_37') //(3,11,‘sp4_hl_37') 分配y=/*LUT 1 11 5*/b? a:0; 末端模块
链接
相关项目的链接。 如果你有一个有趣和相关的链接,请联系我。
iCE40板
讲座和教程
其他FPGA比特流文档项目
在论文和报告中,请参考冰风暴项目如下:克莱尔·沃尔夫、马蒂亚斯·拉塞尔。 冰风暴项目。 http://bygone.clairexen.net/icestorm/ 例如,使用以下BibTeX代码:
@MISC{冰风暴, author={Claire Wolf和Mathias Lasser}, title={Project IceStorm}, howpublished=“\url{ http://bygone.clairexen.net/icestorm/ }" }
文件主要由克莱尔·沃尔夫于2015年提供。 基于Mathias Lasser和Claire Wolf的研究。 从莱迪思购买iCEstick或iCE40-HX8K跳线板,看看您可以使用此处提供的工具和信息做什么。
Project IceStorm是一个开源项目,它提供了一个完全开源的工具包,用于使用莱迪思iCE40 FPGA(现场可编程门阵列)。 Lattice Semiconductor的iCE40系列FPGA因其低成本和低功耗而广受欢迎,是从事小型或预算敏感FPGA项目的爱好者、研究人员和开发人员的理想选择。
“IceStorm”这个名称本身表明了该项目的目标,即在传统上是封闭源代码的专有FPGA工具链上提供透明度和“打破僵局”。通过创建一个完全开放源代码的工具包,project IceStorn可以加深对整个FPGA开发过程的理解和更好的控制。
IceStorm项目的关键组成部分:
冰袋: 将文本中间表示(asc)转换为iCE40二进制配置文件格式(bin)的工具。
冰袋: 一种执行与冰袋相反操作的工具; 它将二进制文件转换回可读文本格式。
iceprog: 一个简单的程序员应用程序,用于将比特流上传到iCE40 FPGA。
结冰时间: 一种定时分析工具,用于估计比特流的延迟时间。
芯片数据库: Project IceStorm还包括一个数据库,该数据库记录了iCE40系列FPGA各个部分的比特流格式,这对其他工具的正确运行至关重要。
IceStorm项目的特点和好处:
透明度: 开源工具可以深入了解比特流组成和FPGA架构,这有助于教育目的和FPGA设计研究。
社区驱动: 来自开源社区的贡献增强并维护了工具包,满足了开发人员的最新需求。
灵活性: 开发人员可以自由修改和调整工具包,以适应特定的项目需求,而不受专有解决方案的限制。
成本效率: Project IceStorm提供了商业工具的免费替代品,降低了实验和部署FPGA设计的门槛。
使用Project IceStorm的应用程序:
Project IceStorm使各种应用程序能够从其开源FPGA工具包中获益:
教育项目和教程: 它为数字逻辑设计和FPGA架构的教学提供了一个无需昂贵的软件许可证的可访问平台。
业余爱好者原型: 爱好者可以在物理FPGA上以较低的成本开发和测试他们的定制数字电路。
研发: 学术界和研究人员可以在不受商业许可协议约束的情况下使用FPGA设计进行实验,从而促进创新突破。
启动原型: 致力于新硬件解决方案的初创公司可以在最初的研发阶段使用IceStorm,以在迭代设计的同时将成本降至最低。
自动化和机器人: 开放硬件计划可以使用IceStorm为自动化系统和机器人开发自定义逻辑电路。
总之,冰风暴项目代表着FPGA编程民主化的一个重大进步,为社区提供了一度仅限于专有软件的工具。 这不仅促进了iCE40 FPGA的学习和实验,也支持了更大范围的开源硬件创新。