在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 杰克淡定

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

[复制链接]
 楼主| 发表于 2016-9-29 17:09:56 | 显示全部楼层
回复 27# 转-轮-王


   显然不是,源头的时钟选择信号输入保持不变,内部的切换信号肯定是维持在某种稳定状态,不会出现你说的这种0/1来回跳变的情况。
 楼主| 发表于 2016-9-29 17:46:50 | 显示全部楼层
回复 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
发表于 2016-9-30 14:54:29 | 显示全部楼层
瞅瞅
发表于 2016-12-27 19:38:23 | 显示全部楼层
相见恨晚啊,不错了,学习中。。。
发表于 2016-12-28 14:58:40 | 显示全部楼层
楼主,有个问题哎,两个时钟切换过程中,有一段空白期,这好像不太好吧,你手机的CPU没有时钟了,岂不是很危险?
发表于 2016-12-29 09:03:47 | 显示全部楼层
感谢分享,学习了
发表于 2017-1-5 11:43:49 | 显示全部楼层
本帖最后由 novel_qin 于 2017-1-5 11:59 编辑

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




    写错了,是从慢时钟切换到时钟,可能存在时钟交叠的情况,
发表于 2017-1-5 12:24:33 | 显示全部楼层
谢谢分享
 楼主| 发表于 2017-1-5 19:26:51 | 显示全部楼层
回复 35# xiaogou1233


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

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 22:14 , Processed in 0.021660 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表