时钟三分频电路
数字逻辑君
编辑于 2023年08月11日 00:14
收录于文集
共13篇

(1)经典方法

代码块
JavaScript
自动换行
复制代码
module div3(
    input               clkin     ,
    input               rstn      ,
    output              clkout    
);

reg   [1:0]      cnt   ; 
always @(posedge clkin or negedge rstn) begin
    if(!rstn)
        cnt  <=  'd0 ;
    else 
        cnt  <= (cnt == 'd2) ? 'd0 : cnt + 1'b1 ;
end

reg         clkp,clkn ;
always @(posedge clkin or negedge rstn) begin
    if(!rstn)
        clkp <= 1'b0  ;
    else if( cnt == 'd1 || cnt == 'd2)
        clkp <= ~clkp ;
end

always @(negedge clkin or negedge rstn) begin
    if(!rstn)
        clkn <= 1'b0  ;
    else if( cnt == 'd1 || cnt == 'd2)
        clkn <= ~clkn ;
end

assign  clkout = clkn | clkp ;

endmodule 
复制成功

着种方法得到的三分频电路确实可以实现50占空比

缺点就是电路翻转率过大,功耗比较高

仿真图

(2)改进方法

代码块
JavaScript
自动换行
复制代码
module div3(
    input               clkin     ,
    input               rstn      ,
    output              clkout    
);

reg   [1:0]      cnt   ; 
always @(posedge clkin or negedge rstn) begin
    if(!rstn)
        cnt  <=  'd0 ;
    else 
        cnt  <= (cnt == 'd2) ? 'd0 : cnt + 1'b1 ;
end

reg         clkp,clkn ;
always @(posedge clkin or negedge rstn) begin
    if(!rstn)
        clkp <= 1'b0  ;
    else if( cnt == 'd2 )
        clkp <= ~clkp ;
end

always @(negedge clkin or negedge rstn) begin
    if(!rstn)
        clkn <= 1'b0  ;
    else if( cnt == 'd1 )
        clkn <= ~clkn ;
end

assign  clkout = clkn ^~ clkp ; //同或

endmodule 
复制成功

降低反转率,降低功耗,三分频优化代码

优化之后仿真图