Verilog 中的奇偶分频器学习

如有疏漏请大神不吝赐教!!!(*^__^*) 嘻嘻……

这学期刚学了Verilog语言,觉得挺好玩,有点类似C语言,不过马上就要考试了,再看奇偶分频器时感觉有点不懂,

所以就查找资料加深理解。。。以下是这次的学习过程。。。

代码

3分频

module EVEN(clk, rst_n, clk_3);
   input clk, rst_n;
   output clk_3;
   reg [1:0]state;
   reg clk1;
   
   always @ (posedge clk or negedge rst_n)
      if(!rst_n)
         state <= 2'b00;
      else
         case(state)
             2'b00:state <= 2'b01;
             2'b01:state <= 2'b11;
             2'b11:state <= 2'b00;
         endcase
   always @ (negedge clk or negedge rst_n)
      if(!rst_n)
         clk1 <= 1'b0;
      else
         clk1 <= state[0];
    assign clk_3 = state[0] & clk1;
endmodule

实现2、4、8、16分频

module ODD(clk, rst_n, clk_2, clk_4, clk_8, clk_16);
   input clk;
   input rst_n;
   output clk_2, clk_4, clk_8, clk_16;
   
   reg [3:0] cnt;
   
   always @ (posedge clk or negedge rst_n)
   begin
       if(!rst_n)
          cnt <= 4'b0;
       else
          cnt <= cnt + 1;
   end
   
   assign clk_2 = !cnt[0];
   assign clk_4 = !cnt[1];
   assign clk_8 = !cnt[2];
   assign clk_16 = !cnt[3];
endmodule

对于偶分频(只涉及2^n,其他的还为研究,一步步来)

具体思想:用高速时钟做一个同步计数器,然后在相应的位抽头即可。

对于奇分频(目前还没找到合理的解释,只是看懂了代码,渣子一个~~)

原文地址:https://www.cnblogs.com/TB-Go123/p/3411437.html