Что такое проект IceStorm ?

Проект IceStorm направлен на обратную разработку и документирование формата битового потока ПЛИС iCE40 производства компании Lattice. Также IceStorm предоставляет простые инструменты для анализа и создания битового потока файлов. Поток Ice Storm (YosysArachne-pnr и IceStorm) — это полностью открытый исходный поток для ПЛИС iCE40 с описанием на языке Verilog. В центре внимания проекта находятся чипы iCE40 LP/HX 1K/4K/8K. (Большая часть работы была сделана с помощью HX1K-TQ144 и HX8K-CT256.)

 

2016-01-17: Первая версия анализа синхронизации IceTime. Видео: https://youtu.be/IG5CpFJRnOk
2015-12-27: Презентация потока IceStorm на 32-ом Всемирном конгрессе хакеров ( 32C3) (Видео на Youtube).
2015-07-19: Поддержка выпуска чипов 8k. Исходный код Ice Storm перемещён на GitHub.
2015-05-27: У нас есть рабочий исходный поток полностью в открытом доступе с Yosys и Arachne-pnr! Видео:http://youtu.be/yUiNlmvVOq8
2015-04-13: К полностью переписанной программе IceUnpack добавлена IcePack и некоторые основные обновления документации.
2015-03-22: Первый публичный релиз и короткое видео на YouTube демонстрируют нашу работу: http://youtu.be/u1ZHcSNDQMM

Почему нужно выбрать Lattice iCE40 ?

Продукт имеет минималистичную конфигурацию с чётко определённой структурой. В нём не много элементов или специальных функциональных единиц. Это делает его идеальным как для обратной разработки, так и в качестве базовой платформы для универсальной разработки инструментов для ПЛИС.

Кроме того, Lattice iCEstick является доступным и простым в использовании платформы разработки приложений, что делает его интересным для всех видов проектов. (iCEstick содержит чип HX1K. Также Lattice продаёт переходную плату iCE40-HX8K с чипом HX8K.)

Каков статус проекта ?

Мы уверены, что девайс 1K и 8K полностью спроектированы. Например, мы можем представить правильную функциональную модель Verilog для всех битовых потоков, созданных Lattice iCEcube2 для iCE40 HX1K-TQ144 и iCE40HX8K-CT256, используя наш инструмент icebox_vlog.

Ниже представлен список поддерживаемых в настоящее время деталей и соответствующих опций для arachne-pnr(размещение и маршрутизация) и icetime (анализ синхронизации):

Деталь Программный пакет Расстояние между выводами I/Os Опции arachne-pnr Опции

icetime

iCE40-LP1K-SWG16TR 16-ball WLCSP (1.40 x 1.48 mm) 0.35 mm 10 -d 1k -P swg16tr -d lp1k
iCE40-LP1K-CM36 36-ball ucBGA (2.5 x 2.5 mm) 0.40 mm 25 -d 1k -P cm36 -d lp1k
iCE40-LP1K-CM49 49-ball ucBGA (3 x 3 mm) 0.40 mm 35 -d 1k -P cm49 -d lp1k
iCE40-LP1K-CM81 81-ball ucBGA (4 x 4 mm) 0.40 mm 63 -d 1k -P cm81 -d lp1k
iCE40-LP4K-CM81 81-ball ucBGA (4 x 4 mm) 0.40 mm 63 -d 8k -P cm81:4k -d lp8k
iCE40-LP8K-CM81 81-ball ucBGA (4 x 4 mm) 0.40 mm 63 -d 8k -P cm81 -d lp8k
iCE40-LP1K-CM121 121-ball ucBGA (5 x 5 mm) 0.40 mm 95 -d 1k -P cm121 -d lp1k
iCE40-LP4K-CM121 121-ball ucBGA (5 x 5 mm) 0.40 mm 93 -d 8k -P cm121:4k -d lp8k
iCE40-LP8K-CM121 121-ball ucBGA (5 x 5 mm) 0.40 mm 93 -d 8k -P cm121 -d lp8k
iCE40-LP4K-CM225 225-ball ucBGA (7 x 7 mm) 0.40 mm 167 -d 8k -P cm225:4k -d lp8k
iCE40-LP8K-CM225 225-ball ucBGA (7 x 7 mm) 0.40 mm 178 -d 8k -P cm225 -d lp8k
iCE40-HX8K-CM225 225-ball ucBGA (7 x 7 mm) 0.40 mm 178 -d 8k -P cm225 -d hx8k
iCE40-LP1K-QN84 84-pin QFNS (7 x 7 mm) 0.50 mm 67 -d 1k -P qn84 -d lp1k
iCE40-LP1K-CB81 81-ball csBGA (5 x 5 mm) 0.50 mm 62 -d 1k -P cb81 -d lp1k
iCE40-LP1K-CB121 121-ball csBGA (6 x 6 mm) 0.50 mm 92 -d 1k -P cb121 -d lp1k
iCE40-HX1K-CB132 132-ball csBGA (8 x 8 mm) 0.50 mm 95 -d 1k -P cb132 -d hx1k
iCE40-HX4K-CB132 132-ball csBGA (8 x 8 mm) 0.50 mm 95 -d 8k -P cb132:4k -d hx8k
iCE40-HX8K-CB132 132-ball csBGA (8 x 8 mm) 0.50 mm 95 -d 8k -P cb132 -d hx8k
iCE40-HX1K-VQ100 100-pin VQFP (14 x 14 mm) 0.50 mm 72 -d 1k -P vq100 -d hx1k
iCE40-HX1K-TQ144 144-pin TQFP (20 x 20 mm) 0.50 mm 96 -d 1k -P tq144 -d hx1k
iCE40-HX4K-TQ144 144-pin TQFP (20 x 20 mm) 0.50 mm 107 -d 8k -P tq144:4k -d hx8k
iCE40-HX8K-CT256 256-ball caBGA (14 x 14 mm) 0.80 mm 206 -d 8k -P ct256 -d hx8k

 

