给大家分享一个小数分频的程序,有兴趣的话可以试下。
//选择异或门模块 half_select:
module half_select(sel,a,b,c);
output c;
input sel,a,b;
xor u1(w,a,b);
assign c= sel? w:a;
//(当sel=‘1’时,clk_in与2分频输出异或,实现半整数
//分频;当sel=‘0’时,只选通clk_in,实现整数分频。)
endmodule
//模N计数器counter_n:
//实现参数化设计N可取2~256,也可增加count位数使N
//可取更大的值。以N=7为例通过设置sel分别实现奇数7分频
//和半整数6.5 分频。
module counter_n(reset,en,clk_in,clk_out,count);
parameter N=7;
input reset,en,clk_in;
output clk_out;
output[7:0] count;
reg clk_out;
reg[7:0] count;
always @(posedge clk_in)
begin
if (reset)
begin
count[7:0]=0;
end
else if (en)
begin
if (count==(N-1))
count=0;
else
count=count + 1;
end
end
always
begin
if (N<=2)
clk_out=count[0];
else if (N<=4)
clk_out=count[1];
else if (N<=8)
clk_out=count[2];
else if (N<=16)
clk_out=count[3];
else if (N<=32)
clk_out=count[4];
else if (N<=64)
clk_out=count[5];
else if (N<=128)
clk_out=count[6];
else if (N<=256)
clk_out=count[7];
end
endmodule
//2分频模块fenpin_2:
module fenpin_2(clk_in,clk_out);
input clk_in;
output clk_out;
reg clk_out;
always @(posedge clk_in)
begin
clk_out=~clk_out;
end
endmodule
//最后通过元件例化的方法,调用各元件,实现通
//用分频器最高层设计:
module fenpin(reset,en,sel,clk_in,clk_out,count);
input reset,en,sel,clk_in;
output clk_out;
output[3:0] count;
half_select u1(sel,clk_in,b,c); //(调用half_select, 元件例化)
counter_n u2(reset,en,c,clk_out,count);//(调用counter_n,元件例化)
fenpin_2 u3(clk_out,b); //(调用fenpin_2, 元件例化)
endmodule