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月第一版
浙公网安备 33010602011771号