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

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

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

詳細(xì)講解同步后的復(fù)位是同步復(fù)位還是異步復(fù)位?

Hx ? 來源:FPGA探索者 ? 作者:FPGA探索者 ? 2021-04-27 18:12 ? 次閱讀

Xilinx 復(fù)位準(zhǔn)則:Xilinx FPGA復(fù)位策略

(1)盡量少使用復(fù)位,特別是少用全局復(fù)位,能不用復(fù)位就不用,一定要用復(fù)位的使用局部復(fù)位;

(2)如果必須要復(fù)位,在同步和異步復(fù)位上,則盡量使用同步復(fù)位,一定要用異步復(fù)位的地方,采用“異步復(fù)位、同步釋放”;

(3)復(fù)位電平選擇高電平復(fù)位;

(這里說明,由于 Altera 和 Xilinx 器件內(nèi)部結(jié)構(gòu)的不同,Altera 的 FPGA 推薦低電平復(fù)位)

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

針對異步復(fù)位、同步釋放,一直沒搞明白在使用同步化以后的復(fù)位信號時(shí),到底是使用同步復(fù)位還是異步復(fù)位?

比如針對輸入的異步復(fù)位信號rst,使用本地時(shí)鐘clk將其同步化以后得到一個(gè)新的復(fù)位信號sys_rst,當(dāng)使用sys_rst時(shí),是將sys_rst作為同步復(fù)位信號還是異步復(fù)位信號?

always @(posedge clk or posedge rst) begin if(rst)begin rst_r0 《 = 1‘b1; rst_r1 《 = 1’b1; end else begin rst_r0 《 = 1‘b0; rst_r1 《 = rst_r0; end end assign sys_rst = rst_r1;

如下圖所示,選方式1還是方式2?

100062600-124726-1.png

針對此問題查找了很多資料,網(wǎng)絡(luò)上多是將sys_rst繼續(xù)按照方式1異步復(fù)位使用,Xilinx復(fù)位白皮書wp272中提到的異步復(fù)位同步釋放 如圖所示:

100062600-124727-2.png

對于輸入的異步復(fù)位Asynchronous Reset,首先使用了4個(gè)觸發(fā)器來做同步(一般用2個(gè)即可,4個(gè)出現(xiàn)亞穩(wěn)態(tài)的概率更?。?,觸發(fā)器類型為FDP(異步置位),同步化以后的復(fù)位信號去使用時(shí)綜合出的觸發(fā)器類型為FDR(同步復(fù)位),即在Xilinx中是將sys_rst按照方式2同步復(fù)位使用。

使用FDP異步置位的原因是因?yàn)閄ilinx推薦高電平復(fù)位,當(dāng)異步復(fù)位信號到來時(shí),輸出復(fù)位電平“1”,即異步置位FDP,當(dāng)復(fù)位消失后,D觸發(fā)器在每個(gè)時(shí)鐘邊沿輸出前一級觸發(fā)器的值,一定周期后,最后一級的FDP穩(wěn)定輸出“0”。

使用Xilinx A7系列FPGA實(shí)現(xiàn)異步復(fù)位、同步釋放代碼,確定同步化后的復(fù)位使用情況。

二、Xilinx復(fù)位程序?qū)Ρ?/strong>

1. 將同步化后的復(fù)位當(dāng)作異步復(fù)位信號

/******FPGA探索者******/ always @(posedge clk or posedge rst_async) begin if(rst_async == 1’b1) begin rst_sync_reg1 《= 1‘b1; rst_sync_reg2 《= 1’b1; rst_sync_reg3 《= 1‘b1; rst_sync_reg4 《= 1’b1; end else begin rst_sync_reg1 《= 1‘b0; rst_sync_reg2 《= rst_sync_reg1; rst_sync_reg3 《= rst_sync_reg2; rst_sync_reg4 《= rst_sync_reg3; end end wire sys_rst; assign sys_rst = rst_sync_reg4; always @(posedge clk) begin if(sys_rst == 1’b1) begin data_out_rst_async 《= 1‘b0; end else begin data_out_rst_async 《= a & b & c & d; end end

綜合并布局布線后的原理圖如圖所示,顯然,綜合后對sys_rst復(fù)位,將其作為異步復(fù)位綜合出FDCE同步使能異步復(fù)位(這里不考慮使能),和白皮書WP272給出的參考電路顯然不一致。

