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

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

0 ... 132133134135136137138 ... 233


Date 07/16/87;

Designer Т. Kahl;

Company ATI;

Location None;

Assembly None;

/**************************************************************/

/* V

/* a */

/* This is a hexadecimal-to-seven-segment ----- */

/* decoder capable of driving common-anode */

/* LEDs. It incorporates both a ripple- f b */

/* blanking input (to inhibit displaying g */

/* leading zeroes) and a ripple blanking output ----- */

/* to allow for easy cascading of digits */

/* e с */

/. I I V

/* ----- */

/* d */

/* */

/**************************************************************/

/* Allowable Target Device Types: 32 x 8 PROM (82S123 or */

/* equivalent */

**************************************************************/

/** Input group (Note this is only a comment) **/

pin [10..13) = [D0..3); /* data input lines to display */

pin 14 = !rbi; /* ripple blanking input */

/** Output Group ( Note this is only a comment) **/

pin [7..1) = ![a,b,c,d,e,f,g); /* Segment output lines */

pin 9 = !rbo; /* Ripple Blanking output */

/** Declarations and Intermediate Variable Definitions */

field data = [D3..0); /* hexadecimal input field */

field segment=[abcdefg); /* Display segment field */

$define ON "bl /* segment lit when logicallyON" */

$define OFF bO /* segment dark when logically "OFF" */

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

Далее приведено описание входных и выходных выводов в соответствии с диаграммой, приведенной на рисунке.

Секция файла Declaratione and Intermediate Variable Definitions содержит определение переменных, упрощающих описание схемы. Группа входных выводов определена как переменная data, а выходные выводы названы как segment. Значения ON и OFF соответствуют бинарным значения 1 и 0.

/** Logic Equations **/

с d е f g */

& !rbi

segment =

/* 0 */

[ ON,

OFF]

&

data

/* 1 */

[OFF,

OFF,

OFF,

OFF,

OFF]

&

data

/* 2 */

[ ON,

OFF,

OFF,

&

data

/* 3 */

[ ON,

OFF,

OFF,

&

data

/* 4 */

[OFF,

OFF,

OFF,

&

data

/* 5 */

[ ON,

OFF,

OFF,

&

data

/* 6 */

( ON,

OFF,

&

data



/* 7

[ ON,

OFF,

OFF,

OFF,

&

data:

/* 8

[ ON,

OFF]

&

data:

/* 9

[ ON,

OFF,

&

data:

/* А

[ ON,

OFF,

&

data:

/* В

[OFF,

OFF,

&

data:

/* С

[ ON,

OFF,

OFF,

OFF]

&

data:

/* D

[OFF,

OFF,

&

data

/* Е

[ ON,

OFF,

OFF,

&

data

/* F

[ ON,

OFF,

OFF,

OFF,

&

data

гЬо =

= гЫ

& data:0;

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

Каждая строка таблицы описывает одно декодируемое шестнадцатеричное значение и набор сегментов, включаемых и выключаемых для его отображения. Например, строка для входного значения 4 будет выглядеть следующим образом:

[OFF, ON, ON, OFF, OFF, ON, ON] & data:4

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

Пример 6. Четырехразрядный счетчик с возможностью загрузки и сброса

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

Name Counter;

Partno FL1201;

Revision 01;

Date 08/26/91;

Designer RGT;

Company LDI;

Location None;

Assembly None;

Device VIRTUAL;

/*******************************************/

/* 4-bit counter */

/*******************************************/

/** inputs **/

PIN = elk; /* clock signal for registers */ PIN = load;/* load signal */ PIN = IClrFlag;

PIN = [LoadPinO..31; /* pins from which to load data */ /** outputs **/

PIN = [CountPinO..3] ;



/* intermediate variables and fields */ field STATE BITS = [CountO..3); field LOAD BUS = [LoadPinO..3); /** state machine definition **/ SequenceD STATE BITS {

/* build a repeated loop for the states */ $REPEAT i = [0..15] Present h{i}

/* go to state 0 if clear signal is true */

/* if the load signal is false go to the */

/* next state. Note that the next state */

/* is (current state + 1) modulo 16. */

/* This causes the counter to wrap back */

/* to 0 when in the last state */

If !load Next h{(i+1)%16); If iload & ClrFlag NextbO,• $REPEND

/* Add the load capability by using the */

/* APPEND statement. This has the effect of */ /* adding more inputs to the OR gate for */ /* this output. This equation states that if */ /* the load signal is true then the counter */ /* registers are loaded with data from the */ /* load pins. This is why "load" was used in */ /* the equations for the 4F statements in */ /* the state definitions. */ APPEND STATE BITS.d = load & LOAD BUS;

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

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

Циклическая конструкция $REPEAT определена в диапазоне [0...15]. Внутри цикла текущее состояние определяется как Ъ {i}, что дает возможность обрабатывать числа как щестнадцатеричные. В результате этого реализуется конечный автомат с 16 состояниями, соответствующими шестнадцатеричным числам от О до F. Если бы ключевое слово Ъ отсутствовало, то выходные состояния соответствовали бы десятичным значениям от О до 15. Компилятор все равно бы принял эти числа за шестнадцатеричные, и значения А - F остались бы не определенными. Кроме того, шестнадцатеричное число 10 в данной схеме вообще не может быть реализовано, так как для этого потребуется наличие пятого выходного разряда.

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

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



0 ... 132133134135136137138 ... 233