Цель нашей текущей работы — улучшение анализа синхронизации потока.

Как использовать полностью открытый исходный поток iCE40 ?

Синтез для ПЛИС iCE40 можно сделать с помощью Yosys. Размещение и маршрутизация выполняется с помощью arachne-pnr. Вот пример сценария для реализации и программирования rot example из arachne-pnr (этот пример ориентирован на макетную плату iCEstick):

Простой отчёт анализа синхронизации можно смоделировать с помощью утилиты icetime:

Какие инструменты ? Как установить ?

Установка необходимых компонентов (эта команда для Ubuntu 14.04):

Установка IceStorm Tools (icepack, icebox, iceprog, icetime, базы данных чипов):

Установка Arachne-PNR (инструмент размещения и маршрутизации):

Установка Yosys (Синтез Verilog):

Программа Arachne-PNR конвертирует тексты базы данных чипов IceStorm в бинарные базы данных чипов arachne-pnr. Всегда восстанавливайте Arachne-PNR после обновления установки IceStorm .

Примечания для Linux: Создайте файл /etc/udev/rules.d/53-lattice-ftdi.rules со следующей строкой в нём, чтобы загружать битовые потоки на Lattice iCEstick и/или на переходную плату Lattice iCE40-HX8K в качестве непривилегированного пользователя:

Примечания для Archlinux: просто установите icestorm-gitarachne-pnr-git и yosys-git из пользовательского репозитория Arch (не обязательно следовать инструкциям, указанным выше).

Примечания для OSX: Пожалуйста, следуйте дополнительным инструкциям OSX для установки в OSX.

Пожалуйста, задайте вопрос на github, если у вас есть дополнительные замечания по процедурам установки операционной системы по вашему выбору.

Что такое IceStorm Tools ?

IceStorm Tools- это несколько небольших программ для работы с файлами битового потока iCE40 и наше представлениеASCII. Полностью открытый исходный поток iCE40 состоит из IceStorm Tools, Arachne-PNR и Yosys.

IcePack/IceUnpack

Программа iceunpack конвертирует бинарный файл iCE40 в формат IceStorm ASCII, в котором есть блоки 0 и 1 для конфигурации битов для каждого элемента в чипе. Программа icepack конвертирует такие ASCII файлы назад в бинарные файлы iCE40. Все остальные инструменты IceStorm работают с форматом файла ASCII, но не с бинарными файлами битовых потоков.

IceTime

Программа icetime — это инструмент анализа синхронизации iCE40. Она считывает структуры кода в формате IceStorm ASCIIи записывает периодичность списка связей синхронизации, которые могут быть использованы в анализаторах внешней синхронизации. Программа также включает в себя топологический анализатор синхронизации, который можно использовать для создания отчётов синхронизации.

IceBox

Библиотека python и различные инструменты для работы с файлами IceStorm ASCII, а также доступ к базе данных устройства. Например, icebox_vlog конвертирует содержимое нашего файла битового потока ASCII в файл Verilog, который реализует эквивалентную цепь.

IceProg

Небольшая программа-драйвер для устройств программирования на основе FTDI, которые используются на iCEstick и макетной плате HX8K.

IceMulti

Инструмент для распаковки множественных файлов битового потока в один iCE40 мультизагрузочный файл-изображение.

IcePLL

Небольшая программа для вычисления параметров конфигурации ФАПЧ iCE40.

IceBRAM

