Dive into the Ultimate Free Library: Your One-Stop Hub for Entertainment!

Arnold Enginegger

Description
Тоже хочу в блогеры
Advertising
We recommend to visit

Мой блог 🤍

Last updated 3 weeks, 4 days ago

место,где любят

влд: @abikaasa

инфо: @GLAD_info
отзывы: @otzv_glad

❗️Администрация не несет ответственности за рекламу,будьте внимательны,проверяйте все

Last updated 1 month ago

влд: @abikaasa

инфо: @GLAD_info
отзывы: @otzv_glad

❗️Администрация не несет ответственности за рекламу,будьте внимательны,проверяйте все

Last updated 1 month ago

2 months, 1 week ago

Мне сказали, чтобы я шел в жопу со своими issue 🙂

Verilator follows C's seeding conventions where seed 0 means "pick a new seed". For compatibility reasons we are unlikely to change this. Don't use zero.

2 months, 1 week ago

Столкнулся с очередным багом Верилятора: функция $random$urandom тоже) с одинаковым начальным сидом генерит разные последовательности. Этого конечно не должно быть, и другие симы это подтверждают - проверил на Икарусе и Квесте. Однако, семейство функций $dist_* работает правильно. Так что если вам понадобится в одной программе генерить одинаковые случайные последовательности, пользуйтесь $dist_uniform вместо $random/$urandom.

Запостил issue.

PS: Ни слова про опенсорс. Уверен, что ошибку быстро исправят ;)

Дополнение. Такое поведение наблюдается только при seed == 0. Посмотрел исходники, там есть тест на равенство $random с одинаковым seed, но seed устанавливается в 10.

GitHub

$random sequences with the same seed do not equal · Issue #5074 · verilator/verilator

Generating random numbers using $random and $urandom with the same seed produces different sequences. At the same time, $dist\_* functions with the same seed produces identical numbers. Test code: `...

3 months ago

Возможно это глупый вопрос, но я рискну. Представьте, что у вас есть слейв, принимающий 32 бита по AXIS-подобной шине (хендшейк valid/ready) и выполняющий обработку данных побайтно. Возможны два варианта действий:

  1. В режиме ожидания вы держите ready в единице. Как только приходит valid, защелкиваете все 32 бита в регистр, снимаете ready и начитаете побайтную обработку. По окончании поднимаете ready.

  2. В режиме ожидания держите ready в нуле. По приходу valid начитаете побайтную обработку, снимая байты непоследственно с шины. По окончании дергаете ready.

В общем, оба варианта приемлемы, т.к. в спеке на AXI не требуется, чтобы ready был активен до прихода valid, а однажды выставленный valid не может быть снят до прихода ready. С другой стороны, второй вариант может порушить времянки, если данные от мастера формируются через комбинационные цепи. И возможны проблемы с арбитражем, если арбитр полагается на ready.

Что вы думаете по этому поводу? В комментах создам опрос, заходите.

4 months, 1 week ago

Оказывается несколько лет назад кто-то даже открыл issue на этот счёт и попутно предложил использовать case equality (===). Это, наверное, самое правильное решение, т.к. по стандарту этот оператор всегда возвращает 0 или 1, никаких иксов.

GitHub

conditional operator with enum's require explicit cast · Issue #280 · steveicarus/iverilog

The following code does not compile in iverilog. I believe this is valid systemVerilog code. At least one commercial tool accepts this happily. iverilog seems to be unhappy about the datatype and w...

4 months, 1 week ago

По поводу соблюдения стандартов. Не первый раз замечаю, что iverilog строже следует стандартам, чем другие симуляторы. Вот ещё один пример - присвоение значения enum'у.

Вот такой код не проходит компиляцию в iverilog, тогда как verilator и modelsim/questa не выдают ни ошибок ни предупреждений:

```
typedef enum {
ST_ONE,
ST_ZERO
} state_t;

state\_t state; logic a; always\_comb state = a ? ST\_ONE : ST\_ZERO;

