Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Страница 1 из 2 1, 2  Следующий

Предыдущая тема Следующая тема Перейти вниз

Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Сб Окт 31 2015, 03:38

1. Начало.

Предисловие.

____Создам пока тему, с таким замысловатым названием. По большей части для себя, всё равно на форуме общения нет, может так даже и лучше, спокойнее, меньше мусорной информации. Тема так сказать на будущее для систематизации знаний по VHDL, по освоению САПР ISE, по освоению микросхем ПЛИС фирмы Xilinx. Так как по прошествии определённого времени и освоения всего выше перечисленного, сформировались некоторые понятия что изучать, в какой последовательности и как. А так как информация вся разбросана по разным источникам, некоторая устаревает, другая на тарабарском языке типа английского и соответственно для обычного человека говорящего только на русском, мало понятна, хочется всё собрать воедино, изучить её по мере сил и возможности, наличия свободного времени, сделать её доступной для начинающего и тут представить.
____Для чего? Ответ прост, когда так её оформляешь, стараясь как бы объяснить, то она лучше усваивается, и всегда можно вернуться к началу, что-то перечитать и вспомнить, если что-то забылось. К тому же свойство памяти нашего мозга имеет ограничения, и если к чему-то не возвращаешься или не пользуешься какой-то информацией, примерно пол года, то она вообще забывается частично или полностью, хорошо если просто помещается на более глубокий уровень доступа и её можно от туда изъять. Поэтому буду стараться всё оформлять максимально "разжёвано", с примерами, с подробными описаниями и картинками, так как зрительная память, как один из каналов ввода информации в наш мозг, очень полезна.
____Думаю суть данной темы понятна, что не понятно, включите воображение, при наличии данной функции естественно и додумайте, перефразируйте самостоятельно.
____Данная тема будет служить, для меня любимого и для вас всех, хорошим учебным пособием в понимании основ микросхем ПЛИС выполненных по технологии FPGA и проектирования цифровых устройств. Что же такое FPGA? Где они используются? Как проектируются цифровые устройства? На все эти вопросы мы постараемся найти ответы в этой теме. Используя все доступные источники информации.

Поехали...

Введение.

____При освоении данного направления электроники, а именно цифровых устройств на базе микросхем ПЛИС, потребуется освоить две части: аппаратную и программную. В аппаратной части прежде всего необходимо определиться с типом микросхемы ПЛИС, которую будем использовать для своих проектов. По мере приобретения опыта можно будет использовать микросхемы ПЛИС и других серий, что также потребует какого-то времени на их освоение. Пока же мы остановимся на семействе Spartan-3A и микросхеме ПЛИС из этого семейства XC3S200A-4VQG100C. После выбора конкретной микросхемы ПЛИС необходимо будет освоить работу с САПР ISE. И детально изучить язык описания аппаратуры VHDL.
____ПЛИС – что это такое? Это очень интересный вопрос, если на него ответить просто, то это новый вид микросхем. Революция в мире цифровой электроники!
____Если быть более серьёзным, то ПЛИС – это программируемые логические интегральные схемы. Их появление можно отсчитывать с 1985 года, когда американская фирма «Xilinx» вышла на рынок с новым типом логических интегральных микросхем, выполненных по технологии FPGA – перепрограммируемые пользователем базовые матричные кристаллы (Field Programmable Gate Array). Основная их особенность, это использование для конфигурации энергозависимой памяти, которая требует инициализации после включения питания. Данная технология позволила кардинальным образом сократить время разработки готового устройства. Даёт возможность реконфигурации кристалла в домашних условиях, что сокращает стоимость разработки сложных устройств и делает их разработку доступной практически любому инженеру или любителю электроники. Так же появились вполне доступные по цене средства моделирования и макетирования в виде печатных плат с уже установленной на ней микросхемой ПЛИС. Такие платы могут быть приобретены любым частным лицом. Используя язык описания аппаратуры VHDL и инструментальные средства, можно самостоятельно спроектировать и построить любую сложную цифровую систему, в том числе и микропроцессор.
____Данная тема будет охватывать не только семейство Spartan-3А и Spartan-6 фирмы Xilinx, но и всю необходимую информацию, для самостоятельного проектирования любых цифровых систем различной сложности.
____Более детально, при желании, с продукцией фирмы Xilinx можно ознакомиться на сайте по адресу (www.xilinx.com).


* Для освоения мы будем использовать САПР Xilinx ISE Design Suite  14.7 Страница на офф. сайте Xilinx
Поэтому желательно её сразу установить.
* В плане железа будем ориентироваться на микросхемы ПЛИС семейства: Spartan-3A и Spartan-6, но и не только.
* А также, язык описания аппаратуры VHDL.

Общие вопросы.

____Понятие ПЛИС подразумевает, что это микросхемы большой и сверхбольшой степени интеграции, а также возможность пользователя самостоятельно их программировать.
____Способы программирования микросхем ПЛИС могут быть самые разные. Например, с помощью специального оборудования (программаторов), с помощью кабеля от ПЭВМ, с помощью микропроцессора или ПЗУ, находящихся на одной плате с микросхемой ПЛИС и др. способами. Главное, что пользователь (разработчик) может купить готовую ПЛИС и сам её запрограммировать в домашних (лабораторных) условиях.
____Программирование ПЛИС заключается в изменении её внутренней архитектуры для выполнения определённых функций. Так к примеру, стандартные логические микросхемы выполняют заранее определённые функции, которые были определены на стадии их производства и в последствии изменить их не возможно. А микросхема ПЛИС может выполнять те функции, которые для неё определит пользователь. Все микросхемы ПЛИС выпускаются производителями незапрограммированными, т. е. изначально ПЛИС не выполняет никаких функций и только после программирования её функциональность будет определена в соответствии с кодом написанным пользователем.
____Если после программирования и выключения питания микросхема ПЛИС сохраняет свою внутреннюю структуру и может выполнять заданные функции при каждом следующем включении питания, то правильно говорить о программировании ПЛИС. Такие ПЛИС также называют энергонезависимыми или выполненными по технологии CPLD. Энергонезависимые микросхемы ПЛИС можно вначале программировать с помощью программатора, а затем устанавливать на плату (как микросхемы ПЗУ), а также можно программировать уже после установки на плату. То есть программировать в системе (In-System Programmable - ISP).
____В случае когда после программирования и выключения питания микросхема ПЛИС не сохраняет свою внутреннюю структуру (т. е. является энергозависимой) и при следующем включении питания её необходимо настраивать заново, говорят о конфигурировании микросхемы ПЛИС. Конфигурирование ПЛИС всегда выполняется после установки микросхемы ПЛИС на плату. Современные ПЛИС допускают десятки тысяч перепрограммирований и неограниченное число раз конфигурирований.

Базовые понятия.

____Что такое FPGA? Это микросхемы ПЛИС, выполненные, например, по технологии FPGA (Field Programmable Gate Array), представляющие собой логические устройства, содержащие двумерный массив универсальных логических ячеек и программируемых переключателей. Это если упрощённо, так как в каждом семействе микросхем ПЛИС имеются свои особенности, которые мы естественно детально рассмотрим. Логические ячейки конфигурируются так, чтобы они выполняли необходимые элементарные функции, а программируемые переключатели осуществляют требуемое межсоединение логических ячеек. Проект, требующий разработки, может быть реализован с помощью определения функций каждой логической ячейки и выборочной установки каждого программируемого переключателя. В архитектуру данных интегральных микросхем включено также огромное многообразие аппаратных блоков, таких как DSP-ядра, блоки памяти большой ёмкости, процессорные и сопроцессорные ядра, а также различные интерфейсные модули. Данные интегральные микросхемы также могут работать на относительно высоких частотах, что позволяет использовать их в самых передовых разработках. FPGA, однако, теряют свою конфигурацию при отключении питания, что приводит к необходимости применения внешней памяти.


FPGA занимают промежуточное положение между сравнительно простыми CPLD и сложными ASIC. Их функциональность может быть задана достаточно быстро, без применения сложного технологического оборудования. Они могут содержать миллионы логических вентилей и, следовательно, реализовывать чрезвычайно сложные функции, которые изначально могли быть реализованы только с помощью ASIC. Данное положение FPGA позволяет использовать их в ряде важных технических решений, таких как:
* Прототипирование ASIC. Данное решение позволяет оценить работу разрабатываемой микросхемы в реальных условиях, а также в сотни раз сократить время моделирования при ее тестировании;
* Создание конечных изделий для небольших рынков. Вследствие того, что стоимость FPGA существенно меньше стоимости разработки ASIC, для небольших партий изделий данное решение оказывается единственным возможным.
* Создание специфических сопроцессоров для работы в составе системы совместно с ведущим процессором. Данное решение используется как аппаратное ускорение программных алгоритмов, вследствие возможности распараллеливания вычислительной задачи;
* Цифровая обработка сигналов. Современные FPGA содержат аппаратные DSP-ядра (Digital Signal Processing), что в сочетании с большими объемами внутренней оперативной памяти и возможностью использования дополнительных логических функций дает в ряде случаев преимущества над традиционными подходами, которые предполагают использование специально разработанных DSP-процессоров;
* Физический уровень передачи данных. FPGA используются как связующее звено, выполняющее функцию интерфейса, что в сочетании с аппаратными высокоскоростными приемопередатчиками позволяет реализовывать сетевые и коммуникационные функции в одном устройстве.

Принципиальная структура FPGA.

Принципиальная структура FPGA устройства показана на рисунке выше. Как видно из рисунка, структурно, FPGA состоит из следующих компонент:
* Logic Cell. Логическая ячейка обычно содержит небольшие комбинационные схемы с перестраиваемой конфигурацией и один или несколько триггеров D-типа;
* Macro Cell. Макро ячейка представляет из себя некоторый законченный физический блок, дополняющий базовый функционал FPGA. Т.е. Блок спроектированный и изготовленный на транзисторном уровне. Обычно используют макро ячейки, содержащие блоки памяти, комбинационные умножители, схемы управления временем, периферийные схемы. Продвинутые FPGA устройства могут даже содержать одно или несколько готовых процессорных ядер;
* S. Представляет собой программируемый переключатель.

Логическая ячейка может быть сконфигурирована таким образом, чтобы выполнять элементарную функцию, а программируемый переключатель может быть выбран, чтобы осуществлять межсоединения среди логических ячеек. Выбранный проект (проект, требующий разработки) может быть реализован с помощью определения функций каждой логической ячейки и выборочной установки каждого программируемого переключателя. Результатом проектирования цифрового устройства для FPGA как раз и является файл, содержащий конфигурацию некоторого количества логических ячеек и межсоединений, реализующих требуемое поведение. На последнем этапе проектирования данный файл используют для конфигурации некоторой целевой FPGA.  Поскольку процесс конфигурации выполняют чаще всего в «полевых условиях», нежели чем на заводе, то и устройство получило название: программируемое в полевых условиях (field-programmable).


Основные понятия.

Интерфейс — описывает наше с вами устройство, как черный ящик с входами и выходами, т. е. главная его задача показать какие входы и выходы есть у нашего устройства для связи с внешним миром.

Архитектура — описывает поведение нашего устройства или раскрывает его внутреннюю структуру, т. е. в архитектуре описывается алгоритм функционирования нашего устройства.
Стоит обратить внимание, что архитектура может быть описана в общем случае двумя вариантами:

  * поведенческим стилем(описывается алгоритм работы устройства);
  * структурным стилем(описывается структура устройства).

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

Операторы языка — операторы в языке бывают последовательные, а бывают параллельные. Параллельные операторы вводятся для того, чтобы отобразить параллельность протекающих в железе процессов. Но любой параллельный оператор можно заменить специальным параллельным оператором процесса с последовательными операторами внутри его, он как раз для этого и предназначен. При помощи параллельных операторов мы описываем как бы элементы схемы которые могут работать одновременно, при моделировании каждому параллельному оператору ставится в соответствие свой процесс. Далее я буду считать каждый параллельный оператор процессом.

Сигналы — связывают между собой процессы. Они являются внешними по отношению к процессу, т. е. процесс может считывать сигнал и выдавать значение в сигнал. Поэтому сигналы могут объявляться только в области деклараций архитектуры. Так же сигналы могут хранить значения, которые необходимо передавать от процесса к процессу.

Переменные — переменные используются внутри параллельного оператора процесса и требуются для описании алгоритма работы процесса. Их надо использовать в тех случаях, когда не требуется переносить информацию от процесса к процессу.

Атрибуты — это значения(характеристики), связанные с какими-либо объектами языка. Например типами, сигналами, переменными и т. д.

Типы — множества значений с какими то общими характеристиками. Характеризуются типы набором значений, которые могут принимать объекты (сигнал, переменные) данного типа, а так же набором операций которые могут выполнятся с объектами данного типа.

Библиотеки и пакеты — пакеты представляют собой структуры в которых хранятся описания различных функций, процедур, компонентов, типов, констант и т. д, все пакеты собираются в библиотеки, которые в последствии подключаются к проектам.
.


Последний раз редактировалось: Viktor2312 (Вс Июн 12 2016, 13:43), всего редактировалось 16 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Сб Окт 31 2015, 04:43

Общая характеристика микросхем ПЛИС.

