- •Аннотация
- •1.1. Прототип модуля
- •1.2. Структура иерархического проекта
- •1.3. Иерархическое описание накапливающего сумматора.
- •Variable tr[8..1] : dff;
- •Variable tr[9..1] : dff;
- •Include "rg_a.Inc";
- •Include "add.Inc";
- •Include "rg_out.Inc";
- •Variable
- •2. Проектирование схем двоично-десятичной арифметики.
- •2.1. Двоично-десятичное представление схем.
- •2.2. Двоично-десятичный сумматор
- •Variable
- •2.2. Двоично-десятичный вычитатель
- •Variable
- •2.3. Двоично-десятичные счетчики
- •3.1. Способы задания абстрактных автоматов.
- •3.2. Описание работы автоматов на языке ahdl
- •Init, Working, Waiting, Resuming, Ending.
- •Variable
- •3.3. Проектирование счетчиков на базе абстрактных автоматов
- •Variable
- •4. Проектирование типовых схемотехнических узлов
- •Дешифратора
- •Считается, что одновременно может быть нажата только одна кнопка клавиатуры.
- •Variable
- •4.2. Схемы вычисления функций
- •4.3. Счетчики расхода, пробега
- •Variable
- •Variable
- •Include "t210.Inc";
- •Variable
- •4.4. Узлы обработки сигналов локаторов
- •Include "t210.Inc";
- •Variable
- •4.5. Часы, счетчики времени, календари
- •Variable
- •Variable
- •4.6. Частотомеры
- •Variable
- •4.7. Умножители
- •Input_b_is_constant)
- •5 Проектирование схем с магистральным вводом выводом данных
- •5.1 Правила работы с магистралью, арбитр.
- •Variable
- •5.2 Подготовка временных диаграмм.
- •5.3. Пример сумматора с магистральным вводом-выводом данных.
- •Variable
4.5. Часы, счетчики времени, календари
Часы, счетчики времени, секундомеры, таймеры календари обычно выполняются на базе счетчиков, считающих в заданных пределах. Например, для счетчика минут нужны счетчики считающие от 0 до 5 и от 0 до 9, а для счетчика часов соответственно двоично-десятичный счетчик считающий от 0 до 23. Для управления работой устройств (установки, сброс, пуск и т.д.) используются дополнительные схемные узлы, управляющие работой счетчиков.
Рассмотрим несложную схему часов, описание которой на языке AHDL представлено ниже
SUBDESIGN WATCHMH
( CLK, CLKU, RN, MIN, HOURS :INPUT;
Q[6..0],H[5..0]:OUTPUT;
)
Variable
ME[3..0],RP : DFF;
MD[2..0] : DFF;
HE[5..0]: DFF;
BEGIN
RP.CLK=!CLK;
ME[].CLK=CLK&!MIN&!HOURS # CLKU&MIN;
MD[].CLK=!ME[3].Q;
ME[].CLRN=RN;
MD[].CLRN=RN;
HE[].CLRN=RN;
HE[].CLK=!RP&!HOURS # CLKU&HOURS;
CASE ME[].Q IS
WHEN 9 => ME[].D=0;
WHEN OTHERS => ME[].D=ME[].Q+1;
END CASE;
CASE MD[].Q IS
WHEN 5 => MD[].D=0; RP.D=B"1";
WHEN OTHERS => MD[].D=MD[].Q+1; RP.D=B"0";
END CASE;
CASE HE[].Q IS
WHEN 9 => HE[].D=H"10";
WHEN H"19" => HE[].D=H"20";
WHEN H"23" => HE[].D=0;
WHEN OTHERS => HE[].D=HE[].Q+1;
END CASE;
Q[6..4] = MD[].Q;
Q[3..0] = ME[].Q;
H[] = HE[].Q;
END;
. содержащую регистр минут и регистр часов.
Схема имеет следующие входные и выходные сигналы.
СLK - тактовый вход минут, имеющий частоту 1/60 Гц;
CLKU - тактовый вход установок, имеющий частоту 1 Гц;
MIN - вход установки минут;
HOURS - вход установки часов;
RN - вход сброса;
Q[6..0]- выходы двоично-десятичного счетчика минут;
H[5..0]- выходы двоично-десятичного счетчика часов.
В рабочем режиме на входы MIN и HOURS поданы сигналы «0». При нажатии кнопки MIN, работа часов приостанавливается и начинается меняться показание минут в темпе частоты коррекции CLKU. Аналогичным образом, при нажатии кнопки HOURS происходит установка текущего значения часов.
Информация о текущем значении минут хранится в регистрах ME[3..0] – единицы минут, MD[2..0]- десятки минут. Информация о текущем значении часов хранится в регистре HE[5..0]. HE[3..0] – единицы часов, HE[5..4] – десятки часов.
В рассматриваемом описании часов на базе вышеуказанных регистров организованы двоично-десятичные счётчики. Счётчик на базе регистра ME[3..0]
считает от 0 до 9, счетчик на базе регистра MD[2..0] считает от 0 до 5 а счетчик на базе регистра HE[5..0] обеспечивает двоично-десятичный счёт от 0 до 23.
Для обеспечения правильного счёта во всём диапазоне значений и отработки режимов установки для управляющих тактовых сигналов используются достаточно сложные логические выражения:
ME[].CLK=CLK&!MIN&!HOURS # CLKU&MIN;
MD[].CLK=!ME[3].Q;
HE[].CLK=!RP&!HOURS # CLKU&HOURS;
Логическое выражение для ME[].CLK обеспечивает счёт минут от стандартного генератора CLK в рабочем режиме и от генератора установки CLKU в режиме установки минут (при нажатии кнопки MIN).
Логическое выражение для HE[].CLK обеспечивает счёт часов от входа переноса счётчика минут RP в стандартном режиме работы и от генератора установки CLKU в режиме установки часов (при нажатии кнопки HOURS).
Логическое выражение для MD[].CLK обеспечивает счёт десятков минут от выхода переноса счётчика единиц минут ME[3].Q.
Ниже, на рисунке 4.5.1. приведён фрагмент временной диаграммы работы часов.
Рис 4.5.1. Фрагмент временной диаграммы работы часов.
На временной диаграмме, представленной на рис 4.5.1. показан момент окончания установки минут (сигнал MIN переходит из состояния “1” в состояние “0”), один рабочий такт (момент 750.0 ns) и начало установки часов (сигнал HOURS переходит из состояния “0” в состояние “1”).
Схемы секундомеров проектируются аналогичным образом. Они, обычно, не имеют сигналов установки, но имеют кнопки «старт» и «стоп». При подаче единичного сигнала на вход «старт» регистры времени сбрасываются в «0» и начинается отсчет времени. При подаче единичного сигнала на вход «стоп» отсчет времени прекращается.
Схемы таймеров позволяют отсчитывать заданные интервалы времени. Они работают в реверсивном режиме (считают время в обратном порядке) имеют входы установки заданного времени, вход начала работы. По окончании отсчета времени они подают «1» на исполнительный вывод, определяющий окончание отсчета временного интервала.
Рассмотрим несложную схему таймера минут, описание которой приведено ниже:
SUBDESIGN TIMER
( CLK, CLKU, UST, START, RN :INPUT;
Q[6..0], SQ,S :OUTPUT;
)