Цифровой фильтр высокой частоты

 1)TDI – Вход тестовых данных.( Вход последовательной загрузки инструкций, программирующих и тестовых данных. Данные синхронизируются фронтом импульсов на выводе TCK.)

 2)TDO – Выход тестовых данных.( Последовательный выход инструкций, программирующих и тестовых данных. Данные синхронизируются спадом импульсов на выводе TCK. Если данные из микросхемы не поступают - вывод находится в третьем состоянии)

 3)TMS – Выбор режима тестирования (режим контроллера BST)( Вход управления режимом конечного автомата (контроллера) TAP. Конечный автомат синхронизируется фронтом сигнала на входе TCK. Поэтому состояние вывода TMS должно быть установлено перед фронтом сигнала TCK.)

 4)TCK – Тактовый вход контроллера BST(Тактовый синхровход схемы BST. Некоторые операции синхронизируются фронтом, а некоторые спадом сигнала на TCK.)

5) TRST– Вход прекращения тестирования (дополнительный)( Вход асинхронного сброса  схемы периферийного сканирования."0" на выводе – сбрасывает BST-схему периферийного сканирования. Вывод TRST является дополнительным в соответствии со стандартом IEEE STD. 1149.1.)[2]

(Какое отношение имеет выделенный материал к разделу??)

При разработке программы потребовалось написать  на языке AHDL следующие модули:

1)Преобразователь кода из прямого в дополнительный(Имя?):

Если старший бит входных данных равен нулю, то код не изменяется, если равен  единице,то все разряды кроме старшего инвертируются, а затем к младшему  прибавляется единица.

2)Антидребезговая схема(Имя?):

 На выходе триггера схемы (Где он? Привести схему! Неясно, как утраняется дребезг) по тактовому сигналу появляется единица, при появлении следующего тактового импульса на выходе сигнал устанавливается в ноль.В итоге на выходе получаем импульс длительностью в один такт, который поступает на входы СЕ блоков фильтра и который разрешает срабатывание тактового импульса. Кнопка антидребезга нужна для отладки на макете.

       3) основной блок схемы-фильтр(Имя?):

Входная 8-ми разрядная последовательность умножается на заданные коэффициенты числителя и складывается с произведением коэффициентов знаменателя, взятых с противоположным знаком, и последовательности 16-ти разрядных переменных. (Как формируется 16-разрядный код?? Как разрабатывался фильтр?)

 Составление фильтра состоит в соединении отдельных модулей, в данной работе используются 3 модуля. Они соединены один за другим.


                







               Рис.16 Структура mult_а           Рис.17 Структура mult_b                  Рис.18 Структура mult_c 

(На рисунки 16..18 нет ссылок, нет объяснений, что и зачем на них изображено и зачем они представлены?)

       

          4)Параллельные параметризированные регистры(Имя?) предназначенны для хранения    информации в течение периода частоты дискретизации

        5)Семисегментный индикатор(?!) (Имя?) отображает четырехразрядные данные.



(Содержание раздела не соответствует названию.)     

Определить, каким образом (как) реализовать операции (действия, блоки, модули), представленные на структурной схеме. Это можно сделать в виде:

·         Алгоритмов работы  и их описания . Привести описание алгоритма на языке AHDL с пояснениями;

·         Структурных схем и их описания. Привести описание структурной схемы на языке AHDL с пояснениями;

·         Фрагментов программ на языке AHDL и их описание.

При описании работы желательно привести временные диаграммы работы блока (модуля, операции, действия)

Определение быстродействия, импульсной и переходной характеристик  устройства

Проанализировав быстродействие(Каким образом??), получены следующие  данные:

-период тактовых импульсов-115.8 нс

-частота дискретизации-8.63 МГц

По заданию:

Частота дискретизации:                 2,8 МГц

Соответственно, получаем большой запас по частоте:

8.63-2.8=5.83 МГц.


Сравним значения отсчетов импульсной и переходной характеристик,полученных с помощью MAX+PLUS II, MATLAB и отладочного модуля. Это необходимо для проверки правильности работы всего устройства.


(Что представлено на рис.19?)      



Рис.19 Временные диаграммы


Matlab 6.5