После появления микросхем ПЛИС в середине 1980-х годов, они сначала использовались исключительно для создания связующей логики, для реализации устройств средней сложности и для решения некоторых задач обработки данных. Но по мере усложнения внутренней структуры и увеличения объема, размещаемых на кристалле вентилей, микросхемы ПЛИС, начали интенсивно использоваться в области сетей и телекоммуникаций, на их основе начали создаваться устройства высокой сложности. Резко возрос спрос в автомобильной и производственных сферах.
Микросхемы ПЛИС начали использовать для создания прототипов заказных микросхем и для создания испытательных стендов. Благодаря низким затратам на производство и возможностью быстро вывести на рынок конечное устройство, они стали использоваться как конечный продукт. А в некоторых сферах стали даже дешевле заказных микросхем.
В результате столь стремительного развития, к настоящему времени, появились высокопроизводительные микросхемы ПЛИС содержащие миллионы вентилей. Некоторые содержат встроенные ядра, высокоскоростные интерфейсы ввода-вывода, и другие устройства, всё это позволяет уменьшить количество корпусов микросхем на плате, вплоть до того, что на плате, при реализации всего устройства, может располагаться только сама микросхема ПЛИС и соединительные разъёмы. Современные микросхемы ПЛИС находят применение практически в любой сфере, включая устройства связи, радиолокации, обработке изображений, цифровой обработке сигналов (ЦОС) и др.
Кроме того, с появлением микросхем ПЛИС выполненных по технологии FPGA возник новый вид систем – системы с перестраиваемой архитектурой (reconfigurable computing).

________________________________________________________________________________
Для пометок.

* Чтобы модуль DCM нормально запустился согласно XAPP462 стр.30 необходимо подавать на вход RST импульс сброса в течении МИНИМУМ 3-Х периодов входной тактовой частоты. Иначе он "мёртвый". (Для семейства Spartan-3). xapp462

* Текст VHDL-модели логического элемента 2ИЛИ с открытым коллектором.

Код:

library ieee;
use ieee.std_logic_1164.all;

entity OR2_OC is
      port (IN1, IN2 : in std_logic; OUT1 : out std_logic );
end entity OR2_OC;

architecture model of OR2_OC is
begin
      process (IN1, IN2)
      begin
            if (IN1 or IN2) = '0' then OUT1 <= '0';
            elsif (IN1 or IN2) = '1' then OUT1 <= 'H';
            else OUT1 <= 'X';
            end if;
            end process;
end architecture model;


В языке VHDL для сигналов типа std_logic есть соответствующее значение 'H'

Логический ноль представляется здесь полноценным сигналом низкого уровня (OUT1 <= '0'), логическая единица - только обозначена (OUT1 <= 'H'). Это намёк на то, что разработчик схемы должен побеспокоиться о том, чтобы обеспечить на выходе полноценный высокий уровень, подключив к нему "подтягивающий" резистор R_pullup.

* Путь основной тактовой частоты показан утолщёнными линиями, он проходит с выделенного входа тактирования (GCLK), через мультиплексоры тактовых сигналов (BUFGMUX), который подключён через схему распределения тактовых сигналов (Global Routing) к входам синхронизации триггеров и других тактируемых элементов.

Рис:



*


Последний раз редактировалось: Viktor2312 (Ср Май 18 2016, 20:17), всего редактировалось 6 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Сб Окт 31 2015, 05:10

Эволюция ПЛИС серии Spartan.

Рассмотрим некоторые вопросы касающиеся эволюции и внутреннего устройства микросхем ПЛИС серии Spartan.

В конце 90-х годов фирма Xilinx начала выпуск микросхем ПЛИС серии Spartan с архитектурой FPGA. За прошедшее время они существенно изменились, превратившись в эффективные и недорогие цифровые устройства, способные функционировать как самостоятельно, так и в составе микропроцессорной системы.

По материалам статьи:
Илья Тарасов "Эволюция ПЛИС серии Spartan".
Из журнала КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 3 '2005 www.kite.ru


Краткий обзор.

Микросхемы ПЛИС серии Spartan являются развитием базовой серии XC4000 (семейства XC4000E, XC4000XL и XC4000XLA). На определённом этапе развития архитектур микросхем ПЛИС оказалось, что можно пойти как по пути реализации наиболее производительных технических решений, так и по пути максимального облегчения и удешевления выпускаемых микросхем с сохранением их основных функций. Подобное разделение и привело к появлению двух параллельно развиваемых семейств: высокопроизводительных hi-end FPGA серии Virtex и более дешёвой серии Spartan, которая позиционируется как замена специализированным микросхемам в мелких партиях изделий.
Первое семейство данной серии называлось собственно Spartan и состояло из 5 устройств ёмкостью от 5 до 40 тыс. эквивалентных логических вентилей (максимум 1862 логические ячейки). Примерно в то же время было выпущено семейство SpartanXL. Отличие между этими семействами заключается в используемом напряжении питания: 5В у Spartan и 3,3В у SpartanXL, которая, тем не менее, допускает работу с 5-вольтовыми устройствами. Архитектура этих семейств базировалась на XC4000, однако сделанные изменения наглядно демонстрировали подход, выбранный Xilinx относительно данной серии. Функциональные возможности логических ячеек были несколько урезаны, однако в общую структуру ПЛИС был внесён ряд дополнений, улучшающих производительность проектов в несложных задачах. В частности, было увеличено количество трассировочных ресурсов внутри матрицы логических ячеек, добавлены специальные трассировочные линии VersaRing, существенно облегчающие подключение матрицы ячеек к выводам ПЛИС, улучшена производительность цепей быстрого переноса. С точки зрения разработчика введённые ограничения прежде всего коснулись одновременного использования входов асинхронного сброса и установки для триггеров логических ячеек. В ячейках в числе прочего был оставлен только один вход асинхронного управления триггером, который мог, впрочем, реализовывать любую из этих функций. Однако в целом архитектура получилась довольно удачной, большинство распространённых схемных решений реализовывалось тем же объёмом ресурсов, что и в XC4000, но общая стоимость новых ПЛИС того же объёма оказалась существенно ниже.
Благодаря относительно низкой для ПЛИС того времени стоимости семейство Spartan сыграло существенную роль в распространении данной технологии. Однако в настоящий момент данные устройства относятся к морально устаревшим. Кроме того, необходимо пояснить ещё один довольно важный момент, связанный с этими семействами микросхем ПЛИС. В 2002 году состоялась смена поколений САПР фирмы Xilinx - на смену пакету Xilinx Foundation Series пришёл САПР Integrated Software Environment. Строго говоря, версия 4.1 содержала как очередную версию Foundation Series, так и новый продукт ISE. Однако дальнейшая поддержка Foundation Series была прекращена. Переход на новую САПР вызвал так же и переход на новый маршрут проектирования микросхем ПЛИС. Если предыдущая линия САПР для внутреннего представления проекта ориентировалась на формат edif, то САПР ISE использует в качестве основного движка язык описания аппаратуры (HDL). Для такого перехода оказалось необходимым переработать файлы описания ПЛИС, подготовив их к работе с новым маршрутом проектирования. При этом семейства Spartan и SpartanXL (как и более ранние FPGA) в число поддерживаемых новой САПР не попали. Фирма Xilinx официально рекомендует использовать для создания проектов для этих семейств ранние версии САПР Xilinx Foundation Series.

Архитектура и основные особенности ПЛИС Spartan.

По всей видимости, разработка новых устройств с использованием ранних семейств Spartan и SpartanXL не представляет интереса. Заметим лишь, что архитектура логических ячеек, ПЛИС Spartan/SpartanXL больше тяготела к серии XC4000. Рассмотрим отличительные особенности архитектуры логических ячеек подобных микросхем ПЛИС. Матрица основных логических ресурсов состоит из конфигурируемых логических блоков (КЛБ). Каждый блок ПЛИС Spartan состоит, в свою очередь, из четырёх логических ячеек. В основе логической ячейки находятся два устройства: генератор логических функций (как правило, 4-входовый) и триггера. Генератор логических функций представляет собой фактически ОЗУ небольшого объёма, хранящее непосредственно таблицу истинности (Look-Up Table, LUT), которую следует реализовать. Для 4-входового устройства достаточно иметь 16 бит статического ОЗУ в каждой таблице. FPGA фирмы Xilinx позволяют также использовать такую таблицу истинности в качестве обычного ОЗУ с организацией 16х1, а также в качестве 16-разрядного сдвигового регистра. Такая особенность архитектуры несколько ухудшает производительность (за счёт необходимости внесения на кристалл дополнительных цепей управления), однако обеспечивает дополнительные возможности как разработчику, так и средствам САПР. В конечном итоге производительность сложного проекта за счёт большей функциональности базовых логических ячеек может оказаться и выше. Второй особенностью, характерной для FPGA Xilinx, является наличие аппаратно реализованных буферов с тремя состояниями, обеспечивающими подключение выходов триггеров логических ячеек к внутренним трассировочным линиям. Подобное решение производит аналогичный эффект - дополнительный буфер несколько увеличивает задержки распространения сигнала (даже если он не используется в проекте), однако появляется дополнительная возможность для организации сложных мультиплексоров. Необходимо заметить, что в целом ряде семейств FPGA внутренние буферы с тремя состояниями только эмулируются, но реально на кристалле не присутствуют. Как можно будет увидеть в дальнейшем, эта базовая архитектура на протяжении эволюции серии Spartan неоднократно изменялась.
Появившееся в 2000 году семейство Spartan-II привнесло в архитектуру low-end микросхем ПЛИС достаточно много интересных нововведений. Прежде всего, стало понятно, что линии продуктов FPGA фирмы Xilinx чётко разделились на high-end устройства Virtex и low-end устройства Spartan. Вместе с тем стало также понятно, что технологические и архитектурные особенности этих двух совершенно разных по стоимости серий в целом практически эквивалентны. В общем случае устройства Spartan могут делать практически то же самое, что и соответствующие по технологии изготовления микросхемы ПЛИС Virtex. Конкретно семейство Spartan-II было основано на архитектуре семейства Virtex, изготовлено по гибридной технологии 0,18/0,22 мкм и использовало ту же комбинацию напряжений питания: 2,5В для ядра и 3,3В для блоков ввода-вывода. Для блоков ввода-вывода обеспечивалась совместимость с 5-вольтовыми сигналами без использования внешних токоограничивающих резисторов.
Общая архитектура Spartan-II, как только что упоминалось, была очень похожа на архитектуру семейства Virtex. По сравнению с микросхемами ПЛИС Spartan/SpartanXL это означало следующее:

* на кристалл добавлен новый для ПЛИС Spartan вид ресурсов: синхронная блочная память с объёмом каждого блока 4096 бит (аналогичные блоки имеются в ПЛИС Virtex);

* для распространения тактового сигнала по кристаллу с минимальными задержками используются специальные модули с автоматической подстройкой задержек (Delay-Locked Loop, DLL) - 4 штуки на кристалл с возможностью организации до 24 локальных тактовых подсетей;

* в логические ячейки добавлены выделенные ресурсы, облегчающие построение умножителей целочисленных операндов;

* улучшены характеристики цепей ускоренного переноса;

* увеличено количество локальных и глобальных трассировочных ресурсов.

Наконец, структура и взаимное расположение логических ячеек были существенно скорректированы. Пара логических ячеек стала образовывать так называемую секцию (slice). Четыре ячейки (или две секции) совместно с дополнительно введёнными локальными ресурсами образуют собственно конфигурируемый логический блок (КЛБ). Такое решение позволило внедрить "внутрь" КЛБ дополнительные трассировочные ресурсы, позволяющие обеспечить более гибкие возможности совместной работы отдельных логических ячеек. Схема секции КЛБ приведена на рисунке ниже:


Семейство Spartan-II состоит из 6 микросхем объёмом 15, 30, 50, 100, 150 и 200 тыс. системных вентилей. Число логических ячеек находится в пределах 432 - 5292 (соответственно для младшего и старшего устройств семейства), а количество 4-килобитных блоков - от 4 до 14 (аналогично). Все микросхемы ПЛИС доступны как в корпусах QFP-, так и в BGA- варианте исполнения корпуса.
Уже в следующем 2001 году, было выпущено семейство Spartan-IIE. Это семейство было основано на архитектуре микросхем ПЛИС Virtex-Е. Соответственно, напряжение питания ядра составляет 1,8В, а блоки ввода-вывода, питаемые максимально от 3,3В, несовместимы с 5-вольтовыми сигналами без последовательно включаемыми в сигнальные цепи резисторов (номиналом не менее 120 Ом). Семейство включает 7 микросхем объёмом 50, 100, 150, 200, 300, 400 и 600 тыс. системных вентилей. Количество логических ячеек и блоков памяти в точности соответствует характеристикам устройств предыдущего семейства Spartan-II. Старшие микросхемы ПЛИС содержат до 15552 ячеек и до 72 блоков памяти соответственно.
Характерным является соотношение между семействами Spartan-II и Spartan-IIE. В действительности архитектурные различия между ними весьма несущественны и следуют в основном из разного технологического процесса. Устройства Spartan-IIE несколько быстрее, хотя и не обладают возможностью работать с 5-вольтовыми входными сигналами напрямую. Оба семейства поддерживают широкий спектр электрических интерфейсов (в том числе высокоскоростные дифференциальные). В то же время интересно отметить, что если семейство Spartan-II начиналось с устройства объёмом 15 тыс. системных вентилей, то для Spartan-IIE нижняя планка оказалась поднята уже до 50 тыс. Тем не менее этот факт отнюдь не означает отказа от выпуска микросхем ПЛИС минимальной стоимости. Напротив, цены на устройства Spartan с появлением описанных семейств начали достаточно быстро падать.
В то же время в мире существовавшей параллельно серии Virtex произошло достаточно важное событие - размещение на кристалле выделенных умножителей независимых операндов с высокой производительностью. Семейство Virtex-II, в котором впервые было введено такое архитектурное решение, сразу же привлекло повышенное внимание, поскольку наличие предсказуемых по характеристикам, компактных и довольно эффективных модулей вывело устройства FPGA в первые ряды по соотношению производительности и цены. Особенно привлекательным было то, что параллельная работа нескольких устройств умножения на одном кристалле не приводило к "путанице" трассировочных ресурсов и снижению общей тактовой частоты, как это обычно имело место при реализации умножителей на базе обычных логических ячеек. Однако эти весьма привлекательные для разработчиков микросхемы довольно дороги и выпускаются только в корпусах BGA, что переводит их в совершенно другую категорию.
Тем не менее 2002-2003 годы ознаменовались появлением очередного семейства Spartan-3. Это семейство полностью отвечает ожиданиям от данной серии - ещё дешевле и ещё больше производительности в типичных задачах. В момент выпуска розничные цены на младшие устройства Spartan-3 находились в районе 10$, что практически вплотную приблизило эти микросхемы ПЛИС к микроконтроллерам с сопоставимыми функциональными возможностями. Самое важное, в составе этого семейства наконец-то появились выделенные умножители, а также изменена организация блочной памяти с 4096 бит на 1К х 18. Иными словами, архитектура Spartan-3 в целом основана на ПЛИС Virtex-II. Однако имеются и существенные отличия, характерные скорее для ещё более современного семейства Virtex-4 и касающиеся непосредственно логических ячеек (которые практически не изменились при переходе от Spartan-II к Spartan-IIE). Интересно отметить, что устройства семейство Spartan-3 требуют как минимум трёх источников питания: напряжение питания ядра составляет 1,2 В, необходим вспомогательный источник питания 2,5 В, а блоки ввода-вывода могут быть запитаны максимум от 3,3 В.
Имея похожую архитектуру, новое семейство Spartan-3 выгодно отличается от Virtex-II тем, что было изготовлено по современному, на тот момент времени, 90-нанометровому техпроцессу. Очевидно, это означает как большую производительность при той же топологии кристалла, так и меньшую цену.


