Проектирование последовательных КИХ-фильтров в САПР ПЛИС Quartus II

PDF версия
Цель статьи — продемонстрировать возможности САПР ПЛИС Quartus II для разработки цифровых фильтров. Проект последовательного КИХ-фильтра на четыре отвода представлен в САПР Quartus II Version 5.1 (Build 170 10/3/2005) и до настоящего времени включен в перечень демонстрационных примеров более современных версий САПР, например Quartus II Version 13.1 [1]. В САПР Quartus II ver 9.0 проект можно найти по адресу www.altera\90\qdesigns\fir_filter, а для версии 13.0 — www.altera\13.1\quartus\qdesigns\fir_filter.

Линия задержки, ПЗУ для хранения коэффициентов, управляющий автомат разработаны на языке Verilog, умножитель использует мегафункцию LPM_MULT, а аккумулятор представляет собой иерархическое описание на языке Verilog, нижний уровень которого — verilog-файл, cгенерированный мегафункцией LPM_ADD_SUB. Умножитель показан в виде символа, а линия задержки, коэффициенты и управляющий автомат — в виде блок-схем.

Адаптируем данный пример под задачу проектирования последовательного КИХ-фильтра на четыре отвода y = C0x0+C1x1+C2x2+C3x3 со следующими коэффициентами: C0 = –2, C1 = –1, C2 = 7 и C3 = 6.

КИХ-фильтры, использующие в своей основе блоки умножения и накопления, получили в зарубежной литературе название MAC FIR Filter (в нашем случае 1 MAC-фильтр). В статьях [2, 3] приведены примеры проектирования таких фильтров в системе Xilinx System Generator с применением библиотеки Reference BlockSet/DSP, а в работе [4] — с использованием пакета расширения Altera DSP Builder ver. 12.1 системы визуально-имитационного моделирования Matlab/Simulink (версия 8.0.0.783 (R2012b)). Примеры из работ [2, 3, 4] демонстрируют возможности методологии объектно-ориентированного проектирования [5].

На рис. 1 изображен иерархический проект последовательного КИХ-фильтра на четыре отвода в САПР Quartus II версии 13.0, на рис. 2 показана структурная схема проекта, представленная на уровне регистровых передач и полученная с помощью RTL-viewer. Входной сигнал и коэффициенты фильтра предусмотрены в дополнительном коде с 8‑ и 4‑битной точностью, поэтому умножитель и аккумулятор также настроены для выполнения операций над числами со знаком.

Иерархический проект последовательного КИХ-фильтра на четыре отвода

Рис. 1. Иерархический проект последовательного КИХ-фильтра на четыре отвода

Структурная схема проекта, полученная с помощью RTL-viewer

Рис. 2. Структурная схема проекта, полученная с помощью RTL-viewer

Проект использует два синхросигнала — clk и clkx2. Синхро-сигнал clk применен для тактирования линии задержки и внутреннего регистра аккумулятора фильтра, а clkx2 — для тактирования работы регистра результата. Период синхросигнала clk в два раза больше clkx2. Умножитель и сумматор аккумулятора настроены для работы в асинхронных режимах.

Пример 1 демонстрирует verilog-код линии задержки на четыре отвода. На рис. 3 дана структурная схема линии задержки на базе регистров. Пример 2 показывает verilog-код ПЗУ для хранения коэффициентов фильтра, на рис. 4 можно видеть структурную схему ПЗУ на базе дешифратора. Пример 3 представляет verilog-код управляющего автомата КИХ-фильтра. На рис. 5а изображена структурная схема управляющего автомата, а на рис. 5б — диаграмма состояний, на рис. 5в — таблица переходов и таблица кодирований состояний. Используется кодирование с одним активным или горячим состоянием (one hot encoding, OHE), то есть в каждый конкретный момент времени активным (hot) может быть только один триггер состояния. Метод ОНЕ применительно к ПЛИС FPGA дает возможность строить конечные автоматы, которые в общем случае требуют меньших ресурсов и отличаются более высокими скоростными показателями, чем аналогичные конечные автоматы с двоичным кодированием состояний.

module taps
(
  clk, reset, sel, newt, d, x
);
  input clk;
  input reset;
  input [1:0] sel;
  input newt;
  input [7:0] d;
  output [7:0] x;
  reg [7:0] x, xn, xn_1, xn_2, xn_3;
// Register element
always @(posedge clk or posedge reset)
begin
if (reset)
  begin
    xn = 8'b00000000;
    xn_1 = 8'b00000000;
    xn_2 = 8'b00000000;
    xn_3 = 8'b00000000;
  end