MAX+plus II

(DEC)

MAX+plus II

(HEX)

MAX+plus II

(переведенные)

Отладочный

модуль

1

0,125

800

0320

0.125

20

2

-0,334

63398

F7A6

-0.334

A6

3

0,415

2658

0A62

0.4153

62

4

-0,244

63964

F9DC

-0.246

DC

5

-0,0488

65219

FEC3

-0.0491

C3

6

0,148

994

03B0

0.1553

B0

7

-0,0236

65390

FF6E

-0.024

6E

8

-0,0957

64919

FD97

-0.0965

97

9

0,0678

433

01B1

0.0676

B1

10

0,0302

191

00BF

0.0298

BF

11

-0,0607

65147

FE7B

-0.0615

7B

12

0,00998

66

0042

0.01

42

13

0,0362

231

00E7

0.0361

E7

14

-0,0242

65373

FF5D

-0.0254

5D

15

-0,0108

65461

FFB5

-0.011

B5

Таблица 4 Отсчеты импульсной характеристики


Matlab 6.5

MAX+plus II

(DEC)

MAX+plus II

(HEX)

MAX+plus II

(переведенные)

Отладочный

модуль

1

0,125

800

0320

0.125

20

2

-0,209

64198

FAC6

-0.20906

C6

3

0,206

1320

0528

0.20625

28

4

-0,0401

65285

FF05

-0.0397

05

5

-0,0882

64968

FDC8

-00875

C8

6

0,0588

375

0177

0.05859

77

7

0,0354

230

00E6

0.0359

E6

8

-0,0595

65149

FE7D

-0.0592

7D

9

0,00865

46

002E

0.0718

2E

10

0,0354

237

00ED

0.037

ED

11

-0,0235

65385

FF69

-0.02375

69

12

-0,0133

65451

FFAB

-0.0135

AB

13

0,0226

146

0092

0.0228

92

14

-0,00278

65519

FFEF

-0.00285

EF

15

-0,0141

65445

FFA5

-0.01425

A5

Таблица 5 Отсчеты переходной характеристики


Переведенные отсчеты получаем путем деления прямых десятичных значений(??), полученных из дополнительного кода) на 6400(так как масштабирующий коэффициент   26 =64 и амплитуда входного воздействия принята равной 100).

(Как получены отрицательные значения?) 

Заключение


В данной работе был спроектирован цифровой фильтр высокой частоты, удовлетворяющий всем требованиям технического задания. Проект занял на интегральной схеме 60% ресурсов или 694 логических ячеек. Были получены навыки программирования ПЛИС. Погрешность характеристик фильтра связана с округлением его коэффициентов. (??)

(Как выполнены требования ТЗ?)        


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

  1. Угрюмов Е.П. Цифровая схемотехника: Учебное пособие. Санкт-Петербург(?Издательство?) 2000 г.
  2. Конфигурирование ПЛИС Altera со статической памятью конфигурации. Р.А. Мяльк.           Санкт-Петербург (?Издательство?) 2003 г.
  3. Стешенко В.Б. Плис фирмы ALTERA: элементная база, система проектирования и    языки описания аппаратуры. М., ДОДЭКА-XXI, 2007 (2002).

4.      Антонов А.П.  Язык описания цифровых устройств Altera AHDL. :Практический курс. М., Радио Софт, 2001 г.


Приложение

%

   Курсовая работа по дисциплине:

   "Основы проектирования цифровых устройств на ПЛИС"

   На тему: "Цифровой фильтр высокой частоты"

   Выполнил: студент группы 5110

   Горюнов Д.Ю.

   Проверил: Соколов Ю.П.

%

include "filter.inc";

include "button.inc";

include "ppreg.inc";

include "pk_dk.inc";

include "7segment.inc";

 constant razx = 8;--Что означают приведенные константы?

 constant razy = 16;--Откуда они появились?

 constant razb = 4;

 constant raza = 8;

 

subdesign final

(

     data[razx-1..0],clk,knopka : input;

     reset : input = gnd;

     out[razy-1..0] : output;

     synhr,h : output;

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

     ha,hb,hc,hd,he,hf,hg : output;

     )

