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

Обратная связь: @esynr3z
https://news.1rj.ru/str/boost/positiveslack
Download Telegram
Можно найти как вполне актуальные рекомендации (сбросы, клоки, триггеры и другие компоненты дизайна не особо то и изменились за 20 лет), так и устаревшие и теперь забавные (например, не использовать пока Verilog-2001, т.к. не всеми тулами поддерживается в достаточном объёме).

1 Basic Design Constraints
1.1 Naming conventions
1.2 Synchronous design
1.3 Initial reset
1.4 Clocks
1.5 Handling of asynchronous circuits
1.6 Hierarchical design

2 RTL Denoscription Techniques
2.1 Combinational logic
2.2 always construct denoscription in combinational logic
2.3 FF inference
2.4 Latch inference
2.5 Tri-state buffer
2.6 always construct denoscription that takes circuit structure into account
2.7 if statements
2.8 case statements
2.9 for statements
2.10 Operator denoscriptions
2.11 State machine denoscriptions

3 RTL Design Methodology
3.1 Create function libraries
3.2 Using function libraries
3.3 Design for Test (DFT)
3.4 Low Power-Consumption Design
3.5 Source codes and design data management
Астрологи объявили неделю codestyle. Количество постов с правилами кодирования на Verilog увеличено вдвое.
FreescaleVerilog.pdf
344.7 KB
Freescale Verilog HDL Coding

* Naming Conventions
* Comments
* Code Style
* Module Partioning and Reusability
* Modeling Practices
* General Coding Techniques
* Standards for Structured Test Techniques
* General Standarts fot Synthesis

#verilog #codestyle
Макрочипы

"you can see why we went to 40nm, the first ones were huge"
😂

Не знаю, делает ли он сейчас на заказ, но подставка под кружку была бы просто офигенная.

https://www.evilgeniuslabs.org/macrochips

#diy
🔥1
verilog_systemverilog_standarts.zip
31 MB
Стандарты на Verilog и SystemVerilog

В архиве все на текущий момент стандарты Verilog и SystemVerilog.

* IEEE.1364-1995-Verilog
* IEEE.1364-2001-Verilog
* IEEE.1364-2005-Verilog
* IEEE.1800-2005-SystemVerilog
* IEEE.1800-2009-SystemVerilog
* IEEE.1800-2012-SystemVerilog
* IEEE.1800-2017-SystemVerilog

Последний стандарт Verilog - 2005. Потом этот стандарт слили со стандартом SystemVerilog того же года, местами пофиксили и получили стандарт 2009. Актуальный на начало 2021 года стандарт SystemVerilog - 2017.

#verilog #system_verilog #standard
Кстати в IEEE с конца 2019 года прорабатывают следующую ревизию стандарта SV. Так что в ближайшие пару лет нас ждут
"new and enhanced features that ease design, improve verification, and enhance cross-language interactions."

https://development.standards.ieee.org/myproject-web/public/view.html#pardetail/7059
FFT_tutorial_NI.pdf
124 KB
The Fundamentals of FFT-Based Signal Analysis and Measurement

Аппноут от NI по работе с FFT. Наверное бесполезен для тех, кто постоянно занимается ЦОСом, но если раз в N лет надо вспомнить как провести спектральный анализ и что-то там из него извлечь, то заходит очень хорошо.

- Базовые вычисления: амплитуда, RMS, амплитудный спектр, спектр мощности, децибелы, разрешение по частоте
- Алиасинговые эффекты и фильтры
- Оконные функции и spectral leakage
- Вычисления над полученным спектром: частота, мощность, SNR, PSD

#dsp #fft
👍1
ad_adc_specs.pdf
93 KB
Understand SINAD, ENOB, SNR, THD, THD + N, and SFDR so You Don't Get Lost in the Noise Floor
Walt Kester

Небольшой ликбез об основных динамических характеристиках АЦП с формулами.

#adc
👍1
Из ссылок в конце туториала выше набрел на прекрасную серию книг практической направленности по аналогу от Analog Devices. Однозначно стоит ознакомиться, если еще не!

И самое интересное, что эти книги можно бесплатно скачать прямо с сайта AD без регистрации и смс. Правда в немного разобраном виде - в формате архива с пдфками.

Data Conversion Handbook
https://www.analog.com/en/education/education-library/data-conversion-handbook.html

Mixed-Signal and DSP Design Techniques
https://www.analog.com/en/education/education-library/mixed_signal_dsp_design_book.html

Op Amp Applications Handbook
https://www.analog.com/en/education/education-library/op-amp-applications-handbook.html

Linear Circuit Design Handbook
https://www.analog.com/en/education/education-library/linear-circuit-design-handbook.html

#analog_design #adc #dac #op_amp #dsp #book
Блокирующее и неблокирующее

