Presentation is loading. Please wait.

Presentation is loading. Please wait.

Коначни аутомати.

Similar presentations


Presentation on theme: "Коначни аутомати."— Presentation transcript:

1 Коначни аутомати

2 Коначни аутомат Апстрактан математички модел машине.
Машина има стања у којима може да се налази: увек се налази у тачно једном стању, дефинисано је почетно стање. Транзиција је прелаз из једног стања у друго: догађа се кад је неки услов испуњен

3 Коначни аутомат шема

4 Коначни аутомат имплементација
Имплементација стања помоћу флип-флопова Број могућих стања је 2 број флип-флопова

5 Moore vs Mealy Мурова мрежа:
Излаз мреже зависи само од тренутног стања Може захтевати већи број стања за исти проблем Синхрони излаз нископропусни филтар кашњење од једне периоде сигнала такта излаз је стабилан најмање једну периоду сигнала такта Милијева мрежа: Излаз мреже зависи и од тренутног стања и од улаза Може захтевати мањи број стања за исти проблем Асинхрони излаз пропушта сигнале високе фреквенције излаз је одмах на располагању излаз можда неће бити довољно дуго стабилан да буде употребљив

6 Напомене у вези Moore vs Mealy
Коначни аутомат може да се састоји од комбинације Мурове и Милијеве мреже: није погрешно, мора се водити рачуна о тајмингу. Милијева мрежа се може модификовати тако да даје излаз као Мурова мрежа.

7 Милијева мрежа

8 Процес имплементирања КА помоћу језика за опис хардвера
Кораци: Специфицирати функцију КА (неформално), Нацртати дијаграм стања, Направити симболичну таблицу прелаза, Доделити кодове за симболичке ознаке стања, Написати изворни код за опис на нивоу понашања.

9 Стил писања изворног кода за опис хардвера
Одвојити комбинациони део од дела за чување стања. Стања аутомата су експлицитно декларисана као елементи набројивог типа.

10 Чување стања Користити процес који генерише секвенцијалну мрежу.
process (reset, clock) is begin if (reset = ‘1’) then stanje_reg <= stanje0; elseif (clock’event and clock = ‘1’) then stanje_reg <= stanje_next; end if; end process;

11 Промена стања (1/2) Користити процес који генерише комбинациону мрежу.
process (ulaz, stanje_reg) is begin stanje_next <= stanje_reg; case stanje_reg is when state0 => if (ulaz = ...) then izlaz <= <vrednost>; stanje_next <= statex; else ... end if;

12 Промена стања (2/2) when state1 => if (ulaz = ...) then
izlaz <= <vrednost>; stanje_next <= statex; else ... end if; when state2 => ... end case; end process;

13 Када користити КА? За све што не може у једном такту да се уради.
Коначни аутомат служи за контролу: шта урадити у сваком такту, колико пута поновити неку радњу, мерење времена и чекање.

14 Пример – саобраћајни семафор
СТАЊЕ Мод операције Нормални Тест Грешка Време ЦЗ ЦЖ ЗЦ ЖЦ 30s 5s 45s 1s -- ЖЖ Неодређено Фреквенција сигнала такта износи 50Hz

15 Потпрограми VHDL разликује два типа потпрограма:
процедура (има бочни ефекат), функција (израчунава резултат).

16 Процедуре Могу се декларисати у декларативном делу:
procedure_specification ⇐ procedure identifier ⟦(parameter_interface_list)⟧ is ⦃ subprogram_declarative_item ⦄ begin ⦃ sequential_statement ⦄ end ⟦ procedure ⟧ ⟦ identifier ⟧; Могу се декларисати у декларативном делу: пакета (видљива где год се користи тај пакет), архитектуре (видљива свим процесима те архитектуре), процеса (видљива само том процесу), потпрограма (видљива само у том другом потпрограму).

17 Пример 1 procedure average_samples is variable total : real := 0.0; begin assert samples’length /= 0 severity failure; for index in samples’range loop total := total + samples(index); end loop; average := total / real(samples’length); end procedure average_samples;

18 Пример 2 (1/2) architecture rtl of control_processor is type func_code is (add, subtract); signal op1, op2, dest : integer; signal Z_flag : boolean; signal func : func_code; begin

19 Пример 2 (2/2) alu: process is procedure do_arith_op is variable result : integer; begin case func is when add => result := op1 + op2; when sub => result := op1 - op2; end case; dest <= result after Tpd; Z_flag <= result = 0 after Tpd; end procedure do_arith_op; begin do_arith_op; end process alu; ... end architecture rtl;

20 Параметри процедуре Подразумевани мод параметра је in
parameter_interface_list ⇐ ⦅ ⟦ constant | variable | signal ⟧ identifier ⦃,...⦄ : ⟦ mode ⟧ subtype_indication ⟦ := static_expression ⟧ ⦆ ⦃;...⦄ mode ⇐ in | out | inout ; Подразумевани мод параметра је in Подразумевана класа параметра у зависности од мода: constant, ако је мод параметра in, variable, ако је мод параметра out, variable, ако је мод параметра inout. Од VHDL-2008 дозвољено читање out параметара, али се добија последња уписана вредност у процедури или ако још није додељена вредност, добија се почетна вредност.

21 Параметри класе signal
Ако је мод параметра in: процедура добија референцу на сигнал, у случају да процедура садржи wait исказ, вредност сигнала се може променити. Ако је мод параметра out: процедура добија референцу на драјвер сигнала приликом доделе вредности параметру класе signal унутар процедуре, дефинишу се трансакције за прослеђени сигнал. Ако је мод параметра inout: прослеђују се и референца на сигнал и референца на драјвер