Небольшая программа для замены содержимого BRAM в файлах IceStorm ASCII. Например, для замены изображения микропрограммы в СНК без повторного запуска синтеза, размещения и маршрутизации.

ChipDB

Сборочный файл IceStorm создаёт и устанавливает два файла: chipdb-1k.txt и chipdb-8k.txt. Эти файлы содержат всю необходимую информацию для размещения и маршрутизации схемы в arachne-pnr и создают файл IceStorm ASCII для размещённой и маршрутизированной схемы.

Clifford Wolf — написал  IcePack/IceUnpack, IceBox, IceProg, IceTime и IcePLL.

IcePack/IceUnpack основаны на базовой реализации, предоставленной Mathias Lasser.

Marcus Comstedt — написал IceMulti.

Где я могу получить поддержку или познакомиться с другими пользователями IceStorm ?

Если у вас есть вопросы по потоку IceStorm, используйте тег <yosys> на stackoverflow, чтобы задать ваш вопрос. Если ваш вопрос касается дизайна разработки Verilog HDL, можно пременить тег <Verilog> на stackoverflow.

Для общего обсуждения зайдите на Yosys Subreddit или #yosys на freenode IRC.

Если у вас есть отчёт об ошибке, пожалуйста, задайте вопрос на github. (IceStorm Issue Tracker, Yosys Issue Tracker, Arachne-PNR Issue Tracker)

Как найти информацию ?

Рекомендованная литература: Lattice iCE40 LP/HX Family Datasheet, Lattice iCE Technology Library (особенно три страницы из «Architecture Overview», «PLB Blocks», «Routing» и «Clock/Control Distribution Network» in the Lattice iCE40 LP/HX Family Datasheet. Сначала прочитайте, а затем вернитесь сюда).

Структура ПЛИС разделена на компоненты. Есть компоненты IO, RAM и LOGIC.

LOGIC Tile Documentation (Документация компонентов LOGIC);

IO Tile Documentation (Документация компонентов IO);

RAM Tile Documentation ( Документация компонентов RAM);

The Bitstream File Format (Формат файла битового потока);

The iCE40 HX1K Bit Docs (Документация битов iCE40 HX1K);

The iCE40 HX8K Bit Docs (Документация битов iCE40 HX8K).

Программу iceunpack можно использовать для преобразования битового потока в файл ASCII с блоком символов 0 и 1 для каждого элемента.

Например:

Эти биты в документации обозначаются By[x]. Например, B0- это первая строка, B0[0]- первый бит в первой строке, иB15[53]- последний бит в последней строке.

Программу icebox_explain можно использовать для преобразования этого блока конфигурации битов в описание конфигурации ячейки:

IceBox содержит базу данных соединений и конфигурации битов для компонентов iCE40. В эту базу данных можно войти с помощью IceBox Python ИПП, но это будет долгой и нудной процедурой. Поэтому рекомендуется использовать IceBox ИПП, чтобы преобразовать эту базу данных в подходящий формат целевого приложения. См. icebox_chipdb как пример программы, которая выполняет это действие.

Рекомендуемый подход к обучению, как использовать эту документацию -это синтезировать очень простую схему, используяYosys и Arachne-pnr, запустить инструмент icestorm icebox_explain в конечных файлах битового потока и проанализировать результаты, используя HTML экспорт базы данных, указанной выше. icebox_vlog можно использовать для преобразования битового потока в Verilog. Файл вывода данных этого инструмента определит путь прохождения сигнала в комментариях, добавленных к сгенерированному коду Verilog:

Например, рассмотрим следующие файлы Verilog и PCF:

И запустите их через Yosys, Arachne-PNR и IcePack:
Мы получим что-то наподобие следующих данных вывода:
И приблизительно следующий вывод данных icebox_vlog :

Ссылки на проекты

Платы iCE40

  • Lattice iCEstick
  • IcoBoard
  • wiggleport
  • ICEd = an Arduino Style Board, with ICE FPGA
  • CAT Board
  • eCow-Logic pico-ITX Lattice ICE40 board
  • Nandland Go Board

Другие проекты обратной разработки ПЛИС ( FPGA)

От битового потока до списка связей, Jean-Baptiste Note и Éric Rannaud

В документах и отчётах, пожалуйста, ссылайтесь на Проект IceStorm следующим образом: Clifford Wolf, Mathias Lasser, Project IceStorm, http://www.clifford.at/icestorm , например, используя следующий BibTeX код:

Большая часть документации предоставлена Clifford Wolf <clifford@clifford.at> в 2015. Основана на исследованиях Mathias Lasser и Clifford Wolf.

Купите iCEstick или макетную плату iCE40-HX8K от Lattice увидите, что можно сделать с помощью предоставленной здесь информации и инструментов.

Источник www.clifford.at