ЛЕКЦИЯ Язык описания аппаратуры VHDL
Язык VHDL. Почему он так называется? В шутку язык VHDL называют Very Huge Design Language – что переводится как Гигантский язык проектирования Поэтому военное ведомство США решилось выступить в роли спонсора при создании такого языка. Он получил название VHDL. В 1987 году появилась окончательная версия этого языка - VHDL87 В начале 80-х годов прошлого столетия военное ведомство США работало над программой VHSIC – создания сверхскоростных ИМС. Аббревиатура VHSIC расшифровывается как Very-High-Speed Integrated Circuit - сверхскоростные интегральные схемы. При их проектировании обнаружилась необходимость точного учёта временных параметров ИМС, но подходящего языка для моделирования таких схем не было. Язык VHDL – от слов VHSIC HDL (Hardware Description Language)
Язык VHDL используется во многих современных САПР, например OrCAD 9.1, Active-HDL 7.1, Xilinx ISE 6.2 Язык VHDL применяется для: документирования проектов; верификации проектов путём моделирования; описания внешних воздействий (разработка тестов); высокоуровневого синтеза цифровой аппаратуры. Проектирование на VHDL не зависит от конкретной технологии реализации проекта VHDL имеет большое сходство с языком Ада и Паскаль. Verilog имеет своим началом язык Си. VHDL не имеет механизма наследования Скачок популярности и признания полезности VHDL произошёл с появлением коммерческих инструментов синтеза.
Особенности языка VHDL Любой VHDL-объект содержит две части: Интерфейс (сущность) – Entity (Port Declaration), который описывает взаимосвязи между объектом проекта и средой его «обитания». Это внешнее описание объекта. Интерфейс определяет «границы» модели, выделяя объект из окружения. Архитектура (архитектурное тело) – Architecture, которая описывает поведение компонента с функциональной или структурной точки зрения. Это внутреннее описание объекта. Может быть несколько архитектур.
Модель логического элемента AND2 (VHDL87) Тип bit, используемый в первой редакции языка VHDL87, определён как type bit is ('0', '1');
Модель логического элемента AND2 (VHDL93) Алфавит сигнала типа std_logic: (U,X,0,1,Z,W,L,H,-) Девять значений
Модель логического элемента AND2 (VHDL93) Версия VHDL93 позволяет без всяких ухищрений имитировать высокоомный выход ('Z'), открытый коллектор ('H'), шинные структуры и прочие особенности реальной цифровой аппаратуры. Например, на время формирования фронта (среза) на выходе можно задать неизвестное значение X
Особенности языка VHDL VHDL позволяет создавать компоненты (модели) с настраиваемыми параметрами Существуют фирмы, продающие VHDL-модели стандартных микросхем. Проектирование VHDL-компонентов является технологически независимым. То есть разработчик может сосредоточиться на функциях проекта. Процесс синтеза похож на работу компилятора, который транслирует входной код в машинный. Синтезатор выполняет аналогичную работу – транслирует VHDL-код в принципиальную схему с вентилями и триггерами в заданной технологии. До сих пор, однако нельзя перемещать код, предназначенный для синтеза, между произвольными системами синтеза.
Модель логического элемента AND2 (VHDL93) с разными задержками (начало) library IEEE;-- с помощью ключевых слов Library и Use use IEEE.STD_LOGIC_1164.all;-- подключаем нужный пакет, в котором -- определён девятизначный алфавит entity and2_tpLH_tpHL is generic(tpLH : time := 15ns; tpHL : time := 20ns); port( A : in STD_LOGIC; B : in STD_LOGIC; Y : out STD_LOGIC :='0' -- нужна начальная инициализация --Y : inout STD_LOGIC :='0' -- работает без Y'driving_value --Y : buffer STD_LOGIC :='0' –работает без Y'driving_value ); end and2_tpLH_tpHL;
Модель логического элемента AND2 (VHDL93) с разными задержками (окончание) architecture and2_tpLH_tpHL of and2_tpLH_tpHL is begin PROCESS (A,B) variable Y_INT : std_logic; begin Y_INT:=A and B; -- Вычисляем выход без задержки if Y_INT='1' and Y'driving_value ='0' then --работает с Y'driving_value Y
Результаты моделирования элемента AND2 (VHDL93) с разными задержками
Модель генератора прямоугольных импульсов с периодом 200 ns (начало) library IEEE; use IEEE.STD_LOGIC_1164.all; entity gener is port (Y : out STD_LOGIC); end gener; architecture gener of gener is constant stop_gen : time :=1100ns; -- задаём время останова signal done : std_logic; -- сигнал окончания работы begin
Модель генератора прямоугольных импульсов с периодом 200 ns (окончание) GEN_PR: process -- моделирует работу генератора begin if NOW=0ns then Y
Инерционная и транспортная задержки В языке VHDL в оператор назначения
Модель элемента AND2 с инерционной и транспортной задержками. Резекция library IEEE; use IEEE.STD_LOGIC_1164.all; entity and2_I_T is port( A : in STD_LOGIC; B : in STD_LOGIC; Y_I, Y_T, Y_I_R : out STD_LOGIC); end and2_I_T; architecture and2_I_T of and2_I_T is begin Y_I
Результаты моделирования элемента AND2 с инерционной и транспортной задержками Порог резекции должен быть меньше задержки элемента
Отыскание «иголок» (glitch) library IEEE; use IEEE.STD_LOGIC_1164.all; entity and2_glitch is port( A : in STD_LOGIC; B : in STD_LOGIC; Y : out STD_LOGIC ); end and2_glitch; architecture and2_glitch of and2_glitch is signal Y_I, Y_T : std_logic; begin Y_I
Отыскание «иголок» (glitch). Результаты моделирования
Контроль минимальной длительности импульса library IEEE; use IEEE.STD_LOGIC_1164.all; entity buffer_my is port (A : in STD_LOGIC; Y : out STD_LOGIC); end buffer_my; architecture model of buffer_my is begin PROCESS (A) variable t_event : time :=0ns; --переменная t_event инициализируется нулём begin if now > 8ns then assert (now - t_event >= 8ns) report violation minimum A" severity ERROR; end if; t_event:=now; end process; Y
Контроль минимальной длительности импульса. Результаты моделирования
Контроль времени предустановки на входе D-триггера library IEEE; use IEEE.STD_LOGIC_1164.all; entity DFF_setup is port (D, C : in STD_LOGIC; Q : out STD_LOGIC); end DFF_setup; architecture DFF_setup of DFF_setup is begin process (C) begin if C='1' and C'EVENT then if (D'last_event>=10ns) then Q
Контроль времени предустановки на входе D-триггера. Результаты моделирования
Модель сумматора add_4 (начало) library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all;-- добавил для арифм. операций entity add_4 is port( CI : in STD_LOGIC; A : in STD_LOGIC_VECTOR(3 downto 0); B : in STD_LOGIC_VECTOR(3 downto 0); CO : out STD_LOGIC; S : out STD_LOGIC_VECTOR(3 downto 0) ); end add_4;
Модель сумматора add_4 (окончание) architecture add_4 of add_4 is begin process (A, B, CI) variable TEMP_RESULT : std_logic_vector(4 downto 0); begin TEMP_RESULT:=('0' & A) + ('0' & B) + CI;-- конкатенация --S
Результаты моделирования сумматора add_4
Модель регистра reg_4 (начало) library IEEE; use IEEE.STD_LOGIC_1164.all; entity reg_4 is port ( DL : in STD_LOGIC; C : in STD_LOGIC; R : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(3 downto 0) ); end reg_4;
Модель регистра reg_4 (окончание) architecture reg_4 of reg_4 is signal TEMP_Q : std_logic_vector(3 downto 0); begin process (C, R) begin if R = '1' then TEMP_Q '0'); -- сброс elsif rising_edge (C) then TEMP_Q
Результаты моделирования регистра reg_4
Модель счётчика count_M9_IP (начало) library IEEE; use IEEE.std_logic_1164.all; entity count_M9_IP is port ( C : in std_logic; R : in std_logic; Q : out std_logic_vector (3 downto 0) ); end entity;
Модель счётчика count_M9_IP (окончание) library IEEE; use IEEE.std_logic_unsigned.all; architecture count_M9_IP of count_M9_IP is signal TEMP_Q : std_logic_vector(3 downto 0); begin process (C, R) begin if R = '1' then TEMP_Q '0'); elsif rising_edge (C) then if (TEMP_Q = "1000") then TEMP_Q '0'); else TEMP_Q
Результаты моделирования счётчика count_M9_IP
Особенности языка VHDL Первая особенность – тяжеловесность В языке определены 97 ключевых слов (стандарт VHDL93) Для сравнения в языке PML их всего 11 В языке Verilog - 73
Особенности языка PML Вторая особенность – многозначный алфавит Алфавит сигнала типа std_logic: (U,X,0,1,Z,W,L,H,-) Девять значений VHDL93 VHDL87 Двузначный алфавит (исключение) type bit is ('0', '1'); Кроме того, пакет std_logic_1164 включает подтип X01Z с четырёхзначным алфавитом (как в языке Verilog) Имеются функции преобразования 9-значного алфавита в 4- значный и наоборот. Более того, пользователь может самостоятельно определить рабочий алфавит сигналов и число различных значений в нём
Особенности языка VHDL В языке PML определены четыре значения логической силы В языке Verilog – восемь значений Третья особенность – логическая сила в языке VHDL на определена Нагрузочную способность в языке VHDL можно описать только косвенным образом: сильным (Forcing) или слабым (Weak) сигналом Forcing / Weak X / W 0 / L 1 / H Z – High Impedance
Особенности языка VHDL Язык VHDL позволяет непосредственно запрограммировать временную задержку, с которой входной сигнал передаётся на выход. Четвёртая особенность – имитация задержек Y_I
Особенности языка VHDL Пятая особенность – стили описания Язык VHDL поддерживает все стили описание объекта Функциональное (аналитическое или алгоритмическое) Потоковое Структурное Смешанное
Стили описания проекта Да Library IEEE; Use IEEE.std_logic_1164.all; entity MUX2 is port ( D0, D1, A : in std_logic; Y : : out std_logic); end MUX2; architecture FUNC of MUX2 is -- аналитическое begin -- описание функции объекта Y
Стили описания проекта architecture BEHAV of MUX2 is begin process (D0, D1, A) -- алгоритмическое begin-- описание функции объекта if A='0' then Y
Стили описания проекта architecture STRUCT of MUX2 is -- структурное описание объекта component INVR -- объявления компонентов port (IN1:in std_logic;OUT1:out std_logic); end component; component AND2 generic (TPLH : time:=20ns; TPHL : time:=22ns); port (IN1, IN2:in std_logic; OUT1: out std_logic); end component; component OR2 port (IN1, IN2:in std_logic; OUT1: out std_logic); end component; signal F1, F2, F3 : std_logic; --объявление внутренних сигналов
Стили описания проекта begin DD1 : AND2generic map (10ns,12ns) --карта настройки задержек port map (IN1=>D0, IN2=>F1, OUT1=>F2); -- карта порта DD2 : OR2port map (IN1=>F2, IN2=>F3, OUT1=>Y); DD3 : AND2generic map (TPHL=>15ns,TPLH=>11ns) port map (D1, A, F3); DD4 : INVRport map (IN1=>A, OUT1=>F1); end STRUCT; Поимённое связывание Позиционное связывание: задержек, портов и цепей
Особенности языка VHDL Шестая особенность – сигналы и шины
Особенности языка PML Восьмая особенность – операция конкатенации Отдельные узлы можно объединять, "складывать" в шину с помощью операции конкатенации, называемой иначе [cat-узел]. Слово Cat происходит от Catenation - сцепление. Таким образом, с помощью cat-узла легко наполнить шину конкретным содержанием. Выражения в cat-узле недопустимы Q_BUS = [~D4, D3&D2, "0", D0]; /* ошибка */ Шина – это внутреннее достояние PML-модели OUTPUT Q1, Q2, Q3, Q4; INPUT D1, D2, D3, D4; LOCAL Q_BUS[4]; /* объявляется четырёхразрядная шина */ { Q_BUS = [D4,D3,D2,D1]; /* значение шины определяется входами D4..D1 */ Q_BUS = ["1","1","0","1"];/* шине присваивается значение 13 */ Q_BUS = [D4,"1","0",D1];/* в cat-узел можно подставлять узлы и */ /* узловые значения "0","1","X" */ }
Особенности языка PML В условных выражениях можно использовать описание переключающегося сигнала (его фронта или среза) Девятая особенность – динамическое управление IF (C == "/") Q = D; /* загрузка в D-триггер данных по фронту C */ Пример Аналогичным образом обозначается срез сигнала: "\" - наклонная черта влево (backslash). Заметим, что в операторе присваивания использование названных символов недопустимо. Компилятор языка PML зафиксирует ошибку, если вы наберёте следующий текст: Q = "/"; /* попытка присвоить сигналу Q значение «фронт» */
Подведём итог. Перечислим кратко особенности языка PML всего одиннадцать ключевых слов трёхзначный алфавит {0, 1, X} логическая сила: S > D > R > Z имитация задержек PCL-список Y = ~(A & B) (20, 22, D, Z) Ключевых слов BEGIN и END нет. Их заменяют фигурные скобки { } Большие и малые буквы не различаются Язык PML поддерживает только поведенческое и потоковое описания Разрешены локальные узлы и шины Шины определены только внутри PML-модели операция конкатенации – cat-узел: Q_BUS = [D4,D3,D2,D1]; динамическое управление IF (C == "/") Q = D;
Подведём итог. Перечислим кратко особенности языка PML В языке PML определены всего три оператора: присваивания, условный и выбора нет операции вычитания шинных сигналов Ключевого слова THEN в условном операторе нет: IF (R=="1") Q = 0000"; Условное выражение всегда заключается в круглые скобки: IF (A_BUS == ["1","1","0","1"]) Q_BUS = "0XD"; Язык PML позволяет суммировать шины разной ширины: S = [A3,A2,A1,A0] + [B3,B2,B1,B0] +[CRI]; Выходные сигналы нельзя собрать в cat-узел: [CRO,S3,S2,S1,S0] = [A3,A2,A1,A0] + [B3,B2,B1,B0] +[CRI]; /* ошибка */