clk_sys为输入时钟,rst为复位信号,clk_out为输出分频时钟,div_num为分频数目。多少分频就把div_num赋多少值。
module clk_div(clk_sys, rst, clk_out,div_num);
input clk_sys;
input rst;
input [4:0] div_num;
output clk_out;
reg clk_out;
reg [3:0] baud_count;
always @(posedge clk_sys)
begin
if (rst)
begin
baud_count<=0;
clk_out<=0;
end
else
begin
if (baud_count==(div_num/2)-1)
begin
baud_count<=0;
clk_out<=~clk_out;
end
else
begin
baud_count<=baud_count+1;
clk_uart<= clk_out;
end
end
end
endmodule
没必要用到verilog HDL吧,直接用原理图就可以做出来了。
4个D触发器首尾相接。每个D触发器的输出输入端相接(中间加一个非门),输出端再接下一个D触发器的CLK,系统时钟就直接接在第一个D触发器的CLK端。这样可以将误差减到最低。