3856
.pdfБлок Dual Port RAM представляет память ОЗУ с двумя портами A и B. Входные отсчеты записываются в и считываются из порта A (ОЗУ), коэффициенты считываются из порта B (рис. 4.67). Процессом записи и считывания управляет автомат (блок Address Control) (рис. 4.68).
Основные функциональные блоки автомата это два суммирующих счетчика coef_counter (предварительно загружается число 43) и Data_Counter (предварительно загружается 0) адресующихся к портам A и B ОЗУ и компаратор. На один из входов компаратора подключается константа 85 (команда 2*length(coef)-1). Компаратор управляет входом разрешения счета счетчика Data_Counter и формирует сигнал we (латентность 1) разрешающий запись в ОЗУ и сигнал сброса аккумулятора (латентность 5) с последующим формированием сигнала разрешения работы регистра захвата.
ОЗУ (рис. 4.69) инициализируется вектором значений с применением следующей команды [zeros(1, length(coef)) (coef)] (рис.4.69). Блок памяти имеет латентность - единица.
На рис. 4.69 показано, что сигнал, подлежащий фильтрации подвергается передискретизации в 43 раза перед тем как быть записанным в ОЗУ. Передискретизация и последующая операция понижения частоты дескритизации (децимация) обеспечивают по внешним входам фильтра организовывать структуру фильтра типа Single-Rate FIR.
Для выравнивания числа столбцов в банках памяти используется блок pad (основан на блоке Xilinx Bus Concatenator) выполняющего роль конкатенации (склеивания) двух шин. Склеиваются две шины в форматах UFix_10_0 (10разрядная шина, младшие разряды lo) и UFix_2_0 (2-разрядная шина, старшие разряды hi). Результатом склеивания является шина в формате UFix_12_0 которая преобразуется в тип
Fix_12_12.
291
292
Рис. 4.67. Двух портовая память с управляющим автоматом
292
293
Рис. 4.68. Управляющий автомат двух портовой памяти и настройки блоков счетчиков coef_counter и Data_Counter
293
294
Рис. 4.69. Двух портовая память на основе блочной памяти ПЛИС и настройки блока
Xilinx Dual Random Access
294
295
Рис. 4.70. Вектор инициализации блочной памяти ПЛИС (коэффициенты КИХ-фильтра симметричны)
295
На рис. 4.71 показан умножитель и аккумулятор. Результат умножения представляется в формате Fix_22_20, а результат сложения в формате Fix_24_20 c учетом переполнения и операции расширения знака числа. Разрядность выходной шины аккумулятора определяется следующей командой:
ceil(log2(max(1,sum(abs(coef*2^coef_binpt)))))+data_width+1.
Умножитель имеет латентность три для согласования с реальной латентностью равной трем характерной для встроенных умножителей в ПЛИС Xilinx.
Рис. 4.71. Умножитель и аккумулятор
На рис. 4.72 показана настройка периода симуляции в Simulink. С учетом того что используется передискретизация период симуляции должен быть 1/(43FS ). Период
синхросигнала задаем 10 нс. В меню Configuration Parameters задаем время симуляции 0.05 c. На рис. 4.73 показано удаление высокочастотных составляющих из случайного сигнала с помощью КИХ-фильтра на 43 отвода. Имитационная модель и моделирование отклика КИХ-
296
фильтра на единичный импульс в Simulink показано на рис. 4.74. Период синхросигнала увеличен до 100 нс. Функциональное моделирование показывает, что входной сигнал (единичный импульс по амплитуде с произвольной шириной, не путать с дельта-функцией позволяющей просмотреть коэффициенты фильтра) и выходной сигнал умножаются на 256 (рис. 4.75). Профильтрованные значения обновляются через 43 такта синхроимпульса. Фрагменты значений выходного сигнала и коэффициентов фильтра в форматах с плавающей double и фиксированной запятой FIX приведены в табл. 4.3.
Рис. 4.72. Настройка периода симуляции в Simulink
297
298
Рис. 4.73. Имитационное моделирование в системе Matlab/Simulink КИХ-фильтра на 34 отвода с использованием одного MAC-блока и блочной памяти
298
299
а)
Рис. 4.74. а) Имитационная модель КИХ-фильтра (на вход подается единичный импульс) и моделирование отклика КИХ-фильтра (б)
299
300
б)
Рис. 4.74. а) Имитационная модель КИХ-фильтра (на вход подается единичный импульс) и моделирование отклика КИХ-фильтра (б) (продолжение)
Рис. 4.75. Функциональное моделирование с использованием моделирующей программы на языке VHDL сгенерированной в автоматическом режиме. Входной сигнал (единичный импульс) и выходной сигнал умножаются на 256
300