verilog 3分频电路

做下笔记,方便以后使用和复习。

3分频电路

 1 module clk_div3(clk, rst, clkout, div1, div2);
 2 input clk, rst;
 3 output clkout;
 4 reg [1:0] counter;
 5 output reg div1, div2;
 6 
 7 always @ (posedge clk)
 8 begin
 9     if (rst)
10         counter <= 2'b00;
11     else 
12         case (counter)
13             2'b00: counter <= 2'b01;
14             2'b01: counter <= 2'b10;
15             2'b10: counter <= 2'b00;
16             default: counter <= 2'b00;
17         endcase
18 end
19 
20 always @ (posedge rst or posedge clk)
21 begin
22     if (rst)
23         div1 <= 1'b1;
24     else if (counter == 2'b00)
25         div1 <= ~div1;
26     else ;
27 end
28 
29 always @ (posedge rst or negedge clk)
30 begin
31     if (rst)
32         div2 <= 1'b1;
33     else if (counter == 2'b10)
34         div2 <= ~div2;
35     else ;
36 end
37 
38 assign clkout = div1 ^ div2; 
39 
40 endmodule

仿真结果如下

 

 

由3分频可以推得任意奇数分频。

若计数器counter的模值为(2n-1),假设信号1为上升沿触发,则counter=0时跳变;假设信号2为下降沿触发,在counter=n时跳变。这样就保持信号1和信号2间的间隔为(2n-1)/2的周期,在(2n-1)*2的周期内clkout为两个周期,实现了(2n-1)的50%占空比分频。

 

参考:《Verilog数字系统设计与FPGA应用》P63-64,清华大学出版社,2012年11月第一版

posted @ 2014-12-12 00:02  越傻越快乐  阅读(1924)  评论(0)    收藏  举报