100062600-124730-3.png

100062600-124732-4.png

2. 將同步化后的復(fù)位當(dāng)作同步復(fù)位信號

/******FPGA探索者******/ always @(posedge clk or posedge rst_async) begin if(rst_async == 1’b1) begin rst_sync_reg1 《 = 1‘b1; rst_sync_reg2 《 = 1’b1; rst_sync_reg3 《 = 1‘b1; rst_sync_reg4 《 = 1’b1; end else begin rst_sync_reg1 《 = 1‘b0; rst_sync_reg2 《 = rst_sync_reg1; rst_sync_reg3 《 = rst_sync_reg2; rst_sync_reg4 《 = rst_sync_reg3; end end wire sys_rst; assign sys_rst = rst_sync_reg4; always @(posedge clk) begin if(sys_rst == 1’b1) begin data_out_rst_async 《 = 1‘b0; end else begin data_out_rst_async 《 = a & b & c & d; end end

綜合并布局布線后的原理圖如圖所示,顯然,綜合后對sys_rst復(fù)位,將其作為同步復(fù)位綜合出FDRE同步使能異步復(fù)位(這里不考慮使能),和白皮書WP272給出的參考電路一致。

100062600-124734-5.png

異步復(fù)位相比較同步復(fù)位,在Xilinx的FPGA中資源是一致的,異步復(fù)位的優(yōu)勢在于復(fù)位信號一來就能檢測到,不需要保持至少一個(gè)時(shí)鐘周期才能在時(shí)鐘邊沿檢測到,通過仿真來驗(yàn)證上述電路是否能實(shí)現(xiàn)異步復(fù)位一來就能檢測到。

三、仿真結(jié)果

設(shè)置時(shí)鐘50MHz,時(shí)鐘周期20ns,給一個(gè)持續(xù)時(shí)間3ns的異步復(fù)位信號,且持續(xù)時(shí)間均不出現(xiàn)在時(shí)鐘上升沿檢測期間,可以看到:

(1)rst_async異步復(fù)位一旦給出,用于同步的4個(gè)寄存器rst_sync_reg1~4立刻輸出高電平“1”,在下一個(gè)時(shí)鐘上升沿檢測到同步復(fù)位并將輸出data_out_rst_async復(fù)位;

(2)異步復(fù)位信號釋放后,經(jīng)過同步的sys_rst經(jīng)過一定周期后在時(shí)鐘邊沿同步釋放;

100062600-124735-6.png

按照同樣的復(fù)位,將sys_rst看作異步復(fù)位,仿真結(jié)果如下,相比于上圖,區(qū)別在于異步復(fù)位信號rst_async一旦產(chǎn)生,輸出立刻復(fù)位,且同樣是同步釋放,好像這種處理才更符合異步復(fù)位、同步釋放。。。。。。

100062600-124737-7.png

那么為什么Xilinx白皮書還是將sys_rst按照同步復(fù)位去做的呢?難道寫錯(cuò)了?

綜合考慮可能有這樣的因素:

(1)當(dāng)作同步復(fù)位的差別只在于復(fù)位時(shí)間會(huì)稍晚一些,要在時(shí)鐘的下一個(gè)邊沿檢測到,但是還是能夠識別到輸入的rst_async異步復(fù)位信號,所以從復(fù)位角度來說,都能夠后實(shí)現(xiàn)復(fù)位效果;

(2)根據(jù)Xilinx復(fù)位準(zhǔn)則,我們知道同步復(fù)位相比異步復(fù)位有很多好處,具體參見:Xilinx FPGA 復(fù)位策略白皮書,既然兩者對后級復(fù)位沒有功能上的差別,那么優(yōu)先選擇同步復(fù)位;

經(jīng)過異步復(fù)位同步釋放處理后,相比于純粹的異步復(fù)位,降低了異步復(fù)位信號釋放導(dǎo)致亞穩(wěn)態(tài)的可能性;相比同步復(fù)位,能夠識別到同步復(fù)位中檢測不到的復(fù)位信號(如上圖所示的rst_async在同步復(fù)位是檢測不到的);綜合兩者的優(yōu)勢,異步復(fù)位同步釋放。

四、Altera復(fù)位

Altera還是把這個(gè)同步后的復(fù)位當(dāng)作異步復(fù)位來用的,且推薦低電平復(fù)位。