Допустим, мы хотим из тестбенча по клоку подавать значение в тестируемый модуль.
Какое значение будет у dut в конце симуляции? 1 или 0?

module tb;

bit clk;
always #10 clk <= ~clk;

bit dut;
bit dut_in = 1'b1;

always @(posedge clk)
dut <= dut_in;

initial begin
@(posedge clk);
dut_in = 1'b0;
$finish;
end

endmodule

Ответ зависит от симулятора. Классический race condition, когда неизвестно какое значение dut_in будет использовано при записи в регистр - старое, или новое, обновлённое блокирующим присвоением. Основное правило здесь - передача значения между двумя разными блоками (регистрами) должна проходить через неблокирующее (<=) присвоение. Т.е. как в регистровых передачах внутри синтезируемого кода. Хотя в тестбенче можно допустить некоторые вольности, и обновлять значение по negedge или через задержку, что тоже будет работать (в большинстве случаев).

#system_verilog #verilog #codestyle #race_condition
SystemVerilog Race Condition Challenge

Челендж от Mentor. Десять небольших сниппетов кода, которые демонстрируют разные варианты race condition и просто неправильного подхода к описанию.
Нужно перейти по ссылке и просто попытаться понять что не так с каждым из сниппетов.

Страница челенджа:
https://blogs.sw.siemens.com/verificationhorizons/2020/07/27/systemverilog-race-condition-challenge/

Сам код для анализа:
https://www.edaplayground.com/x/diV

#system_verilog #codestyle #race_condition
SystemVerilog Race Condition Challenge Responses

Ответы на челендж от Dave Rich (тот самый мужик, на ответ которого попадаешь с 90% вероятностью, когда гулишь что-то по Verilog/SystemVerilog).

https://blogs.sw.siemens.com/verificationhorizons/2020/08/13/systemverilog-race-condition-challenge-responses/

#system_verilog #codestyle #race_condition
Обфускация Verilog/SystemVerilog кода

Если кто не в теме, то это замена всех имен в коде на абракадабру и снос всего форматирования (опционально). Используется при передаче кода третьим лицам как "мягкая" замена шифрованию. Код вроде как открыт, но чтобы разобраться в нём нужно попотеть, особенно если это какой-нибудь нетлист без иерархии на много мегабайт. Защита от честных людей по большому счёту)

Так вот. Раньше пробовал Verilog-Perl - там есть утилита vrename. Работает, но оооочень уж медленно. Чтобы обфусцировать условный нетлист с ~1М уникальных имён уходят не одни сутки (однако, я шибко не профилировал где затык).

Тут выше постил про Verible (как форматтер кода от Google). У них оказывается в комплекте есть ещё утлита для обфускации - verible-verilog-obfuscate.

Работает гораздо лучше. На тот же самый нетлист на ~1М имён уходит минут десять. Правда в процессе потребление памяти 10-14ГБ, но это мелочи.

Ну и небольшой gist по результатам, чтобы не забыть как делал.

#verilog #system_veriog #obfuscation
Заставляем худеть Vivado/Quartus с помощью жёстких ссылок

https://www.reddit.com/r/FPGA/comments/ellcrr/psa_deduplicate_your_vivadoquartusiseetc_installs/

Папка с кучей версий софта от Xilinx до:


$ sudo du -hcs /opt/Xilinx/*
21G /opt/Xilinx/14.7
619M /opt/Xilinx/DocNav
255M /opt/Xilinx/Model_Composer
82G /opt/Xilinx/SDK
28G /opt/Xilinx/Vitis
342G /opt/Xilinx/Vivado
7.7G /opt/Xilinx/Vivado_HLS
643M /opt/Xilinx/xic
479G total


Делаем:


rdfind -dryrun false -makehardlinks true /opt/Xilinx/


Она же после:


$ sudo du -hcs /opt/Xilinx/*
18G /opt/Xilinx/14.7
615M /opt/Xilinx/DocNav
192M /opt/Xilinx/Model_Composer
44G /opt/Xilinx/SDK
25G /opt/Xilinx/Vitis
133G /opt/Xilinx/Vivado
1.2G /opt/Xilinx/Vivado_HLS
30M /opt/Xilinx/xic
220G total


Итого: -260Гб за счёт избавления от дубликатов!

#vivado #quartus
Аппаратные SPI и I2C в Lattice ICE40 UltraPlus

Довольно полезный тред по нюансам использования аппаратных SPI и I2C в ICE40UP.
https://github.com/YosysHQ/icestorm/issues/174


Если коротко, то SPI можно относительно легко поднять (есть рабочие примеры), а вот с I2C ситуация "оставь надежду всяк сюда входящий":

this block is pretty horrible and fussy, and you should use an RTL IP block if you can. But if you're out of gates -- you're out of gates, and I hope these notes can help you.

#fpga #lattice #spi #i2c #yosys