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

 
 
 
Reply to this topicStart new topic
> использование genvar как аргумента в макросе. verilog.
Kokos
сообщение May 3 2017, 14:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-11-10
Пользователь №: 60 667



Добрый день! Возможно ли сделать то, о чем я написал выше?

делаю так :

Код
`define in(arg)  signal_in_``arg
module top(
.
.
.
input signal_in_0,
.
);

.
.
.
genvar y;
generate
for (y=0;y<=2;y=y+1)
begin : bit

module module_inst (
.in(`in(y)),
.
.
.
);


end
endgenerate
.
.
.
endmodule


Но модельсим ругается. такое ощущение, что макрос принимает не значение y, а использует как аргумент сам символ y
Go to the top of the page
 
+Quote Post
Fitc
сообщение May 3 2017, 17:28
Сообщение #2


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

Группа: Свой
Сообщений: 80
Регистрация: 21-10-11
Пользователь №: 67 894



Цитата(Kokos @ May 3 2017, 17:19) *
Но модельсим ругается. такое ощущение, что макрос принимает не значение y, а использует как аргумент сам символ y

Так и есть, поскольку макроопределение подставляется перед компиляцией, а generate выполняется во время линковки (elaboration)

В вашем случае можно порт объявить в виде массива, разрядность которого определяется через список параметров модуля, а в generate обращаться к соответствующему элементу массива
Go to the top of the page
 
+Quote Post
Kokos
сообщение May 4 2017, 07:39
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-11-10
Пользователь №: 60 667



Я правильно понимаю что порт в виде массива можно использовать только в systemverilog?
Go to the top of the page
 
+Quote Post
Fitc
сообщение May 4 2017, 18:43
Сообщение #4


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

Группа: Свой
Сообщений: 80
Регистрация: 21-10-11
Пользователь №: 67 894



Цитата(Kokos @ May 4 2017, 10:39) *
Я правильно понимаю что порт в виде массива можно использовать только в systemverilog?

Да.
В verilog двумерные массивы в портах к сожалению не поддерживаются.

Нужно писать что-то типа:
Код
input[pWORDS_CNT*pWORD_LENGTH-1:0] arr;

genvar geni;

for(geni=0; geni<pWORDS_CNT; ++geni) begin
  wire[pWORD_LENGTH-1:0] my_word;
  assign my_word = arr[geni*pWORD_LENGTH+pWORD_LENGTH-1:geni*pWORD_LENGTH];
end
Go to the top of the page
 
+Quote Post
Kokos
сообщение May 5 2017, 06:44
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-11-10
Пользователь №: 60 667



Спасибо!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2017 - 05:30
Рейтинг@Mail.ru


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