- •1.Регистры
- •2. Счетчики
- •2.1 Классификация счетчиков
- •Двоичные счетчики
- •Последовательные (асинхронные счетчики)
- •2.3. Параллельные счетчики
- •2.4.Синтез двоичного реверсивного счетчика
- •2.5. Счетчик с асинхронной загрузкой параллельного кода
- •Описание 8-битного реверсивного счетчика на Verilog
- •Построение счетчика с заданным модулем счета
- •Описание счетчика на Verilog
- •Описание счетчика с модулем счета 5 на Verilog
- •3. Сдвигающие регистры
- •3.4.Сдвигающие регистры, реализованные в виде ис средней степени интеграции
- •Режимы работы сдвигающего регистра определяются комбинацией значений на управляющих входах микросхемы s1, s0. (Таб. 11 )
- •3.5.Устройство быстрого сдвига
- •4. Счетчики на сдвигающих регистраx
- •4.1 Кольцевые счетчики (Ring Counters)
- •4.2. Счетчик Джонсона
- •Полиномиальные счетчики
- •4.3.1. Некоторые определения и понятия из высшей алгебры
- •4.4. Генератор элементов поля Галуа (Galois lfsr)
- •4.8. Сравнение lfsr
- •1.Описание lfsr Галуа на Verilog
- •2. Описание lfsr Fibonacci на Verilog
- •4.9. Загрузка начального состояния в lfsr
Описание счетчика с модулем счета 5 на Verilog
module counter_mod5(clk, reset, out);
input clk,reset;
output [2:0] out ;
always @(posedge clk or negedge reset)
if (!reset) out< = 3’d0;
else if (out==3’b100)
out<=3’d0; else out<=out+1;
endmodule
Двоично-десятичный счетчик (Binary-Coded Decimal counter)
Двоично-десятичный счетчик (BCD counter) имеет 10 состояний.
Используются в случаях, когда необходимо подсчитать количество поступиввших импульсов и отобразить результаты в десятичной системе.
Таб. 8
Цифра |
8 4 2 1 |
0 |
0 0 0 0 |
1 |
0 0 0 1 |
2 |
0 0 1 0 |
3 |
0 0 1 1 |
4 |
0 1 0 0 |
5 |
0 1 0 1 |
6 |
0 1 1 0 |
7 |
0 1 1 1 |
8 |
1 0 0 0 |
9 |
1 0 0 1 |
Коды 1010 – 1111 для кодирования не используются.
Двоично-десятичные счетчики могут быть построены рассмотренным выше способом. Схема одного разряда десятичного представлена на рис. 26. Счетик реализован на основе двоичного 4-разтрядного счетчика с модулем счета 16, асинхронным сбросом и синхронной загрузкой.
Рис.26
Схема 2-разрядного двоично-десятичного счетчика представлена на рис.27.
Рис. 27
Пример описания суммирующего двоично-десятичного двухразрядного счетчика на Verilog.
Пример 1.
module BCD_counter (clk, en, reset, out);
input clk, en, reset;
output[7:0] out;
reg[3:0] out1,out2;
reg en1;
// BCD0
always@ (posedge clk or negedge reset)
begin if(!reset) out1<=0;
else if(en)
begin if(out1==4'b1001)
begin out1<=4'b0000; en1=1; end
else out1 =out1+1;end
end
//BCD1
always @(posedge clk or negedge reset)
begin if(!reset) out2 <=0;
else if(en1)begin if(out2==4'b1001) out2<=4'b0000;
else en1=0; out2 <=out2+1; end
end
assign out ={out2,out1};
endmodule
*************
module test_bench1;
reg clk,en,reset;
wire[7:0] out;
wire [3:0] out1,out2;
wire en1;
BCD_counter ann(clk, en, reset, out);
initial begin
clk=0; reset=0; en=0;
#11 reset=1;
#20 en=1;
#600 $finish;
end
always #7 clk =~clk;
endmodule
В данном описании использовано два always блока: для BCD0 и BCD1.
BCD0 работает при наличии сигнала en.
BCD1 запускается сигналом en1, значение которого формируется в первом процедурном always блоке.
Пример 2. Иерархическое описание устройства
module BCD_counter_mod (clk, en, reset, out);
input clk, en, reset;
output[7:0] out;
wire en1;
BCD_one_bit decimal_bit0(clk,en, reset, out[3:0]);
BCD_one_bit decimal_bit1(clk, en1,reset, out[7:4]);
assign en1=(out[3:0]==4'b1001);
endmodule
module BCD_one_bit(clk, en, reset, q);
input clk, en, reset;
output [3 :0] q;
reg [3:0] q;
always @(posedge clk or negedge reset)
if(!reset) q<= 4'b0000;
else if(en) begin
if(q==4'b1001) q<=4'b0000;
else q<= q+1; end
endmodule
module test_bench2;
reg clk,en,reset;
wire[7:0] out;
wire [3:0] out1,out2;
wire en1;
BCD_counter_mod ann(clk, en, reset, out);
initial begin
clk=0; reset=0; en=0;
#11 reset=1;
#20 en=1;
#600 $finish;
end
always #7 clk =~clk;
endmodule
Пример интегральной микросхемы реверсивного счетчика IC 74x193 (слайды)
