mirobest 0 16 января, 2020 Опубликовано 16 января, 2020 · Жалоба Имеется 100 регистров обьявленных как : reg[31:0] slv_reg0; ...... reg[31:0] slv_reg99; и имеется соответствующее количество 32-х разрядных выходов ( индексированный массив). Есть ли возможность присвоить в цикле выходам соответствующие значения регистров? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 16 января, 2020 Опубликовано 16 января, 2020 · Жалоба А нельзя ли использовать обычный двумерный массив? Чтобы не было потом неприяно заничаться поддержкой? reg [99 : 0][31 : 0] slv_reg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 16 января, 2020 Опубликовано 16 января, 2020 · Жалоба 26 минут назад, mirobest сказал: Имеется 100 регистров обьявленных как : и имеется соответствующее количество 32-х разрядных выходов ( индексированный массив). Вам действительно надо иметь отдельные регистры? Чтобы писать-читать одновременно все? Или, если по одному или хотя бы группами, то поставьте память... Потому как 32*100*2 = 6400 интерконнектов будет задействовано для приема-передачи данных на эти регистры.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mirobest 0 16 января, 2020 Опубликовано 16 января, 2020 · Жалоба Проблема исходит из генерирумого Xilinx Vivado template для AXI Slave. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 16 января, 2020 Опубликовано 16 января, 2020 (изменено) · Жалоба Есть не самый элегантный, но рабочий вариант - сгенерить текстовый файл с помощью любого другого ЯП, в котором эти самые присвоения реализуются. Там это как раз будет циклом + пара строк. А потом уже из текстового файлика вставить строки в нужный вериложный. Либо таким же образом сделать перепаковку в многомерный массив, а затем в цикле уже соединения реализовать Изменено 16 января, 2020 пользователем Tausinov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 16 января, 2020 Опубликовано 16 января, 2020 · Жалоба 1 hour ago, mirobest said: Проблема исходит из генерирумого Xilinx Vivado template для AXI Slave. И всё же настоятельно рекомендую в темплейте заменить именованные регистры, на двухмерный массив регистров. Я так сделал и всё работает. Тем более, что функцию перисвоения можно будет с большого case массива заменить на нумеруемую, что значительно уменьшит количество строк кода. Ну или на крайний случай сделать одноразовую замену slv_reg0 -> slv_reg[1], slv_reg0 -> slv_reg[1], ... slv_reg99 -> slv_reg[99]. Использовать именуемые выходные векторы и неудобно и приводик к ошибкам обширным Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 января, 2020 Опубликовано 17 января, 2020 · Жалоба 14 hours ago, Nick_K said: И всё же настоятельно рекомендую в темплейте заменить именованные регистры, на двухмерный массив регистров. Я так сделал и всё работает. В вопросе обозначен Verilog, чистый. в нем нет двумерных упакованных массивов. Только память - массив векторов и то, не для передачи через порты ввода/вывода. За сим, в контексте поставленного вопроса, в чистом верилоге задача не решается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 17 января, 2020 Опубликовано 17 января, 2020 · Жалоба 1 hour ago, des00 said: В вопросе обозначен Verilog, чистый. в нем нет двумерных упакованных массивов. Да, пардоньте, забыл упомянуть - используйте двумерный неупакованный массив. Я конечно сие безобразие в SV делаю, но думаю такой функционал и в Верилоге проканает. Тем более, что сиинтезатор у нас одинаковый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Сделайте регистр размера 3200 и доступ по индексу через +: . Будет чистый Verilog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Приветствую! On 1/16/2020 at 12:50 PM, mirobest said: Есть ли возможность присвоить в цикле выходам соответствующие значения регистров? Увы - в Verilog генерировать имя переменной в цикле нельзя. Поэтому единственный путь "упрощения" себе жизни как советовали выше внешний кодогенератор.Ну или использовать макро. Заменой на массивы тут не получится использовать так как это довольно распространенная проблема при стыковке с чужим кодом со множеством однотипных портов или переменных (который тоже чаще всего генерится автоматом из шаблонов). Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба On 1/19/2020 at 7:22 AM, lexx said: Сделайте регистр размера 3200 и доступ по индексу через +: . Будет чистый Verilog начальное присвоение, как в коде у ТС, все равно руками On 1/19/2020 at 8:50 AM, RobFPGA said: Увы - в Verilog генерировать имя переменной в цикле нельзя. Я в SV пробовал, у меня тоже не оплучилось :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 5 hours ago, des00 said: Я в SV пробовал, у меня тоже не оплучилось :( SV как надстройка верилога включает в себя паттерны языка по-умолчанию. Да и в VHDL тоже таких фокусов нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 32 minutes ago, Nick_K said: SV как надстройка верилога включает в себя паттерны языка по-умолчанию. Да и в VHDL тоже таких фокусов нет. там можно передать в макрос символьное значение, с помощью ``var``, но это будет именно символ. Например так `define assign_reg(idx,y) assign var_a[idx] = var``y`` assign_reg(0, 13); // результат применения assign var_a[0] = var13; // но перечисляемое не работает generate for (int i = 0; i < 13; i++) ....assign_reg(i, i % 13); .... // результат assign var_a[0] = vari%13; .... assign var_a[13] = vari%13; Передать перечисляемое в цикле значение у меня не получилось. но руками набить можно) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 8 minutes ago, des00 said: там можно передать в макрос символьное значение, с помощью ``var``, но это будет именно символ. Например так Да, я уже проверял) И в generat'е не работает и в foreach'е тоже. Но такие же фокусы в Верилоге можно сделать ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 11 minutes ago, Nick_K said: Да, я уже проверял) И в generat'е не работает и в foreach'е тоже. Но такие же фокусы в Верилоге можно сделать ;) посмотрел IEEE Std 1364-2001 и IEEE Std 1364-2005. Ткните носом где это допускается в стандарте на верилог? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться