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

SystemVerilog получить тип элемента dynamic array

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

 

Есть такое творение воспаленного разума - некий class для работы с dynamic array

typedef u8_t   array_u8_t[];   // unsigned 8 bit
typedef i32_t  array_u64_t[]; // signed 32 bit
...
typedef u1000_t array_u1000_t[]; // unsigned 1000 bit

class #(type T=array_u8_t) my_class;
  function T new_fill(int len, fill_type_t fill_mode);
  T new_array=new[len];
    case (fill_mode)
      FILL_INC : foreach(new_array[ii]) new_array[ii]=ii;
      FILL_RND: foreach(new_array[ii]) new_array[ii]=$urandom_range(max_val,min_val);
      ...
    endcase
    ...
  endfunction

Возник вопрос - можно-ли( и как) получить тип элемента массива для определения max_val и min_val ?;

 

Успехов! Rob.

 

 

 

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


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

Можно было бы сделать класс-обертку для динамического массива следующего вида:

class #(type atom_t=bit, int ITEM_LENGTH=8) my_class;
//параметр нужен для определения является ли тип знаковым
  parameter UITEM_MAX_VALUE = 2**ITEM_LENGTH-1;

  parameter MAX_VALUE = ...;
  parameter MIN_VALUE = ...;
  typedef atom_t[ITEM_LENGTH-1:0] item_t;
  
  typedef item_t dynamic_array_t[];

  ...
endclass

 

в качестве atom_t можно указывать bit, bit signed, logic,...

В случае signed для вычисления MAX_VALUE и MIN_VALUE нужно добавить функцию, которая бы определяла, знаковый тип или нет путем присвоения UITEM_MAX_VALUE переменной типа item_t и сравнения результата с UITEM_MAX_VALUE. Если они равны - тип беззнаковый. Данную функцию использовать для вычисления параметров MAX_VALUE и MIN_VALUE. Можно пойти и другим путем -urandom_range вызвать для беззнаковой версии элемента массива, результат привести к signed и присвоить элементу массива.

Ну или вместо urandom_range использовать randomize.

Также, если интересуют всяческие удобные контейнеры и не только, советую взглянуть на библиотеку clue_logic.

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


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

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

 

ссылка на библиотеку clue_logic

 

Большое спасибо за разъяснения и за ссылку!

 

Удачи! Rob.

 

 

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


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

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

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

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

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

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

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

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

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

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