![]() |
![]() |
|||||||||||||||
Графический редактор MAX+Plus. Рисуем схему счетчика. Часть 1.
Автор: Ну все, надеюсь, что трафика хватило, свет не вырубился, злобный вирус не пожрал все содержимое винчестера и у вас хорошее настроение. Значит - продолжим.
Открываем MAX+PLUS II - для этого надо запустить файлик max2win.exe в папке с программой.
Делаем так: ![]() Соответственно, нам предлагают на выбор создать графический, символьный, текстовый или диаграммный файл. Выбираем первое - графический (Graphic Editor file). Вываливается белоснежное оконце графического редактора. Вот именно в нем мы и будем рисовать. Два раза кликаем внутри этого окна. Появляется окошко "Enter Symbol". ![]()
В верхней строчке пишем "dff". Жмем OK.
DFF - это синхронный D-триггер (D-FlipFlop).Он выглядит примерно так: ![]()
Что такое триггер - надо объяснять? Триггер - это элемент, который может сохранять поданный на него логический уровень после снятия входного сигнала. D-триггер имеет следующие выводы:
D - синхронный вход данных, состояние на котором "захлапывается" по фронту тактового сигнала,
PRN и CLRN - инвертированные, то есть активное состояние на них - лог.0 Вот таблица истинности триггера DFF, выдранная из хелпа по Макс Плюсу: ![]()
H - это "1" Переходим к счетчикам. ![]() Что такое счетчик? Это такой хитрый элемент, у которого один тактовый вход и несколько выходов. На выходах присутствует некая комбинация единиц и нулей - то есть, двоичное число. Это число равно количеству импульсов, поступивших на тактовый вход счетчика C. ![]()
Счетчик состоит из пачки счетных триггеров.
Счетный триггер - это синхронный D-триггер, инверсный выход которого замкнут на вход данных.
Таким образом, по каждому тактовому импульсу, состояние счетного триггера изменяется на противоположное. Допустим, сначала состояние триггера = 0. То есть, на прямом выходе - 0, на инверсном - 1. Значит, на вход данных D поступает 1. При следующем импульсе на тактовом входе, состояние D захлопнется в триггер. На прямом выходе появится 1, на инверсном - 0, и этот ноль поступит на вход D. При следующем такте ноль на D захлопнется в триггер и так далее… Если составить их последовательно, то можно получить счетчик. Чем сейчас и займемся…
Итак, щелкнем еще раз по пустому месту и наберем "not". ![]()
Зачем он нам нужен? Рисуем… ![]() Нарисовали: ![]()
Ну, теперь вводим еще два новых элемента: input и output. ![]() Дважды тыкнувшись мышой в слова PIN_NAME, вводим осмысленные названия для входа и выхода. Названия не могут начинаться с цифры и могут содержать только буквы латиницы и некоторые "разрешенные" символы. Мы обзовем вход CLK, а выход - Q1. ![]() Итак, у нас образовалась схема счетного триггера со входом и выходом. Ее уже можно компилировать и прошивать в чип. Однако даже если вы уже спаяли макет и полны решимости испытать все в действии - не стоит спешить: чип недешевый, а гарантированных циклов перезаписи у него - всего ничего - 100. Так что, давайте ка лучше, сначала проверим это дело на симуляторе.
Но для начала неплохо сохранить файл. ![]() Файл будет называться: counter.gdf.
Теперь делаем так:
Затем нам надо скомпилировать схему. Выбираем: ![]()
Жмем Start. Оно компилится. Если все правильно - компилятор говорит что все круто. Жмем ОК. ![]() Два раза тыкаемся по пустому месту в графе Name или Value. Вываливается окно: ![]() Нажимаем List - в окошке Nodes&Groups from SNF. Вываливается список всех выводов нашей схемы:
CLK (I) Поставим сначала вход, то есть - CLK. Выделяем его, жмем OK - и он оказывается на графике. Точно так же вытащим теперь выход Q1. ![]()
Теперь выделяем вход CLK и нажимаем слева на кнопочку ![]() В нем нас спрашивают о начальном значении (Starting Value) и о том, через сколько линий сетки изменяется состояние сигнала. Сетка на графике обозначается серыми вертикальными пунктирными линиями. Ничего не трогаем и жмем OK. Вот что получилось: ![]() Теперь самое время сохранить файл. Сохраняем под тем же именем, что и графический файл - counter. Иначе ничего не получится. Теперь идем: MAX+plus II > Simulator. ![]() Жмем Start - симулятор быренько симулирует и говорит что все очень хорошо (или все плохо, зависит от расположения звезд). Смотрим в окошко редактора графиков (Waveform Editor). Что получилось: ![]() Этот график наглядно демонстрирует работу счетного триггера: по фронтам входного сигнала, состояние выхода изменяется на противоположное. Как видите, момент изменения выхода отстает от фронта по входу примерно на 2,5 нс. Это - нормально. Это - задержка на распространение сигнала. Дело в том, что симулятор очень умный, и поэтому просчитывает даже такие "мелочи" как задержка.
Ну все! Радуемся. Идем на перекур. <<--Вспомним пройденное----Поехали дальше-->>
|
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |