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

Обратная связь: @esynr3z
https://news.1rj.ru/str/boost/positiveslack
Download Telegram
Частота дискретизации vs полоса пропускания или причём здесь алиасинг

Тут увидел крутые картиночки из пдфки "Software-Defined Radio Handbook" от Pentek (документ выше), которые на пальцах объясняют.

Допустим, у нас АЦП с частотой дискретизации Fs=100МГц, а полоса пропускания у него 350МГц. Сможем ли оцифровать сигнал у которого спектр сосредочен в полосе 20-30МГц? А в полосе 170-180МГц? В обоих случаях да, если корректно учтём "эффект наложения спектров при дискретизации" ака "заворачивание спектров" ака "алиасинг/aliasing".

180МГц? А как же теорема отсчётов/Котельникова/Найквиста/Шеннона и ограничение в Fs/2=50Мгц? Противоречий нет, т.к. в ней речь о том, что сигнал может быть адекватно оцифрован, если его полоса частот не превышает Fs/2 (она в примере 10МГц). Т.е. если частоты в спектре сигнала лежат ниже Fs/2 - они представляются адекватно, но если они лежат выше Fs/2, то происходит "заворачивание"/"наложение" более высокочастотной части спектра на область частот от 0 до Fs/2.

И теперь к картинкам. На Fig.2 условно спектр того, что способен "видеть" наш АЦП - полосу 350МГц (7 зон Найквиста по 50МГц). Представлен в виде бумажной гармошки. Когда происходит дискретизация, то всё что выше Fs/2 накладывается на нулевую зону и искажает её содержимое. Fig.3 - складываем гармошку и просвечиваем её насквозь. Прикольно, что эта аналогия также отражает то, что спектры из чётных зон при наложении зеркально разворачиваются.

Как тогда нормально оцифровать первый сигнал в полосе 20-30МГц (Fig.4)? Перед АЦП поставить антиалиасинговый ФНЧ, который подавит всё что выше Fs/2, и при заворачивании спектра при дискретизации эти зоны влияния не окажут.

Аналогично с сигналом в полосе 170-180МГц. Только нужен теперь полосовой фильтр, который подавит всё, кроме полезной части спектра в четвертой зоне (Fig.5). И тогда спектр оцифрованного сигнала будет содержать только искомый сигнал, правда перенесенный в область 0-Fs/2 и отражённый зеркально (Fig.6).

P.S. я сам только познаю магию ЦОСа по книжке Смита, так что прошу поправить, если где неправ.

P.P.S. Все цифры взяты с потолка и не сопадают с источником картинок.

#dsp #aliasing #adc
FTDI USB-FIFO или режим FT245

Последнее время я довольно много работал с чипами FTDI в качестве переходников USB-FIFO для FPGA: FT232H, FT2232H, FT600, асинхронный и синхронный режимы FT245, самописные ядра на SystemVerilog, ответное ПО на Python - вот это вот всё. Собралась некоторая критическая масса заметок, которые решил причесать и собрать в пост.

https://esynr3z.github.io/2021-07-16-ftdi-ft245

#ftdi #system_verilog
The Myth of Three Capacitor Values

Many designs today include three different value decoupling capacitors, or when using just one capacitor, a small value like 0.1 uF. These recommendations are based on 50-year-old assumptions that do not apply today. It is time to reconsider these out of date, legacy design guidelines.

https://www.signalintegrityjournal.com/articles/1589-the-myth-of-three-capacitor-values

#hardware #analog_design #schematic
позитивслэк
Extreme Wiring on the Prototyping Board Видео от легендарного ELM-ChaN про прототипирование на коленке. https://www.youtube.com/watch?v=i5MNLTc7YhY&ab_channel=tHaH4x0r Понравилась идея с податчиком провода. В комбинации с пинцетом можно очень быстро и точно…
Jump wire pen

Дело Элмчана живёт. Оказывается, отдельные приспособы для такой пайки и у китайцев есть. Правда они позиционируются как инструмент для ремонта телефонов.

Взял на пробу от Mechanic:
https://a.aliexpress.com/_9Qlpkc

В комплекте 2 катушки 0.01, что может для ремонта айфонов и норм, но для прототипирования сильно хлипковато. Поэтому прикупил ещё отдельно провод 0.1:
https://a.aliexpress.com/_AlCoQ4
Катушку пришлось по кругу подпилить, чтобы нормально крутилась внутри, но это мелочи.

Хотел как в оригинальном видео 0.2 провод найти - но на али не нашел лудящийся, а наш ПЭВТЛ (не путать с ПЭВТ - его паяльник не берет) по не совсем гуманным ценам продается:
https://www.chipdip.ru/product0/8004279725

Доволен. Всё работает, провод лудится, катушка крутится - можно прототипировать =)

#soldering #pcb
Corsair - генератор карты регистров

Хотел бы поделиться своим проектом, доросшим до первой мажорной версии. Конечно он ещё молодой, и толком необкатанный, но верю, что кому-то уже сможет помочь.

Благодарю всех участвовавших и просто сочувствовавших, без обратной связи и помощи было бы тяжело.

Что? Зачем? Почему?
esynr3z.github.io/2021-09-03-corsair

Репозиторий:
github.com/esynr3z/corsair

Документация:
corsair.readthedocs.io

#python #csr #fpga
Архитектуры процессорных систем

Курс лекций от МИЭТ. Про RISC-V и внутренности современных процессоров. Классная подача материала, рекомендую.

https://youtube.com/playlist?list=PL0def37HEo5KMH7gONw_JnczvQJBv1EZL

И вообще, вот вам годный канал с постами на эту тему:

Записки CPU designer'a
@cpu_design

#digital_design #cpu #riscv #computer_architecture
Computer Architecture Animations
[ссылка]

Интерактивные анимации демонстрируют работу процессорного кэша и протоколов когерентности в мультипроцессорных системах:

▫️Cache
▫️Write-through cache coherency
▫️Write-once cache coherency
▫️Firefly cache coherency
▫️MESI cache coherency
▫️All cache coherency protocols

#computer_architecture #cpu #cache #coherency
Немного почти оффтопика.

Набрёл на классный сайт со списками почти всего на свете для помощи в выборе имени какого-нибудь нового проекта. А то часто это бывает проблемой, особенно если вдруг нужна серия имён одной тематики.


A good naming scheme is scalable, unique, and easy to remember. The purpose of these naming schemes is to name networked servers, wireless access points or client computers, but it can also be used to name projects, products, variables, streets, pets, kids, or any other project where unique names and rememberable names are required.


https://namingschemes.com
Rapid Open Hardware Development (ROHD) Framework

https://github.com/intel/rohd

Yet another попытка ухода от низкого уровня HDL к чуть более высокоуровневым описаниям, причем довольно свежая (репозиторию и 2 недель нет). Что на этот раз: Intel, язык Dart, фреймворк для дизайна и верификации, амбиции построить opensource community вокруг.


ROHD is not a new language, it is not a hardware denoscription language (HDL), and it is not a version of High-Level Synthesis (HLS). ROHD can be classified as a generator framework.

You can think of this project as an attempt to replace SystemVerilog and related build systems as the front-end methodology of choice in the industry.

One of ROHD's goals is to help grow an open-source community around reusable hardware designs and verification components.


Ну и фич целый вагон:

▫️Full power of the modern Dart language for hardware design and verification
▫️Makes validation collateral simpler to develop and debug. A future package (like UVM for ROHD) to help build testbenches is planned for release soon.
▫️Develop layers of abstraction within a hardware design, making it more flexible and powerful
▫️Easy IP integration and interfaces; using an IP is as easy as an import. Reduces tedious, redundant, and error prone aspects of integration
▫️Simple and fast build, free of complex build systems and EDA vendor tools
▫️Can use the excellent pub.dev package manager and all the packages it has to offer
▫️Built-in event-based fast simulator, with waveform dumper to .vcd file format
▫️Conversion of modules to equivalent, human-readable, structurally similar SystemVerilog for integration or downstream tool consumption
▫️Run-time dynamic module port definitions (numbers, names, widths, etc.) and internal module logic, including recursive module contents
▫️Simple, free, open source tool stack without any headaches from library dependencies, file ordering, elaboration/analysis options, +defines, etc.
▫️Excellent, simple, fast unit-testing framework
▫️Less verbose than alternatives (fewer lines of code)
▫️Enables higher quality development
▫️Replaces hacky perl/python noscripting for automation with powerful native control of design generation
▫️Fewer bugs and lines of code means shorter development schedule
▫️Support for cosimulation with verilog modules and instantiation of verilog modules in generated SystemVerilog code
▫️Use modern IDEs like Visual Studio Code, with excellent static analysis, fast autocomplete, built-in debugger, linting, git integration, extensions, and much more
▫️Simulate with various abstraction levels of models from architectural, to functional, to cycle-accurate, to RTL levels in the same language and environment.

