Язык VHDL. Типы данных

Содержание

Слайд 2

Алфавит языка VHDL

A, B, . . . , Z, a, b, .

Алфавит языка VHDL A, B, . . . , Z, a, b,
. . , z, 0, 1, . . . , 9, _ .
Прописные и строчные буквы не различаются.
Признаком комментария являются два символа тире («--»). 
Логические операторы
AND, OR, NAND, NOR, XOR, NOT.
Оператор конкатенации (объединения) - &.

Слайд 3

Объекты языка VHDL

Для указания системы счисления для констант могут быть применены

Объекты языка VHDL Для указания системы счисления для констант могут быть применены
спецификаторы:
B – двоичная система счисления, например b"0011"
О– восьмеричная система счисления, например O"3760"
Н – шестнадцатеричная система, например h"f6a0".

сonstant (константа), variable (переменная), signal (сигнал).
Декларация константы:
сonstant MAX1 : integer := 10;
Декларация сигнала:
signal x1: std_logic;
signal ct: std_logic_vector(3 downto 0):=x"0";

Слайд 4

Операторы языка VHDL

Oператор присваивания:
x1 <= '1';
оператор: if

if r = '1' then --

Операторы языка VHDL Oператор присваивания: x1 оператор: if if r = '1'
пример 1
ct <= 0; -- r = 1
elsif e = '1' then
ct <= ct + 1; -- r = 0, e = 1
else
ct <= ct; -- r = 0, e = 0
end if;

if e='1' then -- пример 3
ct <= ct+1;
else
ct <= ct;
end if;

if e='1' then -- пример 2
ct <= ct+1;
end if;

Последовательные операторы: if, case и др.
Параллельные операторы: process и др.

Oператор присваивания:
x1 <= '1';
оператор: if

Слайд 5

Схема вентиля на языке VHDL

library IEEE; -- библиотеки
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity

Схема вентиля на языке VHDL library IEEE; -- библиотеки use IEEE.STD_LOGIC_1164.ALL; use
la2 is -- внешние контакты
Port (i1: in std_logic;

i2: in std_logic;
r: out std_logic);
end la2;
Architecture Behavioral of la2 is --внутренние схемы
begin -- и связи (тело)
r <= i1 and i2; -- оператор присваивания
end Behavioral;

Вентиль 2И

Слайд 6

Комбинационная схема на языке VHDL

library IEEE; -- библиотеки
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity

Комбинационная схема на языке VHDL library IEEE; -- библиотеки use IEEE.STD_LOGIC_1164.ALL; use
p02 is -- внешние контакты
Port (x1: in std_logic;

x2: in std_logic;
x3: in std_logic;
y: out std_logic);
end p02;
Architecture Behavioral of p02 is --внутренние схемы
begin -- и связи (тело)
y <= (x1 and x2) or (x2 and x3);
end Behavioral;

Потоковое описание

Схема 1

Слайд 7

Структурное описание, главный модуль.

architecture Structura of sh2 is
component la2 port

Структурное описание, главный модуль. architecture Structura of sh2 is component la2 port
-- декларация компонента la2
(i1,i2: in std_logic; r: out std_logic);
end component;
component ll2 port -- декларация компонента ll2
(i1,i2: in std_logic; r: out std_logic);
end component; -- продолжение на следующем слайде.
_ _

library IEEE;
...
entity sh2 is
Port (x1,x2,x3:in std_logic;
y : out std_logic);
end sh2;

Компоненты:

Слайд 8

Структурное описание, продолжение

signal S1, S2 : std_logic;
begin
u1: la2 port map(x1,x2,S1);
u2:

Структурное описание, продолжение signal S1, S2 : std_logic; begin u1: la2 port
la2 port map(x2,x3,S2);
u3: ll2 port map(s1,s2,y);
end Structura;
-- la2, ll2 – тип компонента,
-- u1, u2, u3 - имена узлов
-- на схеме.

-- конкретизация
-- компонентов

Схема 1

Вентиль 2И

Вентиль 2ИЛИ

Компоненты

Слайд 9

Структурное и потоковое описание

