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

  • 1.5 Тестовое окружение и результаты верификации

  • Рисунок 1.2 — Результат верификации 1.6 Вывод

  • 2 Проектирование модели конечного автомата 2.1 Постановка задачи

  • Рисунок 2.1 — Интерфейс автомата 2.2 Описание автомата

  • курс. курсач_борон_даня. Содержание х1Х0 13 Х3Х2 13 00 13 01 13


    Скачать 1.9 Mb.
    НазваниеСодержание х1Х0 13 Х3Х2 13 00 13 01 13
    Дата16.11.2022
    Размер1.9 Mb.
    Формат файлаdocx
    Имя файлакурсач_борон_даня.docx
    ТипДокументы
    #791937
    страница2 из 6
    1   2   3   4   5   6


    Рисунок 1.1 — Модель МДНФ (DNF.sch)

    Затем нужно было спроектировать модель на поведенческом уровне. Для этого использовался оператор выбора “case”, где, в зависимости от значения входа, присваивалось соответствующее значение выходу. Конечная реализация данного модуля представлена в Листинге 1.1.

    Листинг 1.1 — Поведенческая модель (BEH.v)

    module LR1_BEH(

    input [3:0] x,

    output reg[3:0] y

    );
    always@(x)

    case(x)

    4'h0 : Y <= 4'hD;

    4'h1 : Y <= 4'hC;

    4'h2 : Y <= 4'h8;

    4'h3 : Y <= 4'hD;

    4'h4 : Y <= 4'h4;

    4'h5 : Y <= 4'h9;

    4'h6 : Y <= 4'hA;

    4'h7 : Y <= 4'hE;

    4'h8 : Y <= 4'hF;

    4'h9 : Y <= 4'hD;

    4'hA : Y <= 4'h2;

    4'hB : Y <= 4'hD;

    4'hC : Y <= 4'hA;

    4'hD : Y <= 4'hE;

    4'hE : Y <= 4'hE;

    4'hF : Y <= 4'hA; default:y<=4'h0;

    endcase

    endmodule

    Далее — построение на вентильном уровне, на языке описания аппаратуры Verilog. Это можно сделать с помощью оператора “assign”, который производит непрерывное присвоение. Для этого первым операндом записывался выход, а вторым — соответствующая ему МКНФ функция. Итоговый код модуля представлен в Листинге 1.2.

    Листинг 1.2 — Модель МКНФ (KNF.v)

    module LR1_KNF(

    input [3:0] x,output [3:0] y);

    assign Y[3] =(

    X[3] | X[2] | X[1] | X[0]) & (X[3] | X[2] | X[1] | X[0]);

    assign Y[2] =(X[3] | X[1] | X[0]) & (X[2] | X[1] | X[0]) & (X[3] | X[2] | X[1] | X[0]) & ( X[3] | X[2] | X[1] | X[0]);

    assign Y[1] =(X[3] | X[2]) & (X[3] | X[1]) & (X[2] | X[0]);

    assign Y[0] =(X[3] | X[2]) & (X[2] | X[1]) & (X[2] | X[0]) & (X[1] |X[0]) & (X[3] | X[2] | X[1] | X[0]);

    endmodule

    Все три спроектированные модели были объединены в главном модуле для более простой и наглядной верификации в симуляторе, который представлен в Листинге 1.3.
    Листинг 1.3 — Модуль верхнего уровня (LR1_TOP.v)

    module LR1_TOP(

    input [11:0] SW,

    output [11:0] LED

    );

    DNF FB1(

    .x3(SW[3]),

    .x2(SW[2]),

    .x1(SW[1]),

    .x0(SW[0]),

    .y3(LED[3]),

    .y2(LED[2]),

    .y1(LED[1]),

    .y0(LED[0])

    );

    KNF FB2(

    .x(SW[7:4]),

    .y(LED[7:4])

    );

    BEH FB3(

    .x(SW[11:8]),

    .y(LED[11:8])

    );

    endmodule

    Всем моделям подаётся одно значение на вход, и каждая модель возвращает своё выходное значение.

    1.5 Тестовое окружение и результаты верификации

    Тестовое окружение, реализованное для верификации, предназначено для проверки правильности моделей модуля верхнего уровня (Листинг 1.4). Переменная “SW” (входное значение) изменяется каждые 100 наносекунд по порядку от 0 до F (в шестнадцатеричной системе счисления).


    Листинг 1.4 — Тестовое окружение (LR1_Test.v)

    module LR1_Test;

    // Inputs

    reg [11:0] SW;
    // Outputs

    wire [11:0] LED;
    Продолжение Листинга 1.4

    LR1_TOP uut (

    .SW(SW),

    .LED(LED)

    );
    initial begin

    // Initialize Inputs

    SW = 12'h000;
    // Wait 100 ns for global reset to finish

    #100;

    // Add stimulus here

    SW = 12'h111;

    #100;

    SW = 12'h222;

    #100;

    SW = 12'h333;

    #100;

    SW = 12'h444;

    #100;

    SW = 12'h555;

    #100;

    SW = 12'h666;

    #100;

    SW = 12'h777;

    #100;

    SW = 12'h888;

    #100;

    SW = 12'h999;

    #100;

    SW = 12'hAAA;

    #100;

    SW = 12'hBBB;

    #100;

    SW = 12'hCCC;

    #100;

    SW = 12'hDDD;

    #100;

    SW = 12'hEEE;

    #100;

    SW = 12'hFFF;

    #100;

    end

    endmodule

    После написания тестового окружения нужно было запустить симуляцию и посмотреть на результаты временной диаграммы. Если все модули написаны правильно, то в переменной “SW” должны отображаться цифры от 1 до F, а в “LED” — персональный вариант.

    На временной диаграмме показан результат верификации в виде симуляции (Рисунок 1.2). Выходные значения всех моделей совпадают и соответствуют таблице истинности. Следовательно, модели спроектированы верно.



    Рисунок 1.2 — Результат верификации

    1.6 Вывод

    В этой части работы были спроектированы синтезируемые модели комбинационной логической схемы на вентильном и поведенческом уровне тремя различными способами. Для проверки корректной работы моделей было реализовано тестовое окружение на языке Verilog. Были освоены основы проектирования и верификации комбинационных логических схем средствами САПР Xilinx ISE.

    2 Проектирование модели конечного автомата

    2.1 Постановка задачи

    Требовалось описать конечный автомат, представляющий собой генератор фиксированной последовательности логических сигналов, в виде синтезируемой модели на языке Verilog HDL. Автомат должен иметь интерфейс, представленный на Рисунке 2.1.



    Рисунок 2.1 — Интерфейс автомата

    2.2 Описание автомата

    Автомат является синхронным цифровым узлом, срабатывающим по восходящим фронтам синхросигнала CLK. Исключение составляет асинхронный вход сброса RST, принудительно устанавливающий регистр автомата в исходное состояние.

    Автомат должен правильно реагировать на входные воздействия согласно Таблице 2.1.

    Таблица 2.1 – Таблица функционирования автомата

    RST

    CLK

    LOAD

    CE

    UP

    Действие

    1

    X

    X

    X

    X

    Асинхронный сброс SEQ <= Func(4'h0)


    Продолжение Таблицы 2.1

    0




    1

    X

    X

    Загрузка

    SEQ <= Func(DAT_I)

    0




    0

    1

    0

    Обратная генерация SEQ <= Func(i-1)

    0




    0

    1

    1

    Прямая генерация

    SEQ <= Func(i+1)

    0




    0

    0

    X

    Хранение SEQ <= SEQ

    Последовательность генерируемых сигналов определяется функцией Func(i), где i – 4-разрядный двоичный индекс, представляющий собой номер элемента последовательности. Инкремент индекса соответствует прямой генерации последовательности. Декремент индекса соответствует обратной генерации последовательности.

    Последовательность определяется, исходя из Таблицы 1.1, следующим образом: индекс-i задан входными комбинациями от F до 0 в верхней строке таблицы, а выходные комбинации Func(i), формируемые на выходах SEQ[3:0], заданы второй строкой таблицы. Таблица состояний и выходных значений автомата совпадает с таблицей истинности, представленной в Таблице 1.2.

    Переходы автомата при прямой и обратной генерациях представлены в Таблицах 2.2 и 2.3 соответственно.

    Таблица 2.2 – Переходы автомата при прямой генерации

    HEX

    X30

    X20

    X10

    X00

    HEX

    X31

    X21

    X11

    X01

    0

    0

    0

    0

    0

    1

    0

    0

    0

    1

    1

    0

    0

    0

    1

    2

    0

    0

    1

    0

    2

    0

    0

    1

    0

    3

    0

    0

    1

    1

    3

    0

    0

    1

    1

    4

    0

    1

    0

    0

    4

    0

    1

    0

    0

    5

    0

    1

    0

    1

    5

    0

    1

    0

    1

    6

    0

    1

    1

    0

    6

    0

    1

    1

    0

    7

    0

    1

    1

    1



    Продолжение Таблицы 2.2

    7

    0

    1

    1

    1

    8

    1

    0

    0

    0

    8

    1

    0

    0

    0

    9

    1

    0

    0

    1

    9

    1

    0

    0

    1

    A

    1

    0

    1

    0

    A

    1

    0

    1

    0

    B

    1

    0

    1

    1

    B

    1

    0

    1

    1

    C

    1

    1

    0

    0

    C

    1

    1

    0

    0

    D

    1

    1

    0

    1

    D

    1

    1

    0

    1

    E

    1

    1

    1

    0

    E

    1

    1

    1

    0

    F

    1

    1

    1

    1

    F

    1

    1

    1

    1

    0

    0

    0

    0

    0

    Таблица 2.1 — Переходы автомата при обратной генерации

    HEX

    X3

    X2

    X1

    X0

    HEX

    Y3

    Y2

    Y1

    Y0

    0

    0

    0

    0

    0

    D

    1

    1

    0

    1

    1

    0

    0

    0

    1

    C

    1

    1

    0

    0

    2

    0

    0

    1

    0

    8

    1

    0

    0

    0

    3

    0

    0

    1

    1

    D

    1

    1

    0

    1

    4

    0

    1

    0

    0

    4

    0

    1

    0

    0

    5

    0

    1

    0

    1

    9

    1

    0

    0

    1

    6

    0

    1

    1

    0

    A

    1

    0

    1

    0

    7

    0

    1

    1

    1

    E

    1

    1

    1

    0

    8

    1

    0

    0

    0

    F

    1

    1

    1

    1

    9

    1

    0

    0

    1

    D

    1

    1

    0

    1

    A

    1

    0

    1

    0

    2

    0

    0

    1

    0

    B

    1

    0

    1

    1

    D

    1

    1

    0

    1

    C

    1

    1

    0

    0

    A

    1

    0

    1

    0

    D

    1

    1

    0

    1

    E

    1

    1

    1

    0

    E

    1

    1

    1

    0

    E

    1

    1

    1

    0

    F

    1

    1

    1

    1

    A

    1

    0

    1

    0

    Также, нужно было сгенерировать RTL-модель, описывающую автомат. В ходе выполнения работы были сгенерированы 2 модели. Первая — общая, показывающая только входы и выходы модуля верхнего уровня. Вторая же более развёрнута, так как показывает соединения между отдельными модулями проекта. Сгенерированные модели представлены на Рисунках 2.2 и 2.3 соответственно.


    1   2   3   4   5   6


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