Моделирование сигналов в VHDL

Содержание

Слайд 2

Механизм процессов и концепция сигнала В VHDL При программировании на VHDL

Механизм процессов и концепция сигнала В VHDL
При программировании на VHDL нужно

учитывать
две особенности:
моделирование параллельных процессов;
моделирование задержек сигналах.
Слайд 3

Пример. Схема состоящая из трех элементов: 2 И, 2 ИЛИ и

Пример. Схема состоящая из трех элементов: 2 И, 2 ИЛИ и

2 Исключающее ИЛИ.

Тогда данную схему можно представить как взаимодействие трех процессов

Слайд 4

Процессы p1,p2,p3 описываются в VHDL следующим образом: P1: process (x1,x2) begin

Процессы p1,p2,p3 описываются в VHDL следующим образом:
P1: process (x1,x2)
begin
. . .

функционирование элемента 2И
end process p1;
P2: process (z1,z2)
begin
. . . — функционирование элемента 2ИЛИ
end process p2;
P3: process (y1,y2)
begin
. . . — функционирование элемента 2ИсключающееИЛИ
end process p3;
Слайд 5

В VHDL есть два типа сигналов: ports - порты - это

В VHDL есть два типа сигналов:
ports - порты - это внешние

входы и выходы ОП:
signals - внутренние ( локальные) сигналы - выходы логических
элементов.
Слайд 6

Порты описывают в интерфейсной части (entity) проекта. port_declaration ::= port (port_list);

Порты описывают в интерфейсной части (entity) проекта.

port_declaration ::=
port (port_list);
port_list ::=

identifier{,...}: [mode] subtype_indication
[:= expression]
mode::= in | out | inout | buffer | linkage
Слайд 7

Слайд 8

Декларация внутреннего сигнала signal_declaration ::= signal identifier{,...}: subtype_indication [:= expression] architecture

Декларация внутреннего сигнала
signal_declaration ::=
signal identifier{,...}: subtype_indication [:= expression]
architecture arch_name of entity_name

is
{ signal_declaration}
{other_declarative_item}
begin
{concurrent_statement}
end [architecture] [arch_name];
Слайд 9

Слайд 10

entity D_flipflop is port ( clk, d : in bit; q

entity D_flipflop is
port ( clk, d : in bit; q

: buffer bit );
end entity D_flipflop;
architecture behavioral of D_flipflop is
begin
q <= d when clk'event and clk = '1';
end architecture behavioral;
entity inverter is
port ( a : in bit; y : out bit );
end entity inverter;
architecture behavioral of inverter is
begin
y <= not a;
end architecture behavioral;
Слайд 11

entity count2 is port ( clk : in bit; q0, q1

entity count2 is
port ( clk : in bit; q0, q1

: buffer bit );
end entity count2;
architecture buffered_outputs of count2 is
component D_flipflop is
port ( clk, d : in bit; q : buffer bit );
end component D_flipflop;
component inverter is
port ( a : in bit; y : out bit );
end component inverter;
signal q0_n, q1_n : bit;
begin
bit0 : component D_flipflop
port map ( clk => clk, d => q0_n, q => q0 );
inv0 : component inverter
port map ( a => q0, y => q0_n );
bit1 : component D_flipflop
port map ( clk => q0_n, d => q1_n, q => q1 );
inv1 : component inverter
port map ( a => q1, y => q1_n );
end architecture buffered_outputs;
Слайд 12

Простой оператор назначения сигналов ( Simple SA) Simple SA - simple_signal_assignment(

Простой оператор назначения сигналов ( Simple SA)
Simple SA - simple_signal_assignment( Simple

SA)-
простой оператор назначения сигнала;
simple_SA::=
name<=[transport] waveform_element;
waveform_element::=
[label:] value_expression [after time_expression]
|null [after time_expression];
Слайд 13

Разновидности (Simple SA): - concurrent Simple SA (CSA) – параллельный простой

Разновидности (Simple SA):
- concurrent Simple SA (CSA) – параллельный простой

оператор назначения сигнала;
- siquential Simple SA (SSA) – последовательный простой оператор
назначения сигнала.
CSA и SSA синтаксически неразличимы – их вид определяется областью действий
Слайд 14

Область действий CSA: - архитектура - блок

Область действий CSA:
- архитектура
- блок

Слайд 15

architecture arch_name of entity_name is { signal_declaration} {other_declarative_item} begin {CSA} --

architecture arch_name of entity_name is
{ signal_declaration}
{other_declarative_item}
begin
{CSA} -- CSA в архитектуре
{other_concurrent_statement}
{

block [(…)]
{ signal_declaration}
{other_declarative_item}
begin
{CSA} -- CSA в блоке
{other_concurrent_statement}
end block}
end [architecture] [arch_name];
Слайд 16

Область действий SSA: - процесс - процедура - функция

Область действий SSA:
- процесс
- процедура
- функция

Слайд 17

architecture arch_name of entity_name is { signal_declaration} {other_declarative_item} { function function_name(parameters)

architecture arch_name of entity_name is
{ signal_declaration}
{other_declarative_item}
{ function function_name(parameters) return type_mark is
{declarative_item}

begin
{SSA} -- SSA в функции
{other_ siquential _statement}
end function function_name;
{ procedure procedure_name(parameters) is
{declarative_item}
begin
{SSA} -- SSA в процедуре
{other_ siquential _statement}
end procedure procedure_name;
begin
{CSA} -- CSA в architecture
{other_concurrent_statement}
{ block [(…)]
{ signal_declaration}
{other_declarative_item}
begin
{CSA}-- CSA в block
{other_concurrent_statement}
end block}
end [architecture] [arch_name];
Слайд 18

Пример описания работы мультиплексора потоком сигналов. Внешний вид мультиплексора MUX4 Логическая схема мультиплексора MUX4

Пример описания работы мультиплексора потоком сигналов.

Внешний вид мультиплексора MUX4

Логическая схема мультиплексора

MUX4
Слайд 19

entity mux4 is generic(delay:time:=20ps); port(D:in std_logic_vector(3 downto 0); A:in std_logic_vector(1 downto

entity mux4 is
generic(delay:time:=20ps);
port(D:in std_logic_vector(3 downto 0);
A:in std_logic_vector(1

downto 0);
Y:out std_logic);
end mux4;
architecture data_flow_simple_SA of mux4 is
signal nA0, nA1, y0, y1, y2, y3, z :std_logic;
begin -- first level of signal flow
nA0<=not A(0);
nA1<=not A(1);
-- second level of signal flow
y0<=nA0 and nA1 and D(0);
y1<=A(0) and nA1 and D(1);
y2<=nA0 and A(1) and D(2);
y3<=A(0) and A(1) and D(3);
-- third level of signal flow
z<=y0 or y1 or y2 or y3;
Y<=z after delay
end data_flow_simple_SA;
Слайд 20

Драйвер сигнала Каждый сигнал имеет один или несколько так называемых драйверов.

Драйвер сигнала
Каждый сигнал имеет один или несколько так называемых драйверов. Драйвер

содержит текущее значение сигнала и набор планируемых значений. Его можно описать последовательностью пар {time/value - время/значение}, которые устанавливаются в момент назначения сигнала.
Слайд 21

Например, на 0 ns драйвер сигнала y (Dr_y) типа integer после

Например, на 0 ns драйвер сигнала y (Dr_y) типа integer после

выполнения оператора
y<= 0 after 0 fs, 1 after 1 ps, 2 after 2 ps, 3 after 3 ns, 4 after 4 us,
5 after 5 ms, 6 after 6 sec, 7 after 7 min, 8 after 8 hour;

можно представить текущим состоянием

и списком последующих (планируемых, ожидаемых (scheduling, pending) следующим списком:

Слайд 22

Сигнал имеет несколько драйверов, если количество источников сигнала превышает 1, например при 2-направленных и трехстабильных цепей

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

при 2-направленных и трехстабильных цепей
Слайд 23

Металогический (metalogical) базис и многозначная логика Разновидности металогических базисов: {01} –

Металогический (metalogical) базис и многозначная логика
Разновидности металогических базисов:
{01} – 2-х

значный базис
{01Х} – 3-х значный базис
{01ХZ} – 4-х значный базис
{UX01ZWLH-} – 9-ти значный базис
Слайд 24

9-ти значный базис – стандарт IEEE standart 1164:

9-ти значный базис – стандарт IEEE standart 1164:

Слайд 25

Функция разрешения для 9-ти значного базиса в пакете std_logic_1164:

Функция разрешения для 9-ти значного базиса в пакете std_logic_1164:

Слайд 26

Другие базисы в пакете std_logic_1164:

Другие базисы в пакете std_logic_1164:

Слайд 27

Многозначная логика – это логические операции над операндами, имеющими более 2-х значений. В пакете std_logic_1164:

Многозначная логика – это логические операции над операндами, имеющими более 2-х

значений.

В пакете std_logic_1164:

Слайд 28

Реализация логических функций в 9-ти значном базисе в пакете std_logic_1164:

Реализация логических функций в 9-ти значном базисе в пакете std_logic_1164:

Слайд 29

Реализация логических функций в других базисах в пакете std_logic_1164:

Реализация логических функций в других базисах в пакете std_logic_1164:

Слайд 30

Моделирование задержек сигналов Простой оператор назначения сигналов simple_SA::= [Label:] signal_name waveform

Моделирование задержек сигналов

Простой оператор назначения сигналов
simple_SA::=
[Label:] signal_name

<= [delay_mechanism] waveform;
waveform ::= {transaction} {,transaction}
transaction::= value_expression [after time_expression]
| null [after time_expression];
delay_mechanism::= transport
| [reject reiect_time_expression ] inertial
Слайд 31

Разновидности задержек сигналов: - transport - транспортная - inertial - инерционная

Разновидности задержек сигналов:
- transport - транспортная
- inertial - инерционная

- reject inertial – инерционная с фильтрацией
Слайд 32

Транспортная задержка – описывает безинерционную задержку сигналов, вызванную наличием емкостей и

Транспортная задержка – описывает безинерционную задержку сигналов, вызванную наличием емкостей и

индуктивностей и характерную для цепей передачи данных.

line_out <= transport line_in after 500 ps;

Слайд 33

Пример: asymmetric _delay : process (a) is constant Tpd_01 : time

Пример:

asymmetric _delay : process (a) is
constant Tpd_01 : time :=

800 ps;
constant Tpd_10 : time := 500 ps;
begin
if a =’1’ then
z <= transport a after Tpd_01;
else
z <= transport a after Tpd_10;
end if;
end process asymmetric_delay;
Слайд 34

Инерционная задержка – описывает задержки логических элементов inv : process (a)

Инерционная задержка – описывает задержки логических элементов

inv : process (a) is


begin
y <= inertial not a after 3 ns;
end process inv;
Слайд 35

Инерционная задержка с фильтрацией – описывает задержки логических элементов с возможностью

Инерционная задержка с фильтрацией – описывает задержки логических элементов с возможностью

отфильтровывать короткие импульсы

inv : process (a) is
begin
y <= reject 2 ns inertial not a after 3 ns;
end process inv;

Слайд 36

Пример. Предположим, что драйвер для сигнала s содержит следующие ожидаемые транзакции:

Пример. Предположим, что драйвер для сигнала s содержит следующие ожидаемые транзакции:

и

процесс, содержащий драйвер выполняет следующее назначения сигнала во время 10 ns:

s <= reject 5 ns inertial '1' after 8 ns;

Слайд 37

Тогда ожидаемые транзакции после этого назначения будут такими:

Тогда ожидаемые транзакции после этого назначения будут такими:

Слайд 38

Дельта задержка Delta delay - ∆ Все процессы в VHDL делятся

Дельта задержка

Delta delay - ∆
Все процессы в VHDL делятся

на три вида:
- active - активный процесс;
- executed - выполняемый процесс;
- postponed - приостановленный процесс.
Слайд 39

Итерационный алгоритм работы VHDL-программы:

Итерационный алгоритм работы VHDL-программы:

Слайд 40

Например, для схемы y1 y2 y Итерационная временная диаграмма изменения сигналов: Δ Δ Δ

Например, для схемы

y1 <= x1 and x2;
y2 <= z1 or

z2;
y <= y1 xor y2;

Итерационная временная диаграмма изменения сигналов:

Δ Δ Δ

Слайд 41

Рассмотрим комбинационную логическую схему и соответствующий VHDL код:

Рассмотрим комбинационную логическую схему и соответствующий VHDL код:

Слайд 42

library IEEE; use IEEE.std_logic_1164.all; entity combinational is port (in1, in2: in

library IEEE;
use IEEE.std_logic_1164.all;
entity combinational is
port (in1, in2: in std_logic;


z : out std_logic);
end entity combinational;
architecture dataflow of combinational is
signal s1, s2, s3, s4: std_logic:= '0';
begin
s1 <= not in1;
s2 <= not in2;
s3 <= not (s1 and in2);
s4 <= not (s2 and in1);
z <= not (s3 and s4);
end architecture dataflow ;

Модель отображает потоковое описание схемы без спецификации задержек вентилей.

Слайд 43

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

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

Слайд 44

очередность дельта-событий (a) и отображение дельта-задержек (б) сигналов при моделировании;

очередность дельта-событий (a)
и отображение дельта-задержек (б)
сигналов при моделировании;

Слайд 45

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

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

Слайд 46

Пример моделирования RS-триггер без задержек в ЛЭ:

Пример моделирования RS-триггер без задержек в ЛЭ:

Слайд 47

Временная диаграмма для триггера имеет вид: На 50 ns, когда сигналы

Временная диаграмма для триггера имеет вид:

На 50 ns, когда сигналы ‘R’

и ’S’ после запрещенной комбинации ‘00’ перейдут в состояние хранения ‘11’, моделирование прекратится, так как при работе схемы RS-триггера без задержек возникают бесконечные итерации и цикл не завершается.
Редактор AHDL при этом выдаст следующее сообщение об ошибке:
Слайд 48

Теперь промоделируем RS-триггер с равными задержками ЛЭ в 3 ns.

Теперь промоделируем RS-триггер с равными задержками ЛЭ в 3 ns.

Слайд 49

Временная диаграмма RS-триггера с разными задержками

Временная диаграмма RS-триггера с разными задержками

Слайд 50

Предопределенные атрибуты сигналов Атрибут - это значение, предопределенное системой или пользователем..

Предопределенные атрибуты сигналов

Атрибут - это значение, предопределенное системой или

пользователем.. В первом случае атрибут называется предопределенным, во втором- пользовательским.
В VHDL есть ряд предопределенных атрибутов для таких объектов, как массивы, блоки, сигналы, типы.
Пользовательские атрибуты можно создать для:
- устройств;
- архитектурных тел;
- конфигураций;
- процедур;
- функций;
- пакетов;
- типов;
- подтипов;
- констант;
- сигналов;
- переменных;
- компонент;
- меток.
Слайд 51

attribute ::= prefix’ attribute_name[( expression )]

attribute ::= prefix’ attribute_name[( expression )]

Слайд 52

Использование атрибутов для сигналов приведем на примере Т-триггера T-trigger

Использование атрибутов для сигналов приведем на примере Т-триггера

T-trigger

Слайд 53

VHDL-код для данного примера будет следующим entity T_FF is port( clk:

VHDL-код для данного примера будет следующим

entity T_FF is
port( clk: in

std_logic;
Q: out std_logic);
end T_FF;
architecture arch_T_FF of T_FF is
begin
process( clk)
variable x: bit :='0';
begin
if clk='1' then x:= not x; end if;
Q<=x;
end process;
end T_FF;