Каждый КЛБ семейства Spartan-3 состоит из четырёх секций, сгруппированных в пары (Рис. 2). Левая пара называется SLICEM и содержит привычные разработчикам, знакомым с предыдущими семействами ПЛИС Xilinx, полнофункциональные логические генераторы, которые могут использоваться также в качестве распределённого ОЗУ или сдвигового регистра. Однако расположенная на рисунке справа пара SLICEL может реализовать только логику.
Можно долго комментировать подобное новшество, довольно нетипичное для архитектур ПЛИС. На первый взгляд, налицо потеря части функциональности логических ячеек, которая выгодно отличала недорогие ПЛИС Xilinx. Особенно это касается, конечно, распределённой памяти. Здесь же следует добавить, кстати, что аппаратная реализация внутренних буферов с тремя состояниями в данном семействе была заменена на их эмуляцию с помощью программируемых мультиплексоров. Итак, часть функциональности логических ячеек ПЛИС оказалась, принесена в жертву уменьшению времени распространения сигнала и дальнейшему снижению стоимости.
Очевидно, невозможно всесторонне оценить все последствия, которые могли бы выйти из новой архитектуры. Точно так же не возможно дать однозначные рекомендации, какие подходы проектирования позволят в полной мере использовать преимущества новой архитектуры и минимизировать эффект от недостатков. Тем не менее важно напомнить несколько основных моментов, подлежащих всесторонней проверке как в тестах, так и на реальных проектах.
Фирма Xilinx уделяет достаточно большое внимание соблюдению баланса между ресурсами, размещаемыми на кристалле ПЛИС. Одним из основных моментов, относящихся к структуре КЛБ, является оценка процентного соотношения распределённой памяти и собственно логических ресурсов. Собственные оценки логической ёмкости ПЛИС самой фирмой Xilinx часто приводятся из следующего соотношения "25% ячеек используется в качестве распределённой памяти, остальное - в качестве логики". Таким образом, по оценке Xilinx, в среднем около четверти ячеек используется "не по прямому назначению", то есть в качестве распределённой памяти или сдвиговых регистров. Ввиду этого решение о дальнейшем облегчении функциональности половины логических ячеек выглядит в общим-то не так обескураживающе. В самом деле, трудно представить проект, который по каким-то причинам использует микросхему ПЛИС в качестве мелких блоков памяти, распределённых по всему кристаллу, обладающих в силу этого плохими временными характеристиками и чрезвычайно высокой относительной ценой. Ещё более странно рассматривать такой проект на фоне присутствия в Spartan-3 блочной памяти ещё большего объёма (до 1,8 Мбит на кристалле в старших моделях!). Можно предположить, что большая часть логических ячеек, скорее всего, будет реализовывать именно логические функции, а уменьшение максимального объёма доступной распределённой памяти прекрасно компенсируется увеличением количества блочной (гораздо более эффективной и удобной в использовании). Наконец, следует всё-таки отметить, что распределённая память в секциях SLICEM так и осталась распределённой по всему кристаллу. В итоге полнофункциональные SLICEM и облегчённые SLICEL вполне могут дополнять друг друга.
Что касается внутренних буферов с тремя состояниями, то можно заметить, что выигрыш от их использования появляется в тех случаях, когда в проекте требуется мультиплексирование шин с большой разрядностью, причём число входных шин мультиплексоров также оказывается достаточно большим. В этих случаях использование буферов с третьим состоянием оказывается выгоднее, чем каскадное наращивание логических ячеек (ограниченных по числу входов мультиплексора). Однако очевидно, что если возможности логических ячеек по реализации многовходовых мультиплексоров будут улучшены, то и потребность во внутренних буферах с тремя состояниями существенно уменьшится. Именно такой путь и был реализован в семействе Spartan-3, причём удаление буферов привело одновременно и к уменьшению задержек, и к удешевлению микросхем.


Продолжение в следующем посте...


Последний раз редактировалось: Viktor2312 (Вс Апр 24 2016, 15:26), всего редактировалось 28 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Сб Окт 31 2015, 16:09

Продолжение статьи...


Модификации семейства Spartan-3.

.


Последний раз редактировалось: Viktor2312 (Вс Апр 24 2016, 15:27), всего редактировалось 6 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вс Ноя 01 2015, 00:52

Уровни абстракции.

Чем отличается профессиональный инженер-электронщик или программист от дилетанта? Прежде всего, умением мыслить абстрактно. Способностью иметь систематический подход к сложной, многоуровневой системе. Все перечисленные выше качества необходимы, прежде всего, для того, чтобы не утонуть в мире избыточной информации.
Любая цифровая система на языке описания аппаратуры VHDL может быть представлена на различных уровнях и различными формами абстракции. Представление цифровой системы может быть описано на уровне компонентов (диодов, транзисторов, логических элементов), на уровне архитектуры (структурной схемы, содержащей компараторы, регистры, мультиплексоры, АЛУ и т. д.), на уровне автономной системы (ЭВМ, рабочей станции, сервера и т. д.), а также на уровне приложений (программных модулей, входящих в состав систем более высокого уровня).
Для понимания работы сложной системы, критически важно уметь абстрагироваться, исключать из рассмотрения те элементы, которые в данном конкретном случае не существенны. Любую систему можно рассматривать с различных уровней абстракции, см рисунок:


На рисунке показаны уровни абстракции, типичные для любой электронной вычислительной системы, реализуемой на языке описания аппаратуры VHDL, и как видно из рисунка, уже на этом этапе мы абстрагировались от одного из уровней, самого низкого, физического, изучающего движение электронов. Поведение электронов описывается квантовой механикой и системой уравнений Максвелла. И нам точно можно не учитывать поведение электронов внутри разрабатываемых нами устройств.
В дополнение к абстрагированию от несущественных деталей при разработке сложных вычислительных систем, нужно использовать ещё три базовых принципа, или правила, позволяющих лучше понимать сложные системы. Это следующие три принципа: иерархичность, модульность и регулярность. Эти принципы применимы как к программному обеспечению, так и к аппаратной части вычислительных систем.

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

Модульность – принцип модульности требует, чтобы каждый модуль в системе имел чётко определённую функциональность и набор интерфейсов и мог быть легко соединён с другими модулями системы.

Регулярность – принцип регулярности требует соблюдения единообразия при проектировании отдельных модулей системы, там, где это конечно возможно. Стандартные модули общего назначения, могут использоваться многократно, тем самым во много раз снижая количество модулей, необходимых для разработки вычислительной или может быть думающей системы.

Так же важно, что различные формы абстракции при разработке цифровой вычислительной системы позволяют сохранять описание и проект как комплексную управляемую систему.
Первичная и наивысшая форма абстракции - это поведенческая (behavioral) форма, которая позволяет описывать систему в терминах того, что она делает (или как она ведёт себя), а не в терминах её элементов либо компонентов и соединений между ними. Поведенческая форма представления определяет зависимость между входными и выходными сигналами. Поведенческая форма может быть Булевым (Boolean)выражением либо более абстрактным описанием, например, описанием межрегистровых пересылок (registr transfer) или описанием в алгоритмической форме.

Например:

a <= x and y

В данном примере, забегая немного вперёд, мы видим три сигнала (a, x, y) и два оператора <= – оператор назначения сигнала, and – оператор логического умножения, выполняет логическую операцию И. Таким образом, мы описали, в поведенческой форме, логический элемент 2И, имеющий два входа x, y и один выход a. Оператор назначения сигнала <=, означает, что сигналу, стоящему слева, устанавливается результат вычисления выражения, стоящего справа. См. рисунок:





Общая характеристика языка VHDL.

Название языка VHDL, это аббревиатура, полная расшифровка которой записывается как (Very high speed integrated circuits Hardware Description Language) и переводится как язык описания устройств на сверх больших интегральных схемах (СБИС). Разработка языка описания аппаратуры VHDL началась в середине 1980-х гг. при непосредственной поддержке и спонсировании института инженеров по электротехнике и радиоэлектронике, сокращённо IEEE. Так как данная организация является международной и занимается разработкой стандартов, это во многом способствовало появлению уже в 1987 году первого стандарта на язык описания аппаратуры VHDL (IEEE 1076 – 1987). В последующие годы, в результате улучшения и расширения языка, выходили новые стандарты в 1991, 1993, 1996, 1997, 1999, 2000, 2002, 2006 годах. В каждый последующий стандарт входили дочерние стандарты, а так же добавлялись различные усовершенствования, такие как интерфейс с языками высокого уровня С/С++ и другие. В России так же интенсивно используется язык описания аппаратуры VHDL, и закреплён государственным стандартом: (ГОСТ РФ 50754 – 95 «Язык описания аппаратуры цифровых систем VHDL. Описание языка»).
Госсудартсвенный стандарт VHDL (ГОСТ Р 50754 - 95).

При изучении языка описания аппаратуры VHDL важно обратить внимание на его схожесть с традиционными языками программирования, в виду того, что он так же содержит литералы, разделители, операторы, комментарии и т. д., но при этом имеет важные отличительные характеристики. Например, все создаваемые проекты цифровых устройств с помощью языка описания аппаратуры VHDL, как правило, имеют иерархическую структуру. Каждый автономный модуль имеет строго определённый интерфейс взаимодействия с другими модулями и точную спецификацию внутреннего устройства с описанием функционирования модуля. В свою очередь описание функционирования модуля, в зависимости от уровня абстракции, может иметь поведенческую или структурную форму. При моделировании алгоритма работы проекта управление основывается на событийном принципе. А САПР позволяет моделировать протекание параллельных процессов, анализировать параметры сигналов и осуществлять временной анализ. Язык описания аппаратуры VHDL так же поддерживается инструментальными средствами синтеза и системами автоматического проектирования (САПР), например, САПР фирмы Xilinx, это Xilinx ISE Design Suite или более новая Vivado. Мы же в процессе освоения будем пользоваться САПР фирмы Xilinx ISE Design Suite версии 14.7, это последняя версия. Данная САПР может создавать прямо из описания VHDL-проекта его аппаратную реализацию (связанные между собой структуры логических элементов). Используя язык описания аппаратуры VHDL, можно проектировать, моделировать и синтезировать практически любое цифровое устройство, начиная от простого логического элемента, например, таких как И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, исключающее ИЛИ до законченной микропроцессорной системы с расположением всех её компонентов на одном кристалле микросхемы ПЛИС.
Все перечисленные выше характеристики языка описания аппаратуры VHDL, в виду его специализированности для описания цифровых устройств, реализуются при помощи следующих языковых средств: библиотеки и пакеты; проекты (интерфейс и архитектура проекта); подпрограммы (функции и процедуры); скалярные типы данных (перечислимые, числовые, физические); программные элементы данных (константы, переменные, сигналы, порты, идентификаторы); математические операции (логические, отношений, арифметические); программные операции (установка значений сигналов, присвоение значений переменным, реализация связи портов и сигналов); математические выражения (логические, алгебраические, логико-алгебраические); операторы объявления программных элементов данных; операторы комбинаторной логики (простой установки значения сигнала, условной установки значения сигнала, селективной установки значения сигнала, оператор process, оператор реализации компонента port map); операторы регистровой логики (оператор process, оператор простой установки значения сигнала, оператор условной передачи управления, оператор цикла, оператор выбора).
В отличие от процедурных языков программирования, языковые средства которых обеспечивают выполнение вычислений над абстрактными данными и управление этими данными, VHDL-проект описывает цифровое устройство, учитывая его многогранность, поведение, структуру, функциональные и физические свойства, а так же взаимодействие со специальной аппаратурой, физически реализующей проект цифрового устройства на кристалле микросхемы ПЛИС.
Существуют и более важные отличия языка описания аппаратуры VHDL от обычных языков программирования, одно из них, заключается в том, что язык описания аппаратуры VHDL является языком параллельного программирования, так как в его конструкции существуют операторы, соответствующие логическим элементам (вентилям). Эти операторы обрабатываются или иными словами вычисляются по параллельному принципу. Параллельный принцип состоит в том, что, как только сигнал, находящийся в описании цифрового устройства, изменит своё значение (произойдёт событие на сигнале), все операторы, принимающие участие в его обслуживании, мгновенно запускаются на выполнение и одновременно выдают конечный результат. Такие операторы называют операторами параллельной обработки (concurence operator). Программа, написанная на языке описания аппаратуры VHDL, моделирует физическое поведение системы, в которой сигналы распространяются мгновенно. Такая программа позволяет формировать временную спецификацию, с указанием времени задержки распространения сигнала на логическом элементе, а так же описывать систему как соединение различных компонентов между собой, или функциональных блоков.


