亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FPGA怎么正確復位

發布時間:2022-05-25 15:22:57 來源:億速云 閱讀:221 作者:iii 欄目:大數據

本篇內容主要講解“FPGA怎么正確復位”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“FPGA怎么正確復位”吧!

1. 需不需要復位?

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

  • 預布線

  • 高扇出

  • 可靠的

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

FPGA怎么正確復位

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

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

FPGA怎么正確復位

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

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

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

FPGA怎么正確復位

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

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

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

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

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

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

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

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

同步復位的好處,不言而喻,有利于時序分析,降低亞穩態的幾率,避免毛刺。

同步信號的缺點:

  • 復位信號有效電平持續時間必須大于時鐘周期,不然時鐘可能采不到復位

  • 在沒有時鐘的時候無法復位

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

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

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

FPGA怎么正確復位

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

下面我們來舉一個例子來說明同步復位和異步復位,FPGA為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如下圖:

FPGA怎么正確復位

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

3.高復位 or 低復位?

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

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

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

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

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

  • 布線資源占用

  • 其他網絡的布線空間就相應減少

  • 可能會降低系統性能

  • 增加布線時間

  • 邏輯資源占用

  • 占用FF作為專門的復位電路

  • 如果該復位信號還受其他信號控制,會導致FF的輸入前增加門電路

  • 會增加整個設計的size

  • 增加的邏輯資源會影響系統性能

  • 增加布局布線時間

  • 全局復位不會使用像SRL16E這種高效結構

  • 在LUT中SRL16E可當作16個FF

  • 這些Virtual FF不支持復位

  • 增加設計的size,并降低系統性能

  • 增加布局布線時間

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

FPGA怎么正確復位

圖中的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如下圖:

FPGA怎么正確復位

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

到此,相信大家對“FPGA怎么正確復位”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永吉县| 宁河县| 凤山县| 武邑县| 大安市| 七台河市| 广昌县| 黄大仙区| 曲麻莱县| 合江县| 大石桥市| 达拉特旗| 高台县| 邢台县| 琼结县| 文成县| 石河子市| 偃师市| 田东县| 容城县| 抚顺县| 临清市| 太白县| 宜兰市| 湟中县| 灵台县| 绵阳市| 隆昌县| 五莲县| 龙井市| 牙克石市| 黄山市| 容城县| 乐山市| 石台县| 哈巴河县| 拉萨市| 乐昌市| 金坛市| 天津市| 绥宁县|