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

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

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

FPGA入門之復(fù)位電路設(shè)計

jf_78858299 ? 來源:FPGA學習者 ? 作者:Dawn yuan ? 2023-05-25 15:55 ? 次閱讀

復(fù)位電路設(shè)計

前面在時序分析中提到過亞穩(wěn)態(tài)的概念,每天學習一點FPGA知識點(9)之時序分析并且在電路設(shè)計中如果不滿足Tsu(建立時間)和Th(保持時間),很容易就出現(xiàn)亞穩(wěn)態(tài);在跨時鐘域傳輸?shù)囊幌盗写胧┮彩菫榱私档蛠喎€(wěn)態(tài)發(fā)生的概率。

今天再說另一個可能會產(chǎn)生亞穩(wěn)態(tài)問題的電路;

復(fù)位電路;

1??recovery time和removal time

在正式開始復(fù)位電路設(shè)計之前,先說明兩個概念,恢復(fù)時間(recovery time)和移除時間(removal time)。[注,此處以低電平復(fù)位為例]

恢復(fù)時間:撤銷復(fù)位時,復(fù)位信號無效到時鐘有效沿來臨之前需要維持的最小的時間,稱為恢復(fù)時間,類似于同步時鐘的建立時間setup time;

移除時間:撤銷復(fù)位時,在時鐘有效沿來臨之后復(fù)位信號還需要保持復(fù)位狀態(tài)的時間為去除時間,類似于同步時鐘的保持時間hold time;

如下圖所示:

圖片

[注]:

①概念中所說的兩個時鐘沿并不是同一個時鐘沿,可以從另一個角度解釋:以復(fù)位結(jié)束的上升沿(低電平復(fù)位的情況下)為基準,復(fù)位結(jié)束前一個時鐘沿到復(fù)位結(jié)束之間為移除時間;復(fù)位結(jié)束后到下一個時鐘沿之間為恢復(fù)時間。

②兩個定義都是在復(fù)位結(jié)束的時候定義的,因為復(fù)位結(jié)束,系統(tǒng)馬上處于工作狀態(tài),所以才需要考慮亞穩(wěn)態(tài)問題。

2??同步復(fù)位和異步復(fù)位

①同步復(fù)位

同步復(fù)位:指的是加到所有功能觸發(fā)器上的復(fù)位信號完全同步于時鐘信號源。復(fù)位信號只有在時鐘上升沿到來時,才能有效,否則,無法完成對系統(tǒng)的復(fù)位工作。復(fù)位原理如下圖所示:

圖片

[圖源:CSDN@小汪的IC自習室]

其代碼如下:

module test(
  input        sys_clk,
  input        sys_rst_n,


  input        din,
  output  reg   dout
  );


  always@(posedge sys_clk) begin
    if(!sys_rst_n)
      dout <= 1'b0;
    else
      dout <= din;
  end
endmodule

綜合后的電路圖如下:

圖片

優(yōu)點

*系統(tǒng)為同步時序,有利于時序分析;

*抗干擾性能好,能有效剔除信號中短于時鐘周期的毛刺;

缺點

*復(fù)位信號的有效時長必須大于時鐘周期,才能真正被系統(tǒng)識別并完成復(fù)位。同時還要考慮如:時鐘偏移、組合邏輯路徑延時、復(fù)位延時等因素。

*由于大多數(shù)的廠商目標庫內(nèi)的觸發(fā)器都只有異步復(fù)位端口,采用同步復(fù)位的話,就會耗費較多的邏輯資源(如上圖中使用了一個2選1多路選擇器)。

②異步復(fù)位

復(fù)位信號直接接到功能觸發(fā)器的異步復(fù)位引腳,復(fù)位只與復(fù)位信號有關(guān),與時鐘無關(guān)。無論時鐘沿是否到來,只要復(fù)位信號有效,就對系統(tǒng)進行復(fù)位。異步復(fù)位的工作原理如下圖所示:

圖片

其代碼如下:

module test(
  input        sys_clk,
  input        sys_rst_n,


  input        din,
  output  reg   dout
  );


  always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
      dout <= 1'b0;
    else
      dout <= din;
  end
endmodule

綜合出的電路圖,如下圖所示:

圖片 通過這個圖能很明顯得看出來,比同步復(fù)位電路少用了一些資源。

優(yōu)點

*異步復(fù)位信號識別方便,很容易應(yīng)用到全局復(fù)位;

*可以節(jié)省邏輯資源(對比兩個復(fù)位電路即可看出);

缺點

*復(fù)位信號容易受到毛刺的影響,一點毛刺信號就有可能引發(fā)電路復(fù)位,造成系統(tǒng)運行錯誤。

*復(fù)位信號的釋放具有隨機性,如果復(fù)位信號釋放不滿足recovery或者removal,則會導致亞穩(wěn)態(tài)的產(chǎn)生。

當然了,其實在同步復(fù)位情況下,也會有亞穩(wěn)態(tài)問題的產(chǎn)生,詳情參考文章《 FPGA中亞穩(wěn)態(tài)——讓你無處可逃 》,作者博客園:@屋檐下的龍卷風。

