![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структура программы на языке ahdlСодержание книги
Поиск на нашем сайте
Программа на языке AHDL имеет определенную структуру. Раздел программы должны следовать в следующем порядке: Title Statement Include Statement Constant Statement Define Statement Parameters Statement Function Prototype Statement Options Statement Assert Statement
Subdesigh Section Variable Section - Instance Declaration - Node Declaration - Register Declaration - State Machine Declaration - Machine Alias Declaration - If Generate Statement
Logic Section - Defaults Statement - Assert Statement - Boolean Equations - Boolean Control Equations - Case Statement - For Generata Statement - If Then Statement - If Generata Statement - In-Line Logic Function Reference - Truth Table Statement
Из всех перечисленных разделов являются обязательными только Subdesign Section и Logic Section.
Title Statement. Раздел заголовка позволяет дать название модулю. С этим именем будет сформирован файла отчета (Report File). В файле этот раздел может присутствовать только один раз. Правила синтаксиса: • Раздел начинается с ключевого слова TITLE, за которым следует текстовая строка, заключенная в двойные кавычки ("). В конце заголовка (;). • Текстовая строка может содержать до 255 символов включительно. Она не должна содержать символов конца строки или конца страницы. • Для включения в текстовую строку двойных кавычек следует использовать дополнительную пару двойных кавычек: " " " FL ЕХ 8000 " " Programmable Timer".
Include Statement. Этот оператор позволяет включить содержимое указанного файла в текст данной программы. В файле этот оператор может использоваться неограниченное число раз. Правила синтаксиса: • Оператор начинается с ключевого слова INCLUDE, за которым в двойных кавычках (") указывается имя файла включения (Include file).Далее ставится символ (;). • Если явно не задано расширение файла включения, то компилятор ищет файл, имеющий заданное имя и расширение INC. • Имя файла, указанное в операторе включения, не должно содержать пути к файлу.
Constant Statement. Оператор определения константы позволяет присвоить имени константы значение числа, либо результата вычисления арифметического выражения. В файле этот оператор может использоваться неограниченное число раз. Правила синтаксиса: • Оператор начинается с ключевого слова CONSTANТ, за которым следует символическое имя, символ (=), число или арифметическое выражение. Далее ставится точка с запятой (;). • Имя константы должно быть уникальным и не должно содержать пробелов.
• Ссылка на константу допускается только после ее определения. • При определении константы могут использоваться заданные ранее константы. • Циклическое определение констант недопустимо. Арифметическое выражение, определяющее константу, вычисляется компилятором и заменяется числом на этапе анализа синтаксиса. Применение арифметических выражений при определении констант не приводит к использованию логических ресурсов PLD.
Define Statement. Оператор обозначения позволяет присвоить арифметическим выражениям символические имена. В файле этот оператор может использоваться неограниченное число раз. Правила синтаксиса: • Оператор начинается с ключевого слова DEFINE, за которым следует символическое имя арифметического выражения со списком аргументов, заключенным в скобки. За списком аргументов ставится знак (=), далее следует арифметическое выражение и символ (;). • Список аргументов может содержать один или более аргументов. Аргументы в списке отделяются друг от друга запятой. • Символическое имя должно быть уникальным и не должно содержать пробелов. • Ссылка на символическое имя арифметического выражения допустима только после его описания в разделе DEFINE. • Обозначаемое арифметическое выражение может содержать символическое имя обозначенного ранее арифметического выражения.
Parameters Statement. Оператор объявления параметров позволяет объявить параметры, управляющие реализацией параметризированных модулей. В файле этот оператор может использоваться неограниченное число раз. 1. PARAMETERS <RLENAME="myfite.mif", WIDTH, AD_WIDTH, NUMWORDS=2"ACLWIDTH); 2. PARAMETERS (DEVICE_FAMILY); DEVICE_FAMILY предопределенный параметр языка AHDL. Его значение может быть задано в окне Device (меню Assign). Правила синтаксиса: • Оператор начинается с ключевого слова PARAMETERS, за которым следует заключенный в скобки список параметров. После закрывающей скобки ставится символ <;). • Список параметров может содержать один или несколько параметров. • Параметры в списке отделяются друг от друга запятой (,). • Значение параметра по умолчанию (defaults) указывается после символа (=). Задание этого значения необязательно. • Параметр может задаваться через другой параметр.
• Циклическое задание параметров недопустимо. • Заданное пользователем имя параметра должно быть уникальным и не содержать пробелов. • Областью действия параметра является текст, в котором он был объявлен.
Function Prototype Statement. Оператор описания прототипа позволяет описать параметры модулей (примитивов), которые будут использованы в тексте. В файле этот оператор может использоваться неограниченное число раз.
Примеры: 1. FUNCTION Ipm_add sub (Cin, data [LPM_W1DTH-1.. 0], datab [LPM_WlDTH-1.. 0], add_sub) – входы модуля WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE, ONE_INPUT_IS_CONSTANT) – передаваемые параметры RETURNS (resuit[LPM_WIDTH-1.. 0], Gout, overflow); - выходы модуля 2. FUNCTION compare (a[3..0], b[3..0]) (RETURNS (less, equal, greater); Правила синтаксиса: • Оператор начинается с ключевого слова FUNCTION, за которым следует имя модуля, далее заключенный в скобки список входов модуля. При описании прототипа параметризированного модуля далее следует ключевое слово WITH и заключенный в скобки список передаваемых в модуль параметров. Затем указывается ключевое слово RETURNS, далее заключенный в скобки список выходов модуля. Оператор оканчивается символом (;). • Элементы списков отделяются друг от друга запятыми.
Options Statement. Этот оператор позволяет определить в группе элемент с меньшим индексом (В1ТО) как: • LSB - младший разряд. При этом индексы в группах должны указываться в убывающей слева направо последовательности. • MSB - старший разряд. При этом индексы в группах должны указываться в возрастающей слева направо последовательности. • ANY. При этом порядок перечисления индексов в группе произвольный. При нарушении порядка перечисления индексов в группах появляется предупреждение компилятора. Пример: OPTIONS ВITО = MSВ; Правила синтаксиса: • Оператор задания опции начинается с ключевого слова OPTIONS, за которым следует ключевое слово BITO, символ «равно» (=) и одно из ключевых слов LSВ, MSВ, ANY. Далее ставится точка с запятой (;). • Если опция не задана, то по умолчанию предполагается, что BITO=LSB. • Значение опции, заданное в файле верхнего уровня иерархии описаний проекта, распространяется и на файлы с описанием модулей нижних уровней иерархии, если в них явно не задано другое значение опции. • В файле этот оператор может использоваться только один раз.
Assert Statement. Оператор контроля позволяет проверить истинность арифметического выражения, а для случая, когда оно ложно, указать текст сообщения и определить реакцию компилятора. В файле этот оператор может использоваться неограниченное число раз. Пример: ASSERT(WIDTH>0) REPORT "Width (%} must be apositive integer" WIDTH SEVERITY ERROR; Правила синтаксиса: Оператор начинается с ключевого слова ASSERT, за которым следует арифметическое выражение. Если значение выражения False, то контролируемое условие считается невыполненным, и приложение Message Ргосеssor отображает заключенное в двойные кавычки сообщение, следующее за ключевым словом REPORT. Сообщение может содержать символ процент (%), который заменяется значением переменной, указываемой после закрывающих двойных кавычек. Если используется несколько символов процента (%), то переменные перечисляются через запятую в том порядке, в котором должны подставляться их значения. Необязательное ключевое слово SEVERITY позволяет задать реакцию компилятора: ERROR - ошибка, WARNING - предупреждение, INFO - информация. При отсутствии ключевого слова SEVERITY сообщение, но умолчанию, имеет значение ERROR.
Если ключевое слово REPORT и соответствующее сообщение не были указаны в операторе, то при невыполненных условиях контроля процессор сообщений отображает следующую строчку: < ERROR, WARNING, INFO >: Line <номер строки>, File <имя файла> Assertion failed • Оператор контроля оканчивается символом (;). Допустимо применение оператора в разделе описания логики (Logic Section).
Subdesign Section. Раздел описания модуля позволяет задать имя модуля и перечислить его выводы. Имя модуля должно совпадать с именем его текстового файла. Если модуль является модулем верхнего уровня иерархии, то его имя является одновременно и именем проекта, поэтому это имя будут иметь все вспомогательные файлы. В файле этот раздел может присутствовать только один раз. Правила синтаксиса: • Раздел начинается с ключевого слова SUBDESING, за которым следует имя модуля. Максимальная длина имени 32 символа. • После имени модуля следует заключенный в круглые скобки список его выводов. • Типы выводов: INPUT - вход, OUTPUT - выход, BIDIR -двунаправленный вывод, MACHINE INPUD - вход импортируемых состояний автомата, MACHINE OUTPUT - выход экспортируемых состояний автомата. Выводы MACHINE INPUT и MACHINE OUTPUT не могут быть использованы в описании модуля верхнего уровня проекта, т.е. модуля, выводы которого являются выводами микросхемы. • Выводы перечисляются через занятую в одну или несколько строчек. В конце перечня однотипных выводов символ (:), затем ключевое слово, указывающее тип выводов, и далее символ (;). • После ключевого слова INPUT может быть указано значение по умолчанию (GND, VCC) входного сигнала. Это значение подается на вход в случае, если он окажется неподключенным при использовании данного модуля в иерархическом проекте.
Variable Section. Раздел переменных позволяет задать внутренние переменные модуля, используемые в разделе описания логики (Logic Section). В файле этот раздел может присутствовать только один раз. Переменные в языке AHDL представляют собой имена цепей; цепей с тремя состояниями; модулей, используемых в описании. Правила синтаксиса: • Раздел начинается с ключевого слова WARIABLE. Далее следуют: символическое имя переменной, символ (:), тип переменной, символ (;). Имена однотипных переменных могут быть перечислены через запятую. • Допустимые типы переменных: NODE - цепь; TRI_STATE_NODE -цепь с тремя состояниями; модуль более низкого уровня иерархии; примитив; конечный автомат; псевдоним конечного автомата. • Раздел переменных может содержать оператор IF GENERATE, позволяющий, в зависимости от значения оцениваемого в операторе арифметического выражения, управлять заданием переменных.
Logic Section. Раздел описания логики позволяет дать функциональное описание проектируемого модуля. В файле этот раздел должен быть единственным. Правила синтаксиса: • Раздел начинается с ключевого слова BEGIN и заканчивается ключевым словом END, за которым следует точка с запятой (;). • В разделе могут быть использованы: Defaults Statement (Оператор задания исходных значений); Вооlеаn Equations (булевы уравнения); Воо1еап Control Equations (булевы уравнения для описания функционирования); Case Statement (Оператор CASE); If Then Statement (Оператор If Then); If Generate Statement (Оператор IF Generate); In-line Logic Function reference (непосредственное обращение к функциям); For Generate Statement (Оператор For Generate); Truth Table Statement (Таблица истинности); Assert Statement (Оператор контроля).
Если в разделе логики используется оператор задания значений по умолчанию (Defaults Statement), то он должен находиться сразу после ключевого слова BEGIN. Другие операторы могут следовать в произвольном порядке. Числа Язык AHDL поддерживает все комбинации десятичных, двоичных, восьмеричных и шестнадцатеричных чисел. Таблица 3.1.
Пример: SUBDESIGN decode1 ( address[15..0]: INPUT; chip_enable; OUTPUT; ) BEGIN chip_enable = (address [15..0] == H»0370») END; Это дешифратор адреса, формирующий высокий активный уровень сигнала разрешения доступа к магистрали, если адрес на входе равен шестнадцатеричному числу 370 h. В этом примере десятичные числа использованы для указания размерности массива разрядов шины адреса. Шестнадцатеричное число Н«0370» - это значение адреса, при котором формируется активный разрешающий сигнал.
Имена Имена могут присваиваться следующим элементам: • портам, цепям и шинам; • константам; • переменным конечных автоматов, битам состояний и именам состояний; • экземплярам; • параметрам; • оценочным функциям; • именованным операторам; • сегментам памяти; • подпроектам. Синтаксис имен в языке AHDL подчиняется общепринятым правилам многих других языков: • Имя может содержать буквы, цифры и символ (_). Прописные и строчные буквы не различаются. Имя не должно быть зарезервированным словом. • Имя должно начинаться с буквы и не должно заканчиваться символом (_) • Строковые имена заключаются в одиночные кавычки (‘). Имена цепей могут содержать до 32 символов. Если имя цепи не присвоено, она получает имя по умолчанию. В следующих таблицах приведены зарезервированные слова (ключевые слова и служебные имена), а также символы языка AHDL.
Таблица 3.2. Ключевые слова
Таблица 3.3.
Служебные имена
Таблица 3.4.
Символы языка AHDL
Константы
Константы в NODE можно использовать, давая имя числу или текстовой строке. Константы определяются с помощью оператора Constant. В нем константу можно определить с помощью арифметического выражения. Оператора Constant имеет следующие правила синтаксиса и семантики: • Оператор начинается с ключевого слова CONSTANT, за которым следует символическое имя константы, затем символ '=', затем число или арифметическое выражение. Оператор завершается символом ';'. • В арифметическое выражение оператора Constant могут входить имена констант, определенных ранее. • Компилятор из выражения оператора Constant формирует число, логика для этого выражения не создается. • Использование циклических ссылок на другие имена констант недопустимы. • Использовать имя константы можно только после ее определения. Примеры CONSTANT UPPER_LIMIT = 130; CONSTANT FOO = 1; CONSTANT FOO_PLUS_ONE = FOO+1;
Переменные Переменные описываются в необязательном разделе Variable. • Раздел начинается с ключевого слова VARIABLE, за которым следуют символические имена, разделенные запятыми, далее символ двоеточия ';' и тип переменной. « Допустимыми типами переменных являются NODE, TRI_STATE_NODE, имена примитивов, мегафункций, макрофункций, машины состояний. • Раздел завершается символом ';'. Объявление переменной типа NODE удобно для хранения значений промежуточных выражений, ей можно присвоить значение по умолчанию.
Порты Порт - это вход или выход логической функции. Порты могут находиться в двух местах: • Порт, являющийся входом или выходом текущего файла, объявляется в разделе Subdesign. Формат объявления следующий: <имя порта>: <тип порта> [= <значение по умолчанию>] Имеются следующие типы портов: Таблица 3.5.
• Порт, являющийся входом или выходом файла более низкого уровня или примитива, используется в разделе logic.
Цепи Цепь, объявленная с помощью слова Node в разделе Variable может использоваться для хранения значения промежуточного выражения. Такие объявления полезны при повторном использовании этого выражения. При этом выражение можно заменить именем цепи, которое легче читается. Цели бывают типа Node и Tri_State_Node. Эти типы отличаются тем, что Node связывают сигналы функцией Проводное - И (значения по умолчанию в операторах Defaults равно VСС) или Проводное - ИЛИ (значения по умолчанию в операторах Defaults равно GND), а Tri_State_Node привязывают сигналы к одной и той же цепи.
Группы, шины (группы цепей) Такие однотипные элементы, как символические имена, порты, цепи можно объединять в группы. Имя группы можно определить именем с одним диапазоном, двумя диапазонами или именем в последовательном формате. a [1..5] d [1..3] [1..6] (f, g, h) Шина (группа цепей) может иметь до 256 бит, трактуется как коллекция цепей и работает как одно целое. В булевых уравнения шина может приравниваться булеву выражению, другой шине, одной цепи, VCC, GND, 1, 0. Оператор Option можно использовать для указания, будет ли младший бит наиболее значимым (MSB), наименее значимым (LSB) или каким-либо другим. После определения шины скобки [ ] являются коротким определением всего диапазона. Равносильны а[4..1] и а [ ], b[5..4][3..2] равносильно b [ ] [ ]. Выполняются следующие правила приравнивания: • При приравнивании шин одинакового размера приравниваются соответствующие биты. • Если шина приравнивается цепи, VCC или GND, все ее биты получают эти значения. • Если шина приравнивается к 1, только наименее значимый бит получает значение 1, остальные соединяются с GND. Если приравниваются шины не одинакового размера, левая шина должна быть кратна по размеру правой. Значение правой шины мультиплицируется на левую, они выравниваются по правому биту.
Примитивы Примитивы - это библиотечные функциональные блоки, применяющиеся в системе Мах+Рlus II для описания ресурсов VHDL. Примитивы используются в графических (.gdf), текстовых (.tdf) и УНОЬ файлах (.vhd). Символы примитивов для графического редактора доступны в составе библиотеки \maxplus\max2lib\prim. Таблица 3.6. Примитивы триггеров и защёлок:
3. 2.10. Арифметические и логические выражения В языке AHDL определены два типа выражений - арифметические и логические. Арифметические выражения - это средство формирования конструкций языка AHDL, эти выражения вычисляются компилятором на этапе синтаксического анализа, для их реализации ресурсы PLD не используются. Логические выражения определяют собственно функционирование проектируемого устройства, правила их формирования и интерпретации связаны с особенностями элементов цифровых устройств.
Арифметические выражения используются для указания: • выражений в разделе Define Statement; • значений констант в разделе Constante Statement; • границ диапазонов изменения индексов групп; • границ диапазона переменной в операторе FOR GENERATE; • выражения в операторах IF GENERATE и ASSERT.
Результат арифметического выражения должен быть целым положительным числом, если это не так, то он округляется до большего целого. Существуют две функции для явного задания правил округления: CETL - округление до большего целого; FLOOR - округление до меньшего целого. Арифметические и логические операции, операции сравнения (компараторы) имеют следующие приоритеты при вычислении арифметических выражений:
Таблица 3.7.
Приоритеты операций могут изменяться при помощи скобок.
Булевы выражения и уравнения. Булевы выражения - это операнды (числа, цепи, группы), разделенные знаками арифметических и логических операций, компараторами (операторами сравнения), сгруппированные с помощью скобок. Эти выражения используются в булевых уравнениях и операторах CASE и IF_ТНЕN. Булево выражение может иметь один из следующих видов: • операнд Пример: a, b[5..1], 7, VCC • ссылка на логическую функцию Пример: out [15..0]= 16 dmux (q [3..0]); • Префиксный унарный оператор (! или -), примененный к булеву выражению Пример:!с • Два булевых выражения, разделенных бинарным оператором Пример: d1 $ d3 • Булево выражение, заключенное в скобки Пример: (!foo & bar) Результат булева выражения имеет ту же ширину, что и операнды. Булево уравнение устанавливает цепь, шину, порт и т.п. в состояние, определяемое булевым выражением. Символ (=) в булевом уравнении указывает, что результат булева выражения справа является источником для цепи или шины слева. В булевом уравнении слева может находиться идентификатор, имя порта или группы. Перед ним можно использовать оператор (!) инверсии. Справа в уравнении находится булево выражение, вычисляемое по правилам приоритетов (операции одного приоритета выполняются слева направо). Скобки могут изменять порядок вычислений. Порядок следования булевых уравнений в программе не важен, логические состояния устанавливаются одновременно.
SUBDESIGN boole1 ( a0, a1, b: INPUT; out1, out2: OUTPUT; BEGIN out1=a1 &!a0; out2=out1 # b; END;
Здесь выходам out1 и out2 присваиваются значения, определяемые булевыми выражениями, в которых участвуют имена входных и выходных портов. Используются операции И, ИЛИ. Это же устройство можно описать по-другому, используя переменную типа NООЕ.
SUBDESIGN boole2 ( a0, al, b: INPUT; out1, out2: OUTPUT; ) VARIABLE a_equals_2: NODE; BEGIN a_equals_2 = a1 &!a0; out1 = a_equals_2 out2 = a_equate_2 # b; END;
Если имя переменной типа NООЕ используется в нескольких выражениях, то ее описание позволяет экономить ресурсы ПЛИС. В булевых выражениях могут использоваться следующие логические операции: Таблица 3.8.
Унарная операция NOT может применяться к одноразрядной переменной, группе переменных и к числу. При одноразрядной переменной результатом является инвертированное значение. В случае группы инвертируется каждый член группы. В случае числа инвертируется каждый разряд его двоичного представления. Бинарные операции AND, NAND, ОR, NOR, ХОR, NXOR допускают следующие комбинации операндов: • оба операнда одноразрядные (переменные, порты, VСС, GND); • оба операнда являются группами - операция применяется поразрядно, поэтому операнды должны быть одинаковой разрядности; • один оператор одноразрядный, а другой является группой - одноразрядный операнд тиражируется до группы, затем к двум группам поразрядно применяется операция; • оба операнда числа - они представляются в двоичном формате и к группам двоичных разрядов применяется операция; • один операнд число, а другой является одноразрядным, либо группой - число представляется группой двоичных разрядов и операция применяется к двум группам двоичных разрядов. Одноразрядный операнд тиражируется в группу, разрядность которой соответствует разрядности двоичного представления числа. В булевых выражениях могут применяться следующие компараторы (операции сравнения): Таблица 3.9.
Результатом операции сравнения является логический ноль (GND), если условие не выполнено, и логическая единица (VСС), если условие выполнено. Из таблицы видно, что компараторы делятся на логические и арифметические. При логическом сравнении осуществляется поразрядное сравнение операндов, а при арифметическом сравнении группа разрядов интерпретируется как двоичное число без знака. В булевых выражениях могут применяться следующие арифметические операции: Таблица 3.10.
Арифметические операции могут выполняться над группами и числами. Если оба операнда являются группами, то они должны иметь одинаковую разрядность. При операциях над числами они представляются в виде групп двоичных разрядов и автоматически выравниваются.
Приоритет операций в булевых выражения следующий: Таблица 3.11.
Пример сложного булева уравнения: a [ ] = ((с [ ] &-В "001101")+е [6..1]) # (р, q, г, s, t, v); Это выражение вычисляется в следующем порядке: Двоичное число В"001101" дополняется до 2 и становится В"001101". Унарный (-) имеет высший приоритет. 2. Выполняется операция AND над В"001101" и группой с [ ]. Эта операция имеет второй приоритет из-за скобок. 3. Результат складывается с группой е[6..1]. 4. Выполняется операция ОR над результатом и группой (р, q, г, s, t, v). Общий результат присваивается группе а [ ]. Для правильности уравнения разрядность группы слева должна быть кратна разрядности группы справа.
Комбинационная логика Комбинационная логика - это конечные автоматы без памяти. Эта логика описывается в AHDL с помощью булевых выражений и уравнений, таблиц истинности, мега и макрофункций. Реализация табличной логики. Таблицы истинности в языке AHDL задаются с помощью оператора Truth Table. Оператор имеет следующие правила синтаксиса и семантики • Первая строка оператора до символа (;) является заголовком таблицы. Вначале идет ключевое слово TABLE, за которым следует список входов (имена, разделенные запятыми). Далее следует символ => и список выходов. • Последующие строки таблицы содержат списки значений входов и выходов. Списки разделены символом =>. Значения могут быть числами, константами VСС и GND, именами констант, группами чисел или констант. Входные значения могут быть безразличными состояниями (X). Входные и выходные значения соответствуют входам и выходам, указанным в заголовке таблицы. • Описание таблицы завершается ключевыми словами END TABLE и (;). При использовании этого оператора необходимо соблюдать следующие правила. • Имена в заголовке таблицы должны представлять собой либо одиночные цепи, либо группы. • В таблице в качестве входных значений можно употреблять символ безразличного состояния (X) для задания диапазона кодов. • Размеры списков значений входов и выходов должны точно соответствовать размеру списков имен входов и выходов в заголовке. В противном случае в качестве выходных используются значения по умолчанию • При использовании символа (X) необходимо следить, чтобы диапазоны задаваемых значений не перекрывались в пределах одной таблицы.
SUBDESIGN decode3 ( addr [15..0], m/io : INPUT; rom, ram, print, sp [2..1]: OUTPUT; ) BEGIN TABLE m/io, addr [15..0] => rom, ram, print, sp [ ] 1, B "00XXXXXXXXXXXXXX" => 1, 0, 0, B "00"; 1, B "100XXXXXXXXXXXXX" => 0, 1, 0, B "00"; 0, B "0000001010101110" => 0, 0, 1, B "00"; 0, B "0000001011011110" => 0, 0, 0, B "01"; 0, B "0000001101110000" => 0, 0, 0, B "10"; END TABLE; END; А это дешифратор адреса для внешней памяти микропроцессорной системы с шестнадцатиразрядным адресом. Использование безразличных состояний позволяет проще запрограммировать устройство и использовать меньше ресурсов ПЛИС.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-09-26; просмотров: 150; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.149.52 (0.011 с.) |