Kokos 0 3 мая, 2017 Опубликовано 3 мая, 2017 · Жалоба Добрый день! Возможно ли сделать то, о чем я написал выше? делаю так : `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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fitc 0 3 мая, 2017 Опубликовано 3 мая, 2017 · Жалоба Но модельсим ругается. такое ощущение, что макрос принимает не значение y, а использует как аргумент сам символ y Так и есть, поскольку макроопределение подставляется перед компиляцией, а generate выполняется во время линковки (elaboration) В вашем случае можно порт объявить в виде массива, разрядность которого определяется через список параметров модуля, а в generate обращаться к соответствующему элементу массива Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kokos 0 4 мая, 2017 Опубликовано 4 мая, 2017 · Жалоба Я правильно понимаю что порт в виде массива можно использовать только в systemverilog? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fitc 0 4 мая, 2017 Опубликовано 4 мая, 2017 · Жалоба Я правильно понимаю что порт в виде массива можно использовать только в 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kokos 0 5 мая, 2017 Опубликовано 5 мая, 2017 · Жалоба Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться