2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

ALTERA應(yīng)用之異步復(fù)位、同步釋放

 rookie 2010-09-02
一個簡單的異步復(fù)位的例子

always @ (posedge clk or negedge rst_n)

         if(!rst_n) b <= 1'b0;

         else b <= a;

 

 

 點(diǎn)擊看大圖

         我們可以看到FPGA的寄存器都有一個異步的清零端(CLR),在異步復(fù)位的設(shè)計(jì)中這個端口一般就是接低電平有效的復(fù)位信號rst_n。即使說你的設(shè)計(jì)中是高電平復(fù)位,那么實(shí)際綜合后會把你的復(fù)位信號反向后接這個CLR端。

 

       一個簡單的同步復(fù)位的例子

always @ (posedge clk)

         if(!rst_n) b <= 1'b0;

         else b <= a;

 

 

點(diǎn)擊看大圖 

         和異步復(fù)位相比,同步復(fù)位沒有用上寄存器的CLR端口,綜合出來的實(shí)際電路只是把復(fù)位信號rst_n作為了輸入邏輯的使能信號。那么,這樣的同步復(fù)位勢必會額外增加FPGA內(nèi)部的資源消耗。

 

       那么同步復(fù)位和異步復(fù)位到底孰優(yōu)孰劣呢?

       只能說,各有優(yōu)缺點(diǎn)。同步復(fù)位的好在于它只在時鐘信號clk的上升沿觸發(fā)進(jìn)行系統(tǒng)是否復(fù)位的判斷,這降低了亞穩(wěn)態(tài)出現(xiàn)的概率;它的不好上面也說了,在于它需要消耗更多的器件資源,這是我們不希望看到的。FPGA的寄存器有支持異步復(fù)位專用的端口,采用異步復(fù)位的端口無需額外增加器件資源的消耗,但是異步復(fù)位也存在著隱患,特權(quán)同學(xué)過去從沒有意識到也沒有見識過。異步時鐘域的亞穩(wěn)態(tài)問題同樣的存在與異步復(fù)位信號和系統(tǒng)時鐘信號之間。

 

       再看下面一個兩級寄存器異步復(fù)位的例子

 

always @ (posedge clk or negedge rst_n)

         if(!rst_n) b <= 1'b0;

         else b <= a;

        

always @ (posedge clk or negedge rst_n)

         if(!rst_n) c <= 1'b0;

         else c <= b;      

 

 

點(diǎn)擊看大圖 

         正常情況下,clk的上升沿c更新為b,b更新為a。一旦進(jìn)入復(fù)位,b,c都清零;但是我們不能確定復(fù)位信號rst_n會在什么時候結(jié)束。如果結(jié)束于b_reg0c_reg0{launch edge –stup,launch edge+hold}時間只外,那么一切都會正常。但如果恰恰相反,會出現(xiàn)什么情況呢? rst_n的上升變化出現(xiàn)在了clk上升的建立保持時間上,此時clk檢測到的rst_n的狀態(tài)就會是一個亞穩(wěn)態(tài)(是01不確定)。從代碼里我們看到如果此時b_reg0c_reg0認(rèn)為rst_n0,那么依然保持復(fù)位清零,而如果認(rèn)為rst_n1,那么就跳出復(fù)位。因?yàn)榇藭r的rst_n的不確定性,就可能出現(xiàn)4種情況,即b_reg0c_reg0都復(fù)位或者都跳出復(fù)位,再或者一個復(fù)位一個跳出復(fù)位。那么后者就會造成了系統(tǒng)工作不同步的問題,在這個簡單的兩級異步復(fù)位實(shí)例中這種危害表現(xiàn)的并不明顯,但是我們試想一個大的工程項(xiàng)目里眾多的寄存器出現(xiàn)如此情況又會是如何一番景象呢?

       上面的分析似乎都讓人意識到同步復(fù)位和異步復(fù)位都不可靠,那么如何將兩者結(jié)合,取長補(bǔ)短呢。

 

       異步復(fù)位、同步釋放

 

always @ (posedge clk)

         rst_nr <= rst_n;                 //現(xiàn)將異步復(fù)位信號用同步時鐘打一拍

 

always @ (posedge clk or negedge rst_nr)

         if(!rst_nr) b <= 1'b0;

         else b <= a;

        

always @ (posedge clk or negedge rst_nr)

         if(!rst_nr) c <= 1'b0;

         else c <= b;      

 

 

點(diǎn)擊看大圖 

         如此一來,既解決了同步復(fù)位的資源消耗問題,也解決了異步復(fù)位的亞穩(wěn)態(tài)問題。其根本思想,也是將異步信號同步化。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多