在用HDL实现分频器的时候,主要通过写计数器计数时钟的上升/下降沿来实现。偶数倍分频十分容易实现在此不加赘述,奇数倍分频需要通过计数器生成两个波形然后进行异或操作实现奇数倍分频。
以下给出5倍分频、10倍分频的Verilog HDL程序代码,以及testbench仿真程序
Verilog程序:
module frequence_divider (
input clk_50MHz,
input rst,
output clk_10MHz,
output clk_5MHz
);
reg [3:0] cnt;
reg clk_5MHz_temp;
reg clk_10MHz_temp1;
reg clk_10MHz_temp2;
assign clk_5MHz=clk_5MHz_temp;
assign clk_10MHz=(clk_10MHz_temp1^clk_10MHz_temp2);//两个信号叠加产生奇数倍分频信号
always@(posedge clk_50MHz or negedge rst)
begin
if(rst==1'b0)begin
cnt<=4'd0;
end
else begin
if(cnt==4'd4)begin
cnt<=4'd0;
end
else begin
cnt<=cnt+1'd1;
end
end
end
always@(posedge clk_50MHz or negedge rst)
begin
if(rst==1'b0)begin
clk_5MHz_temp<=1'b1;
end
else begin
if(cnt==4'd0)begin