分频电路的verilog实现
生活随笔
收集整理的这篇文章主要介绍了
分频电路的verilog实现
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
偶数2分频
由偶数二分频波形可知,每次在时钟的上升沿,输出寄存器的状态进行翻转,就能得到二分频后的时钟。
代码如下:
二分频电路如下:
偶数N分频
方法:用模为N/2的计数器实现占空比为50%的偶数N分频时钟信号,计数器为N/2 - 1时,输出时钟寄存器状态翻转。
代码如下(div_coe代表分频数):
module even_div #(parameter div_coe = 2) ( input clk, input rst,output clk_div);localparam div_even = div_coe>>1; reg clk_div_r; reg [div_even-1:0] cnt; assign clk_div = clk_div_r;always@(posedge clk) beginif(rst)beginclk_div_r <= 1'b0;cnt <= 0;endelse if(cnt == div_even - 1)begin clk_div_r <= ~clk_div_r;cnt <= 0;endelsebegincnt <= cnt + 1;end endendmodule测试代码如下:
module tset_clk_div#(parameter div_coe = 6)( );reg clk; reg rst; wire clk_div;initial beginclk = 0;rst = 0;#50rst = 1;#25rst = 0; end always #5 clk = ~clk;even_div#div_coeU0 ( .clk(clk), .rst(rst),.clk_div(clk_div)); endmodule6分频仿真波形为:
N分频电路如下:
奇数N分频,要求分频后时钟占空比为50%
以3分频为例,在时钟clk的作用下,先产生占空比为1/3的时钟clk_div_r;然后时钟clk取反,得到时钟clk_n,在clk_n的作用下,产生占空比为1/3的时钟clk_div_r1;clk_div_r与clk_div_r1只差半个时钟周期,二者相或运算得到占空比为50%的三分频时钟。
总结产生时钟占空比为50%的奇数N分频时钟方法:
1、在时钟clk的作用下,计数器cnt在(N-1)/2以及N-1状态时,时钟寄存器clk_div_r进行状态翻转,得到占空比为[(N-1)/2]/N的分频时钟;
2、在取反后的时钟clk_n的作用下,计数器cnt1在(N-1)/2以及N-1状态时,时钟寄存器clk_div_r1进行状态翻转,得到占空比为[(N-1)/2]/N的分频时钟;
3、clk_div_r与clk_div_r1相或,得到占空比为50%的奇数N分频时钟
代码如下(div_coe代表分频数):
module odd_div #(parameter div_coe = 3) ( input clk, input rst,output clk_div);localparam div_odd = (div_coe - 1)>>1; reg clk_div_r; reg [div_coe-1:0] cnt; reg clk_div_r1; reg [div_coe-1:0] cnt1; wire clk_n; assign clk_n = ~clk; assign clk_div = clk_div_r || clk_div_r1;always@(posedge clk) beginif(rst)begincnt <= 0;endelse if(cnt == div_coe - 1)begincnt <= 0;endelsebegincnt <= cnt + 1;end endalways@(posedge clk_n) beginif(rst)begincnt1 <= 0;endelse if(cnt1 == div_coe - 1)begincnt1 <= 0;endelsebegincnt1 <= cnt1 + 1;end endalways@(posedge clk) beginif(rst)beginclk_div_r <= 1'b0;endelse if(cnt == div_odd)beginclk_div_r <= ~clk_div_r;endelse if(cnt == div_coe - 1)beginclk_div_r <= ~clk_div_r;end endalways@(posedge clk_n) beginif(rst)beginclk_div_r1 <= 1'b0;endelse if(cnt1 == div_odd)beginclk_div_r1 <= ~clk_div_r1;endelse if(cnt1 == div_coe - 1)beginclk_div_r1 <= ~clk_div_r1;end endendmodule需要注意的是:上述奇偶分频实现的时钟一般只用于应付面试。
总结
以上是生活随笔为你收集整理的分频电路的verilog实现的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 读懂SAP Leonardo物联网平台
- 下一篇: 最新kali之medusa