реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> verilog аналог others из vhdl
el.d
сообщение Aug 30 2017, 08:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 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, которую я привел выше. Как обнулить?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 30 2017, 09:10
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 680
Регистрация: 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
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Aug 30 2017, 09:21
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 19-10-13
Пользователь №: 78 795



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


Сообщение отредактировал Tausinov - Aug 30 2017, 09:21
Go to the top of the page
 
+Quote Post
AVR
сообщение Aug 30 2017, 10:08
Сообщение #4


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 101
Регистрация: 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;
Надеюсь это тоже достаточно чудесно wink.gif


--------------------
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 30 2017, 10:53
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(AVR @ Aug 30 2017, 13:08) *
Надеюсь это тоже достаточно чудесно wink.gif
Всё, что очевидно, не чудесно.
Go to the top of the page
 
+Quote Post
Swup
сообщение Aug 30 2017, 11:45
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 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;
Go to the top of the page
 
+Quote Post
AVR
сообщение Aug 30 2017, 12:52
Сообщение #7


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 101
Регистрация: 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 тоже?


--------------------
Go to the top of the page
 
+Quote Post
Swup
сообщение Aug 30 2017, 14:52
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Цитата(AVR @ Aug 30 2017, 16:52) *
А что будет в процессе работы с такой переменной в коде? Такой же порядок указания индексов?

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


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

Это все для SystemVerilog.

ПС запакованный массив, он как и просто массив, но в памяти выделяется непрерывным куском (а при синтезе непрерывным вектором). И индексы работают все также.
Плюс запакованный массив можно простым присвоением кастить в вектор или запакованную структуру.
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Aug 31 2017, 09:27
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 529
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Подбросим в топку:
Цитата
example <= (0=>"0110", 4=>"1100", 6=>"0011", others=>(others=>'0'));


Размер элемента захардкодил для краткости. Вериложники, ваш ход wink.gif
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 31 2017, 09:57
Сообщение #10


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



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

biggrin.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Swup
сообщение Aug 31 2017, 11:09
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Цитата(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') как я понял.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Aug 31 2017, 11:14
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 19-10-13
Пользователь №: 78 795



Один-в-один практически
Код
example = {0: 4'b0110, 4: 4'b1100, 6: 4'b0011, default: '{default: 0}};
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st November 2017 - 15:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016