Существуют определённые этапы при проектировании цифровых устройств на языке описания аппаратуры VHDL:

• разработка иерархической блок-схемы проекта;
• программирование;
• компиляция;
• моделирование;
• синтез;
• компоновка, монтаж и разводка;
• временной анализ;

Рассмотрим каждый из этапов более подробно.

Разработка иерархической блок-схемы проекта. При реализации любого сложного проекта, в нём можно выявить его иерархичность, а использование языка описания аппаратуры VHDL позволяет легко разбить проект на модули, или субпроекты, и определить их интерфейсы.

Программирование. Запись интерфейсов для модулей и их VHDL-кода.

Компиляция. В ходе компиляции происходит анализ программного кода VHDL-проекта, в результате чего выявляются синтаксические ошибки, и осуществляется проверка совместимости с другими модулями. В результате компиляции так же собирается внутренняя информация о структуре проекта, которая в последствии необходима для моделирования работы проектируемого цифрового устройства.

Моделирование. В результате моделирования создаются входные воздействия, которые применяются к откомпилированному коду проекта и с последующим наблюдением выходных реакций. Моделирование может выполняться как в форме функционального контроля, то есть проверки логики работы проекта без учёта временных соотношений и задержек распространения сигналов на логических элементах, так и в качестве одного из этапов верификации завершённого проекта.

Синтез. Это преобразование VHDL-описания в набор примитивов или логических элементов, которые могут быть реализованы на кристалле микросхемы ПЛИС.

Компоновка, монтаж и разводка. Отображение проекта на карте синтезирующих элементов, содержащихся в микросхеме ПЛИС.

Временной анализ. Получение фактических задержек реализованной в микросхеме ПЛИС цифровой схемы проекта с учётом длины соединений, электрических нагрузок и других известных факторов.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:39), всего редактировалось 1 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вс Ноя 01 2015, 04:03

Лексические элементы языка VHDL.

Текст описания на языке VHDL формируется из пяти основных лексических элементов, таких как:


• идентификатор;

• разделитель;

• ключевое (зарезервированное) слово;

• литерал (десятичный, базовый, символьный, строковый, строка бит);

• комментарий.


Смежные лексические элементы, в свою очередь, разделяются:


• разделителями;

• концами строк;

• знаками форматирования.

Теперь рассмотрим более подробно каждый из лексических элементов.


Идентификаторы (identifiers).

Идентификаторы представляют собой последовательность символов, определяемую пользователем, и используются как имена для сигналов, переменных, функций, процедур, объектов, процессов и т. д. в VHDL-проектах. Они могут иметь любую длину, при условии, что весь идентификатор написан в одной строке программы. В составе идентификаторов могут использоваться символы латинского алфавита (A…Z, a…z), цифры (0…9) и символ подчёркивания ( _ ). При этом символ подчёркивания не может использоваться в качестве окончания идентификатора, так же не допускается использование двух идущих подряд символов подчёркивания. Идентификатор должен начинаться с буквы, это важно, он не должен ни в коем случае начинаться с цифры или символа подчёркивания. Например, идентификатор 8as неправильный, так как начинается с цифры. И важно: в языке описания аппаратуры VHDL нет различия между прописными и строчными буквами. Это значит, что идентификаторы SET_TOOLS1 и set_tools1 идентичны и являются одним и тем же идентификатором, а компилятор и средства синтеза воспринимают их одинаково. Так же в именах идентификаторов нельзя использовать ключевые (зарезервированные) слова, например, next, to, end, case, disconnect и другие, список которых мы рассмотрим позже.
Также недопустимо применение никаких пробелов в идентификаторах.
Идентификаторы, создаваемые по приведённым выше правилам, называют базовыми идентификаторами (baze identifier). Очень часто, эти правила, слишком ограничивают разработчика, не позволяя создавать имена сигналов, удобные для понимания их сути. Ограничения, наложенные этими правилами на базовые идентификаторы, можно обойти. Если использовать специальную группу идентификаторов, так называемых расширенных идентификаторов (extendet identifier). К расширенным идентификаторам применяются такие же правила, как и к базовым идентификаторам, но с учётом следующих особенностей:

• Расширенные идентификаторы могут, ограничиваются символом \ наклонная черта влево (обратная косая черта). Например, \reset\.

• Расширенные идентификаторы должны отличаться от ключевых (зарезервированных) слов и базовых идентификаторов. Например, можно использовать расширенный идентификатор \and\, который уже не будет восприниматься компилятором как ключевое слово and.

• Внутри расширенного идентификатора также может содержаться символ наклонной черты влево (обратной косой черты). Но их должно быть две, то есть применение одной наклонной черты влево, внутри расширенного идентификатора, не допустимо. Например, \clk\\100MHz\.


Расширенные идентификаторы поддерживаются, начиная с версии языка описания аппаратуры VHDL-93.
Для того чтобы описание цифрового устройства было простым для понимания, необходимо пользоваться следующими простыми правилами:

• Используйте в именах для всех сигналов, портов, переменных, констант, определяемых пользователем типов и параметров только строчные буквы.

• Используйте осмысленные имена, которые должны объяснять поведение переменной/сигнала. Выразительное имя дает понимание, а не путает того, кто читает описание цифрового устройства, и это верно также по отношению к самому автору. Удачное имя объясняет, что означает величина вектора или переменной. Без этой информации трудно читать описание аппаратуры, и маловероятно, что оно будет написано без ошибок.

• Используйте clk для обозначения тактового сигнала блоков/модулей, а также в качестве префикса для всех тактовых сигналов, которые поступают с CMT, например clk_inv, clk_96MHz. Применение данного имени для всех тактовых сигналов информирует о том, что происходят они от одного внешнего источника. Если внешних источников тактовых сигналов два и более, тогда добавляйте порядковый номер к имени clk, например clk2, clk3, clk4, clk5 и, соответственно, clk2_inv, clk2_100MHz.

Типовые имена сигналов и переменных:


rst, rst_n, reset, reset_n - асинхронные сбросы «1»/«0»;

clk - тактовая частота модуля;

sclr - синхронный сброс;

clear - рабочий сброс (никакого отношения к цепи начального
сброса не имеет);

load - загрузка;

ena, enable - разрешение;

inc, dec - инкремент, декремент;

wr, write - строб записи;

rd, read - строб чтения;
rd_int, wr_int
или
rd_reg, wr_reg - внутренние регистровые сигналы модуля/блока.

• Используйте последовательный порядок битов при объявлении многоразрядных векторов переменных/сигналов от высокого к низкому, то есть от (n–1) до 0. Ноль здесь используется как младший разряд, поэтому все многоразрядные векторы переменных/сигналов должны быть в форме от (n–1) до 0. Эти соответствия кодирования помогут избежать ошибок при связи многоразрядных переменных между собой.

• Добавляйте _n для указания инверсной фазы сигнала. Например:

data_in_n, grand_n.

Если есть два имени, которые отличаются только символами _n, то убедитесь, что они действительно являются логической инверсией один другого.

• Используйте поименованные константы вместо указания непосредственных значений в тексте модуля/блока.

• Используйте значимые имена файлов, которые должны объяснять их назначение.


Разделители.

Разделители бывают обычные и составные. Обычные разделители, это один из специальных символов:

& ( ) * + ? - . / : ; < = > |

Составной разделитель, это композиция двух смежных специальных символов, воспринимаемые компилятором как один символ:

=> ** := /= >= <= <>

В качестве примера рассмотрим наш предыдущий пример, описания логического элемента 2И:

a <= x and y;

Если вы заметили, то в данном примере, в отличие от предыдущего его написания, мы в конце добавили разделитель ; (точка с запятой). Это сделано было потому, что:


Простые операторы размещаются обычно в одной строке, не имеют ключевого слова end и всегда заканчиваются символом ; (точка с запятой).

Данный пример имеет шесть лексических элементов:

a <= x and y ;

Два из шести лексических элементов являются разделителями:

<= - составной разделитель - оператор назначения сигнала;

; - оператор точка с запятой.

В качестве разделителей в данном примере используются пробелы, однако нет необходимости иметь разделитель, пробел, между оператором ; (точка с запятой) и лексическим элементом y (сигнал y).

:= - оператор присвоения значения переменной, константе.

Со временем, по ходу освоения языка описания аппаратуры VHDL, мы рассмотрим более детально все составные разделители, как в теории, так и на практике.

.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:41), всего редактировалось 4 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вс Ноя 01 2015, 05:23

Рекомендации, правила и руководства по созданию описания цифровых устройств на VHDL.

Введение.

Описание цифрового устройства на VHDL должно быть простым, структурированным для понимания и легко адаптируемым к различным платформам, чтобы другие разработчики, участвующие в проекте, имели возможность быстро вносить изменения и верифицировать описание, а также использовать
его в своих разработках. Одна из главных трудностей в использовании «чужого» проекта на VHDL — отсутствие четких указаний по именованию и правилам составления текста описания цифрового устройства. Такие указания по именам и правилам «хорошего тона» должны быть созданы на начальной фазе проекта и предписаны для всего коллектива разработчиков. Далее приводятся основные руководящие требования для построения такого описания, которое можно легко синтезировать и верифицировать.

По материалам статьи:
Алексей Денисов "Несколько советов по проектированию цифровых устройств на VHDL для ПЛИС".
Из журнала КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 12 '2009 www.kite.ru

Именование.

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

1. Используйте в именах для всех сигналов, портов, переменных, констант, определяемых пользователем типов и параметров только строчные буквы.
2. Используйте осмысленные имена, которые должны объяснять поведение переменной/сигнала. Выразительное имя дает понимание, а не путает того, кто читает описание цифрового устройства, и это верно также по отношению к самому автору. Удачное имя объясняет, что означает величина вектора или переменной. Без этой информации трудно читать описание аппаратуры, и маловероятно, что оно будет написано без ошибок. В таблице 1 представлены некоторые из имен.
3. Используйте “clk” для обозначения тактового сигнала блоков/модулей, а также в качестве префикса для всех тактовых сигналов, которые поступают с PLL, например clk_inv, clk_96MHz. Применение данного имени для всех тактовых сигналов информирует о том, что происходят они от одного внешнего источника. Если внешних источников тактовых сигналов два и более, тогда добавляйте порядковый номер к имени “clk”, например clk2, clk3, clk4, clk5 и, соответственно, clk2_inv, clk2_100MHz.


4. Используйте последовательный порядок битов при объявлении многоразрядных векторов переменных/сигналов от высокого к низкому, то есть от (n–1) до 0 для VHDL. Ноль здесь используется как младший разряд, поэтому все многоразрядные векторы переменных/сигналов должны быть в форме от (n–1) до 0. Эти соответствия кодирования помогут избежать ошибок при связи многоразрядных переменных между собой.
5. Добавляйте _n для указания инверсной фазы сигнала. Например:

data_in_n, grand_n.
Если есть два имени, которые отличаются только символами _n, то убедитесь, что они действительно являются логической инверсией один другого.
6. Используйте поименованные константы вместо указания непосредственных значений в тексте модуля/блока.


7. Используйте значимые имена файлов, которые должны объяснять их назначение. В таблице 2 представлены некоторые суффиксы, отражающие тип описания на VHDL.

Текст описания цифровых устройств.

Приведем основные правила написания текста описания цифровых устройств.
1. Приводите иерархию проекта в соответствие с иерархией физического разбиения. Модули должны быть понятными — достаточно короткими. Но слишком маленькие модули порождают много ветвей в структуре дерева, и иерархия становится сама по себе трудной для понимания. Соблюдение иерархий упрощает генерацию и извлечение тестовых векторов и делает проще трансляцию модели в физическую структуру.
2. Делайте декларацию портов логичной и непротиворечивой. Пишите один порт на строку, добавляя короткий комментарий, если что-либо неочевидно из его имени. Например, если модуль имеет 5 или меньше портов, их можно перечислять в виде списка в следующем порядке: входы, входы/выходы, выходы. Если портов более 5, группируйте сигналы по функциональному назначению. Пример декларации портов показан в листинге 1.


3. Используйте функции и процедуры вместо повторения кода.
4. Для уплотнения кода используйте векторы, массивы, операторы генерации и циклы.
5. Применяйте технологически независимое и совместимое с различными пакетами проектирования описание схем на VHDL. Исключением является использование блоков памяти, PLL, three-state buses, bidirectional buses и других. Избегайте таких элементов, так как могут возникнуть ограничения для повторного проектирования и применения из-за их зависимости от технологии и производителя. Работу с ними лучше изолировать в отдельных модулях/блоках проекта.
6. Старайтесь избегать вставок вентильных примитивов в RTL-код, поскольку такой проект на логическом уровне трудно будет читать и повторно использовать.
7. Старайтесь не встраивать директивы синтеза в RTL-код. Они различаются в разных пакетах проектирования, поэтому могут вызывать конфликты и ограничения для повторного проектирования и использования. Если же они необходимы, то в комментариях укажите, для какого пакета проектирования директивы синтеза предназначены и какую функцию они выполняют.
8. Используйте для процессов метки (label), которые кратко поясняют работу процесса. Например, метка label_counter поясняет, что процесс описывает схему счетчика. Кроме того, ставьте метки в начале и в конце процесса, что позволит быстро ориентироваться в описании на VHDL. Пример написания метки для процессов показан в листинге 2.


9. Пишите комментарии, соответствующие описанию на VHDL. Это означает, что необходимо проверить комментарий на соответствие тексту. Необходимо модифицировать комментарий, когда меняете текст описания цифрового устройства.
10. Включайте в файл комментарий к любому сделанному вами изменению. В нем следует обозначить дату, имя внесшего изменение, собственно изменение и причину, его вызвавшую. Это поможет другим, занимающимся поддержкой текста описания на VHDL, понять, что происходит, и разобраться в проблеме, если сделанные изменения повлекли за собой дополнительные ошибки.
11. Описывайте процесс создания готовых ядер при использовании соответствующих программ (например, CoreGenerator для Xilinx ISE). При отсутствии описаний могут возникнуть ограничения для повторного проектирования и применения из-за зависимости от технологии и производителя. Работу с такими ядрами лучше изолировать в отдельных модулях/блоках проекта.
12. Предоставляйте для функционально законченного блока, а также для проекта в целом Test bench файлы, в которых создаются внешние воздействия, максимально соответствующие работе схемы в реальных условиях, и предоставляйте описания работы с ними. Это помогает в дальнейшем быстрее понять и верифицировать работу модуля/блока и проекта в целом.
13. Используйте сигналы вместо переменных в VHDL.
14. Используйте графический схемотехнический редактор для создания схемы верхнего уровня проекта/модуля/блока, которую затем можно автоматически перевести в структурное описание на VHDL. Графическое представление позволит наглядно увидеть структуру проекта/модуля/блока в целом.
15. Делайте список чувствительности наиболее полным. Когда списки чувствительности являются неполными, моделирование может не сходиться между pre- и post-synthesis netlists. В комбинаторных процессах список чувствительности должен содержать каждый сигнал, входящий в этот процесс, а для последовательных блоков в него нужно включать тактовый, а также синхронные и асинхронные сигналы. Избегайте лишних сигналов в списке чувствительности, поскольку они замедляют процесс моделирования. Пример процесса с полным и неполным списком чувствительности показан, соответственно, в листингах 3 и 4.


Руководство для синтеза.

При проектировании особенно важно понимать взаимодействие между стилем HDL-кодирования, различными архитектурами устройств FPGA и программным обеспечением для автоматизированного проектирования. Приложения, от которых требуется высокая производительность и плотность размещения логики, являются очень критичными к используемому разработчиком стилю кодирования. Для получения оптимальных результатов необходимо понимание архитектуры матриц FPGA, принципов работы инструментов синтеза схем и программного обеспечения конечной трассировки. Цель RTL — создание проекта через процесс синтеза. Каждый инструмент имеет свои собственные конструкции описаний для VHDL; использование этих конструкций позволяет сделать эффективным процесс синтеза, а также упростить post-synthesis анализ. Некоторые обобщенные руководящие принципы для принятия RTL-синтеза:

1. Избегайте использования конструкций, создающих различные защелки (Latchs). Они могут появляться из-за неполного или двусмысленного RTL-кода. Поэтому каждое if должно иметь else. Когда проектируется аппаратура, часто требуется выполнение одних действий при условии «истина» и других при условии «ложь». Даже если считаете, что условие «ложь» маловероятно (или невозможно), все равно else для случая по умолчанию должно быть в каждом if-операторе. Нарушение пары if–else может вызвать синтезирование логики (появление защелки), отличной от RTL модели. Пример описания, создающего защелку, и регистра приведен в листингах 5 и 6.


2. Избегайте в RTL петли комбинаторной обратной связи и асинхронной логики.
3. Используйте регистры и триггеры для последовательной логики, которые обеспечивают синхронизацию и, следовательно, предпочтительнее защелок. Если необходим сброс модуля/блока, то вместо использования «инициализации» в декларации VHDL используйте цепи сброса сигнала для начальной инициализации регистров.
4. Производите переключение последовательной логики по переднему (clk’event and clk = ‘1’) или по заднему фронту тактовой частоты (clk’event and clk = ‘0’) в модулях/блоках. Об этом следует задуматься
еще в начальной стадии проектирования. По умолчанию принята работа схем по переднему фронту тактовой частоты (clk’event and clk = ‘1’).
5. Разделяйте RTL-код на процессы, чтобы процесс синтеза работал эффективнее, и могли быть легко проверены временные требования. Например, для конечных автоматов (finite-state machine) код может быть разделен на два процесса: один для комбинаторной логики, а второй — для последовательной.
6. Фиксируйте в ПЛИС данные/сигналы на регистрах — как на входах, так и на выходах (рис. 1). На выходах блоков/модулей рекомендуется иметь регистры — иначе больше вероятность того, что задержка в комбинационной схеме на выходе блока плюс задержка в межблочных соединениях и в комбинационной схеме на входе следующего блока превысят время между синхроимпульсами. Это также упрощает синтез, делает выход блока/ПЛИС надежным, а задержки более предсказуемыми. Фиксация на регистре делает технологию mapping легче.


7. В модуль верхнего уровня включайте только межсоединения (рис. 2). Структура, описанная на VHDL, может быть иерархичной и состоять из одного или более модулей, которые могут использовать любые другие модули. Модуль, который включает любой другой модуль, является узлом дерева, а не включающий никакого другого — его «листом». «Корень» — такой тип узла, который не входит ни в один
другой модуль. Хотя VHDL и допускает проектирование «леса», но иерархия будет понятной, если используется только одно дерево. Конкретно это означает, что структура должна иметь только один
корневой модуль, не содержащий чего-либо другого, кроме межсоединений и входящих модулей. Вся интерфейсная логика должна быть собрана в модулях нижнего уровня и в модулях, подсоединяемых к «корню».


Наиболее важной причиной нахождения логики вне корневого модуля является эффективный синтез. САПР не сможет оптимизировать логику в подмодулях, если в корневом модуле есть промежуточная логика. Исключение логики из корневого модуля делает структуру иерархически яснее и чище. Более радикальным стилем было бы исключить логику из всех узловых модулей, хотя это может вызвать избыточные уровни иерархии и не сделает описание на VHDL проще для чтения. И последней причиной исключения логики из корневого модуля является необходимость дать возможность программе-трассировщику создать хороший список межсоединений.
8. Не объединяйте в одном модуле/блоке последовательную логику, управляемую передним фронтом, и последовательную логику, управляемую задним фронтом тактового сигнала, а также модули/блоки, работающие на разных частотах. Каждый блок/модуль должен разрабатываться как «одноклоковый», в нем тактовая частота должна обозначаться “clk”, за исключением блоков стыков доменов. То есть подсоединение к сигналу вида clk_96MHz производите только на Top Level уровне.
9. Старайтесь избегать использования арифметических операторов, поскольку при реализации они требуют много логики и занимают большую площадь. Например, если требуется операция умножения или деления операнда на четную степень двойки, то можно использовать соответствующую операцию сдвига на регистре.
10. Используйте скобки для оптимизации логической структуры. Изменяйте структуру схемы, используя скобки для группирования логики таким образом, чтобы результат синтеза был ближе к оптимальному.
Например, следующее выражение:


sum = a+b+c+d;

синтезатор транслирует в три последовательно соединенные сумматора. А такое выражение:


sum = (a+b) + (c+d);

транслируется в два параллельных сумматора для (a+b), (с+d) и один окончательный сумматор для сложения этих сумм.

11. Старайтесь использовать совмещение аппаратных ресурсов — это уменьшает затраты на оборудование. Примеры оптимизированного и неоптимизированного описания, соответственно, показан в листингах 7 и 8.




Заключение.

В статье дана попытка систематизировать правила создания текста описания на VHDL для повышения эффективной работы как отдельно взятого разработчика, так и коллектива в целом, а также выработать единые требования к синтезу и верификации описанных на VHDL цифровых устройств.
.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:45), всего редактировалось 1 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:36

2. Изучение, повторение, практика.
Фундаментально и детально.


Базовая структура VHDL-файла.

Общие сведения.

____Проект любого цифрового устройства на языке VHDL - это прежде всего программа, которая содержит ключевые и зарезервированные слова. Эти слова не могут использоваться как имена сигналов или как идентификаторы. В языке VHDL ключевые слова, зарезервированные слова и определяемые пользователем идентификаторы нечувствительны к регистру.
Строки с комментариями в VHDL-программе начинаются с двух смежных дефисов (--) и при компиляции игнорируются компилятором так же, как символы конца строки и пробелы.
VHDL - это строго типизированный язык. Это означает, что все программные элементы данных (константа, переменная, сигнал) должны явно объявляться с обязательным указанием типа элемента. Тип, указанный в объявлении программного элемента данных, определяет информационные характеристики этого элемента, диапазон допустимых числовых значений, которые может принимать этот программный элемент, а также операции, которые могут над ним выполняться. Кроме того, в языке VHDL, в отличие от других строго типизированных языков, не допускаются операции над разнотипными элементами без предварительного преобразования типов.
____В языке VHDL (как и в классических языках программирования) из ключевых, зарезервированных слов и других лексических элементов строятся образования, которые принято называть операторами. Оператором в языке VHDL считается любая запись, начинающаяся с ключевого слова и заканчивающаяся символом точки с запятой ( ; ).

____В языке VHDL операторы с точки зрения их функционального программного назначения (как при поведенческой, так и при структурной методологии описания проектов) принято делить на две основные группы:

  • Операторы объявления программных элементов данных и их типов, компонентов проектируемого цифрового устройства, их интерфейсов и архитектур, пользовательских типов, а также функций и процедур;

  • Выполняемые операторы.

Кроме основных операторов в языке VHDL принято выделять ещё одну группу операторов, которую называют:
вспомогательными операторами передачи управления.

С точки зрения конструктивного устройства операторы обеих групп принято подразделять на два класса:

  • Простые (однострочные) операторы. Простой оператор представляет собой текстовую запись, располагающуюся, как правило, на одной строке, которая не содержит других операторов.

  • Составные (многострочные) операторы. Составной оператор представляет собой текстовую запись, занимающую, как правило, много строк, которая содержит другие операторы.

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

  • идентификатор (т. е. должна быть объявлена);
  • способность взаимодействовать с другими проектируемыми подсистемами посредством своего интерфейса (входных/выходных портов);
  • описание внутренней структуры или алгоритма функционирования.

Такими фундаментальными операторами в языке VHDL являются операторы:

entity ... end entity ...;
architecture ... end architecture ...;

Проект цифрового устройства, или его компонент, описанный с помощью языка VHDL, хранится в файле, который обычно снабжается расширением .vhd.
Представленный в виде VHD-файла проект цифрового устройства может содержать другие объекты (подсистемы), которые в таком случае являются подчинёнными компонентами системы верхнего уровня.
Любой компонент, независимо от того, является ли он автономным либо подчинённым компонентом, или же системой верхнего уровня, в свою очередь является совокупностью интерфейса (entity) и архитектуры (architecture).
____В объявлении интерфейса (entity declaration) содержится объявление портов (ports declaration) проектируемого компонента с внешним миром. Объявление портов проектируемого компонента определяет внешние входные и выходные интерфейсные сигналы, в то время как архитектура представляет собой набор таких взаимосвязанных программных элементов, как подчинённые компоненты, операторы process, операторы параллельных вычислений, последовательные операторы, подпрограммы. В типичном проекте содержится несколько таких взаимосвязанных объектов, предназначенных для выполнения преобразований, в ходе которых и обеспечивается собственно требуемая функциональность проекта.


Объявление интерфейса.

____В соответствии с синтаксисом языка VHDL объявление интерфейса проектируемого компонента начинается с ключевого слова entity и определяет имя компонента, а также содержит объявление входных и выходных портов. Общий синтаксис объявления интерфейса имеет такой вид:


