91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

詳細解讀FPGA復位的重點

454398 ? 來源: 科學計算technomania ? 作者:貓叔 ? 2020-11-18 17:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇文章參考Xilinx White Paper:Get Smart About Reset: Think Local, Not Global

在沒看這篇文章前,回想一下平時我們常用的復位方式:
① 首先,上電后肯定是要復位一下,不然仿真時會出現(xiàn)沒有初值的情況;
② 最好有個復位的按鍵,在調試時按一下復位鍵就可以全局復位了;
③ 也許是同步復位,也許是異步復位,不同的工程師可能有不同的方案。

但如果認真看了Xilinx的White Paper,就會對復位有了新的認識。

我們把White Paper的內容總結為下面4個問題:
① 需不需要復位?
② 同步復位 or 異步復位?
③ 高復位 or 低復位?
④ 全局復位 or 局部復位?怎么用?

1. 需不需要復位?

看到這個問題,可能很多同學會有點懵,怎么可能不需要復位?其實Xilinx FPGA在系統(tǒng)上電配置時,會有一個GSR(Global Set/Reset)的信號,這個信號有以下幾個特點:
? 預布線
? 高扇出
? 可靠的

這個信號可初始化所有的cell,包括所有的Flip-Flop和BRAM。


如果我們在程序里用自己生成的復位信號,也只能復位Flip-Flop。

這個GSR信號我們可以在程序中通過實例化STARTUP直接調用,但Xilinx并不推薦這么使用。


主要原因是FPGA會把像系統(tǒng)復位這種高扇出的信號放到高速布線資源上,這比使用GSR要快,而且更容易進行時序分析。

雖然有GSR,但這并不是說要避免使用復位信號,以下兩種情況就必須要加復位:

? 帶有反饋的模塊,比如IIR這種濾波器和狀態(tài)機,當狀態(tài)跑飛了,就需要復位一下


? 應用過程中需要復位的寄存器

這個就具體看是什么應用了,我們公司的很多寄存器都需要在調試過程中需要經(jīng)常復位,像這種復位就是必須的了。

所以,需不需要復位完全看設計。這里多提一點,時序收斂也是一樣,主要看設計,而不是約束。

2. 同步復位 or 異步復位?

在HDL中,如果敏感列表中不包含rst,會被綜合成同步復位:

always @ ( posedge clk )
begin
    if(rst)
        ...
end

如果敏感列表中包含rst,則會被綜合成異步復位:

always @ ( posedge clk or posedge rst)
begin
    ...
end

同步復位的好處,不言而喻,有利于時序分析,降低亞穩(wěn)態(tài)的幾率,避免毛刺。

同步信號的缺點:
? 復位信號有效電平持續(xù)時間必須大于時鐘周期,不然時鐘可能采不到復位
? 在沒有時鐘的時候無法復位

也有很多同學會說同步復位會需要額外的資源,但對于Xilinx的FPGA,是沒有這個問題的,具體原因后面講。

對于異步復位,好處就是同步復位的反方面:脈沖寬度沒有限制,沒有時鐘也可以復位。

缺點就是異步電路,容易引起亞穩(wěn)態(tài),產(chǎn)生毛刺,不利于時序分析,而且不同觸發(fā)器的復位時間可能不同。下面這個圖中,在A時刻接收到復位信號拉低的FF可以在下一個時鐘上升沿時就釋放復位狀態(tài),但C時刻接收到復位信號拉低的FF則在下下個時鐘上升沿時才能釋放復位狀態(tài)。


按照White Paper上所講,99.99%的概率這種情況都不會發(fā)生,但如果你剛好碰到一次這種現(xiàn)象,那你就是那0.01%。

下面我們來舉一個例子來說明同步復位和異步復位,F(xiàn)PGA為V7,代碼如下:

module rst_demo(
 input clk,
 input rst1,
 input rst2,
 input in1,
 input in2,
 output reg out1,
 output reg out2);

 always @ ( posedge clk )
 begin
    if(rst1)
        out1 <= 1'b0;
    else
        out1 <= in1;
 end

 always @ ( posedge clk or posedge rst2 )
 begin
    if(rst2)
        out2 <= 1'b0;
    else
        out2 <= in2;
 end

 endmodule

綜合后的schematic如下圖:


可以看出來,同步復位和異步復位都是占用一個Storage Element,我們在之前的一篇文章中講過Storage Element可以配置為Latch,同樣的,也可以配置為FDRE和FDCE,而且在7Series手冊中也并未提到配置成FDRE或FDCE時是否會占用更多資源(比如,7Series的FPGA中,一個Slice中有8個Storage Element,如果其中一個被配置成了Latch,那有4個Storage Element是不能用的),因此在Xilinx的FPGA中,同步復位和異步復位在資源占用上,并沒有區(qū)別。

3. 高復位 or 低復位?

很多處理器上的復位都是低復位,這也導致了很多同學在使用復位信號時也習慣使用低復位了。但從我們上一節(jié)所講中可以看出,無論是同步復位還是異步復位,復位信號都是高有效,如果采用低復位,還需要增加一個反相器。

如果接收到其他處理器發(fā)過來的低有效復位信號,我們最好在頂層模塊中翻轉復位信號的極性,這樣做可以將反相器放入IO Logic中,不會占用FPGA內部的邏輯資源和布線資源。

這里多補充一點,如果使用Zynq和Microblaze,則Reset模塊默認是低復位,我們可以手動設置為高復位。

4. 全局復位 or 局部復位?怎么用?

我們對復位常用的做法是將系統(tǒng)中的每個FF都連接到某個復位信號,但這樣就造成了復位信號的高扇出,高扇出就容易導致時序的違規(guī)。而且全局復位占用的資源比我們想象中要高的多:

? 布線資源占用
? 其他網(wǎng)絡的布線空間就相應減少
? 可能會降低系統(tǒng)性能
? 增加布線時間
? 邏輯資源占用
? 占用FF作為專門的復位電路
? 如果該復位信號還受其他信號控制,會導致FF的輸入前增加門電路
? 會增加整個設計的size
? 增加的邏輯資源會影響系統(tǒng)性能
? 增加布局布線時間
? 全局復位不會使用像SRL16E這種高效結構
? 在LUT中SRL16E可當作16個FF
? 這些Virtual FF不支持復位
? 增加設計的size,并降低系統(tǒng)性能
? 增加布局布線時間

因此,Xilinx推薦盡量使用局部復位的方式,前面我們也講到然同步復位和異步復位都多多少少有些問題,那有沒有一種方式可以結合同步復位和異步復位的優(yōu)點?當然有,就是異步復位,同步釋放。這種方法可以將兩者結合起來,取長補短。如下圖所示,所謂異步復位,就是輸入的復位信號仍然是異步的,這樣可以保證復位信號能夠起效;而同步釋放是指當復位信號釋放時,輸出的sys_rst并不是立即變化,而且被FF延遲了一個時鐘周期,這樣讓復位和時鐘同步起來。


圖中的Verilog代碼如下:

module rst_demo(
 input      clk, 
 input      rst_async, 
 (* keep = "true" *)
 output  reg  rst_module1 = 0,
 (* keep = "true" *)
 output  reg  rst_module2 = 0
    );

reg         sys_rst;
reg         rst_r;

always @(posedge clk or posedge rst_async) begin
    if (rst_async) begin
        rst_r <= 1'b1;
    end
    else begin
        rst_r <= 1'b0;
    end
end

always @(posedge clk or posedge rst_async) begin
    if (rst_async) begin
        sys_rst <= 1'b1;
    end
    else begin
        sys_rst <= rst_r;
    end
end

always @ ( posedge clk ) begin
    rst_module1 <= sys_rst;
    rst_module2 <= sys_rst;
