色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 【從零開始走進(jìn)FPGA】對(duì)立統(tǒng)一——異步時(shí)鐘同步化

          【從零開始走進(jìn)FPGA】對(duì)立統(tǒng)一——異步時(shí)鐘同步化

          作者: 時(shí)間:2015-02-06 來源:網(wǎng)絡(luò) 收藏

            一、什么是對(duì)立統(tǒng)一

          本文引用地址:http://cafeforensic.com/article/269614.htm

            什么是CEO,就是首席執(zhí)行官,是在一個(gè)企業(yè)中負(fù)責(zé)日常經(jīng)營(yíng)管理的最高級(jí)管理人員,又稱作行政總裁,或最高執(zhí)行長(zhǎng)或大班。

            那么,在系統(tǒng),需不需要一個(gè)最高級(jí)別的執(zhí)行官,來管理所有進(jìn)程呢?為了系統(tǒng)的有序性,不至于凌亂、崩潰,答案必然是肯定的。

            誰(shuí)都知道,內(nèi)部時(shí)序邏輯的工作,是通過時(shí)鐘的配合來完成任務(wù)的。那么當(dāng)系統(tǒng)中有的時(shí)候,怎么辦?每一個(gè)系統(tǒng)必須有一個(gè)最高級(jí)別的時(shí)鐘,執(zhí)行力最強(qiáng);同時(shí)它擔(dān)任著管理的任務(wù),其它想讓手下執(zhí)行任務(wù),必須告訴執(zhí)行官,然后執(zhí)行官去分配任務(wù)。所以,一切行動(dòng),都必須通過首席執(zhí)行官的允許,才能進(jìn)行;不然,沒門。首席執(zhí)行官具有最高支配權(quán)。它們之間的關(guān)系如下圖所示:


          wps_clip_image-29006


            因此,對(duì)于工程中出現(xiàn)的異步時(shí)鐘,與最高時(shí)鐘是對(duì)立關(guān)系,但這個(gè)CEO的地位決定了只有他說了算,不然就會(huì)“叛亂”,因此要把那些異步時(shí)鐘統(tǒng)一管理,這就是所謂的“對(duì)立統(tǒng)一”。

            二、異步時(shí)鐘同步化

            1. 異步時(shí)鐘種類

            異步時(shí)鐘有很種類,如下是幾種項(xiàng)目中常常出現(xiàn)的情況

            (1)系統(tǒng)異步復(fù)位信號(hào)

            (2)由其它處理器輸入的時(shí)鐘

            (3)內(nèi)部組合邏輯產(chǎn)生的時(shí)鐘

            當(dāng)然也并非所有異步時(shí)鐘都要同步化,必須高速ADC,DAC芯片往往有個(gè)時(shí)鐘輸入端,這時(shí)保證該芯片與該部分邏輯電路同步,可以專門供給一個(gè)晶振,來達(dá)到更好的效果;同時(shí)也不是最高時(shí)鐘以外的時(shí)鐘都要同步化,由PLL產(chǎn)生的不同的時(shí)鐘,本身就是同步的,可以不處理。

            當(dāng)然在可靠性要求不高的時(shí)候,異步復(fù)位這些信號(hào)也可以不處理,只是,養(yǎng)成良好的習(xí)慣,永遠(yuǎn)不會(huì)錯(cuò)。

            2. 異步時(shí)鐘解決方案

            對(duì)于時(shí)鐘的同步,采用的方法都差不多。Bingo在特權(quán)的《深入淺出玩轉(zhuǎn)》中得到啟發(fā),相應(yīng)的簡(jiǎn)單的描述一下幾種關(guān)于異步復(fù)位信號(hào)的同步化。

            (1)異步復(fù)位信號(hào)的同步化

            此部分其實(shí)很簡(jiǎn)單,應(yīng)用了上述邊沿檢測(cè)的部分思維,用最高時(shí)鐘打慢幾拍,便實(shí)現(xiàn)了與最高時(shí)鐘的同步。此處不再用Block來累贅的描述,verilog設(shè)計(jì)代碼如下所示:

            /*****************************************************

            * Module Name : synchronism_design.v

            * Engineer : Crazy Bingo

            * Target Device : EP2C8Q208C8

            * Tool versions : Quartus II 11.0

            * Create Date : 2011-6-25

            * Revision : v1.0

            * Description :

            *****************************************************/

            module synchronism_design

            (

            input clk,

            input rst_n,

            output sys_rst_n

            );

            //------------------------------------------

            //rst_n synchronism, is controlled by the input clk

            reg rst_nr1, rst_nr2;

            always @(posedge clk or negedge rst_n)

            begin

            if(!rst_n)

            begin

            rst_nr1 <= 1'b0;

            rst_nr2 <= 1'b0;

            end

            else

            begin

            rst_nr1 <= 1'b1;

            rst_nr2 <= rst_nr1;

            end

            end

            assign sys_rst_n = rst_nr2; //active low

            endmodule

            Quartus II RTL圖如下:


          wps_clip_image-27334


            (2)PLL協(xié)作時(shí)異步復(fù)位信號(hào)同步化

            相對(duì)于上述異步復(fù)位信號(hào)同步化方法的擴(kuò)展,分析存在PLL環(huán)情況下的對(duì)信號(hào)的處理。如下verilog代碼所示,先用晶振輸入時(shí)鐘對(duì)異步復(fù)位信號(hào)進(jìn)行同步化,最后通過與PLL輸出信號(hào)locked與前面產(chǎn)生的同步復(fù)位信號(hào)與操作,得到最后的系統(tǒng)復(fù)位信號(hào)。

            具體Verilog代碼如下所示:

            /*****************************************************

            * Module Name : synchronism_pll_design.v

            * Engineer : Crazy Bingo

            * Target Device : EP2C8Q208C8

            * Tool versions : Quartus II 11.0

            * Create Date : 2011-6-25

            * Revision : v1.0

            * Description :

            *****************************************************/

            module synchronism_pll_design

            (

            input clk, //50MHz

            input rst_n, //global reset

            output sys_rst_n, //system reset

            output clk_c0 //50MHz

            );

            //----------------------------------------------

            //rst_n synchronism, is controlled by the input clk

            wire pll_rst;

            reg rst_nr1,rst_nr2;

            always @(posedge clk or negedge rst_n)

            begin

            if(!rst_n)

            begin

            rst_nr1 <= 1'b0;

            rst_nr2 <= 1'b0;

            end

            else

            begin

            rst_nr1 <= 1'b1;

            rst_nr2 <= rst_nr1;

            end

            end

            assign pll_rst = ~rst_nr2; //active High

            //----------------------------------------------

            //sys_rst_n synchronism, is control by the highest output clk

            wire locked;

            wire sysrst_nr0 = rst_nr2 & locked;

            reg sysrst_nr1, sysrst_nr2;

            always @(posedge clk_c0 or negedge sysrst_nr0)

            begin

            if(!sysrst_nr0)

            begin

            sysrst_nr1 <= 1'b0;

            sysrst_nr2 <= 1'b0;

            end

            else

            begin

            sysrst_nr1 <= 1'b1;

            sysrst_nr2 <= sysrst_nr1;

            end

            end

            assign sys_rst_n = sysrst_nr2; //active Low

            //----------------------------------------------

            //Component instantiation

            pll pll

            (

            .areset (pll_rst),

            .inclk0 (clk),

            .c0 (clk_c0),

            .locked (locked)

            );

            endmodule

            Quartus II RTL圖如下所示:


          wps_clip_image-13125


            (3)外輸入異步信號(hào)同步化

            當(dāng)外面輸入異步時(shí)鐘或者異步信號(hào)的時(shí)鐘,一律轉(zhuǎn)換為使能時(shí)鐘。此方法與前一張接關(guān)于邊沿檢測(cè)的講述一樣,此處不做累贅講解。

            (4)系統(tǒng)同步信號(hào)最優(yōu)化設(shè)計(jì)方案

            當(dāng)FPGA剛上電的短暫時(shí)間內(nèi),所有邏輯塊上電,多多少少需要一定的時(shí)間(盡管非常短暫)。在一般時(shí)序要求不高的項(xiàng)目中,似乎可以忽略不計(jì)。但對(duì)于是需要求非常嚴(yán)格的操作,這幾十ns或者ms上電時(shí),F(xiàn)PGA內(nèi)部是相當(dāng)不穩(wěn)定的。因此,在同步異步信號(hào)的同時(shí),先將整個(gè)系統(tǒng)工作延時(shí)一定時(shí)間,將會(huì)在一定程度上得到更穩(wěn)定的運(yùn)行結(jié)果。同時(shí),處理后FPGA內(nèi)部真正開始工作實(shí)在系統(tǒng)上電穩(wěn)定后進(jìn)行的,因此相應(yīng)邏輯時(shí)序等,更穩(wěn)定準(zhǔn)確。

            以下是Bingo在實(shí)際項(xiàng)目中遇到的問題的解決方案。經(jīng)過對(duì)系統(tǒng)進(jìn)行100ms延時(shí)的處理后,本來容易出錯(cuò)的系統(tǒng),在沒出現(xiàn)過異常。

            具體verilog代碼如下所示:

            /***************************************************

            * Module Name : synchronism_pll_delay_design.v

            * Engineer : Crazy Bingo

            * Target Device : EP2C8Q208C8

            * Tool versions : Quartus II 11.0

            * Create Date : 2011-6-25

            * Revision : v1.0

            * Description :

            ****************************************************/

            module synchronism_pll_delay_design

            (

            input clk, //50MHz

            input rst_n, //global reset

            output sys_rst_n, //system reset

            output clk_c0 //50MHz

            );

            //----------------------------------------------

            //rst_n synchronism, is controlled by the input clk

            reg rst_nr1,rst_nr2;

            always @(posedge clk or negedge rst_n)

            begin

            if(!rst_n)

            begin

            rst_nr1 <= 1'b0;

            rst_nr2 <= 1'b0;

            end

            else

            begin

            rst_nr1 <= 1'b1;

            rst_nr2 <= rst_nr1;

            end

            end

            //----------------------------------

            //component instantiation for system_delay

            wire delay_ok;

            system_delay system_delay_inst

            (

            .clk (clk),

            .delay_ok (delay_ok)

            );

            wire pll_rst = ~rst_nr2 & ~delay_ok; //active High

            //----------------------------------------------

            //Component instantiation

            pll pll

            (

            .areset (pll_rst),

            .inclk0 (clk),

            .c0 (clk_c0),

            .locked (locked)

            );

            //----------------------------------------------

            //sys_rst_n synchronism, is control by the highest output clk

            wire locked;

            wire sysrst_nr0 = rst_nr2 & locked & delay_ok;

            reg sysrst_nr1, sysrst_nr2;

            always @(posedge clk_c0 or negedge sysrst_nr0)

            begin

            if(!sysrst_nr0)

            begin

            sysrst_nr1 <= 1'b0;

            sysrst_nr2 <= 1'b0;

            end

            else

            begin

            sysrst_nr1 <= 1'b1;

            sysrst_nr2 <= sysrst_nr1;

            end

            end

            assign sys_rst_n = sysrst_nr2; //active Low

            endmodule

            //################################################//

            //################################################//

            module system_delay

            (

            input clk, //50MHz

            output delay_ok

            );

            //------------------------------------------

            // Delay 100ms for steady state

            reg [22:0] cnt;

            always@(posedge clk)

            begin

            if(cnt < 23'd50_00000) //100ms

            cnt <= cnt + 1'b1;

            else

            cnt <= cnt;

            end

            //------------------------------------------

            //sys_rst_n synchronism

            assign delay_ok = (cnt == 23'd50_00000)? 1'b1 : 1'b0;

            endmodule

            Quartus II RTL圖如下所示:


          wps_clip_image-25286
          樹莓派文章專題:樹莓派是什么?你不知道樹莓派的知識(shí)和應(yīng)用

          fpga相關(guān)文章:fpga是什么


          晶振相關(guān)文章:晶振原理


          關(guān)鍵詞: FPGA 異步時(shí)鐘

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