В этом примере используется объект MATLAB ® System и FPGA для проверки конструкции уровня передачи регистров (RTL) быстрого преобразования Фурье (FFT) размера 8, написанного в Verilog. БПФ обычно используется в цифровой обработке сигналов для получения частотного распределения сигнала.
Для проверки правильности этого БПФ предусмотрены средства тестирования объектов системы MATLAB. В этом испытании генерируются периодические синусоидальные входные данные в тестируемую конструкцию ЛПВП (DUT) и строятся графики коэффициентов Фурье в комплексной плоскости.
Перед использованием FPGA-in-the-Loop убедитесь, что системная среда правильно настроена для доступа к программному обеспечению FPGA. Функцию hdlsetuptoolpath можно использовать для добавления программного обеспечения FPGA к системному пути для текущего сеанса MATLAB.
Запустите мастер FIL, предварительно заполненный информацией примера FFT. Введите информацию о плате FPGA на первом шаге, следуйте каждому шагу мастера и создайте файл программирования FPGA и объект FIL System.
filWizard('fft_hdlsrc/fft8_sysobj_fil.mat');
Выполните программирование FPGA с помощью созданного файла программирования. Прежде чем продолжить, убедитесь, что мастер FIL завершил создание файла программирования FPGA. Также убедитесь, что плата FPGA включена и подключена правильно.
run('fft8_fil/fft8_programFPGA');
Следующий код создает экземпляры системных объектов, которые представляют генератор синусоидальных волн (F = 100 Гц, Sampling = 1000 Гц, выход комплексной фиксированной точки).
SinGenerator = dsp.SineWave('Frequency ', 100, ... 'Amplitude', 1, ... 'Method', 'Table lookup', ... 'SampleRate', 1000, ... 'OutputDataType', 'Custom', ... 'CustomOutputDataType', numerictype([], 10, 9), ... 'ComplexOutput',true);
fft8_fil является настраиваемым объектом FILSimulation System, который представляет реализацию HDL FFT, выполняемую на FPGA в этой симуляционной системе.
Fft = fft8_fil;
В этом примере моделируется генератор синусоидальных волн и реализация БПФ HDL через объект FPGA-in-the-Loop System. Этот раздел кода вызывает цикл обработки для обработки выборки данных.
for ii=1:1000 % Read 1 sample from the sine wave generator ComplexSinus = step(SinGenerator); % Send/receive 1 sample to/from the HDL FFT on the FPGA [RealFft, ImagFft] = step(Fft,real(ComplexSinus),imag(ComplexSinus)); % Store the FFT sample in a vector ComplexFft(ii) = RealFft + ImagFft*1i; end
Постройте график коэффициентов Фурье в комплексной плоскости.
% Discard the first 12 samples (initialization of the HDL FFT)
ComplexFft(1:12)=[];
% Display the FFT plot(ComplexFft,'ro'); title('Fourier Coefficients in the Complex Plane'); xlabel('Real Axis'); ylabel('Imaginary Axis');

На этом завершается пример моделирования FPGA-in-the-Loop с использованием системного объекта MATLAB.