/*4bit Johnson Counter*/
module johnsonCounter4(clk,clr,pr,q);
input clk,clr,pr;
output [3:0] q;
reg [3:0] q;
always @(posedge clk or negedge clr or negedge pr) begin
if(!clr) q <= 4'b0000;
else if (!pr) q <= 4'b1111;
else
case (q)
4'b0000 : q <= 4'b0001;
4'b0001 : q <= 4'b0011;
4'b0011 : q <= 4'b0111;
4'b0111 : q <= 4'b1111;
4'b1111 : q <= 4'b1110;
4'b1110 : q <= 4'b1100;
4'b1100 : q <= 4'b1000;
4'b1000 : q <= 4'b0000;
default : q <= 4'b0000;
endcase
end
endmodule
clr,prはclkより優先(非同期)
リングカウンタ本体
clr=1,pr=1,
clk立ち上がりクロックで動作
default は異常シーケンス時の処理