分频器设计

1.奇数N分频器

思路:一个模N计数器计数,一个比较器,下图为mod=9分频电路

分频器设计_第1张图片

比较器datab[]=(N+1)/2,比较器取A>=B(ageb)

2  偶数分频器

mod=10;

比较器datab[]=N/2,比较器取A>=B(ageb)

分频器设计_第2张图片

3 对于2*M的偶数分频还可以用一个计数器和二分频级联而成(M=5)

分频器设计_第3张图片

4. 偶数分频器的另一种实现形式由一个模N/2计数器和一个TFF组成

   模2的分频器就是每1个clock就0变1、1变0,模4的分频器就是每2个clock就0变1、1变0;计数器部分我們使用lpm_counter,0变1、1变0我們就是用lpm_ff这个T-FF。

分频器设计_第4张图片

 

5  三分频的特殊电路模型,三分频电路除了可以用上面通用的奇数分频器外还可以用下面的模型

分频器设计_第5张图片

6  任意整数分频

module div2
#(parameter N=9)
(
    input  wire clk,
    input  wire rst_n,
    output wire o_clk
);

localparam WIDTH = log2(N);
reg [WIDTH-1:0] cnt_p;
reg             clk_p;
reg             clk_n;
wire [N-1:0]    M;

assign o_clk = (N==1) ? clk :
               (N[0]) ? (clk_p | clk_n) :clk_p;
assign M = (N[0])?((N+1)/2):(N/2);//比较器datab的大小

//上升沿计数
always @ (posedge clk,negedge rst_n)
begin
    if(!rst_n)
        cnt_p <= {WIDTH{1'b0}};
    else if (cnt_p == N-1)
        cnt_p <= {WIDTH{1'b0}};
    else
        cnt_p <= cnt_p + 1'b1;
end

always @ (posedge clk,negedge rst_n)
begin
    if(!rst_n)
        clk_p <= 1'b0;
    else if (cnt_p >= M)
        clk_p <= 1'b1;
    else
        clk_p <= 1'b0;
end

always @ (negedge clk)
    clk_n <= clk_p;

function integer log2(input integer n);
integer i;
begin
    log2 = 1;
    for (i=0;2**i<n;i=i+1)
    log2=i+1;
end
endfunction

endmodule 

你可能感兴趣的:(设计)