end

endmodule

綜合后的schematic如下圖:


異步復位模塊輸出的sys_rst通過n個D觸發(fā)器后輸出給n個模塊,當做模塊的復位信號。

總結

在使用復位信號時,考慮這個寄存器需不需要在運行過程中進行復位,如果只需要上電后復位一次,那只需在定義時寫上初值即可,無需使用其他復位信號;在Xilinx的FPGA中盡量使用高有效的復位信號,采用異步復位同步釋放的方式,并且要將復位信號局部化,避免使用高扇出的全局復位。

編輯:hfy


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

    關注

    1660

    文章

    22406

    瀏覽量

    636104
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    129943
  • Xilinx
    +關注

    關注

    73

    文章

    2200

    瀏覽量

    131107
  • 復位信號
    +關注

    關注

    0

    文章

    70

    瀏覽量

    6814
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MAX709 電源監(jiān)控復位芯片:設計與應用全解析

    各種電源條件下都能正常工作是非常必要的。今天,我們就來詳細介紹一款優(yōu)秀的電源監(jiān)控復位芯片——MAX709。 文件下載: MAX709.pdf 一、MAX709 概述 MAX709 是 Maxim 公司推出的一款電源監(jiān)控復位芯片,
    的頭像 發(fā)表于 02-28 10:10 ?124次閱讀

    MAX6467/MAX6468:微處理器監(jiān)控復位電路新選擇

    MAX6467/MAX6468:微處理器監(jiān)控復位電路新選擇 在電子設備的設計中,微處理器的穩(wěn)定運行至關重要,而監(jiān)控復位電路則是保障其穩(wěn)定的關鍵組件。今天就來和大家詳細介紹一下Analog
    的頭像 發(fā)表于 02-27 15:05 ?101次閱讀

    MAX6443–MAX6452:具備長手動復位設置周期的微處理器復位電路

    MAX6443–MAX6452:具備長手動復位設置周期的微處理器復位電路 在電子設備的設計中,微處理器復位電路起著至關重要的作用,它能確保設備在各種情況下穩(wěn)定運行。今天我們就來詳細了解
    的頭像 發(fā)表于 02-27 14:45 ?85次閱讀

    使用Aurora 6466b協(xié)議實現(xiàn)AMD UltraScale+ FPGA與AMD Versal自適應SoC的對接

    在本博客中,我們將介紹使用 Aurora 6466b 協(xié)議實現(xiàn) AMD UltraScale+ FPGA 與 AMD Versal 自適應 SoC 的對接。我們還將涵蓋有關 IP 配置、FPGA 之間的連接、時鐘設置以及復位拓撲
    的頭像 發(fā)表于 01-13 14:04 ?3334次閱讀
    使用Aurora 6466b協(xié)議實現(xiàn)AMD UltraScale+ <b class='flag-5'>FPGA</b>與AMD Versal自適應SoC的對接

    天合儲能Elementa系列產(chǎn)品的防爆安全設計解讀

    在最新一期 BESS 系列視頻中,天合儲能聚焦 NFPA 69 標準,對 Elementa 儲能系統(tǒng)防爆安全設計進行了詳細解讀
    的頭像 發(fā)表于 12-22 15:16 ?625次閱讀

    如何使用FPGA實現(xiàn)SRIO通信協(xié)議

    本例程詳細介紹了如何在FPGA上實現(xiàn)Serial RapidIO(SRIO)通信協(xié)議,并通過Verilog語言進行編程設計。SRIO作為一種高速、低延遲的串行互連技術,在高性能計算和嵌入式系統(tǒng)中廣
    的頭像 發(fā)表于 11-12 14:38 ?5732次閱讀
    如何使用<b class='flag-5'>FPGA</b>實現(xiàn)SRIO通信協(xié)議

    基于FPGA平臺的蜂鳥E203 JTAG debug出錯問題的解決思路

    固化存在的問題并不大,只需要按照硬件電路完成管腳的刪減和映射(約束)即可,這里重點說明一下debug出錯問題的解決思路。 我在FPGA固化文件完成后,在上位機SDK中debug helloworld
    發(fā)表于 10-28 07:38

    HarmonyOSAI編程智能代碼解讀

    CodeGenie > Explain Code,開始解讀當前代碼內容。 說明 最多支持解讀20000字符以內的代碼片段。 使用該功能需先完成CodeGenie登錄授權。 本文主要從參考引用自HarmonyOS官方文檔
    發(fā)表于 09-02 16:29

    GraniStudio:軸復位例程

    1.文件運行 導入工程 雙擊運行桌面GraniStudio.exe。 通過引導界面導入軸復位例程,點擊導入按鈕。 打開軸復位運動例程所在路徑,選中軸復位運動.gsp文件,點擊打開,完成導入。 2.
    的頭像 發(fā)表于 08-22 16:05 ?659次閱讀
    GraniStudio:軸<b class='flag-5'>復位</b>例程

    開源的e203rtl 可以在FPGA板子(DDRt)跑50M主頻嗎?

    開源的e203rtl 可以在FPGA板子(DDRt)跑50M主頻嗎? 跑25M時,可以通過spi打印出來數(shù)數(shù)據(jù),但是跑50M主頻時候,看似下載進去了,什么也沒打印出來,有遇到這個問題的同學嗎?老師或者大佬可以解讀一下嗎?用的芯來的全套東西,
    發(fā)表于 07-11 07:58

    GraniStudio零代碼平臺軸復位算子支持多少個軸同時復位,有哪些回零模式?

    GraniStudio平臺在軸復位的功能上未對同時復位的軸數(shù)進行硬性限制,理論上支持任意數(shù)量軸同步復位,需要考慮的是在做多軸同步復位時要評估機械安全風險,建議提前確認機械在多軸同時
    的頭像 發(fā)表于 07-07 18:02 ?661次閱讀
    GraniStudio零代碼平臺軸<b class='flag-5'>復位</b>算子支持多少個軸同時<b class='flag-5'>復位</b>,有哪些回零模式?

    【經(jīng)驗分享】玩轉FPGA串口通信:從“幻覺調試”到代碼解析

    FPGA開發(fā),思路先行!玩FPGA板子,讀代碼是基本功!尤其對從C語言轉戰(zhàn)FPGA的“寶貝們”來說,適應流水線(pipeline)編程可能需要點時間。上篇點燈代碼解讀了基礎,而如果能親
    的頭像 發(fā)表于 06-05 08:05 ?1088次閱讀
    【經(jīng)驗分享】玩轉<b class='flag-5'>FPGA</b>串口通信:從“幻覺調試”到代碼解析

    SPI協(xié)議,寄存器解讀

    最近在學習SPI協(xié)議,對寄存器操作不是特別熟練。發(fā)帖希望有大佬能從寄存器角度提供幫助,幫忙指導根據(jù)手冊去解讀協(xié)議。有償。
    發(fā)表于 05-22 20:08

    【高云GW5AT-LV60 開發(fā)套件試用體驗】代碼解讀-點燈實驗

    這篇文章解讀一下開發(fā)板的第一個demo,這個demo是個點燈demo,通過這個demo可以讓小白了解高云開發(fā)的基本過程,所以也是非常重要的,如果之前完全沒用過高云的產(chǎn)品,通過學習這篇文章可以快速
    發(fā)表于 05-17 20:23

    復位電路的作用、控制方式和類型

    復位電路也是數(shù)字邏輯設計中常用的電路,不管是 FPGA 還是 ASIC 設計,都會涉及到復位,一般 FPGA或者 ASIC 的復位需要我們自
    的頭像 發(fā)表于 03-12 13:54 ?3950次閱讀
    <b class='flag-5'>復位</b>電路的作用、控制方式和類型