0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)時(shí)鐘異步切換原理圖

454398 ? 來(lái)源:博客園 ? 作者: poiu_elab ? 2020-11-10 15:06 ? 次閱讀

原理如下圖(為了方便簡(jiǎn)潔,去掉了rst_n)

波形是這樣的

代碼就是根據(jù)電路圖寫的

 1 ///////////////////////////////////////////////////////////////////////////////////////////
 2 //  DATE    :   Wed Jun  6 23:31:57 CST 2012
 3 ///////////////////////////////////////////////////////////////////////////////////////////
 4 module clk_sw(
 5     input   wire    clk_a
 6 ,   input   wire    clk_b
 7 ,   input   wire    rst_n
 8 ,   input   wire    sel
 9 ,   output  wire    clk_o
10 );
11 ///////////////////////////////////////////////////////////////////////////////////////////
12 // variable declaration
13 reg     clk_a_en ;
14 reg     clk_b_en ;
15 ///////////////////////////////////////////////////////////////////////////////////////////
16 // logic
17 always @(posedge clk_a or negedge rst_n) begin
18     if(~rst_n)                          clk_a_en     <=  1'b0               ;
19     else                                clk_a_en     <=  ~sel & ~clk_b_en   ;
20 end
21 always @(posedge clk_b or negedge rst_n) begin
22     if(~rst_n)                          clk_b_en     <=  1'b0               ;
23     else                                clk_b_en     <=  sel  & ~clk_a_en   ;
24 end
25 assign  clk_o   =   (clk_a & clk_a_en) | (clk_b & clk_b_en) ;
26 ///////////////////////////////////////////////////////////////////////////////////////////
27 
28 endmodule   //          CREATED by poiu_elab@1207
29 
30 ///////////////////////////////////////////////////////////////////////////////////////////

testbench是這樣的

 1 ///////////////////////////////////////////////////////////////////////////////////////////
 2 //  DATE    :   Wed Jun  6 23:42:58 CST 2012
 3 ///////////////////////////////////////////////////////////////////////////////////////////
 4 `define CLK_A_CYCLE   23
 5 `define CLK_B_CYCLE   47
 6 module tb();
 7 ///////////////////////////////////////////////////////////////////////////////////////////
 8 // variable declaration
 9 reg     clk_a   ;
10 reg     clk_b   ;
11 reg     rst_n   ;
12 reg     sel     ;
13 wire    clk_o   ;
14 ///////////////////////////////////////////////////////////////////////////////////////////
15 // stimulation generation
16 initial forever #(`CLK_A_CYCLE/2) clk_a = ~clk_a;
17 initial forever #(`CLK_B_CYCLE/2) clk_b = ~clk_b;
18 initial begin
19     rst_n           =   1'b0            ;
20     clk_a           =   1'b1            ;
21     clk_b           =   1'b1            ;
22     sel             =   1'b0            ;
23 #500;
24     rst_n           =   1'b1            ;
25 #500;
26 #({$random}%13+500);
27     sel             =   ~sel            ;
28 #({$random}%23+500);
29     sel             =   ~sel            ;
30 #({$random}%33+500);
31     sel             =   ~sel            ;
32 #({$random}%43+500);
33     sel             =   ~sel            ;
34 #({$random}%53+500);
35     sel             =   ~sel            ;
36 #({$random}%63+500);
37     sel             =   ~sel            ;
38 #({$random}%73+500);
39     sel             =   ~sel            ;
40 #({$random}%83+500);
41     sel             =   ~sel            ;
42 #({$random}%93+500);
43     sel             =   ~sel            ;
44 #({$random}%13+500);
45     sel             =   ~sel            ;
46 #({$random}%23+500);
47     sel             =   ~sel            ;
48 #({$random}%33+500);
49     sel             =   ~sel            ;
50 #({$random}%43+500);
51     sel             =   ~sel            ;
52 #({$random}%53+500);
53     sel             =   ~sel            ;
54 #({$random}%63+500);
55     sel             =   ~sel            ;
56 #({$random}%73+500);
57     sel             =   ~sel            ;
58 #({$random}%83+500);
59     sel             =   ~sel            ;
60 #({$random}%93+500);
61     sel             =   ~sel            ;
62 #5000;
63 $stop;
64 end
65 ///////////////////////////////////////////////////////////////////////////////////////////
66 // module instaniation
67 clk_sw u_clk_sw(
68     .clk_a  (   clk_a   )
69 ,   .clk_b  (   clk_b   )
70 ,   .rst_n  (   rst_n   )
71 ,   .sel    (   sel     )
72 ,   .clk_o  (   clk_o   )
73 );
74 ///////////////////////////////////////////////////////////////////////////////////////////
75 
76 endmodule   //          CREATED by poiu_elab@1207
77 
78 ///////////////////////////////////////////////////////////////////////////////////////////

這里的核心就是你的sel發(fā)生翻轉(zhuǎn)的時(shí)候,首先肯定是在本時(shí)鐘域內(nèi)的clk_en會(huì)先變低(invalid),之后才會(huì)使得另外時(shí)鐘域內(nèi)的clk_en變高(valid),這時(shí)另外一個(gè)時(shí)鐘域內(nèi)的時(shí)鐘才能和clk_en相與輸出。

簡(jiǎn)而言之,比如一開始是clk_a有效,clk_out為clk_a,sel翻轉(zhuǎn)后,clk_a_en在clk_a的時(shí)鐘域內(nèi)先關(guān)斷(拉低),使得clk_out持續(xù)拉低,clk_a_en變低后,clk_b_en在clk_b的時(shí)鐘域內(nèi)才能被拉高有效,這時(shí)同步的clk_b_en信號(hào)與clk_b相與就能使得clk_out成功切換到clk_b了。

