Помощь в написании студенческих работ
Антистрессовый сервис

Заключение. 
Цифровой фильтр высокой частоты

РефератПомощь в написанииУзнать стоимостьмоей работы

В результате курсового проектирования был получен цифровой фильтр высоких частот порядка M=3 с разрядностью коэффициентов числителя и знаменателя, равной 5. Фильтр был реализован на ПЛИС семейства FLEX10K фирмы ALTERA EPF10К20RC2404. Все пункты ТЗ выполняются. Неравномерность АЧХ составила 1,4 дБ (по ТЗ не более 1,5 дБ), затухание АЧХ — 29,7 дБ (по ТЗ требуется не менее 29 дБ). Входные данные… Читать ещё >

Заключение. Цифровой фильтр высокой частоты (реферат, курсовая, диплом, контрольная)

В результате курсового проектирования был получен цифровой фильтр высоких частот порядка M=3 с разрядностью коэффициентов числителя и знаменателя, равной 5. Фильтр был реализован на ПЛИС семейства FLEX10K фирмы ALTERA EPF10К20RC2404. Все пункты ТЗ выполняются. Неравномерность АЧХ составила 1,4 дБ (по ТЗ не более 1,5 дБ), затухание АЧХ — 29,7 дБ (по ТЗ требуется не менее 29 дБ). Входные данные согласно ТЗ — 8-разрядные — подаются в дополнительном коде, а выходные — 16-разрядные — в прямом коде. По частоте дискретизации имеется большой запас 22,17 МГц (по ТЗ как минимум 4,4 МГц). При минимальных затрачиваемых ресурсах. Количество использованных логических элементов равно 479, что составляет 41% от их общего количества. В итоге, спроектированный фильтр полностью соответствует требованиям ТЗ.

Список использованных источников

  • 1. Ссылка URL: http://www.altera.ru/cgi-bin/go?35#s31 June 1999, ver. 1.01, фирма Altera.
  • 2. А. Антонью. Цифровые фильтры: анализ и проектирование. Москва. Издательский дом «Радио и связь» 1983 г.
  • 3. В. Б. Стешенко. ПЛИС фирмы Altera: элементная база, система проектирования и языки описания аппаратуры. Москва. Издательский дом «Додэка-XXI» 2007 г.
  • 4. Угрюмов Е. П. Цифровая схемотехника. — СПб.: БХВ — Санкт-Петербург, 2000. — 528
  • 5. А. П. Антонов. Язык описания цифровых устройств Altera HDL. Москва 2001 г.

Приложение

Подключение модулей, использующихся для реализации фильтра.

INCLUDE «segment.inc» ;

INCLUDE «btn.inc» ;

INCLUDE «pkdk.inc» ;

INCLUDE «filtr.inc» ;

INCLUDE «reg.inc» ;

INCLUDE «dkabs.inc» ;

CONSTANT wx = 8; — Разрядность xn.

CONSTANT wy = 16; — Разрядность yn.

CONSTANT mydelay = 1;—1; — 8000.

CONSTANT myclock = 3000;—3000; —25 175.

Задание входов и выходов фильтра.

SUBDESIGN plis.

xn[wx-1.0], f_dis: INPUT;

clk: INPUT;

noreset: INPUT = VCC;

ha, hb, hc, hd, he, hf, hg, hh: OUTPUT;

la, lb, lc, ld, le, lf, lg: OUTPUT;

yn[wy-1.0]: OUTPUT;

mod_yn[wy-1.0]: OUTPUT;

sync: OUTPUT;

VARIABLE.

reset: NODE;

ce: NODE; — Одноразрядная шина для подачи сигнала разрешения тактовых импульсов.

pkdk__reg8[wx-1.0]: NODE;

reg8__filtr[wx-1.0]: NODE;

filtr__reg16[wy-1.0]: NODE;

BEGIN.

reset = !noreset;

—подключение преобразователя прямого кода.

pkdk__reg8[wx-1.0] = pkdk (xn[]) WITH (width = wx);

—подключение входного параллельного 8-разрядного регистра.

reg8__filtr[wx-1.0] = reg (pkdk__reg8[], clk, ce, reset) WITH (width = wx);

—Подключение фильтра.

filtr__reg16[wy-1.0] = filtr (reg8__filtr[], clk, ce, reset);

—Подключение выходного параллельного 16-разрядного регистра.

yn[wy-1.0] = reg (filtr__reg16[wy-1.0], clk, ce, reset) WITH (width = wy);

—Подключение преобразователей двоичного кода в семисегментный.

!(ha, hb, hc, hd, he, hf, hg) = segment (yn[7.4]);

!(la, lb, lc, ld, le, lf, lg) = segment (yn[3.0]);

—Подключение модуля.

mod_yn[wy-1.0] = dkabs (yn[]) WITH (width = wy);

—Подключение антидребезгового устройства%.

