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

verilog аналог others из vhdl

Здравствуйте.

 

В VHDL есть чудесная вещь, под названием others, которая позволяет делать например так:

type my_array is array (0 to N-1) of std_logic_vector(W-1 downto 0);
signal example : my_array;

example <= (others=>(others=>'0'));

 

А как в Верилоге также разом обнулить все биты в аналогичной ситуации? Ну то есть имеем такую штуку:

 

logic [W-1:0] example [0:N-1];

Это по идее аналог конструкции на VHDL, которую я привел выше. Как обнулить?

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


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

Здравствуйте.

 

В VHDL есть чудесная вещь, под названием others, которая позволяет делать например так:

type my_array is array (0 to N-1) of std_logic_vector(W-1 downto 0);
signal example : my_array;

example <= (others=>(others=>'0'));

 

А как в Верилоге также разом обнулить все биты в аналогичной ситуации? Ну то есть имеем такую штуку:

 

logic [W-1:0] example [0:N-1];

Это по идее аналог конструкции на VHDL, которую я привел выше. Как обнулить?

 

Пример:

Есть параметр "Width", и тогда

{Width{1'b1}} // This is equivalent to 11111 ... 1 "Width" times

 

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


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

example = {default: '{default: 0}};  - вот так еще, вроде, можно

Изменено пользователем Tausinov

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


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

type my_array is array (0 to N-1) of std_logic_vector(W-1 downto 0);
signal example : my_array;
example <= (others=>(others=>'0'));

integer n;
reg [(W - 1):0] my_array [(N - 1):0];
initial for(n = 0; n < N; n = n + 1) my_array[n] = 0;

Надеюсь это тоже достаточно чудесно ;)

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


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

Надеюсь это тоже достаточно чудесно ;)
Всё, что очевидно, не чудесно.

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


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

Если для синтеза, то:

logic [N-1:0] tmp[K-1:0];

не сильно будет отличаться от:

logic [K-1:0] [N-1:0]   tmp;

и тогда можно сделать так:

tmp <= '0;

 

или можно еще вот так, для обоих случаев:

foreach(tmp[i]) tmp[i] = '0;

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


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

не сильно будет отличаться от:
А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов?

 

или можно еще вот так, для обоих случаев:

foreach(tmp[i]) tmp[i] = '0;

Это в System Verilog или в Verilog тоже?

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


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

А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов?

 

Это в System Verilog или в Verilog тоже?

 

вот здесь показано, как работает адресация в многомерных массивах.

http://testbench.in/SV_09_ARRAYS.html

 

Это все для SystemVerilog.

 

ПС запакованный массив, он как и просто массив, но в памяти выделяется непрерывным куском (а при синтезе непрерывным вектором). И индексы работают все также.

Плюс запакованный массив можно простым присвоением кастить в вектор или запакованную структуру.

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


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

Подбросим в топку:

example <= (0=>"0110", 4=>"1100", 6=>"0011", others=>(others=>'0'));

 

Размер элемента захардкодил для краткости. Вериложники, ваш ход ;)

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


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

Размер элемента захардкодил для краткости. Вериложники, ваш ход ;)

:biggrin:

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


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

Вериложники, ваш ход ;)

 

logic [7:0] [7:0] data = {0:6 ,4:12, 6:3, default:'0};

Но я бы не стал так писать. Не достаточно прозрачно для беглого понимания и правки.

Лучше так:

logic [7:0] [7:0] data = {default:'0};
initial 
begin
    data[0] = 6;
    data[4] = 12;
    data[6] = 3;
end

 

ПС Кстати во всех примерах не нужно писать '0, можно просто 0. Черточка подчеркивает, что происходит обнуление массива в контексте битов, а не в контексте чисел.

В пример выше на VHDL эту функцию выполняет (others=>'0') как я понял.

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


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

Один-в-один практически

example = {0: 4'b0110, 4: 4'b1100, 6: 4'b0011, default: '{default: 0}};

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


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

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

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

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

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

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

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

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

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

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