ЛЕКЦИЯ Экскурс в язык описания аппаратуры VHDL
Язык VHDL. Почему он так называется? В шутку язык VHDL называют Very Huge Design Language – что переводится как Гигантский язык проектирования Поэтому военное ведомство США решилось выступить в роли спонсора при создании такого языка. Он получил название VHDL. В 1987 году появилась окончательная версия этого языка - VHDL87 В начале 80-х годов прошлого столетия военное ведомство США работало над программой VHSIC – создания сверхскоростных ИМС. Язык VHDL – от слов VHSIC HDL (Hardware Description Language) Аббревиатура VHSIC расшифровывается как Very-High-Speed Integrated Circuit - сверхскоростные интегральные схемы. При их проектировании обнаружилась необходимость точного учёта временных параметров ИМС, но подходящего языка для моделирования таких схем не было.
Язык VHDL используется во многих современных САПР, например OrCAD 9.1, Active-HDL 7.1, Xilinx ISE 6.2 Язык VHDL применяется для: Проектирование на VHDL не зависит от конкретной технологии реализации проекта VHDL имеет большое сходство с языком Ада и Паскаль. VHDL не имеет механизма наследования Скачок популярности и признания полезности VHDL произошёл с появлением коммерческих инструментов синтеза. Verilog имеет своим началом язык Си. документирования проектов;1 верификации проектов путём моделирования; 2 описания внешних воздействий (разработка тестов);3 высокоуровневого синтеза цифровой аппаратуры. 4
Объект проекта Особенности языка VHDL Любой VHDL-объект содержит две части: Интерфейс (сущность) – Entity (Port Declaration), который описывает взаимосвязи между объектом проекта и средой его «обитания». Это внешнее описание объекта. Интерфейс определяет «границы» модели, выделяя объект из окружения. Архитектура (архитектурное тело) – Architecture, которая описывает поведение компонента с функциональной или структурной точки зрения. Это внутреннее описание объекта. Чёрный ящик Функция, Структура, … ENTITYARCHITECTURE A B C D Y1 Y2Y2 Внешнее описание объекта Внутреннее описание объекта Name Объект проекта может иметь несколько архитектур. A B Y AND2 Объект проекта A B Y &
Модель логического элемента AND2 (VHDL87) Тип bit, используемый в первой редакции языка VHDL87, определён как type bit is ('0', '1'); Интерфейс Архитектура Имя объекта проектаВид сигнала Тип сигнала A B Y AND2_87 Выполняемая функция Объект проекта entity AND2_87 is port( A : in bit; B : in bit; Y : out bit ); end AND2_87; architecture model of AND2_87 is begin Y
Задержка распространения сигнала Комментарий Многозначная логика Модель логического элемента AND2 (VHDL93) library IEEE; use IEEE.STD_LOGIC_1164.all; entity AND2 is port( A : in std_logic; B : in std_logic; -- variable B : in std_logic; ERROR!!! signal Y : out std_logic ); end AND2; architecture delay_10 of AND2 is begin Y
Модель логического элемента AND2 с разными задержками по фронту и срезу выходного сигнала Реальный элемент AND2 в пакете OrCAD 9.1 называется 7408 PSpice - проект Simulate - проект I0 I1I1 O A B Y PSpice - модель Динамическая модель Разные задержки VHDL - модель В чём различие PSpice и Simulate объектов?
architecture delay_10 of AND2 is begin Y
architecture delay_10 of AND2 is begin Y
architecture delay_X_15_10 of AND2 is begin Y
Комментарий architecture truth_table of AND2 is type truth_table is array (0 to 3) of std_logic ; -- создаём новый тип constant table_and2 : truth_table:= -- создаём таблицу истинности ( -- Y -- B A '0', '0', '0', ' ); -- компактнее в строчку truth_table: = ('0','0','0','1'); signal TEMP : integer range0 to 3; signal BA : std_logic_vector (1 downto 0); begin BA
Модель логического элемента 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);-- Y выходной порт 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 -- атрибут C'EVENT не обязателен 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 --фронт сигнала C 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'); -- можно и так 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 Шестая особенность – сигналы и шины