返回列表 发帖

[原创] Verilog基本电路设计之二(时钟无缝切换)

回复 27# 转-轮-王


   显然不是,源头的时钟选择信号输入保持不变,内部的切换信号肯定是维持在某种稳定状态,不会出现你说的这种0/1来回跳变的情况。

TOP

回复 1# 杰克淡定

发现有些同学都不去仔细看看文字说明部分,完全只看了RTL部分,就来说什么时钟上升沿啊下降沿啊之类的,没有懂得将原设计灵活变通。下面用大家更喜欢用的与逻辑实现gating重写一遍,下面设计不如原设计好,原因自己去看原文说明。
    module clk_switch (
                rst_n          , //
                clka            , //
                clkb            , //
                sel_clkb      , //
                clk_o            //
                );

assign clka_n = ~clka;
assign clkb_n = ~clkb;

always @ (posedge clka or negedge rst_n)
begin
    if (!rst_n) begin
        sel_clka_d0 <= 1'b0;
        sel_clka_d1 <= 1'b0;
    end
    else begin
        sel_clka_d0 <= (~sel_clkb) & (~sel_clkb_dly3) ;
        sel_clka_d1 <= sel_clka_d0 ;
    end
end

always @ (posedge clka_n or negedge rst_n)
begin
    if (!rst_n) begin
        sel_clka_dly1 <= 1'b0;
        sel_clka_dly2 <= 1'b0;
        sel_clka_dly3 <= 1'b0;
    end
    else begin
        sel_clka_dly1 <= sel_clka_d1;
        sel_clka_dly2 <= sel_clka_dly1 ;
        sel_clka_dly3 <= sel_clka_dly2 ;
    end
end

always @ (posedge clkb or negedge rst_n)
begin
    if (!rst_n) begin
        sel_clkb_d0 <= 1'b0;
        sel_clkb_d1 <= 1'b0;
    end
    else begin
        sel_clkb_d0 <= sel_clkb & (~sel_clka_dly3) ;
        sel_clkb_d1 <= sel_clkb_d0 ;
    end
end

always @ (posedge clkb_n or negedge rst_n)
begin
    if (!rst_n) begin
        sel_clkb_dly1 <= 1'b0;
        sel_clkb_dly2 <= 1'b0;
        sel_clkb_dly3 <= 1'b0;
    end
    else begin
        sel_clkb_dly1 <= sel_clkb_d1   ;
        sel_clkb_dly2 <= sel_clkb_dly1 ;
        sel_clkb_dly3 <= sel_clkb_dly2 ;
    end
end

assign clka_g = clka & sel_clka_dly3 ;
assign clkb_g = clkb & sel_clkb_dly3 ;
assign clk_o  = clka_g | clkb_g ;

endmodule

TOP

TOP

TOP

楼主,有个问题哎,两个时钟切换过程中,有一段空白期,这好像不太好吧,你手机的CPU没有时钟了,岂不是很危险?

TOP

感谢分享,学习了

TOP

本帖最后由 novel_qin 于 2017-1-5 11:59 编辑

楼主写得不错,
但经过推导,从慢时钟切换快到时钟,可能存在时钟交叠的情况,楼主看看是不是会有问题

TOP

楼主写得不错,
但经过推导,从快时钟切换到慢时钟,可能存在时钟交叠的情况,楼主看看是不是会有问题
novel_qin 发表于 2017-1-5 11:43



    写错了,是从慢时钟切换到时钟,可能存在时钟交叠的情况,

TOP

谢谢分享

TOP

回复 35# xiaogou1233


   你所说的有一段时间没有时钟,其实就是时钟低电平停留的时间变长,时钟频率变低而已。你把它理解为此时CPU是工作在一个较低低频率的时钟下就好了。再者,即使某一段时间真的没有时钟,也没有你说的危险。没有时钟,整个系统hold住不动而已,而且这都是纳秒级的时间。

TOP

返回列表

站长推荐 关闭


欢迎访问 TI SLL(信号链)专区

欢迎访问 TI SLL(信号链)专区


查看