|
楼主 |
发表于 2013-1-28 21:25:18
|
显示全部楼层
偶分频 1:1的2,4,8分频
module fengping_1(clk_50M,f_2,f_4,f_8);
input clk_50M; //输入时钟,50M,周期为20ns
output f_2,f_4,f_8; //输出分频时钟,分别为2分频,4分频,8分频
reg f_2,f_4,f_8; //输出分频寄存器
reg[2:0] cnt; //计数寄存器
always@(posedge clk_50M) //在每个时钟的上升沿触发,执行begin_end里面的语句
begin
cnt<=cnt+3'b1; //每个时钟周期计数寄存器自加一
f_2<=cnt[0]; //把计数寄存器的最低位赋予f_2,输出即使2分频
f_4<=cnt[1]; //把计数寄存器的第2位赋予f_4,输出即使4分频
f_8<=cnt[2]; //把计数寄存器的第3为赋予f_8,输出即使8分频
end
endmodule
1:1的10分频
module fengping_2(clk_50M,f_10);
input clk_50M; //系统输入时钟,50M,周期20ns
output f_10; //10分频输出,5M
reg f_10; //输出寄存器
reg[2:0] cnt; //计数寄存器
always@(posedge clk_50M) //每个时钟周期的上升沿触发,执行begin_end中的语句
begin
if(cnt==3'b100) //判断cnt是否为4,是的话执行以下程序
begin
f_10<=~f_10; //把f_10取反
cnt<=3'b0; //计数寄存器清零
end
else //cnt没到4,执行以下程序
begin
cnt<=cnt+3'b1; //计数寄存器自加一
end
end
endmodule
1:3的4分频
module f_13(clk_50M,f_13);
input clk_50M; //输入时钟,50M,20ns
output f_13; //输出4分频,占空比为1:3
reg f_13; //分频寄存器
reg[2:0] cnt; //计数寄存器
always@(posedge clk_50M) //在每个时钟的上升沿触发
begin
if(cnt==3'b011) //当cnt为3的时候,执行以下程序
begin
f_13<=1'b1; //f_13置1
cnt<=3'b0; //cnt清0
end
else
begin
cnt<=cnt+3'b1; //cnt自加1
f_13<=1'b0; //f_13置0
end
end
endmodule |
|