從上面的分析來看,這里當(dāng)作異步復(fù)位還是同步復(fù)位對于復(fù)位結(jié)果本身沒有太大的影響,區(qū)別在于Xilinx是推薦同步復(fù)位來節(jié)省資源(比如DSP48E或BRAM,異步復(fù)位比同步復(fù)位耗資源),而Altera的FPGA中帶異步復(fù)位的觸發(fā)器,想要同步復(fù)位需要消耗更多的資源。

100062600-124738-8.png

編輯:lyn

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

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603385
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2167

    瀏覽量

    121410
  • 同步復(fù)位
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    10718
  • 異步復(fù)位
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    13314
收藏 人收藏

    評論

    相關(guān)推薦

    FPGA復(fù)位的8種技巧

    其它輸入引腳類似,對 FPGA 來說往往是異步的。設(shè)計(jì)人員可以使用這個(gè)信號在 FPGA 內(nèi)部對自己的設(shè)計(jì)進(jìn)行異步或者同步復(fù)位。 不過在一些提示和技巧的幫助下,設(shè)計(jì)人員可以找到更加合適的
    的頭像 發(fā)表于 11-16 10:18 ?326次閱讀
    FPGA<b class='flag-5'>復(fù)位</b>的8種技巧

    復(fù)位電路的設(shè)計(jì)問題

    前言 最近看advanced fpga 以及fpga設(shè)計(jì)實(shí)戰(zhàn)演練中有講到復(fù)位電路的設(shè)計(jì),才知道復(fù)位電路有這么多的門道,而不是簡單的外界信號輸入系統(tǒng)復(fù)位。 流程: 1.同步
    的頭像 發(fā)表于 11-15 11:13 ?166次閱讀
    <b class='flag-5'>復(fù)位</b>電路的設(shè)計(jì)問題

    STM32復(fù)位電路用復(fù)位芯片和阻容復(fù)位電路區(qū)別

    STM32是一款廣泛使用的微控制器,其復(fù)位電路設(shè)計(jì)對于系統(tǒng)的穩(wěn)定性和可靠性至關(guān)重要。本文將詳細(xì)介紹STM32復(fù)位電路中使用復(fù)位芯片和阻容復(fù)位
    的頭像 發(fā)表于 08-06 10:26 ?1488次閱讀

    FPGA同步復(fù)位異步復(fù)位

    FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)中的復(fù)位操作是設(shè)計(jì)過程中不可或缺的一環(huán),它負(fù)責(zé)將電路恢復(fù)到初始狀態(tài),以確保系統(tǒng)的正確啟動(dòng)和穩(wěn)定運(yùn)行。在FPGA設(shè)計(jì)中,復(fù)位方式主要分為同步
    的頭像 發(fā)表于 07-17 11:12 ?1567次閱讀

    L431采用PLL異步時(shí)鐘,復(fù)位ADC采樣值發(fā)生偏差的原因?

    前提:可以確認(rèn)的是外部條件沒有變化。 問題:開機(jī)復(fù)位的情況下,ADC_DMA讀取值幾乎相同,而每次重新復(fù)位,ADC_DMA讀出來的值差別較大。在采用ADC
    發(fā)表于 03-08 07:32

    MCU復(fù)位RAM會(huì)保持嗎,如何實(shí)現(xiàn)復(fù)位時(shí)變量數(shù)據(jù)保持

    在使用MCU時(shí),通常大家默認(rèn)MCU復(fù)位時(shí)RAM會(huì)被復(fù)位清零,那實(shí)際MCU復(fù)位時(shí)RAM是什么狀態(tài)?如何讓mcu復(fù)位時(shí)RAM保持不變呢?
    的頭像 發(fā)表于 03-01 09:32 ?2505次閱讀
    MCU<b class='flag-5'>復(fù)位</b>RAM會(huì)保持嗎,如何實(shí)現(xiàn)<b class='flag-5'>復(fù)位</b>時(shí)變量數(shù)據(jù)保持

    ABB變頻器怎么復(fù)位 | 復(fù)位時(shí)可能會(huì)出現(xiàn)哪些問題?

    ,ABB變頻器如何進(jìn)行復(fù)位呢?本文將為大家詳細(xì)講解ABB變頻器復(fù)位的方法和步驟。 一、ABB變頻器的復(fù)位方式 在使用ABB變頻器時(shí),
    的頭像 發(fā)表于 02-21 10:50 ?7892次閱讀
    ABB變頻器怎么<b class='flag-5'>復(fù)位</b> | <b class='flag-5'>復(fù)位</b>時(shí)可能會(huì)出現(xiàn)哪些問題?

    什么是復(fù)位同步電路 reset synchronizer?

    復(fù)位同步電路 reset synchronizer 其實(shí)只在復(fù)位信號 release 的時(shí)候派上用場。復(fù)位結(jié)束,這個(gè)電路其實(shí)就沒用了。 但
    的頭像 發(fā)表于 02-19 09:21 ?1435次閱讀
    什么是<b class='flag-5'>復(fù)位</b><b class='flag-5'>同步</b>電路 reset synchronizer?

    如何排查GD32 MCU復(fù)位是由哪個(gè)復(fù)位源導(dǎo)致的?

    上期為大家講解了GD32 MCU復(fù)位包括電源復(fù)位和系統(tǒng)復(fù)位,其中系統(tǒng)復(fù)位還包括獨(dú)立看門狗復(fù)位、內(nèi)
    的頭像 發(fā)表于 02-03 09:46 ?1740次閱讀
    如何排查GD32 MCU<b class='flag-5'>復(fù)位</b>是由哪個(gè)<b class='flag-5'>復(fù)位</b>源導(dǎo)致的?

    GD32 MCU電源復(fù)位和系統(tǒng)復(fù)位有什么區(qū)別

    GD32 MCU的復(fù)位分為電源復(fù)位和系統(tǒng)復(fù)位,電源復(fù)位又稱為冷復(fù)位,相較于系統(tǒng)復(fù)位,上電
    的頭像 發(fā)表于 02-02 09:37 ?1510次閱讀
    GD32 MCU電源<b class='flag-5'>復(fù)位</b>和系統(tǒng)<b class='flag-5'>復(fù)位</b>有什么區(qū)別

    異步復(fù)位異步釋放會(huì)有什么問題?FPGA異步復(fù)位為什么要同步釋放呢?

    一般來說,復(fù)位信號有效后會(huì)保持比較長一段時(shí)間,確保 register 被復(fù)位完成。但是復(fù)位信號釋放時(shí),因?yàn)槠浜蜁r(shí)鐘是異步的關(guān)系,我們不知道它會(huì)在什么時(shí)刻被釋放。
    的頭像 發(fā)表于 01-24 09:32 ?1735次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>復(fù)位</b><b class='flag-5'>異步</b>釋放會(huì)有什么問題?FPGA<b class='flag-5'>異步</b><b class='flag-5'>復(fù)位</b>為什么要<b class='flag-5'>同步</b>釋放呢?

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

    同步復(fù)位異步復(fù)位到底孰優(yōu)孰劣呢? 同步復(fù)位異步
    的頭像 發(fā)表于 01-16 16:25 ?1764次閱讀

    復(fù)位電路的復(fù)位條件和復(fù)位過程

    電源監(jiān)測芯片復(fù)位電路:這是最常見的復(fù)位電路類型,使用專用的電源監(jiān)測芯片來監(jiān)測電源電壓,并在電壓低于或高于預(yù)設(shè)閾值時(shí)觸發(fā)復(fù)位信號。
    的頭像 發(fā)表于 01-16 16:04 ?1252次閱讀

    stm32復(fù)位電容容值

    統(tǒng)電源穩(wěn)定、提供復(fù)位功能。 復(fù)位電容是連接在微控制器的復(fù)位引腳和地之間的電容器。在啟動(dòng)或復(fù)位過程中,復(fù)位電容會(huì)充電,并在
    的頭像 發(fā)表于 01-05 17:39 ?1804次閱讀

    ht7044a復(fù)位原理

    HT7044A 是一種復(fù)位電路芯片,常用于電子設(shè)備中實(shí)現(xiàn)對系統(tǒng)的復(fù)位功能。復(fù)位是一項(xiàng)重要的功能,用于將整個(gè)系統(tǒng)恢復(fù)到初始狀態(tài),以確保系統(tǒng)在啟動(dòng)和運(yùn)行時(shí)的可靠性和穩(wěn)定性。在本文中,我們將詳細(xì)
    的頭像 發(fā)表于 01-04 11:24 ?1640次閱讀