Могу ли я использовать массив «arr [x] [y]» внутри всегда блока? Является ли он синтезируемым?

always@(posedge clk)
begin
r00<=r01;
r01<=r02;
r02<=arr[x][y];
//code
end

будет ли это синтезировано внутри блока генерации? Кроме того, что «arr» является 2-мерным.


person Joe    schedule 12.12.2015    source источник
comment
Это зависит от инструмента синтеза. Многие синтезаторы создают структуру, подобную ОЗУ, для этого типа массива.   -  person sharvil111    schedule 12.12.2015
comment
Да, почему бы и нет. Это не имеет большого значения для сгенерированного блока или всегда блокируется. Настоящая проблема заключается в том, что если бы arr был огромным, то инструмент синтеза создал бы большой банк регистров для моделирования этого, что привело бы к длительному времени выполнения, а иногда и к съедению всего пространства памяти и взрыву.   -  person jclin    schedule 18.12.2015


Ответы (1)


Чтобы уточнить комментарии выше, ваш инструмент синтеза должен сделать вывод, что это память, но в зависимости от вашего объявления и использования существует несколько сценариев.

  1. Вы получите несинтезируемые или ошибки в вашем коде из-за чтения во время записи и других ошибок интерфейса памяти из-за шаблонов доступа

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

  3. Все будет отлично работать.

Многие инструменты (например, Quartus) имеют встроенную функциональность для добавления воспоминаний в ваш код (например, инструмент Megafunction).

person Tim P    schedule 06.01.2016