НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 106107108109110111112 ... 233


Заголовок

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

Name

Partno

Date

Revision

Designer

Company

Assembly

Location

Format

Device

XXXXX; XXXXX; X/XX/XX; X;

XXXXX; XXXXX; XXXXX; XXXXX; XXXXX; XXXXX;

Титульный блок

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


Секция описания выводов и узлов

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

/** Inputs **/

Pin = ;

/** Outputs **/

Pin = ;

Pin =

Pinnode =

Pinnode =

Глава 5. Проектирование устройств на базе ПЛИС



Вспомогательные переменные

Вспомогательные переменные используются для удобства формирования логических уравнений или других вспомогательных переменных. Написание логических уравнений способом "сверху вниз" делает файл описания логической схемы более легким для прочтения и понимания.

Логические выражения

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

Директивы исходного файла

Большинство директив исходного файла начинается со знака $. Эти команды представляют собой команды для препроцессора. Директивы должны записываться с первой позиции любой строки исходного файла. Набирать команды на клавиатуре можно в любой комбинации заглавных или строчных букв.

Описание символьных констант

Символьные константы определяются командой $define. Эта команда замещает строку символов другим специфическим оператором, числом или символом. Такая подстановка является замещением строки букв, сделанным входным файлом до того, как он будет обработан компилятором. Отменить определение символьной константы можно командой $undef, которая нейтрализует действие директивы $define.

Присоединение других файлов

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

Условная компиляция

Условная компиляция позволяет пользователю компилировать секции исходного кода в зависимости от наличия или отсутствия определяемых символьных констант. В число команд условной компиляции входят: $ifdef, $ifndef, $else, $endif. Если символьная константа предварительно определена, то операторы исходного кода, стоящие за командой $ifdef, обрабатываются компилятором до момента появления команды $else или $endif. Если же константа не была определена, то все операторы, стоящие за командой $ifdef, игнорируются. При ложности проверяемых условий команд $ifdef и $ifndef компилируются операторы, стоящие между директивами $else или $endif, в противном случае они игнорируются. Команда $endif заканчивает область условной



компиляции, начатой командами $ifdef и $ifndef. Условная компиляция может быть вложенной, каждый уровень вложенности должен обрамляться командами $ifdef ($ifndef) и $endif.

SDEFINE Prototype X /* define Prototype*/ SIFDEF Prototype

pin 1 = memreq; /* memory request on*/

/* pin 1 of prototype*/ pin 2 = ioreq; /* I/O request on*/

/* pin 2 of prototype*/

$ELSE

pin 1 = ioreq; /* I/O request on*/

/* pin 1 of PCB*/ pin 2 = memreq; /* memory request on */

/* pin 2 of PCB*/

$ENDIF

Операторы циклов

Для циклического исполнения участков кода языка CUPL существуют команды $repeat и $repend. Эта команда аналогична команде FOR в языке С и команде DO в языке FORTRAN. Индекс команды $repeat определяет количество повторений участка кода, находящегося между директивами $repeat и $repend. Использование этих команд дает возможность очень легко описать счетчики на основе конечных автоматов.

Исходный CUPL код: Результат после обработки препроцессором:

FIELD sel = [in2..0] FIELD sel = [in2..0];

$REPEAT i = [0..7] loutO = sel:h0 & enable;

!out{i} = sel:h{i} & enable; loutl = sel:hl & enable; $REPEND !out2 = sel:h2 & enable;

!out3 = sel:h3 & enable;

!out4 = sel:h4 & enable;

!out5 = sel:h5 & enable;

!out6 = sel:h6 & enable;

!out7 = sel:h7 & enable;

Использование макросов

Макросы представляют собой пользовательские процедуры, вызываемые упоминанием их имени. Макрос сопровождается операторами $macro и $mend. Код, находящийся между ними, в общем случае при компиляции будет игнорироваться. Макрос вызывается помещением имени макроса в теле исходного файла и передачей ему соответствующих параметров. Макросы можно использовать для создания библиотек наиболее часто применяемых или стандартных устройств, например: декодеров, счетчиков и т. д. Чтобы увидеть, как препроцессор обрабатывает определения макросов, можно создать файл с расщирением (.MX).

$MACRO decoder bits MY X MY Y MY enable;

FIELD select = [MY Y{bits-l}..0];

$REPEAT i = [0..{2**(bits-1)}]

!MY X{i} = select:h{i} & MY enable;

$REPEND $MEND

/* Other CUPL statements*/

decoder(3, out, in, enable); /*macro function call*/ Глава 5. Проектирование устройств на базе ПЛИС 333



0 ... 106107108109110111112 ... 233