22 Позивање процедуре Везивање аргумената за параметре може се вршити:
procedure_call_statement ⇐ ⟦ procedure_call_label: ⟧ procedure_name ⟦ ( parameter_association_list ) ⟧; parameter_association_list ⇐ ⦅ ⟦ parameter_name => ⟧ expression | signal_name | variable_name | open ⦆ {,...} Везивање аргумената за параметре може се вршити: позиционо, према називу параметра.

23 Позивање процедуре Примери: procedure my_p ( f1 : in type1;
f3 : out type3; f4 : in type4 := val4 ) is begin sekvencijalni iskazi end procedure my_p; poziv1: my_p (val1, val2, val3, val4); poziv2: my_p (f1 => val1, f2 => val2, f4 => val4, f3 => val3); poziv3: my_p (val1, val2, f4 => open, f3 => val3); Ако се везивање врши по називу, аргументи се могу навести произвољним редом.

24 Конкурентни позив процедуре
concurrent_procedure_call_statement ⇐ ⟦ label: ⟧ procedure_name ⟦ ( parameter_association_list ) ⟧; Еквивалентно процесу који: садржи само секвенцијални позив те процедуре, у листи осетљивости садржи само сигнале који се приликом конкурентног позива прослеђују параметрима мода in и inout.

25 Конкурентни позив процедуре
Пример: -- konkurentni poziv procedure call_proc1: p(s1, s2, const_val) -- s1, s2 signals -- ekvivalentni poziv procedure u okviru procesa call_proc2: process(s1, s2) is begin p(s1, s2, const_val); end process call_proc2;

26 Функције Резултат pure функције зависи искључиво од параметара
function_specification ⇐ ⟦ pure | impure ⟧ function identifier ⟦(parameter_interface_list)⟧ return type_mark is ⦃ subprogram_declarative_item ⦄ begin ⦃ sequential_statement ⦄ end ⟦ function ⟧ ⟦ identifier ⟧; Резултат pure функције зависи искључиво од параметара за исте аргументе увек враћа исту вредност. Свака функција је подразумевано pure.

27 Параметри функција Иста правила као код процедура.
Додатна ограничења у односу на процедуре: мод свих параметара мора бити in. параметри функције не могу бити класе variable. Подразумевани мод параметра је in. Подразумевана класа мараметра је constant.

28 Пример function limit(value, min, max : integer) return integer is begin if value > max then return max; elsif value < min then return min; else return value; end if; end function limit;

29 Функција now Функција now враћа тренутно време. Пример:
hold_time_checker: process(clk, d) is variable last_clk_edge_time : time := 0 fs; begin if rising_edge(clk) then last_clk_edge_time := now; end if; if d'event then assert now - last_clk_edge_time >= Thold_d_clk report "hold time violation"; end process hold_time_checker;

30 Преклапање потпрограма
Више потпрограма истог назива али различитог броја и/или типа параметара. procedure inc(a : inout integer; n : in integer := 1) is ... procedure inc(a : inout bit_vector; n : in bit_vector := 1) is ... procedure inc(a : inout bit_vector; n : in integer := 1) is

31 Преклапање оператора function “+” (left, right : in bit_vector) return bit_vector is begin end function “+”; addr_reg := addr_reg + X”0000_0004”;

32 VHDL примери

33 Лоша пракса Лоша пракса: асинхрони ресет, блокирање сигнала такта,
генерисање изведеног сигнала такта.

34 Асинхрони ресет Пример (бројач по модулу): process(clk, async_clr) is
begin if async_clr = ‘1’ then cnt_reg <= (others => ‘0’); ... end process; async_clr <= ‘1’ when (reset = ‘1’ or cnt_reg = ‘1010’) else ‘0’;

35 Асинхрони ресет Проблеми: Решење: шум у транзицији са 1001 на 0000,
шум на линији async_clr, колики период за сигнал такта одабрати? Решење: асинхрони ресет радити само на спољашни сигнал, како би се систем довео у почетно стање, користити синхроно учитавање 0000.

36 Асинхрони ресет

37 Блокирање сигнала такта
Пример (користити and логичко коло за спречавање учитавања података у регистар): process(gate_clk, reset) is begin if (gate_clk’event and gate_clk = ‘1’) then cnt_reg <= cnt_next; ... end process; gate_clk <= clk and en;

38 Блокирање сигнала такта
Проблеми: ширина генерисаног сигнала може да буде недовољна, шум на сигналу en може да „окине“ регистар, мрежа за дистрибуцију сигнала такта се тешко прави. Решење: као сигнал такта треба користити само сигнал генерисан специјализованим хардвером, синхрони en сигнал.

39 Блокирање сигнала такта
process(clk, reset) is begin if (clk’event and clk = ‘1’) then cnt_reg <= cnt_next; ... end process; cnt_next <= cnt_reg + 1 when en = ‘1’ else cnt_reg;

40 Генерисање изведеног сигнала такта
Различите компоненте раде на различитим сигналима такта. Пример лоше употребе: коришћење изведеног сигнала за спорије компоненте.

41 Генерисање изведеног сигнала такта
Проблеми: прављење више мрежа за дистрибуцију сигнала такта, како извести временску анализу? Решење:

42 FIFO бафер Флексибилна комуникација између две компоненте.

43 FIFO бафер Имплементација помоћу кружног реда.

44 FIFO бафер Регистарски фајл + FIFO контролер.
Показивачи на почетак и крај. Коло за одређивање статуса.

45 FIFO бафер

46 Асоцијативни бафер Памћење података као парова: Претраживање по кључу.
кључ – податак Претраживање по кључу. Политика замене FIFO.

47 Множење са проточном обрадом
Критеријум за перформансе: кашњење, брзина генерисања резултата.

48 Множење са проточном обрадом

49 Множење са проточном обрадом


Download ppt "Коначни аутомати."

Similar presentations


Ads by Google