經歷了無數的筆試面試之后,不知道大家有沒有發現FPGA的筆試面試還是有很多共通之處和規律可循的。所以一定要掌握筆試面試常考的問題。
FPGA設計方向(部分題目)
1. 什么是同步邏輯和異步邏輯?
同步邏輯 是指在同一個時鐘信號的控制下進行工作的電路。電路中所有觸發器的狀態變化都與時鐘信號同步。它具有穩定、可預測的優點,是FPGA設計的主流方法。
異步邏輯 是指電路中的各個部分沒有統一的時鐘信號,電路狀態的改變由輸入信號的變化直接引起。異步設計在某些特定場景下有優勢,但由于時序難以控制,容易產生亞穩態,因此在FPGA設計中應盡量避免。
2. 同步電路和異步電路的區別:
同步電路:所有存儲元件(如觸發器)的時鐘輸入端都連接同一個時鐘源。
異步電路:沒有統一的時鐘源,部分或全部存儲元件的狀態變化與時鐘信號無關。
3. 時序設計的實質:
時序設計的實質就是滿足每一個觸發器的建立/保持時間的要求。
4. 建立時間與保持時間的概念?
建立時間:在時鐘有效沿到來之前,數據必須保持穩定的最小時間。
保持時間:在時鐘有效沿到來之后,數據必須保持穩定的最小時間。
5. 為什么觸發器要滿足建立時間和保持時間?
因為觸發器內部對輸入信號進行采樣和鎖存需要一定的時間。如果不滿足建立/保持時間,觸發器可能會進入亞穩態。亞穩態是指觸發器的輸出進入一種不穩定的中間狀態,無法在規定的時間內確定是高電平還是低電平,這可能導致后續電路產生錯誤。
6. 什么是亞穩態?為什么兩級觸發器可以防止亞穩態傳播?
亞穩態 是指觸發器在不滿足建立/保持時間時,其輸出進入的一種不確定的狀態。
兩級觸發器(也叫“一位同步器”)是解決亞穩態的常用方法。其原理是:如果第一級觸發器由于輸入信號不滿足時序要求而進入亞穩態,在下一個時鐘周期到來之前,它通常有足夠的時間從亞穩態恢復到穩定的邏輯電平。只要恢復后的穩定信號滿足第二級觸發器的建立時間,第二級觸發器就不會進入亞穩態,從而有效地防止亞穩態的傳播。
7. 什么是時鐘抖動(Clock Jitter)?
時鐘抖動 是指時鐘信號的有效沿相對于其理想位置的隨機偏移。它會導致時鐘周期在不同時刻發生輕微的變化,從而影響設計的時序裕量。在高速設計中,時鐘抖動是一個需要重點考慮的因素。
8. 鎖存器(Latch)和觸發器(Flip-flop)區別?
鎖存器 是電平敏感的存儲元件。當使能信號處于有效電平時,其輸出會隨著輸入信號的變化而變化。
觸發器 是邊沿敏感的存儲元件。其輸出只在時鐘信號的上升沿或下降沿才會發生變化。
在FPGA設計中,除非有特殊需要,通常應避免使用鎖存器,因為它難以進行時序分析,且在不同的FPGA架構上表現可能不一致。
9. FPGA 芯片內有哪兩種存儲器資源?
FPGA芯片內通常有兩種主要存儲器資源:
Block RAM (BRAM): 是一種專用的、容量較大的存儲塊,可配置為單端口、雙端口、FIFO等模式。使用BRAM可以節省查找表(LUT)資源,并提供更高的存儲速度。
分布式RAM: 利用FPGA內部的查找表(LUT)資源來構建小型存儲器。這種方式靈活但會消耗邏輯資源。
10. 什么是片上調試(On-chip Debugging)?常用的工具是什么?
片上調試 是指在FPGA運行時,通過專用硬件模塊(如JTAG)來實時監控內部信號波形和狀態,以幫助設計者發現和解決問題。
常用的工具包括Xilinx的Vivado ILA (Integrated Logic Analyzer) 和Intel的SignalTap II。這些工具可以在不影響設計功能的情況下,像示波器一樣捕獲和分析內部信號。
RTL代碼方向(部分題目)
1. 請解釋一下
always_ff
和always_comb
的用法及優勢。
always_ff
:用于描述同步時序邏輯。它強制在敏感列表中只包含時鐘和異步復位信號,避免了編寫組合邏輯時誤用阻塞賦值(=
)的問題,提高了代碼的可讀性和健壯性。
always_comb
:用于描述組合邏輯。它能夠自動推斷所有輸入信號,并對編寫組合邏輯時可能出現的鎖存器警告進行檢查。使用這兩個新關鍵字是SystemVerilog的最佳實踐,它們比傳統的
always @(*)
更具可讀性和安全性。2. 阻塞賦值(
=
)與非阻塞賦值(<=
)的區別?在什么場景下使用?阻塞賦值(
=
):賦值操作在當前語句執行后立即完成。常用于組合邏輯。非阻塞賦值(
<=
):賦值操作在當前時鐘周期結束時才完成。常用于時序邏輯,以避免競爭冒險。3.
parameter
和localparam
的區別?
parameter
:可以在模塊實例化時被修改,常用于定義模塊的參數,如數據位寬、深度等。
localparam
:只能在當前模塊內部使用,不能被外部修改。常用于定義模塊內部的常量。綜合與約束(部分題目)
1. 請列舉幾個你知道的SDC(Synopsys Design Constraints)命令,并說出它的用途。
SDC是FPGA設計中用來進行時序約束的標準文件。常見的命令包括:
create_clock
:定義時鐘信號及其頻率。
set_input_delay
:設置輸入端口的時序約束,告訴工具輸入信號在時鐘到來前多長時間到達。
set_output_delay
:設置輸出端口的時序約束,告訴工具輸出信號在時鐘到來后多長時間有效。
set_false_path
:告訴工具忽略某些路徑的時序分析,常用于異步或不相交的時鐘域之間的路徑。
set_max_delay
:對特定路徑設置最大延遲。2. 什么是時序收斂(Timing Closure)?如何解決?
時序收斂 是指在設計中,所有時序路徑都滿足建立時間和保持時間的要求。如果存在不滿足的路徑,則稱為時序違例(Timing Violation)。
解決時序違例的方法包括:
修改約束:檢查SDC文件是否正確,例如時鐘頻率設置過高或路徑約束不合理。
優化RTL代碼:例如,使用流水線技術、減少組合邏輯的級數、增加寄存器等。
優化綜合和布局布線選項:調整工具的策略,如提高優化級別、嘗試不同的布線算法等。
FPGA筆試面試經驗總結
無論是數字IC還是FPGA,很多基礎理論是相通的。掌握這些核心知識點,并結合FPGA的獨特應用場景進行深入學習,你就能在面試中脫穎而出。