Имя элемента
|
Функция элемента
|
Задержка (ns)
|
N
|
Y=1
|
|
NAO3
|
Y=5
|
|
NO2
|
Y=3
|
|
NO3A2
|
|
5
|
NA2
|
|
2
|
NAOA2
|
|
4
|
A2
|
y=AB
|
2
|
A4
|
y=ABCD
|
4
|
1. Выбор аппаратных
средств
схема комбинационный
моделирование
Аппаратную реализацию данного
проекта произведем на основе ПЛИС. ПЛИС - программируемая логическая
интегральная схема (англ. programmable logic device, PLD) - это большие интегральные микросхемы матричного типа,
позволяющие программным способом реализовать логические функции большой
сложности. Другими словами это электронный компонент, используемый для создания
цифровых интегральных схем.
В отличие от обычных цифровых
микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся
посредством программирования (проектирования). Для программирования
используются программаторы и отладочные среды, позволяющие задать желаемую
структуру цифрового устройства в виде принципиальной электрической схемы или
программы на специальных языках описания аппаратуры HDL (англ. Hardware description language) - VHDL, Verilog, Abel, и т.д. Описание нашего
проекта произведем на VHDL (англ. Very high speed integrated circuits Hardware Description Language), т.к. VHDL является базовым языком при разработке аппаратуры современных
вычислительных систем.
Для реализации проекта используем
ПЛИС фирмы Xilinx потому что:
основанная в 1984 году американская
компания Xilinx является одним из лидеров в области производства ПЛИС-микросхем и
занимает более 50% рынка ПЛИС;
хорошая техническая поддержка. На
сайте www.xilinx.com можно найти всю необходимую информацию для работы с микросхемами
данной фирмы;
программное обеспечение ISE фирмы Xilinx давно известно как
средство, обеспечивающее высокую производительность разрабатываемых устройств с
программируемой логикой, при этом ISE является простым в освоении и недорогим продуктом. Например, ISE WebPACK является бесплатным,
свободно загружаемым через интернет средством проектирования, которое
обеспечивает сквозной маршрут проектирования для ПЛИС. Этот САПР включает
синтез и моделирование на HDL, размещение и трассировку проектов, а также программирование
кристаллов по JTAG-интерфейсу.
В настоящее время наибольшую
распространенность получили два типа архитектур ПЛИС: CPLD и FPGA.
· CPLD (англ. complex programmable logic device). Серии ПЛИС типа CPLD: CoolRunner и XC9500, предназначенных для использования в различных портативных
устройствах - мобильных телефонах, GPS-навигаторах, КПК и т.д. Для микросхем данного типа главными
критериями является минимизация размеров и потребляемой мощности. CPLD состоит
из блоков, расположенных на одном кристалле. Каждый блок соединен с блоками
ввода-вывода, осуществляющими высокоскоростной обмен с другими микросхемами,
кроме того, все блоки связаны между собой внутренними параллельными шинами. На
Рисунке 2 приведен пример внутренней структуры PAL-like блоков и их соединения
в CPLD.
Рисунок 2. Структура CPLD
Блоки состоят из макроячеек в состав
которых в свою очередь входят элементы или и исключающее или соединенными между
собой для выполнения определенных логических функций. Макроячейка также включает
триггер, мультиплексор и буфер с тремя состояниями.
Рисунок 3. Внутренняя организация
блока микросхемы CPLD
Буфер позволяет настраивать выводы
чипа, как на ввод, так и на вывод сигналов. Чтобы вывод микросхемы мог стать
входным, достаточно перевести соответствующий буфер в высокоимпедансное
состояние. Дальнейший путь прохождения сигнала может быть запрограммирован. На
схеме это указывается символом Х, стоящим на пересечении вертикальных и
горизонтальных линий.
Для ПЛИС данной архитектуры
характерно крайне низкая потребляемая мощность в статическом режиме
(потребляемый ток порядка десятков микроампер), которая линейно возрастает с
увеличением тактовой частоты. Также для данной архитектуры характерны жесткие
временные задержки между макроячейками, а следовательно и выводами микросхемы.
Типичное время задержки между выводами (pin-to-pin) составляет единицы
наносекунд. Прошивка ПЛИС данной архитектуры хранится внутри микросхемы в
энергонезависимой памяти.
· FPGA (англ. field-programmable gate array). Для
реализации крупных проектов удобно использовать чипы, обладающие еще большей
логической вместимостью. Такими чипами и являются программируемые пользователем
вентильные матрицы FPGA фирмы Xilinx семейств Virtex, Kintex, Spartan, Artix. По своей структуре FPGA отличаются от CPLD, потому что не
содержат матриц И и матриц ИЛИ. Вместо этого, FPGA включают в себя специальные
логические блоки LUT (англ. Lookup tables) - таблицы преобразования,
позволяющие реализовывать логические функции для реализации требуемых функций.
Общая структура FPGA изображена на Рисунке 4.
Рисунок 4. Общая структура FPGA
Типичный чип FPGA содержит три типа
элементов: логические блоки, блоки ввода-вывода для соединения с внешними
выводами чипа и программируемые ключи для создания соединений между блоками.
Логические блоки размещаются в узлах решетки вертикальных и горизонтальных
проводников, с помощью которых можно создавать самые различные соединения между
блоками. Соединения являются программируемыми и осуществляются путем настройки
внутренних соединительных ключей, обозначенных на рисунке красным цветом.
Соединения с блоками ввода-вывода также программируются. У различных серий FPGA
реальное число программируемых ключей значительно отличается, что необходимо
учитывать при выборе фирмы-изготовителя и конкретных микросхем.
Каждый логический блок LUT в FPGA
обычно имеет небольшое число входов и один выход. Каждый LUT содержит
запоминающие ячейки, которые используются при реализации небольшой логической
функции. Каждая ячейка способна хранить значение одной логической переменной,
т.е. 0 или 1. Размер LUT определяется числом входов, которое зависит от типа
микросхемы. На рисунке 5 показана структура небольшого LUT. Он имеет два входа
x1 и x2, и один выход f.
Рисунок 5. Структура LUT
, изображенный на рисунке 5,
способен реализовать любую логическую функцию двух переменных. Поскольку
таблица истинности функций двух переменных имеет четыре строки, этот LUT имеет
четыре запоминающих ячейки. Одна ячейка соответствует значению выхода в каждой
строке таблицы истинности. Входные переменные x1 и x2 используются как адресные
входы трех мультиплексоров, которые в зависимости от значений x1 и x2 передают
содержание одной из этих четырех запоминающих ячеек на выход LUT. Для
программирования LUT необходимо лишь сохранить таблицу истинности реализуемой
функции в ячейках памяти блока.
Запоминающие ячейки LUT в FPGA
энергозависимы. Это означает, что они теряют свое содержимое всякий раз при
отключении питания. Следовательно, чип FPGA должен запрограммироваться каждый
раз при включении питания. Обычно, данные, необходимые для программирования
хранятся в микросхеме ППЗУ, расположенной на той же плате, что и чип FPGA.
Данные, хранимые в ППЗУ, автоматически переписываются в ячейки памяти FPGA при
включении питания.
Современные ПЛИС FPGA содержат
аппаратные умножители в том числе с накоплением (MAC), блоки внутренней памяти,
аппаратные интерфейсы для DDRx SDRAM, аппаратные ядра PCIexpress, встроенные
микропроцессорные ядра, трансиверы для организации скоростной передачи данных
между ПЛИС и внешними устройствами.
Для реализации нашего проекта
выберем CPLD микросхему XC9536XL семейства XC9500XL фирмы Xilinx потому что:
наш проект достаточно простой,
реализует лишь логические функции, поэтому емкости данной микросхемы вполне
достаточно. Также данная микросхема полностью совместима по выводам с
микросхемой XC9572XL, которая имеет в 2 раза большую емкость и может быть использована
при расширении проекта;
достаточное количество
пользовательских входов-выходов;
прошивка ПЛИС данной архитектуры
хранится внутри микросхемы в энергонезависимой памяти;
задержка от входа до выхода по всем
выводам до 5 нс.
2. Описание программы на
VHDL
Для моделирования запустим среду ISE
Xilinx:
Рисунок 6. Запуск ISE Xilinx
Создаем новый проект с названием Curs.
Рисунок 7. Создание проекта
Введем дополнительные параметры
проекта
Рисунок 8. Ввод дополнительных
данных
Разметим схему проекта изображенную
на рисунке 1. Пронумеруем на схеме все модули и внутренние сигналы нашего
проекта, обозначив их буквами U и S соответственно (рисунок 9).
Рисунок 9. Схема проекта с
обозначенными модулями и сигналами.
Составим описание каждого модуля,
входящего в схему, на языке VHDL.
Описание модуля в VHDL состоит из
3-х частей:
. описание библиотек;
. блок entity с описанием входов и
выходов;
. реализация architecture.
Учитывая введенные обозначения и
данные таблицы 1, добавим в проект программы Xilinx ISE описание каждого модуля
схемы. Для этого требуется выбрать пункт «New Source.», как показано на рисунке
ниже:
Рисунок 10. Создание файла проекта
Далее в качестве типа добавляемого
файла установить «VHDL Module» и два раза нажать кнопку Next.
Рисунок 11. Добавление в проект
файла с VHDL описанием модуля схемы
Названия файлов для элементов будем
брать из колонки «Имя элемента» таблицы 1.
) Файл описания модулей U3, U4, U5,
U6, U7, U8, U9, U10, U11, U12 (файл N.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;N is(A: in STD_LOGIC;: out STD_LOGIC);N;Behavioral
of N is<=NOT A AFTER 1 NS;Behavioral;
) Файл описания модулей U2 (файл
A2.vhd):IEEE;IEEE.STD_LOGIC_1164.ALL;A2 is(A, B, C, D: in STD_LOGIC;: out
STD_LOGIC);A2;Behavioral of A2 is
begin
Y<= A AND B AFTER 2
NS;Behavioral;
3) Файл описания модуля U16, U18 (файл NAO3.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;NAO3 is(A, B, C, D: in STD_LOGIC;: out
STD_LOGIC);NAO3;Behavioral of NAO3 is<=NOT (A AND (B OR C OR D)) AFTER 5
NS;Behavioral;
4) Файл описания модуля U1 (файл NO2.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;NO2 is(A, B: in STD_LOGIC;: out
STD_LOGIC);NO2;Behavioral of NO2 is<=NOT (A OR B) AFTER 3 NS;Behavioral;
) Файл описания модуля U15 (файл NO3A2.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;NO3A2 is(A: in STD_LOGIC;: in STD_LOGIC;: in
STD_LOGIC;: in STD_LOGIC;: out STD_LOGIC);NO3A2;Behavioral of NO3A2 is=<=
NOT (A OR B OR (D AND C)) AFTER 5 NSBehavioral;
) Файл описания модуля U13 (файл NAOA2.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;NAOA2 is(A: in STD_LOGIC;: in STD_LOGIC;: in
STD_LOGIC;: in STD_LOGIC;: out STD_LOGIC);NAOA2;Behavioral of NAOA2 is<=NOT
(A AND (B OR (C AND D))) AFTER 4 NS;Behavioral;
7) Файл описания модуля U14 (файл NA2.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;NA2 is(A: in STD_LOGIC;: in STD_LOGIC;: out
STD_LOGIC);NA2;Behavioral of NA2 is<= NOT (A AND B);Behavioral;
8) Файл описания модулей U17 (файл A4.vhd):
library
IEEE;IEEE.STD_LOGIC_1164.ALL;A4 is(A: in STD_LOGIC;: in STD_LOGIC;: in
STD_LOGIC;: in STD_LOGIC;: out STD_LOGIC);A4;Behavioral of A4 is<= A AND B
AND C AND D; Behavioral;
Добавим в проект файл полного
структурного описания схемы (файл circuit.vhd). Данный файл требуется установить как модуль верхнего
уровня, выбрав во всплывающем меню пункт «Set as Top Module».
Рисунок 12. Установка файла circuit.vhd. как модуля
верхнего уровня.
) Файл описания всей схемы проекта cicuit.vhd:
library
IEEE;IEEE.STD_LOGIC_1164.ALL;circuit is(X1, X2, X3, X4: in STD_LOGIC;, Y1, Y3:
inout STD_LOGIC;, Y5: out STD_LOGIC);circuit;struct of circuit isN(A: in
STD_LOGIC;: out STD_LOGIC);component;NA3O2(A, B, C, D: in STD_LOGIC;: out
STD_LOGIC);component;NA4(A, B, C, D: in STD_LOGIC;: out STD_LOGIC);component;NAO3(A,
B, C, D: in STD_LOGIC;: out STD_LOGIC);component;NO2(A, B: in STD_LOGIC;: out
STD_LOGIC);component;NO3(A, B, C: in STD_LOGIC;: out
STD_LOGIC);component;NO4(A, B, C, D: in STD_LOGIC;: out
STD_LOGIC);component;NOAO2(A, B, C, D: in STD_LOGIC;: out
STD_LOGIC);component;O2(A, B: in STD_LOGIC;: out STD_LOGIC);component;S1, S2,
S3, S4, S5, S6, S7, S8, S9, S10, S11, S12: STD_LOGIC;
U1: N port map (Y1,
S1);: N port map (X1, S2);: N port map (X4, S3);: NO2 port map (X2, Y4, S4);: N
port map (X3, S5);: N port map (X2, S6);: O2 port map (X1, S1, S7);: N port map
(S1, S8);: O2 port map (X1, S1, S9);: NA4 port map (X3, X1, S6, X4, S10);: NO2
port map (S2, X4, S11);: NA3O2 port map (S3, S4, X3, X1, S12);: NO4 port map
(S5, S3, X1, S6, Y3);: NOAO2 port map (S3, S7, Y3, S8, Y2);: NO3 port map (S5,
S2, X4, Y4);: NAO3 port map (S12, S11, X3, S6, Y1);: NA3O2 port map (S9, S10,
X4, S6, Y5); struct;
3. Тестирование и анализ
результата
Для моделирования цифровой схемы
следует в закладке Design установить пункт Simulation.
Рисунок 13. Вкладка Simulation
Добавим файл
cicuit_tb.vhd для описания симуляции проекта, выбрав тип файла VHDL TestBench в
меню NewSource. В файле cicuit_tb.vhd схема проекта cicuit.vhd представлена в
виде компонента. В процессе stim_proc задаются входные воздействия для X1, X2,
X3, X4 согласно таблице 2. Значения входных портов изменяются через интервал
времени time_const, который нужно выбирать так, чтобы схема успевала реагировать
на изменения входных данных.
Рисунок 14. Создание файла симуляции
проекта circuit_tb
Файл описания симуляции схемы
проекта cicuit_tb.vhd:
USE
ieee.std_logic_1164.ALL;
circuit_tb IScircuit_tb;
behavior OF circuit_tb IS
circuit(: IN std_logic;:
IN std_logic;: IN std_logic;: IN std_logic;: INOUT std_logic;: INOUT
std_logic;: INOUT std_logic;: OUT std_logic;: OUT std_logic
);COMPONENT;
InputsX1: std_logic:=
'0';X2: std_logic:= '0';X3: std_logic:= '0';X4: std_logic:= '0';
BiDirsY4: std_logic;Y1:
std_logic;Y3: std_logic;
OutputsY2: std_logic;Y5:
std_logic;
time_const: time:= 20
ns;
: circuit PORT MAP
(=> X1,=> X2,=> X3,=> X4,=> Y4,=> Y1,=> Y3,=> Y2,=>
Y5
);
Stimulus process_proc:
process
hold reset state for 10
ns.for 10 ns; <='0'; X2<='0'; X3<='0'; X4<='0';for
time_const;<='0'; X2<='0'; X3<='0'; X4<='1';for
time_const;<='0'; X2<='0'; X3<='1'; X4<='0';for
time_const;<='0'; X2<='0'; X3<='1'; X4<='1';for
time_const;<='0'; X2<='1'; X3<='0'; X4<='0';for time_const;<='0';
X2<='1'; X3<='0'; X4<='1';for time_const;<='0'; X2<='1';
X3<='1'; X4<='0';for time_const;<='0'; X2<='1'; X3<='1';
X4<='1';for time_const;<='1'; X2<='0'; X3<='0'; X4<='0';for
time_const;<='1'; X2<='0'; X3<='0'; X4<='1';for
time_const;<='1'; X2<='0'; X3<='1'; X4<='0';for
time_const;<='1'; X2<='0'; X3<='1'; X4<='1';for
time_const;<='1'; X2<='1'; X3<='0'; X4<='0';for
time_const;<='1'; X2<='1'; X3<='0'; X4<='1';for
time_const;<='1'; X2<='1'; X3<='1'; X4<='0';for
time_const;<='1'; X2<='1'; X3<='1'; X4<='1';;process;;
Для запуска процесса симуляции
необходимо во вкладке Design, при отмеченном Simulation, выделить файл описания симуляции проекта cicuit_tb.vhd, а затем во вкладке Process запустить Simulate Behavioral Model.
Рисунок 15. Запуск симуляции проекта
Для проверки правильности описания
схемы следует сравнить временную диаграмму и значения таблицы 2. При проверке
требуется учитывать влияние на прохождение сигнала временных задержек
компонентов схемы.
Временная диаграмма для
рассматриваемой схемы имеет вид:
Рисунок 16. Временная диаграмма
работы схемы
При проверке видно, что работа схемы
соответствует заданию.
Для верификации также следует
сравнить заданную структурную схему с RTL представление синтезированной схемы.
Для этого надо во вкладке Desigin, при выбранном Implementation, выделить модуль верхнего уровня (circuit.vhd), а в закладке Process выбрать пункт View RTL
Schematic:
Далее
в появившемся диалоге выбрать пункт «Start with a schematic of the top-level block».
Из RTL схемы видно, что
синтезированная схема соответствует исходной.
Список литературы
1) Зотов В.Ю.
Проектирование цифровых устройств на основе ПЛИС фирмы XILINX в САПР WebPACK
ISE. - М.: Горячая линия-Телеком, 2003. - 624 с.
2) Бибило П.Н.
Основы языка VHDL: изд 3-е, доп. - М: Издательство ЛКИ, 2007 - 328 с.