Главная страница
Навигация по странице:

  • «Вычислительная и микропроцессорная техника» Курсовая работа на тему: «Синтез конечного автомата, работающего по принципу автомата Мили»

  • Выполнил

  • ЗАДАНИЕ

  • ВЫРАЖЕНИЯ ДЛЯ ВЫХОДОВ КЦУ

  • ((M(0))and(not(x)))

  • СТРУКТУРНАЯ СХЕМА КЦУ

  • ДИАГРАММА ПЕРЕХОДОВ

  • КП. Синтез конечного автомата, работающего по принципу автомата Мили


    Скачать 221.56 Kb.
    НазваниеСинтез конечного автомата, работающего по принципу автомата Мили
    Дата02.04.2018
    Размер221.56 Kb.
    Формат файлаdocx
    Имя файлаКП.docx
    ТипПрограмма
    #40091

    ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

    Федеральное государственное образовательное бюджетное учреждение

    высшего образования

    «Санкт-Петербургский государственный университет телекоммуникаций

    им. проф. М.А. Бонч-Бруевича»

    ___________________________________________________________________________

    Кафедра программной инженерии и вычислительной техники

    «Вычислительная и микропроцессорная техника»

    Курсовая работа на тему:
    «Синтез конечного автомата, работающего по принципу автомата Мили»
    № зачетной книжки 1504167


    Выполнил: студентка группы ИКТ-517

    Пугачёва А. А
    Принял Неелова О. Л
    Оценка: __________

    (подпись)

    Санкт-Петербург

    2017г

    Оглавление




    ЗАДАНИЕ 2

    ТАБЛИЦА ИСТИННОСТИ 3

    ВЫРАЖЕНИЯ ДЛЯ ВЫХОДОВ КЦУ 4

    ПРОГРАММА ДЛЯ ПРОВЕРКИ ПРАВИЛЬНОСТИ УРАВНЕНИЙ N0, N1, N2 6

    СТРУКТУРНАЯ СХЕМА КЦУ: 7

    ПРОГРАММА РАБОТЫ УСТРОЙСТВА 8

    ДИАГРАММА ПЕРЕХОДОВ 13

    ВРЕМЕННАЯ ДИАГРАММА 14










    ЗАДАНИЕ


    Вариант 67.

    Синтезировать конечный автомат, работающий по принципу автомата Мили. В синтез входит построение схемы КЦУ автомата, временные диаграммы его работы, программа на VHDL для реализации автомата на макете в FPGA CycloneV и диаграмма переходов автомата. Условие для “x=1” – равнозначность входных сигналов “a” и “b”.

    Таблица состояний 6

    x

    S0

    S1

    S2

    S3

    S4

    S5

    S6

    S7

    X=0

    6

    7

    0

    1

    2

    3

    4

    5

    X=1

    5

    4

    3

    2

    1

    0

    7

    6



    Таблица переходов 7

    x

    S0

    S1

    S2

    S3

    S4

    S5

    S6

    S7

    X=0

    S3

    S5

    S7

    S1

    S2

    S4

    S0

    S6

    X=1

    S4

    S5

    S6

    S7

    S1

    S2

    S3

    S0

    Структура автомата может быть представлена следующим образом :


    ТАБЛИЦА ИСТИННОСТИ


    По таблицам состояний и переходов, можно записать, что при x = 0 автомат будет совершать переходы:

    S0->S3 ->S1->S5->S4->S2->S7->S6->S0->… или

    6 -> 1 -> 7 -> 3 -> 2 -> 0 -> 5 -> 4 -> 6 ->… ,

    а при x = 1

    S0->S4->S1->S5->S2->S6->S3->S7->S0->… или

    5-> 1-> 4-> 0-> 3-> 7-> 2-> 6-> 5->…

    По этим данным запишем таблицу истинности для КЦУ автомата, именуя входы Si-1 - M[2..0], а выходы Si - N[2..0].

    M2

    M1

    M0

    x

    N2

    N1

    N0

    0

    0

    0

    0

    1

    1

    0

    0

    0

    0

    1

    1

    0

    1

    0

    0

    1

    0

    1

    1

    1

    0

    0

    1

    1

    1

    0

    0

    0

    1

    0

    0

    0

    0

    0

    0

    1

    0

    1

    0

    1

    1

    0

    1

    1

    0

    0

    0

    1

    0

    1

    1

    1

    0

    1

    0

    1

    0

    0

    0

    0

    1

    0

    1

    0

    0

    1

    0

    0

    1

    1

    0

    1

    0

    0

    1

    1

    1

    0

    1

    1

    0

    0

    0

    1

    1

    0

    0

    1

    0

    0

    1

    1

    0

    1

    1

    1

    1

    1

    1

    1

    0

    1

    0

    1

    1

    1

    1

    1

    1

    1

    0


    ВЫРАЖЕНИЯ ДЛЯ ВЫХОДОВ КЦУ


    Запишем выражения для выходов, используя карты Карно.

    Для N0:



    N0 = ((M(0))and(not(x))) or ((x)and(not(M(0))))

    Для N1:



    N1 = ((M(1))and(x)) or ((not(x))and(not(M(1))))

    Для N2:



    N2 = ((not(M(1)))and(not(M(2)))) or ((M(1))and(M(2)))

    ПРОГРАММА ДЛЯ ПРОВЕРКИ ПРАВИЛЬНОСТИ УРАВНЕНИЙ N0, N1, N2


    Текст программы:

    library ieee;

    use ieee.std_logic_1164.all;

    entity kkarno is
    port(x: in std_logic;

    M: in std_logic_vector(2 downto 0);

    N: out std_logic_vector(2 downto 0));

    end kkarno;
    architecture BBB of kkarno is

    begin
    process(M,x)

    begin
    N(0)<=((M(0))and(not(x)))or((x)and(not(M(0))));

    N(1)<=((M(1))and(x))or((not(x))and(not(M(1))));

    N(2)<=((not(M(1)))and(not(M(2))))or((M(1))and(M(2)));
    end process;

    end;

    СТРУКТУРНАЯ СХЕМА КЦУ:




    ПРОГРАММА РАБОТЫ УСТРОЙСТВА


    Программа работы устройства будет состоять из двух частей: программирования переходов в следующее состояние на момент подачи импульса синхронизации, и программирование соответствия состояния определенному числу (второе КЦУ).

    Текст программы:

    library ieee;

    use ieee.std_logic_1164.all;
    entity m is
    port

    (clk: in std_logic;

    a,b : in std_logic;

    start : in std_logic;

    ind : out std_logic_vector(6 downto 0));
    end entity;
    architecture rtl of m is
    type state_type is (s0, s1, s2, s3, s4, s5, s6, s7);
    signal state : state_type;

    signal input: std_logic;

    signal output: std_logic_vector(2 downto 0);
    begin

    input<=(a)xnor(b);
    process (clk, start)

    begin
    if start = '1' then

    state <= s0;
    elsif (rising_edge(clk)) then
    case state is

    when s0=>

    if input = '1' then

    state <= s4;

    else

    state <= s3;

    end if;

    when s1=>

    if input = '1' then

    state <= s5;

    else

    state <= s5;

    end if;

    when s2=>

    if input = '1' then

    state <= s6;

    else

    state <= s7;

    end if;

    when s3=>

    if input = '1' then

    state <= s7;

    else

    state <= s1;

    end if;

    when s4=>

    if input = '1' then

    state <= s1;

    else

    state <= s2;

    end if;

    when s5=>

    if input = '1' then

    state <= s2;

    else

    state <= s4;

    end if;

    when s6=>

    if input = '1' then

    state <= s3;

    else

    state <= s0;

    end if;

    when s7=>

    if input = '1' then

    state <= s0;

    else

    state <= s6;

    end if;

    end case;
    end if;

    end process;

    process (state, input)

    begin

    case state is

    when s0=>

    if input = '1' then

    output <= "101";

    else

    output <= "110";

    end if;

    when s1=>

    if input = '1' then

    output <= "100";

    else

    output <= "111";

    end if;

    when s2=>

    if input = '1' then

    output <= "011";

    else

    output <= "000";

    end if;

    when s3=>

    if input = '1' then

    output <= "010";

    else

    output <= "001";

    end if;

    when s4=>

    if input = '1' then

    output <= "001";

    else

    output <= "010";

    end if;

    when s5=>

    if input = '1' then

    output <= "000";

    else

    output <= "011";

    end if;

    when s6=>

    if input = '1' then

    output <= "111";

    else

    output <= "100";

    end if;

    when s7=>

    if input = '1' then

    output <= "110";

    else

    output <= "101";

    end if;

    end case;

    end process;

    process(output)

    begin

    case output is

    when "000"=>ind<="1000000";

    when "001"=>ind<="1111001";

    when "010"=>ind<="0100100";

    when "011"=>ind<="0110000";

    when "100"=>ind<="0011001";

    when "101"=>ind<="0010010";

    when "110"=>ind<="0000010";

    when "111"=>ind<="1111000";

    end case;

    end process;

    end rtl;

    ДИАГРАММА ПЕРЕХОДОВ



    ВРЕМЕННАЯ ДИАГРАММА




    написать администратору сайта