数字集成电路 -- 各种计数器简介(环形计数器,扭环形计数器,线性反馈移位寄存器,行波计数器)

    技术2022-07-17  86

    目录

    https://www.cnblogs.com/lyc-seu/p/13062697.html#1-环形计数器

      1.环形计数器2.扭环形计数器3.线性反馈移位寄存器4.行波计数器

     

    1. 环形计数器

    module ring_counter4bit #(parameter N=4) ( input clk, input rst_n, output reg[N-1:0]ring_cnt ); always@(posedge clk or negedge rst_n) begin if(!rst_n) ring_cnt<=4'b0001; else ring_cnt<={ring_cnt[0],ring_cnt[N-1:1]}; end endmodule

    https://wenku.baidu.com/view/73ec140bba1aa8114431d945.html

    N个寄存器构成的环形计数器,状态数:N

     

    2. 扭环形计数器

    https://wenku.baidu.com/view/73ec140bba1aa8114431d945.html

    约翰逊(Johnson)计数器又称扭环计数器,是一种用n位触发器来表示2n个状态的计数器。它与环形计数器不同,后者用n位触发器仅可表示n个状态。2~n进制计数器(n为触发器的个数)有2~n个状态。若以四位二进制计数器为例,它可表示16个状态。但由于8421码每组代码之间可能有二位或二位以上的二进制代码发生改变,这在计数器中特别是异步计数器中就有可能产生错误的译码信号,从而造成永久性的错误。而约翰逊计数器的状态表中,相邻两组代码只可能有一位二进制代码不同,故在计数过程中不会产生错误的译码信号。鉴于上述优点,约翰逊计数器在同步计数器中应用比较广泛。

    module Johnson_counter4bit #(parameter N=4) ( input clk, input rst_n, output reg[N-1:0]Johnson_cnt ); always@(posedge clk or negedge rst_n)begin if(!rst_n) Johnson_cnt<=0; else Johnson_cnt<={~Johnson_cnt[0],Johnson_cnt[N-1:1]}; end endmodule

    N个寄存器构成的扭环形计数器,状态数:2N

    就是将环形计数器最后一级反向后接到第一级。 对于自启动的设计,如下:

    分析:

          修改反馈逻辑的值,可使进入正常工作的循环。通过分析可知,s,s,r,r总共有四种状态可以修改反馈进入正常的计数反馈循环。通过卡诺图分析,s,s包围的2*2黄色框和原先4*2橙色框面积最大,反馈函数最简单,电路实现便捷。

          另外一种反馈函数:

     

     

     

    3. 线性反馈移位寄存器

    N级的线性反馈移位寄存器最多有  2^N-1 个状态。 线性反馈移位寄存器的基本结构见

    https://blog.csdn.net/qq_44113393/article/details/89852994https://www.cnblogs.com/weijianlong/p/11947741.html

    假设开始的时候(D2,D1,D0 ) = (0,0,1),那么每过一个时钟周期会进行跳变一次,可以看到具体的跳变如图所示:

    对于反馈多项式具有什么数学性质实际上我一直比较好奇,应该不只是表示一个等效电路这么简单,直到看到这篇文章:

    http://blog.sina.com.cn/s/blog_62d9edac01015lsd.html

    得到的余数就是R(x)。 

      

    可以发现,当一开始输入一个1,之后每个周期代表的输入序列M(x)除以反馈多项式得到的R(x)代表的寄存器值就是001,010,100,011,101,111,101,也就是上面表中的状态。

    通过这一特性,线性移位寄存器在CRC电路中有广泛应用。

    4. 行波计数器

    2的幂次分频

     每一级的输出都是输入时钟的二分频,N级串联实现输入时钟的2N2N次分频

     

    Processed: 0.009, SQL: 9