3??異步復(fù)位同步釋放

對于復(fù)位情況下的亞穩(wěn)態(tài),常常是因為不滿足時序要求造成的(主要是recovery和removal),最常用的處理方式是異步復(fù)位,同步釋放。

通過異步復(fù)位和同步釋放,可以使復(fù)位信號到來時,不受時鐘控制,可以立即復(fù)位;但是復(fù)位信號釋放時,受同步時鐘控制。

電路原理圖如下:

圖片

先通過兩級觸發(fā)器進行異步復(fù)位信號的同步,輸出的信號作為后續(xù)整個系統(tǒng)的復(fù)位信號;

其對應(yīng)的代碼如下:

module test(
  input        sys_clk,        //系統(tǒng)時鐘信號
  input        async_rst_n,    //外部輸入的復(fù)位信號


  input        din,          //輸入的數(shù)據(jù)信號
  output  reg   dout          //輸出的數(shù)據(jù)信號
  );    
  reg  sync_rst_n1;            //第一級觸發(fā)器輸出
  reg  sync_rst_n2;            //第二級觸發(fā)器輸出,經(jīng)釋放同步后的復(fù)位信號


  always@(posedge sys_clk or negedge async_rst_n)begin
    if(!async_rst_n)begin
      sync_rst_n1 <= 1'b0;
      sync_rst_n2 <= 1'b0;
    end
    else begin
      sync_rst_n1 <= 1'b1;
      sync_rst_n2 <= sync_rst_n1;
    end
  end


    always@(posedge sys_clk or negedge sync_rst_n2) begin
        if(!sync_rst_n2)
      dout <= 1'b0;
    else
      dout <= din;
    end
endmodule

綜合后的電路圖如圖所示:

圖片

接下來,對該電路進行仿真分析,看看是如何異步復(fù)位、同步釋放的。testbench文件如下:

