分频(一)

1.偶数分频

2n次分频思路:从0开始计数到n-1次时,波形翻转。

占空比50%的模24分频器

 1 module  clk24(reset,clkin,clkout);
2
3 input clkin,reset;
4 output reg clkout;
5
6 parameter PERIOD=24;parameter PULSEWIDTH=12;Parameter SIZE=5//24=11000B(5位2进制),改动时对PERIOD等常量重新赋值。

7 reg [SIZE-1:0] cnt;
8
9 always @(posedge clkin)
10 begin
11 if(!reset)
12 cnt<=0;
13 else if(cnt<PERIOD-1)//计数到PERIOD次时计数器归0,重新计数,开始下一循环。
14 cnt<=cnt+1;
15 else
16 cnt<=0;
17 end
18
19 always @(posedge clkin)
20 begin
21 if(!reset)
22 clkout<=0;
23 else if(cnt<PULSEWIDTH)//由此得到占空比为50%
24 clkout<=1;
25 else
26 clkout<=0;
27 end
28
29 endmodule
30
31

 

2.奇数分频

2n-1次分频思路:用两个计数器,一个由输入时钟上升沿触发,一个由输入时钟下降沿触发,最后两个计数器输出相或。

占空比50%的13分频器

 1 module clk13(reset,clkin,clkout);
2
3 input reset,clkin;
4 output clkout;
5
6 parameter PERIOD=13,PULSEWIDTH=6.5,SIZE=4;//模为13,
7
8 reg [4:0] cnt1,cnt2;
9 reg clkout1,clkout2;
10
11 always @(posedge clkin)//上边沿触发
12 begin
13 if(!reset)
14 begin
15 clkout1<=0;
16 cnt1<=0;
17 end
18 else
19 begin
20 if(cnt1==PERIOD-1)
21 cnt1<=0;
22 else
23 cnt1<=cnt1+1;
24 if(cnt1<(PERIOD-1)/2)
25 clkout1<=1;
26 else
27 clkout1<=0;
28 end
29 end
30
31 always @(negedge clkin)//下边沿触发
32 begin
33 if(!reset)
34 begin
35 clkout2<=0;
36 cnt2<=0;
37 end
38 else
39 begin
40 if(cnt2==PERIOD-1)
41 cnt2<=0;
42 else
43 cnt2<=cnt2+1;
44 if(cnt2<(PERIOD-1)/2)
45 clkout2<=1;
46 else
47 clkout2<=0;
48 end
49 end
50
51 assign clkout=clkout1|clkout2;//clkout为wire类型,clkout为输出波形
52
53 endmodule

 

 

posted on 2011-09-20 15:27  zerine  阅读(501)  评论(0编辑  收藏  举报

导航