什么是偶分频?
就是把频率分成2,4,6,8......等的倍数的分频就是偶分频。
先写一个六分频
module divider_six (
input wire sys_clk,
input wire sys_rst_n,
output reg clk_out
);
reg [1:0] cnt;
always @(posedge sys_clk or negedge sys_rst_n)
begin
if(sys_rst_n == 1'b0)
cnt <= 2'd0;
else if(cnt ==2'd2)//2'd2的由来是偶分频公式y = x/2 - 1;
cnt <= 2'd0;
else
cnt <= cnt + 2'd1;
end
always@(posedge sys_clk or negedge sys_rst_n)
begin
if(sys_rst_n == 1'b0)
clk_out <= 1'b0;
else if(cnt == 2'd2)
clk_out <= ~clk_out;
end
endmodule
仿真文件
`timescale 1ns/1ns
module tb_divider_six();
reg sys_clk ;
reg sys_rst_n ;
wire clk_out;
initial
begin
sys_clk = 1'b1;
sys_rst_n <= 1'b0;
#20
sys_rst_n <= 1'b1;
end
always #10 sys_clk = ~sys_clk;
divider_six dicider_six_inst
(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.clk_out(clk_out)
);
endmodule
仿真符合预期
该方法可以实现分频,在低速时钟下可以这样搞
但是在高速时钟下这样就不稳定
这样就引入了时钟网络这一概念,换句话说这个方式不好没有高速时钟网络稳定
改进方法采用flag
就是这里不一样