You are on page 1of 27

Циклы (LOOPS)

„ Бесконечный цикл (Infinite [loop_label]LOOP


Loop) --sequential statement
EXIT loop_label ;
– Loops Infinitely Unless EXIT
Statement Exists
END LOOP;

WHILE <condition> LOOP


„ While Loop --sequential statements
– Проверяется условие END LOOP;
выхода из цикла
FOR <identifier> IN <range> LOOP
„ For Loop --sequential statements
– Итерационный цикл - END LOOP;
Iteration Loop

Copyright © 2003 Тренинг партнер фирмы Altera® в России


1 Санкт-Петербург Автор Антонов А.П.
FOR LOOP с использованием переменной
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY shift4 IS
PORT ( shft_lft : in std_logic;
d_in : in std_logic_vector(3 downto 0);
q_out : out std_logic_vector(7 downto 0));
END shift4;
ARCHITECTURE logic OF shift4 IS Объявление
BEGIN переменной

PROCESS(d_in, shft_lft)
VARIABLE shft_var : std_logic_vector(7 DOWNTO 0);
BEGIN
shft_var(7 downto 4) := "0000";
shft_var(3 downto 0) := d_in;

Инициализация
Copyright © 2003 Тренинг партнер фирмы Altera® в России
2 Санкт-Петербург Автор Антонов А.П. переменной
FOR LOOP с использованием переменной

Разрешает сдвиг влево


IF shft_lft = '1' THEN
FOR i IN 7 DOWNTO 4 LOOP
i – внутренний индекс цикла
shft_var(i) := shft_var(i-4); (не требует объявления)
END LOOP;
shft_var(3 downto 0) := "0000"; Сдвиг влево на 4 разряда
ELSE
shft_var := shft_var;
Заполняет LSBs нулями
END IF;

q_out <= shft_var; Нет сдвига

END PROCESS;
END logic; Значение переменной
присваивается сигналу в конце
процесса.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


3 Санкт-Петербург Автор Антонов А.П.
Атрибуты (ATTRIBUTES)
<signal_name> : IN STD_LOGIC_VECTOR(7 DOWNTO 0)

„ ‘HIGH - 7
„ ‘LOW - 0
„ ‘RIGHT - 0
„ ‘LEFT - 7
„ ‘RANGE - 7 DOWNTO 0
„ ‘REVERSE RANGE - 0 TO 7
„ ‘LENGTH - 8

Copyright © 2003 Тренинг партнер фирмы Altera® в России


4 Санкт-Петербург Автор Антонов А.П.
FOR LOOP: счетчик единиц
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
USE IEEE.std_logic_arith.all;

ENTITY bc IS PORT (invec: in std_logic_vector(31 downto 0);


outvec: out std_logic_vector(7 downto 0));
END bc;
ARCHITECTURE rtl OF bc IS Объявление
переменной
BEGIN
PROCESS(invec)
VARIABLE count: std_logic_vector(7 downto 0);

Copyright © 2003 Тренинг партнер фирмы Altera® в России


5 Санкт-Петербург Автор Антонов А.П.
FOR LOOP: счетчик единиц
BEGIN
Count:=(others=>’0’);
FOR i IN invec’right TO Invec’left LOOP
IF (invec(i)/’0’) THEN Инициализация переменной
count:=count+1;
i – внутренний индекс цикла
END IF; изменяющий свое значение от 0 до 31.
END LOOP;
outvec<=count; Если текущий бит не равен нулю, то
значение счетчика увеличивается на
END PROCESS; единицу.
END rtl;

Значение переменной
присваивается сигналу в конце
процесса.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


6 Санкт-Петербург Автор Антонов А.П.
Два типа процессов
• комбинационный - Combinatorial Process
– синтезируется комбинационная схема. a
Все входы которой должны быть указаны c
в списке чувствительности процесса b
• PROCESS(a, b, sel)
sel

• последовательностный - Sequential Process


d D Q q
•PROCESS(clr, clk)
clk
ENA
CLRN

clr

Copyright © 2003 Тренинг партнер фирмы Altera® в России


7 Санкт-Петербург Автор Антонов А.П.
Задание №8
„ Описать 3 разрядный дешифратор (3->8):
– Используя условный оператора назначения сигнала
– Используя оператор назначения сигнала с выбором.
– Используя оператор case
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


8 Санкт-Петербург Автор Антонов А.П.
Задание №9
„ Описать 3 разрядный шифратор (8->3):
– Используя условный оператора назначения сигнала
– Используя оператор назначения сигнала с выбором.
– Используя оператор case
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


9 Санкт-Петербург Автор Антонов А.П.
Задание №10
„ Описать мультиплексор 4 ->1( числа 8-разрядные):
– Используя условный оператора назначения сигнала
– Используя оператор назначения сигнала с выбором.
– Используя оператор case
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


10 Санкт-Петербург Автор Антонов А.П.
Задание №11
„ Описать демультиплексор 1 ->4 ( числа 8-разрядные):
– Используя условный оператора назначения сигнала
– Используя оператор назначения сигнала с выбором.
– Используя оператор case
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


11 Санкт-Петербург Автор Антонов А.П.
Задание №12
„ Описать преобразователь кода двоичный ->семисегментный (числа от 0 до
9):
– Используя условный оператора назначения сигнала
– Используя оператор назначения сигнала с выбором.
– Используя оператор case
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


12 Санкт-Петербург Автор Антонов А.П.
Задание №13
„ Описать преобразователь кода двоичный ->двоично-десятичный (
двоичный код- 4 разряда, двоично-десятичный 5 разрядов):
– Используя условный оператора назначения сигнала
– Используя оператор назначения сигнала с выбором.
– Используя оператор case
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


13 Санкт-Петербург Автор Антонов А.П.
Задание №14
„ Описать компаратор на =, >, <:
– Используя условный оператора назначения сигнала
– Используя оператор IF
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете
синтезированную пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при
использовании разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех
указанных выше пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


14 Санкт-Петербург Автор Антонов А.П.
Задание №15
„ Описать без знаковые сумматоры (8 разрядные), т.е. работающие только с
положительными числами: простейший, с выходом переноса, с выходом и
входом переноса.
– Используя тип данных integer
– Используя тип данных std_logic_vector
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


15 Санкт-Петербург Автор Антонов А.П.
Задание №16
„ Описать сумматоры (8 разрядные), работающие с положительными и
отрицательными (представленными в доп.коде) числами: простейший, с
выходом переноса\заема .
– Используя тип данных integer
– Используя тип данных std_logic_vector
„ реализовать в пакете Quartus как отдельные проекты:
– Тип данных, используемый в проектах – std_logic
– каждый проект реализовать в отдельной папке
– осуществить ввод проекта в текстовом виде
– осуществить компиляцию проекта
– с помощью RTL viewer проанализировать и отобразить в отчете синтезированную
пакетом схему.
– Осуществить сравнение аппаратных затрат на реализацию при использовании
разных операторов.
– Осуществить функциональное моделирование и привести результаты.
Ожидаемые результаты:
• Отчет, в который включены результаты выполнения всех указанных выше
пунктов.
• созданные проекты.

Copyright © 2003 Тренинг партнер фирмы Altera® в России


16 Санкт-Петербург Автор Антонов А.П.
Два типа процессов
• комбинационный - Combinatorial Process
–PROCESS(a, b, sel)

• последовательностный - Sequential Process


d D Q q
– синтезируется схема с памятью.
В списке чувствительности процесса clk
указываются тактовые и управляющие ENA

сигналы CLRN

clr
•PROCESS(clr, clk)

Copyright © 2003 Тренинг партнер фирмы Altera® в России


17 Санкт-Петербург Автор Антонов А.П.
Триггер DFF (использование Clk’event and Clk=‘1’)

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
d D Q q
ENTITY dff_a IS
PORT ( d : in std_logic; clk
clk : in std_logic; ENA
q : out std_logic CLRN
);
END dff_a;

ARCHITECTURE behavior OF dff_a IS clk’event and clk=‘1’


BEGIN
PROCESS (clk) – clk имя тактового сигнала
BEGIN – ‘event атрибут (Attribute),
IF clk'event and clk = '1' THEN сигнализирует об изменении
q <= d; сигнала
END IF;
END PROCESS; – clk=‘1’ – определяет
END behavior; синхронизацию по переднему
фронту тактового сигнала
Copyright © 2003 Тренинг партнер фирмы Altera® в России
18 Санкт-Петербург Автор Антонов А.П.
Триггер DFF с асинхронным сбросом
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;

ENTITY dff_clr IS d D Q q
PORT ( clr : in bit;
d, clk : in std_logic; clk
q : out std_logic ENA
); CLRN
END dff_clr;
clr
ARCHITECTURE behavior OF dff_clr IS
BEGIN
PROCESS(clk, clr) Проверка данного условия
BEGIN
осуществляется до проверки
IF clr = '0' THEN переднего фронта тактового
q <= '0';
сигнала. Следовательно асинхронный
ELSIF clk’event and clk=‘1’ THEN сброс имеет абсолютный приоритет
q <= d; и не зависит от тактового сигнала
END IF;
END PROCESS;
END behavior;
Copyright © 2003 Тренинг партнер фирмы Altera® в России
19 Санкт-Петербург Автор Антонов А.П.
Сколько триггеров?
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY reg1 IS
PORT ( d : in STD_LOGIC;
clk : in STD_LOGIC;
q : out STD_LOGIC);
END reg1;

ARCHITECTURE reg1 OF reg1 IS


SIGNAL a, b : STD_LOGIC;
BEGIN
PROCESS (clk)
BEGIN
IF clk’event and clk=‘1’ THEN
a <= d;
b <= a;
q <= b;
END IF;
END PROCESS;
Copyright © 2003 Тренинг партнер фирмы END
Altera® reg1;
в России
20 Санкт-Петербург Автор Антонов А.П.
Сколько триггеров?

„ Присвоение значения сигналу внутри оператора


IF-THEN, в котором проверяется условие
синхронизации, приводит к использованию
триггера.
a D Q
b D Q q
d D Q

clk clk clk


ENA ENA ENA
CLRN CLRN CLRN

Copyright © 2003 Тренинг партнер фирмы Altera® в России


21 Санкт-Петербург Автор Антонов А.П.
Сколько триггеров?
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY reg1 IS
PORT ( d : in STD_LOGIC;
clk : in STD_LOGIC;
q : out STD_LOGIC);
END reg1;
ARCHITECTURE reg1 OF reg1 IS
SIGNAL a, b : STD_LOGIC; Присвоение
BEGIN значения сигналу
PROCESS (clk) вынесено из
процесса
BEGIN
IF clk’event and clk=‘1’ THEN
a <= d;
b <= a;
END IF;
END PROCESS;
q <= b;
ENDв России
Copyright © 2003 Тренинг партнер фирмы Altera®
22
reg1;
Санкт-Петербург Автор Антонов А.П.
Сколько триггеров?

a D Q
q
d D Q

clk clk
ENA ENA
CLRN CLRN

Copyright © 2003 Тренинг партнер фирмы Altera® в России


23 Санкт-Петербург Автор Антонов А.П.
Сколько триггеров?
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY reg1 IS
PORT ( d : in STD_LOGIC;
clk : in STD_LOGIC;
q : out STD_LOGIC);
END reg1;

ARCHITECTURE reg1 OF reg1 IS


BEGIN
PROCESS (clk)
VARIABLE a, b : STD_LOGIC; Используются переменные
BEGIN
IF clk’event and clk=‘1’ THEN
a := d;
b := a;
q <= b;
END IF;
END PROCESS;
END reg1;
Copyright © 2003 Тренинг партнер фирмы Altera® в России
24 Санкт-Петербург Автор Антонов А.П.
Сколько триггеров?

„ Значения переменным присваиваются сразу


„ Значения сигналов изменяются по переднему
фронту тактового сигнала

d D Q q

clk
ENA
CLRN

Copyright © 2003 Тренинг партнер фирмы Altera® в России


25 Санкт-Петербург Автор Антонов А.П.
Использование переменных

„ Использование переменных (Variable) внутри


оператора IF-THEN, в котором проверяются
условия синхронизации, в общем случае не ведет
к использованию триггеров
– исключение: если переменная используется в правой
части оператора присваивания до того как ей было
задано значение, то для хранения ее значения будет
использован триггер
„ Присвоение значения переменной не
предполагает аппаратную реализацию устройства
памяти (триггера)

Copyright © 2003 Тренинг партнер фирмы Altera® в России


26 Санкт-Петербург Автор Антонов А.П.
Пример - счетчик с использованием переменных

LIBRARY IEEE; „ Счетчик – накапливающий


USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all; сумматор, к содержимому
ENTITY count_a IS
PORT (clk, rst, updn : in std_logic; которого всегда добавляется
q : out std_logic_vector(15 downto 0));
END count_a; (или вычитается ) ‘1’
ARCHITECTURE logic OF count_a IS
BEGIN
PROCESS(rst, clk)
„ Аппаратные затраты - 17 LEs
VARIABLE tmp_q : std_logic_vector(15 downto 0);
BEGIN Переменной присваивается значение
IF rst = '0' THEN арифметического выражения
tmp_q := (others => '0');
ELSIF clk’event and clk=‘1’ THEN
IF updn = '1' THEN
tmp_q := tmp_q + 1;
ELSE
tmp_q := tmp_q - 1;
END IF;
END IF; Значение переменной присваивается
q <= tmp_q;
END PROCESS;
сигналу
END logic;

Copyright © 2003 Тренинг партнер фирмы Altera® в России


27 Санкт-Петербург Автор Антонов А.П.