题解 | #Johnson Counter#
Johnson Counter
https://www.nowcoder.com/practice/7ee6e9ed687c40c3981d7586a65bc22d
`timescale 1ns/1ns module JC_counter( input clk , input rst_n, output reg [3:0] Q ); reg [7:0] Q_r = 8'b11110000; always @(*) Q <= Q_r[3:0]; always @(posedge clk or negedge rst_n) if(!rst_n) Q_r <= 8'b11110000; else Q_r <= {Q_r[0], Q_r[7:1]}; endmodule
可将该4bit约翰逊计数器视为一个8位寄存器组的后四位输出,每个时钟周期上升沿对这个移位寄存器进行循环右移并使用组合逻辑输出后四位的值(这里使用组合逻辑输出是为了对上结果波形图,否则会相对其延后一个时钟周期)。