RobFPGA 27 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Приветствую! Практическая задачка - есть кучка сигналов-векторов произвольном количестве и ширины. wire [WH1-1:0] stat_total_good_bytes ; wire [ 3:0] stat_total_bytes ; wire stat_packet_small ; wire stat_packet_large ; wire [WH2-1:0] stat_total_packets ; wire stat_total_good_packets ; ... Состав и параметры таких сигналов периодически меняется. Поэтому нужно как то получить в коде из такого списка (для синтеза! да с минимум нудной ручной работы ) : A) общее количество этих сигналов B) "склеенный" вектор или пакованный массив из всех этих сигналов C) пакованный массив ширины каждого сигнала в соответствующей позиции в выходном векторе или массиве Сейчас задача решается методом copy-paste, блочным редактированием и парой функций localparam STAT_VARS_WIDTH = { $bits(stat_total_good_bytes ), $bits(stat_total_bytes ), ... wire [total_width(STAT_VARS_WIDTH)-1:0] vars_vec = { stat_total_good_bytes, stat_total_bytes , ... Но требует контроля в двух местах за правильностью позиции и полнотой включения векторов. Можно бы было объявить эти сигнала в пакованную структуру - сразу получаем общий вектор. Но как получить число полей в ней и ширину каждого? А без этого опять требуется ручной контроль положения при определения ширины. Вот как бы исхитрится чтобы один раз объявив такой список сигналов / структуру / интерфейс сразу получить требуемые A,B,C ? Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Perl? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Приветствую! 9 minutes ago, Raven said: Perl? .. Tcl, Phyton, ..., да и на самом SV (simulation time) я конечно могу сделать кодогенерилку которая создает мне код для синтеза. Но это не столь интересно. Интересно попытаться сделать это именно на SV и именно в "synthesys time". Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 2 июля, 2020 Опубликовано 2 июля, 2020 · Жалоба от ручек все равно никуда не уйти, но можно их все инкапсулировать в один тип, класаа "аппаратный класс". А именно интерфейс, внутри которого описаны все константы/функции, возвращающий нужные вам разобранные и собраные данные. Писать много где, но в одном месте на пару экранов) Туда же, можно добавить макросов для добавления новых сигналов и еще больше минимизировать вероятность опечатки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться