IceStorm项目

什么是冰风暴项目?

Project IceStorm旨在记录Lattice iCE40 FPGA的比特流格式,并提供用于分析和创建比特流文件的简单工具。冰风暴流(YosysArachne公司和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制造商提供的专有工具链有很大的不同。项目的工具链包括几个关键组件:

  1. 冰咆哮–IceStorm是该项目的核心,它负责处理比特流文档,并为iCE40 FPGA提供比特流分析和创建工具。
  2. 阿拉伯-PNR–最初与IceStorm一起使用的位置和路线工具(后来被nextpnr取代)。
  3. 下一个pnr–一种改进的多功能位置和路线工具,在开源FPGA社区中基本上取代了Arachne-PNR。它被设计成一种供应商中立、时间驱动的位置和路线工具。
  4. 尤瑟斯–一个开源合成工具,用于将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-SWG16TR16球WLCSP(1.40 x 1.48毫米)0.35毫米10–lp1k–软件包swg16tr-d 1k-P开关16tr-d液化石油气1k
iCE40-UP3K-UWG3030球WLCSP(2.15 x 2.55毫米)0.40毫米21–up5k–包装uwg30-d 5k-P uwg30-向上5公里
iCE40-UP5K-UWG3030球WLCSP(2.15 x 2.55毫米)0.40毫米21–up5k–包装uwg30-d 5k-P uwg30-向上5公里
iCE40-LP384-CM3636球ucBGA(2.5 x 2.5毫米)0.40毫米25–lp384–包装cm36-d 384-P厘米36-d lp384型
iCE40-LP1K-CM3636球ucBGA(2.5 x 2.5毫米)0.40毫米25–lp1k–包装cm36-d 1k-P厘米36-d液化石油气1k
iCE40-LP384-CM4949球ucBGA(3 x 3毫米)0.40毫米37–lp384–包装cm49-d 384-P厘米49-d lp384型
iCE40-LP1K-CM4949球ucBGA(3 x 3毫米)0.40毫米35–lp1k–包装cm49-d 1k-P厘米49-d升1千克
iCE40-LP1K-CM8181球ucBGA(4 x 4毫米)0.40毫米63–lp1k–包cm81-d 1k-P厘米81-d液化石油气1k
iCE40-LP4K-CM8181球ucBGA(4 x 4毫米)0.40毫米63–lp8k–封装cm81:4k-d 8k-P厘米81:4k-d液化石油气8k
iCE40-LP8K-CM8181球ucBGA(4 x 4毫米)0.40毫米63–lp9k–包cm81-d 8k-P厘米81-d液化石油气8k
iCE40-LP1K-CM121121球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-CM121121球ucBGA(5 x 5毫米)0.40毫米93–lp8k–包cm121-d 8k-P cm121-d液化石油气8k
iCE40-LP4K-CM225225球ucBGA(7 x 7毫米)0.40毫米167–lp8k–包装cm225:4k-d 8k-P cm225:4k-d液化石油气8k
iCE40-LP8K-CM225225球ucBGA(7 x 7毫米)0.40毫米178–lp8k–包装cm225-d 8k-P cm225-d升8公里
iCE40-HX8K-CM225225球ucBGA(7 x 7毫米)0.40毫米178–hx8k–包装cm225-d 8k-P cm225-天hx8k
iCE40-LP384-QN3232针QFN(5 x 5毫米)0.50毫米21–lp384–包装qn32-d 384-Pqn32-d lp384型
iCE40-UP5K-SG4848英寸QFN(7 x 7毫米)0.50毫米39–up5k–包装sg48-d 5k-P sg48-向上5公里
iCE40-LP1K-QN8484英寸QFNS(7 x 7毫米)0.50毫米67–lp1k–包装qn84-d 1k-Pqn84-d液化石油气1k
iCE40-LP1K-CB8181球csBGA(5 x 5毫米)0.50毫米62–lp1k–包cb81-d 1k-P cb81-d液化石油气1k
iCE40-LP1K-CB121121球csBGA(6 x 6毫米)0.50毫米92–lp1k–包装cb121-d 1k-P cb121-d液化石油气1k
iCE40-HX1K-CB132132球csBGA(8 x 8毫米)0.50毫米95–hx1k–包装cb132-d 1k-P cb132-d高x1k
iCE40-HX4K-CB132132球csBGA(8 x 8毫米)0.50毫米95–hx8k–包装cb132:4k-d 8k-P cb132:4k-天hx8k
iCE40-HX8K-CB132132球csBGA(8 x 8毫米)0.50毫米95–hx8k–包装cb132-d 8k-P cb132-天hx8k
iCE40-HX1K-VQ100100针VQFP(14 x 14毫米)0.50毫米72–hx1k–包装vq100-d 1k-P vq100-d高x1k
iCE40-HX1K-TQ144144英寸TQFP(20 x 20毫米)0.50毫米96–hx1k–包装tq144-d 1k-P tq144-d高x1k
iCE40-HX4K-TQ144144英寸TQFP(20 x 20毫米)0.50毫米107–hx8k–包装tq144:4k-d 8k-P tq144:4k-天hx8k
iCE40-HX4K-BG121121球caBGA(9 x 9毫米)0.80毫米93–hx8k–封装bg121:4k-d 8k-P bg121:4k-天hx8k
iCE40-HX8K-BG121121球caBGA(9 x 9毫米)0.80毫米93–hx8k–包bg121-d 8k-P bg121-天hx8k
iCE40-HX8K-CT256256球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.biniceprog 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光盘nextpnrcmake-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 12000000000000000000000000000000000000000000000000000000000000000000000000000011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000010101010000000000000000000000000000000000000101010000101010100000000000

该位称为B[x]在文档中。例如,B0是第一行,B0[0]是第一行中的第一位,B15[53]是最后一行中的最后一位。

icebox_explain程序可用于将此配置位块转换为单元配置的描述:

.logic_tile 12 12LC_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 10IOB_1针脚类型_0IOB_1针脚类型_3IOB_1针脚类型_4IoCtrl IE_0IoCtrl IE_1IoCtrl REN_0缓冲区local_g0_5 io_1/D_OUT_0缓冲区逻辑op_tnr5本地g05.io_文件0 14IOB_1针脚类型_0IoCtrl IE_1IoCtrl REN_0缓冲区io_1/D_IN_0 span4_vert_b_6.io_文件0 11IOB_0 PIN码_0IoCtrl IE_0IoCtrl REN_1布线span4_vert_t_14 span4_horz_13.logic_tile 1 11LC_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项目的关键组成部分:

  1. 冰袋:将文本中间表示(asc)转换为iCE40二进制配置文件格式(bin)的工具。
  2. 冰袋:一种执行与冰袋相反操作的工具;它将二进制文件转换回可读文本格式。
  3. iceprog:一个简单的程序员应用程序,用于将比特流上传到iCE40 FPGA。
  4. 结冰时间:一种定时分析工具,用于估计比特流的延迟时间。
  5. 芯片数据库:Project IceStorm还包括一个数据库,该数据库记录了iCE40系列FPGA各个部分的比特流格式,这对其他工具的正确运行至关重要。

IceStorm项目的特点和好处:

  • 透明度:开源工具可以深入了解比特流组成和FPGA架构,这有助于教育目的和FPGA设计研究。
  • 社区驱动:来自开源社区的贡献增强并维护了工具包,满足了开发人员的最新需求。
  • 灵活性:开发人员可以自由修改和调整工具包,以适应特定的项目需求,而不受专有解决方案的限制。
  • 成本效率:Project IceStorm提供了商业工具的免费替代品,降低了实验和部署FPGA设计的门槛。

使用Project IceStorm的应用程序:

Project IceStorm使各种应用程序能够从其开源FPGA工具包中获益:

  1. 教育项目和教程:它为数字逻辑设计和FPGA架构的教学提供了一个无需昂贵的软件许可证的可访问平台。
  2. 业余爱好者原型:爱好者可以在物理FPGA上以较低的成本开发和测试他们的定制数字电路。
  3. 研发:学术界和研究人员可以在不受商业许可协议约束的情况下使用FPGA设计进行实验,从而促进创新突破。
  4. 启动原型:致力于新硬件解决方案的初创公司可以在最初的研发阶段使用IceStorm,以在迭代设计的同时将成本降至最低。
  5. 自动化和机器人:开放硬件计划可以使用IceStorm为自动化系统和机器人开发自定义逻辑电路。

总之,冰风暴项目代表着FPGA编程民主化的一个重大进步,为社区提供了一度仅限于专有软件的工具。这不仅促进了iCE40 FPGA的学习和实验,也支持了更大范围的开源硬件创新。