Ну и естественно они не могли не пройтись по альтернативам в лице: SystemVerilog, Chisel, MyHDL, HLS, TL-Verilog, PyMTL, cocotb.

#digital_design #verification #framework #dart #rtl
EDA log colorizer

https://github.com/esynr3z/eda-log-colorizer

Наконец-то нашлось время причесать и расшарить раскрашиватель унылых монохромных логов. Никакого rocket science - просто bash и sed =)

Пока поддерживаются только UVM и VCS.

Большое спасибо @iDoka за референс, @Xtyll за то что напомнил о нём, ну и сайту regex101.com за то, что сохраняет нервные клетки при написании и отладке регулярок.

#tool #log
Настало время нарушить молчание и начать разгребать сохранёнки и заметки.

P.S. я тут теперь UVM классами командную на фуллтайм, так что общая тематика сместится в верификацию, но это не точно)
👍4
Чем занимаешься?

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

Обычно всё происходит примерно так:
- Чем занимаешься?
- Ммм... Хмм... Ну я программист можно сказать
- О, а на чём пишешь?
- Довольно узкоспецифический язык - SystemVerilog
- М, понятно
* диалог закончен *

А рассказать про микропроцессоры, IP-блоки, верификацию, UVM человеку с нулевым техническим бэкграундом (микропроцессор - это монитор или системный блок) вообще за гранью.

В сабреддитах по микроэлектронике/эмбэддэд периодически вижу подобные вопросы. Ответы порой довольно забавные:

“I use obscure and arcane texts to perform rituals that control machine spirits.”

"I teach poisoned sand how to think so it can communicate telepathically with other poisoned sand."

Как вы с этим справляетесь? Есть какие-нибудь хаки?

@positiveslack
10👍3
Просто в яблочко
Вся суть работы инженера сводится к получению дозы эндорфинов от осознания того, что "оно работает". Когда ты заказываешь свой асик, он к тебе приезжает и он работает, то это максимум счастья.
🔥17
Почему always_comb это улучшенный always@*

always_comb исполняется на старте моделирования, always@* - нет

always@* a = 'd42; // a будет в 'x всегда

always@* begin
b = '0; // будет в 'x, пока d не изменится
c = d;
end

always_comb имеет расширенный список чувствительности, в том числе исполняется при изменении сигналов внутри функции, а не только её аргументов как always@*

bit a, b, c;

function bit foo(bit bar);
return bar & b;
endfunction

always@* c = foo(a); //не исполнится при изменении глобальной b, только при изменении a

always_comb даёт compile-time гарантии:
- отсутствия операторов, управляющих временем (@, #, wait)
- отсутствия элементов хранения (ff, latch)
- отсутствия множественных драйверов

#system_verilog
@positiveslack
👍10🔥3
Кстати, тут по чатам гуляет отрывок из вроде как внутреннего стайлгайда Intel, как раз о том, чтобы использовать только always_comb в коде.

The only always statement you ever use should be always_comb
Never use always, always_ff, always_latch, assign etc.
Always_comb automatically detects the sensitivity list and reports warning/errors if you accidently infer a sequential element
Always use blocking assignments “=“
Never use non-blocking assignments “<=“
<= is used in sequential logic, all of our sequentials use macros, therefore you should never have to use it
The rest of this presentation is just “details”:)

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

`FF(clk, rst, foo, foo_next)

#codestyle #system_verilog
@positiveslack
🤔5👍4🎉1🤓1
Платиновый тред же, ну
#meme
@positiveslack
🔥11😁7