Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: verilog аналог others из vhdl
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
el.d
Здравствуйте.

В 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, которую я привел выше. Как обнулить?
iosifk
Цитата(el.d @ Aug 30 2017, 11:37) *
Здравствуйте.

В 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
Tausinov
Код
example = {default: '{default: 0}};  - вот так еще, вроде, можно
AVR
Цитата(el.d @ Aug 30 2017, 11:37) *
Код
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;
Надеюсь это тоже достаточно чудесно wink.gif
andrew_b
Цитата(AVR @ Aug 30 2017, 13:08) *
Надеюсь это тоже достаточно чудесно wink.gif
Всё, что очевидно, не чудесно.
Swup
Если для синтеза, то:
Код
logic [N-1:0] tmp[K-1:0];

не сильно будет отличаться от:
Код
logic [K-1:0] [N-1:0]   tmp;

и тогда можно сделать так:
Код
tmp <= '0;


или можно еще вот так, для обоих случаев:
Код
foreach(tmp[i]) tmp[i] = '0;
AVR
Цитата(Swup @ Aug 30 2017, 14:45) *
не сильно будет отличаться от:
А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов?

Цитата(Swup @ Aug 30 2017, 14:45) *
или можно еще вот так, для обоих случаев:
Код
foreach(tmp[i]) tmp[i] = '0;
Это в System Verilog или в Verilog тоже?
Swup
Цитата(AVR @ Aug 30 2017, 16:52) *
А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов?

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


вот здесь показано, как работает адресация в многомерных массивах.
http://testbench.in/SV_09_ARRAYS.html

Это все для SystemVerilog.

ПС запакованный массив, он как и просто массив, но в памяти выделяется непрерывным куском (а при синтезе непрерывным вектором). И индексы работают все также.
Плюс запакованный массив можно простым присвоением кастить в вектор или запакованную структуру.
alexadmin
Подбросим в топку:
Цитата
example <= (0=>"0110", 4=>"1100", 6=>"0011", others=>(others=>'0'));


Размер элемента захардкодил для краткости. Вериложники, ваш ход wink.gif
Maverick
Цитата(alexadmin @ Aug 31 2017, 12:27) *
Размер элемента захардкодил для краткости. Вериложники, ваш ход wink.gif

biggrin.gif
Swup
Цитата(alexadmin @ Aug 31 2017, 13:27) *
Вериложники, ваш ход wink.gif


Код
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') как я понял.
Tausinov
Один-в-один практически
Код
example = {0: 4'b0110, 4: 4'b1100, 6: 4'b0011, default: '{default: 0}};
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.