|
約翰遜(Johnson)計(jì)數(shù)器又稱扭環(huán)計(jì)數(shù)器,是一種用n位觸發(fā)器來表示2n個狀態(tài)的計(jì)數(shù)器。它與環(huán)形計(jì)數(shù)器不同,后者用n位觸發(fā)器僅可表示n個狀態(tài)。2~n進(jìn)制計(jì)數(shù)器(n為觸發(fā)器的個數(shù))有2~n個狀態(tài)。若以四位二進(jìn)制計(jì)數(shù)器為例,它可表示16個狀態(tài)。但由于8421碼每組代碼之間可能有二位或二位以上的二進(jìn)制代碼發(fā)生改變,這在計(jì)數(shù)器中特別是異步計(jì)數(shù)器中就有可能產(chǎn)生錯誤的譯碼信號,從而造成永久性的錯誤。而約翰遜計(jì)數(shù)器的狀態(tài)表中,相鄰兩組代碼只可能有一位二進(jìn)制代碼不同,故在計(jì)數(shù)過程中不會產(chǎn)生錯誤的譯碼信號。鑒于上述優(yōu)點(diǎn),約翰遜計(jì)數(shù)器在同步計(jì)數(shù)器中應(yīng)用比較廣泛。
8位Johnson計(jì)數(shù)器的Verilog建模:
module count(rst_n,clk,out); input rst_n,clk; output out;
reg [7:0] out;
always @(posedge clk) begin
if(!rst_n)
out <= 8'b0;
else
begin
out[0] <= ~out[7];
out[7:1] <= out[6:0]; end
end
endmodule
激勵
module sti;
reg clk,rst_n;
wire [7:0] out;count test(rst_n,clk,out);
initial
clk = 8'b0;
always
#10 clk = ~clk;
initial
begin
rst_n = 1;
#50 rst_n<=0;
end
endmodule
|
|