ce = btn (f_dis, clk) WITH (delay = mydelay, clock = myclock);

hh = tffe (VCC, clk, ce);

sync = dff (ce, clk,);

END;

Фильтр умножает входные восьмиразрядные и выходные шестнадцатиразрядные данные на постоянные коэффициенты фильтра с последующим суммированием. Синхронизация осуществляется управляющими сигналами тактовых импульсов clk, разрешения тактовых импульсов ce и сброса reset.

INCLUDE «lpm_mult.inc» ;

CONSTANT widthx = 8; —разрядность входных данных.

CONSTANT widthy = 16; —разрядность выходных данных.

CONSTANT ska1 = 4; —сдвиг коэффициента а1.

  • —CONSTANT wka2 = 5; —разрядность коэффициента ka2
  • —CONSTANT wka3 = 5; —разрядность коэффициента ka3
  • —CONSTANT wka4 = 4; —разрядность коэффициента ka4

CONSTANT maxwka = 5; —максимальная разрядность коэффициентов a знаменателя.

CONSTANT skb = 5; —сдвиг коэффициентов числителя для выравнивания произведений.

CONSTANT mkb = 2^skb; —множитель коэффициентов числителя b.

  • —CONSTANT wkb1 = 4 + skb; —разрядность коэффициента kb1
  • —CONSTANT wkb2 = 5 + skb; —разрядность коэффициента kb2
  • —CONSTANT wkb3 = 5 + skb; —разрядность коэффициента kb3
  • —CONSTANT wkb4 = 4 + skb; —разрядность коэффициента kb4

CONSTANT maxwkb = 5 + skb; —максимальная разрядность коэффициентов b числителя.

—CONSTANT ka1 = 16; —ska1 = 4; ka1 = 24.

CONSTANT ka2 = 14;

CONSTANT ka3 = 14;

CONSTANT ka4 = 4;

CONSTANT kb1 = 8*mkb;

CONSTANT kb2 = 13*mkb; — отрицательно.

CONSTANT kb3 = 13*mkb;

CONSTANT kb4 = 8*mkb; — отрицательно.

CONSTANT widthp = widthy + maxwka;

CONSTANT widths = widthp;

SUBDESIGN filtr.

datax[widthx-1.0]: INPUT;

clock: INPUT;

ce: INPUT = VCC;

reset: INPUT = GND;

datay[widthy-1.0]: OUTPUT;

—m_out[widthy-1.0]: OUTPUT;

VARIABLE.

blockx1: lpm_mult WITH.

LPM_WIDTHA = widthx,.

LPM_WIDTHB = maxwkb,.

LPM_WIDTHP = widthp — ska1,.

LPM_WIDTHS = widths,.

LPM_REPRESENTATION = «SIGNED» ,.

—LATENCY,.

LPM_PIPELINE = 0,.

INPUT_A_IS_CONSTANT = «NO» ,.

INPUT_B_IS_CONSTANT = «YES» ,.

USE_EAB = «OFF» ,.

MAXIMIZE_SPEED = 6.

blockx[4.2]: lpm_mult WITH.

LPM_WIDTHA = widthx,.

LPM_WIDTHB = maxwkb,.

LPM_WIDTHP = widthp,.

LPM_WIDTHS = widths,.

LPM_REPRESENTATION = «SIGNED» ,.

—LATENCY,.

LPM_PIPELINE = 0,.

INPUT_A_IS_CONSTANT = «NO» ,.

INPUT_B_IS_CONSTANT = «YES» ,.

USE_EAB = «OFF» ,.

MAXIMIZE_SPEED = 6.

);

blocky[4.2]: lpm_mult WITH.

(.

LPM_WIDTHA = widthy,.

LPM_WIDTHB = maxwka,.

LPM_WIDTHP = widthp,.

LPM_WIDTHS = widths,.

LPM_REPRESENTATION = «SIGNED» ,.

—LATENCY,.

LPM_PIPELINE = 1,.

INPUT_A_IS_CONSTANT = «NO» ,.

INPUT_B_IS_CONSTANT = «YES» ,.

USE_EAB = «OFF» ,.

MAXIMIZE_SPEED = 6.

);

BEGIN.

blocky[4.2]. (aclr, clock, clken) = (reset, clock, ce);

—секция 1.

datay[] = blockx1. result[widthy-1.0];

blockx1.dataa[] = datax[];

blockx1.datab[] = kb1;

blockx1.sum[] = blocky2. result[];

—секция 2.

blocky2.dataa[] = datay[];

blocky2.datab[] = -ka2;

blocky2.sum[] = blockx2. result[];

blockx2.dataa[] = datax[];

blockx2.datab[] = -kb2;

blockx2.sum[] = blocky3. result[];

—секция 3.

blocky3.dataa[] = datay[];

blocky3.datab[] = -ka3;

blocky3.sum[] = blockx3. result[];

blockx3.dataa[] = datax[];

blockx3.datab[] = kb3;

blockx3.sum[] = blocky4. result[];

—секция 4.

blocky4.dataa[] = datay[];

blocky4.datab[] = -ka4;

blocky4.sum[] = blockx4. result[];

blockx4.dataa[] = datax[];

blockx4.datab[] = -kb4;

  • —blockx4.sum[] = block5y. result[]; —вход sum[]не используется
  • —Модуль

IF datay[widthy-1] THEN.

m_out[] = !(datay[]-1);

ELSE.

m_out[] = datay[];

END IF;%.

END;

Преобразователь двоичного кода в код семисегментного индикатора.

SUBDESIGN segment.

i[3.0]: INPUT;—Входы семисегментного индикатора.

a, b, c, d, e, f, g: OUTPUT;—Выходы семисегментного индикатора.

).

BEGIN.

TABLE—Таблица состояний семисегментного индикатора.

i[3.0]=>a, b, c, d, e, f, g;

H" 0″ =>1, 1, 1, 1, 1, 1, 0;

H" 1″ =>0, 1, 1, 0, 0, 0, 0;

H" 2″ =>1, 1, 0, 1, 1, 0, 1;

H" 3″ =>1, 1, 1, 1, 0, 0, 1;

H" 4″ =>0, 1, 1, 0, 0, 1, 1;

H" 5″ =>1, 0, 1, 1, 0, 1, 1;

H" 6″ =>1, 0, 1, 1, 1, 1, 1;

H" 7″ =>1, 1, 1, 0, 0, 0, 0;

H" 8″ =>1, 1, 1, 1, 1, 1, 1;

H" 9″ =>1, 1, 1, 1, 0, 1, 1;

H" A" =>1, 1, 1, 0, 1, 1, 1;

H" B" =>0, 0, 1, 1, 1, 1, 1;

H" C" =>1, 0, 0, 1, 1, 1, 0;

H" D" =>0, 1, 1, 1, 1, 0, 1;

H" E" =>1, 0, 0, 1, 1, 1, 1;

H" F" =>1, 0, 0, 0, 1, 1, 1;

END TABLE;

END;

Антидребезговое устройство.

CONSTANT modul = (delay*clock) DIV 1000;

  • —ASSERT (modul>2)
  • — REPORT «произведение delay*clock должно быть
  • — больше 2000»
  • — SEVERITY ERROR;

CONSTANT width = LOG2(modul);

CONSTANT end_state = modul-1;

SUBDESIGN btn.

(btn: INPUT;

clk: INPUT;

out: OUTPUT;

).

VARIABLE.

tr[width-1.0]: dffe;

div_out: NODE;

astart: NODE;

BEGIN.

tr[]. (clk, ena) = (clk, astart);

astart = dff (VCC, !btn, div_out,);

IF tr[ ]. q < end_state THEN.

tr[ ]. d = tr[ ]. q + 1;

ELSE.

tr[]. d = 0;

END IF;

div_out = !dff ((tr[ ]. q == end_state), clk,); —Формирование импульса сброса.

out = dff (dff (VCC, astart, !out,), clk,); —Формирование выходного импульса.

END;

Параметризированный модуль дополнительного кода.

PARAMETERS.

(.

width = 8.

);

SUBDESIGN dkabs.

(.

data[width-1.0]: INPUT;—данные в дополнительном коде.

out[width-1.0]: OUTPUT;—данные в прямом коде.

).

begin.

if data[width-1] then out[] = (!data[width-1.0])+1;

else out[] = data[];

end if;

end;

Преобразователь прямого кода в дополнительный.

PARAMETERS.

(.

width = 8.

);

—CONSTANT width = 8;

SUBDESIGN pkdk.

(.

in[width-1.0]: INPUT;

out[width-1.0]: OUTPUT;

).

BEGIN.

IF in[width -1] THEN.

out[] = (in[width-1], !in[width -2.0])+1;

ELSE.

out[] = in[];

END IF;

END;

Параллельный регистр

data — входные данные с разрядностью width.

out — выходные данные с разрядностью width.

ce — вход разрешения работы.

reset — вход сброса Выполнил студент группы 9110.

Городничев А. В.

PARAMETERS.

(.

width= 8—Разрядность регистра (число триггеров в его составе).

);

SUBDESIGN reg.

(.

data[width-1.0], clk: INPUT;

ce: INPUT = VCC;

reset: INPUT = GND;

out[width-1.0]: OUTPUT;

).

VARIABLE.

tr[width-1.0]: dffe;—Регистр создаем на D-триггерах.

BEGIN.

tr[]. (clk, clrn, ena) = (clk, !reset, ce);—Присоединяем сигналы управления.

tr[]. d = data[];

out[] = tr[]. q;

END;

Показать весь текст
Заполнить форму текущей работой