Последовательностная логика. Счетчики
Номер импульса | 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 приведен результат симуляции работы счетчика.
В среде 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 - вход синхронизации (в свойствах счетчика &Срабатывание & выбирается передний фронт , заданий
фронт
; 6 - параллельный вход данных; 7 - выход переполнения/достижения минимального значения; 8 - параллельный выход данных.
R | M1/М2 | М3/М4 | G5 | +/C6- | Входы данных | Выходы данных | Режим работы |
---|---|---|---|---|---|---|---|
1 | X | X | X | X | X | 0 | Сброс |
0 | 1 | X | X | ![]() |
Запись данных на входе | Записанные данные | Запись данных |
0 | 0 | X | 0 | ![]() |
X | Записанные данные | Запрет счета |
0 | 0 | X | 0 | 0 | X | Записанные данные | Запрет счета |
0 | 0 | 0 | 1 | ![]() |
X | ![]() |
Инкремент |
0 | 0 | 1 | 1 | ![]() |
X | ![]() |
Декремент |
Рассматриваемый счетчик имеет основные свойства: &Биты данных & - определяет разрядность счетчика. Максимальное значение - предельное значение, до которого счетчик ведет счет, которое может меньше модуля счета данного счетчика.
В лабораторной работе 5 предлагается выполнить проектирование конечного автомата с применением счетчиков.