позитивслэк – Telegram
позитивслэк
829 subscribers
129 photos
41 files
190 links
ASIC, FPGA, SystemVerilog, UVM. Цифровой дизайн, программирование, духота и мемы. С уклоном в верификаторство.

Обратная связь: @esynr3z
https://news.1rj.ru/str/boost/positiveslack
Download Telegram
DSP Starter Pack

Мини-подборка материалов более-менее оптимальных по сложности, наглядности и практической направленности.

Без паники! Цифровая обработка сигналов
Юкио Сато

Несложно и наглядно. Перевод с японского.

Цифровая обработка сигналов. Практическое руководство для инженеров и научных работников
Смит С.

The Scientist and Engineer's Guide to Digital Signal Processing
Steven W. Smith

http://www.dspguide.com/

Обширный разбор тем на понятном английском и с примерами на BASIC. Плюс перевод на русский.

Цифровая обработка сигналов на Python
Аллен Б. Дауни

Think DSP
Allen B. Downey

https://greenteapress.com/wp/think-dsp/

Практическая направленность с подходом сверху-вниз - от программирования к математике

Курс лекций «Основы цифровой обработки сигналов»
Александр Капитанов

https://github.com/capitanov/dsp-theory

Наглядно и интерактивно за счёт Jupyter Notebook

Посты автора по dsp и fpga на хабре:
https://habr.com/ru/users/capitanov/posts/

#dsp #book #course
PLL в Lattice ICE40HX4K

Долго не мог понять почему не могу поставить вторую PLL.

А оказалось всё просто. У каждой PLL есть отдельный пин для ввода клока, и если даже он не используется для этого, но PLL в дизайне есть, то назначить этот пин как обычный вход нельзя. Естественно, этот самый пин использовался в проекте как вход.

И самое интересное, что нигде не сказано про то, какие клоковые пины имеют особое значение для PLL. И максимум что можно найти в документации это то, что PLL имеют оптимальное подключение к буферам в банках 0 и 2.

Подробнее можно прочитать здесь:
https://github.com/YosysHQ/icestorm/issues/273

#lattice #fpga #pll
BRAM и сброс в Lattice ICE40

И ещё одни неочевидные грабли с Lattice.

Блоки BRAM некоторое время недоступны после сброса (читаются нули). И нужно делать задержку сброса тактов в 40, чтобы пофиксить.

https://github.com/YosysHQ/icestorm/issues/76

http://svn.clifford.at/handicraft/2017/ice40bramdelay

#lattice #fpga #bram
Шины данных в примиве SB_RAM40_4K ICE40

И еще кое-что про память.

Yosys не всегда корректно инферрит BRAM, поэтому иногда приходится создавать инстанс SB_RAM40_4K руками. И тут есть неочевидная особенность, связанная с битами данных в разных режимах: последняя таблица вот здесь http://www.clifford.at/icestorm/ram_tile.html.

Ну и как водится, официальный документ LATTICE ICE Technology Library молчит на этот счёт.

На текущий момент по теме граблей ICE40 пока всё. Продолжаю наблюдение.

#lattice #fpga #bram #yosys
Awesome Lattice FPGA boards

В последнее время стал замечать, что многие вдруг стали каталогизировать свои знания в формат Awesome Lists. И как ни странно, это бывает полезным и находятся порой очень крутые списки. Вот например самый полный список Lattice отладок, что я видел.

https://github.com/kelu124/awesome-latticeFPGAs

#fpga #lattice #devboard #awesome
Colorlight Lattice ECP5 boards

Так-то пару десятков баксов (а то и меньше) за 24к ячеек довольно неплохая сделка. В оригинале эти платы позиционируются как контроллеры светодиодных панелей, однако, никто не сможет запретить использовать такую плату как отладку для всякого =)

Кстати, полностью поддерживаются опенсорсным тулчейном (yosys & prjtrellis & nextpnr).

Репозиторий с информацией:
https://github.com/wuxx/Colorlight-FPGA-Projects

Colorlight i5 (из двух плат):
https://aliexpress.ru/item/1005001686186007.html

Colorlight 5A-75B:
https://aliexpress.ru/item/1005001686175194.html

#fpga #lattice #devboard
EBAZ4205 - отладка с Zynq почти даром

В продолжение темы бюджетных отладок.

Баян конечно, но поюзанные контроллеры от майнеров на XC7Z010CLG400 (Dual Core Cortex A9 @ 666.66MHz, Artix-7 FPGA 28k LEs) можно купить на Али/Авито за 500-1000р. Что одному хайтэк мусор, другому - крутая отладка.

Репозиторий с информацией:
https://github.com/xjtuecho/EBAZ4205

Али:
https://aliexpress.ru/item/1005001679188068.html

#fpga #xilinx #zynq #devboard
"Один отладчик, чтобы править всеми..."

Кто-то психанул и запихнул в одну коробку отладчики сразу для трёх вендоров: Lattice, Xilinx, Intel. Интересно поглядеть что там внутри.

Али:
https://aliexpress.ru/item/4000581789412.html

#fpga #xilinx #lattice #altera #intel
ECPIX-5, the modern ECP5 development board

Информация о плате пошла по чатам. Тоже схороню здесь на всякий, т.к. выглядит вкусно.

Относительно доступная (€99 и €149 за 45к и 85к лутов, соответственно), куча IO, быстрые интерфейсы, полная поддержка в опенсорс тулах.

http://docs.lambdaconcept.com/ecpix-5/
https://shop.lambdaconcept.com/home/46-1-ecpix-5.html

Features:

