Jump to content

    
Sign in to follow this  
RobFPGA

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

Recommended Posts

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

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

  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.

Share this post


Link to post
Share on other sites

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

9 minutes ago, Raven said:

Perl?

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this