`timescale 1ns/1ps


module test_tb;


  reg  sys_clk;        //系統(tǒng)時鐘信號
  reg  async_rst_n;    //外部輸入的復(fù)位信號

  reg  din;          //輸入的數(shù)據(jù)信號
  wire  dout;          //輸出的數(shù)據(jù)信號




test test_u1(
  .sys_clk(sys_clk),        //系統(tǒng)時鐘信號
  .async_rst_n(async_rst_n),    //外部輸入的復(fù)位信號

  .din(din),          //輸入的數(shù)據(jù)信號
  .dout(dout)          //輸出的數(shù)據(jù)信號
  );    


  always #10 sys_clk = ~sys_clk;

  initial begin
    sys_clk = 0;
    async_rst_n = 0;
    din = 1;
    #19;
    async_rst_n = 1;
    #99;
    async_rst_n = 0;
    #34;
    async_rst_n = 1;
    #97;
    async_rst_n = 0;
    #3;
    async_rst_n = 1;
    #71;
    async_rst_n = 0;
    #16;
    async_rst_n = 1;

    #200;
    $stop;
  end


endmodule

當然了,我只是簡單的仿真一下,也許寫的testbench并不是很好,能說明問題即可,仿真圖如下圖所示:

圖片

上圖中,很明顯的可以看出,異步復(fù)位信號(低電平)到來時,dout立馬變?yōu)?,但是在復(fù)位信號釋放后延遲兩個周期,到第三個周期才真正的恢復(fù)到工作狀態(tài);這跟我們一開始使用的兩級觸發(fā)器對釋放信號進行同步有關(guān)系。

異步復(fù)位和同步釋放,其實可以分開來看,單純的理解為兩個信號來控制著整個系統(tǒng)。同步釋放信號相對于外部復(fù)位信號的釋放總是存在一定的延遲,不過延遲很小,也就兩個周期,實際中也是可以接受的。

關(guān)于復(fù)位電路的設(shè)計就暫時說到這里,不過好像沒有說完,還有關(guān)于配置PLL之后的系統(tǒng)復(fù)位電路怎么設(shè)計等等,以后再詳細討論

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

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601239
  • 亞穩(wěn)態(tài)
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    13234
  • 復(fù)位電路
    +關(guān)注

    關(guān)注

    13

    文章

    320

    瀏覽量

    44503
  • 時序分析
    +關(guān)注

    關(guān)注

    2

    文章

    127

    瀏覽量

    22542
收藏 人收藏

    評論

    相關(guān)推薦

    FPGA和CPLD內(nèi)部自復(fù)位電路設(shè)計方案

    本文描述了復(fù)位的定義,分類及不同復(fù)位設(shè)計的影響,并討論了針對FPGA和CPLD的內(nèi)部自復(fù)位方案。
    發(fā)表于 07-11 14:33 ?6714次閱讀
    <b class='flag-5'>FPGA</b>和CPLD內(nèi)部自<b class='flag-5'>復(fù)位</b><b class='flag-5'>電路設(shè)計</b>方案

    fpga設(shè)計實戰(zhàn):復(fù)位電路仿真設(shè)計

    最近看advanced fpga 以及fpga設(shè)計實戰(zhàn)演練中有講到復(fù)位電路的設(shè)計,才知道復(fù)位電路
    發(fā)表于 09-01 15:37 ?1686次閱讀
    <b class='flag-5'>fpga</b>設(shè)計實戰(zhàn):<b class='flag-5'>復(fù)位</b><b class='flag-5'>電路</b>仿真設(shè)計

    Xilinx FPGA入門連載17:PWM蜂鳴器驅(qū)動之復(fù)位FPGA重配置功能

    `Xilinx FPGA入門連載17:PWM蜂鳴器驅(qū)動之復(fù)位FPGA重配置功能特權(quán)同學,版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAh
    發(fā)表于 10-26 12:05

    FPGA復(fù)位電路的設(shè)計

    復(fù)位電路本文節(jié)選自特權(quán)同學的圖書《FPGA設(shè)計實戰(zhàn)演練(邏輯篇)》配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCttFPGA器件在上電后都需要有一個確定的
    發(fā)表于 04-12 06:35

    復(fù)位電路設(shè)計選型指南

    復(fù)位電路設(shè)計選型指南 介紹安森美(ON)公司及EXAR公司所生產(chǎn)的各種類型復(fù)位器件,方便工程師設(shè)計選型。
    發(fā)表于 04-02 12:12 ?0次下載

    FPGA的理想的復(fù)位方法和技巧

    FPGA設(shè)計中,復(fù)位起到的是同步信號的作用,能夠?qū)⑺械拇鎯υO(shè)置成已知狀態(tài)。在數(shù)字電路設(shè)計中,設(shè)計人員一般把全局復(fù)位作為一個外部引腳來實現(xiàn),在加電的時候初始化設(shè)計。全局
    發(fā)表于 11-22 17:03 ?5601次閱讀
    <b class='flag-5'>FPGA</b>的理想的<b class='flag-5'>復(fù)位</b>方法和技巧

    PIC24H系列參考手冊之復(fù)位

    本文主要介紹了PIC24H系列參考手冊之復(fù)位模塊。
    發(fā)表于 06-22 04:20 ?7次下載
    PIC24H系列參考手冊<b class='flag-5'>之復(fù)位</b>

    dsPIC30F系列參考手冊之復(fù)位

    本文主要介紹了dsPIC30F系列參考手冊之復(fù)位模塊。
    發(fā)表于 06-24 03:20 ?9次下載
    dsPIC30F系列參考手冊<b class='flag-5'>之復(fù)位</b>

    PIC24F系列參考手冊之復(fù)位模塊

    本文主要介紹了PIC24F系列參考手冊之復(fù)位模塊。
    發(fā)表于 06-06 17:28 ?2次下載

    FPGA怎么搭復(fù)位電路 fpga復(fù)位電路設(shè)計方案

    FPGA的可靠復(fù)位是保證系統(tǒng)能夠正常工作的必要條件,本文對FPGA設(shè)計中常用的復(fù)位設(shè)計方法進行了分類、分析和比較,并針對各種復(fù)位方式的特點,
    發(fā)表于 08-08 15:14 ?1w次閱讀

    實現(xiàn)FPGA實戰(zhàn)復(fù)位電路的設(shè)計和仿真

    最近看 advanced fpga 以及 fpga 設(shè)計實戰(zhàn)演練中有講到復(fù)位電路的設(shè)計,才知道復(fù)位電路
    發(fā)表于 12-22 12:54 ?13次下載
    實現(xiàn)<b class='flag-5'>FPGA</b>實戰(zhàn)<b class='flag-5'>復(fù)位</b><b class='flag-5'>電路</b>的設(shè)計和仿真

    stm32復(fù)位電路設(shè)計

    stm32復(fù)位電路設(shè)計
    發(fā)表于 06-26 09:26 ?8次下載

    FPGA內(nèi)部自復(fù)位電路設(shè)計方案

    。 下面將討論FPGA/CPLD的復(fù)位電路設(shè)計。 2、分類及不同復(fù)位設(shè)計的影響 根據(jù)電路設(shè)計復(fù)位
    的頭像 發(fā)表于 04-06 16:45 ?1304次閱讀

    復(fù)位電路設(shè)計分析

    我們在數(shù)字電路設(shè)計時,為了使系統(tǒng)在上電后處于 **已知的確定狀態(tài)** ,常使用復(fù)位電路來實現(xiàn)這一目的。復(fù)位是數(shù)字邏輯電路所必須的,無論是最簡
    的頭像 發(fā)表于 05-25 14:48 ?4797次閱讀
    <b class='flag-5'>復(fù)位</b><b class='flag-5'>電路設(shè)計</b>分析

    FPGA復(fù)位電路的實現(xiàn)方式

    有人說FPGA不需要上電復(fù)位電路,因為內(nèi)部自帶上電復(fù)位信號。也有人說FPGA最好加一個上電復(fù)位
    的頭像 發(fā)表于 05-25 15:50 ?3393次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>復(fù)位</b><b class='flag-5'>電路</b>的實現(xiàn)方式