ECPIX-5 comes in two FPGA variants: LFE5UM5G-45F (45K LUTs) or the larger LFE5UM5G-85F (85K LUTs).

* Lattice ECP5-5G FPGA with 5Gbit/s SERDES.
* 4Gb (256MB) of DDR3L RAM
* 256Mb (32MB) Quad-SPI Flash
* Built-in JTAG and serial USB interface
* USB-C port for USB 2 and USB 3 operation
* HDMI 1.4b transmitter
* Gigabit Ethernet
* Full size SATA port
* microSD (UHS-II capable)
* Four RGB LEDs
* Eight industry standard PMOD connectors

Applications:

* nMigen/Migen/LiteX programming
* USB 2/USB 3 prototyping
* Game console emulation
* Software Defined Radio
* Customizable RISC-V SoC

#lattice #fpga #devboard
Awesome Hardware Denoscription Languages

Добротный список того, на чём можно писать железо. От мужика, подарившего нам
https://wavedrom.com

https://github.com/drom/awesome-hdl

#hdl #hls #awesome
verilog_pwl_modeling_mixed_signal.pdf
2.9 MB
SystemVerilog для симуляции аналоговых компонентов

Гуглил тут на тему, как лучше в обычном цифровом тестбенче имитировать RC-цепь, аналоговый компаратор и т.п. Чтобы без всяких Verilog-AMS и прочих mixed-signal наворотов.

Наткнулся на шикарный диссер из Стэнфорда, где показан общий подход к тому, как с помощью SystemVerilog и кусочно-линейных функций создать pin-accurate модель аналогового блока, работающую в любом цифровом симуляторе.

VERILOG PIECEWISE LINEAR BEHAVIORAL MODELING FOR MIXED-SIGNAL VALIDATION
Sabrina Liao
https://purl.stanford.edu/pb381vh2919

#simulation #system_verilog #mixed_signal #analog_design
Icarus и SystemVerilog

Поддержка SV в Икарусе потихоньку развивается - вот в достаточно свежей 11-ой версии (сентябрь 2020) обнаружил, что уже поддерживаются конструкции always_comb, always_ff и always_latch!
Однако, как сами отмечают авторы

Missing SystemVerilog Language Features
This is still too large a list to enumerate.


Единственное, 11-ю версию еще не завезли в системные репозитории, поэтому надо собирать самому из исходников.

https://iverilog.fandom.com/wiki/Release_Notes_Icarus_Verilog_11

#icarus #system_verilog
Extreme Wiring on the Prototyping Board

Видео от легендарного ELM-ChaN про прототипирование на коленке.

https://www.youtube.com/watch?v=i5MNLTc7YhY&ab_channel=tHaH4x0r

Понравилась идея с податчиком провода. В комбинации с пинцетом можно очень быстро и точно формировать "дорожки". В коментах пишут, что используется медный эмалированый провод 0.2. А сам диспенсер можно сделать из ручки, хотя, как мне кажется, механический карандаш тоже должен зайти.

#pcb #prototype #soldering
Последовательности неблокирующих присвоений

Найдете почему счётчик на картинке выше может не считать?

На самом деле проблема в полярности сброса. А несколько последовательных неблокирующих присвоений разрешены стандартом и синтезатор должен всё сделать правильно - применить последнее сработавшее. Однако, такой подход описания часто бывает под запретом в корпоративном стайлгайде, да и многие инженеры стараются умышленно его избегать (как и я ранее).

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


strb <= 0;
if (bb) begin
strb <= 1;
blabla
end else if (cc) begin
if (dd)
strb <= 1;
else
blabla
end else if (ee)
blabla


Например, для генерации коротких импульсов. Если набор условий очень ветвист, а запускать импульс нужно только в нескольких случаях, то при обычном подходе придется явно описывать состояние strb для каждой ветки, в том числе и неактивное. А так, мы создаём что-то вроде состояния по умолчанию, которое может быть изменено где-то внутри нужного условия. И когда условие перестанет действовать - состояние вернётся к исходному.

Единственное, нужно помнить, что использовать переменную (к которой применено несколько неблокирующих присвоений подряд) в списке чувствительности может быть чревато с точки зрения симулятора.
Все присвоения будут исполнены в порядке возникновения, а значит конструкция @() с такой переменной внутри может сработать несколько раз.

Ну и как это часто бывает, первая пара ответов на SO вполне раскрывает тему:
https://stackoverflow.com/questions/15718192/verilog-sequence-of-non-blocking-assignments

#verilog #system_veriog #rtl #digital_design #codestyle
starc_verilog_guide.pdf
5.9 MB
STARC Design Style Guide

Когда-то давным давно (в 1995 году) основные японские полупроводниковые компании Fujitsu, Hitachi, NEC, Sony, Toshiba и др. собрались в огромного робота и основали иследовательский центр Semiconductor Technology Academic Research Center - STARC. И одной из задач, которую этот исследовательский центр пытался решить - стандартизовать процесс разработки чипов в Японии, т.к. хотя все и писали на одинаковых Verilog/VHDL, но кто во что горазд - никакого порядка. Ну и где-то в начале 2000х необходимый документ опубликовали.

Мне когда-то давно удалось найти 3 главы этого гайда, и я их склеил в одну pdf. Также существует аналогичный документ для VHDL, который мне найти не удалось (не особо и старался, если честно).

Гайд пытается покрыть все процессы разработки, начиная от имен регистров и организации иерархии модулей, до принципов организации структуры папок проекта. По некоторым источникам существует ещё 4-ая глава про верификацию, но к сожалению она не нашлась.

#verilog #codestyle