FPGA 基礎知識(一) 復位操作

2021-10-02 13:01:39 字數 3762 閱讀 8560

目錄

一、「復位」概述

1.1 什麼是復位

1.2 復位的目的

1.3 復位的分類

二、「高復位」or「低復位」

三、幾種實現方法

3.1 同步/非同步復位

3.1.1 同步復位

3.1.2 非同步復位

3.2 異/同步復位優缺點

3.2.1 同步復位的優點:

3.2.2 同步復位的缺點:

3.2.3 非同步復位優點(與同步復位缺點相對應來看):

3.2.4 非同步復位缺點(同上,與同步復位優點相對應來看):

3.3 非同步復位-同步釋放

四、補充說明

復位可以將fpga晶元上所有「時序器件」恢復初始態(一般認為復位後器件輸出是0)。且復位只針對時序器件存在,lut就不存在復位。

目前接觸的3gpp-phy層通訊鏈路設計中,復位大致用於兩處:

1)上電復位:讓器件進入乙個穩定的可工作狀態,防止器件上電後以乙個非期望初值執行,而導致功能異常(跑飛了)。

2)異常復位:糾正鏈路功能異常。

同步復位、非同步復位、非同步復位-同步釋放

針對xilinx的fpga晶元,xilinx官網手冊推薦使用「高復位」(控制訊號也推薦高有效),究其原因是因為xilinx的觸發器復位管腳都是高電平有效的,所以如果使用低電平復位反而會引入反相器進行處理。

也可通過下面實驗的綜合後結果看出,低電平復位會多消耗乙個lut:

a.高電平復位

b.低電平復位

所謂的「同步」 「非同步」,指復位的執行與時鐘(clk)是否同步,可通過敏感列表中是否包含復位訊號判斷。

同步復位:復位訊號和時鐘同步,當時鐘上公升沿檢測到復位訊號,執行復位操作。

always@(posedge clk)
非同步復位:不受時鐘影響,只要復位訊號有效,就會進行復位。

always@(posedge clk or posedge rst)
verilog hdl描述為:

module test_rst(

input i_clk,

input i_rst,

input i_din,

output reg o_dout

);always@(posedge i_clk)

begin

if(i_rst) o_dout <= 1'b0;

else o_dout <= i_din;

endendmodule

綜合後的rtl檢視:

verilog hdl描述為:

module test_async_rst(

input i_clk,

input i_rst,

input i_din,

output reg o_dout

);always@(posedge i_clk or posedge i_rst)

begin

if(i_rst) o_dout <= 1'b0;

else o_dout <= i_din;

endendmodule

綜合後的rtl檢視:

1)可過濾掉高於時鐘頻率的rst訊號毛刺

2)有效防止rst訊號不滿足「trecovery (recovery time,恢復時間)」 or 「tremoval (removal time,消除時間)」而產生的亞穩態。

結合同/非同步復位各自的優點,一般設計中採用「非同步復位-同步釋放」方式,即:

1)復位訊號的到來是隨機的,不與時鐘訊號的同步

2)而復位訊號釋放的時候受到時鐘訊號的同步

verilog hdl描述為:

module test_rst(

input i_clk,

input i_rst,

output reg o_rst

);reg s_rst_mid;

reg s_rst_out;

always@(posedge i_clk or posedge i_rst)

begin

if(i_rst)

begin

s_rst_mid <= 1'b0;

s_rst_out <= 1'b0;

endelse

begin

s_rst_mid <= 1'b1;

s_rst_out <= s_rst_mid;

endendalways@(posedge i_clk)

begin

o_rst <= s_rst_out;

endendmodule

綜合後的rtl檢視:

事實上針對不同廠家、不同器件需要的復位策略應該是不一樣的。

這裡主要對xilinx器件的復位做乙個小結。

1. wp272, get smart about reset: think local, not global;

2. wp275, get your priorities right - make your design up to 50% smaller.

xilinx復位:

1. 不需要全域性復位訊號;

2. 高電平復位;

3. 同步復位或非同步復位,同步釋放;

4. 不需要復位的bit就不要復位。

詳細說明:

1. xilinx不推薦使用全域性復位,並且要盡可能的避免全域性復位。首先全域性復位扇出很大,並且一般乙個設計中都有多個時鐘域,全域性復位不能與它們同步。再者,xilinx器件在配置或重配置的過程中已經完成了initialize,不需要再進行載入序列去清除memory。如果確實需要全域性復位,需小心使用,並在每個時鐘域同步乙個local reset.

4. 復位訊號會消耗很多的資源,佈線資源、邏輯資源等,所以如果確定不需要復位的訊號就不要加復位。一般沒有feedback的流水訊號完全不需要加復位,有feedback的訊號加復位時要小心,可能會導致系統跑飛。

復位消耗的資源:

1. 消耗佈線資源,降低其他連線的佈線自由度,增加佈線時間,可能導致系統效能下降;

2. 消耗邏輯資源,設計不好可能消耗更多的lut,增加布局佈線時間;

3. 因為srl16e不支援復位埠,所以不能很好的利用srl16e資源,極大的增加資源消耗。

fpga基礎知識誤點

不可以,因為一般你的always塊是上公升沿觸發的,在乙個上公升沿中捕捉另乙個上公升沿,是不太現實的。你可以給他來個快取賦值,通過判斷此刻的值和上乙個時鐘時的值是否不同,來實現判定某個變數變化的目的。可以做乙個出來,a last a if a a last 就是上公升沿了 二,狀態機,當把狀態迴圈在...

FPGA之面試基礎知識

同步電路 儲存電路狀態的轉換是在同一時鐘脈衝源的同一邊沿下同步動作的,同步時序電路的儲存電路一般用觸發器實現,所有觸發器的時鐘輸入端應接在同乙個時鐘脈衝源上,而且他們的時鐘脈衝觸發沿也都應一致。非同步電路 電路中觸發器的時鐘輸入端沒有連線在統一的時鐘脈衝上,或電路中沒有時鐘脈衝 如sr鎖存器構成的時...

FPGA架構和應用基礎知識

fpga代表現場可程式設計門陣列,它是一種半導體邏輯晶元,可程式設計成幾乎任何型別的系統或數位電路,類似於pld。pld僅限於數百個門,但fpga支援數千個門。fpga架構的配置通常使用語言來指定,即hdl 硬體描述語言 其類似於用於asic 專用積體電路 的語言。與固定功能asic技術 如標準單元...