architecture Structura of sh2 is
component la2 port

Структурное и потоковое описание architecture Structura of sh2 is component la2 port
-- декларация компонента la2
(i1,i2: in std_logic; r: out std_logic);
end component;

Схема 1

signal S1, S2 : std_logic;
begin
u1: la2 port map(x1,x2,S1);
u2: la2 port map(x2,x3,S2);
y <= S1 or S2;
end Structura;

library IEEE; -- структурное и
... –- потоковое описание
entity sh2 is -- в одном модуле
Port (x1,x2,x3:in std_logic;
y : out std_logic);
end sh2;

Слайд 10

Способы встраивания компонента

Два способа встраивания (конкретизация компонента)
1. Позиционный принцип сопоставления

Способы встраивания компонента Два способа встраивания (конкретизация компонента) 1. Позиционный принцип сопоставления
контактов (портов) компонентов и сигналов:
la2 port map (x1, x2, y); -- Пример
2. Ключевой принцип:
имя контакта (порта) => сигнал
la2 port map (i1=>x1, i2=>x2, r=>y); -- Пример

--декларация компонента
entity la2 is
Port (i1:in std_logic;
i2:in std_logic;
r:out std_logic);
end la2;

la2 – компонент
i1, i2, r – контакты (порты)
x1, x2, y - сигналы

Слайд 11

Иерархия файлов в проекте

Проект без тестового модуля

Проект без компонентов

Схема 1

Иерархия файлов в проекте Проект без тестового модуля Проект без компонентов Схема 1

Слайд 12

Входные сигналы

Результат моделирования

Структура проекта

i1, i2, r – контакты модуля la2;
x1,

Входные сигналы Результат моделирования Структура проекта i1, i2, r – контакты модуля
x2, y – внешние сигналы на контактах.

U1 - настраиваемая схема
G - генератор тестовых сигналов
R - регистратор
x1…xn - тестовые сигналы
y1…ym - выходы U1

Тестовый модуль формирует входные сигналы для проверки тестируемого модуля
Входные сигналы задаются 2 способами:
1. Графически (файл *.tbw).
2. Текстовым файлом.

Вентиль 2И

Слайд 13

Тестовый модуль на языке VHDL

LIBRARY ieee; -- библиотеки
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY

Тестовый модуль на языке VHDL LIBRARY ieee; -- библиотеки USE ieee.std_logic_1164.ALL; USE
tb1v_vhd IS -- внешние связи
END tb1v_vhd; -- отсутствуют
Architecture behavior OF tb1v_vhd IS

Выбор типа файла

-- Component Declaration ..
COMPONENT la2 -- тестируемый модуль
PORT( i1 : IN std_logic;
i2 : IN std_logic;
r : OUT std_logic
);
END COMPONENT;
SIGNAL x1 : std_logic := '0';
SIGNAL x2 : std_logic := '0';
SIGNAL y : std_logic;

Тестируемый мо-дуль, вентиль 2И

Тестовый модуль форми-рует входные сигналы

Слайд 14

Тестовый модуль (продолжение)

BEGIN
-- Instantiate the Unit …
uut: la2 PORT MAP(
i1

Тестовый модуль (продолжение) BEGIN -- Instantiate the Unit … uut: la2 PORT
=> x1,
i2 => x2,
r => y
);
tb : PROCESS
BEGIN
wait for 100 ns;
x1 <= '1'; -- t=100
wait for 100 ns; -- t=200
x1 <= '0'; x2 <= '1';
wait for 100 ns;
x1 <= '1'; -- t=300
wait; -- wait forever
END PROCESS;
END;

Структура проекта

Результат моделирования

Тестируемый модуль, вентиль 2И

Слайд 15

Результат моделирования

Внешние сигналы

Добавление внутренних сигналов S1 и S2

1 – подготовка к новому

Результат моделирования Внешние сигналы Добавление внутренних сигналов S1 и S2 1 –
запуску,
2 – запуск моделирования
длительностью 1000 нс

Схема 1

Слайд 16

Комбинационные и последовательные узлы.

Комбинационные узлы:
схемы на логических элементах,
мультиплексоры, дешифраторы и

Комбинационные и последовательные узлы. Комбинационные узлы: схемы на логических элементах, мультиплексоры, дешифраторы
другие узлы, не содержащие триггеров.
Последовательные узлы:
триггеры, регистры, счетчики и другие узлы, содержащие триггеры.

В описании на VHDL последовательные узлы содержат:
process (CLK) begin -- CLK - синхросигнал
if CLK'event and CLK='1' then –- передний фронт CLK
. . . -- операторы присваивания
. . . -- и другие операторы
end if;
end process;

Слайд 17

Схема D-триггера на языке VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity rg1 is

Схема D-триггера на языке VHDL library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use
-- внешн. связи
Port (D: in std_logic;

CLK: in std_logic; Q: out std_logic);
end rg1;
architecture Behavioral of rg1 is -- внутренние
signal REG: std_logic:='0'; -- схемы
begin -- и связи (тело)
process (CLK) begin
if CLK'event and CLK='1' then -- синхросигнал
REG <= D; -- оператор присваивания
end if;
end process;
Q <= REG; -- оператор присваивания
end Behavioral; -- наличие сигнала REG не обязательно

Слайд 18

Результат работы

q ? d в момент переключения clk из 0 в 1

Результат работы q ? d в момент переключения clk из 0 в 1

Слайд 19

Тестовый модуль для D-триггера (ч.1)

library IEEE; -- тестовый модуль для D-триггера
use

Тестовый модуль для D-триггера (ч.1) library IEEE; -- тестовый модуль для D-триггера
IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity tb1_vhd is -- внешние связи отсутствуют
end tb1_vhd;
architecture behavior of tb1_vhd is -- декларация
component rg1 PORT(D: in std_logic; -- компонента

CLK : in std_logic;
Q : out std_logic
);
end component;
signal D : std_logic := '0';
signal CLK : std_logic := '0';
signal Q : std_logic;

Слайд 20

Тестовый модуль для D-триггера (ч.2)

begin
uut: rg1 port map( D => D,

Тестовый модуль для D-триггера (ч.2) begin uut: rg1 port map( D =>
CLK => CLK, Q => Q);
-- процессы сlk_ и tb1 – параллельные операторы
clk_process :process begin
clk <= '0';
wait for 10 ns;
clk <= '1';
wait for 10 ns;
end process;

tb1 : process begin
wait for 5 ns;
D <= '1'; wait for 20 ns;
D <= '0'; wait for 40 ns;
D <= '1'; wait for 20 ns;
wait; -- will wait forever
end process;
end;

Слайд 21

Иерархия файлов в проекте

Моделирование

Реализация

Иерархия файлов в проекте Моделирование Реализация

Слайд 22

Схема вентиля на языке VHDL

library IEEE; -- библиотеки
. . .

Схема вентиля на языке VHDL library IEEE; -- библиотеки . . .
.
entity la2 is -- внешн.связи
Port (x1: in std_logic;
x2: in std_logic;
y: out std_logic);
end la2;

Architecture Behav of la2 is

Результаты моделирования не привязаны к синхросигналу

X1, X2 – входные сигналы.
Y – выходной сигнал,
Y=X1&X2.

begin
y <= x1 and x2;
end Behavioral;

Слайд 23

Схема вентиля c триггером на выходе

library IEEE; -- библиотеки
. .

Схема вентиля c триггером на выходе library IEEE; -- библиотеки . .
. .
entity la2 is -- внешн.связи
Port (x1,x1: in std_logic;
clk: in std_logic;
y: out std_logic);
end la2;

Architecture B1 of la2 is
begin --
process (CLK) begin
if CLK'event and CLK='1‘
then -- синхросигнал
y <= i1 and i2;
end if;
end process;
end Behavioral;

X1, X2 – входные сигналы.
clk – синхросигнал
Y – выходной сигнал,
Y=X1&X2.

Результаты моделирования,
выходной сигнал Y
“привязан” к синхросигналу CLK

_____________________________
Architecture Behav of la2 is
begin -- без триггера
y <= x1 and x2;
end Behavioral;

Слайд 24

Схема вентиля c триггером на выходе (в.2)

library IEEE; -- библиотеки
.

Схема вентиля c триггером на выходе (в.2) library IEEE; -- библиотеки .
. . .
entity la2 is -- внешн.связи
Port (x1,x1: in std_logic;
clk: in std_logic;
y: out std_logic);
end la2;

Architecture B1 of la2 is
signal y1: std_logic:='0';
begin
process (CLK) begin
if CLK'event and CLK='1‘
then
y <= y1;
end if;
end process;
y1 <= i1 and i2;
end Behavioral;

X1, X2 – входные сигналы.
clk – синхросигнал
Y – выходной сигнал,
Y=X1&X2.

Результаты моделирования,
выходной сигнал Y
“привязан” к синхросигналу CLK

Слайд 25

Вентиль c триггерами на входах и выходе

library IEEE;
. . .

Вентиль c триггерами на входах и выходе library IEEE; . . .
.
entity la2 is
Port (x1,x1: in std_logic;
clk: in std_logic;
y: out std_logic);
end la2;

Architecture B1 of la2 is
signal x11,x21:std_logic;
begin
process (CLK) begin
if CLK'event and CLK='1‘
then
x11 <= x1;
x21 <= x2;
y <= x11 and x21;
end if;
end process;
end Behavioral;

Результаты моделирования,
Сигнал x11, x21 и y “привязаны” к синхросигналу CLK

x1, x2 – входные сигналы.
Y – выходной сигнал.
x11,x21 – внутренние сигналы.

Слайд 26

Схема задержки на языке VHDL

library IEEE;
. . .
entity r1 is

Схема задержки на языке VHDL library IEEE; . . . entity r1
Port (d, clk: in std_logic;
q:out std_logic);
end r1;

architecture Behavioral of r1 is
signal reg: std_logic:='0';
begin
process (clk) begin
if clk'event and clk='1' then
reg <= d;
q <= reg;
end if;
end process;
end Behavioral;

Если поменять местами reg <= d и q <= reg, результат не изменится

Слайд 27

Векторные операции.

Векторные сигналы – многоразрядные сигналы, применяются
в многоразрядных схемах

Векторные операции. Векторные сигналы – многоразрядные сигналы, применяются в многоразрядных схемах (регистры,
(регистры, счетчики, сумматоры и др)
Декларация векторного сигнала:
signal ct: std_logic_vector(3 downto 0);
-- декларированы 4 сигнала: ct(3) ct(2) ct(1) ct(0)
signal rg: std_logic_vector(3 downto 0);
-- декларированы 4 сигнала: rg(3) rg(2) rg(1) rg(0)
signal v1: std_logic_vector(0 to 2);
-- декларированы 3 сигнала: v1(0) v1(1) v1(2)
Операции с векторным сигналом:
ct <=”0000”; ct <=x”0”;
ct <=”0010”; ct <=x”2”;
Сдвиг влево:
rg <= rg(2 downto 0) & ‘0’; -- rg(2) rg(1) rg(0) 0
Декларация выходного векторного сигнала:
DOUT : out std_logic_vector(3 downto 0)

Слайд 28

Мультиплексоры, методы реализации

Одноразрядный мультиплексор

S – двухразрядный векторный сигнал

Мультиплексоры, методы реализации Одноразрядный мультиплексор S – двухразрядный векторный сигнал

Слайд 29

Мультиплексор (операторы if, process)

library IEEE;
. . .
entity M4 is
Port (

Мультиплексор (операторы if, process) library IEEE; . . . entity M4 is
a,b,c,d : in STD_LOGIC;
s : in STD_LOGIC_VECTOR (1 downto 0);
y : out STD_LOGIC);
end M4; -- s – двухразрядный векторный сигнал

architecture Behavioral of M4 is
begin
mux4a:process (a,b,c,d,s) begin
if s="00" then
y <=a;
elsif s="01" then y <= b;
elsif s="10" then y <= c;
else y <= d;
end if;
end process mux4a;
end Behavioral;

Слайд 30

Работа мультиплексора

mux4a:process(a,b,c,d,s)
begin
if s="00" then
y <=a;
elsif s="01"

Работа мультиплексора mux4a:process(a,b,c,d,s) begin if s="00" then y elsif s="01" then y
then y <=b;
elsif s="10" then y <=c;
else y <=d;
end if;
end process mux4a;

при s="00" y = a
при s="01" y = b
при s="10" y = c
при s="11" y = d

Слайд 31

Использование IF

Задержка 3 элемента

Использование IF Задержка 3 элемента

Слайд 32

Мультиплексор, использование case

library IEEE;
. . .
entity M4 is
Port ( a,b,c,d

Мультиплексор, использование case library IEEE; . . . entity M4 is Port
: in STD_LOGIC;
s : in STD_LOGIC_VECTOR (1 downto 0);
y : out STD_LOGIC);
end M4;

architecture Behavioral of M4 is
begin
mux4a:process (a,b,c,d,s) begin
case s is
when "00" => y <= a;
when "01" => y <= b;
when "10" => y <= c;
when others => y <= d;
end case;
end process mux4a;
end Behavioral;

Слайд 33

Мультиплексор, использование case

Задержка 1 элемент

Мультиплексор, использование case Задержка 1 элемент

Слайд 34

Мультиплексор, оператор when

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity M4 is
Port ( a,

Мультиплексор, оператор when library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity
b, c, d : in STD_LOGIC;
s : in STD_LOGIC_VECTOR (1 downto 0);
y : out STD_LOGIC);
end M4;
architecture Behavioral of M4 is
begin
y <= a when s="00" -- может использоваться
else b when s="01" -- без оператора process
else c when s="10"
else d;
end Behavioral;

Слайд 35

Мультиплексор с триггером на выходе

entity M4 is Port(clk,a,b,c,d :in STD_LOGIC;
s :

Мультиплексор с триггером на выходе entity M4 is Port(clk,a,b,c,d :in STD_LOGIC; s
in STD_LOGIC_VECTOR (1 downto 0);
y : out STD_LOGIC);
end M4; -- операторы библиотек не показаны

architecture Behavioral of M4 is
begin
process (clk) begin
if clk='1' and clk'event then

сase s is
when "00" => y <= a;
when "01" => y <= b;
when "10" => y <= c;
when others => y <=d;
end case;
end if;
end process;
end Behavioral;

Слайд 36

Дешифратор

Дешифратор на 2 входа

Дешифратор Дешифратор на 2 входа

Слайд 37

Триггерная схема

entity dtg2 is
Port ( d0, clk : in STD_LOGIC;
d1,

Триггерная схема entity dtg2 is Port ( d0, clk : in STD_LOGIC;
d2 : out STD_LOGIC);
end dtg2;
architecture Behavioral of dtg2 is
signal d1a: std_logic:='0';
begin
process (clk) begin
if clk='1' and clk'event then
d1a <= d0;
d2 <= d1a;
end if;
end process;
d1 <= d1a;
end Behavioral;

Слайд 38

Формирователь

entity f2a is
Port ( d, clk : in STD_LOGIC;
q :

Формирователь entity f2a is Port ( d, clk : in STD_LOGIC; q
out STD_LOGIC);
end f2a;
architecture Behavioral of f2a is
signal z1,z2: std_logic:='0';
begin
process (clk) begin
if clk='1' and clk'event then
z1 <= d; z2 <= z1;
end if;
end process;
q <= ( z1 and (not z2) );
end Behavioral;

Описание на языке VHDL

Временная диаграмма работы формирователя,
d – вход, q – выход,
z1, z2 – внутренные сигналы

Слайд 39

Схема формирователя

entity f2a is
Port ( d, clk : in STD_LOGIC;
q

Схема формирователя entity f2a is Port ( d, clk : in STD_LOGIC;
: out STD_LOGIC);
end f2a;
architecture Behavioral of f2a is
signal z1,z2: std_logic:='0';
begin
process (clk) begin
if clk='1' and clk'event then
z1 <= d; z2 <= z1;
end if;
end process;
q <= ( z1 and (not z2) );
end Behavioral;

Описание на языке VHDL