Академический Документы
Профессиональный Документы
Культура Документы
Александр Мурсаев
Евгений Угрюмов
ПРОЕКТИРОВАНИЕ СИСТЕМ
НА МИКРОСХЕМАХ
ПРОГРАММИРУЕМОЙ ЛОГИКИ
Санкт -Петербург
«БХВ -Петербург»
2002
УДК 681.3(075.8)
ББК 32.973 -02я73
Г91
УДК 681.3(075.8)
ББК 32.973 -02я73
Предисловие 9
Введение 13
вом виде (на языках Verilog, VHDL и др.) является также возможность легкого
переноса проекта в различные приборные среды, простота настройки или
перенастройки параметров разрабатываемых устройств или их фрагментов,
например, разрядности или подмножества реализуемых функций. У разра-
ботчика появляются предпосылки расширять возможности языка за счет
введения собственных макроопределений, ориентированных на класс реали-
зуемых проектов.
Кроме того, языковое описание является эффективным способом перевода
программ пользователя, построенных на базе стандартных универсальных
языков (например, С), в языки описания аппаратуры и обратно. Уже сего-
дня имеются возможности автоматического генерирования HDL -программ
на базе других формальных представлений. Развитие языковых средств про-
ектирования сближает методы проектирования аппаратуры и программных
средств, расширяя возможности разработчиков, и улучшает взаимопонима-
ние между проектировщиками различных подсистем вычислительных ком-
плексов.
Нельзя не отметить значительное отставание российских проектных органи-
заций от их западных конкурентов не только и не столько в количестве
привлекаемых систем проектирования, сколько в готовности персонала ис-
пользовать современные технологии проектирования. В частности, до сих
пор, в отличие от мировой ситуации, в России подавляющее большинство
проектов в области цифровой техники реализуется с использованием схем-
ного (графического) ввода проекта. Авторы надеются, что издание этой
книги будет способствовать подготовке специалистов, владеющих современ-
ными средствами проектирования, и улучшению ситуации.
Структура предлагаемой книги соответствует перечисленным особенностям
создания проекта.
Глава 1 представляет обзор рынка программируемых БИС. Авторы не стре-
мились детализировать архитектурные и схемотехнические особенности
(такие сведения можно найти в работах [4, 17, 24, 27, 31, 35, 45, 53] и др.),
хотя в отношении новейших семейств программируемых ИС соответствую-
щие данные приводятся. Больше внимания уделено сравнительной оценке.
Содержание главы должно стать руководством для принятия решений о вы-
боре технических средств на ранних этапах выполнения проекта.
Материал главы 2 на сегодня не имеет аналогов в общедоступной литерату-
ре. Здесь предпринята попытка систематизированного представления не
только отдельных проектных процедур применительно к проектированию
систем на программируемых микросхемах, но, прежде всего, выявления их
взаимосвязи и взаимной обусловленности. Отмечаются отличия современ-
ных технологий проектирования от концепций, принимавшихся ранее. Под-
черкивается возможность и целесообразность при использовании современ -
Введение 21_
Элементная база
электронных устройств и систем,
Архитектура и схемотехника
интегральных схем
с программируемой структурой
Стандартные Специализированные
Standard ASIC
( Замечание )
Особо следует остановиться на термине ASSP (Application Specific Standard
Products), который получает все более широкое распространение. Этому тер-
мину не всегда придается одинаковый смысл. В данной книге термин ASSP по-
нимается как синоним термина ИСПС и определяет способ конфигурирования
схемы под определенную задачу. Для программирования ASIC нужна разра-
ботка специальных фотошаблонов с рисунками межсоединений, требующая
больших затрат средств и времени. Применяя для целей конфигурирования
программируемые логические интегральные схемы (ПЛИС), можно исклю-
чить разработку шаблонов и сравнительно простыми способами получить
эффективные средства построения цифровых систем, содержащие набор
схем с необходимым функционированием. Такие архитектуры и относятся к
классу ASSP, причем первая часть аббревиатуры сохраняет преемственность
с термином ASIC, а вторая подчеркивает принадлежность микросхем к стан-
дартной для электронной промышленности продукции.
26 Проектирование систем на микросхемах программируемой логики
ров, а для минимального размера 0,1 мкм ожидается 750 тыс. долларов или
более.
Проекты, реализованные на ИС с программируемой пользователем структу-
рой, стали успешно конкурировать прежде всего с двумя первыми из пере-
численных выше методов реализации специализированных устройств. В на-
стоящее время проектирование систем и логических устройств все больше
перемещается в сторону широкого использования программируемых схем
для всех вариантов разработки электронных аппаратных средств.
Интегральные схемы с программируемой пользователем структурой (ИСПС)
существуют уже около 25 лет и к настоящему времени представлены множе-
ством разнообразных семейств. Программирование структур вначале было
применено в программируемых логических матрицах (ПЛМ), программи-
руемой матричной логике (ПМЛ) и базовых матричных кристаллах (БМК).
Вслед за ними возникли новые классы более сложных ИСПС, продолжаю-
щих линии развития матричной логики и базовых матричных кристаллов:
CPLD и FPGA, соответственно. Затем были реализованы ИСПС комбини-
рованной (смешанной) архитектуры, сочетавшие признаки CPLD и FPGA.
Позднее удалось разработать ИСПС с аналоговыми и аналого -цифровыми
элементами, которые можно обозначить как ПАИС (программируемые ана-
логовые интегральные схемы).
б
Рис. 1.2. Классификация ПЛИС по архитектурным признакам (а)
и уровню интеграции (б)
34 Проектирование систем на микросхемах программируемой логики
от ПМС
кФБ
б
Рис. 1.5. Схема программируемой матрицы соединений CPLD (а)
и схема передачи сигналов из этой матрицы в функциональный блок (б)
46 Проектирование систем на микросхемах программируемой логики
Разделяемый
ЛР
б
Рис. 1.7. Схема выработки ДНФ логической функции в простейшем варианте CPLD (а)
и логические расширители параллельного и последовательного типов (б)
48 _ Проектирование систем на микросхемах программируемой логики
F= qlvq2vq3v!xlvx2v!x3vx10 = q1vq2vq3v!(xl!x2x5!xl0).
Параллельный расширитель позволяет передавать термы одного канала дру-
гому. Способность принимать в свой канал термы от соседнего канала
обычно означает и возможность приема через него термов и более далеких
каналов с образованием цепочки для сбора термов от нескольких каналов
(например, в пределах целого функционального блока). Можно, естествен-
но, и отдавать собственные термы или их часть другим каналам (в част-
ности, соседним, а через них и более далеким).
Термы от МРТ поступают далее на часть ФБ, называемую макроячейкой
(МЯ). Макроячейка содержит в качестве основы программируемые мульти-
плексоры, триггер (или триггеры) и формирует группу выходных сигналов
ФБ в нескольких их вариантах.
( Замечание )
Термин "макроячейка" трактуется в разных источниках по -разному. Наряду с
указанным определением встречаются и такие, согласно которым макроячей-
кой называют часть ФБ, содержащую все его последовательно включенные
части (группу элементов И, МРТ и все последующие элементы, относящиеся
к данному каналу выработки выходных функций).
GSR GCK
Обмен термами
с вышележащей
макроячейкой
Обмен термами
с нижележащей
макроячейкой
лы, поступающие извне через БВВ, так и сигналы обратных связей, пода-
ваемые в матрицу И с выходов макроячеек. На рис. 1.8 входные сигналы
матрицы независимо от их характера обозначены через x1, ..., хМ. Входные
буферы преобразуют сигналы в парафазные, представляя каждый сигнал его
прямым и инверсным значениями, так что в матрице имеется 2т вертикаль-
ных линий и образующие ее конъюнкторы имеют по 1т входов. Пять тер-
мов из матрицы И поступают на элемент ИЛИ для образования логической
функции. Для управления триггером и буферами блока ввода/вывода выра-
батываются также термы PTSet, PTClock, PTReset, которые могут быть ис-
пользованы как сигналы установки, синхронизации и сброса триггера. Терм
РТОЕ — программируемый терм управления третьим состоянием буфера
БВВ (ОЕ, Output Enable). Всего в матрице И на рис. 1.8 программируются
9N термов.
На выходе элемента ИЛИ вырабатывается логическая функция в форме
ДНФ ранга не более т. Ее значение передается дальше через элемент сло-
жения по модулю 2, на второй вход которого, в зависимости от программи-
рования мультиплексора 1, может быть подан логический нуль, логическая
единица или терм РТ1. В первом случае функция передается без изменений
(F= F*), во втором инвертируется (F= !F*), в третьем передается в прямом
виде во всех ситуациях за исключением такой, в которой РТ1 = 1.
Мультиплексор MUX5 программируется для передачи на выход МЯ либо
непосредственно значения функции F (комбинационный выход), либо со-
стояния триггера (регистровый выход). Характер тактирования триггера оп-
ределяется программированием мультиплексора MUX4, при этом возможно
использование глобального синхросигнала (GCK, Global Clock) или сигнала,
порождаемого термом PTClock. Асинхронные установка и сброс триггера
производятся либо глобальным сигналом (GSR, Global Set/Reset), либо тер-
мами PTSet и PTReset, что определяется программированием мультиплексо-
ров MUX2 и MUX3. Сам триггер программируется на режимы триггера за-
держки (типа D) или счетного (типа Т).
Основной выходной сигнал макроячейки поступает как в ПМС, которая
может направлять его по любому требуемому маршруту, так и в блоки вво-
да/вывода.
БВВ
LUT
RG
MUXs
Области
межсоединений
a
Рис. 1.10. Обобщенная структура FPGA (а)
и основные части их функциональных блоков (б)
б в
Рис. 1.13. Пример системы коммутации FPGA (а), схема переключательного блока (б)
и схема для установления соединений коммутируемых линий (в)
Глава 1. Элементная база электронных устройств и систем 61_
Схемы управления
тактированием
Шины быстрых
Схемы 4 -входовых I
ФПтипаШТ - - '
Схемы многофунк -
циональной встро-
енной памяти
Вход каскадирования
Выход каскадирования
а
Выход каскадирования
Выход переноса
Прямые связи
с соседними КЛБ
Основа КЛБ — логическая ячейка ЛЯ (LC, Logic Cell). В каждом КЛБ раз-
мещены 4 логических ячейки, организованные в две идентичные секции
(Slices). Логическая ячейка (рис. 1.22) по своей структуре подобна рассмот-
ренным ранее типовым элементам FPGA и содержит 4 -входовой LUT -блок
с возможностью организации цепи переноса и триггер.
Вход переноса
16 линий декодированного
адреса
/ /
Записываемые Читаемые
/
ЗП/ЧТ данных
данные данные
Рис. 1.26. Схема доступа блоков FPGA и AVR к общей двухпортовой памяти
Глава 1. Элементная база электронных устройств и систем 87
0.5
налов. Уровень шумов равен приблизительно 40 нВ/Гц , что дает динами-
ческий диапазон около 100 дБ в диапазоне частот до 100 кГц. Типовое зна-
чение коэффициента гармоник на частоте 10 кГц составляет —88 дБ, а на
частоте 100 кГц — -67 дБ. Автоматическая калибровка смещения нуля
(длительностью 100 мс) обеспечивает максимальное смещение менее чем на
1 мВ при типовом значении 200 мкВ и любых конфигурациях схемы и
коэффициентах усиления. Коэффициенты усиления IA программируются в
пределах от —10 до +10 с шагом 1. Типовая точность задания коэффициен-
тов усиления IA характеризуется погрешностью 1,5%, максимальная по-
грешность 4%. Температурный дрейф 20 ррт/°С. Диапазон частот для соз-
даваемых фильтров 10—100 кГц, значения частот задаются с погрешностями
не более 3,5—5%. Эксплуатационный диапазон температур от —40 до +85 °С.
Время установления выходного напряжения цифроаналогового преобразова-
теля с погрешностью 0,1% не превышает 6 мкс. Дифференциальная нели-
нейность преобразователя не более единицы младшего разряда. Типовое
время переключения компаратора при амплитуде перепада 10 мВ составляет
750 не. Максимальные токи потребления микросхем приблизительно 20 мА.
Относительно скромные точностные возможности микросхем ispPAC, тем
не менее, приемлемы для построения на них ряда работоспособных функ-
циональных узлов. Программное обеспечение фирмы Lattice Semiconductor
под названием PAC -Designer ориентировано на использование в PC -
совместимых компьютерах с ОС Windows. САПР позволяет вводить инфор-
мацию о проекте, моделировать функционирование схем, компилировать
проекты и загружать результаты компиляции в память конфигурации БИС.
Фирма Cypress Semiconductor выпустила семейство CY8C25/26, сочетающее
цифровые и аналоговые программируемые блоки.
SOPC CY8C25/26xxx имеют восьмиразрядное процессорное ядро М8С с ум-
ножителем/аккумулятором. Возможен выбор частот тактирования. Емкости
памяти программ и данных в зависимости от типа микросхемы варьируются
(от 4 до 16 Кбайт Flash -памяти для программ и от 128 до 256 байт SRAM -
памяти для данных).
В микросхемах CY8C25/26 вокруг быстродействующего процессорного ядра
размещены и цифровые, и аналоговые программируемые блоки (SOC -бло -
ки), функционирование которых задается при конфигурировании системы
(рис 1.32).
Выделение в отдельную часть цифровых блоков является вариантом органи-
зации интерфейса между процессором и FPGA. SOC -блоки могут соеди-
няться друг с другом двумя основными способами: параллельным и после-
довательным. При параллельных соединениях достигается повышение точ-
ности блоков (увеличение разрядности аналого -цифровых преобразователей,
повышение разрешающей способности таймеров и т. п.). При последова-
тельных соединениях создаются тракты из нескольких операционных звень -
Глава 1. Элементная база электронных устройств и систем 99
SPLD
Фирма Atmel
www.atmel.com
Семейство АТ6000;
3 ... 5,5 В
NB 6 9 15 30 Fc= 100МГц
FPGA
$6... 40
Млэ 1024 6400
NBB 84 240
Особенность - реализуемость
кэш -логики
Семейство АТ40К;
3 ... 5,5 В
Рс=100МГц
NB 10 20 30 50
FPGA $ 5 ... 50
_L _Е
Млэ 256 6400
NBB 84 352
Особенность - реализуемость
кэш -логики
Имеется память объемом
2048... 18432 бит
Фирма Cypress
www.cypress.com
Семейство ORCA3;
5 В, 3,3 В; 2,5 В
Семейство ORCA4;
1,5В
Основы технологии
проектирования ИСПС и структуры
систем автоматизированного
проектирования
2.1.1. Факторы,
влияющие на методику проектирования
электронных устройств
Первым фактором, влияющим на специфику проектирования и, как следст-
вие, на возможные САПР, является тип обрабатываемой информации и свя-
занные с ним методы и способы ее обработки. Проект или его отдельные
фрагменты могут включать аналоговые, аналого -цифровые и/или цифроана -
логовые элементы, строиться на основе дискретных (цифровых) компонен-
тов или опираться на встроенные микропроцессорные средства. Отсюда
следует многообразие вариантов проектирования, которые в современных
технологиях часто называют потоком проектирования (Design Flow). Поток
проектирования при этом определяется тем, какие компоненты превалиру-
ют в проекте.
Следующим определяющим фактором является выбор технической базы для
реализации фрагментов проекта, а также технологического способа реализации
самого проекта. Как правило, одно и то же электронное изделие может быть
реализовано различными способами. Здесь должен быть дан ответ на во-
прос — будет ли проект построен на стандартных микросхемах, будут ли
использоваться те или иные специализированные ИС или комбинация раз-
личных типов ИС. Более того, в разные моменты жизненного цикла проекта
в зависимости от тиражности изделия в составе проекта могут меняться ис-
пользуемые типы ИС.
В наибольшей степени появление и широкое распространение БИС с про-
граммируемой структурой и конфигурируемых систем на кристалле повлия-
ло на два соседних иерархических уровня проектирования: проектирование
собственно ИС с программируемой структурой (ИСПС) и проектирование
печатных плат, содержащих такие БИС.
Хотя во многих чертах проектирование для этих двух уровней близко, спе-
цифика проектирования и, соответственно, применяемые САПР заставляют
рассматривать их, в зависимости от анализируемой проблемы, раздельно
или последовательно.
Сложность проекта,
вент / крист ' '
10 2 10"
Объем выпуска,
шт
Время
Достоинством применения БИС типа ИСПС, и в том числе типа SOPC, яв-
ляется не только легкость корректировок как макетов, так и опытных пар-
тий продукции, но и определенная секретность разработок. В отличие от
традиционной реализации на стандартных дискретных элементах, при во-
площении системы на ИСПС структура ее оказывается невидимой, и этим
соответственно затрудняется несанкционированное повторение разработок,
а тем более выпуск их усовершенствованных вариантов.
Широкое внедрение БИС типа SOPC в настоящее время сдерживается не
только и не столько экономическими соображениями (БИС пока относи-
тельно дороги), сколько издержками новизны (недостаточная подготовлен-
ность кадров, малое количество у разработчиков апробированных решений,
недостаточное качество и количество методических и учебных материалов).
В силу сказанного, отечественным разработчикам следует уделять особое
внимание вопросам проектирования схем с программируемой структурой.
К производству
кристалла
Рис. 2.5. Начальные этапы проектирования DSP -систем на базе схем фирмы Xilinx
ASIC
(новые свойства)
Конвертация
Тактовая частота В 1,1 раза меньше В 1,25 раз меньше В 3—5 раз
меньше
Файл
' конфигурационных^
данных
К изготовлению масок
Рис. 2 . 1 1 . Процедура конвертации проектов для БИС типа APEX
Глава 2. Основы технологии проектирования ИСПС 171
2.2.2. Проектирование
микропроцессорных фрагментов систем
Для большого числа современных проектов (от 60 до 80%) основой функ-
ционирования является работа программного обеспечения на платформах
либо общецелевых, либо заказных (чаще DSP) процессоров. Причины появ-
ления МП в системе могут быть различными — от необходимости использо-
вать сложные программные системы в минимальном конструктивном ис-
полнении, до просто престижных соображений разработчика. Несмотря на
то, что использование 8 -битовых микроконтроллеров в разнообразных
встроенных системах насчитывает уже почти 20 -летнюю историю, не прихо-
дится сомневаться, что существующая практика ориентироваться на встро-
енные микропроцессорные решения сохранится и в будущем. Однако в све-
те новейших технологических и архитектурных достижений микроэлектро-
ники, и особенно в связи с развитием ИС с программируемой структурой,
целесообразные варианты построения и проектирования современных сис-
тем явно изменились и желателен их пересмотр.
Широкое практическое распространение двух альтернативных способов
оперативного изменения поведения системы на уровне корректировки па-
мяти программы МП или на уровне корректировки памяти конфигурации
ПЛИС привели к возникновению новых архитектурных решений. На рис. 2.12
приведены некоторые возможные варианты.
На крайних полюсах этих решений располагаются, с одной стороны, обыч-
ная микропроцессорная система или однокристальный микроконтроллер
МК, а с другой — обычная ПЛИС. При определенных условиях оба вариан-
та могут решать одну и ту же задачу. Ранее замена реализации системы из
дискретных компонентов на МПС (МК) диктовалась либо требованием ми-
ниатюризации конструкции, либо способностью к корректировкам поведен-
ческой реакции без каких -либо конструкционных изменений на любых эта-
пах жизни конструкции. В современных условиях оба варианта отвечают
этим требованиям.
Вариант решения в форме связанных между собой БИС МП и БИС ПЛИС
соответствует реализации с очень гибкими возможностями модификации
организации всей интерфейсной части микропроцессорной системы, а по
гибкости значительно опережает традиционную архитектуру микропроцес-
сора, соединенного с набором программируемых периферийных БИС. По-
добная организация системы позволяет сформировать периферию МП в
произвольных сочетаниях — ограничениями являются не столько логиче -
174 Проектирование систем на микросхемах программируемой логики
Из рисунка видно, что возросло число этапов работы. Вновь введенные эта-
пы позволяют проектировщикам обнаружить на этих новых этапах моде-
лирования и верификации большее число ошибок и нестыковок между
программами и аппаратурой. За счет увеличения эффективности работы со-
временных средств проектирования, этап спецификации и разработки про-
граммного обеспечения существенно упростился. Те ошибки, которые пре-
жде обнаруживались только на этапах комплексной отладки, теперь, как
правило, обнаруживаются на более ранних этапах проектирования в процес-
се моделирования. Рассмотрим последовательно основные этапы проекти-
рования фрагментов, ориентированных на микропроцессорную реализацию.
Число фирм 10 3 10
Число типов МП/МК 13 5 12
Средства поддержки
создания программного обеспечения
Рассмотрение состава средств разработки ПО микропроцессорных систем
целесообразно начать с важнейшей составляющей этих систем — средств
упрощения и ускорения процесса создания программного обеспечения. Во-
просам, методологии и технологии создания программного обеспечения
МПС посвящено достаточно большое количество работ [7, 10]. Необходи-
мость ускорения разработки специализированного ПО вызвана тем, что от
этого зависят сроки выхода на рынок конечной продукции. Скорость созда-
ния ПО при ориентации на традиционные методы проектирования не мо-
жет быть существенно увеличена из -за трудности распараллеливания про-
цесса разработки, обусловленного ограниченными возможностями проекти-
ровщиков управлять многосвязными проблемами. Вместе с тем, в реальных
приложениях число параллельно решаемых задач может лежать в диапазоне
от десятков до сотен. Скорость проектирования, достигаемая при примене-
нии существующих методов разработки прикладного ПО, вступает в проти-
воречие с технологией создания новых аппаратных решений. Наряду с раз-
работкой ПО по классическим схемам (линейный подход, процедурный
подход и использование концепций ОСРВ) идет поиск новых подходов к
проектированию прикладного ПО для МПС. В настоящее время наиболь-
шее распространение получили два подхода. Один заключается в использо-
вании систем визуального проектирования, суть другого — применение
стандартных библиотек классов для проблемно ориентированного програм-
мирования. В различных странах идет интенсивный поиск методов и
средств, переводящих процесс разработки прикладного ПО для МПС из
творческого и уникального процесса в стандартный поток выпуска серий-
ной продукции [5].
Не останавливаясь на всей проблематике создания ПО МПС, отметим толь-
ко, что одним из основных направлений быстрой и надежной реализации
программных проектов является широкое использование предшествующих
наработок. Они по источнику возникновения могут быть либо результатом
собственных предыдущих разработок проектировщика, либо входить в со-
став библиотек стандартных программ.
В состав любой современной системы проектирования включаются стан-
дартные библиотеки, а также средства для создания собственных библиотек
пользователей. Стандартные библиотеки могут иметь различную приклад-
ную направленность. Наиболее удобными для использования являются биб-
лиотеки, органически входящие в состав систем проектирования. Боль -
Глава 2. Основы технологии проектирования ИСПС 183
Отладка аппаратуры
Аппаратная отладка, так же как отладка программного обеспечения, может
выполняться на всех трех видах реализации системы: виртуального прототи-
па, реального прототипа и реальной системы. Наличие в распоряжении про-
ектировщика моделей отдельных фрагментов проектируемой системы по-
зволяет легко создавать на экране дисплея желаемые конфигурации системы
и моделировать ее будущее поведение. Для ИСПС сгенерированная модель
может использоваться при создании конфигурации реальной системы.
Все виды ошибок проектирования моделирование позволяет обнаружить в
редких случаях, поэтому только эксперименты с реальными образцами мо-
гут дать уверенность в достигнутых характеристиках системы. Далеко не все
проектируемые системы содержат такое количество собственных ресурсов,
188 Проектирование систем на микросхемах программируемой логики
Методы
комплексной аппаратно -программной отладки
Исторически первым появился и использовался принцип EPROM -прото -
типирования Идея метода иллюстрируется рис. 2.16. Отладка сводится к
тому, что исследуемая программа, оттранслированная в ПК, при помощи
программатора зашивалась в БИС программируемой тем или ином спосо-
бом схемы ПЗУ (EPROM, ОТР и т. д.). После этого ПЗУ помещалось в от-
лаживаемую систему, на ней выполнялись эксперименты, на основе данных
экспериментов принималось решение о целесообразных направлениях из-
менений разрабатываемой программы, и процесс повторялся.
Отлаживаемая система
Цоколь для
EPROM/OTP/EEPROM
Отлаживаемая система
Прерывание
RS232
Внутрисхемный эмулятор
Эмуляторная
головка
Отлаживаемый кристалл
Традиционная Современная
процедура процедура
для стандартных ИС для ПАИС
Проектирование фрагментов
со смешанным представлением сигналов
Наибольшие изменения в последнее время (по мнению многих исследовате-
лей — за последние два года) произошли среди средств проектирования
систем со смешанным представлением сигналов, причем, основные измене-
ния — в сфере моделирования и в области создания и применения средств
тестирования. Большое количество ссылок можно найти в обзорной статье [47].
Изменения в методике проектирования прежде всего касаются тщательной
верификации проекта на схемотехническом уровне. Одновременное модели-
рование цифровых и аналоговых сигналов уже значительно сложнее, чем
чисто цифровое или чисто аналоговое моделирование. К проблемам моде-
лирования добавляется проблема использования языков описания систем
такой смешанной природы (хотя здесь имеются значительные успехи — это
рассмотрим чуть ниже). В части эффективности средства проектирования
и моделирования систем со смешанными сигналами значительно уступают
аналогичным средствам для цифровых систем. Но современное состояние
характеризуется значительной динамикой, и можно ожидать существенного
прогресса как в области создания новых типов SOPC, так и в области разра-
ботки средств проектирования.
Информация о продукции фирм, связанных с поддержкой различных этапов
проектирования аналоговых и аналогово -цифровых систем, может быть
найдена в обзорных статьях интернет -журналов. Анализ этих статей демон-
стрирует неослабевающий интерес различных фирм к данному направле-
нию. Сложность решения проблем для систем со смешанным представлени-
ем сигналов находит свое отражение, прежде всего, в уровне цен на постав-
ляемые САПР. Стоимость САПР значительно превышает стоимость САПР
аналогичной целевой направленности для цифровых систем. Приведенные
данные показывают, что усилия разработчиков направлены на автоматиза-
цию различных этапов проектирования.
Поддержка проектировщиков начинается с момента анализа путей реализа-
ции проекта. Уже на этом этапе фирмы предлагают свои готовые решения,
поставляемые в форме моделей стандартных решений или генераторов мо-
делей.
Основные усилия последнего времени направлены на повышение эффек-
тивности совместного моделирования цифровых и аналоговых схем. Мето-
ды событийного моделирования (подробно рассмотренные в разд. "Модели-
рование и реальное время" гл. 3), весьма эффективные для моделирования
цифровых схем, оказываются неприемлемыми для аналоговых и аналого -
цифровых, ибо в последних изменениях сигналов (события) происходят не-
прерывно. Системы моделирования устройств со смешанным представлени-
ем информации часто строят, используя объединение событийного подхода
для представления цифровой подсхемы и численного интегрирования диф -
Глава 2. Основы технологии проектирования ИСПС 201
Менеджер времени
Программы -обработчики описаний
Рис. 2.24. Состав САПР Antrim -A/Ms фирмы Antrim Design System
202 Проектирование систем на микросхемах программируемой логики
Проектирование
аналоговых и аналого -цифровых SOPC
Существующая в настоящее время в микроэлектронике тенденция интегра-
ции в одном кристалле всех элементов современных систем, находящая свое
воплощение в форме выпуска "систем на кристалле" (SOPC), окажется не
Глава 2. Основы технологии проектирования ИСПС 205
Заметим, что специфика продукции той или иной фирмы сказывается и на язы-
ках высокого уровня, выражаясь, прежде всего, в отличиях в библиотеках,
требуемых для работы, и в сложности и вариантности допустимых синтак-
сических конструкций для компиляторов. Конечные результаты компиля-
ции одной и той же исходной схемы автомата или последующей компиля-
ции одной и той же программы с языка высокого уровня в загрузочный
файл микросхемы ПЛИС, полученные от компиляторов разных фирм, могут
существенно различаться и иметь различную эффективность. Программа
StateCAD пакета Workview Office удобна тем, что перед трансляцией графа
переходов можно задать не только желательное языковое представление
(VHDL, AHDL, Verilog, ABEL и т. д.), но и фирменные атрибуты, что по-
зволяет оптимизировать запись автомата и избежать применения синтакси-
ческих конструкций, недопустимых для компиляторов соответствующих
фирм.
Проектирование HW
Построение прототипов
Отладка HW
Проектирование SW
Кодировка SW
Отладка SW
Завершение проекта
возвраты
Проектирование с со -верификацией
Проектирование HW
Построение модели HW
Отладка модели HW
Построение прототипов
Отладка HW
Проектирование SW
Кодировка SW
Отладка SW
завершение проекта
Рис. 2.28. Процедура сопряженного проектирования
Методология проектирования
Новые проектные подходы потребовались не только из -за огромной слож-
ности проектируемых схем (десятки миллионов вентилей), но и из -за таких
проблем, как временная корреляция между логическими и физическими
областями или достоверность верификации столь больших систем. Многие
традиционные проектные средства и методологии не срабатывают на таких
масштабах работы. Каждый шаг проектной процедуры, начиная от ввода
проекта и кончая физической загрузкой, должен обеспечивать получение
определенных промежуточных результатов. Если результаты проектирования
на каком -либо этапе не соответствуют требованиям технического задания
или существующим технологическим ограничениям, то результаты проекти-
рования не могут быть переданы на изготовление.
238 Проектирование систем на микросхемах программируемой логики
Эффективность стандартов
Стандарты требуются для всех уже рассмотренных участников проектного
потока (включая и структуру самих SOPC). И даже для самих стандартов
обычно не мешает ввести определенные ограничения, лучше в форме стан-
дартов.
Возникновение и развитие методологии проектирования SOPC требует раз-
работки или модернизации стандартов, которые создадут более простые,
надежные, защищенные, закрытые от ошибок связи между различными
уровнями проектирования: системными, логическими и физическими. Од-
ним из наиболее широко используемых сейчас стандартов этого класса яв-
ляется стандарт SDF (Standard Delay Format). Заглядывая вперед, следует
ожидать того же и от стандартов, поддерживающих обмены между проект-
ными средствами не только в структурной, но и во временной областях. Со-
ответственно, для физического уровня того же можно ожидать для библио-
течных и проектных стандартов.
Связь между различными проектными средствами вполне может поддержи-
ваться уже хорошо зарекомендовавшими себя в других областях (не SOPC)
языками Verilog HDL, VHDL и EDIF, хотя некоторые изменения или рас-
ширения, диктуемые спецификой SOPC, могут потребоваться.
Событийно -
1000 - управляемое
моделирование
Цикло -
100 - базированное
моделирование
10 -
Время проектирования
работу САПР разных фирм. Как видно из рисунка, пакет Seamless использу-
ется в со -верификационной процедуре. Такое же применение (но во встро-
енном исполнении) пакет находит в проектном САПР фирмы Atmel.
Проектирование Проектирование
Hardware Software
Фирма Cadence
Фирма Cadence Design Systems, Inc. (http://www.cadence.com) выпускает боль-
шое количество САПР, отличающихся целевым назначением, стоимостью,
технической и программной платформой и т. д. С точки зрения сопряжен-
ного проектирования наибольший интерес могут представлять два направ-
ления работ этой фирмы.
Глава 2. Основы технологии проектирования ИСПС 251
Традиционный SpeedSim
2.5.5. Понятие
платформенно -базированных проектов SOPC
Значительное количество современных разработчиков поддерживают плат -
форменно -базированное проектирование SOPC. Основной задачей такого
подхода является сокращение времени проектирования путем сосредоточе -
Глава 2. Основы технологии проектирования ИСПС 259
• Металлический
проводник
на стороне монтажа
Металлический
проводник Переходное Печатная
на стороне монтажа отверстие плата
Граница кристалла
Г Тестовые данные
Основные
схемы кристалла
ТОО
Схема управления JTAG -интерфейсом
К следующей
ячейке
Вход
Фиксация Тестирование
От предыдущей
ячейки
Состояния EXIT1 -DR, EXIT2 -DR, EXIT1 -IR и EXIT2 -IR имеют вспомога-
тельный характер (в том числе для реализации альтернативных переходов),
но могут оказаться полезными при реализации устройств управления рас-
ширенных вариантов интерфейса JTAG, соответствующих новым вводимым
командам.
Глава 2. Основы технологии проектирования ИСПС 277
Язык BSDL
BSDL — Boundary -Scan Description Language — язык описания организации
и архитектуры граничного сканирования в рамках одиночной БИС. Язык
входит в состав стандарта IEEE Std. 1149.1 и построен как подмножество
языка VHDL. Одной из основных задач, возлагаемых на язык, является соз-
дание программных средств, автоматизирующих процесс создания тестов.
Файлы в формате языка описывают соответствие логических сигналов и фи-
зических контактов, набор команд, поддерживаемых ТАР контроллером,
размер сканирующих JTAG -цепочек, соответствие порядка ячеек ГС в це-
почке номеру внешнего контакта и тип управления внешним контактом.
Язык HSDL
HSDL — Hierarchical Scan Description Language (разработка фирмы Texas
Instruments) — язык, ориентированный на описание информационных по-
токов в группе БИС, объединенных JTAG -интерфейсом. HSDL является
расширением языка BSDL, совместим с ним, вводит в состав стандарта
IEEE Std. 1149.1.а и построен как подмножество языка VHDL. Средства язы-
ка позволяют определить JTAG -цепочку любого уровня, т. е. последователь-
ность БИС, объединяемых в модуле, в системе или на плате, а также допус-
кают описание динамических или реконфигурируемых цепочек. Язык по-
зволяет описать свойства как отдельной БИС, так и группы БИС внутри
тестируемого модуля Unit Under Test (UUT). Модуль — это элемент любого
уровня архитектуры выше уровня БИС (может быть платой или системой).
Язык позволяет:
- создавать определяемые пользователем имена для описания команд ска-
нирования и групп данных;
- объединять отдельные биты тестовых последовательностей в легко управ-
ляемые подмножества битов с назначаемыми пользователем именами;
- задавать условия разнообразных изменений, определяя свойства цепочек
сканирования (статических, динамических или внешних относительно
UUT).
278 Проектирование систем на микросхемах программируемой логики
Язык SVF
Язык Serial Vector Format (SVF) был разработан фирмами Texas Instruments
и Teradyne в 1991 году. Широко используется для описания тестовых векто-
ров, посылаемых в приборы цепочки, для получения результирующих дан-
ных и маскирования любых данных. Необходимость введения формата дик-
товалась желанием фирм иметь шаблон данных, легко воспринимаемый
широким спектром моделирующих и тестирующих программ и оборудова-
ния. Основным требованием являлась возможность использования языка на
всех этапах проектирования от проектной верификации до окончательной
диагностики.
Другие стандарты
Ряд фирм (например, ASSET InterTech, Inc.) разработали форматы макро-
языков, существенно упрощающих написание различных программ. Макро-
языки позволяют писать программы как для управления различными систе-
мами, так и для контроля и тестирования входящего в них оборудования.
Основным достоинством макроязыков является способность расширять свои
собственные возможности путем введения и определения новых понятий.
Большая избыточность тестовых или загрузочных кодовых последовательно-
стей, циркулирующих в JTAG -цепочках, и, как следствие последовательного
характера передачи, значительные временные затраты на обмен, заставили
разработчиков искать варианты сжатия информации. И хотя издержками
такого подхода является необходимость введения языкового стандарта на
метод сжатия, установка аппаратуры, свертывающей и развертывающей по-
следовательности, целесообразность такого подхода оказалась очевидной.
Все три составляющих метода сжатия получают все большее распростране-
ние. Появился стандарт на язык JAM, структуры и конструкции сверты-
вающей и развертывающей аппаратуры типа JAM Player.
Работы, выполняемые
при тестировании готовой продукции
После получения готовой продукции в форме БИС или печатной платы раз-
работчик оказывается перед необходимостью выполнения настроечных и
отладочных работ, для ускорения и упрощения которых и вводились средст-
ва, ориентированные на использование методов и средств граничного ска-
нирования и JTAG -интерфейса.
Процедура отладки и привлекаемое для этого оборудование, прежде всего,
определяются видом тестируемой продукции. Необходимо разделять работы,
выполняемые на этапе отладки лабораторных макетов и серийных образцов
продукции (хотя и то, и другое базируется на возможностях JTAG -ин-
терфейса). В простейших случаях, для проведения экспериментов с лабора-
торными образцами или первыми образцами опытных партий процедура
282 Проектирование систем на микросхемах программируемой логики
Другие подходы
Приведенный выше материал был посвящен рассмотрению возможностей
JTAG -интерфейса, что определялось, во -первых, его эффективностью при
простоте использования, а во -вторых, слабой освещенностью этого подхода
в отечественной литературе. Чтобы избежать односторонности рассмотре-
ния, стоит упомянуть и об альтернативных вариантах организации тестовых
процедур.
Ряд фирм продолжает выпуск средств, опирающихся на традиционные ме-
тоды и устройства. Среди них такая фирма, как SZ Testsysteme, уже более
20 лет специализирующаяся на выпуске гаммы оборудования, тестирующего
системы со смешанным (цифровым и аналоговым) представлением инфор-
мации и с широким диапазоном возможностей по скорости, диапазону
входных напряжений.
Помимо обычных методов тестирования разрабатываются методы тестиро-
вания, базирующиеся на современных технологиях и нетрадиционных мето-
дах. Так, фирма Teradyne выпускает аппаратуру для автоматической,оптиче -
292 Проектирование систем на микросхемах программируемой логики
Языки описания
дискретных устройств
3.1.Общиеположения
3.1.1. HDL -программа
как модель проектируемого устройства
Языковое описание устройства — это текст, сохраняемый в некотором фай-
ле или нескольких файлах, которые в совокупности составляют представле-
ние разработчика о проекте и используются на всех последующих этапах
проектирования, в том числе при синтезе устройства и его моделировании.
Тексты описаний в большинстве языков проектирования дискретных уст-
ройств по составу синтаксических конструкций и по интерпретации резуль-
татов их исполнения (физического или модельного) очень схожи с традици-
онными языками программирования. Поэтому часто такое текстовое описа-
ние называют программой на языке проектирования, или, коротко, HDL -
программой, а конструкции, описывающие способ формирования результа-
тов, — операторами.
HDL -программа может рассматриваться как знаковая модель дискретного
устройства [1, 34]. Знаковыми моделями называют способы представления
реальных или проектируемых объектов, которые не имеют физического или
геометрического подобия с объектами моделирования, а отражают лишь су-
щественные свойства объектов с использованием принятых формальных
обозначений. Воспроизведение функционирования и иных свойств объекта
по знаковым моделям может выполняться на основе мысленных или ма-
шинных экспериментов с ними. Знаковая модель, как всякая другая модель,
обеспечивает выделение наиболее существенных для разработчика характе-
ристик. Как правило, составитель HDL -программы абстрагируется от кон-
кретной физической реализации, выделяя, прежде всего, воспроизведение
функционирования проектируемого изделия. После выполненных прове -
298 Проектирование систем на микросхемах программируемой логики
Типы данных
Входная информация в дискретных устройствах — цифровые сигналы, кото-
рые должны поступать в систему через контакты и далее двигаться по це-
пям, называемым также связями, к блокам, выполняющим те или иные пре-
образования, и далее на выходные контакты или к другим блокам. Входным,
внутренним и выходным данным проектов сопоставляются имена связей,
которым соответствуют цифровые сигналы на соответствующих входных и
выходных контактах проектируемой схемы или внутренних цепях проекта.
Источнику сигнала, поступающего на некоторую связь, в языках сопостав-
ляется оператор, присваивающий значения переменной, представляющей
связь или сигнал на этой связи. Такие операторы называют драйверами. Раз-
личие сигналов от связей выполняется только по контекстным при-
знакам.
Основным типом данных в языках являются данные сигнального типа, по
свойствам близкие к обычным логическим данным (часто мы будем назы-
вать их просто логическими). Основное отличие логических данных в язы-
ках проектирования от логических данных языков программирования за-
ключается в наборах допустимых значений, что более подробно будет изло-
жено в разд. 3.1.2. Кроме того, явно или неявно подразумевается, что сигнал
обладает временными характеристиками, в частности, изменение значений
отображающей переменной может происходить не сразу после присвоения
ей нового значения.
Для удобства работы данные могут, как и в обычных языках программиро-
вания, структурироваться и объединяться в агрегаты — массивы, векторы,
записи (VHDL, Verilog), группы (AHDL). В некоторых оговоренных случаях
структурированные логические данные представляются в достаточно "при-
вычных" формах, например как числа или строки. Преобразованиям логи -
Глава 3. Языки описания дискретных устройств 299
Структура и поведение
Модель, отражающая объект проектирования в форме правил преобразования
входных данных в выходные, называется поведенческой. Такая точка зрения на
проект представлена рис. 3.1, о. В общем случае можно записать функцию
преобразования как
Y= F(A, B).
Используя терминологию VHDL, назовем модуль F— PROJECT ENTITY
(дословный перевод — сущность проекта), входы и выходы назовем портами
(PORT). Программные модули на языке VHDL, описывающие проекты
в поведенческой форме, именуют поведенческими архитектурными телами.
К нижним уровням
иерархии
Замечание
В языках VHDL и VerilogHDL можно встраивать описание поведения внешних
выводов, фактически, тестового воздействия, непосредственно в программу,
представляющую проектируемый модуль. Тем не менее, создание модуля для
Глава 3. Языки описания дискретных устройств 303
a б
синхр.
Алфавит моделирования
Важной характеристикой метода моделирования цифровых устройств явля-
ется количество различимых состояний сигнала. Каждому состоянию сопос-
тавляется индивидуальный символ, совокупность символов составляет алфавит
моделирования. Естественно, каждое состояние специфически воспринима-
ется приемниками сигналов, поэтому системе моделирования определяется
набор правил преобразования сигналов типовыми цифровыми элементами.
Глава 3. Языки описания дискретных устройств 311
Простейший алфавит — двоичный, содержащий набор {' о', ' 1'}. Функ-
ционирование элементов описывается по правилам алгебры логики. Моде-
лирование на базе этого алфавита весьма экономично, но возможности мо-
делирования ограничены. Невозможно описание шинной логики, в том
числе схем, имеющих высокоимпедансное состояние на выходе (Z -co -
стояние), схем с открытым коллектором и подобных. Затруднено воспроиз-
ведение сбойных ситуаций, например, вызванных подачей управляющих
сигналов на триггеры во время, когда информационные сигналы еще не ус-
тановлены.
Весьма распространен алфавит из четырех символов {'о', 'х', '1', 'Z'}.
Здесь 'х' означает неопределенное состояние. Такой символ присваивается,
в частности, сигналу на выходе логического элемента во время переходного
процесса. Неопределенное состояние принимает выход триггера после пода-
чи активизирующего сигнала на синхронизирующий вход при запрещенной
или неопределенной комбинации сигналов на информационных входах
триггера. Символ ' z ' представляет высокоимпедансное состояние порта или
отключенную линию. Алфавит {'О1, 'X', ' 1 ' , 'Z'} является единствен-
ным, используемым при записи и моделировании программ, написанных на
языке AHDL в системе MAX+PLUS II.
Дальнейшее расширение возможностей — девятиэлементный алфавит, в ко-
тором приняты следующие символы для представления состояний связей:
- 'u' — не инициализировано (сигналу в программе вообще не присваива-
лись другие значения; обеспечивает контроль корректности инициали-
зации);
- 'z' — отключено (все источники, подключенные к связи в высокоимпе -
дансном состоянии);
- 'х' — активное неопределенное состояние;
- ' о' — активный ноль;
- ' 1' — активная единица;
- 'L' — слабый ноль;
- 'Н' — слабая единица;
- 'W' — слабое неопределенное состояние;
- ' - ' — не важно (разработчик может запрограммировать переход в это
состояние, если реализация алгоритма не зависит от результата; выбор
конкретного значения предоставляется компилятору с целью оптимиза-
ции реализации устройства).
Разница между слабыми и активными состояниями состоит в том, что сла-
бый сигнал формируется от источников (называемых драйверами), имею -
312 Проектирование систем на микросхемах программируемой логики
Структурное
архитектурное тело
Описание
конфигурации
Представление Параметры
Перечислимые
настройки
Вызов Оператор
процедуры условной
генерации
массивы, строки
LIBRARY ieee;
USE ieee.std_logic_1164.ALL; — пакет, содержащий определение
— преобразований данных в многозначном алфавите
USE ieee.std_logic_util.ALL; — пакет, содержащий функции преобразования
— форматов из битового вектора
— в эквивалентное число и наоборот, и т. п.
ENTITY bit_count IS
PORT( input : IN std_logic_vector (15 DOWNTO 0 ) ; — битовый вектор
— в многозначном представлении
output: OUT integer RANGE О ТО 15); — целое в объявленном диапазоне
END bit_count;
BEGIN
output<= bits_in_word(input); — вызов подпрограммы
END pure_behave;
Предопределенные
типы
( Замечание )
Операции XOR и XNOR в версии VHDL'87 не определены.
Если бы переменная select была определена как BOOLEAN, то, наоборот, пер-
вый вариант был бы допустим, а второй нет.
Данные разных типов несовместимы, поэтому недопустимо выражение
' О ' AND TRUE
Примеры:
- TYPE s t a t e IS (S0,S1,32,S3)
Может представлять, например, набор допустимых состояний системы,
для каждого состояния определяются выполняемые действия и правила
перехода в другое состояние.
Глава 3. Языки описания дискретных устройств 329
Физические типы
Наряду с предопределенным типом TIME пользователь может определить
другие физические типы, которые будут отражать физические (механи-
ческие, электрические или иные) свойства носителя информации.
<определение физического типа> ::=
RANGE <диапазон>
UNITS
<имя базовой единицы>
<имя вторичной единицы> = << <значение единицы> »
END UNITS [ <имя типа>];
Пример:
TYPE v o l t a g e IS RANGE -5E6 to +5E6;
UNITS uV; — базовая единица — микровольт
mV= 1000 uV; — милливольт
V=1000 mV; — вольт
END UNITS v o l t a g e ;
Массивы и записи
Массив, как и в других языках, — это набор данных, объединенных общим
именем и различаемых по порядковым номерам (индексам). Для того чтобы
вводить объект типа массив, необходимо предварительно объявить соответ-
ствующий тип на основе следующих синтаксических правил:
<определение типа массива> ::=
ARRAY ( <диапазон> «, <диапазон> ») OF
<тип элемента массива>
( Замечание )
В VHDL'87 операции сдвига не определены.
Подтипы
Специфическим понятием языка VHDL является подтип. Объекты, отне-
сенные к подтипу, сохраняют совместимость с данными типа, из которого
выделяется подтип так называемого базового типа. Однако введение под-
типа:
О определяет множество допустимых значений данных подтипа как под-
множество допустимых значений базового типа;
О позволяет вводить дополнительные функции преобразования, определяе-
мые только для данных подтипа.
Синтаксис декларации подтипа определен следующим образом:
<двкларация подтипа> ::=
<имя подтипа> IS [<имя функции разрешения> ]
<имя базового типа или подтипа> [<ограничение>];
Пример:
SUBTYPE bit_in_word_number IS integer RANGE 31 DOWNTO 0;
<оператор процесса> : : =
[ <метка процесса>:] PROCESS[ ( <список инициализаторов:^ ] [ IS ]
<раздел деклараций>
BEGIN
« <раздел операторов>»
END PROCESS [<метка процесса>];
<раэдел операторов> ::=« <последовательный оператор>»
( Замечание ^
Некоторые параллельные и последовательные операторы совпадают по фор-
ме записи. В этом случае различие устанавливается по контексту: если опера-
тор локализован в теле процесса, он трактуется как последовательный, а если
в другом месте программы — как параллельный.
LIBRARY ieee
USE ieee.std_logic_1164.ALL;
USE work.std_logic_util.all;
USE STD.textio.ALL;
ENTITY two_j>rocess_example IS
END labl;
stimulator: PROCESS
VARIABLE i:integer:=0;
VARIABLE stim_vector:std_logic__vector(2 DOWNTO 0 ) ;
BEGIN
stim_vector:=conv_std_logic_vector(i,3);
xO<= stim_vector(0);
xl<= stim_vector(1);
x2<= stim_vector(2);
WAIT FOR 50 ns;
i:=i+l;
if (i=8) then
ASSERT false REPORT "End of Stimulation !"
SEVERITY NOTE;
WAIT;
END IF
END PROCESS;
END test;
падает с типом индекса. Смысл конструкторов left, low, right, high такой
же, как у конструкторов типов.
Замечание
Конструктор range возвращает не одно значение, а множество значений "от -
до". Например, для типа массива
TYPE byte IS ARRAY (7 downto) OF bit;
атрибут byte 'range принимает значение ""7 DOWNTO о", атрибут
byte ' reverse_range — значение "О то 7", а атрибут byte ' length — значе-
ние 8.
Атрибуты сигналов являются эффективным средством анализа поведения
сигнала во времени. В табл. 3.4 символ s означает имя сигнала.
Глава 3. Языки описания дискретных устройств 343
Например, в конструкции
IF current_state'event THEN <оператор>;
вложенный оператор будет исполняться только, если в момент инициализа-
ции исполнения этой конструкции сигнал current_state меняет свое зна-
чение.
Выражение
а=а'DELAYED (5 ns)
истинно, если сигнал а не менял свое значение в течение 5 не модельного
времени до вычисления этого выражения.
Операторы присваивания
Эти операторы уже затрагивались в разд. 3.2.2 и 3.2.3. Здесь подробнее
рассмотрим последовательное сигнальное присваивание (необходимо отличать
последовательное сигнальное присваивание от параллельного присваива -
нияния, подробно рассмотренного в разд. 3.2.7). Синтаксическая формула
оператора присваивания значения сигналу имеет вид:
<оператор присваивания сигналу> :: -
<приемник> < - [ <модель задержки>] <прогноз поведения>;
<модель эадвржки> ::=
TRANSPORT | [ REJECT <вьгражение времени> ] INERTIAL
•Спрогноэ поввдения> ::= <элемент поведения> «, Олемент поведения> »
<элвмвнт поввдания> ::= <эначащее выражение> [AFTER <выражение времени>]
5ns
20ns
50 ns
70ns
5 ns
4->
20ns
30 ns
50 ns
70ns
1
' 1
5ns
20ns
50ns
4 ^
П
70 ns
где BI, B2, B3, ..., BI, ..., Bn — булевские выражения; Si, s 2 , s 3 , ..., Si, ..., sn,
Sn+i — совокупности последовательных операторов.
348 Проектирование систем на микросхемах программируемой логики
с Замечание
Пустой оператор NULL, в принципе, может быть записан в любом месте в теле
процесса или подпрограммы. Но именно в операторах условия и выбора его
использование имеет явно определенный смысл.
Если вычисление ни одного из булевских выражений не дало значения TRUE,
выполняется совокупность sn+i, а если при этом ключевое слово ELSE отсут-
ствует, то не выполняется никаких действий.
Разберем несколько примеров.
Сначала рассмотрим простейшую конструкцию без использования ключе-
вого слова ELSE:
IF en='l' THEN register_state:= data;
END IF;
Здесь при en, не равном логической единице, ничего не происходит.
Процесс, представленный в листинге 3.5, содержит условный оператор в
"полной форме". Нетрудно убедиться, что описана реализация двух логиче-
ских функций:
Q= a AND b; P= a XNOR b
example_IF_l:PROCESS (a,b)
BEGIN
IF a = '!' AND b = '!' THEN
q <= '!'; P<= '!'
ELSIF a = '0' AND b = '0' THEN
q <= '0'; p<=4'
ELSE q <= '0'; p<='0'
END IF;
END PROCESS example_IF_l;
Глава 3. Языки описания дискретных устройств 349
ENTITY temperature_controle IS
PORT ( temperature: IN i n t e g e r ( 50 downto 0);
enable_regulation: IN b i t ;
i n t e n s i v e _ h e a t , slow_heat, cooling: OUT b i t )
END temperature_controle;
ARCHITECTURE behave OF temperature_controle IS
BEGIN
PROCESS
BEGIN
IF Enable_regulation='0' then Intensive_Heat<='0';—прекращение работы
Slow_heat<='0';
Cooling<='0';
ELSIF temperature>30 then — повышенная температура
Intensive_Heat<='0';
Slow_heat<='0';
Cooling<='l';
ELSIF temperature>20 then NULL; — нормальная температура
ELSIF temperature>10 then — слегка пониженная температура
Intensive_Heat<='0';
Slow_heat<=4';
Cooling<='0';
ELSE Intensive_Heat<='l'; — очень низкая температура
Slow_heat<='0';
WAIT FOR 1 sec;
END PROCESS;
END BEHAVE;
•Соператор выбора> : : =
CASE <Кшочевое выражение> IS
WHEN <вариант> «|<вариант>» => <оператор> « <оператор> »
« WHEN <вариант> «|<вариант>» => <оператор> «<оператор> » »
END CASE;
<вариант> ::= <константное выражение> I <диапазон> | OTHERS
350 Проектирование систем на микросхемах программируемой логики
example_case_l:PROCESS (a,b)
VARIABLE d: std_logoc_vector (1 DOWNTO 0 ) ;
BEGIN
d:=a & b
CASE d IS
WHEN "11" => q <= Ч'; P<= '!';
WHEN "00" => q <= '0'; p<=4';
WHEN OTHERS=>q <= '0'; p<='0';
END CASE;
END PROCESS;
Оператор ожидания
Исполнение операторов, записанных в теле процесса, приостанавливается,
если очередной оператор является оператором ожидания (фактически —
оператором приостанова) WAIT. При этом результаты исполнения предшест-
вующих операторов заносятся в календарь событий и могут быть инициали-
зированы другие процессы. Прекращения состояния приостанова процесса
зависит от условий, определенных в операторе WAIT. Определено несколько
модификаций оператора WAIT:
<оператор ожидания> :: =
WAIT;
IWAIT ON <имя сигнала> «,<имя сигнала> »;
IWAIT UNTIL <условие>;
(WAIT FOR <выражение времени>;
Generator: PROCESS
BEGIN
Clock<='0';
WAIT FOR 50 ns
clock <= not clock;
END PROCESS Generator
Операторы повторения
Операторы повторения LOOP позволяют сокращенно записывать совокупно-
сти однотипных действий.
<оператор повторения> ::=
[ <метка оператора повторения> ] [ <итерационная схема> ] LOOP
<оператор> « <оператор> »
354 Проектирование систем на микросхемах программируемой логики
END LOOP [ <метка оператора повторения> ];
<итерационная схвма> ::=
WHILE <условие> I FOR <имя переменной> IN <диапазон>
ENTITY sequence_of_numbers IS
GENERIC (max_value: integer :=63);
PORT ( out_data: out integer range 0 to max_value;
Clk : inout bit);
END sequence_of_numbers;
ARHITECTURE behavior OF sequence_of_numbers IS
BEGIN
clock_generator: PROCESS
?
BEGIN clk<='0 ;
LOOP WAIT FOR 50 ns;
clk<= not elk;
END LOOP;
END PROCESS clock_generator;
execute : PROCESS
VARIABLE INT_STATE: INTEGER RANGE 0 TO max_value:=0;
BEGIN
Out data<=0;
Глава 3. Языки описания дискретных устройств 355
LOOP
WAIT UNTIL (clk='l' and elk'event)
IF (int_state=max value) then int_state:=0;
ELSE int_state:=int_state+l;
END IF;
out_data<= int_state;
END LOOP;
END PROCESS execute;
END behavior;
ENTITY delayer IS
port (elk, din:in std_logic;
dout:out std_logic);
END delayer;
ARCHITECTURE test OF delayer IS
SIGNAL shift: std_logic_vector (6 downto 0};
BEGIN
PROCESS(elk)
Variable i: integer range 7 downto 0;
BEGIN
IF clk='l' THEN
shift(0)<=din;
FOR i IN 1 TO 6 LOOP
shift(i)<= shift(i - 1 ) ;
END LOOP;
dout<=shift(6);
END IF;
END PROCESS;
END test;
Фактически, конструкция
Ml: LOOP Si
NEXT WHEN В;
S2
END LOOP;
эквивалентен
B= TRUE;
WHILE n o t В LOOP
SI
IF n o t В t h e n S2
END LOOP;
m l : LOOP Su
m2: LOOP S 2 i
m 3 : LOOP S 3 i
S32
END LOOP m 3 ;
S22
END LOOP m2;
Si 2
END LOOP m l ;
Оператор проверки
Оператор проверки ASSERT относится к категории конструкций, не подле-
жащих реализации в аппаратуре. Оператор служит для выявления специфи-
ческих ситуаций, которые могут возникать в процессе компиляции и моде-
лирования (т. е. программной интерпретации описания проекта), и выдачи
в этих ситуациях сообщения разработчику. Синтаксис оператора проверки
определен следующим образом:
<оператор проверки> : : =
ASSERT <булевское выражение> [ REPORT <строка сообщения> ]
[ SEVERETY <уровень важности>];
( Замечание )
Допускается введение ключевого слова QUARDED перед правой частью опера-
тора присваивания сигналу, о чем см. далее в этом разделе.
ENTITY three_channel IS
PORT ( data_in: IN integer; — условные входные данные
Channel_select: IN integer range 1 TO 3;
Z: OUT integer);
END three_channel;
Оператор блока
Оператор блока BLOCK, подобно оператору PROCESS, является составным опе-
ратором, тело которого включает несколько операторов, но, в данном слу-
чае, параллельных. Операторы тела блока, как и другие параллельные опера-
торы, обеспечивают возможность представления параллелизма в моделируе-
мой системе. Эти операторы инициируются не по последовательному, а по
событийному принципу, а результаты их исполнения становятся доступны
другим операторам как включенным в блок, так и размещенным в других
блоках или "индивидуально", только после исполнения всех операторов,
инициированных одним событием.
В этом смысле операторы, включенные в блок, не отличаются от "инди-
видуальных" параллельных операторов.
Глава 3. Языки описаний дискретных устройств 363
BEGIN
<описание других блоков системы>
unitl: BLOCK ( adr='0' and read_data='1')
SIGNAL dataO : Std_logic_vector (N_ -l downto 0 ) ;
BEGIN
Data_bus<=QUARDED dataO AFTER <выражение задержки>
PROCESS BEGIN <Вычисление dataO>
END PROCESS;
END BLOCK unitl;
Unitl: BLOCK ( adr='l' and read_data=Ч')
SIGNAL datal : Std_logic_vector (N_ -l downto 0 ) ;
BEGIN
Data_bus<=QUARDED datal AFTER <выражение задержки>
PROCESS BEGIN вычисление datal>
END PROCESS;
END BLOCK unitl;
( Замечание )
Реальная интерпретация программы в аппаратной среде может существенно
отличаться от схемного варианта, приведенного на рисунке. Компиляторы
САПР проводят автоматическую оптимизацию схемы независимо от формы ее
задания. В данном случае при реализациях в ПЛИС, построенных на основе
четырехвходовых LUT, функции F1 и F2 будут целиком реализованы на одной
макроячейке каждая, а сигнал a_and_b как таковой не воспроизводится, или,
как говорят, поглощается.
ENTITY simple_logic IS
PORT (a,b,c,d: in std_logic;
out!, out2: out std_logic);
END siniple_logic;
366 Проектирование систем на микросхемах программируемой логики
Если a_and_b это все -таки сигнал (например, необходимый для передачи
информации другим операторам программы или на порты), то следует вы-
делить его вычисление в отдельный процесс или параллельный оператор,
как показано в листинге 3.19.
BEGIN
outl<=a_and_b or (с and d and not b) or (not a and not b and d ) ;
out2<=a_and_b or (not a and с and d) or (a and not b and not d)
or (b and not с and d ) ;
END PROCESS;
END two_processes;
При этом еще раз подчеркнем, что такой оператор должен находиться в теле
процесса, причем переменные d, с, ь и а должны входить в список инициа-
лизаторов этого процесса.
Представление функции в форме бинарного дерева решений основано на по-
следовательном переходе от представления функции большого числа пере-
менных через суперпозицию функций меньшего числа переменных. Теоре-
тической основой метода является разложение Шеннона:
2
, ..., XN) v xif(\,x2, ..., XN).
Тогда вычисление первого терма разложения записывается как одна воз-
можная альтернатива условного оператора или условного присваивания, а
вычисление другого — как противоположная:
IF x l = ' 0 ' THEN z<= <подформула, полученная из f заменой xi на нуль>;
ELSE z<= <подформула, полученная из f заменой xi на единицу>;
END I F ;
хъ ..., XN) •= *x{f(0,x2, ..., XN) v *i/(l,;t 2 , ..., XN) = л * ! [Лх2/(0,0, .....
, ..., XN) v дг2/(1,1, ..., XN)],
и т. д. Однако хочется еще раз отметить, что описание логики в виде бинар-
ного дерева или поддерева часто вытекает из самой логики создания проекта.
Оператор процесса, содержащий описание комбинационной схемы, пред-
ставленной на рис. 3.11 с использованием условного оператора, приведен
в листинге 3.21. Здесь вспомогательные переменные prl и рг2 введены для
возможности представления несимметричных переходных процессов. Если
это не существенно, то можно ограничиться присвоением значений сигна-
лам outi и out2 непосредственно в условном операторе.
PROCESS (a,b,c,d)
VARIABLE prl,pr2:std_logic;
BEGIN
IF b = ' l ' THEN p r l := a; pr2:=a or (d and not c ) ;
Глава 3. Языки описания дискретных устройств 371
?
ELSIF a='0 THEN prl:=d; pr2:=not d or с;
ELSE prl:=c and d; pr2='0';
END IF;
1
Outl<= 'X , Ч'AFTER 2 ns WHEN p r l = 4 ' ELSE
'X','0'AFTER 1 ns WHEN prl='0' ELSE
1
'X ;
1
Out2<= 'X ,Ч'AFTER 2 ns WHEN pr2='l' ELSE
'X','0'AFTER 1 ns WHEN pr2='0' ELSE
'X';
END PROCESS;
ENTITY decode IS
GENERIC (n: integer:=16); — число выходов
PORT (input: IN integer RANGE 0 TO n -1;
EN: IN std_logic; — разрешение
output:OUT std_logic_vector (n -1 DOWNTO 0));
END decod;
ARCHITECTURE behave OF decod IS
BEGIN
PROCESS(en,input)
VARIABLE i: integer RANGE 0 TO n -1;
BEGIN
FOR i IN 0 TO 15 LOOP
IF en='l' and i=input THEN
output(i)<='!' AFTER 2 ns;
ELSE output(i)<='0' AFTER 1 ns;
END IF;
END LOOP;
END PROCESS;
END behave;
372 Проектирование систем на микросхемах программируемой логики
ENTITY mux IS
GENERIC (n: integer:=16; — число входов
delay:time:=2 ns); — задержка распространения
PORT (adress: IN integer RANGE 0 TO n -1;
data: IN std_logic_vector ( n -1 DOWNTO 0 ) ;
output:OUT std_logic);
END mux;
ARCHITECTURE behave OF mux IS
BEGIN
Output<= data(adress) AFTER delay;
END behave;
ENTITY parity IS
GENERIC (n: integer:=16; — число входов
delay:time:=2 ns); — задержка распространения
PORT (data: IN std_logic_vector ( n -1 DOWNTO 0 ) ;
parit_check: OUT std_logic);
END parity;
ARCHITECTURE parit_behave OF parity IS
BEGIN
PROCESS (data)
VARIABLE i:integer RANGE 0 to n -1;
VARIABLE temp:std_logic;
BEGIN
temp: ='0' ;
FOR i IN 0 TO n -1 LOOP
temp:= temp xor data(i);
END LOOP;
parit_check<=temp AFTER delay;
END PROCESS;
END parit_behave;
ENTITY R_S_flip_flop IS
GENERIC (delay: time:=2 ns;);
PORT (R,S:IN std_logic;
Q,NQ: OUT std_logic)
END R_S_flip_flop;
ARCHITECTURE R_S_timing OF R_S_flip_flop IS
BEGIN
PROCESS (R,S)
BEGIN IF R='l' and S='0' THEN Q<= 'X','l' AFTER 2*delay;
1 1 I
NQ<= X , 0' AFTER delay;
ELSIF R='0' and S='l' THEN Q<='X','0' AFTER delay;
NQ<='X',4' AFTER 2*delay;
ELSIF R='l' and S='l' THEN Q<='X','0' AFTER delay;
NQ<='X','0' AFTER delay;
374 Проектирование систем на микросхемах программируемой лотки
D_edge: PROCESS(clock)
BEGIN IF clock='l' THEN
IF data'last_event<delay_d_clk THEN
Q<='X';
ELSE Q<=data AFTER delay;
END IF;
END PROCESS;
PROCESS (clock,r,s)
VARIABLE Qinternal:= BIT;
VARIABLE variant: bit_vector (2 downto 0 ) ;
BEGIN variant := j&k;
IF R='l' and S='l' THEN
ASSERT FALSE RETORT " Illegal input combination"
SEVERITY ERROR;
ELSIF 3 = 4 ' THEN Q<=4';
ELSIF R='l' THEN Q<='0';
376 Проектирование систем на микросхемах программируемой логики
ELSIF R='0' and S='0' and clock='l' and not clock'stable THEN — **
CASE variant IS
WHEN "10" => Qinternal: = 4 ' ;
WHEN "01"=> Q i n t e r n a l : = ' 0 ' ;
WHEN "00"=> Qinternal:=Qinternal;
WHEN "11"=> Qinternal:= not Qinternal;
END CASE;
END IF;
Q<=Qinternal;
END PROCESS;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY Parallel_to_sequential IS
GENERIC ( n:integer:=8);
PORT (elk,load: IN std_logic;
din:IN std_logic_vector (n -1 DOWNTO 0 ) ;
dout:OUT std_logic);
END new_del;
( Замечание }
Подобное описание соответствует семантике VHDL'87, хотя и не противоречит
VHDL'93, где операции сдвига введены как стандартные.
378 Проектирование систем на микросхемах программируемой логики
PACKAGE oper_unit_decl IS
TYPE instruction IS (clear, пор,load,shift,inc,dec);
TYPE data IS RANGE 0 TO 255;
END;
USE work.oper_unit_decl.all;
ENTITY oper_unit IS
PORT ( load_coinmand, execute: IN bit;
command: IN instruction;
data_in:IN data;
data_put:OUT data);
END oper_unit;
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned."+";
ENTITY add_subb IS
GENERIC (width:INTEGER);
PORT ( data_a,data_b: IN std_logic_vector (width -1 DOWNTO 0 ) ; — входы
direction, — '0' -сложение, '1' -вычитание
carry_in: IN std_logic; — входной перенос
sum :OUT std_logic_vector(width -1 DOWNTO 0 ) ; — результат
overflow: OUT std_logic); — переполнение
END add_subb;
BEGIN
PROCESS( data_a,data_b, carry_in)
ТУРЕ carry_array IS ARRAY (4 DOWNTO 0, group -1 DOWNTO 0) OF std_logic;
VARIABLE carry: carry_array; — переносы
VARIABLE i :INTEGER RANGE 0 TO 3;
VARIABLE group_number: INTEGER RANGE 0 TO group - 1 ;
VARIABLE c_b,lb: INTEGER RANGE width -1 DOWNTO 0;
VARIABLE fast_carry : — выходы группового переноса
std_logic_vector (group -1 DOWNTO 0 ) ;
VARIABLE ps,pm,a_carr: std_logic_vector (width -1 DOWNTO 0 ) ;
BEGIN
вспомогательные переменные для вычисления переносов
IF direction='0' THEN a_carr:= data_a;
else a_carr:= not data_a;
END IF;
ps:= a_carr xor data_b; — Partial Sum — разрядные полусуммы
pm:= a_carr and data_b; — Partial multiply — разрядные произведения
конец вспомогательных переменных
FOR group_number IN 0 TO group -1 LOOP — цикл по группам разрядов
lb :=4*group_number;— номер младшего разряда в группе
IF group_number=0 THEN carry (group_number,0):=carry_in;
ELSE carry(group_number,0):= fast_carry (group_nutriber - l ) ;
END IF;
FOR I IN 0 TO 3 LOOP — анализ разрядов внутри группы
C_b:= lb+ I; — абсолютный номер разряда
sum(c_b) <= data_a(c_b) xor data_b(c_b) xor carry(group_number - , I ) ;
carry(group_number,i+1) := (a_carr(c_b) and data_b(c_b))
or ((a_carr(c_b) or data_b(c_b)) and carry(group_number,i));
END LOOP;
FAST_CARRY(GROUP_NUMBER):=
pm(lb+3)
or (pm(lb+2) andps(lb+3))
or (pm(lb+l) and ps(lb+3)and ps(lb+2))
or (pm(lb) and ps(lb+3)and ps(lb+2)and ps(lb+l))
or (carry(group_number,0)and ps(lb+3)and ps(lb+2)and ps(lb+l)and ps(lb));
END LOOP;
overflow<= fast_carry(group - 1 ) ;
END PROCESS;
END comb_logic;
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE work.std_logic_util.all;
ENTITY pipe_nul IS
GENERIC ( width:integer:=8);
PORT ( data_a,data_b: IN integer RANGE 0 TO 2**width -l;
clock: IN std_logic;
product :OUT integer RANGE 0 NO 2**(2*width) -1
);
END pipe_mul;
Замечание
Если в списке инициализаторов процесса в программе (листинг 3.30) записать
имена входных портов, а промежуточные данные определить как переменные,
программа преобразуется в описание матричного умножителя комбинационно-
го типа. Впрочем, в этом случае нет необходимости формировать цепочку
элементов задержки исходных данных a _ s h i f t и b_shift, т. к. для формиро-
вания значений частичных произведений можно непосредственно использовать
данные с портов.
Mealey_nach:PROCESS
VARIABLE s: state;
BEGIN
s<=SO;
LOOP
WAIT UNTIL (p_clk='l' and not p_clk'stable);
— Реализация переходов
CASE S IS
WHEN SO => IF x=xO THEN s<=sO;
ELSIF (x=xl) THEN s<=Sl;
ELSE s<=s2;
END IF;
WHEN SI => IF x =xO THEN s<=Sl;
ELSIF x =xl THEN s<=S2;
ELSE s<=SO;
END IF;
WHEN S2 => IF x =xO THEN s<=S2;
ELSIF x =xl THEN s<=S3;
ELSE s<=S1;
END IF;
WHEN S3 => IF x =xO THEN s<=S3;
ELSIF x =xl THEN s<=SO;
ELSE s<=S2;
END IF;
END CASE;
Формирование выходов
IF ( s = s3 and x=xl) THEN y<=yl;
ELSIF (s =sO and x=x2) THEN y<=y2;
ELSE y<=yO;
END IF;
END loop;
END process;
388 Проектирование систем на микросхемах программируемой логики
хо SO S1 SO
Х1 S1 S2 S1
PROCESS (moor)
BEGIN
IF moor=Sl THEN z<=Zl;
ELSE z<= ZO;
END IF;
END PROCESS;
END abstraction;
Mealey_mach:PROCESS
VARIABLE s: state;
Variable prom: std_logic_vector (1 downto o ) ;
BEGIN
s<=SO;
LOOP
WAIT UNTIL (p_clk='l' and not p_clk'stable);
Prom="00"
CASE S IS
WHEN SO => IF x(l) = 4' THEN s<=s3; prom(l) : = '!'; ~x=x2
ELSIF x(0)='0' THEN s<=sO; —x=xO
ELSE s<=sl; —x=xl
END IF;
WHEN SI => IF x(l)='l' THEN s<=sO;
ELSIF x(0)='0' THEN s<=sl;
ELSE s<=s2;
END IF;
Глава 3. Языки описания дискретных устройств 391
рый сопоставлен старшему биту коду состояния. Сигнал STOP переводит ав-
томат в исходное состояние.
В программе (листинг 3.34), описывающей этот автомат, переменная со-
стояния STATE представлена вектором, "составленным" из выходных сигна-
лов, а логика переходов базируется на анализе только тех входных сигналов,
которые важны в соответствующем состоянии.
ENTITY direct_inout_asignments IS
PORT( clk,reset:IN bit;
start,stop:IN bit;
work,prepare:inout bit);
END direct_inout_asignments;
ARCHITECTURE behave OF direct_inout_asignments IS
BEGIN
PROCESS (clk,reset)
VARIABLE state: bit_vector (I DOWNTO 0 ) ;
BEGIN state:=work & prepare;
IF reset='l' THEN work<='0'; prepare<='0';
ELSIF clk='l' and clk'event THEN
CASE state IS
WHEN "00"=> IF start='l' THEN
prepare<=' 1';
END IF/-
WHEN "01"=> prepare<='0';work<='1';
When "10"=> IF stop='l' THEN
work<='0';
END IF;
WHEN "11"=>NULL;
END CASE;
END IF;
END PROCESS;
END behave;
При описании аппаратуры на языке VHDL следует учитывать, что при ком-
пиляции программы структура синтезируемой схемы и ее временные харак-
теристики существенно зависят от формы записи автомата.
Варианты, подобные представленному листингом' 3.34, позволяют миними-
зировать запаздывание между выходными сигналами и регистром памяти.
В тех же случаях, когда необходимо минимизировать время удержания
входных данных, целесообразно использовать структуру автомата Мура
с предустановкой в соответствии со схемой, приведенной на рис. 3.16. Ти-
повая структура такой программы представлена на рис. 3.17.
Глава 3. Языки описания дискретных устройств 393
a r h i t e c t u r e moore2 of State_mashine is
<описания локальных сигналов>
process — схемы с памятью
begin
<установка исходного состояния>
wait u n t i l c l o c k = ' l ' and clock'event;
X1<=X; — предустановка входа
S<=F 1 (Xl,S); — изменение состояния
end process;
process (S,X1) — комбинационная логика
begin
Y<=F2(S,X1);
end process;
end moore2;
3.2.9. Подпрограммы
Подпрограммы в VHDL, как и в других алгоритмических языках, обеспечи-
вают, во -первых, структуризацию описания проекта за счет разделения его
на законченные внутренне определенные блоки, а во -вторых, являются
средством экономии времени проектировщика, позволяя заменить несколь-
ко описаний сходных фрагментов алгоритма одним объявлением подпро-
граммы и соответствующими ссылками на нее (вызовами) в основном тексте.
Каждая подпрограмма, используемая в проектном модуле, должна быть
представлена телом подпрограммы в разделе деклараций этого модуля или
проектного модуля, иерархически старшего по отношению к данному. Под-
робнее концепция видимости деклараций рассматривается далее в разд. 3.2.12.
Различают два вида подпрограмм — процедуры (PROCEDURE) и функции
(FUNCTION).
Оба вида содержат в своем теле набор последовательных операторов, которые
задают совокупность действий, исполняемых после вызова этой подпро-
граммы. Процедура возвращает результаты либо путем непосредственного
преобразования объектов, определенных в вызывающей программе (гло-
бальных сигналов или переменных), либо за счет сопоставления объектов
через список соответствий. Функция же определяет единственное значение,
используемое в выражениях, в которые включен вызов этой функции.
Объявления подпрограмм отображаются в текстах телами подпрограмм, ко-
торые подчиняются следующему синтаксическому правилу:
<тело подпрограммы> :: =
<спецификация подпрограммы> IS
<раздел деклараций подпрограммы>
BEGIN
« <последовательный оператор> »
END [ PROCEDURE | FUNCTION ] <имя подпрограммы>;
Глава 3. Языки описания дискретных устройств 395
<спецификация подпраграммы> :: =
PROCEDURE <имя подпрограммы> [ (Интерфейсный список>) ]
FUNCTION <имя подпрограммы^ [ (<интерфейсный список>) ]
RETURN <тип>
<интерфейскый список> ::=
<элемент интерфейсного списка> «;<Элемент интерфейсного списка>»
<элемент интерфейсного списка>::=
[ CONSTANT | VARIABLE | SIGNAL ]
<формальный параметр> «,<формальный параметр>»
:<направление> <тип> [ :=<константное выражение> ]
ции, ибо является неразрешаемым. Введем тип odw, как разрешаемый под-
тип типа BIT, и соответствующую функцию разрешения:
FUNCTION resolved_odw( s:bit_vector) RETURN bit IS
VARIABLE c: bit:='l';
BEGIN FOR i IN s'range LOOP
IF s(i)='0' THEN c:='0'; EXIT;
END IF;
END LOOP;
RETURN c;
END resolved_odw;
SUBTYPE odw IS resolved_odw bit;
library ieee;
use work.pack_wired_or.all;
ENTITY open_drain is
PORT (data,selector:in bit_vector(7 DOWNTO 0 ) ;
single:IN bit;
output:OUT odw);
END open_drain;
TYPE s t d l o g i c _ t a b l e is a r r a y ( s t d _ u l o g i c , s t d _ u l o g i c ) of s t d _ u l o g i c ;
CONSTANT r e s o l u t i o n _ t a b l e : s t d l o g i c _ t a b l e := (
|U X 0 1 Z W L H - ||
LIBRARY ieee;
USE IEEE.std_logic_l164.all;
ENTITY ram_array IS
GENERIC ( length:integer:= 64);
PORT( en:IN std_logic_vector(length -1 DOWNTO 0 ) ; — входы выборки
wr,rd: IN std_logic; — wr -запись, rd — чтение
data:INOUT std_logic
);
END ram_array;
ARCHITECTURE behave OF ranwarray IS
SIGNAL cell: STD_uLOGIC_VECTOR(LENGTH -1 DOWNTO 0 ) ;
SIGNAL data bus: std logic;
Глава 3. Языки описания дискретных устройств 403
BEGIN
data_bus<='Z' WHEN (wr='0') ELSE — входной буфер
'1' WHEN (wr='l' and data='l') ELSE
'0' WHEN (wr='l' and data='0') ELSE
'X';
transmit: PROCESS( rd, data_bus) — выходной буфер
BEGIN
IF rd='l' THEN
CASE data_bus IS
WHEN 'l'|'H'=> data<= '1';
WHEN 'O'l'L'=> data<= '0';
WHEN OTHERS => data<= 'X';
END CASE;
ELSE data<='Z';
END IF;
END PROCESS;
cells:PROCESS (data_bus, en) — линейка запоминающих ячеек
BEGIN
FOR i IN О ТО length -1 LOOP
IF en(i)='l' THEN
CASE datajous IS
WHEN '1'|Н'=> cell(i)<= 'H';
WHEN '0'|'L1=> cell(i)<= 'L';
WHEN 'Z' => null;
WHEN others => cell(i)<= 'W1;
END CASE;
END IF;
END LOOP;
END PROCESS;
data_bus_drive: PROCESS (en,data) — поведение линии данных
— в режиме чтения
BEGIN
FOR i IN 0 ТО length -1 LOOP
IF (en(i) -'l') THEN
data_bus<=cell(i);
END IF;
END LOOP;
END PROCESS;
END behave;
CONT INPUT
Рис. 3.19. Структурное представление проекта
ENTITY structure_example IS
PORT ( input: IN std_logic (7 DOWNTO 0 ) ;
controle: IN std_logic (3 DOWNTO 0) ;
s: OUT std_logic);
END structure_example;
ARCHITECTURE structure OF primer IS
COMPONENT V
PORT( A:IN std_logic_vector (7 DOWNTO 0 ) ;
CONTROLE:IN std_logic_vector (3 DOWNTO 0 ) ;
B: OUT std_logic_vector (31 DOWNTO 0 ) ;
C:OUT std_logic);
END COMPONENT;
COMPONENT W
GENERIC (width:integer:=8);
PORT( A:IN integer RANGE 2**width -l DOWNTO 0;
B: OUT integer RANGE 2**width -l DOWNTO 0 ) ;
END COMPONENT;
COMPONENT Z
GENERIC (width:integer:=16);
PORT( A: IN std_logic_vector (width -1 DOWNTO 0)
C:in std_logic;
B,D: OUT std_logic);
END COMPONENT;
BEGIN
Ul: v
PORT MAP (input, controle, a,d);
U2:W
PORT MAP (cI,eI);
U3:z
GENERIC MAP(width=>32)
PORT MAP(A=>f,C=>d, B=>S,D=>OPEN);
— согласование типов данных
rename: c<= a(31 DOWNTO 24);
cI<= cony_integer ( c ) ;
e<= conv_std_logic_vector ( eI, 8);
f<=e & a(23 DOWNTO 0};
END structure;
LIBRARY ieee;
USE IEEE.std_logic_1164.all;
ENTITY shIFt_register IS
GENERIC( num_bits: integer:=8; — число разрядов
dir:string:="right"); — тип регистра — "left" — со сдвигом влево
"right" — со сдвигом вправо
"bidir" — реверсивный
PORT (clk:IN std_logic;
oper:IN std_logic_vector (1 DOWNTO 0 ) ;
— 00 — пустая операция
— 10 — левый сдвиг для типа "bidir" и сдвиг для других типов
Глава 3. Языки описания дискретных устройств 411
ENTITY bit_count_usage IS
Port (real_input:IN std_logic_vector ( 47 DOWNTO 0} ;
Real output: OUT inreger RANGE 0 TO 48);
END bit_count_usage;
ARCHITECTURE selected_architectures OF bit_count_usage IS
COMPONENT bit_count
PORT ( input : IN std_logic_vector (15 DOWNTO Ob -
output: OUT integer RANGE 0 TO 15);
END COMPONENT;
FOR ml: bit_count USE ENTITY work.bit_count (pure_behave) ;
FOR others: bit_count USE ENTITY work.bit_count (comb_logic) ;
SIGNAL first, second, third: integer RANGE 0 TO 15;
BEGIN
ml : bit_count
PORT MAP( input => real_input (15 DOWNTO 0) ,output=>first) ;
m2 : bit_count
PORT MAP( input => real_input (31 DOWNTO 16), output=> second);
m3 : bit_count
PORT MAP( input => real_input (47 DOWNTO 32),output=> third);
real_output<=first+second+ third;
END selected_architectures ;
library IEEE;
use IEEE.std_logic_1164.all;
package std_logic_util is
function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER)
return STD_LOGIC_VECTOR;
function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return INTEGER;
end std_logic_util;
c o n s t a n t tbl_BINARY : t b l _ t y p e : =
('0', '0', '0', ' 1 ' , '0', '0', '0', '1', '0');
( Замечание )
В данной книге примитивы для представления двунаправленных цепей пере-
дачи и резистивных цепей не рассматриваются, т. к. эти конструкции очень
редко используются при проектировании ПЛИС.
Глава 3. Языки описания дискретных устройств 421
Цепи и регистры
Сигналы в Verilog HDL представляются в четырехзначном алфавите {0, 1, X, Z}.
Однако для декларации линий связи, к которым подключаются источники,
характеризующиеся специфическими электрическими параметрами, напри-
мер проходные ключи, схемы с открытым коллектором и т. п., драйверам
сигнала могут быть приписаны дополнительные атрибуты — уровни силы
(Strength Level) — которые доопределяют способ вычисления истинного
значения сигнала на линии.
Введено две группы типов данных для представления сигналов: цепи (nets)
и регистры (registers). Каждой группе соответствуют специфические спо-
собы сохранения присвоенных значений и, в конечном счете, различные
схемные решения для их реализации в аппаратуре.
Цепи представляют физические связи между структурными компонентами
устройства. Сама по себе цепь не сохраняет состояние — она должна управ-
ляться драйвером, который соответствует оператору параллельного присваи-
вания, причем имя драйвера совпадает с именем цепи. Это, собственно, и от-
ражается в принятом в языке Verilog названии операторов этого типа —
"continuous", т. е. непрерывные, постоянно воздействующие на цепь.
424 Проектирование систем на микросхемах программируемой логики
Замечание
В языке Verilog, в отличие от VHDL, не различаются понятия сигнала и пере-
менной — все данные, которые могут изменяться, называют переменными
(variables). Специфика выполнения операций назначения и сохранения со-
стояния переменных определяется их типом (net или r e g i s t e r ) , а в некото-
рых случаях способом записи оператора присваивания.
Примеры:
reg a; // скалярная регистровая переменная
wire wl, w2; // декларация двух цепей
wire #5 w3= wl && w2; // совмещение объявления цепи и присваивания:
// w3 принимает значение логического И от значений wl и w2
// через 10 единиц модельного времени после изменения
// любого из них
reg[3:0] v; // 4 -разрядный векторный регистр,
// включающий v[3], v[2], v[l] и v[0],
// причем v[3] — старший разряд, a v[0] — младший
tri [15:0] busa; // 16 -разрядная шина с тремя состояниями
reg signed [0:3] signed_reg; // 4 -разрядный регистр, код в котором
// трактуется как число в диапазоне от -8 до +7
Память
Одномерный массив битов в Verilog определяется как вектор, т. е. перемен-
ная соответствующего типа с указанием границ индексов. Двумерный бито-
вый массив представляется исключительно как пронумерованная совокуп-
ность битовых векторов и называется памятью (memory). Синтаксис декла-
рации памяти имеет вид:
<Декларация памяти> : : =
<декларация элемента памяти> <диапазон>;
Декларация элемента памяти> : : =
reg [<диапазон> ] <имя>;
430 Проектирование систем на микросхемах программируемой логики
Параметры
Параметрами (parameter) в Verilog называют константные значения, исполь-
зуемые в программах через объявленное имя. Синтаксис декларации пара-
метров определен следующим образом:
<декларация параметров> : : =
parameter <имя>=<константное выражение>
«,<имя>=<константное выражение> »;
Программный модуль может содержать сколько угодно деклараций парамет-
ров. Тип параметра совпадает с типом константного выражения.
Примеры:
parameter x=25, f=9; // Два параметра (константы) целого типа;
parameter pi=3.14157; // Константа действительного типа;
parameter word_size=8, last_bit_number= word_size - l ;
// значение Last_bit_number
// задано арифметическим выражением,
// включающим ранее определенный параметр;
parameter delay=100; // время задержки, выраженное в единицах
// модельного времени.
Хотя значения параметров являются константами внутри модуля, в котором
они определены, при включении в иерархические проекты им может быть
присвоено значение, отличное от предопределенного в декларации.
Арифметические операции
Набор арифметических операций и правила старшинства достаточно тради -
ционны для алгоритмических языков. Однако следует отметить, что резуль-
таты преобразования данных регистрового типа отличаются от результатов
выполнения операций над данными целого типа. Данные регистрового типа
рассматриваются как целое число в двоичном беззнаковом представлении.
То есть, если мы присваиваем регистровой переменной константное зна-
чение
- N <базовый формат> X
Тогда
regA= -4'dl2 // присвоен код "1111 1111 1111 ОНО",
// являющийся дополнением до двух кода числа +12, двоичный
// эквивалент которого равен "0000 0000 0000 1010"
intA= regA/3 // присвоено значение 21841, потому что код, находящийся
// в regA, представляет число 65526
Операции сдвига
В операциях сдвига операнд, находящийся слева от знака операции, сдвига-
ется влево или вправо на число разрядов, записанное справа. Освободив-
шиеся разряды заполняются нулями.
Операции свертки
Операции свертки имеют то же обозначение, что и поразрядные, но явля-
ются унарными и дают скалярный результат. Все разряды операнда рассмат-
риваются как скалярные аргументы соответствующей многоместной опера-
ции. Например, при выполнении свертки по И разряды аргумента анализи-
руются последовательно друг за другом, причем каждый раз выполняется
операция И над значением нового разряда и результатом анализа предыду-
щего. Анализ может быть завершен, если на каком -то этапе получен нуле-
вой результат. Фактически свертка по И даст нуль, если в коде операнда
содержится хоть один нуль, а результат будут равен единице, если все разря-
ды установлены в единицу. Если же в каком -либо разряде присутствует не -
434 Проектирование систем на микросхемах программируемой логики
Условная операция
Условная операция является единственной тернарной операцией, синтаксис
которой определяется следующим образом:
<условное выражение> ? <выражение 1> :<выражение2>
module top;
reg [2:0] а;
wire [4:0] b;
assign 15 b ={c,&a,a};// параллельный оператор, изменение а и с вызывает
// его исполнение через 5 единиц модельного времени
то в результате присваивания
{d,e}= {с, regB, regA[4:0] }
Непрерывное присваивание
Приемником в операторе непрерывного присваивания может быть только
переменная типа "цепь", скалярная или векторная. Синтаксис оператора па-
раллельного присваивания имеет вид:
<оператор параллельного присваиваний : : =
assign [ <сила драйвера> ] [ <задержка>] <присваивание> «,<присваивание>»;
438 Проектирование систем на микросхемах программируемой логики
<эадержха> ::=
# <параметр задержки>
| # ( <параметр задержки>, <параметр задержки>
[,<параметр задержки> ] }
<параметр задержки> ::=
<Выражение времени>
| <Выражение времени> : <Выражение времени> : <Выражение времени>
module delay_example;
reg sl,s2,v;
wire result;
assign # ( 10,5,15}
result=(sl=l) : 1'bl : 1'bz,
result=(s2==l) : v : 1'bz;
initial s1=0; s2=0;v=0;
#10 sl=l;
#20 sl=0;
Глава 3. Языки описания дискретных устройств 439
#25 s2=l;
#15 v = l ;
#10 v=0;
#10 s2=0;
#20 $finish;
endmodule
res
0 1 2 3 4 5 6 7 8 9 1 0 1 1
module LSB_as_selector;
reg [2:0] а;
wire [2:0] b,c;
assign #(10,20) b = a;
c[0]=a[0];
c[l]=a[l];
c[2]=a[2];
initial
begin
a = 'bOOOO;
#100 a = 'bOlO;
#100 a = 'b101;
#100 a = 'b1ll;
end
initial
begin
$monitor($time,, "a=%b, b=%b",a, b) ;
#1000 $finish;
end
endmodule
причем набор таких значений может быть задан индивидуально для каждого
вида перехода.
Язык Verilog позволяет описывать устройства, в которых несколько источ-
ников работают на одну линию, при этом каждому источнику сопоставляет-
ся собственный оператор непрерывного присваивания переменной, пред-
ставляющей сигнал на этой линии. Если при этом лишь один из таких ис-
точников может быть в активном состоянии, то ситуация описывается
относительно просто: если хоть один источник находится в активном со-
стоянии, переданное им значение, как более "сильное", по определению по-
давляет "слабые" сигналы, представляющие источники, находящиеся в от-
ключенном состоянии (z -состоянии). Однако в практике возникают и иные
ситуации. Во -первых, может быть необходимо обнаружение при моделиро-
вании сбойных ситуаций, связанных с некорректной активизацией несколь-
ких драйверов, возможно подключение к шинам схем с открытым коллекто-
ром и подобных компонентов, выходное сопротивление которых, а значит
влияние на результат, будет неодинаково в различных условиях. Конструк-
ция, определяющая степень такого влияния, называется "сила драйвера" и мо-
жет включаться в оператор параллельного присваивания.
Сила драйвера задается парой значений уровня, выбранных обязательно из
разных столбцов приведенного списка:
supplyl supplyO
strongl strongO
pulll pullO
weakl weakO
highzl highzO
Wire а;
Reg b,c;
Assign (strongO,weakl) a=b;
Assign (strongl,weakO) a=c;
442 Проектирование систем на микросхемах программируемой логики
z -состояние
неопределенное состояние
Последовательные присваивания
Процедурные последовательные операторы присваивания, которые мы бу-
дем называть просто последовательными присваиваниями, потому что по-
следовательными могут быть только процедурные присваивания, локализу-
ются в так называемых последовательных блоках. Подробнее концепция
блока будет рассмотрена далее, пока же определим, что последовательный
блок — это последовательность операторов, заключенная между парой ключе-
вых слов begin и end. Последовательные операторы выполняются друг за
другом в порядке записи, а приемником в них может быть только перемен-
ная регистрового типа. Но с точки зрения доступности результатов присвое-
ния для последующих операторов имеются модификации. Язык Verilog не
различает, в отличие от VHDL, категорий сигналов и переменных. Но для
отображения причинно -следственных связей наряду с параллельными операто-
рами вводятся специфические, подобные VHDL, механизмы управления доступ-
ностью, задаваемые формой записи оператора: блокирующие и неблокирующие
операторы присваивания, и соответствующая символика.
Глава 3. Языки описания дискретных устройств 443
( Замечание )
Ни в коем случае нельзя в операции сравнения использовать обозначение "
(один знак равенства), ибо один знак равенства представляет присваивание.
Глава 3. Языки описания дискретных устройств 445
4'd0, 4'dl, 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7: result = 8 ' b l l l l l l l l ;
default result = 8'bx;
endcase
begin
reg [7:0] shi ft_reg;
result = 0 ;
shift_reg = rega;
while(shift_reg)
begin
Глава 3. Языки описания дискретных устройств 449
module delay_example;
wire d;
reg а,Ь,с; assign #10 d=a;
initial
begin a=0;
#20 a=l;
#20 a=0; end
i n i t i a l #5
begin b=a;
#20 b=a;
#20 b=a;
end
initial
begin #5 c= #5 a;
#20 c - #5 a;
#20 c= #5 a;
end
endmodule
О 10 20 30 40 50 60
Рис. 3.23. Управление изнутри присвоения
3.3.9. Блоки
В предыдущих разделах мы неоднократно использовали блочное представ-
ление программы. Составные операторы, вложенные в операторы инициа-
лизации и в операторы постоянного повторения, являются простыми при-
мерами блоков. Блок объединяет операторы, связанные общими правилами
инициализации. В данном разделе дается более подробное изложение кон-
цепции блока, принятой в языке Verilog.
Различают последовательные и параллельные блоки. Формальный синтаксис
блока определен следующим образом:
<блетс> : : =
Открывающее слово
[ : <имя блока> [ <раздел деклараций блока>] ]
« <оператор> »
<закрывающее слово>
initial
begin a=0;
#10 а - 1;
120 а= 0;
#70 а=1;
#20 а=0;
end
always @(posedge a)
begin
fork
#20 b=0; //
#10 b=a; // Это присвоение выполнено раньше предыдущего
# 30 b=l'bz; // время отсчитывается от фронта сигнала а
join
#5 b=l'bz; // время отсчитывается от выполнения последнего
// оператора в параллельном блоке
end
endmodule
3.3.10. Подпрограммы
Как и в традиционных языках программирования, использование подпро-
грамм позволяет обеспечить структуризацию, следовательно, лучшую пони -
маемость программ, а также экономит время проектировщика, позволяя од-
нократно описывать однотипные фрагменты устройств и/или алгоритмы их
функционирования. И так же, как и в других языках, в Verlog различают два
вида подпрограмм, отличающихся по способу возвращения результата в вы-
зывающую программу: задачи (task) и функции (functions). При вызове всем
объектам подпрограммы, которые представлены локальными именами и ко-
торые мы будем называть формальными объектами, сопоставляются факти-
ческие объекты — значения или имена переменных, используемые в кон-
кретном вызове вместо соответствующих формальных объектов.
( Замечание )
В большинстве публикаций по программированию, в том числе при представ-
лении языка VHDL в данной книге, для определения информации, передавае-
мой между вызывающей программой и подпрограммой, используются термины
"формальный параметр" и "фактический параметр". Но в Verilog понятие
"параметр" имеет несколько иной смысл, а параметр может сам быть переда-
ваемым объектом. Поэтому во избежание путаницы здесь использовано отно-
сительно нетрадиционное название для обозначения данных, сопоставляемых
при вызове.
task mul;
parameter size=8;
input elk,start;
input [size:l] opa,opb;
output [2*size:I] product;
output ready;
reg ready, state;
reg [size:l] shift_opb;
reg [2*size:l] shift_opa,product;
reg [3:0]count;
begin
@ ( posedge clock or posedge start)
if (start) state=0;
else case (state)
0: begin if (start)
shift_opa = opa;
shift_opb = opb;
product = 0;
458 Проектирование систем на микросхемах программируемой логики
count=size;
ready= 0;
state=l;
end
1: begin if (count==0) begin
state=0;
ready=l;
end
else if (shift_opb[l])
product = add_subb(product,shift_opa,1);
shift_opa - shift_opa « 1 ;
shift_opb = shift_opb» 1;
count= add_subb(count,1,0);
end
endcase
end
endtask
mul (8,clk,start,a,b,prodl,ready);
mul (8,clk,start,c,d,prod2,);
always @(posedge ready) result=add_subb({l'bO,prodl},{I'b0,prod2},0);
endmodule
3.3.12. Примитивы
Подклассом встраиваемых модулей являются примитивы. Общее их свойст-
во — они имеют единственный выходной порт. Различают предопределен-
ные примитивы и примитивы, определяемые пользователем (User Defined
Primitives, UDP).
Предопределенные примитивы
Образы предопределенных примитивов по умолчанию присутствуют в биб-
лиотеке, и дополнительных деклараций не требуется, а вызов подчиняется
общим правилам объявления вхождений.
Приведем список наиболее употребительных предопределенных примитивов
Verilog:
<имя предопределенного примитива> ::=
and | nand (or |nor | xor | xnor | buf (bufifO | bufifl | not
Здесь конструкция
xor comp[lenlth -l:0](inpl, inp2, bit_wise_comp)
представляет набор из l e n i t h элементов "исключающее ИЛИ", имеющих
задержку 5 единиц модельного времени каждый. Выходы этих элементов
объединяются по логике ИЛИ, формируя единичный сигнал, если хоть в
одном из разрядов аргументов имеется несовпадение.
Все же нам представляется, что описание комбинационных логических схем
с использованием обычных логических выражений и присвоений выглядит
более естественно и наглядно. Правда, разработчики языка утверждают, что
представление логических преобразований с использованием примитивов
позволяет уменьшить время моделирования.
Обратите внимание на то, что смысл имен входов и выходов определен два-
жды. Во -первых, он однозначно задается порядком записи в заголовке (т. е.
в скобках после имени примитива), а во -вторых, специфицируется высказы-
ваниями input и output. Несовпадение этих двух определений является
ошибкой.
Синтаксис определения UDP комбинационного типа отличается от синтак-
сиса определения последовательностных UDP, поэтому рассмотрим их раз-
дельно. В комбинационных UDP не предусматривается определение исходного
состояния и спецификации выхода.
Синтаксис таблицы для комбинационного UDP определен следующим об-
разом:
<таблица для комбинационного UDP> ::=
table
« <список значений входов> : <значение выхода комбинационного UDP>;>>
endtable
<список значений входов> ::= Оначение входа> « <значение входа> »
Оначение входа> : : = 0 | 1 | х | ? | b
Оначение выхода комбинационного UDP> :: = 0 | 1 | х
table
//х у 2 major
1 1? 1;
? 1 1 1;
1 ? 1 1;
0 0 ? 0;
0 ? 0 0;
? 0 0 0;
endtable
endprimitive
module add_2bit ( in l,in2, cin, result, cout) ;
input inl,in2, cin,
output result, cout;
wire [1:0] inl,in2,result;
wire [1:0] carry;
vote tt4 cl (carry[0],inl[0],in2[0],cin);
vote #4 c2 (carry[1],inl[1],in2[1],carry[0]);
assign #4 cout=carry[l];
result[0]=(inl[0] && in2[0] && cin) || carry[0] && (inl[0] || in2[0] ||
cin),
result[l]= inl[l] && in2[l] && carry[0] ||
carry[1] && (inl[l] || in2[l] || carry[0]);
endmodule
primitive rsff_sync(q,clk,r,s),
input clk,r,s;
output q; reg q;
table
// clk r s q(t) q(t+l
0 ? ? 7 -;
? 0 0 7 -;
I 0 1 7 1;
1 1 0 7 0;
1 1 1 7 x;
1 ? x 7 x;
1 x ? 7 x;
1 ? X 7 x;
endtable
endprimitive
endtable
endpriroitive
№ Наименование Обязат./
не обязат.
Назначение
Секция предпроекта
(Subdesign section)
Заголовок предпроекта Обяз. Определяет порты проекта
Подсекция переменных Не обяз. Присваивает имена внутренним
(Variable Section) узлам проекта, включая связи,
комбинационные схемы,
регистры, автоматы,
встраиваемые модули
Оператор(ы) проверки Не обяз. Проверяет корректность
(Assert Statement) конфигурации и выдает
сообщение об ошибке
470 Проектирование систем на микросхемах программируемой лотки
Десятичный 0 -9 1248
Двоичный 0,1, х В;Ь В"1х001"
Восьмеричный 0 -7 О; о; Q; q 0"705"
Шестнадцатеричный 0 -9,A,B,C,D,E,F Н; h; X; х Н"1АЕ F"
Обозначение Уровень
Название Буквенное Символьное приоритета
Инверсия NOT I 1
И (конъюнкция) AND & 2
Глава 3. Языки описания дискретных устройств 475
Обозначение Уровень
Название Буквенное Символьное приоритета
SUBDESIGN simple
(
аО, al: INPUT;
b: INPUT=VCC;
outl, out2 : OUTPUT;
VARIABLE с : NODE;
BEGIN
c= al & !aO
outl = с & b;
out2 = c#b;
END;
- а[ ]= с[ ] tt х;
ЭКВИВАЛЕНТНО а [0 ]=с[1] I x; а[1]=с[2] # х, И Т. Д.
SUBDESIGN defalt_example
( a,b:INPUT;
е[3..0]:INPUT
с[3..0]:OUTPUT)
BEGIN
DEFAULTS c [ ] = B " l l l l " ;
END DEFAULTS;
if a then c [ ] = e [ ] ;
elsif b then c[]=e[]+ B"1110";
end if;
SUBDESIGN priority
( ena:input= V C C ; — разрешение запроса
interupt_request[3..0]: INPUT; — линии входа запроса
priority_level[l..0] : OUTPUT; — код запроса
request_exist: OUTPUT — есть запрос
)
BEGIN
DEFAULTS request_exist=VCC;
END DEFAULTS;
CASE (ena,interupt_request[]) IS
WHEN B"OXXXX",B"10000" => request_exist[]=GND
priority_level[]=B"XX";
WHEN B"11XXX" =>priority_level=B"ll";
WHEN B"101XX" =>priority_level=B"10";
WHEN B"1001X" =>priority_level=B"01";
WHEN B"10001" =>priority_level=B"00";
END CASE;
END;
TITLE "odd_checker";
CONSTANT length=8; — число разрядов
( odd_in:INPUT; — вход расширения
data[length -1..0]:INPUT;
odd_result:output
)
VARIABLE odd_carry[length..0]:node;
BEGIN odd_carry[0]=odd_in;
FOR i IN 0 TO length -1 GENERATE
odd_carry[i+1]= odd_carry[i] $ d a t a f i ] ;
END GENERATE;
odd_result=odd_carry[length];
end;
LATCH d, e n a , q
OFF d, clk, clrn, prn, q
DFFE d, clk, c l r n , prn, ena, q
JKFF j,k, clk, c l r n , prn, q
JKFFE j,k, clk, c l r n , prn, ena, q
JKFF s,r, clk, clrn, prn, q
JKFFE s,r, clk, c l r n , prn, ena, q
TFF t, c l k , c l r n , prn, q
TFFE t, clk, c l r n , p r n , ena, q
PARAMETERS
(n=8 — разрядность
);
SUBDESIGN revers_count
( clk: INPUT,
reset, up_down, carry_in : input=VCC;
q[n..O] : OUTPUT
VARIABLE
q[n..0]:dff;
Глава 3. Языки описания дискретных устройств 485
BEGIN
q[].clk=clk & carry_in;
q[].clrn=!reset;
IF up_down==vcc THEN
q[].d=q[].q+1;
ELSE q[].d=q[].q - l ;
END IF;
END;
PARAMETERS (n=8);
SUBDESIGN accum_add
( clk,.reset:INPUT;
data[n -l..0]:INPUT;
sum[n -l..0]: OUTPUT;
overflow : OUTPUT — переполнение
)
VARIABLE
q[n..0]:dff;
BEGIN
q[].clk=clk;
q[].clrn=reset;
q[].d=q[].q+(GND,data[]);
sum[]=q[n - l . . 0 ] . q ;
overflow=q[n]. q;
END;
воспроизводит функции монтажного ИЛИ для трех сигналов al, a2, аЗ, вы-
бираемых кодом select [ ], и эквивалентна
Wired_or=select[l] & al I Wired_or # select[2] & a2 I select[3] & a3;
SUBDESIGN Double_bus_reg
(
clk : INPUT;
load[l..0],select[l..0] : INPUT;
io[7..0] : BIDIR;
)
VARIABLE v[l..0][7..0]:NODE; — два восьмиразрядных регистра
W[l..0][7..0]:TRI; — два трехстабильных восьмиразрядных буфера
Глава 3. Языки описания дискретных устройств 457
BEGIN
FOR j IN 0 ТО 1 GENERATE
FOR i IN 0 ТО 7 GENERATE
v [ j ] [ i ] = D F F ( i o [ i ] , clk, load[j],);
w[j][i].oe=select[j];— каждый буфер управляется своим сигналом
— разрешения
w[j][i].in=v[j][i]; — и имеет свой вход
Замечание
Здесь для описания подключения регистров использована конструкция "In -Line -
Function Reference" (вызов функции в строке) — подробнее об этом см. разд. 3.4.9.
CascOUT
SUBDESIGN comp_casc
( а[15..0],Ь[15..0]:INPUT;
result:OUTPUT;
)
VARIABLE t e m p [ 7 . . 0 ] : NODE;
BEGIN
temp[0]=GND;
FOR j IN О ТО б GENERATE
tertptj+11 - cascade* (a[2*j] $ b [ 2 * j ] )
f (a[2*j+l] $ b [ 2 * j + l ] ) # temp[j]),
END GENERATE;
r e s u l t = temp[7]#(a[14] $
tt (a[15] $ b [ 1 5 ] ) ;
END;
Глава 3. Языки описания дискретных устройств _ 489
Outi - .d = F1i (ai, b, с,); ci+l = CARRY (F2i (ai ,bi ,c,)); i = (0, n -1);
со = const,
и выражение
х= LCELL ( а & b) t LCELL ( с & d) ;
( Замечание )
В ряде работ, в том числе [3] и материалах фирмы Altera, автомат Мили с
асинхронными выходами назван просто "автоматом Мили", каноническая вер-
сия автомата Мили не рассматривается, да и автомат Мура определен иначе,
чем принято здесь. Авторы пользуются классификацией автоматов, введенной
в работах [15, 24], и не вправе обсуждать терминологию в пределах данной
книги, но обращают внимание читателя на возможные разночтения.
SUDDESIGN my_meal
( clock, r e s e t , x i n : INPUT;
y [ l . . 0 ] : OUTPUT)
492 Проектирование систем на микросхемах программируемой логики
VARIABLE
meal: MACHINE WITH STATES
(sO,sl,s2);
y[l..0]: dff; — * * *
BEGIN
meal.reset=!reset;
meal.clk=clock;
y[].clrn= !reset;
y[].clk=clock;
TABLE
meal, xin => meal,
sO, 0 => sO, B"00"
sO, 1 => si, B"01"
si, 0 => sO, B"01"
si, 1 => s2, B"10"
s2, 0 => s2, B"01"
s2, 1 => si, B"10"
END TABLE;
END;
1/01
0/00
1/10
0/01
SUBDESIGN my_moor3
( clock, r e s e t , v:INPUT;
у: OUTPUT)
VARIABLE
moor: machine with
states(SO,S1,S2);
BEGIN
moor.reset=reset;
moor.clk=clock;
CASE moor IS
WHEN s0=> IF v = g n d THEN moor= s0;
ELSE moor= s i ;
END I F ;
WHEN sl=> IF v = g n d THEN moor= s1;
ELSE moor= s 2 ;
END I F ;
WHEN s2=> IF v==gnd THEN moor= sO;
ELSE moor= s1;
END IF;
END CASE;
IF moor=sl THEN y=GND;
ELSE y=VCC;
END IF;
END;
SUBDESIGN my_moor3a
( clock, reset, v:INPUT;
z: OUTPUT)
VARIABLE
moor: machine of bits (z)
with states(sO= B"l",
Sl= B"0",
S2— В Т };
BEGIN
moor.reset=reset;
moor.clk=clock;
TABLE
moor, v => moor;
sO, 0 => sO;
sO, 1 => s1;
s1, 0 => s1;
s1, 1 => s2;
s2, 0 => sO;
s2, 1 => s1;
END TABLE;
END;
INCLUDE "4count";
INCLUDE "16dmux";
—FUNCTION 4count (clk, clrn, setn, Idn, cin, dnup, d, c, b, a)
—RETURNS (qd, qc, qb, qa, cout);
500 Проектирование систем на микросхемах программируемой логики
INCLUDE "mult_contr,inc";
INCLUDE "partjnult.inc";
SUBDESIGN mult16_16
( clk,reset,start: INPUT;
in a[15..0],in b[15..0]: INPUT; — входные данные
502 Проектирование систем на микросхемах программируемой логики
out[31..0]: OUTPUT; — произведение
ready: OUTPUT — готовность результата
)
VARIABLE result[31..0]:dffe;
ready: dff;
busy: NODE;
controle:MACHINE; — декларация "внешнего" автомата
BEGIN
(busy,controle)=mult_contr (clk, reset, start); — вхождение автомата
result[].d=result[].q+part_mult (in_b[],in_a[],controle);—накопление
result[].ena=busy; — работа/ожидание
result[].clk=!clk;
out[]=result[];
ready.clk=busy; — триггер готовности данных
ready. d= VCC;
ready.clrn=start;
END;
INCLUDE "lpm_imlt.inc";
CONSTANT Z_code= b"00000000";
SUBDESIGN part_mult
(inl[15..0],in2[15..0]:INPUT;
controle:MACHINE INPUT;
p_m[31..0] : OUTPUT) — частичное произведение
VARIABLE a[7..0],b[7..0],c[15..0]:NODE;
BEGIN
c[]=lpm_mult (.dataa[]=a[],.datab[]=b[])
WITH (LPM_WIDTHA=8, LPM_WIDTHB=8, LPM_WIDTHP=16,LPM_WIDTHS=16);
CASE controle IS
WHEN stepl => a[]=inl[7..0];b[]=in2[7..0]; — умножение
— младших байтов
p_m[]=(z_code,z_code,c[]); — размещение в младших разрядах
— результата
WHEN step2 => a[]=inl[15..8];b[]=in2[7..0]; — перекрестное
— умножение
p_rti[] = (z_code,c[] ,z_code); — размещение в средних разрядах
— результата
WHEN step3 => a[]=inl[7..0];b[]=in2[15..8]; — перекрестное
— умножение
p_m[]=(z_code,с[],z_code);
WHEN step4 => a []= i n l [15 ..8 ];b []= i n 2[ 1 5. . 8 ] ; — умножение
— старших байтов
Глава 3. Языки описания дискретных* устройств 503
p_m[]=(c[],z_code,z_code); — размещение в старших разрядах
— результата
END CASE;
END;
SUBDESIGN mult_contr
(clk,reset,start: INPUT;
busy: OUTPUT;
controle: MACHINE OUTPUT;
)
VARIABLE Int_state:MACHINE WITH STATES
(idle,stepll,step2,step3,step4);
BEGIN
int_state.clk=clk;
int_state.reset=reset;
controle=int_state;
TABLE
int_state, start=> int_state, busy;
idle , 0 => idle, 0;
idle , 1 => STEP1, 0;
stepl, x => step2, 1;
step2, x => step3, 1;
step3, x => step4, 1;
step4, x => idle, 1;
END TABLE;
END;
PARAMETERS (type="registered",
direction="ADD",
Width=8);
ASSERT ( width>0)
REPORT "value of width must be greater then %" width
SEVERITY error;
ASSERT ((type="registered") # (type=="unregistered"))
REPORT "invalid design type declaration"
SEVERITY ERROR;
ASSERT( (Direction=="ADD")#(Direction=="SUBB")#(Direction=="ADD_SUBB"))
REPORT "direction must be ADD,SUDD or ADD_SUBB"
SEVERITY ERROR;
506 Проектирование систем на микросхемах программируемой логики
SUBDESIGN add_s
( cin,clock, clear, control, a[width -l..0],b[width -l..0] :INPUT;
result [width -1..0],cout: OUTPUT)
VARIABLE
argl[width..0], arg2[width..0], int_res[width..0],arg3[width..0]:NODE;
IF (type =="registered") GENERATE result[width -1..0],cout : dff;
END GENERATE;
BEGIN
ASSERT type="registered" !$ used (clock)
REPORT "for registered type use clock input"
SEVERITY WARNING;
Assert direction="ADD_SUBB" !$ used (control)
report "for registered type use clock input"
SEVERITY ERROR;
IF (type ="registered") GENERATE result[].clk=clock; cout.clk=clock;
result[].clrn=clear; cout.clrn=clear;
(cout.d,result[].d)=int_res[];
ELSE GENERATE (cout,result[])=int_res[];
END GENERATE;
IF cin==vcc THEN arg3[]=l; ELSE arg3[]= -!;
END IF;
argl[]=(a[width -1],a[]); — расширение знакового разряда
arg2[]=(b[width -1],b[]);
IF (direction="ADD") GENERATE int_res [ ] =argl [ ]+arg2 [ ]+arg3 [ ] ;
END GENERATE;
IF (direction="SUBB") GENERATE int_res [ ] =argl [ ] -arg2 [ ] -arg3 [ ] ;
ELSE GENERATE
IF (control=vcc) THEN int_res [ ] =argl [ ]+arg2 [ ]+arg3 [ ] ;
ELSE int_res[]=argl[] -arg2[] -arg3[];
END IF;
END GENERATE;
END;
( Замечание )
В приборно -ориентированных языках конструкции событийного управления яв-
но не вводятся, но, например в AHDL, по умолчанию все операторы иницииру-
ются по событийному принципу.
ENTITY unrealis IS
PORT( clock:IN bit;
a,b: IN integer RANGE 0 TO 15;
compare_out : OUT bit_vector (1 DOWNTO 0)
);
END urealis;
ARCHITECTURE behave OF unrealis IS
BEGIN
PROCESS (clock)
VARIABLE more, less:bit;
BEGIN
Глава 3. Языки описания дискретных устройств 509
IF (clock='0')THEN
IF a>=b THEN more:='l'; less:='0';
ELSE more: ='0'; less:='1';
END IF;
ELSE compare_out<=more&less;
END IF;
END PROCESS;
END behave;
4.1. Проектирование
операционных устройств
4.1.1. Операционные устройства
с микропрограммным управлением
Под операционным устройством понимают вычислительный узел, способ-
ный многократно выполнять любое преобразование из набора, предусмот-
ренного для этого узла, каждый раз, когда на него поступает сигнал, ини-
циирующий преобразование (команда). Часто реализация команды требует
последовательного выполнения нескольких шагов. Это может быть связано
с тем, что на некоторых шагах используются результаты, полученные на
предыдущих шагах, или с тем, что данные поступают, а результаты должны
выдаваться в определенной последовательности, или с наличием ограниче-
ний на затраты оборудования.
При высоких требованиях к производительности элементарные действия
стараются распределять между несколькими параллельно работающими бло-
ками, причем для алгоритмов, предусматривающих использование результа-
тов некоторого шага на последующих шагах, применяют конвейерную реа-
лизацию (пример будет представлен далее). Однако при умеренных требова-
ниях по производительности с целью уменьшения объема оборудования
однотипные операции выполняют последовательно в одном и том же блоке,
даже если операции функционально независимы (функционально незави-
симыми называются операции, которые не используют результатов друг
друга и, в принципе, могут исполняться параллельно).
Часто становится оправданной частичная перестройка функций операцион-
ных блоков в процессе исполнения команды. Элементарное действие в этом
514 Проектирование систем на микросхемах программируемой логики
НЕТ
СТ:=0; RgR:=0;
Rg1:=D1;Rg2:=D2;c:=0
НЕТ
оператор выбора САSЕ, при этом в качестве ключа выбора варианта ис-
пользована переменная, представляющая состояние автомата в текущий мо-
мент времени. Внутри каждого варианта определяется состояние перехода и
значения выходных сигналов в соответствии с состоянием входов управ-
ляющего автомата. Следует обратить внимание на необходимость установ-
ки автомата в исходное состояние перед началом работы: выражение
I F r e s e t = ' 1 ' THEN state<=s0, -. Программа предполагает, что использована
синхронизация управляющего автомата спадом тактирующего сигнала: вы-
ражение I F clock='0' AND NOT c l o c k ' s t a b l e THEN. Такая синхронизация
для используемых операционных узлов обеспечит стабильность входных
управляющих сигналов в моменты тактирования.
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE_IEEE.std_logic_unsigned.ALL;
ENTITY ex_mult IS — Entity проекта
PORT( reset,clock,start:IN std_logic;
IN1,IN2:IN std_logic_vector (7 DOWNTO 0 ) ;
last_state:INOUT std_logic;
output:OUT std_logic_vector (15 DOWNTO 0)
);
END ex_mult;
rg2:double_shift_register
GENERIC MAP( 8, "right")
PORT MAP(clock,register_control,in2, q_rg2) ;
counter: count
GENERIC map(number_of_states=>5,number_of_bits=>3)
PORT map( clk=>clock, reset=>reset,carry_in=>one,
oper=> count_control,
dat_in=>zero(2 DOWNTO 0),
dat_out=>count_OUT,
carry_put=>last_state);
rg3: latch
GENERIC MAP( number_of_bits=>18)
PORT MAP(clock=>clock, input=>out_logical_unit, output=> product);
BEGIN
condition:=q_rg2(l) & q_rg2(0) & с;
IF reset='l' THEN state<=sO;
ELSIF clock='0' and not clock'stable THEN
CASE state IS
WHEN sO=> IF start='l' THEN register_control<="ll";
state<=sl;
c:='0'; count_control<="ll";
comb_logic_control<="000";
ELSE state<=sO; register_control<="00";
с:='0'; count_control<="00";
END IF;
WHEN sl=> IF last_state='l' THEN
state<=sO;
IF c='l' THEN comb_logic_control<="101";
ELSE comb_logic_control<="100";
END IF; —carry
ELSE
CASE condition IS
WHEN "010"=> comb_logic_control<= "101";
WHEN "001"=> comb_logic_control<= "101";
WHEN "100" => comb_logic_control<= "111";
WHEN "011"=> comb_logic_control<= "111";
WHEN "110" => comb_logic_control<= "110";
WHEN "101"=>comb_logic_control<= "110";
WHEN others=>comb_logic_control<="100";
END CASE;
c:=q_rg2(l) and (q_rg2(0) or c) ;
END I F ; — count_overflow
count_control<="01";
regISter_control<="10";
END CASE; — state
END IF; reset=l or clock=0
END PROCESS; - - END controle_unit
END mixed;
result_p result_m
Рис. 4.3. Структура конвейерного сумматора чисел в формате с плавающей запятой
Глава 4. Примеры проектирования устройств с применением ПЛИС 527
LISRARY IEEE;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic__unsigned.ALL;
ENTITY pipe_add IS
PORT (clk : IN std_logic;
add_subb : IN std_logic; — 0 — сложение
mx,my : IN std_logic_yector(23 DOWNTO 0 ) ;
px,py : IN std_logic_vector(7 DOWNTO 0)
result_m : OUT std_logic_vector(23 DOWNTO 0 ) ;
result_p:OUT std_logic_vector(7 DOWNTO 0);
);
END pipe_add;
BEGIN
PROCESS(clk)— приведение знаков; выделение большего
VARIABLE mod_mx,mod_my:std_logic_vector(23 DOWNTO 0 ) ;
BEGIN
IF mx(23)='0'THEN mod_mx:=mx;
ELSE mod_mx:= mx(23)& (not mx(22 DOWNTO 0) +1) ;
END I F ;
IF (my(23) x o r ADD_subb) = ' 0 ' THEN mod_my:=my;
ELSE mod_my:= my(23)& (not ray(22 DOWNTO 0) +1);
END IF;
IF px>= py THEN maxp<=px; difj><=px -py;
m11<=mod_mx; ml2<=mod_my;
ELSE maxp<=py; dif_p<=py -px;
ml2<=mod_mx; mll<=4nod_my;
END IF;
END PROCESS;
COMPONENT lpm_ram_dq
GENERIC (LPM_WIDTH: POSITIVE;
LPMJTYPE: STRING := "L_RAM_DQ";
LPM_WIDTHAD: POSITIVE;
LPM_NUMWORDS: STRING := Positive;
LPM_FILE: STRING := "UNUSED";
LPM_INDATA: STRING := "REGISTERED";
LPM_ADDRESS_CONTROL: STRING := "REGISTERED";
LPM_OUTDATA: STRING := "REGISTERED";
LPM HINT: STRING := "UNUSED");
Глава 4. Примеры проектирования устройств с применением ПЛИС 531
( Замечание )
Декларация прототипа в данном случае не требуется, т. к. содержится в пакете
lpm_components, по определению скомпилированному в системную библио-
теку LPM и доступную всем проектам, выполняемым в среде MAX+PLUS II.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
LIBRARY 1pm;
USE 1pm.lpm_components.ALL;
ENTITY biockjnema IS
PORT(data: IN std_logic_vector (7 DOWNTO 0);
in_adr,block_length : IN integer RANGE 0 TO 1023;
wr, clock,reset,start: IN std_logic;
busy:out std_logic;
q: OUT std_logic_vector (7 DOWNTO 0));
END block mema;
534 Проектирование систем на микросхемах программируемой логики
ARCHITECTURE example OF block_mema IS
SIGNAL address:integer RANGE 0 TO 1023;
SIGNAL paddress: std_logic_vector (9 DOWNTO 0 ) ;
TYPE state IS (idle, working);
SIGNAL inclock,we: std_logic;
SIGNAL s:state;
BEGIN
paddress<=conv_std_logic_vector(address,10);
inclock<= clock WHEN s=working ELSE
'0';
busy<= '1' WHEN s=working ELSE
'0';
PROCESS (clock,reset)
VARIABLE fin_address:integer;
BEGIN
IF reset='1' THEN s<=idle;
ELSIF clock='l' AND clock'event THEN
CASE s IS
WHEN idle=>
we<=wr;
IF start='l' THEN s<=working;
address<=in_adr;
fin_address:=address+ block_length;
ELSE s<=idle;
END IF;
WHEN working => address<=address+l;
IF address=fin_address THEN s<=idle;
END IF;
END CASE;
End IF;
End PROCESS;
ram_inst: lpm_ram_dq
GENERIC MAP (lpm_widthad => 10,lpm_outdata=>"unregistered",
lpm_width => 8)
PORT MAP (data => data, address => paddress, we => we,
inclock => inclock, q => q ) ;
END example;
COMPONENT csdpram
GENERIC (LPM_WIDTH: POSITIVE;
LPM_WIDTHAD: POSITIVE;
LPM_NUMWORDS: STRING := "UNUSED";
FILE: STRING := "UNUSED");
PORT (dataa, datab: IN STD_LOGIC_VECTOR(LPM_WIDTH -1 DOWNTO 0 ) ;
addressa, addressb: IN STD_LOGIC_VECTOR(LPM_WIDTHAD -1 DOWNTO 0);
clock, clockx2, wea, web: IN STD_LOGIC;
qa, qb: OUT STD_LOGIC_VECTOR(LPM_WIDTH -1 DOWNTO 0 ) ;
busy: OUT STD_LOGIC);
END COMPONENT;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
use ieee.std_logic_arith.all;
Глава 4. Примеры проектирования устройств с примененном ПЛИС 539
entity fifo IS
generic (length,width:integer:=8) ;
port(start,wr,rd,elk:in STD_LOGIC;
FULL, EMPTY:out STD_LOGIC;
datin:in std_logic_vector(width -1 downto 0 ) ;
datout:out std_logic_yector(width -1 downto 0));
END fifo;
COMPONENT csfifo
GENERIC (LPM_WIDTH: POSITIVE;
LPM_NUMWORDS: STRING := "UNUSED");
PORT (data: IN STD_LOGIC_VECTOR(LPM_WIDTH -1 DOWNTO 0 ) ;
wreq, rreq, clock, clockx2, clr: IN STD_LOGIC;
empty, full: OUT STD_LOGIC;
q: OUT STD_LOGIC_VECTOR(LPM_WIDTH -1 DOWNTO 0)
);
END COMPONENT;
Если в конце цикла работы содержимое счетчиков CT1 и ст2 оказалось рав-
ным, то, в зависимости от типа цикла, должны выдаваться дополнительные
сигналы состояния. Если такое событие произошло в цикле, в котором было
только чтение, это является признаком очистки буфера (empty), а если в
цикле, в котором была только запись, это является признаком полного за-
полнения буфера (full). В цикле чтения/записи такая ситуация возникнуть
не может.
Для того чтобы записать новую информацию в память без применения мас-
кирования, достаточно в течение двух периодов синхросигнала inclock под-
держивать активный (единичный) уровень на входах разрешения тактового
сигнала inclocken и разрешения записи wr_en, а также сохранять неизмен-
ными код адреса wraddress и данных pattern. Если используется режим
маскирования битов, то одновременно активизируется вход wrxused, а на
вход wrx подается код маски, в котором биты, установленные в единицу,
отмечают разряды, не учитываемые при сравнении. Запись данных с маски-
рованием должна продолжаться не менее трех периодов синхросигнала. Ес-
ли подан активный сигнал на вход wrdelete, то содержимое ячейки, адрес
которой присутствует на входе wraddress, стирается.
Реализация процесса чтения зависит от режима, задаваемого параметром
конфигурации MATCH_MODE. В простейшем режиме SINGLE -MATCH MODE выяв-
ляются только однократные совпадения. Если окажется, что несколько об-
разов удовлетворяют признаку, правильная работа не гарантируется. При-
знак поиска подается на вход p a t t e r n и фиксируется по сигналу mciock.
Если образ, соответствующий признаку, имеется в памяти, то по сигналу
outclock при единичном уровне на входе outclocken на выход выдается
адрес ячейки, в которой обнаружено совпадение. При этом на выходе mbits
присутствует дешифрированный адрес, т. е. код, содержащий единицу в
разряде, номер которого соответствует адресу совпадения. Дополнительно
при обнаружении совпадения в единицу устанавливается выход mf ound.
В режиме MULTILPLE -MATCH допускается совпадение нескольких образов с
признаком. Чтение в этом режиме требует минимум двух тактов сигнала.
Доступ инициализируется подачей признака на вход p a t t e r n и единичного
сигнала на вход mstart. К концу второго такта на выход maddress выдается
наименьший адрес из числа адресов ячеек, в которых обнаружено совпаде-
ние, а на выход mbits — код, содержащий единицы во всех разрядах, соот-
ветствующих адресам ячеек, в которых обнаружено совпадение. Кроме того,
при обнаружении совпадений их общее число выдается на выход mcount, a
выход mf ound устанавливается в единицу. Адреса следующих ячеек, в кото-
рых обнаружены совпадения, могут быть получены последовательно после
очередных тактовых сигналов.
Режим FAST MULTIPLE -MATCH аналогичен предыдущему, но отличается тем,
что для получения информации о первом совпадении требуется только один
такт работы. Платой за такое ускорение является увеличение аппаратурных
затрат почти вдвое.
Затраты на реализацию САМ емкостью 32 слова по 32 разряда для режима
SINGLE_MATCH в микросхемах семейства APEX 20KE составляют один блок
ESB и 35 логических макроячеек.
Использование САМ позволяет существенно повысить производительность
систем, в которых реализуются поисковые алгоритмы.
546 _ Проектирование систем на микросхемах программируемой логики
(4.1)
что эквивалентно:
(4.2)
Выражение (4.2) является основой для вычисления корреляционных и спек-
тральных функций, для многополосной фильтрации. Учет взаимной обу-
словленности коэффициентов матрицы А позволяет уменьшать число опе-
раций типа сложение/умножение и является основой для построения быст-
рых алгоритмов спектральных преобразований.
Основные пути и особенности выполнения операции дискретной свертки
проиллюстрируем на примере реализации нерекурсивных цифровых фильт-
ров, иначе называемых фильтрами с конечной импульсной характеристикой
(КИХ -фильтры). При вычислении очередного отсчета результата КИХ -
фильтра в качестве компонентов одного из векторов свертки используются
отсчеты входного сигнала в предыдущие моменты времени, а второй вектор
является упорядоченной совокупностью значений дискретной импульсной
переходной характеристики, т. е.:
л -1
(4.3)
/=о
Структурной моделью КИХ -фильтра является цепочка элементов, каждый
из которых задерживает принимаемое значение на время одного периода
дискретизации, а выход каждого соединен с входом следующего и схемой
умножения на постоянный коэффициент. Выходы умножителей суммиру-
ются для получения очередного отсчета выходного сигнала.
В большинстве случаев используют КИХ -фильтры с линейной фазово -
частотной характеристикой, потому что, как известно, такие фильтры со-
храняют форму преобразуемого сигнала в полосе пропускания. Одной из
особенностей фильтров с линейной фазово -частотной характеристикой
является симметрия вектора коэффициентов {hi} относительно его сере-
дины, т. е.
h n / 2 + i = hn/2-(i+i), i = 0, л/2, при четном n;
h(n - 1 ) / 2 + i = h(n-i)/2 -i, i = 1, (n -1)/2 при нечетном n.
548 Проектирование систем на микросхемах программируемой логики
ENTITY fir IS
GENERIC (power: integer: =8; — порядок фильтра, предполагается четный;
h : data_array) ;
PORT ( clock, new_sample : IN bit;
input: IN integer RANGE -xmax TO xmax;
output:OUT integer RANGE -4*xmax*xmax TO 4*xmax*xmax) ;
ARCHITECTURE seqiential_behave OF fir IS
SIGNAL pipe : data_array (power -1 DOWNTO 0) ;
BEGIN Pipe_line_shifting: PROCESS (clock)
VARIABLE j : INTEGER;
BEGIN IF (clock='l' and clock' event and new_sample=' 1' ) THEN
FOR j IN power -1 DLOWNTO 1 LOOP
Pipe(j)<=pipe(j -l) ;
END LOOP;
pipe ( 0 ) <= input ;
end if;
END PROCESS;
multiply_and_accumulate : PROCESS (clock)
VARIABLE i: integer;
VARIABLE result: integer RANGE -2*xmax TO 2*xmax) ;
Begin
IF clock='l' and clock' event then
If new_sample='0' THEN
i:=0; result:=0;
ELSIF i<power/2 THEN result := (pipe (I) +pipe (power -i) ) *h(i) ;
z2<=x(2)+x(5);
z3<=x(3)+x(4);
vl<= mult0+multl;
v2<= mult2+mult3;
out<=vl+v2 ;
END PROCESS;
Замечание
Наряду с фильтрами с конечной импульсной характеристикой известны рекур-
сивные фильтры, иначе называемые фильтрами с бесконечной импульсной ха-
рактеристикой (БИХ -фильтры). Их особенностью является то, что результат
определяется как свертка не только входного сигнала, но и ранее полученных
отсчетов выходного сигнала:
(4.4)
(4.5)
*=*/•/=// '
где x(i,j) и z(i,j) — * -е элементы у' -й строки входного и выходного изобра-
жений; Wk,i,ij ~ весовые коэффициенты, задающие вид преобразования; kk,
ki, li, Ik — границы диапазона элементов, учитываемых при формирования
отсчетов выходного изображения.
В практических приложениях наиболее часто учитывают лишь ближайшие
соседние элементы (ki = li = — 1, kk = Ik = 1) и предполагают пространст-
венную инвариантность преобразования (wk,l,i,j = wk,l). Иными словами, вы-
полняется точечное (т. е. поэлементное) умножение матрицы, составленной
из смежных отсчетов входного сигнала, на матрицу коэффициентов преоб-
разования
A=X*W= (4.6)
Замечание
В рамках данной книги мы ограничимся этим случаем, хотя при дополнитель-
ных затратах ресурсов элементов программируемой логики возможна реализа-
ция фильтров, учитывающих большие зоны взаимного влияния отсчетов.
4.4. Пример
автоматизированного проектирования
аппаратно -программной системы
Данный раздел посвящен рассмотрению полной проектной процедуры для
ПЛИС типа SOPC. Современные методы и средства проектирования рас-
смотрим на примере разработки микропроцессорной системы, являющейся
Глава 4. Примеры проектирования устройств с применением ПЛИС 56?
AT 89C51
data
Ain
PortD
ПЛИС (ЕРХ10К50)
В/С
ADUC812 плис
PortD
Triscend E5
PortD
Выбор САПР
Важное значение для быстрейшего и успешного завершения проекта имеет
принятие на этом этапе обоснованного решения об привлекаемых средствах
проектирования. На последних этапах проектирования (этапах монтирова-
ния проекта в БИС и подготовки конфигурационного файла) практически
всегда приходится обращаться к базовой САПР фирмы -производителя кри-
сталла SOPC. Для выбранного типа БИС SOPC семейства Е5 фирмы Triscend
необходимо ориентироваться на САПР под названием FastChip. Допустимые
для проектирования в САПР FastChip направления проектного потока при-
ведены на рис. 4.17.
Существование альтернативных вариантов выполнения проектного потока
связано с возможностью или необходимостью привлечения на определен-
ных ветвях проектирования САПР сторонних фирм. Поскольку в состав
570 Проектирование систем на микросхемах программируемой логики
ПЛИС Triscend E5
Signals Status
SIGNAL SCOPE DEFAULT RESET STATUS
Busy OUT '0' Comb
nConvSt OUT '1' Comb
Load OUT '0' Comb
OE OUT '0' Comb
Req_DMA OUT '0' Comb
nRD OUT '0' Comb
Res Count OUT '0' Comb
Рис. 4.20. Граф -схема переходов автомата управления Avt_ADC
Глава 4. Примеры проектирования устройств с применением ПЛИС 579
— hds header_start
— hds header_end
LIBRARY ieee;
USE ieee.std_logic_l164.all;
USE ieee.std_logic_ariht.all;
ENTITY Avt_ADC IS
PORT(Clk, Start, Rst, nEOC, Ack_DMA, End_Count : in std_logic;
nConvSt, Busy, Load, Req_DMA, OE, nRD, Res_Count: out std_logic);
END Avt ADC;
580 Проектирование систем на микросхемах программируемой логики
— hds interface_end
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_ariht. all;
Разделы проектного модуля типичны для языка VHDL. В самом начале ука-
зывается используемая в проекте библиотека (IEEE). В заголовочном разделе
ENTITY перечислены имена и типы всех сигналов: входных внешних управ-
ляющих — тактового clk, начала работы с блоком start, начального сброса
Rst, окончания блока данных End_count, запроса на запись байта данных
Ack_DMA, флага готовности АЦП nЕОС и выходных управляющих — запуска
АЦП nconvst, квитирования АЦП nRD и ОЕ, управления счетчиком адреса
ResAdr, управления режимом записи буферного регистра Load, запроса ПДП
Req_DMA и управления внешним выходным сигналом Busy.
Следующий раздел — ARCHITECTURE — представляет собой описание архитек-
туры или поведения (в нашем случае поведения) блока, интерфейс которого
582 Проектирование систем на микросхемах программируемой логики
был описан в ENTITY. Как и в обычных языках, в начале раздела дается опи-
сание типов и объявление переменных, используемых при описании дейст-
вий, выполняемых в разделе ARCHITECTURE. В данном автомате определен пе-
речислимый тип данных STATE_VALUES со всем списком допустимых значе-
ний (они, естественно, совпадают с именами, введенными в граф -схеме
переходов). Далее в тексте объявлены два сигнала (signal): current_state и
next_state введенного типа STATE_VALUES. Введение двух сигналов связано
с необходимостью определения текущего и следующего состояний автомата
при переходе от одного состояния к другому.
Главная часть архитектурного тела содержит два оператора процесса. Пер-
вый процесс по имени clocked запускается на исполнение каждый раз, ко-
гда происходит изменение любого входного сигнала clk или Rst. При со-
ставлении программы автомата учитывалась необходимость его установки
в исходное состояние при подаче сигнала сброса: выражение IF (Rst='l')
THEN current_state<=IDLE_ST;. Однако его основное действие — назначение
автомату нового состояния — происходит только по переднему фронту сиг-
нала clk. Использование для тактирования автомата переднего фронта
синхронизирующего сигнала: предложение ELSIF (rising_edge (clk)) THEN
c u r r e n t _ S t a t e < = n e x t _ s t a t e ; END I F ; СЛУЖИТ ДЛЯ СИНХрОНИЗаЦИИ Выбранных
библиотечных операционных узлов и обеспечит стабильность входных
управляющих сигналов в моменты тактирования.
Поведение управляющего автомата в тексте программы задано вторым про-
цессом по имени nextstate. Процесс запускается каждый раз, когда изменя-
ется состояние автомата (current_state) или изменяется какой -либо вход-
ной сигнал. Содержимое этого процесса и определяет поведение управляю-
щего автомата.
В начале процесса выходные сигналы устанавливаются в начальные состоя-
ния, соответствующие значениям по умолчанию.
Последовательность смены состояний конечных автоматов в языке VHDL
удобно описывать посредством оператора выбора CASE, используя в качестве
ключа выбора варианта переменную состояния автомата в текущий момент
времени (current_state). Внутри каждого варианта определяется состояние
перехода и значения выходных сигналов, формируемых в соответствии с
входными условиями. Состояние перехода из текущего состояния в сле-
дующее осуществляется с помощью оператора назначения переменной
next_state нового значения. В тех случаях, когда переход из текущего со-
стояния зависит от внешних сигналов, этот оператор назначения входит
в состав условного оператора, логическое выражение которого совпадает с
последовательностью условий, встречающихся на соответствующих путях
переходов на схеме алгоритма. Аналогично определяются и выходные сиг-
налы, вырабатываемые на переходах и задающие исполняемые в других бло-
ках операции.
Глава 4. Примеры проектирования устройств с применением ПЛИС 583
dataH
dout
Ack DMA
Start
nEOC
nConvSt
Busy
Req_DMA
4.4.3. Настройка
предопределенных ресурсов кристалла
Поскольку мало вероятно, что проектировщик выбрал для реализации сво-
его проекта кристалл SOPC, но собирается опираться в проекте только на
аппаратные ресурсы кристалла, то, как правило, далее разработчик присту -
500 Проектирование систем на микросхемах программируемой логики
Загрузка проекта
Как и большинство других БИС ПЛ, семейство кристаллов Е5 фирмы
Triscend позволяет загружать проект в реальный кристалл различными спо-
собами. Загрузка в оперативную память БИС Е5 может выполняться из
внешней последовательной памяти типа EPROM или из внешней парал-
лельной памяти типа SRAM, Flash Memory или EPROM. Загрузка проекта в
постоянную память обычно является финальным действием в проектной
процедуре. Наличие же возможности загружать проект в ОЗУ реальных
микросхем непосредственно из персонального компьютера (с помощью
JTAG -интерфейса) позволяет построить более эффективную процедуру ве-
рификации проекта как при отладке прототипа, так и при натурных экспе-
риментах на конечной продукции.
в
BIT VECTOR 328 Автомат.
О с памятью 215
О Мура 385, 388
О Мили 385
CPLD — сложные программируемые О режим анимации 583
логические схемы 34 Автоматизация:
О генерации тестовых векторов 287
О тестовых процедур 288
Автоматическая генерация тестовых
последовательностей 283
DLL, PLL — схемы управления Автоматическое создание тестового блока
синхросигналами 76 Test-Bench 583
Алфавит:
О моделирования 310
О моделирования девятиэлементный 311
FPGA — программируемые Аналоговые и смешанные поведенческие
пользователем вентильные матрицы модели 204
35,52 Аппаратные ядра 37, 68, 69, 91
Архитектурное тело 318
О поведенческое 320
I О структурное 320, 404
Архитектурно-структурное описание 221
IP — единицы интеллектуальной
Атрибуты 339
собственности 37
О массивов 341
О сигналов 342
О типов 339
Soft-ядро:
О процессора Microblaze 79
О процессора NIOS 91
SOPC: Базовые матричные кристаллы 28
О система на программируемом Базовые ячейки 29
кристалле 36, 67 Библиотека стандартных фрагментов 172
О с однородной структурой 67 Библиотека функциональных ячеек 29
602 Предметный указатель
д
БИС/СБИС:
О заказные 24, 25, 27, 29-31, 35-37,
41, 61, 75, 76, 80, 100, 101, 103, 104, Декларации:
107-110, 119 О ENTITY 318, 319
О полузаказные 29 О вхождения подпроекта 497
Блок BDM 294 О конфигурации 414
Блок управления 215 О объектов (VHDL) 324
Блоки ввода/вывода: О пакета 318, 319, 415
О CPLD43, 50 О прототипов компонентов 405
О FPGA56 О памяти 427
Блочные: О подпрограммы (Verilog) 455
О БМК29 О регистра 424
О SOPC со специализированными О цепи 424
ядрами 80 О цифрового автомата (AHDL) 490
О SOPC с процессорными ядрами 80 Декомпозиция проекта 143
О редакторы 215 Диапазон 329
Буферные примитивы 485 Динамические системы 151
Директивы компилятора (Verilog) 422
Дискретная событийная модель 307
В Драйвер сигнала 335, 338, 399, 423
Вентильные матрицы 28
Верификация проекта
на схемотехническом уровне 200
Виртуальные компоненты 68, 231, 239, Задача (Verilog) 455
251
Внутрикристальная отладка 212, 293, 593 И
О ПЛИС 284
Внутрисистемное программирование 188 Инструментальный компьютер 181
Внутрисхемная эмуляция 275 Интегрированная среда разработки 149, 591
Внутрисхемное программирование 292 Интегрированный пакет разработки PSoC-
Внутрисхемное реконфигурирование 293 систем 247
Встроенные блоки памяти 31, 61, 65, 71, Интеллектуальная собственность (IP)
75, 81, 131 сторонних фирм 239
Встроенные средства самотестирования Интерфейсный список 395
282 Информационный граф алгоритма 303
Выбор: Интегральные схемы:
О САПР 206 О на стандартных ячейках 26
О типа МП-ядра 180 О полностью заказные 26
О полузаказные 26
О элементной базы проекта 153
Итеративное уточнение моделей 256
Вызов:
О процедуры 396
О функции (Verilog) 456 К
Календарь событий 307
Клонирование проектов 106
Комментарии:
Градация быстродействия 119
О VHDL321
Граничное сканирование 266
О Verilog 423
Группы:
Компиляция:
О постоянные 473
О программ 186
О временные 477
О проекта 224
Предметный указатель 603
н
Конвейерный умножитель 383
Конвертация проектов 28, 100, 159
О из ПЛИС 171 Набор эталонных схем 112
Контроллер JTAG-интерфейса 275
Конфигурирование ПЛИС 592
Кооперационные САПР 209
Кросс-отладка 187
Кэш-логика 87 Обработка аналоговых сигналов 195
Объявление конфигурации 405, 412
Оперативное изменение поведения
Л системы 173
Оператор:
ЛИЗМОП-транзисторы: О блока 362
О двухзатворные 40 ° Verilog 453
О однозатворные 39 О варианта (Verilog) 445
Логические расширители 48 О включения (AHDL) 496
О возврата 397
м о вхождения
° компонентов 405
Макроячейки 42 ° Verilog 458
Маршрут проектирования аналогового О выбора:
блока 202 - VHDL349
- AHDL477
Матрицы:
О генерации 410
О распределения термов 48
О инициализации 434
О соединений 42
О непрерывный 434
Матричные БИС 29
О объявления прототипа (AHDL) 496
Метод:
О ожидания 352
О EPROM-прототипирования 188
О параллельный 318, 334, 359
О верификации 244
О последовательный 334, 343
О внутрисхемной эмуляции 192
О повторения 353
О встроенного монитора 190 ° AHDL 480
О встроенной внутрикристальной ° постоянного 436
отладки 193 О присваивания 344, 360
О стандартных ячеек 145 ° AHDL 474
О удаленной отладки 188 ° Verilog 436, 442
Методология: 0
блокирующий 442
О "сверху вниз" 143 D
неблокирующий 442
О "снизу вверх" 143 ° непрерывного (Verilog) 437
Механизм JTAG-интерфейса 269 ° по выбору 360
Моделирование: ° параллельного 360
D
О аналоговых фрагментов 196 последовательного 335
О многоуровневое 202 ° условного 360
О сквозное 306 О проверки
О событийное 307 - AHDL 505
- ASSERT (VHDL) 358
О управляемое событиями 243
О процедурный 434
О циклобазированное 244, 251 О процесса 334
Модель задержки: О пустой 348, 350
О инерционная 346 - VHDL.358
О транспортная 345 - AHDL 477
Модули интеллектуальной О таблицы (AHDL) 479
собственности (IP) 259 Продолжение рубрики см. на с. 604
604 Предметный указатель
п
Пакет 414
Память конфигурации типа Flash 40 Разрешаемые сигналы 399
Параллельный блок 453 Расширенные версии JTAG-интерфейса 292
Параметры: Реализация проектов на кристаллах SOPC
О в Verilog 430 569
О задержки 440 Реализуемое подмножество языка 507
О настройки 319, 320, 371, 406, 409, Регистры:
410, 417, 419, 497, 505 О AHDL482
Переменные и сигналы 334 О Verilog 423
Переносимость проектных решений 213 Редактор:
Периферийное сканирование 105 О временных диаграмм 226
Плавкие перемычки типа fuse 39 О для создания исходных файлов 186
Платформенно-базированное Режим отладки BDM 193
проектирование 259 Реконструкция проектов 106
Предметный указатель 605
Реконфигурация: Совместное:
О в системе 105 О описание устройства и средств
О на системном уровне 293 его тестирования 291
Реконфигурируемая прототипная о проектирование цифровых
система 261 и аналоговых фрагментов 211
О тестирование межсоединений
и функционирования БИС 274
Co-моделирование аппаратных
и программных частей системы 249
Самотестирование БИС 273 Сопряженная верификация 233
САПР: Сопряженное:
О для смешанного или иерархического О моделирование 233
проектирования 210 о проектирование 232
О независимых фирм 207 ° на базе языка С 248
О сквозного проектирования 210 Специализированные ИС 23
Секция: Спецификация:
О заголовка 468 О подпрограммы 395
О логическая (AHDL) 468 О проекта 234, 241
О предпроектная (AHDL) 468 О функциональная 257
Семейство микросхем: Способ описания проекта:
О АРЕХ20К/КЕ, АРЕХИ 70 О графический 216, 222
О Excalibur фирмы Altera 91 О поведенческий 217
О FLEX фирмы Altera 61 О структурный 217
О FPSLIC фирмы Atmel 82 О текстовый 216, 222
О ispPAC фирмы Lattice Semiconductor Способы конфигурирования ИСПС 104
95 Средства:
О Virtex, Virtex E.Vutex II фирмы Xilinx 74 О автоматизации системного этапа
0 E5 и A7 фирмы Triscend 88 проектирования 150
О CY8C25/26 фирмы Cypress О встроенного самоконтроля (BIST) 287
Semiconductor 98 о коммутации VersaRing 75
Сила драйвера 425, 441 О описания проекта 238
Синтез: О проектирования систем со смешанным
О и верификация логики граничного представлением сигналов 200
сканирования 287 Стандартные:
О тестов для проектирования пригодных О библиотеки классов
к тестированию проектов 289 для проблемно-ориентированного
Система: программирования 182
О автоматизированного проектирования О ИС23
аналоговых и аналого-цифровых Стандарты Verilog-AMS и VHDL-AMS 203
ИСПС 205 Стили программирования 303
О автоматического проектирования, Стратегия проектирования 141
Структура БМК:
САПР 140
О бесканальная 29
О межсоединений FPGA 58
О канальная 29
О моделирования устройств со Структуры с динамическим
смешанным представлением реконфигурированием 69
информации 200 Схемы с переключаемыми конденсаторами 94
О на кристалле 235
О разработки программного
обеспечения 181
Системный уровень автоматизации 241
Событийное управление 449 Таблицы (Verilog) 464
Co-верификационная процедура 257 Табличный ФП типа LUT 54
606 Предметный указатель