|
|
  |
verilog аналог others из vhdl |
|
|
|
Aug 30 2017, 08:37
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600

|
Здравствуйте. В 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, которую я привел выше. Как обнулить?
|
|
|
|
|
Aug 30 2017, 09:10
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(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
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 30 2017, 09:21
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Код example = {default: '{default: 0}}; - вот так еще, вроде, можно
Сообщение отредактировал Tausinov - Aug 30 2017, 09:21
|
|
|
|
|
Aug 30 2017, 10:08
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(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; Надеюсь это тоже достаточно чудесно
--------------------
|
|
|
|
|
Aug 30 2017, 11:45
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970

|
Если для синтеза, то: Код logic [N-1:0] tmp[K-1:0]; не сильно будет отличаться от: Код logic [K-1:0] [N-1:0] tmp; и тогда можно сделать так: Код tmp <= '0; или можно еще вот так, для обоих случаев: Код foreach(tmp[i]) tmp[i] = '0;
|
|
|
|
|
Aug 30 2017, 12:52
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(Swup @ Aug 30 2017, 14:45)  не сильно будет отличаться от: А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов? Цитата(Swup @ Aug 30 2017, 14:45)  или можно еще вот так, для обоих случаев: Код foreach(tmp[i]) tmp[i] = '0; Это в System Verilog или в Verilog тоже?
--------------------
|
|
|
|
|
Aug 30 2017, 14:52
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970

|
Цитата(AVR @ Aug 30 2017, 16:52)  А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов?
Это в System Verilog или в Verilog тоже? вот здесь показано, как работает адресация в многомерных массивах. http://testbench.in/SV_09_ARRAYS.htmlЭто все для SystemVerilog. ПС запакованный массив, он как и просто массив, но в памяти выделяется непрерывным куском (а при синтезе непрерывным вектором). И индексы работают все также. Плюс запакованный массив можно простым присвоением кастить в вектор или запакованную структуру.
|
|
|
|
|
Aug 31 2017, 09:27
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Подбросим в топку: Цитата example <= (0=>"0110", 4=>"1100", 6=>"0011", others=>(others=>'0')); Размер элемента захардкодил для краткости. Вериложники, ваш ход
|
|
|
|
|
Aug 31 2017, 11:09
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970

|
Цитата(alexadmin @ Aug 31 2017, 13:27)  Вериложники, ваш ход  Код 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') как я понял.
|
|
|
|
|
Aug 31 2017, 11:14
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Один-в-один практически Код example = {0: 4'b0110, 4: 4'b1100, 6: 4'b0011, default: '{default: 0}};
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|