Содержание
-
Проектирование цифровых устройств на языке VHDL
Описание схемс памятью 1
-
Структура цифрового устройства
2 ... ... Комбинационная логика Регистры
-
Стили описания на VHDL
3 Стиль Потоков данных (dataflow) Структурный (structural) Поведенческий (behavioral) синтезируемый не синтезируемый «параллельные» операторы компоненты и связи «последовательные» операторы
-
Особенности схем с памятью
4
-
Структура схемы с памятью
5 Комбинационная логика Память входы выходы текущее состояние S(t) следующее состояние S(t+1)
-
Особенности схем с памятью
Комбинационная схема Модель описания – система булевых уравнений Выход зависит только от текущих входов Данные распространяются по схеме от входов к выходам Значения изменяются при изменении входов Для хранения значений могут использоваться статические триггеры (latches) Схема с памятью Модель описания – конечный автомат Выход зависит от текущих входов и их истории В схеме присутствуют обратные связи Значения изменяются по фронту синхросигнала Для хранения значений используются динамические триггеры (flip-flops) и память(RAM) 6
-
Статические и динамические триггеры
7 D CLK Q D Q CLK latch D Q CLK flip-flop D CLK Q Статический триггер «прозрачен» при высоком уровне синхросигнала Динамический триггер запоминает значение в момент прихода фронта синхросигнала
-
Процессы
8
-
Поведенческий стиль
Поведенческое описание алгоритм Для описания используются блоки PROCESS Внутри процесса весь код выполняется последовательно Между собой процессы выполняются параллельно 9 . . . Процесс 1 Процесс N
-
Процессы – синтаксис
10 process (sensitivity_list) declarations begin statements end process; список чувствительности объявления переменных тело процесса
-
Тело процесса
Содержит последовательные операторы Выполняются по очереди (один за другим) возможна организация ветвлений и циклов Синтаксис операторов отличается от их параллельных аналогов Семантика близка к традиционным языкам программирования 11 process (sensitivity_list) declarations begin statements end process;
-
Внутри процесса все операторы выполняются последовательно Порядок имеет значение Процесс выполняется в бесконечном цикле Исполнение начинается при изменении сигналов, к которым чувствителен процесс Исполнение приостанавливается в конце процесса 12 Процесс исполнение кода возврат к началу процесса
-
Список чувствительности (sensitivity list)
Описывает сигналы, к которым чувствителен процесс Сигналы перечисляются через запятую Процесс начинает исполняться при изменении сигнала из списка чувствительности и приостанавливается по достижении end process Эквивалентен оператору wait on Обязателен в синтезируемом коде Может не использоваться в testbench 13 process(sensitivity_list) declarations begin statements end process; Процесс исполнение кода возврат к началу процесса ожидание изменения сигнала из списка
-
14 process begin wait on a, с; . . . end process; process (a, с) begin . . . end process; A B сигнал aв списке чувствительности – код процесса будет выполнен сигнал bне в списке чувствительности – процесс не выполнится
-
Объявления переменных (declarations)
Содержит описание локальных переменных процесса Не может содержать объявления сигналов Синтаксис объявления переменной 15 process (sensitivity_list) declarations begin code end process; variablevar_name : type [ := default_value ] ; имя переменной тип переменной значение по умолчанию (опционально)
-
Сигналы и переменные
Сигналы Могут быть объявлены в интерфейсе объекта или в архитектуре Оператор присваивания
-
Присваивание значений сигналам
Значения присваиваются сигналам при приостановке процесса: По инструкции wait По достижении конца процесса 17 Процесс исполнение кода возврат к началу процесса значения сигналам будут присвоены здесь process (clk) begin . . . sig
-
Условный операторif-elsif-else
18
-
Условный оператор
Оператор if-elsif-else Ветви elsifи elseявляются опциональными Выполняет первый блок кодаstatementsi, для которого условие истинно Если все условия ложны, выполняется безусловная ветвь else 19 if (condition1) then statements1 elsif (condition2) then statements2 … elsif (conditionN) then statementsN else statementsN+1 end if;
-
Описание фронта сигнала – функция rising_edge
Возвращает истинное значение в момент восходящего фронта сигнала Иначе возвращает значение «ложь» Для описания нисходящего фронта может использоваться функция falling_edge(sig_name) Используется для описания синхронных схем Аппаратная модель – динамический триггер 20 rising_edge(sig_name) process(clk) begin ifrising_edge(clk) then . . . -- Значения сигналов и переменных будут присвоены -- по фронту сигнала CLK end if; end process; шаблон описания синхронной схемы
-
21 process(clk) begin ifrising_edge(clk) then counter
-
rising_edgeи sig_name’event
Альтернативное условие на фронт синхросигнала Различия между rising_edgeи sig_name’event rising_edge определяет переходы01, L 1 sig_name’event and sig_name=‘1’определяет любые переходы sig_nameвида * 1, кроме 1 1 22 sig_name’event and sig_name = ‘1’
-
Синхронные и асинхронные операции
Синхронные операции – «привязаны» к фронту синхросигнала Пример: запись в регистр Асинхронные операции – выполняются в произвольный момент времени (обычно по условию) Пример: асинхронный сброс (reset) В условном операторе if-else-elsif как правило: асинхронные операции предшествуют условию rising_edge(sig_name) синхронные операции соответствуют условию rising_edge(sig_name) 23
-
Пример 1
24 8-разрядный регистр с синхронным сбросом library ieee; use ieee.std_logic_1164.all; entity reg8 is port ( clk, reset_n : in std_logic; d : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0)); end entity; architecturebehavof reg8 is begin process(clk) begin ifrising_edge(clk) then if (reset_n = ‘0’) then q
-
Пример 2
25 8-разрядный регистр с асинхронным сбросом library ieee; use ieee.std_logic_1164.all; entity reg8 is port ( clk, reset_n : in std_logic; d : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0)); end entity; architecturebehavof reg8 is begin process(clk, reset_n) begin if (reset_n = ‘0’) then q
-
Оператор множественного ветвленияcase
26
-
Оператор множественного ветвления
Оператор case Аналог в традиционных языках программирования – оператор switch Аналог параллельного оператора statements1 . . . whenchoiseN => statementsN whenothers => statementsN+1 end case;
-
Пустой оператор
Не выполняет никаких действий Используется там, где оператор требуется формально 28 null; process(clk) begin if rising_edge(clk) then case mode is when “00” => result result result null; -- Описывает все прочие варианты mode -- и реализует режим хранения end case; end if; end process;
-
Оператор цикла for
29
-
Оператор for-loop Аналог в традиционных языках программирования – оператор for Выполняет блокstatementsзаданное количество раз На каждой итерации изменяется значение счетчика counter типа integer Переменную counterзаранее объявлять не нужно; она является локальной для цикла Диапазон range: low to high high downto low 30 for counter in range loop statements end loop;
-
Пример – генерация тестовых воздействий в testbench 31 process begin test_value
-
Оператор цикла while
32
-
Оператор while-loop Аналог в традиционных языках программирования – оператор while Условие проверяется перед выполнением блока statements Выполняет блок statements, пока условие истинно 33 while condition loop statements end loop;
-
Оператор приостановкипроцессаwait
34
-
Оператор приостановки процесса
Оператор wait Используется для приостановки выполнения процесса: wait for time– на определенное время wait until condition– до выполнения условия wait on signals– до определенного события (изменения сигнала) waitбез параметров – завершение выполнения процесса Полная форма оператора: Синтезируемое ожидание фронта синхронизации: 35 wait until rising_edge(clk); wait on signals until condition fortime;
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.