Verilog HDL学习笔记五
扭环计数器又叫约翰逊(Johnson)计数器,用n位触发器来表示2n个状态的计数器,若以四位二进制计数器为例,它可表示16个状态。但由于8421码每组代码之间可能有二位或二位以上的二进制代码发生改变,这在计数器中特别是异步计数器中就有可能产生错误的译码信号,从而造成永久性的错误。而约翰逊计数器的状态表中,相邻两组代码只可能有一位二进制代码不同,故在计数过程中不会产生错误的译码信号。
约翰逊计数器的长度N=2n,因为移位寄存器串行输入端的信号是从反向端 ~Q取得的。经过n个时钟后,计数器的状态与初始状态刚好相反,必须再经过n个时钟后才能回到扭环原态。
以四位扭环计数器为图例,如下图所示:
设计代码:
module twist_counter8(out,clk,rst_n);
input clk;
input rst_n;
output reg [7:0]out;
reg [31:0] count;
reg clk_div;
localparam N = 50000000;
//Describe the counter in an always block
always @ (posedge clk or negedge rst_n) //将50MHz的时钟频率分为1Hz
begin
if (!rst_n)
count &l