else if (newt)
  begin
    xn_3 = xn_2;
    xn_2 = xn_1;
    xn_1 = xn;
    xn = d;
  end
end

// Mux element

always @(sel or xn or xn_1 or xn_2 or xn_3)
case (sel)
2'b 00: x = xn;
2'b 01: x = xn_1;
2'b 10: x = xn_2;
2'b 11: x = xn_3;
default: x = 8'bXXXXXXXX;
endcase
endmodule

Пример 1. verilog-код линии задержки
module hvalues
(
  sel, h
);
  input [1:0] sel;
  output [3:0] h;
reg [3:0]h;
always @(sel)
case (sel)
 	2'b 00 : h = 4'b 1110;
 	2'b 01 : h = 4'b 1111;
 	2'b 10 : h = 4'b 0111;
 	2'b 11 : h = 4'b 0110;
endcase
endmodule

Пример 2. verilog-код ПЗУ для хранения коэффициентов фильтра 
module state_m
( 
  clk, reset, newt, sel, follow, first
);
  input clk, reset, newt;
  output follow, first;
  output [1:0]sel;
  reg follow, first;
  reg [1:0] sel;
  reg [2:0] filter;

parameter idle = 0, tap1 = 1, tap2 = 2, tap3 = 3, tap4 = 4;

always
begin
  case (filter)
    idle: begin
        sel = 2'b0;
        follow = 1'b0;
        first = 1'b0;
       end

    tap1: begin
        sel = 2'b0;
        follow = 1'b0;
        first = 1'b1;
       end

    tap2: begin
        sel = 2'b01;
        follow = 1'b0;
        first = 1'b0;
       end

    tap3: begin
        sel = 2'b10;
        follow = 1'b0;
        first = 1'b0;
       end

    tap4: begin
        sel = 2'b11;
        follow = 1'b1;
        first = 1'b0;
       end
      
    default : begin
          sel = 2'b00;
          follow = 1'b0;
          first = 1'b0;
          end
  endcase
end

always @(posedge clk or posedge reset)
begin
  if (reset)
    filter = idle;
  else
    case (filter)
      idle: begin
        if (newt)
          filter = tap1;
         end
        
      tap1: begin
          filter = tap2;
         end

      tap2: begin
          filter = tap3;
         end

      tap3: begin
          filter = tap4;
         end

      tap4: begin
          if (newt)
            filter = tap1;
          else
            filter = idle;
         end
    endcase	

end		
endmodule
Пример 3. verilog-код управляющего автомата КИХ-фильтра

Структурная схема линии задержки КИХ-фильтра

Рис. 3. Структурная схема линии задержки КИХ-фильтра

Структурная схема ПЗУ

Рис. 4. Структурная схема ПЗУ

Структурная схема управляющего автомата

Рис. 5.
а) Структурная схема управляющего автомата;
б) диаграмма состояний;
в) таблица переходов и таблица кодирований состояний

На рис. 6 показана структурная схема умножителя размерностью операндов 8×4, настроенная на асинхронный режим работы (clock=0). Умножитель проектируется на базе мегафункции LPM_MULT. Точность вычисления произведения — 12 разрядов. Для реализации умножителя будем использовать аппаратные умножители ПЛИС. Всего в ПЛИС EP3C5F256C6 предусмотрено 46 аппаратных умножителей с размерностью операндов 9×9.

Структурная схема умножителя размерностью операндов 8×4 на базе мегафункции LPM_MULT

Рис. 6. Структурная схема умножителя размерностью операндов 8×4 на базе мегафункции LPM_MULT

На рис. 7 представлен сумматор/вычитатель на базе мегафункции LPM_ADD_SUB. Сумматор/вычитатель способен работать как в асинхронном, так и в синхронном режиме. По умолчанию предполагается, что входные сигналы сумматора data[11..0] и datab[11..0] представлены в дополнительном коде.

Сумматор/вычитатель на базе мегафункции LPM_ADD_SUB

Рис. 7. Сумматор/вычитатель на базе мегафункции LPM_ADD_SUB

Пример 4 демонстрирует verilog-код аккумулятора КИХ-фильтра, а на рис. 8 видна структурная схема аккумулятора, соответствующая этому коду. Аккумулятор (функциональный блок acc) выполнен на основе асинхронного накапливающего сумматора, на базе мегафункции LPM_ADD_SUB, регистра и мультиплексора для принудительной установки входа сумматора datab[11..0] в ноль. Пример 5 демонстрирует фрагмент verilog-кода функции, используемой в примере 4.

module acc
(
  xh, clk, first, yn
);
  input [11:0] xh;
  input clk;
  input first;
  output [11:0] yn;

reg [11:0]yn;
reg [11:0] ynm, result, a_in;
wire [11:0] inter;
// Describe Multiplexer
always @(first or result)
begin
  case (first)
    1'b 0: ynm = result;
    1'b 1: ynm = 12'b00000000000;
  endcase
end
always @(posedge clk)
begin
  result = inter;
end
always @(xh)
begin
  a_in[11:0] = (xh);
  //a_in[12] = 0;
end
always @(result)
  begin 
    yn[11:0] = result[11:0];
  end
accum inst_13(.dataa(a_in), .datab(ynm), .result(inter));
endmodule

Пример 4. verilog-код аккумулятора КИХ-фильтра
module accum (
  dataa,
  datab,
  result);

  input	[11:0] dataa;
  input	[11:0] datab;
  output	[11:0] result;

  wire [11:0] sub_wire0;
  wire [11:0] result = sub_wire0[11:0];

  lpm_add_sub	lpm_add_sub_component (
        .dataa (dataa),
        .datab (datab),
        .result (sub_wire0)
        // synopsys translate_off
        ,
        .cout (),
        .cin (),
        .add_sub (),
        .overflow (),
        .clock (),
        .clken (),
        .aclr ()
        // synopsys translate_on
        );
  defparam
    lpm_add_sub_component.lpm_direction = "ADD",
    lpm_add_sub_component.lpm_hint = "ONE_INPUT_IS_CONSTANT=NO,CIN_USED=NO",
    lpm_add_sub_component.lpm_type = "LPM_ADD_SUB",
    lpm_add_sub_component.lpm_width = 12;
endmodule

Пример 5. Фрагмент verilog-кода функции accum (накапливающий сумматор) на базе мегафункции lpm_add_sub
Структурная схема аккумулятора на мегафункции LPM_ADD_SUB

Рис. 8. Структурная схема аккумулятора на мегафункции LPM_ADD_SUB

На рис. 9 и 10 дано функциональное моделирование импульсной характеристики КИХ-фильтра на четыре отвода и прохождение сигнала по структуре фильтра. На вход фильтра поступает сигнал –5, 3, 1, 0, 0, 0 и т. д. Правильные значения на выходе фильтра: 10, –1, –40, –10, 25, 6, 0 и т. д.

Функциональное моделирование импульсной характеристики КИХ-фильтра на четыре отвода

Рис. 9. Функциональное моделирование импульсной характеристики КИХ-фильтра на четыре отвода

Функциональное моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода. На вход фильтра поступает сигнал –5, 3, 1, 0, 0, 0 и т. д. Правильные значения на выходе фильтра: 10, –1, –40, –10, 25, 6, 0 и т. д.

Рис. 10. Функциональное моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода. На вход фильтра поступает сигнал –5, 3, 1, 0, 0, 0 и т. д. Правильные значения на выходе фильтра: 10, –1, –40, –10, 25, 6, 0 и т. д.

Переработаем проект (рис. 1), применяя несколько вариантов. Рассмотрим вариант, когда умножитель и аккумулятор синхронизуются общим синхросигналом clk, но реализуются с помощью мегафункции умножения LPM_MULT и накопления ALTACCUMULATE. В случае использования мегафункции ALTACCUMULATE отпадает необходимость в разработке вспомогательных узлов аккумулятора (рис. 8). Следует заметить, что мегафункция ALTACCUMULATE не входит в разработчик мегафункций (MegaWizard Plug-In Manager) для САПР Quartus II версии 13.1. Реализуется на базе логических элементов для ПЛИС серии Cyclone III и на базе адаптивных логических элементов для ПЛИС серии Stratix III.

Входной сигнал и коэффициенты фильтра представим с 8‑разрядной точностью. Все функциональные блоки проекта на верхнем уровне иерархии представим символами. Линия задержки, ПЗУ и управляющий автомат представлены verilog-кодом и корректировке не подлежат. На рис. 11 показан проект последовательного КИХ-фильтра на четыре отвода с использованием аккумулятора на мегафункции ALTACCUMULATE, а на рис. 12 демонстрируется функциональное моделирование прохождения сигнала по структуре КИХ-фильтра. Латентность умножителя и аккумулятора составляет 1 такт синхрочастоты. Для согласования работы управляющего автомата и аккумулятора необходимо выходной сигнал first автомата задержать на один такт синхрочастоты с помощью двухтактного триггера, выход которого нужно подключить ко входу сигнала синхронной загрузки аккумулятора sload. Результаты умножения и вычисления суммы произведений представляются с 16‑разрядной точностью. Для получения правильных значений профильтрованного сигнала на выходе yn_out[15..0] следует выходной сигнал follow задержать на три такта синхрочастоты и подключить его к входу разрешения тактирования ena регистра результата.

Проект последовательного КИХ-фильтра на четыре отвода с использованием аккумулятора на мегафункции ALTACCUMULATE

Рис. 11. Проект последовательного КИХ-фильтра на четыре отвода с использованием аккумулятора на мегафункции ALTACCUMULATE

Функциональное моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода в случае использования аккумулятора на мегафункции ALTACCUMULATE

Рис. 12. Функциональное моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода в случае использования аккумулятора на мегафункции ALTACCUMULATE

Рассмотрим вариант, когда умножитель и аккумулятор реализованы на мегафункции умножения и накопления ALTMULT_ACCUM (рис. 13 и 14). Данный вариант предпочтительнее для современных ПЛИС, так как предполагает использование встроенных ЦОС-блоков ПЛИС, позволяя экономить логические ресурсы. Выходной сигнал автомата first необходимо напрямую подключить к входу синхронной загрузки аккумулятора accum_sload.

Проект последовательного КИХ-фильтра на четыре отвода с использованием умножителя и аккумулятора на мегафункции ALTMULT_ACCUM

Рис. 13. Проект последовательного КИХ-фильтра на четыре отвода с использованием умножителя и аккумулятора на мегафункции ALTMULT_ACCUM

Функциональное моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода в случае использования умножителя и аккумулятора на мегафункции ALTMULT_ACCUM

Рис. 14. Функциональное моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода в случае использования умножителя и аккумулятора на мегафункции ALTMULT_ACCUM

Пример использования мегафункции ALTMULT_ACCUM для разработки параллельных КИХ-фильтров на четыре отвода можно найти в работе [6]. Входной сигнал и коэффициенты фильтра представлены с 4‑разрядной точностью, а результат фильтрации — с 8‑разрядной. Для разработки подобного фильтра требуется настроить мегафункцию ALTMULT_ACCUM таким образом, чтобы реализовались четыре умножителя, дерево сумматоров, аккумулятор. Линия задержки может быть построена на внутренних регистрах, находящихся на входах умножителей (рис. 15). Для сравнения: рабочая частота такого фильтра в наихудшем случае для ПЛИС серии Stratix III оценивается величиной в 400 МГц. Фильтр имеет латентность четыре такта синхрочастоты, и результат фильтрации обновляется с каждым тактом синхрочастоты (рис. 16). Последовательный КИХ-фильтр на мегафункции ALTMULT_ACCUM имеет латентность пять тактов синхрочастоты сигнала clk, и результат фильтрации обновляется через каждый четвертый такт синхрочастоты (на пятый, рис. 14).

Параллельная реализация КИХ-фильтра на четыре отвода с использованием мегафункции ALTMULT_ACCUM

Рис. 15. Параллельная реализация КИХ-фильтра на четыре отвода с использованием мегафункции ALTMULT_ACCUM

Функциональное моделирование прохождения сигнала по структуре параллельного КИХ-фильтра на четыре отвода в случае использования ALTMULT_ACCUM

Рис. 16. Функциональное моделирование прохождения сигнала по структуре параллельного КИХ-фильтра на четыре отвода в случае использования ALTMULT_ACCUM

Общее число задействованных ресурсов проектов показано в таблице 1. Для сравнения показаны оценки ресурсов при реализации 1 MAC-фильтра на четыре отвода в виде имитационных моделей с применением методологии объектно-ориентированного проектирования (табл. 2 и 3).

Таблица 1. Общие сведения по числу задействованных ресурсов ПЛИС Altera Cyclone III Device EP3C5F256C6, временная модель TimeQuest анализа Slow-model (напряжение питания ядра 1200 мВ, температура 85 °C)

Проект

Общее число логических элементов (Total logic elements)

Триггеров логических элементов (Dedicated logic registers)

Аппаратных умножителей с размерностью операндов 9×9 (Embedded Multiplier 9-bit elements)

Рабочая частота в наихудшем случае Fmax, МГц

Умножитель на мегафункции LPM_MULT, аккумулятор на мегафункции LPM_ADD_SUB (рис. 1)

93

66

1

141,84

Умножитель на мегафункции LPM_MULT, аккумулятор на мегафункции ALTACCUMULATE (рис. 2)

112

91

1

179,66

Умножитель и аккумулятор на мегафункции ALTMULT_ACCUM (рис. 3)

89

70

1

128,07

Таблица 2. Оценка ресурсов ПЛИС Altera серии Cyclone III EP3C5F256C6, требуемых для реализации последовательного КИХ-фильтра на четыре отвода с применением пакета расширения Altera DSP Builder системы Matlab/Simulink [3]

Логических элементов (Total logic elements)

Триггеров логических элементов (Dedicated logic registers)

Аппаратных умножителей с размерностью операндов 9×9 (Embedded Multiplier 9-bit elements)

Рабочая частота в наихудшем случае Fmax, МГц

30

29

1

258

Таблица 3. Оценка ресурсов ПЛИС Xilinx серии Spartan‑6 xa6slx4-3tqg144, требуемых для реализации последовательных КИХ-фильтров на четыре отвода c применением пакета расширения Xilinx System Generator системы Matlab/Simulink [2]

Ресурсы ПЛИС

n-tap MAC FIR filter

Dual Port Memory MAC FIR Filter

Рабочая частота, МГц

233

279

Число ЦОС-блоков DSP-48A

1

1

Триггеров

52

57

Секций с LUT

39

38

 

Выводы

Показаны проекты последовательных КИХ-фильтров на четыре отвода с применением различных инструментов проектирования САПР Quartus II, таких как цифровые автоматы, мегафункции, verilog-коды из описаний мегафункций, символьное и блочное представление функциональных блоков в графическом редакторе.

Рассмотрен проект КИХ-фильтров на умножителе (мегафункция LPM_MULT) и аккумуляторе (накапливающий сумматор на мегафункции LPM_ADD_SUB), работающих в асинхронных режимах, а также два проекта, когда умножитель и аккумулятор работают в синхронных режимах. В первом варианте умножитель и аккумулятор реализованы на мегафункциях LPM_MULT и ALTACCUMULATE. Во втором — умножитель и аккумулятор реализованы на одной мегафункции умножения и накопления ALTMULT_ACCUM. Наиболее экономичным и простым в реализации оказался проект с использованием мегафункции ALTMULT_ACCUM.

Несмотря на более упрощенный вариант структурной схемы реализации проектов, они уступают по частоте аналогичным фильтрам, разработанным по имитационным моделям с использованием пакетов расширения Altera DSP Builder и Xilinx System Generator и блочной памяти ПЛИС.

Литература
  1. AN 307: Altera Design Flow for Xilinx Users. Altera Corporation. November 2009.
  2. Строгонов А., Цыбин С., Городков П. Разработка КИХ-фильтров в системе Xilinx System Generator САПР ISE Design Suite // Компоненты и технологии. 2015. № 5.
  3. Строгонов А., Цыбин С., Городков П. Проектирование последовательных КИХ-фильтров в системе Xilinx System Generator с применением библиотеки Reference BlockSet/DSP Suite // Компоненты и технологии. 2015. № 6.
  4. Строгонов А., Цыбин С., Городков П. Проектирование последовательных КИХ-фильтров в системе визуально-имитационного моделирования Matlab/Simulink с использованием Altera DSP Builder // Компоненты и технологии. 2015. № 11.
  5. Тарасов И. Проектирование для ПЛИС Xilinx: системные аспекты и уровень регистровых передач // Компоненты и технологии. 2015. № 2.
  6. Строгонов А., Быстрицкий С. Проектирование параллельных КИХ-фильтров в базисе ПЛИС // Компоненты и технологии. 2013. № 6.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

live bedroom sex video pornview.org monalisa hot video full color hentai manga hentaicity.org kayle hentai 仙台 ニューハーフ javmobile.mobi 日常生活の着爆乳 美奈子編 xx video janwar indianpornmms.net xxxsexfilms なりすまし文系女子痴女ntr~sex狂の美少女が見た目を変えて清純好き男を寝取りまくった~ 麻里梨夏 javshare.info 咲坂あいり
نيك بكل الاوضاع xenival.com سكساوى عرب birpara college mecoporn.com marathi video sax نكت اختي pornovuku.info سكس عربى امهات sri lankan hot sex hdtubefucking.com hot sex vedio.com سكساحترافي gratisfucktube.com كايلاني لي
نيك دلع thogor.com رقص مع خلع الملابس نيك صور realpornmovies.net صورسكس نيك カリスマ読者モデル史上最悪の恥辱 愛波りりか javlibrary.pro 乙葉ののか 岬ななみ 動画 ero-video.mobi 中条カノン av اغتصاب بورنو arabianmotion.com نيك هند صبرى