```

Ошибка состоит в том, что переменной state потенциально может быть присвоено значение X, потому что тернарный оператор "пропускает" иксы из условия на выход (такое поведение называется X-pessimism). Но иксы не являются допустимым значением для типа state_t. Согласно стандарту (раздел 6.19.3) такая ситуация является ошибкой.

Есть два очевидных пути исправления:

  1. Использовать if/else, т.к. это X-оптимистичный оператор
  2. Явно привести тип тернарного выражения к state_t

Менее очевидное решение - использовать тип bit для сигнала a. Этот тип не может принимать неопределенного значения, по этому и нарушений при присвоении перечислению не будет.

А вот с верилятором "не всё так однозначно" - у него же в принципе нет иксов, по этому стандарт он как бы и не нарушает вовсе :)

GitHub

GitHub - steveicarus/iverilog: Icarus Verilog

Icarus Verilog. Contribute to steveicarus/iverilog development by creating an account on GitHub.

По поводу соблюдения стандартов. Не первый раз замечаю, что [iverilog](https://github.com/steveicarus/iverilog) строже следует стандартам, чем другие симуляторы. Вот ещё один пример …
6 months ago
С Новым Годом, коллеги! Новых отладок …

С Новым Годом, коллеги! Новых отладок вам и пусть в новом году светодиоды горят ещё ярче, слаки будут ещё положительней, а покрытия ещё шире!

6 months, 1 week ago

В Yosys есть интересная фича, которой, похоже, нет в других синтезаторах - возможность вызова функций DPI для установки параметров и инициализации регистров.

Для этого достаточно подключить библиотеку .so командой plugin:

plugin \-i my\_lib.so

А затем импортировать функцию в код на SV и вызвать:

import "DPI\-C" function integer my\_func (integer); localparam PARAM1 = my\_func(PARAM0);

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

Фича может быть весьма полезной. Например, в ЦОСе часто нужно предвычислять всякие коэффициенты. Использовать для этого генерируемые внешними скриптами таблицы не очень прикольно, т.к. теряется возможность параметризации модуля. Рассчитывать силами SV тоже не сильно здорово, потому что обычно это работает медленно и синтезатор поддерживает далеко не все возможности языка (в Yosys, например, очень сложно полноценно использовать real - можно вычислять выражения с плавающей точкой, но нельзя создавать переменные).

А через DPI можно вызвать не только Си-функции, но и например Python (sic!), или мою любимую Scheme. Они достаточно просто эмбеддятся в Си.

Есть и ограничения:

1.  Поддерживаются только типы integer, real, shortreal и chandle. Жаль, что нельзя передавать строки, но если очень хочется, то можно воспользоваться костылём - передавать до 8 символов через аргумент типа chandle. Это указатель, и на 64-разрядных машинах его длина 8 байт.

2.  В качестве аргументов подходит не всё. Например, можно передать итератор цикла во время инициализации памяти (mem[n] = init_func(n)), но нельзя передать саму инициализируемую переменную (some_func(mem[n])), ругается на нестатический аргумент.

3.  Нельзя вызвать функцию, которая возвращает void, yosys почему-то путает этот вызов с вызовом таска и ругается, что такого таска нет. Если всё же нужно вызвать такую функцию, то нужно вызвать её с присвоением возврата чему нибудь - переменной в initial, или неиспользуемому параметру. Запостил issue по этому поводу (Под номером 4096 😊).

В качестве примера написал небольшой тестовый код.

Gist

Yosys DPI

Yosys DPI. GitHub Gist: instantly share code, notes, and snippets.

В Yosys есть интересная фича, которой, похоже, нет в других синтезаторах - возможность вызова функций DPI для установки параметров и …
6 months, 2 weeks ago

Рубрика "А что, так можно было?".
У верилятора есть опция —unused-regexp, которой можно задать шаблон имени неиспользуемых сигналов. По-умолчанию это unused. Т.е. если у вас в коде есть неиспользуемый сигнал с именем, включающем unused, то верилятор на него ругаться не будет, и не нужно будет вставлять lint_off UNUSEDSIGNAL.

7 months ago

Если кто-то потерял меня в чате, я ушел на цифровой детокс. На недельку, а там посмотрим. Если что, пишите сюда :)

7 months, 1 week ago
===

===
Народное творчество - первый журнал о программируемой логике

```

FPGA-Systems Magazine :: FSM :: № ALFA
```

доступен к скачиванию. На странице журнала появилась заветная кнопка "Скачать | Download"

Пожалуйста, не распространяйте журнал как pdf, кидайте ссылку на страницу журнала https://fpga-systems.ru/fsm. Очень важна статистика скачиваний, надеюсь вы меня понимаете 😊

We recommend to visit

Мой блог 🤍

Last updated 3 weeks, 4 days ago

место,где любят

влд: @abikaasa

инфо: @GLAD_info
отзывы: @otzv_glad

❗️Администрация не несет ответственности за рекламу,будьте внимательны,проверяйте все

Last updated 1 month ago

влд: @abikaasa

инфо: @GLAD_info
отзывы: @otzv_glad

❗️Администрация не несет ответственности за рекламу,будьте внимательны,проверяйте все

Last updated 1 month ago