variable

     preobr_cod : pk_dk with (width = razx);

     h7seg,l7seg : 7segment;

     reg_in : ppreg with (width = razx);

     reg_out : ppreg with (width = razy);

     btn : button with ( delay = 1, clock = 3175); --8000 25175

     filtr_gor : filter with

         (

         wx = 8, --разрядность шины xn

     wy = 16, --разрядность шины yn—Откуда появились параметры??

     wc1 = 5, -- разрядность коэффициентов b

     wc2 = 7, -- разрядность коэффициентов a

     rs = 6, --расширение коэффициента b

     ws = 23, --разрядность шины sum

     wp = 23, --разрядность шины result

    b1 = 8, --коэффициент b1

     b2 = B"10010", --коэффициент b2

     b3 = 14, --коэффициент b3

     b4 = B"11000", --коэффициент b4

     a2 = B"1000101", --коэффициент a2

     a3 = B"1000111", --коэффициент a3

     a4 = B"1101110", --коэффициент a4

     wm = 6 –сдвиг—Что значит параметр?

         );--Значения параметров НЕ ПРИВЕДЕНО в пояснительной записке!!

     ce : node;

begin

     reg_in.(clk,reset)=(clk,!reset);

     reg_out.(clk,reset)=(clk,!reset);

     btn.clk = clk;

     filtr_gor.(clk,reset)=(clk,!reset);

     preobr_cod.in[] = data[];

     reg_in.data[] = preobr_cod.out[];

     filtr_gor.vxod[]=reg_in.out[];

     reg_out.data[]=filtr_gor.vixod[];

     out[]=reg_out.out[];

     l7seg.i[]=out[3..0];

     h7seg.i[]=out[7..4];

     (la,lb,lc,ld,le,lf,lg) = l7seg.(a,b,c,d,e,f,g);

     (ha,hb,hc,hd,he,hf,hg) = h7seg.(a,b,c,d,e,f,g);

     btn.btn = knopka;

     ce = btn.out;

     filtr_gor.ce = ce;

     reg_in.ce = ce;

     reg_out.ce = ce;

     synhr = ce;

     h = tffe(VCC,clk, , ,ce);

end;



%

     Фильтр

     Выполнил ст.гр.№ 5110                                                                

     Горюнов Д.Ю. 

%

include "mult_a1.inc";

include "mult_b.inc";

include "mult_c.inc";

PARAMETERS

(

     wx = 8, --разрядность шины xn

     wy = 16, --разрядность шины yn

     wc1 = 5, -- разрядность коэффициентов b

     wc2 = 7, -- разрядность коэффициентов a

     rs = 6, --расширение коэффициента b

     ws = 23, --разрядность шины sum

     wp = 23, --разрядность шины result

    b1 = 8, --коэффициент b1

     b2 = B"10010", --коэффициент b2

     b3 = 14, --коэффициент b3

     b4 = B"11000", --коэффициент b4

     a2 = B"1000101", --коэффициент a2

     a3 = B"1000111", --коэффициент a3

     a4 = B"1101110", --коэффициент a4

     wm = 6 --сдвиг

);

subdesign filter

(

 vxod[wx-1..0], clk : input;

 ce : input=vcc;

 reset : input=gnd;

 vixod[wy-1..0] : output;

)

variable

sec_up : mult_a1 with (widthx = wx, widthc = wc1+rs, widths = ws, widthp = wp, bn= b1*(2^rs));

sec_mid1 : mult_b with (widthx = wx, widthy = wy, widthc1 = wc1+rs, widthc2=wc2, widthp = wp, an = a2, bn = b2*(2^rs));

sec_mid2 : mult_b with (widthx = wx, widthy = wy, widthc1 = wc1+rs, widthc2=wc2, widthp = wp, an = a3, bn = b3*(2^rs));

sec_down : mult_c with (widthx = wx, widthy = wy, widthc1 = wc1+rs, widthc2=wc2, widthp = wp, an = a4, bn = b4*(2^rs));

V[wy-1..0] : node;

