目錄
一、「復位」概述
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技術 如標準單元...