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

  • программа>

  • Уровни описания описания


    Скачать 210.79 Kb.
    НазваниеУровни описания описания
    АнкорVHDL lection.pdf
    Дата30.09.2018
    Размер210.79 Kb.
    Формат файлаpdf
    Имя файлаVHDL lection.pdf
    ТипДокументы
    #25275

    Основы
    Основы
    VHDL
    VHDL
    вторник вторник
    , 24
    , 24 ноября ноября
    2009 2009 г
    г

    Уровни
    Уровни описания описания
    РЭА
    РЭА
    системный уровень уровень вычислительных процессов функционально-логический уровень схемотехнический уровень компонентный уровень

    Функционально
    Функционально
    -
    - логический логический уровень уровень подуровень функционирования ЭВМ
    подуровень устройств (узлов) ЭВМ
    регистровый подуровень вентильный уровень

    Требования
    Требования к
    к
    HDL
    HDL
    стандартность;
    многоаспектность и иерархичность;
    пригодность для восприятия человеком и обработки на ЭВМ.

    Аспекты
    Аспекты описания описания
    РЭА
    РЭА
    функциональный (реализуемая функция, алгоритм)
    временной (задержки, время отклика)
    структурный (типы и связи компонент)
    ресурсный (число вентилей, площадь кристалла)
    надёжностный (время наработки на отказ)
    конструктивный (вес, габариты)
    стоимостной и т.д.

    Степень
    Степень детализации детализации аспектов аспектов
    Поведение
    Команды
    Алгоритмы устройств
    Микрооперации
    Булевы функции
    Фронты сигналов
    Микротакты
    Время
    Структура
    Такты
    П
    ер ек л
    ю ч
    ат ел и
    В
    ен ти л
    и
    М
    и к
    р о
    сх ем ы
    Р
    ег и
    ст р
    ы
    Б
    аз о
    в ы
    е у
    зл ы
    У
    ст р
    о й
    ст в
    а
    Э
    В
    М
    и
    В
    С

    HDL
    HDL как как язык язык программирования программирования
    Компоненты VHDL
    Проблемно-ориентированный компонент
    Общеалгоритмический компонент
    Последовательные операторы
    Типы данных
    Типы данных
    Целые
    Действительные
    Записи
    Массивы, строки
    Символьные
    Перечислимые
    Агрегаты
    Присваивание
    Выбор
    Условие
    Повторение
    Вызов подпрограмм
    Структурное описание
    Описание поведения во времени
    Физические
    Логические
    Ограниченные
    Подтипы
    Категория signal
    Представление задержек
    Представление параллельных процессов
    Структурное архитектурное тело
    Описание вхождений
    Описание конфигураций
    Параметры настройки
    Оператор условной генерации
    Параллельные операторы
    Оператор process
    Охраняемые блоки и выражения
    Операторы ожидания событий

    VHDL
    VHDL
    Языки
    Языки описания описания аппаратуры аппаратуры
    (
    (
    Hardware Description Language
    Hardware Description Language
    ,
    ,
    HDL)
    HDL)
    позволяют описывать блоки в первую очередь на функционально- логическом уровне, наибольшее распространение имеют на регистровом и вентильном подуровнях и при описании узлов ЭВМ. Проекты на языках HDL могут быть использованы и для решения задач системного уровня проектирования. Кроме того, специальные расширения, например, VHDL-AMS могут рассматриваться как промежуточный подуровень описания между вентильным подуровнем функционально- логического уровня и схемотехническим уровнем, что даёт возможность моделировать не только цифровую, но и аналоговую аппаратуру.
    Язык
    VHDL
    VHDL
    (
    Very high speed integrated circuit Hardware Description
    Very high speed integrated circuit Hardware Description
    Language
    Language
    — язык описания сверхскоростных БИС) был разработан международной группой по заданию Министерства обороны США в начале 80-х годов с целью обеспечения единообразного понимания подсистем различными проектными группами.

    Структура
    Структура проекта проекта
    Проект в системе проектирования на основе VHDL представляется совокупностью иерархически связанных текстовых фрагментов, называемых проектными модулями
    . Различают первичные и вторичные проектные модули, при этом:
    <
    первичный модуль
    >::=
    <
    декларация сущности
    >
    | <
    декларация пакета
    >
    | <
    декларация конфигурации
    >
    <
    Вторичный модуль
    >::=
    <
    архитектурное тело
    >
    | <
    тело пакета
    >

    Сущности
    Сущности и
    и архитектуры архитектуры
    Декларация сущности сущности
    (entity) определяет имя проекта и его интерфейс, т.е. порты и параметры настройки.
    Архитектурное
    Архитектурное тело тело сущности описывает тем или иным образом функционирование устройства и (или) его структуру.
    Каждой сущности сопоставляется одно или несколько архитектурных тел. Несколько вторичных модулей, соответствующих одному первичному, составляют набор возможных альтернативных реализаций объекта, представленного первичным модулем.
    Например, одной сущности может соответствовать несколько архитектурных тел, отличающихся степенью детализации описания и даже алгоритмом преобразования данных.

    Структура
    Структура программы программы

    программа
    >::= {
    {<
    объявление библиотеки
    >}
    {<
    объявление использования
    >}
    <
    первичный модуль
    >
    }
    {<
    вторичный модуль
    >}
    <
    объявление библиотеки
    >::= library <
    имя библиотеки
    >;
    <
    объявление использования
    >::= use <
    имя библиотеки
    >.<
    имя пакета
    >.<
    имя модуля
    >;
    Например:
    Library IEEE;
    Use IEEE.std_logic_1164.all;

    Декларации
    Декларации сущностей сущностей
    <
    Декларация сущности
    >::= entity <
    имя проекта
    > is
    [<
    объявление параметров настройки
    >]
    [<
    объявление портов
    >]
    [<
    раздел деклараций
    >]
    [begin <
    раздел опреаторов
    >] end [entity] <
    имя проекта
    >;
    <
    объявление параметров настройки
    >::= generic (<
    имя
    >:<
    тип
    > [:=<
    выражение
    >]
    {;<
    имя
    >:<
    тип
    > [:=<
    выражение
    >]});
    <
    объявление портов
    >::= port (<
    имя
    >:<
    режим
    > <
    тип
    > [:=<
    выражение
    >]
    {;<
    имя
    >:<
    режим
    > <
    тип
    > [:=<
    выражение
    >]};
    <
    режим
    >::= in | out | inout

    Архитектурные тела
    <
    Архитектурное тело
    >::= architecture <
    имя архитектуры
    > of <
    имя сущности
    > is
    <
    раздел деклараций
    > begin
    <
    раздел операторов
    > end [architecture] <
    имя архитектуры
    >;

    Архитектурные тела
    Архитектурные тела представляют содержательное описание проекта. Архитектурное тело в некотором смысле подчинено соответствующей сущности. Различают структурные архитектурные тела
    (описывают проект в виде совокупности компонентов и их соединений), поведенческие архитектурные тела
    (описывающие проект как совокупность исполняемых действий) и смешанные тела
    Формальных признаков, по которым тело можно было бы отнести к тому или иному типу, не существует — речь идёт скорее не о чёткой классификации, а о стилях описания, для каждого из которых характерными являются определённые операторы и которые лучше отражают разные аспекты одного и того же объекта (структурный и поведенческий соответственно).

    Синхронный D-триггер
    T
    D
    C
    Q
    nQ

    Синхронный D-триггер library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    entity D_trigger is port(
    D : in STD_LOGIC;
    C : in STD_LOGIC;
    Q : out STD_LOGIC;
    nQ : out STD_LOGIC
    );
    end D_trigger;

    Синхронный D-триггер architecture D_trigger of D_trigger is begin
    Q <= D after 10 ns;
    nQ <= not Q;
    end D_trigger;
    architecture D_trigger of D_trigger is signal State : STD_LOGIC;
    begin
    State <= D;
    Q <= State after 10 ns;
    nQ <= not State after 10 ns;
    end D_trigger;

    Синхронный D-триггер architecture D_trigger of D_trigger is signal State : STD_LOGIC;
    begin process (C)
    begin if (C='1') then State <= D;
    end if;
    end process;
    Q <= State after 10 ns;
    nQ <= not State after 10 ns;
    end D_trigger;

    Синхронный D-триггер
    &
    &
    &
    &
    Q
    D
    Q
    C
    4 3
    2 1
    S4
    S3
    S2
    S1

    Синхронный D-триггер architecture D_trigger2 of D_trigger is signal S1, S2, S3, S4 : STD_LOGIC;
    component na2
    port(
    X1 : in STD_LOGIC;
    X2 : in STD_LOGIC;
    Y : out STD_LOGIC
    );
    end component na2;
    begin na2_1: na2 port map (D, C, S1);
    na2_2: na2 port map (S1, C, S2);
    na2_3: na2 port map (S1, S4, S3);
    na2_4: na2 port map (S2, S3, S4);
    Q <= S3;
    nQ <= S4;
    end D_trigger;

    Одноразрядный сумматор
    Сin
    B
    A
    S
    Сout
    SUM
    (
    )
    (
    )
    )
    (
    B
    A
    Cin
    B
    A
    Cout
    B
    A
    Cin
    B
    A
    B
    A
    Cin
    S
    +

    +

    =


    +

    +


    =

    Одноразрядный сумматор library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    entity sum is port(
    Cin : in STD_LOGIC;
    A : in STD_LOGIC;
    B : in STD_LOGIC;
    S : out STD_LOGIC;
    Cout : out STD_LOGIC
    );
    end sum;

    Одноразрядный сумматор architecture sum of sum is begin
    S <= (Cin and ((A and B) or ((not A)and (not B)))) or ((not Cin) and (A xor B));
    Cout <= (A and B) or (Cin and (A or B));
    end sum;

    Одноразрядный сумматор
    1 1
    1 2
    1 3
    &
    4 1
    1
    A
    B
    CIN
    COUT
    S
    &
    1
    &
    2
    M2 1
    1 2
    &
    3 1
    4
    &
    5 1
    3
    S1
    S2
    S3
    S4
    S5
    S6
    S7
    S8
    S9
    S10
    S11

    N-разрядный сумматор
    Сin
    B
    A
    S
    Сout
    SUM
    Сin
    B
    A
    S
    Сout
    SUM
    A(i)
    B(i)
    A(i+1)
    B(i+1)
    S(i)
    S(i+1)

    N-разрядный сумматор library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    entity sum_n is generic(
    N : integer := 8
    );
    port(
    Cin : in STD_LOGIC;
    A : in STD_LOGIC_VECTOR(N-1 downto 0);
    B : in STD_LOGIC_VECTOR(N-1 downto 0);
    Cout : out STD_LOGIC;
    S : out STD_LOGIC_VECTOR(N-1 downto 0)
    );
    end sum_n;

    N-разрядный сумматор architecture sum_n of sum_n is component sum is port(
    Cin : in STD_LOGIC;
    A : in STD_LOGIC;
    B : in STD_LOGIC;
    S : out STD_LOGIC;
    Cout : out STD_LOGIC
    );
    end component sum;
    signal C_in : STD_LOGIC_VECTOR(0 to N);
    signal C_out : STD_LOGIC_VECTOR(0 to N-1);
    begin
    C_in(0) <= Cin;
    sums: for i in 0 to N-1 generate sum: sum port map (C_in(i), A(i), B(i), S(i), C_out(i));
    C_in(i+1) <= C_out (i);
    end generate;
    Cout <= C_out(N-1);
    end sum_n;

    Запоминающее
    Запоминающее устройство устройство
    А
    DI
    RW
    CS
    DO
    MEM
    n k
    k

    Запоминающее
    Запоминающее устройство устройство
    CS RW A
    DI
    DO
    1
    X
    X
    X
    Z
    0 0
    A
    Data Z
    0 1
    A
    X
    Data
    Хранение
    Хранение
    Запись
    Запись
    Чтение
    Чтение

    Запоминающее
    Запоминающее устройство устройство library ieee;
    use ieee.std_kogic_1164.all;
    entity RAM is generic (N, K : integer;
    t_cs, tsu_a_cs, tsu_rw_cs, tsu_di_cs : time);
    port
    (A : in std_logic_vector (0 to N-1);
    DI : in std_logic_vector (0 to K-1);
    DO : in std_logic_vector (0 to K-1);
    CS, RW : in std_logic);
    end entity;

    Запоминающее
    Запоминающее устройство устройство architecture myRAM of RAM is const NW : integer := 2**N;
    type memory is array (NW-1 downto 0) of std_logic_vector (K-1 downto 0);
    signal M : memory;
    function value (arg : in std_logic_vector) return integer is variable tmp : integer := 0;
    begin for i in arg’high downto arg’low loop tmp := tmp * 2;
    if arg(i)=‘1’ then tmp := tmp + 1;
    end if;
    end loop;
    return tmp;
    end value;

    Запоминающее
    Запоминающее устройство устройство begin process (CS)
    begin if CS=‘0’ and not CS’stable then if A’stable(tsu_a_cs) and RW=‘0’ and RW’stable(tsu_rw_cs) and DI’stable(tsu_di_cs) then
    M (value(A)) <= DI after tcs;
    elsif A’stable(tsu_cs) and RW=‘1’ and RW’stable(tsu_rw_cs) then
    DO <= M (value(A)) after t_cs;
    else for I in 0 to (K-1) loop
    DO(i) <= ‘Z’;
    end loop;
    end if;
    end if;
    end process;
    end myRAM;


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