begin

 sec_mid1.(clock,clken,aclr) = (clk,ce,reset);

 sec_mid2.(clock,clken,aclr) = (clk,ce,reset);

 sec_down.(clock,clken,aclr) = (clk,ce,reset);


 sec_up.xn[]=vxod[];

 sec_mid1.xn[]=vxod[];

 sec_mid2.xn[]=vxod[];

 sec_down.xn[]=vxod[];


 V[] = sec_up.result[wm+wy-1..wm];


 sec_mid1.yn[]=V[];

 sec_mid2.yn[]=V[];

 sec_down.yn[]=V[];


 sec_up.sum[]=sec_mid1.result[];

 sec_mid1.sum[]=sec_mid2.result[];

 sec_mid2.sum[]=sec_down.result[];


 vixod[]=V[];

end;



%

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

     Выполнил ст.гр.№ 5110                                                                

     Горюнов Д.Ю. 

%

parameters

(

     width=8

);

subdesign pk_dk

(

     in[width-1..0] : input;

     out[width-1..0] : output;

)

variable

     sign : node;

begin

     sign = in[width-1] ;

     if sign then out[] = (sign,!in[width-2..0])+1;

     else out[] = in[];

     end if;

end;



%

     Параллельный параметризированный регистр

     Выполнил ст.гр.№ 5110                                                               

     Горюнов Д.Ю. 

%

PARAMETERS

(

     width=8

);

SUBDESIGN ppreg

(

     data[width-1..0],clk : input;

     ce : input = vcc;

     reset : input = gnd;

     out[width-1..0] : output;

)

variable

 out[width-1..0] : dffe;

begin

 out[].(clk,clrn,ena)=(clk,!reset,ce);

 out[] = data[];

end;





%

     Антидребезг

     Выполнил ст.гр.№ 5110                                                               

     Горюнов Д.Ю.                                                                         

%


PARAMETERS

(

     delay = 1 --величина задежки в микросекундах 

     , clock = 5175 -- тактовая частота в килогерцах

);

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 button

(

     btn      : INPUT;

     clk      : INPUT;

     out : OUTPUT;

)

VARIABLE

div_out : NODE; 

astart : NODE;

tr[width-1..0]     : dffe;


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;




%

     Модуль преобразования данных для представления на                    семисегментном индикаторе

     Взят из раздаточного материала

%

%   -a-                                   %

% f|   |b                                 %

%   -g-                                   %

% e|   |c                                 %

%   -d-                                   %

%                                              %

% 0 1 2 3 4 5 6 7 8 9 A b C d E F     %

%                                              %


SUBDESIGN 7segment

(

     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;




%

     модуль mult_a1

     Взят из раздаточного материала

%

INCLUDE "lpm_mult.inc";

PARAMETERS

(    widthx = 8,  --число разрядов шины xn[]

     widthc = 10, --число разрядов коэффициентов

     widths = 18, --число разрядов шины sum[]

     widthp = 18, --число разрядов шины result[]

     bn = 100       --коэффициент bn числителя

);

SUBDESIGN mult_a1

(    xn[widthx-1..0]        : INPUT;

     sum[widths-1..0]     : INPUT;

     result[widthp-1..0]   : OUTPUT;

)

VARIABLE     

mult_x : lpm_mult WITH (

     LPM_WIDTHA = widthx,

     LPM_WIDTHB = widthc,

     LPM_WIDTHP = widthp,

     LPM_WIDTHS = widths,

     INPUT_B_IS_CONSTANT = "YES",

     LPM_REPRESENTATION = "SIGNED",

     USE_EAB = "OFF",

     --LPM_PIPELINE = 1,

     MAXIMIZE_SPEED = 6 );

BEGIN   

     mult_x.dataa[] = xn[];

     mult_x.datab[] = bn;

     mult_x.sum[] = sum[];  

     result[] = mult_x.result[];

END;




%

     Модуль mult_b

     Взят из раздаточного материала

%

INCLUDE "lpm_mult.inc";

PARAMETERS

(

     widthx = 8,  --число разрядов шины xn[]

     widthy = 8,  --число разрядов шины yn[]

     widthc1 = 10, --число разрядов коэффициентов b

     widthc2 = 10, --число разрядов коэффициентов а

     widthp = 18, --число разрядов шины result[]

     an = 100, --коэффициент -an знаменателя (отрицательный - hex)

     bn = 100 --коэффициент bn числителя

);


CONSTANT widths= widthp;


SUBDESIGN mult_b

(

     xn[widthx-1..0]    : INPUT;

     yn[widthy-1..0]    : INPUT;

     sum[widths-1..0] : INPUT;

     clock              : INPUT;

     clken              : INPUT = VCC;

     aclr          : INPUT = GND;

     result[widthp-1..0]     : OUTPUT;

)


VARIABLE


         mult_x : lpm_mult WITH (

              LPM_WIDTHA = widthx,

              LPM_WIDTHB = widthc1,

              LPM_WIDTHP = widthp,

              LPM_WIDTHS = widths,

              INPUT_B_IS_CONSTANT = "YES",

              LPM_REPRESENTATION = "SIGNED",

              USE_EAB = "OFF",

              LPM_PIPELINE = 1,

              MAXIMIZE_SPEED = 6

              );

         mult_y : lpm_mult WITH (

              LPM_WIDTHA = widthy,

              LPM_WIDTHB = widthc2,

              LPM_WIDTHP = widthp,

              LPM_WIDTHS = widths,

              INPUT_B_IS_CONSTANT = "YES",

              LPM_REPRESENTATION = "SIGNED",

              USE_EAB = "OFF",

              --LPM_PIPELINE = 1,

              MAXIMIZE_SPEED = 6

              );

BEGIN

     mult_x.(clock, clken, aclr) = (clock, clken, aclr);

     mult_x.dataa[] = xn[];

     mult_x.datab[] = bn;

     mult_x.sum[] = mult_y.result[];

     result[] = mult_x.result[];


     mult_y.dataa[] = yn[];

     mult_y.datab[] = an; 

     mult_y.sum[] = sum[];


END;





%

     Модуль mult_c

     Взят из раздаточного материала

%

INCLUDE "lpm_mult.inc";

PARAMETERS

(

     widthx = 8,  --число разрядов шины xn[]

     widthy = 8,  --число разрядов шины yn[]

     widthc1 = 10, --число разрядов коэффициентов b

    widthc2 = 10, --число разрядов коэффициентов a

     widthp = 18, --число разрядов шины result[]

     an = 100, --коэффициент an знаменателя

     bn = 100 --коэффициент bn числителя

);


CONSTANT widths= widthp;


SUBDESIGN mult_c

(

     xn[widthx-1..0]    : INPUT;

     yn[widthy-1..0]    : INPUT;

     --sum[widths-1..0] : INPUT;

     result[widthp-1..0]     : OUTPUT;

     clock    : INPUT;

     clken    : INPUT = VCC;

     aclr : INPUT = GND;


)


VARIABLE


         mult_x : lpm_mult WITH (

              LPM_WIDTHA = widthx,

              LPM_WIDTHB = widthc1,

              LPM_WIDTHP = widthp,

              LPM_WIDTHS = widths,

              INPUT_B_IS_CONSTANT = "YES",

              LPM_REPRESENTATION = "SIGNED",

              USE_EAB = "OFF",

              LPM_PIPELINE = 1,

              MAXIMIZE_SPEED = 6

              );

         mult_y : lpm_mult WITH (

              LPM_WIDTHA = widthy,

              LPM_WIDTHB = widthc2,

              LPM_WIDTHP = widthp,

              LPM_WIDTHS = widths,

              INPUT_B_IS_CONSTANT = "YES",

              LPM_REPRESENTATION = "SIGNED",

              USE_EAB = "OFF",

              --LPM_PIPELINE = 1,

              MAXIMIZE_SPEED = 6

              );

BEGIN

     mult_x.(clock, clken, aclr) = (clock, clken, aclr);

     mult_x.dataa[] = xn[];

     mult_x.datab[] = bn;

     mult_x.sum[] = mult_y.result[];

     result[] = mult_x.result[];


     mult_y.dataa[] = yn[];

     mult_y.datab[] = an;


END;









Страницы: 1, 2



Реклама
В соцсетях
бесплатно скачать рефераты бесплатно скачать рефераты бесплатно скачать рефераты бесплатно скачать рефераты бесплатно скачать рефераты бесплатно скачать рефераты бесплатно скачать рефераты