Как 16-битный массив нуждается в 5-битном адресе (Xilinx Vivado HLS)?

Я новичок в Xilinx HLS. Я следую руководству ug871-vivado-high-level-synchronous-tutorial.pdf (стр. 77).

Код

#define N 32

void array_io (dout_t d_o[N], din_t d_i[N])     
{   
   //..do something
}

После синтеза я получил отчет типа

введите здесь описание изображения

Меня смущает то, как ширина адресного порта автоматически соответствует количеству адресов, к которым необходимо получить доступ (5-бит для 32 адресов)?

Пожалуйста помоги.


person Main    schedule 11.02.2015    source источник


Ответы (2)


Из UG871 кажется, что размер массива составляет от 0 до 16 отсчетов, следовательно, вам нужно 32 адреса для доступа ко всем значениям (см. рис. 69). Я предполагаю, что число N где-то ограничено, чтобы быть меньше 32 (или быть ровно 16). Это означает, что Vivado знает об этом ограничении и генерирует столько адресных битов, сколько необходимо. Большинство инструментов синтеза проверяют ограничения на размер и оптимизируют ненужный код.

person dieli    schedule 12.02.2015

Когда вы синтезируете функцию, вы также создаете несколько регистров для хранения переменных. Это означает, что адрес, который вы вводите как ввод, является одним из данных, которые вы одновременно записываете в d_o или d_in.

В вашем случае, где N = 32, у вас есть 32 различных переменных (как на входе, так и на выходе). Чтобы адресовать 32 различные переменные, вам нужно 32 различных комбинации битов (чтобы указать на конкретную, без двусмысленности). С 5 битами у вас есть 2 ^ 5 = 32 различных комбинации адресов: минимальное количество битов для адресации всех ваших данных. Например, если у вас 32введите здесь описание изображения

Число битов адреса НЕЗАВИСИМО от размера данных (т.е. они могут быть целыми, плавающими, символьными, короткими, двойными, произвольной точностью и т. д.)

person Leos313    schedule 12.07.2016