Перейти к содержанию
    

Имеется 100 регистров обьявленных как :

reg[31:0] slv_reg0;

......

reg[31:0] slv_reg99;

и имеется соответствующее количество 32-х разрядных выходов ( индексированный массив).

Есть ли возможность присвоить  в цикле выходам соответствующие значения регистров? 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А нельзя ли использовать обычный двумерный массив? Чтобы не было потом неприяно заничаться поддержкой?

reg [99 : 0][31 : 0] slv_reg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, mirobest сказал:

Имеется 100 регистров обьявленных как :

и имеется соответствующее количество 32-х разрядных выходов ( индексированный массив).

Вам действительно надо иметь отдельные регистры? Чтобы писать-читать одновременно все? Или, если по одному или хотя бы группами, то поставьте память... 

Потому как 32*100*2 = 6400 интерконнектов будет задействовано для приема-передачи данных на эти регистры....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть не самый элегантный, но рабочий вариант - сгенерить текстовый файл с помощью любого другого ЯП, в котором эти самые присвоения реализуются. Там это как раз будет циклом + пара строк. А потом уже из текстового файлика вставить строки в нужный вериложный.

 

Либо таким же образом сделать перепаковку в многомерный массив, а затем в цикле уже соединения реализовать

Изменено пользователем Tausinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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]. Использовать именуемые выходные векторы и неудобно и приводик к ошибкам обширным

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, Nick_K said:

И всё же настоятельно рекомендую в темплейте заменить именованные регистры, на двухмерный массив регистров. Я так сделал и всё работает.

В вопросе обозначен Verilog, чистый. в нем нет двумерных упакованных массивов. Только память - массив векторов и то, не для передачи через порты ввода/вывода. За сим, в контексте поставленного вопроса, в чистом верилоге задача не решается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, des00 said:

В вопросе обозначен Verilog, чистый. в нем нет двумерных упакованных массивов.

Да, пардоньте, забыл упомянуть - используйте двумерный неупакованный массив. Я конечно сие безобразие в SV делаю, но думаю такой функционал и в Верилоге проканает. Тем более, что сиинтезатор у нас одинаковый.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

On 1/16/2020 at 12:50 PM, mirobest said:

Есть ли возможность присвоить  в цикле выходам соответствующие значения регистров? 

Увы - в Verilog генерировать имя переменной в цикле нельзя. Поэтому единственный путь "упрощения" себе жизни как советовали выше  внешний кодогенератор.Ну или использовать макро.  

Заменой на массивы тут не получится использовать так как это довольно распространенная проблема при стыковке с чужим кодом  со множеством однотипных  портов или переменных  (который тоже чаще всего генерится автоматом из шаблонов). 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/19/2020 at 7:22 AM, lexx said:

Сделайте регистр размера 3200 и доступ по индексу через +: . Будет чистый Verilog

начальное присвоение, как в коде у ТС, все равно руками

On 1/19/2020 at 8:50 AM, RobFPGA said:

Увы - в Verilog генерировать имя переменной в цикле нельзя.

Я в SV пробовал, у меня тоже не оплучилось :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, des00 said:

Я в SV пробовал, у меня тоже не оплучилось :(

SV как  надстройка верилога включает в себя паттерны языка по-умолчанию. Да и в VHDL тоже таких фокусов нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

Передать перечисляемое в цикле значение у меня не получилось. но руками набить можно)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, des00 said:

там можно передать в макрос символьное значение, с помощью ``var``, но это будет именно символ. Например так 

Да, я уже проверял) И в generat'е не работает и в foreach'е тоже. Но такие же фокусы в Верилоге можно сделать ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, Nick_K said:

Да, я уже проверял) И в generat'е не работает и в foreach'е тоже. Но такие же фокусы в Верилоге можно сделать ;)

посмотрел IEEE Std 1364-2001 и IEEE Std 1364-2005. Ткните носом где это допускается в стандарте на верилог?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...