Как видно из приведённого синтаксиса, объявление интерфейса всегда начинается с ключевого слова entity, за которым указываются имя проектируемого компонента и ключевое слово is. Далее в объявлении интерфейса с помощью ключевого слова port размещается объявление портов. Объявление интерфейса всегда заканчивается ключевым словом end, после которого могут указываться ключевое слово entity, а также имя компонента (два последних элемента в объявлении интерфейса можно опускать).
Входящие в конструкцию объявления интерфейса проектируемого компонента (т. е. проектируемого цифрового устройства) элементы имеют следующее назначение:

  • ИМЯ_КОМПОНЕНТА - определённый пользователем идентификатор проекта.
  • сигнал: - список разделяемых замятыми идентификаторов, представляющих внешние интерфейсные сигналы (порты проекта).
  • режим - ключевое слово, показывающее направление действия сигнала (порта):

    • in - ключевое слово, используемое для объявления входных сигналов;
    • out - ключевое слово, используемое для объявления выходных сигналов. Значения выходных сигналов могут считываться другими проектами;
    • buffer - ключевое слово, используемое для объявления внутренних сигналов. Значения сигнала с этого порта могут читаться только внутри архитектуры проекта;
    • inout - ключевое слово, используемое для объявления сигналов, которые могут быть как входными, так и выходными.


  • тип - зарезервированное слово, используемое для объявления определённого пользователем типа сигнала, переменной или константы. Примерами встроенных типов являются, bit, bit_vector, boolean, character, std_logic и std_ulogic

    • bit - может принимать значение или 0, или 1;
    • bit_vector - зарезервированное слово, показывающее, что сигнал, переменная или константа являются вектором, состоящим из значений типа bit, например bit_vector (7 downto 0);
    • std_logic, std_ulogic, std_logic_vector, std_ulogic_vector - зарезервированные слова, показывающие, что сигнал, переменная или константа могут принимать одно из девяти значений, отражающих его силу и реальные физические значения. В проектах цифровых устройств предпочтительнее использовать типы std_logic, std_ulogic, чем типы bit, bit_vector;
    • boolean - зарезервированное слово, означающее, что сигнал, переменная или константа могут принимать одно из двух значений: TRUE или FALSE;
    • integer - зарезервированное слово, означающее, что сигнал, переменная или константа могут принимать одно целое значение, попадающее в указанный диапазон;
    • real - зарезервированное слово, означающее, что сигнал, переменная или константа могут принимать одно вещественное значение, попадающее в указанный диапазон;
    • character - зарезервированное слово, означающее, что сигнал, переменная или константа могут принимать значение печатаемого ASCII-символа;
    • time - зарезервированное слово, означающее, что сигнал или константа снабжены единицей измерения времени


  • generic (общие_объявления): - объявление generic является факультативным и определяет локальные константы, используемые для задания временных параметров и разрядности (например, разрядности шины) проектируемого цифрового устройства. В объявлении generic могут указываться значения, используемые по умолчанию. Синтаксис для объявления generic следующий:


Например, для логического элемента 2И имеющего соответственно два входа in_1 и in_2, и один выход out1, интерфейс можно объявить следующим образом:


Как видно из объявления, проектируемый интерфейс имеет идентификатор end_2, содержит два входных порта (in_1 и in_2) и один выходной порт (out1). Обратите внимание на порядок их размещения и наличие в оформлении точек с запятой! Входные порты обозначены с помощью ключевого слова in, а выходные - с помощью ключевого слова out, на рисунке они подсвечены голубым цветом. Так как язык VHDL является языком со строгим контролем типов, в объявлении каждого порта имеется указание о его информационном типе. Тип определяет набор значений, которые могут присваиваться объекту (в данном случае - сигналу). В этом проекте мы использовали тип std_logic. Это наиболее предпочтительный тип для цифровых сигналов. В отличие от типа bit, который обеспечивает поддержку только бинарных значений '1' или '0', типы std_logic и std_ulogic позволяют присваивать соответствующим элементам данных одно из девяти значений.
____Использование типа std_logic и std_ulogic даёт возможность точнее описать значение сигналов физической цифровой системы. В общем случае в физической цифровой системе сигнал может принимать бинарные значения '0' или '1', 'X' (неизвестное значение), 'U' (неициализированное значение), '-' (безразличное состояние) и ряд других, полный перечень значений будет приведён позже. Определение типа std_logic находится в пакете std_logic_1164 библиотеки ieee. Тип определяет набор значений, которые объект может иметь.
Приведём ещё два примера объявлений интерфейсов проектируемых объектов.





Примечание. В языке VHDL любой конструктивный элемент, начинающийся некоторым ключевым словом и заканчивающийся ключевым словом end и символом точка с запятой ( ; ), принято называть составным оператором. Однако операторы могут быть не только составными, т. е. содержать в себе другие операторы (часто говорят, что составные операторы "содержат тело"), но и простыми. Простые операторы размещаются обычно в одной строке, не имеют ключевого слова end и всегда заканчиваются символом точка с запятой ( ; ).

Анализируя синтаксис объявления интерфейса, можно заключить следующее: любой проект цифрового устройства реализуется в языке VHDL с помощью оператора:

entity ... end [entity] ... ;

Этот оператор по своей конструкции является составным оператором и содержит другие операторы. Так, в приведённых выше примерах составной оператор имеет в своей конструкции оператор port (...);


Архитектура проекта.

Архитектура проекта (architecture body) определяет логику работы схемы проектируемого цифрового устройства, т. е. устанавливает алгоритм работы цифрового устройства, и форму её реализации (поведенческая или структурная).


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

Синтаксис объявления архитектуры проекта имеет следующий вид:



Архитектура проекта в поведенческой форме.

Мы уже описывали интерфейс логического элемента 2И, для наглядности ниже представлен рисунок его внешнего вида:


Поведенческая форма архитектуры проекта, логического элемента 2И имеет следующий вид:


В строке заголовка архитектуры проекта присутствует идентификатор архитектуры (в данном примере - behav), который играет роль имени архитектуры и связывает эту архитектуру с объявлением интерфейса end_2. В качестве имени архитектуры может использоваться любой идентификатор, выбираемый пользователем, при условии соответствия его синтаксиса требованиям языка VHDL. В рассматриваемом примере компонент and_2 не имеет явно оформленного раздела объявлений вследствие его ненадобности. Основная часть архитектуры проекта (раздел выполняемых операндов параллельной обработки) начинается ключевым словом begin. Он обычно содержит описание внутреннего устройства (т. е. функциональности) проекта в форме булевых функций, оформленных в виде операторов параллельно обработки языка VHDL.
Как говорилось выше, поведенческая форма проекта может быть описана несколькими способами. В частности, в этом примере основная часть архитектуры проекта содержит один простой оператор установки значения сигнала. В данном операторе имеется символ <= , который означает, что сигналу, стоящему слева от символа <= , устанавливается результат вычисления выражения, стоящего справа от символа <= . Основная часть архитектуры проекта заканчивается ключевым словом end, которое может дополняться ключевым словом architecture и именем архитектуры.
Соответственно полный код, содержащий объявление интерфейса и архитектуру логического элемента 2И будет выглядеть следующим образом:


Рассмотрим ещё один пример оформления архитектуры проекта:


Операторы установки значения сигнала <= в этих примерах содержат логические операции and, or и not. Кроме указанных, в таких операторах могут использоваться операции nand, nor, xor и xnor.


Примечание. Следует особо заметить, что операторы установки значения сигнала (signal assignment statement) в вышеуказанных примерах являются операторами параллельной обработки (concurrent processing). Такие операторы выполняются параллельно, когда один или больше сигналов, изменяют своё значение (т. е. когда хотя бы на одном из сигналов происходит событие). Например, когда сигнал порта a изменит своё значение, одновременно изменят свои значения внутренние сигналы x и y, которые в свою очередь одновременно (во всяком случае в идеале) заставят последний оператор модифицировать значение сигнала на выходном порта z. (В реальных цифровых системах при распространении сигналов может существовать задержка, связанная с этими изменениями.)

Физические цифровые устройства управляются данными, а также событиями, возникающими при изменении данных. То есть событие, которое происходит на одном из сигналов, приводит к появлению события на другом сигнале, и т. д. Выполнение операторов детерминировано потоком изменения значений сигналов, т. е. определено последовательностью возникновения событий на сигналах. В результате такого принципа функционирования порядок, в котором операторы параллельной обработки располагаются в основной части архитектуры проекта, может быть любым. Иными словами, если разместить оператор z перед операторами x и y, конечный результат от этого не изменится. В этом состоит главное отличие языка VHDL от языков программирования, в которых операторы выполняются последовательно или путём вызова процедур.

.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:48), всего редактировалось 8 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:37

Архитектура проекта в структурной форме.

По схеме, представленной ниже, можно создать проект, используя структурную форму архитектуры, которая сводится к описанию проекта через набор логических элементов, или компонентов, и связей между их входами и выходами.


Вариант такого структурного описания имеет следующий вид:


Если архитектура проекта имеет структурную форму, после заголовка архитектуры располагаются объявления компонентов, которые предполагается использовать в проекте. В приведённом выше примере проекта lauout использованы два двухвходовых логических элемента И (and), один двухвходовый логический элемент ИЛИ (or) и инвертор НЕ (not). Эти компоненты должны быть определены, т. е. их VHDL-проекты должны уже существовать. Все VHDL-проекты компонентов цифровых устройств также могут быть сохранены в виде одного пакета (package), доступ к которому можно получить включая объявления библиотек и пакетов в заголовок проекта, что мы рассмотрим далее. Объявления компонентов содержат описания входных (например, in_1, in_2) и выходных (например, out1) портов.
Затем необходимо определить внутренние связи путём объявления именованных сигналов. В нашем примере эти внутренние сигналы имеют имена a1_n, b1_n, x, y. Обратите внимание на то, что в объявлении сигнала всегда требуется указывать его тип.
____При структурной форме в разделе выполняемых операторов архитектуры проекта (т. е. после ключевого слова begin) должны располагаться операторы реализации компонентов, а также операторы, описывающие взаимосвязь компонентов между собой. Каждый оператор реализации создаёт новый уровень иерархии и начинается с имени реализуемого экземпляра компонента (например, u0), сопровождаемого двоеточием, идентификатором самого компонента и ключевым словом port map. Говорят, что оператор port map реализует междукомпонентные связи объявляемого в нём конкретного экземпляра компонента.
____В частности, в рассматриваемом примере междукомпонентные связи экземпляра u0 компонента not_1 определены посредством позиционной (неявной) реализации: внешний сигнал a1 соответствует входу in_1 логического компонента not_1, а внутренний сигнал a1_n - выходу компонента not_1. Точно также для экземпляра u2: and_2 первые два сигнала (c1 и a1_n) соответствуют входам in_1 и in_2 компонента and_2 соответственно, а сигнал x - выходу out1 этого компонента.
____Альтернативный метод определения межкомпонентных связей состоит в использовании именованной (явной) реализации связей между портами. В этом случае синтаксис оператора реализации имеет следующий вид:


Обратите внимание на то, что порядок, в котором эти операторы приведены в разделе выполняемых операторов архитектуры проекта, не имеет никакого значения и не сказывается на конечном результате, так как эти операторы выполняются параллельно. Это объясняется тем, что схемное решение, которое описано этими операторами, не зависит от порядка расположения операторов, поскольку оно фактически определяется списком выбранных компонентов и жёстко установленными соединениями между ними.
____Теперь вернёмся к тому обстоятельству, что структурная форма архитектуры, как уже отмечалось выше, позволяет создать иерархический VHDL-проект, в котором заранее определённые компоненты можно использовать многократно. То же самое относится и к самому высокоуровневому проекту, который в свою очередь может являться компонентом для проекта ещё более высокого уровня иерархии, и т. д. Это свойство VHDL-проектов позволяет значительно упростить графические изображения больших интегральных цифровых устройств. Таким образом, несложно прийти к заключению о том, что иерархическое проектирование всегда предпочтительнее, чем одноуровневое.
____Давайте рассмотрим использование иерархической технологии проектирования на примере проекта 4-битного сумматора, показанного на рисунке ниже:


Как известно, любой полный однобитный сумматор может быть описан следующими булевыми выражениями, используемыми для получения суммы (sum) и сигнала переноса (carry).


В VHDL-проекте fourbitadd мы определим субпроект (т. е. VHDL-проект более низкого уровня иерархии) полного однобитного сумматора fulladder, а затем используем его в качестве компонента основного проекта. Обратите внимание на то, что архитектура fulladder_behav проекта fulladder имеет компонентную форму, поскольку в ней не нужно использовать несколько экземпляров одного и того же компонента. Архитектурой fouradder_structure проекта fourbitadd, имеющей структурную форму, реализуется четыре экземпляра полного однобитного сумматора. Обратите внимание также на ключевое слово use, задействованное в проекте fourbitadd, с помощью которого к проекту подключаются внешние библиотеки и пакеты (более подробно их мы рассмотрим далее).



Обратите внимание на то, что в проекте 4-битного сумматора использованы те же самые имена для входных портов, что и для портов полного однобитного сумматора (они названы a и b). Это не вызывает проблем в языке VHDL, так как эти названия относятся к разным уровням иерархического проекта. Однако для облегчения восприятия текстов VHDL-проектов на практике желательно назначать более осмысленные и уникальные имена.


Библиотеки и пакеты.

____Библиотека (library) в VHDL - это нечто вроде каталога, в котором компилятор получает недостающую информацию, используемую в разрабатываемом проекте, но отсутствующую в явном виде в самом проекте. В качестве пакета (package) компиляторы VHDL используют библиотечные файлы или модули, которые содержат объявления наиболее задействованных объектов: типов данных, компонентов, сигналов, процедур и функций и т. п. Применение пакетов позволяет подобные объекты многократно использовать в разных VHDL-проектах.
____Например, как отмечалось выше, тип данных std_logic определён в пакете ieee.std_logic_1164, который входит в библиотеку ieee. Поэтому, чтобы в VHDL-проекте использовать тип std_logic, требуется подключить к проекту соответствующие библиотеку и пакет. Эти операции выполняются в начале VHDL-проекта с помощью ключевых слов library и use соответственно, например, таким образом:


Расширение .all означает, что в проекте можно использовать описания всех объектов, содержащихся в пакете ieee.std_logic_1164.
____Большинство САПР VHDL поддерживают работу с библиотекой ieee, в состав которой входят следующие пакеты:

  • std_logic_1164. Содержит определения основных типов данных.
  • std_logic_arith. Содержит арифметические функции, функции преобразования и сравнения, работающие с такими типами данных, как signed, unsigned, integer, std_ulogic, std_logic, std_logic_unsigned и std_logic_vector.
  • std_logic_misc. Содержит определения вспомогательных типов данных, а также подтипов, констант и функций, используемых пакетом std_logic_1164.

____Чтобы задействовать любой из этих пакетов, нужно включить в состав проекта операторы объявления требуемых библиотек и пакетов, вида:


____Разработчик цифрового устройства может создать и затем подключить к проекту собственный пакет. Объявление пакета должно удовлетворять следующему синтаксису:


Например, базовые логические функции and2, or2, nand2, nor2, xor2 и т. д. необходимо предварительно определить как компоненты, прежде чем их можно будет использовать в этом качестве в разрабатываемом проекте. Определить базовые логические функции в качестве компонентов можно, например, в пакете с именем basic_func таким образом:



____Здесь следует обратить внимание на то, что в интерфейсе пакета в подразделе component указано время задержки 5нс (delay: time := 5 ns). Следует заметить, что явное указание времени задержки игнорируется многими инструментальными средствами синтеза. В конструкции разрабатываемого пакета использован встроенный тип std_logic, который объявлен в пакете std_logic_1164. Для достижения видимости описания типа std_logic из разрабатываемого пакета в него включены операторы
library ieee;
и
use ieee.std_logic_1164.all;
____Созданный пакет должен быть откомпилирован и помещён в пользовательскую библиотеку. Такую библиотеку можно именовать как my_func, в создаваемом проекте требуется подключить эту библиотеку my_func и пакет basic_func с помощью операторов следующего вида:



Внимание! Язык VHDL допускает перечисление имён библиотек и пакетов после ключевых слов library и use соответственно, разделяя их запятыми. Естественно, что можно объявлять в создаваемом проекте библиотеки и пакеты с помощью отдельных операторов, как показано на следующем листинге.


.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:50), всего редактировалось 5 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:49

Лексические элементы языка VHDL.


Идентификаторы.

____Идентификаторы (identifiers) - это определяемые пользователем слова, используемые для обозначения программных объектов (проектов, интерфейсов, архитектур, пакетов, сигналов, переменных, констант, компонентов и др.) в VHDL-проектах. Выше уже приводились примеры идентификаторов для входных и выходных сигналов, а также для объявлений интерфейсов и архитектур проектов. При выборе идентификаторов следует соблюдать следующие правила:

  • Идентификатор может содержать прописные и (или) строчные символы латинского алфавита и цифры (A...Z, a...z, 0...9), разделяемые одним символом подчёркивания.
  • Первым символом в идентификаторе должен быть символ латинского алфавита. Символ подчёркивания не может быть первым или последним символом идентификатора.
  • Использовать подряд два символа подчёркивания в идентификаторе запрещается.
  • Строчные и прописные символы латинского алфавита в идентификаторе считаются одинаковыми, т. е. идентификаторы And2, AND2 или and2 равнозначны. Другими словами, идентификаторы не чувствительны к регистру символов.
  • Идентификатор может иметь любую длину.

____Идентификаторы, создаваемые по приведённым выше правилам, называют базовыми идентификаторами (baze identifier). Однако эти правила часто слишком ограничивают разработчиков, не позволяя создавать имена сигналов с особыми свойствами. Ограничения, наложенные на базовые идентификаторы, сняты в группе так называемых расширенных идентификаторов (extended identifier). К рассмотренным идентификаторам применяются все те же правила, что и для базовых, но с учётом следующих особенностей:

  • Расширенные идентификаторы могут начинаться и заканчиваться символом обратной косой черты ( \ ).
  • Расширенные идентификаторы должны отличаться от зарезервированных слов, ключевых слов и любых других базовых идентификаторов. Например, можно использовать расширенный идентификатор \if, который не будет восприниматься компилятором в качестве ключевого слова if.
  • Внутри расширенного идентификатора также может содержаться символ обратной косой черты. В такой ситуации он должен предваряться дополнительным символом обратной косой черты, т. е. данных символов внутри расширенного идентификатора должно быть два.

____Расширенные идентификаторы поддерживаются только начиная с версии языка VHDL-93. В версии VHDL-87 они отсутствуют.
____Примеры корректного оформления расширенных идентификаторов:
\input\, \input#1\, \rst\\on\.


Ключевые слова.

____Некоторые идентификаторы используются системой проектирования как ключевые слова (keyword) для организации особых, специфических конструкций языка (операторов языка). Эти ключевые слова не могут применяться как идентификаторы для сигналов или объектов, которые разработчик самостоятельно определяет в создаваемом проекте. Некоторые из этих ключевых слов приводились ранее: in, out, or, and, port, map, end и т. д. Ключевые слова часто выделяются САПР VHDL полужирным шрифтом или цветом. Полный список ключевых слов языка VHDL представлен ниже:



Зарезервированные слова.

____Некоторые идентификаторы являются в конкретных САПР VHDL зарезервированными. Зарезервированные идентификаторы используются для указания информационных характеристик (типов) программных объектов в операторах их объявлений. В частности, зарезервированными идентификаторами являются такие идентификаторы, как bit, bit_vector, std_logic, std_logic_vector и т. д. Зарезервированные идентификаторы запрещено применять в качестве базовых идентификаторов.
____Стандарт VHDL-93 поддерживает следующие зарезервированные слова:

  • bit
  • bit_vector
  • integer
  • float
  • string
  • character
  • std_logic
  • std_logic_vector
  • std_logic_signed
  • std_logic_unsigned


Числа.

____По умолчанию числа, или числовые литералы, в языке VHDL представляются в десятичной системе счисления. Язык VHDL поддерживает работу с целочисленными (integer) и действительными (real) литералами. Целочисленный литерал состоит из целого числа без десятичной точки, а действительный литерал всегда содержит десятичную точку. Экспоненциальное представление как целых, так и действительных чисел поддерживается путём использования символов ( Е ) или ( е ). Для целочисленных литералов экспонента должна всегда быть положительным числом.

Примеры целочисленных литералов: 12, 10, 23, 128E3, 14e+6

Примеры вещественных литералов: 1.4, 256.8, 3.14e-2

____Число -23 является комбинацией операции минус и целочисленного литерала.

____Литералы, как правило, используются в качестве значений, которые присваиваются переменным или сигналам, а также для инициализации констант соответствующего типа. В языке VHDL различают следующие типы литералов: десятичные, базовые, символьные, строчные и строчные битовые.
Десятичные литералы.
Представляют собой числовые значения и подразделяются на целые и вещественные, которые могут быть представлены в обычной или экспоненциальной форме.
Например, 2 - целый литерал, 5e2 - целый с экспонентой, 9.0 - вещественный, 2.4e-4 - вещественный с экспонентой.

Базовые литералы.
Являются числовыми значениями с явным указанием системы счисления, которые представлены в следующей форме:

<система_счисления>#<числовое_значение>#

Например,
2#1001# - базовый двоичный литера;
10#233# - базовый десятичный литерал;
16#6F# - базовый шестнадцатеричный литерал.

Символьные литералы.
Образуют символы, заключённые в одиночные апострофы, например, 'F', 'A', 'g'.

Строчные литералы.
Представляют собой последовательность алфавитных символов, заключённых в апострофы (двойные кавычки). Например, "gotohome", "thisismoon".

Строчные битовые литералы.
Содержат последовательность двоичных, восьмеричных или шестнадцатеричных символов, заключённых в апострофы (двойные кавычки), перед которыми указано условное обозначение системы представления:

B - двоичная;
O - восьмеричная;
X - шестнадцатеричная.
Например, B"0110", O"5743", X"7C4F".

Напоминание.
Комментарием считается часть строки или вся строка, которая начинается с двух следующих подряд дефисов символов ( -- ) и заканчивается концом этой строки. Комментарии, так же как пробелы и символы перевода строки, игнорируются компилятором и средствами синтеза VHDL.
.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:56), всего редактировалось 2 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:49

Программные элементы данных: константы, переменные и сигналы.


____Любой программный элемент данных в языке VHDL, прежде чем использоваться в проекте, должен быть объявлен (declared) с указанием типа (type) и значения (value). Программным элементом данных может быть константа (constant), переменная (variable), сигнал (signal), а также файл (file). До сих пор мы имели дело с сигналами, которые использовали как входные или выходные порты или в качестве внутренних связей. Сигналы можно рассматривать как программное представление проводников (wire) в схемном решении. Сигналы могут иметь текущее значение и определённый набор возможных значений, являясь функциями операторов установки значения сигнала (signal assignment). Переменные и константы используются в качестве вспомогательных программных элементов, используемых для моделирования поведения схем, в операторах process, подпрограммах-процедурах и подпрограммах-функциях, подобно тому как они используются в других языках программирования. Далее рассмотрим назначение и синтаксис каждого класса этих программных элементов данных.


Константы.

____Константа - это программный элемент данных, значение которого остаётся всегда постоянным в процессе моделирования и работы проекта. Объявление программной величины константы имеет следующий синтаксис:

constant имя_константы: тип [ := начальное_значение ];

____В операторе объявления константы может отсутствовать та часть объявления, в которой указывается начальное значение константы, т. е. [ := начальное_значение ]. Константы могут быть объявлены в разделе объявлений архитектуры проекта. В этом случае константа является видимой в пределах всей архитектуры того проекта, в котором она объявлена. Константы, объявленные в разделе объявлений оператора process, видимы только в пределах этого оператора process и могут использоваться только в этом конкретном операторе. Константы также могут объявляться в пакетах. Если константы имеют одинаковый тип и одинаковое начальное значение, их идентификаторы можно перечислять в операторе объявления в виде списка, отделяя одно имя от другого запятой.
____Ниже приведены примеры операторов объявлений констант:



Переменные.

____Переменная - это программный элемент данных, который в процессе моделирования работы проекта может принимать любое, но всегда единственное значение в определённый момент. В другой момент переменная может иметь другое значение. Значение переменной может быть модифицировано оператором присваивания значения переменной. При этом считается, что значение переменной модифицируется оператором присваивания значения немедленно (т. е. без временной задержки), как только этот оператор выполнен. Переменные должны объявляться только в подразделе объявлений оператора process. Объявление переменной имеет следующий синтаксис:

variable имя_переменной: тип [ := начальное_значение ];

____Ниже представлены примеры операторов объявлений переменных:


____В рассмотренных примерах переменная sum является целым числом, которое имеет диапазон от 0 до 255 и начальное значение 16 в начале процесса моделирования. В четвёртой строке примера определён битовый вектор sts_bit, содержащий 8 элементов, к каждому из которых можно обращаться по имени переменной с указанием индекса бита в векторе:

sts_bit (7), sts_bit (6), sts_bit (5), ... sts_bit (0).

____Как говорилось выше, значение переменной может модифицироваться с помощью оператора присвоения значения переменной. Этот оператор имеет следующий синтаксис:

Имя_переменной := выражение;

____Если переменные имеют одинаковый тип и одинаковое начальное значение, их идентификаторы можно перечислять в операторе объявления в виде списка, отделяя одно имя от другого запятой.


Сигналы.

____Сигнал - это основной программный элемент данных в VHDL-проектах, предназначенный для переноса информации между компонентами. Фактически сигналы связывают компоненты проекта в единую систему. Оператор объявления сигнала имеет следующий синтаксис:

signal имя_сигнала: тип [ := начальное значение ];

____Если сигналы имеют одинаковый тип и одинаковое начальное значение, их идентификаторы можно перечислять в операторе объявления в виде списка, отделяя одно имя от другого запятой.
____Ниже приведены примеры операторов объявлений сигналов:


____Значения сигналов изменяются при выполнении операторов установки значения сигналов. В отличие от переменных в операторе установки значения сигналов можно указывать временную задержку, по истечении которой следует присвоить сигналу результат вычисления соответствующего выражения, например:

sum <= (a xor b) after 2 ns;

____Кроме того, у сигнала есть ещё одно отличие от переменной, он может представлять не одно значение, а несколько значений на своей временной диаграмме, используя семейство событий, например:

signal wavefrm: std_logic;
wavefrm <= '0', '1' after 5 ns, '0' after 10 ns, '1' after 20 ns;


Внимание! Помните, что переменная изменяет своё значение сразу же после завершения выполнения оператора присвоения. Сигнал же изменяет своё значение после завершения выполнения оператора установки значения сигнала не сразу, а лишь по истечении заданной временной задержки delta, установленной по умолчанию. Последнее обстоятельство, т. е. возможность явно не указывать временную задержку в операторах установки значения сигналов, может привести к неверным результатам моделирования.

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




____В первом примере операторы присвоения значений переменным variable1, variable2 и variable3 вычисляются последовательно, т. е. строка за строкой. При этом их значения модифицируются этими операторами мгновенно и становятся известными к моменту появления сигнала trigger. Следовательно, сигнал result вычисляется уже с новыми значениями переменных, а именно: variable1 = 2, variable2 = 5 (=2+3), variable3 = 5. Так как сигнал result будет вычислен во время активизации сигнала trigger, то момент модификации его значения будет определяться установленной по умолчанию задержкой trigger + delta. Новое значение сигнала result будет равно result = 12.
____Во втором примере сигналы начнут вычисляться во время активизации сигнала trigger. При вычислении новых значений сигналов в этот момент будут использоваться начальные значения сигналов. Все сигналы, участвующие в процессе вычислений, будут модифицированы с временной задержкой delta после того, как активизирован сигнал trigger. Таким образом, сигналы будут иметь следующие значения: signal1 = 2, signal2 = 4 (=1+3), signal3 = 2 и result = 8.

.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 20:58), всего редактировалось 1 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:51

Типы данных.


____В языке любой программный элемент данных, будь то константа, переменная или сигнал, относится к тому или иному конкретному типу. Тип (type) задаёт информационные характеристики программного элемента данных, определяет набор допустимых значений элемента, а также набор операций, которые применимы к этому элементу. Язык VHDL относится к разряду языков со строгим контролем типов, т. е. в VHDL не допускается использование нетипизированных данных. Более того, в VHDL не допускается также присвоение значения одного типа элементу данных другого типа. Также в VHDL разработчик должен позаботиться о преобразовании типов до выполнения операции присвоения.


Встроенные типы данных пакета standard.

____Спецификации языка VHDL предусматривают использование нескольких встроенных типов данных, которые представлены в таблице:


Определённых в пакете standard библиотеки std. Для того чтобы использовать эти типы данных, в проект следует включить следующие операторы:



Пользовательские типы и подтипы.

____Разработчик может ввести в проект новые типы, используя оператор типа, который начинается ключевым словом type, снабжается идентификатором и определяет диапазон значений для нового пользовательского типа. Синтаксис объявления типа имеет следующий вид:

type идентификатор_типа is range значение1 (to)/(downto) значение2;

____Кроме того, в VHDL допускается создание пользовательских подтипов (subtype). Оператор объявления подтипа начинается ключевым словом subtype, снабжается идентификатором и идентификатором родительского типа, а также диапазоном значений для нового пользовательского подтипа. Синтаксис объявления подтипа имеет следующий вид:

subtype идентификатор is идентификатор_типа range значение1 (to)/(downto) значение2;

____Подтип представляет собой подмножество значений, взятое из родительского типа. Подтипы удобно использовать в тех случаях, когда по тем или иным причинам в VHDL-проекте нужно использовать часть диапазона, определённого типом, но при этом создавать отдельный тип не обязательно.
____Ниже приведены примеры операторов объявления пользовательских типов и подтипов:



Физические типы.

____Язык VHDL поддерживает работу с физическими величинами. Однако в пакете std.standard определены только единицы измерения времени. В терминах языка VHDL это означает, что в пакете standard объявлен только физический тип (physical type) time. Синтаксис определения этого типа имеет следующий вид:


____Для работы с другими физическими величинами разработчик должен сам определить для них единицы измерения, т. е. объявить пользовательский тип для представления в VHDL-проекте требуемой физической величины. Так, например, если пользователю требуется в проекте работать с единицами измерения сопротивления участка цепи, он должен определить физический тип, например с именем resistance. В этом случае оператор объявления типа resistance может иметь вид:


____Ниже показан пример оператора объявления константы line_cond, имеющей пользовательский физический тип resistance.




Внимание! При сопровождении числового значения единицей измерения перед именем единицы измерения должен присутствовать пробел.

____В тех случаях, когда нужно многократно использовать однажды объявленный пользовательский тип, следует либо включить оператор объявления этого типа в раздел объявлений архитектуры проекта, либо поместить такой оператор в пакет (package). Последний подключается к проекту с помощью оператора package. Например, приведённый ниже пакет my_types можно подключить к проекту, воспользовавшись оператором package my_types;




Перечислимые типы.

____Базовым компонентом перечислимых типов (enumerated type) является список литеральных символов и (или) идентификаторов. Язык VHDL поддерживает работу как со встроенным перечислимым типом, так и с пользовательскими перечислимыми типами. Последние очень удобно использовать при формировании проектов на абстрактном уровне, т. е. проектов конечных автоматов. Синтаксис объявления перечислимого типа имеет следующий вид:

type имя_типа is (список_идентификаторов_или_символов);

____Ниже приведено несколько примеров объявлений перечислимых типов:


____Примеры операторов объявлений программных элементов данных с приведёнными выше перечислимыми типами показаны ниже:



Примечание. Если в операторе объявления сигнала с перечислимым типом явно не указывается начальное значение сигнала, по умолчанию используется первое (крайнее левое) значение из списка, указанного в объявлении соответствующего перечислимого типа.

____Примером встроенного перечислимого типа, объявленного в пакете std_logic_1164, является тип std_ulogic. Оператор объявления типа std_ulogic имеет вид:


____Чтобы использовать этот тип в проекте, разработчик должен включить перед каждым объявлением интерфейса проекта следующую пару операторов:


____Этот тип создан исходя из того, что в цифровом устройстве в общем случае может быть несколько формирователей сигнала, называемых также драйверами (driver), между которыми может возникнуть конкуренция. В случае возникновения конфликтной ситуации меду несколькими источниками выходной сигнал будет неопределённым. Простейший пример такой конфликтной ситуации - это соединение выходов логического элемента И (and) и логического элемента НЕ (not) с подключением общего выходного сигнала к выводу out1. Для того чтобы разрешить конфликт между источниками сигнала и установить окончательное значение для сигнала на выходе out1, требуется вызвать так называемую разрешающую функцию (resolution function).
____Так, если сигнал имеет тип std_ulogic и может формироваться несколькими драйверами, разработчик должен позаботиться о создании разрешающей функции. В пакете std_logic_1164 определена используемая по умолчанию разрешающая функция resolved. Создав в VHDL-проекте пользовательскую функцию с таким именем, можно использовать следующий оператор объявления сигнала out1, формируемого двумя конфликтующими источниками:


____Таким образом, если возникает конкуренция нескольких формирователей сигнала, для разрешения конфликта будет вызвана функция resolved, в которой разработчик должен разместить программный код, определяющий конечное значение сигнала out1. Можно также объявит сигнал out1 как сигнал типа std_logic, поскольку в операторе объявления подтипа std_logic, определённого в пакете std_logic_1164 на основе родительского типа std_ulogic, разрешающая функция resolved используется по умолчанию. Это позволяет разработчику в VHDL-проекте ограничиться объявлением сигнала следующего вида:


____Для разрешения конфликтов разработчику остаётся лишь создать соответствующий программный код функции resolved.

.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 21:00), всего редактировалось 1 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:52

Немного потренируемся, так сказать практическое занятие.


Создание проекта, если модуль верхнего уровня на VHDL.


Далее можно приступать непосредственно к созданию нового проекта, это так сказать первый шаг, на всём пути который обычно необходимо пройти при проектировании цифрового устройства. Заключается он, в общем, в описании устройства на языке VHDL. Другие способы и языки, я не рассматриваю, пока.

Создание VHDL-описания устройства или его блоков начинается с создания нового проекта. Для этого можно воспользоваться кнопкой New Project... (создать новый проект) в приведённом выше поле Project commands или выбрав в основном меню раздел File (Работа с файлами, функции печати и завершения работы) команду New Project... (создать новый проект):


В результате чего у нас запустится мастер создания нового проекта (New Project Wizard):


В данном окне необходимо указать имя проекта. Важно обратить внимание, на то, чтобы как в имени, так и при указании путей размещения, не было пробелов и символов кириллицы. Так же, следует проследить, чтобы проект не был размещён в той же папке где и сама САПР Xilinx ISE. Ниже представлено окно с заполненными данными:


Внизу окна мы должны выбрать параметр Top-level source type (тип файла верхнего уровня иерархии), он задаёт формат представления главного модуля проекта, в который будут вложены другие модули проекта.
- HDL (Hardware Description Language) – означает, что файлом верхнего уровня является текстовый файл на языке описания аппаратуры;
- Schematic – файл верхнего уровня представляет собой графическое изображение принципиальной электрической схемы, составленной из стандартных библиотечных модулей, и модулей, добавляемых разработчиком в виде других графических схем или файлов на HDL;
- EDIF, NGC/NGO – устройство представляется в виде готовых списков связей, разработанных ранее в САПР ISE или с помощью иных программных инструментов. Маршруты, основанные на EDIF и NGC/NGO, представляют интерес в том случае, если в ПЛИС выполняется устройство, приобретённое в виде IP-ядра. В такой проект невозможно внести несанкционированные изменения, или восстановить его схему, имея NGC-представление.

После указания и выбора всех параметров, нажимаем кнопку Next (Далее) и у нас появляется следующее окошко:


В данном диалоговом окне необходимо указать наименование микросхемы ПЛИС, которую мы будем использовать для проекта. В последствии, при необходимости, её тип можно будет изменить. В строке Synthesis Tool тип инструментов синтеза XST (VHDL/Verilog). В следующей строке Simulator программу для моделирования iSim (VHDL/Verilog) и затем язык описания аппаратуры (VHDL). Пример правильно заполненного этого окна, представлен выше. После заполнения всех параметров можно переходить к следующему окну, для этого, как и прежде нажимаем кнопку Next (Далее) и у нас появляется следующее финальное окошко:


Данное окно содержит форму отчёта, в которой обобщены исходные данные проекта. Вся эта информация будет сохранена в соответствующем текстовом файле, автоматически в каталоге проекта, для дальнейшего использования её. При необходимости что-то исправить, можно нажать кнопку Back и вернуться назад, к предыдущим формам для их исправления. После нажатия кнопки Finish в окне исходных модулей навигатора проекта появится название текущего проекта и тип выбранной микросхемы ПЛИС:


Интерфейс пользователя имеет определённую комбинацию окон:


Окно исходных модулей, то есть непосредственно навигатор проекта, окно документов, окно процессов (проектных процедур), которые могут быть выполнены для модуля, выбранного в окне навигатора проекта, окно консоли сообщений о ходе выполнения проектных процедур и их результатах.

В окне Design, на рисунке выше обозначено как навигатор проекта (исходные модули), мы можем просмотреть и при необходимости исправить свойства проекта. Для этого в данном окне выделяем строку с названием нашей микросхемы ПЛИС и нажав правую кнопку мыши вызываем меню свойств. В появившемся меню выбираем Design Properties:


В результате чего откроется окно Design Properties в котором мы можем изменить свойства проекта:


После изменения свойств или их просмотра, нажимаем кнопку Ок для завершения.

Итак, что же мы имеем на данный момент, мы создали проект, но он пока пуст, в нём нет никаких модулей. Выглядит у нас, пока, всё вот так:

.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 21:03), всего редактировалось 1 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:52

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


Все картинки кликабельны.

Итак, у нас установлена САПР Xilinx ISE 14.4 (для версии 14.7 отличий не земетил, всё так же) и соответственно на рабочем столе имеется соответствующий значок для запуска САПР:


Двойным нажатием левой кнопки мыши по данному значку, запускаем САПР Xilinx ISE и у нас появится главное окно:


В левой части имеются четыре кнопки, находящиеся в поле Project commands:


Нам необходимо нажать кнопку New Project... для создания нового проекта. Все действия пока абсолютно идентичны тем, что и при создании любого проекта. После нажатия данной кнопки, появляется очередное окно, мастера создания нового проекта New Project Wizard:


В данном окне нам необходимо в поле Name: указать имя проекта, у меня он будет называться pr2_spa_3A, обязательно только английскими буквами, также ниже при необходимости указать путь расположения на диске нашего проекта и в поле Top-level source type: выбрать пункт Schematic:


Именно в пункте Top-level source type: основное отличие от предыдущей практики по созданию нового проекта, выбрав Schematic верхний уровень в иерархии будет представлен в схемотехническом виде. Далее нажимаем кнопку Next и у нас появится очередное окно, в котором нужно будет выбрать семейство и конкретный тип микросхемы ПЛИС:


После выбора, нажимаем кнопку Next и в появившемся окне кнопку Finish


И мы возвращаемся в главное окно, где слева мы видим название проекта и нашей микросхемы:


Теперь движемся далее. В меню нажимаем Project и в выпавшей вкладке выбираем New Source...


Так же тоже самое действие можно произвести щёлкнув правой кнопкой по названию нашей микросхемы ПЛИС:


В результат появляется окно New Source Wizard, где нам необходимо будет выбрать пункт Schematic и указать название нашей схемы, я назову её также pr2_spa_3A, а также убедиться, что установлена галочка добавления файла к проекту (Add to project)


И нажимаем в нижней части нашего окна кнопку Next


В результате чего появляется окно Summary где отображаются все наши выбранные настройки, нажимаем кнопку Finish


И через некоторое время видим, окно схемотехнического редактора:


Если не нравится белое рабочее поле, то его цвет можно сменить на чёрный, для этого в меню нужно выбрать пункт Edit и в выпавшей вкладке пункт Preferences


После появления окна Preferences - Schematic Editor выбрать в правой части окна пункт Schematic Editor и в нём подпункт Colors


В этом окне в поле Color Scheme нужно выбрать пункт Black Background и для применения нажать кнопку Apply, затем Ok


В результате окно примет следующий вид:


Теперь, если мы закроем схемный редактор и выйдем в основное меню, то в левой части мы увидим, что к нашему проекту добавился файл с расширением .sch


Двойной щелчок левой кнопкой мышки на данной строке, опять запустит схемотехнический редактор.

Итак, в левой нижней части окна имеется вкладка Symbols


Перейдя на данную закладку, можно переносить на схему стандартные элементы


При помощи значка увеличительного стекла (лупы), можно увеличивать или уменьшать изображение


.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 21:05), всего редактировалось 3 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Ср Ноя 04 2015, 18:53

резерв.


Последний раз редактировалось: Viktor2312 (Вт Май 10 2016, 21:06), всего редактировалось 1 раз(а)
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:04

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:04

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:04

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:05

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:05

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:05

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:05

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:06

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:06

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Изучаем основы VHDL, ISE, ПЛИС Xilinx.

Сообщение  Viktor2312 в Вт Апр 26 2016, 12:06

резерв.
avatar
Viktor2312
Гуру+

Сообщения : 10337
Дата регистрации : 2012-08-10
Возраст : 38
Откуда : Пятигорск

Посмотреть профиль

Вернуться к началу Перейти вниз

Страница 1 из 2 1, 2  Следующий

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения