Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Altera / Lab_AT / Metod / Приложение 6

.doc
Скачиваний:
26
Добавлен:
10.12.2013
Размер:
26.62 Кб
Скачать

Приложение 6. Описание на AHDL устройства для работы

с динамическим семисегментным индикатором

TITLE "Dinamic Indicator Module";

SUBDESIGN d_ind7

(

clk: INPUT; -- тактовая частота 4 МГц

a1, b1, c1, d1, e1, f1, g1: INPUT;

a2, b2, c2, d2, e2, f2, g2: INPUT;

a3, b3, c3, d3, e3, f3, g3: INPUT;

en1, en2, en3: OUTPUT; -- На индикатор

a,b,c,d,e,f,g: OUTPUT; -- "0" - зажигает

)

VARIABLE

prescaler[8..0]: DFF;

Q1[7..1], Q2[7..1], Q3[7..1]: DFF;

qq[7..1]: DFF;

ww: MACHINE WITH STATES (WriteQ1, Idle1, WriteQ2, Idle2, WriteQ3, Idle3);

BEGIN

DEFAULTS

(en1, en2, en3) = b"111";

END DEFAULTS;

Q1[]= (a3, b3, c3, d3, e3, f3, g3);

Q2[]= (a2, b2, c2, d2, e2, f2, g2);

Q3[]= (a1, b1, c1, d1, e1, f1, g1);

prescaler[].clk= clk; -- делитель

prescaler[]= prescaler[]+ 1;

Q1[].clk= clk;

Q2[].clk= clk;

Q3[].clk= clk;

qq[].clk= clk;

ww.clk= clk;

--machine state

CASE WW IS

WHEN WriteQ1 =>

en1= gnd;

qq[]= Q1[];

if prescaler[] == 0 then

ww= Idle1;

else

ww= WriteQ1;

end if;

WHEN Idle1 =>

qq[]= Q2[];

ww= WriteQ2;

WHEN WriteQ2 =>

en2= gnd;

qq[]= Q2[];

if prescaler[] == 0 then

ww= Idle2;

else

ww= WriteQ2;

end if;

WHEN Idle2 =>

qq[]= Q3[];

ww= WriteQ3;

WHEN WriteQ3 =>

en3= gnd;

qq[]= Q3[];

if prescaler[] == 0 then

ww= Idle3;

else

ww= WriteQ3;

end if;

WHEN Idle3 =>

qq[]= Q1[];

ww= WriteQ1;

WHEN OTHERS =>

ww= Idle3;

END CASE;

(a, b, c, d, e, f, g) = !qq[];

END;

Соседние файлы в папке Metod