例11: 奇分频 实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下: module fp_odd(clk_out,clk_p,clk_n,clk_in,rst); output clk_out; output clk_p,clk_n; input clk_in,rst; reg [2:0] cnt_p,cnt_n; reg clk_p,clk_n; parameter N=5; always @ (posedge clk_in or negedge rst) begin if(!rst) cnt_p<= 0; else if(cnt_p==N-1) cnt_p<=0; elsecnt_p <= cnt_p + 1; end always @ (posedge clk_in or negedge rst) begin if(!rst) clk_p <= 0; else if(cnt_p==(N-1)/2) clk_p<= !clk_p; else if(cnt_p==N-1) clk_p<= !clk_p; end always @ (negedge clk_in or negedge rst) begin if(!rst) cnt_n<= 0; else if(cnt_n==N-1) cnt_n<=0; elsecnt_n <= cnt_n + 1; end always @ (negedge clk_in or negedge rst) begin if(!rst) clk_n <= 0; else if(cnt_n==(N-1)/2) clk_n<= !clk_n; else if(cnt_n==N-1) clk_n<= !clk_n; end assign clk_out = clk_p | clk_n; endmodule
|