奇偶分频电路的设计 在数字逻辑电路中,分频器是一种常用电路,通常用来对某个给定的频率进行分频,以得到所需的频率。 1 .1 、 偶数分频电路 偶数倍分频是最简单的一种分频模式,完全可以通过计数器计数实现,如果要进行N 倍(N 为偶数)偶数分频,可由待分频的时钟触发计数器计数,当计数器从0 计数到N/2—1 时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。这种方法可以实现任意的偶数分频。下面的程序给出的是一个16 分频电路,其他倍数的分频电路可以通过修改计数器的上限值得到。 用Verilog 实现一个16 分频电路,其源程序如下。 module clk_div16(clk_in,reset,clk_out); input clk_in; input reset; output clk_out; reg clk_out; reg[2:0] cnt; always@(posedge clk_in) begin if(!reset) begin cnt<=0; clk_out<=0; end else if(cnt==7) begin clk_out<=~clk_out; cnt<=0; end else begin cnt<=cnt+1; //clk_out<=clk_out; end end endmodule 测试激励程序如下: module clk_div16_tb; reg clk_in; reg reset; wire clk_out; clk_div16 uut ( .clk_in(clk_in), .reset(reset), .clk_out(clk_out) ); initial begin // Initialize Inputs clk_in = 0; reset = 0; #10 reset=1; end always #2 clk_in=~clk_in; endmodule 上述程序经过Synplify Pro 综合后,其RTL 级结构如下图所示 在ModelSim6.5 中完成仿真,结果如图所示。 总结:如果要实现任意 N(偶数)分频电路。其程序如下 module clk_divN(clk_in,reset,clk_out); input clk_in; input reset; output clk_out; reg clk_out; reg[2:0] cnt; parameter N=8;//只需修改N 的值即可 always@(posedge clk_in) begin if(!reset) begin cnt<=0; clk_out<=0; end else if(cnt==(N/2-1)) begin clk_out<=~clk_out; cnt<=0; end else begin cnt<=cnt+1; clk_out<=clk_out; end end endmodule 1 .2 、 奇数分频电路 奇数分频电路有多种实现方式,下面介绍常用的错位“异或”法的原理。如果要进行3 分频,通过待分频时钟上升沿触发计数器进行模3 计数,当计数器计到邻近值时进行两次翻转。比如在计数器计计数到1 时,输出时钟进行翻转;计数到2 时,再次翻转,即在邻近的1 和2 时刻进行两次翻转,在0 时...