![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 129130131132133134135 ... 233 Пример 2. Двухразрядный счетчик Данный пример демонстрирует реализацию двухразрядного счетчика на D-триггерах. Временные диаграммы сигналов приведены на рис. 5.30. f f t f f Рис. 5.30. Временные диаграммы работы двухразрядного счетчика Как показано стрелками, срабатывание регистров происходит по положительному фронту импульсов синхронизации. Ниже приведен исходный код на языке CUPL, описывающий проект двухразрядного счетчика: FLOPS.PLD Name Flops; Partno CA0002; Revision 02; Date 07/16/87; Designer G. Woolheiser; Company ATI; Location None; Assembly None; /************************************************************/ /* V /* This example demonstrates the use of D-type flip-flop */ /* to implement a two bit counter using the following */ /* timing diagram. */ /* */ /* clock I I I I I I I I I I V /* */ /* qO / I I I I V /* */ /* ql / I I l */ /* V /* */ /* reset I */ /* */ /************************************************************/ /* Target Devices: PAL16R8, PAL16RP8, GAL16V8 ♦/ /************************************************************/ Pin 1 = clock; Pin 2 = reset; /* Outputs Pin 17 = qO Pin 16 = ql define outputs and output active levels */ /* Logic: two bit counter using expanded exclusive ors */ /• with d-type flip-flop */ qo.d = !reset & (!qO & !ql # !qO & ql); ql.d = !reset & (!qO & ql # qO & !ql); /* ANDed reset defines a synchronous register reset */ В первой части содержится справочная информация и описание функций, реализуемых в текущем проекте, а также совместимые микросхемы ПЛИС. Объявления выводов производятся согласно именам входов и выходов элементов, представленных на временной диаграмме. В секции Logic вводятся выражения, описывающие работу счетчика. Выражение для qO определяет, когда появляется сигнал qO, т. е. оно определяет ситуацию непосредственно до прихода переднего фронта тактового сигнала. Член Ireset, обеспечивающий синхронный сброс, используется в выражениях, описывающих qO и q1, для инициализации схемы. При включении питания регистры могут находиться в неопределенном состоянии, что показано символами "/" на временной диаграмме в исходном файле, поэтому сначала выставляется сигнал сброса. Во всех выражениях член ireset объединяется элементом И с другими переменными, и после завершения процесса включения питания сигнал reset сбрасывается в О, а член Ireset соответственно становится равным 1 и перестает влиять на состояние регистров. Расширение .d в выражениях указывает на D-триггер. Однако, когда выход используется как обратная связь, расширение .d опускается. Например, если qO подается в качестве обратной связи на ql, выражение может быть составлено так: ql.d = qO & Ireset ; НО не так: ql.d = qO.d & Ireset ; И не так: ql.d = qO.dq & reset ; Пример 3. Проект простого конечного автомата Контроллер турникета в метро представляет собой простейший пример конечного автомата. Этот контроллер ожидает сигнала, поступающего при опускании жетона. Затем он переходит из состояния "заперто" в состояние "открыто". На этом этапе контроллер ожидает прохода через турникет и, получив такой сигнал, возвращается к закрытому состоянию. Получим граф с двумя вершинами-состояниями - "открыто" и "заперто" и связями-переходами, срабатывающими от детекторов опускания жетона и прохода. На рис. 5.31 представлена диаграмма такого контроллера, показывающая его состояния и сигналы, инициирующие их изменение. gTATgpiAQRAM SYNTAX •COIN \# open у/ |