|
Здравствуйте! Прошел курс, а где экзамен? Как сертификат получить? Без экзамена? |
Последовательностная логика. Счетчики
module counter ( input wire C, // синхросигнал input wire reset, // сигнал сброса output reg [3:0] Q // 4-разрядный счетчик ); always @(posedge C or posedge reset) begin if (reset) begin Q <= 4'b0000; //сброс счетчика end else begin Q <= Q + 1; //инкремент end end endmoduleЛистинг 5.1.
`timescale 1ns / 1ps
module testbench;
reg C; // регистровая переменная для тактового сигнала
reg reset; // регистровая переменная для сигнала сброса
wire [3:0] Q; // подключение выхода счетчика
// инициализация счетчика
counter uut (
.C(C),
.reset(reset),
.Q(Q)
);
// генерация синхросигнала
initial begin
C = 0;
forever #5 C = ~C; // ререключение каждый 5 нс
end
// тестирование счетчика
initial begin
// сброс счетчика
reset = 1;
#10;
reset = 0;
// ожидание счета
#100;
// вывод текущего значения счетчика
$display("Final Count: %b", Q);
// завершение симуляции
$finish;
end
endmodule
Листинг
5.2.
Групповой перенос в счетчиках обеспечивается введением в схему конъюкторов (элементов "И"). Причем разрядность данных элементов растет от младшего триггера к страшему. Реализуем синхронный счетчик с групповым переносом. В основе счетчика лежат JK-триггеры. В синхронном счетчике все синхроводы триггеров будут объеденены синхросигралом, а счетный режим будет обеспечен групповым переносом. На рисунке 5.5 приведена схема синхронного суммирующего счетчика с групповым переносом. Для управления старшим триггером D4 применяется четырехвходовый элемент "И". На схеме добавлен выход переполнения (переноса) СО. Данный выход объединяет все выходы триггеров и сигнализирует о достижении счетчиков предельного значения. Исходя из того, что для группового переноса применяется комбинационная логика, которая усложняется с каждым следующим разрядом, то для увеличения разрядности счетчиков применяется их каскадное включение. На рисунке 5.6 приведен собранный в модуль верхнего уровня счетчик, а также диаграмма его переключений.
Реверсивный счетчик позволяет осуществлять счет, суммируя или вычитая текущее состояние. Данный функционал обеспечивается вводом дополнительных входов управления. Для управления переключениями используется коммутационная схема, аналогичная применяемой в сдвиговых регистрах.
На примере трехразрядного асинхронного счетчика с модулем счета 8 будет рассмотрена организация реверсивного счета. В зависимости от варианта организации связи выходов младших триггеров (прямой или инверсный) со счётными входами старших триггеров будет зависеть направление счета. Коммутируя данные выходы, организуется управление реверсом. Дополнительно в проектируемый счетчик будет введен общий сброс схемы и вход управления счетом (разрешение/запрет работы счетчика). На рисунке 5.7 приведена функциональная схема счетчика. На схеме входы и выходы имеют следующие обозначения:
- R - reset, асинхронный сброс счетчика, активный уровень лог. &1 &;
- С - clock, синхровход, срабатывание по переднему фронту;
- Cu - count up, вход управления суммирующим счетом, лог. &1 &;
- Cd - count down, вход управления вычитающим счетом лог. &1 &;
- EN - enable вход управления работой счетчика. При лог. &0 & счетчик не работает, так как на объединенных входах JK всех триггеров присутствует лог. &0 &. При лог. &1 & счетчик осуществляет счет.
- Q0-Q2 - выходы данных.
Реализуем условное графическое обозначение, спроектированного счетчика, подключим к нему осциллограф и проанализируем работу. На рисунке 5.8 приведена схема моделирования различных режимом работы счетчика. В таблице 5.3 приведена таблица работы, построенная по данным осциллограммы.



