分频器
分频器是数字系统设计中最常见的基本电路之一。所谓“分频”,就是把输入信号的频率成倍数的低于输入频率的输出信号。
分频器分为偶数分频器和奇数分频器,和计数器非常类似,有时候甚至可以说就是一个东西。
偶数分频器
这里用六分频器作为例子
波形图:
代码:
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)
if (!sys_rst_n == 1`d0)
cnt <= 2`d0;
else if (cnt == 2`d2)
cnt <= 2`d0;
else
cnt <= cnt+2`d0;
always@(posedge sys_clk or negedge sys_rst_n)
if (!sys_rst_n == 1`b0)
clk_out <= 1`b0;
else if(cnt == 2`d2)
clk_out <= ~clk_out;
else
clk_out <= clk_out;
endmodule
电路图:
奇数分频器
波形图:
代码:
module divider_five
(
input wire sys_clk,
input wire sys_rst,
output wire clk_out
);
reg [2:0] cnt;
reg clk_1;
reg clk_2;
always @(posedge sys_clk or negedge sys_rst)
if (!sys_rst == 1`b0)
cnt <=3`d0;
else if(cnt == 3`d4)
cnt <=3`d0;
else
cnt <=cnt + 3`d1;
always@(posedge sys_clk or negedge sys_rst)
if(!sys_rst ==1`b0)
clk_1 <= 1`b0;
else if(cnt == 3`d2)
clk_1 <= 1`b1;
else if ( cnt == 3`d4)
clk_1 <= 1`b0;
else clk_1 <= clk_1;
always@(posedge sys_clk or negedge sys_rst)
if(!sys_rst ==1`b0)
clk_2 <= 1`b0;
else if (cnt ==3`d2)
clk_2 <= 1`b1;
else if (cnt == 3`d4)
clk_2 <= 1`b0;
else
clk_2 <= clk_2;
assign clk_out = (clk_1 | clk_2);
endmodule
电路图: