Этот пример показывает, как программно получить задержку блока FFT HDL Optimized в модели. Можно использовать значение задержки для соответствия параллельных путей данных.
Будьте осторожны с совпадением задержек для больших сигналов или больших задержек, так как это добавляет память к вашей аппаратной реализации. В качестве альтернативы, если сигнал не меняется в системе координат, используйте действительные сигналы или сигналы управления системой координат, чтобы выровнять сигнал с выходом блока FFT.
Откройте модель, которая содержит оптимизированный FFT HDL или оптимизированный ОБПФ HDL, такой как модель из примера реализации БПФ для FPGA с оптимизированным FFT HDL.
modelname = 'FFTHDLOptimizedExample_Streaming'; load_system(modelname); set_param(modelname,'SimulationCommand','Update'); open_system([modelname '/FFT HDL Optimized Streaming']);
Этот пример включает в себя ffthdlLatency
функция, которая вычисляет задержку блока для его текущих параметров. Вызовите функцию с указателем на блок и размером входного вектора. Можно использовать путь Simulink к блоку или выбрать блок в модели, чтобы получить указатель, gcb
. В этой модели входной сигнал является вектором из 8 выборок.
latency = ffthdlLatency([modelname '/FFT HDL Optimized Streaming/FFT HDL Optimized'],8)
latency = 139
Функция копирует параметры из указателя на блок и создает Системный object™ с теми же настройками, что и блок. Затем он вызывает getLatency
функция на объекте. См. getLatency
.
function lat = ffthdlLatency(block, vectorsize) % default vector size = 1 if nargin == 1 vectorsize = 1; end fftlen = evalin('base',get_param(block, 'FFTLength')); arch = get_param(block, 'Architecture'); bri = strcmpi(get_param(block, 'BitReversedInput'), 'on'); bro = strcmpi(get_param(block, 'BitReversedOutput'), 'on'); fftobj = dsp.HDLFFT('FFTLength',fftlen, ... 'Architecture', arch, ... 'BitReversedInput', bri, ... 'BitReversedOutput', bro); lat = getLatency(fftobj, fftlen, vectorsize); end