![]() | |
НПО Системы Безопасности (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
Логические выражения здесь задаются таблицей функционирования и описывают, какие сегменты будут зажигаться при приходе того или иного набора входных данных. Наименования столбцов, соответствующие названиям сегментов, приведены в верхней строке комментариев. Каждая строка таблицы описывает одно декодируемое шестнадцатеричное значение и набор сегментов, включаемых и выключаемых для его отображения. Например, строка для входного значения 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 |