原理就是這樣,其中clk_a_en和clk_b_en不會(huì)同時(shí)有效就避免了時(shí)鐘切換的時(shí)候窄脈沖及毛刺的生成,但是我覺(jué)得由于是組合邏輯輸出的時(shí)鐘總歸還是會(huì)有一些缺點(diǎn)和不足的。不知道有沒(méi)有什么更好的辦法。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1714

    瀏覽量

    131277
  • 波形
    +關(guān)注

    關(guān)注

    3

    文章

    377

    瀏覽量

    31473
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    異步時(shí)鐘切換電路

    異步時(shí)鐘切換電路
    發(fā)表于 05-08 09:40 ?5827次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>切換</b>電路

    時(shí)鐘設(shè)計(jì)中時(shí)鐘切換電路設(shè)計(jì)案例

    在多時(shí)鐘設(shè)計(jì)中可能需要進(jìn)行時(shí)鐘切換。由于時(shí)鐘之間可能存在相位、頻率等差異,直接切換時(shí)鐘可能導(dǎo)致
    的頭像 發(fā)表于 09-24 11:20 ?5634次閱讀
    多<b class='flag-5'>時(shí)鐘</b>設(shè)計(jì)中<b class='flag-5'>時(shí)鐘</b><b class='flag-5'>切換</b>電路設(shè)計(jì)案例

    數(shù)字時(shí)鐘原理圖

    新手,懇求各位高手給個(gè)數(shù)字時(shí)鐘原理圖,最好能夠給PCB
    發(fā)表于 11-10 10:18

    LDB時(shí)鐘切換程序與i.MX6異步時(shí)鐘切換指導(dǎo)手冊(cè)

    LDB時(shí)鐘切換程序與i.MX6異步時(shí)鐘切換指南
    發(fā)表于 12-13 07:22

    雙向切換流水燈電路原理圖

    CD4017.pdf 雙向切換流水燈電路原理圖
    發(fā)表于 06-29 22:30 ?7449次閱讀
    雙向<b class='flag-5'>切換</b>流水燈電路<b class='flag-5'>原理圖</b>

    單片機(jī)時(shí)鐘電路原理圖

    單片機(jī)時(shí)鐘電路原理圖 下面以個(gè)實(shí)際的時(shí)鐘電路來(lái)說(shuō)明定時(shí)器的軟件編程方法,時(shí)鐘是最為常見的顯示
    發(fā)表于 03-14 14:25 ?1.7w次閱讀
    單片機(jī)<b class='flag-5'>時(shí)鐘</b>電路<b class='flag-5'>原理圖</b>

    相對(duì)與同步切換,異步切換會(huì)對(duì)切換掉話率有多少影響

    相對(duì)與同步切換,異步切換會(huì)對(duì)切換掉話率有多少影響 同步切換需要網(wǎng)絡(luò)中的基站間同步,異步
    發(fā)表于 06-18 00:13 ?880次閱讀

    利用光MOS的信號(hào)切換電路原理圖

    利用光MOS的信號(hào)切換電路原理圖
    發(fā)表于 08-15 17:43 ?2052次閱讀
    利用光MOS的信號(hào)<b class='flag-5'>切換</b>電路<b class='flag-5'>原理圖</b>

    自制視頻切換器的工作原理圖

    自制視頻切換器的工作原理圖 電路原理見下圖。電路的核心是塊視頻切換電路MAX4
    發(fā)表于 03-24 15:16 ?4255次閱讀
    自制視頻<b class='flag-5'>切換</b>器的工作<b class='flag-5'>原理圖</b>

    FPGA異步時(shí)鐘設(shè)計(jì)中的同步策略

    FPGA 異步時(shí)鐘設(shè)計(jì)中如何避免亞穩(wěn)態(tài)的產(chǎn)生是個(gè)必須考慮的問(wèn)題。本文介紹了FPGA 異步時(shí)鐘設(shè)
    發(fā)表于 12-20 17:08 ?63次下載
    FPGA<b class='flag-5'>異步</b><b class='flag-5'>時(shí)鐘</b>設(shè)計(jì)中的同步策略

    數(shù)字時(shí)鐘電路設(shè)計(jì)原理圖pcb

    數(shù)字時(shí)鐘電路設(shè)計(jì)原理圖pcb ,包含整個(gè)設(shè)計(jì)
    發(fā)表于 12-07 11:38 ?303次下載

    DS1302時(shí)鐘模塊原理圖

    ds1302時(shí)鐘芯片簡(jiǎn)單介紹及其原理圖。
    發(fā)表于 04-06 16:01 ?15次下載

    雙電源自動(dòng)切換控制原理圖

    雙電源自動(dòng)切換控制原理圖
    發(fā)表于 09-11 10:19 ?43次下載
    雙電源自動(dòng)<b class='flag-5'>切換</b>控制<b class='flag-5'>原理圖</b>

    電源自動(dòng)切換的電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是電源自動(dòng)切換的電路原理圖免費(fèi)下載。
    發(fā)表于 11-12 08:00 ?64次下載
    電源自動(dòng)<b class='flag-5'>切換</b>的電路<b class='flag-5'>原理圖</b>免費(fèi)下載

    單項(xiàng)可控硅直流切換電路1原理圖

    單項(xiàng)可控硅直流切換電路1原理圖
    發(fā)表于 02-09 13:51 ?23次下載