el.d 0 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба Здравствуйте. В 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 3 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба Здравствуйте. В 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 0 30 августа, 2017 Опубликовано 30 августа, 2017 (изменено) · Жалоба example = {default: '{default: 0}}; - вот так еще, вроде, можно Изменено 30 августа, 2017 пользователем Tausinov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба 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; Надеюсь это тоже достаточно чудесно ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба Надеюсь это тоже достаточно чудесно ;)Всё, что очевидно, не чудесно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба Если для синтеза, то: logic [N-1:0] tmp[K-1:0]; не сильно будет отличаться от: logic [K-1:0] [N-1:0] tmp; и тогда можно сделать так: tmp <= '0; или можно еще вот так, для обоих случаев: foreach(tmp[i]) tmp[i] = '0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба не сильно будет отличаться от:А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов? или можно еще вот так, для обоих случаев: foreach(tmp[i]) tmp[i] = '0; Это в System Verilog или в Verilog тоже? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 30 августа, 2017 Опубликовано 30 августа, 2017 · Жалоба А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов? Это в System Verilog или в Verilog тоже? вот здесь показано, как работает адресация в многомерных массивах. http://testbench.in/SV_09_ARRAYS.html Это все для SystemVerilog. ПС запакованный массив, он как и просто массив, но в памяти выделяется непрерывным куском (а при синтезе непрерывным вектором). И индексы работают все также. Плюс запакованный массив можно простым присвоением кастить в вектор или запакованную структуру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 31 августа, 2017 Опубликовано 31 августа, 2017 · Жалоба Подбросим в топку: example <= (0=>"0110", 4=>"1100", 6=>"0011", others=>(others=>'0')); Размер элемента захардкодил для краткости. Вериложники, ваш ход ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 31 августа, 2017 Опубликовано 31 августа, 2017 · Жалоба Размер элемента захардкодил для краткости. Вериложники, ваш ход ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 31 августа, 2017 Опубликовано 31 августа, 2017 · Жалоба Вериложники, ваш ход ;) 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 0 31 августа, 2017 Опубликовано 31 августа, 2017 · Жалоба Один-в-один практически example = {0: 4'b0110, 4: 4'b1100, 6: 4'b0011, default: '{default: 0}}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться