Опубликован: 17.03.2025 | Доступ: свободный | Студентов: 5 / 0 | Длительность: 07:30:00
Лекция 5:

Последовательностная логика. Счетчики

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Таблица 5.3.
Номер импульса Cu Cd EN R Q2 Q1 Q0 Режим работы
1-2 0 0 0 0 0 0 0 Счет запрещен
3-5 0 0 1 0 0 0 0/1 В режиме двоичного счетчика
6 1 0 1 1 0 0 0 Сброс
7 1 0 1 0 0 0 1 Работа в режиме суммирующего счетчика
8 0 1 0
9 0 1 1
10 1 0 0
11 1 0 1
12 1 1 0
13 0 1 1 0 0 0 1 Сброшен в состояние 1
14 0 0 1 Работа в режиме вычитающего счетчика
15 1 1 1
16 1 1 0

Как видно из таблицы отсутствие сигналов управления Cu и Cd запрещает работу старших триггеров Выходы Q1 и Q2 будут в состоянии лог &0 &, но триггер D1 продолжит работать в режиме делителя входной частоты на 2. То же самое будет если на входы Cu и Cd подать лог. &1 &, но в данном случае на выходах Q1 и Q2 будет присутствовать лог. &1 &.

На 13 такте счетчик хранил в себе код 110 - предпоследнее состояние. Сигнал Cd сформировал импульсную помеху - с приходом синхросигнала счетчик перешел сразу же в максимальное состояние, повлекшее за собой последующий сброс счетчика в начальное состояние.

В листинге 5.3 приведен код на языке Verilog HDL, описывающий четырехразрядный реверсивный счетчик. В листинге 5.4 приведен код файла тестирования.

module reverse_counter (
 input wire C, //синхросигнал
 input wire R, //сигнал сброса
 input wire Cu, //сигнал инкремента (если 1, увеличивает, если 0 - уменьшает)
	input wire Cd,
	input wire EN,
 output reg [3:0] Q // 4-разрядный счетчик
);

 always @(posedge C or posedge R) begin
 if (R) begin
 Q <= 4'b0000; // сброс счетчика
 end else if (EN & & Cu & & !Cd) begin
 Q <= Q + 1; //увеличение счетчика на 1
 end else if (EN & & !Cu & & Cd) begin
 Q <= Q - 1; //уменьшение счетчика на 1
 end else begin //во всех остальных случаях
	Q <= Q;
 end
end
endmodule
Листинг 5.3.
`timescale 1ns / 1ps
module testbench;
 reg C; // регистровая переменная для тактового сигнала
 reg R; // регистровая переменная для сигнала сброса
 reg Cu; // регистровая переменная для сигнала инкремента
 reg Cd; //регистровая переменная для сигнала декремента
 reg EN; //регистровая переменная сигнала управления
 wire [3:0] Q; //подключение выхода счетчика

 reverse_counter uut (
 .C(C),
 .R(R),
 .Cu(Cu),
 .Cd(Cd),
 .EN(EN),
 .Q(Q)
 );
 // генерация синхросигнала
 initial begin
 C = 0;
 forever #5 C = ~C; // переключение каждые 5 нс
 end

 // тестирование реверсивного счетчика
 initial begin
 // инициализация
 R = 1;
 Cu = 1; // инкремент по умолчанию
 Cd = 0;
 EN=1;
 #10;
 R = 0;
 // инкрементируем состояние
 repeat (10) begin
 #10; // Ждем 10 нс
 end
 // Меняем режим работы на декремент
 Cu = 0;
		Cd=1;// уменьшение состояния
 repeat (10) begin
 #10; // ждем 10 нс
 end

 // завершение симуляции и вывод финального значения
 $display("Final Count: %b", Q);
 $finish;
 end
endmodule
Листинг 5.4.

На рисунке 5.9 приведен результат симуляции работы счетчика.


Рис. 5.9.

В среде Logigsim Evolution в разделе &Память & находится реверсивный синхронный счетчик с возможностью параллельной загрузки начального состояния. На рисунке 5.10 приведено графическое обозначение счетчика в таблице 5.4 приведены назначения сигналов. На рисунке отмечены следующие входы и выходы: 1-R, reset, асинхронный сброс счетчика, активный уровень лог. &1 &; 2 - М1/М2 синхронные входы управления загрузкой данных с параллельного входа 6 при лог. &1 & или разрешение счета при лог. &0 &; 3-М3/М4, синхронные входы управления направлением счета (при лог. &1 & счетчик работает в режиме инкремента, при лог. &0 & - в режиме декремента); 4 -G5, вход разрешения счета. Счетчик осуществляет счет при активном уровне лог. &1 & на данном входе и лог. 0 на входе М1/М2; 5 - вход синхронизации (в свойствах счетчика &Срабатывание & выбирается передний фронт \uparrow, заданий фронт \downarrow; 6 - параллельный вход данных; 7 - выход переполнения/достижения минимального значения; 8 - параллельный выход данных.


Рис. 5.10.
Таблица 5.4.
R M1/М2 М3/М4 G5 +/C6- Входы данных Выходы данных Режим работы
1 X X X X X 0 Сброс
0 1 X X \uparrow \downarrow Запись данных на входе Записанные данные Запись данных
0 0 X 0 \uparrow \downarrow X Записанные данные Запрет счета
0 0 X 0 0 X Записанные данные Запрет счета
0 0 0 1 \uparrow \downarrow X \downarrow Инкремент
0 0 1 1 \uparrow \downarrow X \uparrow Декремент

Рассматриваемый счетчик имеет основные свойства: &Биты данных & - определяет разрядность счетчика. Максимальное значение - предельное значение, до которого счетчик ведет счет, которое может меньше модуля счета данного счетчика.

В лабораторной работе 5 предлагается выполнить проектирование конечного автомата с применением счетчиков.

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >