Фильтр низкой частоты на ПЛИС EPF10K20RC240-4 семейства FLEX10K фирмы Altera, страница 7

_mult_par3                         : umnoj WITH (koefficient = H"115");

_mult_par4                         : umnoj  WITH (koefficient = H"127");

--- Зададим сумматоры

_summat1                           : summ_dop;

_summat2                           : summ_dop;

_summat3                           : summ_dop;

_summat4                           : summ_osnov;

--- Зададим устройство формирования одиночноого импульса

_drebezg                                : drebezg;

---Зададим два 7-сегментных индикатора

_s7segment                        : 7segment;

_m7segment                       : 7segment;

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

_preobr                                   : preobr;

_dekoder                             : preobr;

--Зададим сдвигающий регистр 8-ми разрядный для 7отсчетов

_reg_sdvig                          : reg_sdvig WITH (width = 8, number =7);

--- Сдвигающий регистр 8-ми разрядный на 1 отсчет

_reg                                        : registr;

clk_en                                    : NODE;

BEGIN

                                            _drebezg.(PB2, PB1, clk) = (PB2, PB1, clk);

                                            clk_en = _drebezg.(ce);

--Зададим дополнительный выход для возможности просмотра импульсов запуска

    clk_e = _drebezg.(ce);

                                            _preobr.(vxod[], clk, reset, setn, clock_en) = (q[], clk, GND, VCC, clk_en);

                                            _reg_sdvig.(data[], clk, reset, setn, clock_en) =                                            (_preobr.vyxod[], clk, GND, VCC, clk_en);

--Присоединим к умножителю №1 и сумматору №1 управляющих входов,

--На вход сумматора поступают 0 и 6 отсчеты с выхода сдвигающего регистра,и далее

--сумма будет подаваться на умножитель.

                                            _summat1.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _mult_par1.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _summat1.(dataa[], datab[]) =   _reg_sdvig.(q[0][], q[6][]) ;

                                            _mult_par1.dataa[] = _summat1.(result[]) ;

--Выход для просмотра результатов после 1ого перемножителя:

data_1_mult[16..0] =_mult_par1.result[];         

--Присоединим к сумматору №2 и умножителю №2 управляющих входов,

--На вход сумматора поступают 1,5 отсчеты с выхода сдвигающего регистра,

--Результат подается на умножитель.

                                            _summat2.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _mult_par2.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _summat2.(dataa[], datab[]) = _reg_sdvig.(q[1][], q[5][] ) ;

                                            _mult_par2.dataa[] = _summat2.(result[]) ;

--Выход для просмотра результатов после ого перемножителя:

data_2_mult[16..0] =_mult_par2.result[];         

--Подключение к сумматору №3 и умножителю №3 управляющих входов,

--На вход сумматора поступают 2 и 4 отсчеты с выхода сдвигающего регистра,

--Сумма подается на умножитель.

                                            _summat3.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _mult_par3.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _summat3.(dataa[], datab[]) =  _reg_sdvig.(q[2][], q[4][]);

                                            _mult_par3.dataa[] = _summat3.(result[]) ;

--Выход для просмотра результатов после 3его перемножителя:

data_3_summ[8..0] =_summat3.(result[]);

data_3_mult[16..0] =_mult_par3.result[]; 

--Подключение к регистру и умножителю №4 управляющих входов,

--На вход умножителя поступает 3 отсчет,который дополнительно задержан регистром на один такт

                                            _reg.(dataa[], clk, reset, setn, clok_en) = (_reg_sdvig.(q[3][]), clk, GND, VCC, clk_en);

                                            _mult_par4.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _mult_par4.(dataa[]) =  (_reg.(result[7]), _reg.(result[])) ;

--Выход для просмотра результатов после 4ого перемножителя:

data_4_mult[16..0] =_mult_par4.result[];        

--Подключение к основному сумматору управляющих входов,

--На вход сумматора поступают отсчеты с выхода перемножителей,

                                            _summat4.(clk, reset, setn, clock_en) = ( clk, GND, VCC, clk_en);

                                            _summat4.(dataa[], datab[], datac[], datad[]) =  

((_mult_par1.result[]), (_mult_par2.result[]), (_mult_par3.result[]), (_mult_par4.result[]));

--16-9 разряды суммы поступают на преобразователь кода

                                            _dekoder.(vxod[], clk, reset, setn, clock_en) =                                            ((_summat4.result[17..10]), clk, GND, VCC, clk_en);

--Выходы для просмотра результатов после 4ого сумматора и dekodera

data_v[18..0] = _summat4.result[18..0];

vixoddek[7..0] = _summat4.result[17..10] ;

--Результат вычислений фильтра поступают на выход

                                            vixod[7..0] = (_dekoder.(vyxod[])) ;

--4 старших разряда после преобразователя поступают на индикатор

                                            _s7segment.i[] = (_dekoder.(vyxod[7..4])) ;

                                            (a_y, b_y, c_y, d_y, e_y, f_y, g_y) = !_s7segment.(a, b, c, d, e, f, g);

--4 младщих разряда после преобразователя поступают на индикатор

                                            _m7segment.i[] = (_dekoder.(vyxod[3..0])) ;

                                            (a_x, b_x, c_x, d_x, e_x, f_x, g_x) = !_m7segment.(a, b, c, d, e, f, g);

    END;