Telegram Group & Telegram Channel
В 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 😊).

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



group-telegram.com/enginegger/61
Create:
Last Update:

В 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 😊).

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

BY Arnold Enginegger




Share with your friend now:
group-telegram.com/enginegger/61

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Soloviev also promoted the channel in a post he shared on his own Telegram, which has 580,000 followers. The post recommended his viewers subscribe to "War on Fakes" in a time of fake news. DFR Lab sent the image through Microsoft Azure's Face Verification program and found that it was "highly unlikely" that the person in the second photo was the same as the first woman. The fact-checker Logically AI also found the claim to be false. The woman, Olena Kurilo, was also captured in a video after the airstrike and shown to have the injuries. The original Telegram channel has expanded into a web of accounts for different locations, including specific pages made for individual Russian cities. There's also an English-language website, which states it is owned by the people who run the Telegram channels. Oh no. There’s a certain degree of myth-making around what exactly went on, so take everything that follows lightly. Telegram was originally launched as a side project by the Durov brothers, with Nikolai handling the coding and Pavel as CEO, while both were at VK. Pavel Durov, a billionaire who embraces an all-black wardrobe and is often compared to the character Neo from "the Matrix," funds Telegram through his personal wealth and debt financing. And despite being one of the world's most popular tech companies, Telegram reportedly has only about 30 employees who defer to Durov for most major decisions about the platform.
from us


Telegram Arnold Enginegger
FROM American