Перейти к содержанию
    

Практическая задачка на SV

Приветствую!

Практическая задачка -  есть кучка сигналов-векторов произвольном количестве и ширины.

  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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

9 minutes ago, Raven said:

Perl?

.. Tcl, Phyton, ..., да и на самом SV (simulation time)  я конечно могу сделать кодогенерилку  которая создает мне код для синтеза.  Но это не столь интересно.  Интересно попытаться сделать это именно на SV  и именно в "synthesys time". 

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

от ручек все равно никуда не уйти, но можно их все инкапсулировать в один тип, класаа "аппаратный класс". А именно интерфейс, внутри которого описаны все константы/функции, возвращающий нужные вам разобранные и собраные данные. Писать много где, но в одном месте на пару экранов) Туда же, можно добавить макросов для добавления новых сигналов и еще больше минимизировать вероятность опечатки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

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

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...