Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
register_counters.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
994 Кб
Скачать
☆

Описание счетчика с модулем счета 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 (слайды)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]