记录FPGA面试的准备
目錄
- 一、模擬面試(一)
- 1.解釋競爭與冒險的概念:
- 如何消除競爭與冒險:
- 具體層面應當如何做:
- 2.時序邏輯電路與組合邏輯電路的區別是什么:
- 被綜合成電路之后的器件是什么:
- 在代碼中時兩種電路如何表現:
- 什么是同步時序電路和異步時序邏輯電路
- 3:米利狀態機和摩爾狀態機的區別是什么:
- 4.什么是建立時間和保持時間:(西安)
- 如果不滿足將導致什么?
- 如何解決:
- 不同比特的數據傳輸,又如何消除亞穩態:
- 5.信號同步—打拍的作用是什么:
- 6.什么是圖像邊緣檢測:
- 7.UART協議的內容是什么:(北京—代碼)
- 速率大小是多少:
- 什么是起始位?
- 校驗位是什么:
- 8.什么是IIC協議?(北京—描述)中間采樣時是什么狀態:
- 9.阻塞賦值和非阻塞賦值的區別是什么:
- 10.FPGA 和ASIC開發的區別
- 11.時鐘分頻操作(北京—2分頻)
- 總結:
- 二、實戰問題(西安北京深圳)
- 易失性與非易失性存儲器
- 事件、進程、敏感信號
- Verilog代碼執行的七個步驟
- 連續賦值、過程性賦值、過程性連續賦值、重新賦值
- 乒乓緩存
- 參考:
一、模擬面試(一)
1.解釋競爭與冒險的概念:
在組合電路中,某一輸入變量經過不同途徑傳輸(信號改變或進行一些邏輯運算),到達電路中某一匯合點的時間有先有后,這種現象稱競爭(Race)。競爭的結果將很可能導致冒險(Hazard)發生(例如產生毛刺),即輸出信號沒有能完全同步改變,從而引發短暫時間內的錯誤信號脈沖輸出。(即由于競爭產生毛刺叫做冒險)。
競爭不一定產生冒險,但有冒險一定有競爭。
補充:
1.信號在器件內部通過連線和邏輯單元時,都有一定的延時。延時的大小與連線的長短和邏輯單元的數目有關,同時還受器件的制造工藝、工作電壓、溫度等條件的影響。信號的高低電平轉換也需要一定的過渡時間。在信號變化的瞬間,組合邏輯的輸出有先后順序,并不是同時變化,往往會出現一些不正確的尖峰信號,這些尖峰信號稱為"毛刺"。如果一個組合邏輯電路中有"毛刺"出現,就說明該電路存在冒險。
2.在對組合邏輯電路進行分析及設計時,通常沒有考慮器件的延時問題,而實際器件是存在延時的,競爭冒險現象就是由于器件的延時造成的。
3.毛刺不一定會造成危害。避免冒險的最簡單的方法是同一時刻只允許單個輸入變量發生變化(選通信號),或者使用寄存器采樣(打拍——獲取確定的電平)的辦法。
寄存器:由具有存儲功能的觸發器組合起來構成的。按功能可將寄存器分為基本寄存器和移位寄存器?;炯拇嫫髦荒懿⑿兴腿霐祿?#xff0c;也只能并行輸出。移位寄存器則比較靈活。在計算機領域,寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制寄存器。
寄存器是CPU內部用來存放數據的一些小型存儲區域,用來暫時存放參與運算的數據和運算結果。其實寄存器就是一種常用的時序邏輯電路,但這種時序邏輯電路只包含存儲電路。寄存器的存儲電路是由鎖存器或觸發器構成的。
存儲器Block,設計的是片上外設,它們以四個字節為一個單元,共32bit,每一個單元對應不同的功能。根據每個單元功能的不同,以功能為名給這個內存單元取一個別名,這個別名就是我們經常說的寄存器,這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。
觸發器:當CLK到來時電路中的存儲單元才被“觸發”而動作,并根據輸入信號改變輸出狀態。把這種在時鐘信號觸發時才能動作的存儲單元電路稱為觸發器,以區別沒有時鐘信號控制的鎖存器。
存儲器本身沒有地址,給存儲器分配地址的過程叫存儲器映射
如何消除競爭與冒險:
1、加濾波電路,消除毛刺的影響;
2、加選通信號,避開毛刺;
3、增加冗余項消除邏輯冒險。
具體層面應當如何做:
1.可以在輸入端并聯一個電容器,這主要靠電容的平波作用,來濾去其尖脈沖,使其落在能進行正常邏輯判斷的電平值之內,從而消除輸出端邏輯出錯的可能。
2.在電路上加上一個選通信號,當輸入信號變化時,輸出端與電路斷開,當輸入穩定后,選通信號工作,使信號傳輸到輸出端。
3.利用冗余項消除毛刺函數式和真值表所描述的是靜態邏輯,而競爭則是從一種穩態到另一種穩態的過程。因此競爭是動態過程,它發生在輸入變量變化時。此時,修改卡諾圖,增加多余項,在卡諾圖的兩圓相切處增加一個圓,可以消除邏輯冒險。但該法對于計數器型產生的毛刺是無法消除的。
4.在設計中對所有模塊的輸入時鐘、輸入信號、輸出信號都用D觸發器或寄存器進行同步處理,即輸出信號直接來自觸發器或寄存器的輸出端。這樣可以消除尖峰和毛刺信號。
2.時序邏輯電路與組合邏輯電路的區別是什么:
1、輸入輸出關系
組合邏輯電路是任意時刻的輸出僅僅取決于該時刻的輸入,與電路原來的狀態無關。
時序邏輯電路是不僅僅取決于當前的輸入信號,而且還取決于電路原來的狀態,或者說,還與以前的輸入有關。
2、有無存儲(記憶)單元
組合邏輯電路沒有存儲記憶,時序邏輯電路卻包含了存儲記憶。
3、結構特點
組合邏輯電路只是包含了電路。但是時序邏輯電路包含了組合邏輯電路+存儲電路,輸出狀態必須反饋到組合電路的輸入端,與輸入信號共同決定組合邏輯的輸出。
被綜合成電路之后的器件是什么:
時序邏輯:寄存器——D觸發器
組合邏輯:線(電線)
在代碼中時兩種電路如何表現:
時序電路:always @(posedge clk or negedge rst_n) begin … end
組合電路:always @(*) begin … end || assign X=Y
什么是同步時序電路和異步時序邏輯電路
同步邏輯是時鐘之間有固定的因果關系。異步邏輯是各時鐘之間沒有固定的因果關系。
同步時序邏輯電路:各觸發器的時鐘端全部連接在一起,并接在系統 時鐘端,只有當時鐘脈沖到來時,電路的狀態才能改變。改變后的狀態將一直保持到下 一個時鐘脈沖的到來,此時無論外部輸入 x 有無變化,狀態表中的每個狀態都是穩定的。
異步時序邏輯電路:電路中除可以使用帶時鐘的觸發器外,還可以使用不帶 時鐘的觸發器和延遲元件作為存儲元件,電路中沒有統一的時鐘,電路狀態的改變由外部輸入的變化直接引起。
3:米利狀態機和摩爾狀態機的區別是什么:
摩爾型(Moore):輸出僅僅依賴于當前狀態,與輸入條件無關;
米勒型(Mealy):輸出不僅依賴當前狀態而且依賴該狀態接下來的的輸入條件;
輸出時序上,Moore狀態機同步輸出,Mealy狀態機異步輸出;
輸出變化上,Mealy狀態機比Moore狀態機領先一個時鐘周期;
兩種狀態機均為組合邏輯輸出(加上寄存器——D觸發器變成時序邏輯輸出):組合起來用,會具有更好的時序性能。
Moore類型的更安全,輸出總在時鐘邊沿變化,但會造成延時,需要更多邏輯來對輸出進行解碼;
Mealy類型的更快,在同一個周期內反應,但會造成異步反饋,且一些時序電路只能Moore類型的來實現。
補充:
1.寄存器輸出型結構適用于組成時序電路。這種輸出結構是在或門之后增加了一個由時鐘上升沿觸發的D觸發器和一個三態門,并且D觸發器的輸出還反饋到可編程的與陣列中進行時序控制。
2.組合型輸出結構適用于組合電路。常見的有或門輸出、或非門輸出、與或門輸出、與或非門輸出以及帶互補輸出端的或門等。
3.與非門是數字電路的一種基本邏輯電路。
4.什么是建立時間和保持時間:(西安)
建立時間(Tsu):觸發器在時鐘上升沿到來之前,其數據輸入端的數據必須保持不變的時間。
保持時間(Th):觸發器在時鐘上升沿到來之后,其數據輸入端的數據必須保持不變的時間。
Tco:數據從被時鐘打入到觸發器至到達觸發器輸出端的延時時間
補充:
1.對于觸發器而言,只有在時鐘clk上升沿到來的那一刻才會改變觸發器的輸出值;
2.在仿真器上,時鐘的上升沿或者下降沿是沒有延時的(表現為直上或者直下),但是在實際工程中,時鐘上升沿或者下降沿是傾斜的,即時鐘的上升或者下降是需要一定時間的。
3.對于建立時間而言,需要考慮的重點在于:數據經過第一個觸發器和組合邏輯logic之后,要比下一個時鐘上升沿更快地到達第二個觸發器。
換言之,當輸入數據D在時鐘上升沿來之前沒有到達傳輸門,那么當時鐘上升沿來之后,采樣的數據將會是不確定的。
4.對于保持時間而言,需要考慮的重點在于:數據經過第一個觸發器和組合邏輯logic之后,要在時鐘上升沿到來之后還能保持一定的時間。
否則可能會造成前一寄存器的輸出太快導致后一級寄存器來不及采樣正確的數據。
如果不滿足將導致什么?
觸發器內部數據的傳輸也需要一定的時間,如果不滿足建立和保持時間,觸發器將進入亞穩態,進入亞穩態后觸發器的輸出將不確定。這時需要經過一個決斷時間,其輸出才能穩定為0或1,但穩定后的值卻并不一定是你的輸入值,因為穩定后是0還是1是隨機的。
亞穩態是指觸發器無法在某個規定時間段內達到一個可確認的狀態。
在決斷時間里信號是不確定的,振蕩毛刺等,并且這種無用的輸出電平可以沿信號通道上的各個觸發器級聯式傳播下去。
只要系統中有異步元件,亞穩態就無法避免,同步系統則不會出現。
亞穩態發生的原因:
(1)在跨時鐘域信號傳輸時,由于源寄存器時鐘和目的寄存器時鐘相移未知,所以源寄存器數據發出數據,數據可能在任何時間到達異步時鐘域的目的寄存器,所以無法保證滿足目的寄存器Tsu和Th的要求;
(2)在異步信號采集中,由于異步信號可以在任意時間點到達目的寄存器,所以也無法保證滿足目的寄存器Tsu和Th的要求。
如何解決:
1.降低系統時鐘頻率——給予充足的決斷時間,讓數據穩定下來
2.用反應更快的FIFO——防止保持時間的不足,而導致數據丟失
3.用同步機制
二級觸發器——不穩的信號不會進入第二級觸發器
同步打拍 ——繞過不穩定的信號
4.改善時鐘質量,用邊沿變化快速的時鐘信號——亞穩態的根源之一就是時鐘高低電平不能立即轉變
不同比特的數據傳輸,又如何消除亞穩態:
單 bit 信號:直接多級寄存器同步法,一般采用 2-3 級寄存器進行同步處理,這個 2-3 級寄存器也稱作同步器。
多 bit 信號:異步 FIFO 或者使用多次握手同步方法。 在握手協議中,異步的 REQ/ACK 也需要使用單 bit 同步技術進行同步處理,異步 FIFO 也是如此。
5.信號同步—打拍的作用是什么:
同步操作表現在電路當中是相當于加了一級寄存器,主要用于時序邏輯的設計,也方便進行時序約束。
打拍的時序效果,可以理解為把某個信號延遲了一個或多個時鐘周期
將信號打一拍的方法是將信號通過一次寄存器,而且必須在IOB里面的寄存器中打一拍。因為,從FPGA的PAD到IOB里面的寄存器是有專用布線資源的,而到內部其他寄存器沒有專用的布線資源。
單比特信號從快速時鐘域同步到慢速時鐘域僅僅使用打兩拍的方式則會漏采數據。
6.什么是圖像邊緣檢測:
邊緣檢測的目的是標識數字圖像中亮度變化明顯的點。
圖像邊緣檢測大幅度地減少了數據量,并且剔除了可以認為不相關的信息,保留了圖像重要的結構屬性。
1.濾波:輸入端輸入圖像的各元素值的數據元素集,計算所述數據元素的至少一階和/或二階導數。
2.增強:增強算法將領域中灰度有顯著變化的點突出顯示。一般通過計算梯度幅值完成。
3.檢測:但在有些圖像中梯度幅值較大的并不是邊緣點。校正因數α對于由對象的曲率和/或所述數據的模糊造成的邊緣錯位進行校正。
4.定位:精確確定邊緣的位置。
7.UART協議的內容是什么:(北京—代碼)
是一種全雙工、異步、串行通信方式的通用異步收發傳輸器:
發送數據時將并行數據轉換成串行數據來傳輸,
接收數據時將接收到的串行數據轉換成并行數據。
速率大小是多少:
什么是起始位?
開始進行數據傳輸時發送方要先發出一個低電平’0’來表示傳輸字符的開始。因為空閑位一直是高電平所以,可以開始第一次通訊時先發送一個明顯區別于空閑狀態的信號(即低電平)代表起始位,開始傳輸數據。
校驗位是什么:
一般為奇偶校驗位:
數據位傳送完成后,要進行奇偶校驗,
奇校驗(odd parity):如果數據位中’1’的數目是偶數,則校驗位為’1’,如果’1’的數目是奇數,校驗位為’0’。讓‘1’保持為奇數。
偶校驗(even parity):如果數據為中’1’的數目是偶數,則校驗位為’0’,如果為奇數,校驗位為’1’。讓‘1’保持為偶數。
補充:
停止位(高電平)不僅僅是表示傳輸結束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。
8.什么是IIC協議?(北京—描述)中間采樣時是什么狀態:
集成電路總線,是一種兩線式串行總線。
由數據線 SDA 和時鐘線 SCL 構成通信線路,既可用于發送數據,也可接收數據,是一種同步半雙工通信協議。
只有在SCL為高電平的,SDA為穩定信號時,才會對數據采樣。即在SCL為低電平的時候,SDA就要準備好。
補充:
每發送一個字節(8bit),就必須在第 9 個 SCL脈沖期間釋放 SDA,由接收端反饋一個應答信號。
誰接收數據就由誰發應答信號。
應答信號為低電平(為 0)時,稱為有效應答位(ACK)。
應答信號為高電平(為 1)時,稱為非應答位(NACK),表示接收端接收該字節(8bit)失敗。
數據接收失敗或者數據傳輸結束都要發送 NACK。
起始信號、停止信號是由主機主動建立的。
9.阻塞賦值和非阻塞賦值的區別是什么:
1.阻塞和非阻塞賦值的區別在阻塞是順序執行而非阻塞是并行執行。
2.阻塞賦值操作符用等號(即=)表示,而非阻塞賦值用小于等于號(即<=)表示。
3.阻塞賦值在順序安排不好時會出現競爭。非阻塞賦值允許其他的Verilog語句同時操作。
4.
非阻塞賦值:在時鐘上升沿到來時,阻塞賦值的執行可以認為是有兩個步驟的操作。賦值開始,先執行賦值語句右邊的值,然后將begin-end之間的所有賦值語句同時賦值到賦值語句的左邊,賦值結束,更新左邊的值。
阻塞賦值和時鐘沿無關,阻塞賦值的執行可以認為是只有一個步驟的操作。在賦值時先計算等號右手部分的值,這時賦值語句不允許任何別的Verilog語句的干擾,直到現行的賦值完成時刻,才允許別的賦值語句的執行。
補充:
注意:是begin—end之間的所有語句,一起執行,且一個時鐘只執行一次。即非阻塞賦值允許其他的Verilog語句同時進行操作——并行執行。
非阻塞賦值操作只能用于對寄存器類型變量進行賦值,因此只能用在"initial”塊和“always@"塊等過程塊中,而且非阻塞賦值不允許用于連續賦值。
如果在一個過程塊中阻塞賦值的RHS變量正好是另一個過程塊中阻塞賦值的LHS變量,這兩個過程塊又用同一個時鐘沿觸發,這時阻塞賦值操作會出現問題,即如果阻塞賦值的順序安排不好,就會出現競爭。若這兩個阻塞賦值操作用同一個時鐘沿觸發,則執行的順序是無法確定的。
在同一個always語句塊中不允許兩種賦值都用;
不允許同一個變量在不同的always語句塊中被賦值。
為了不出錯,不要在時序邏輯中用阻塞賦值。
10.FPGA 和ASIC開發的區別
利用 EDA 技術進行電子系統設計的最后目標是完成專用集成電路 ASIC 的設計和實現;即ASIC設計是用CPLD(復雜可編程邏輯器件)和 FPGA(現場可編程邏輯門陣列)來進行的。
ASIC是一種在設計時就考慮了設計用途的IC。FPGA也是一種IC。
ASIC基本都是基于標準單元開始設計。ASIC在離開生產線后再也無法改變。ASIC設計流程非常昂貴,周期長。
FPGA基于預制的門和觸發器。如果有錯誤,可以在幾秒鐘內重新編程,周期短,是一種半定制電路。
ASIC在設計中浪費的材料非常少。對于FPGA,總是有很多的硬件資源被浪費。這意味著FPGA的重復成本通常高于同類ASIC的重復成本。
盡管ASIC的重復成本非常低,但其非重復成本相對較高且通常達到數百萬。由于它是非重復性的,因此每個IC(集成電路)的成本隨著量的增加而減少。
所以,在ASIC量產到一定量之后,使用ASIC可以比使用FPGA更便宜。與FPGA相比,ASIC在功耗,性能,尺寸和成本方面具有很大優勢。
FPGA就是輸出一個配置文件,告訴 FPGA芯片該怎么樣去配置其電路,使其實現預期功能。
ASIC就是輸出一個版圖文件,告訴代工廠該怎么去腐蝕硅片,該怎么連金屬。
ASIC設計對時鐘和復位更加重視。
FPGA多用現成IP,需要考慮資源的均衡。
ASIC考慮的永遠是性能和功耗,在邏輯選擇上除了SRAM,CLK和復位相關,都是手寫的,邏輯基本沒有浪費,也更加緊湊。
ASIC的邏輯通常遠遠大于FPGA的,門數上有數量級的差別,運行時鐘也遠遠高于FPGA。
FPGA連線資源有限,所以需要不斷地調整,在保證時序要求的情況下,把你的電路映射到其固定的資源分布圖中間。
ASIC一般是根據周邊電路需求,時序要求,把你的電路放到芯片的某個位置。在擺好之后還得考慮連線是否能通,各級延時是否能滿足電路的建立和保持時間要求等等。
補充:
FPGA(Field Programmable Gate Array-----現場可編程邏輯門陣列)
是在PAL (可編程陣列邏輯)、GAL(通用陣列邏輯)等可編程器件的基礎上進一步發展的產物。
11.時鐘分頻操作(北京—2分頻)
偶數分頻器的設計較為簡單,用一個簡單的計數器就可以實現。比如要實現一個N分頻(N為偶數)的分頻器,可以先寫一個計數器,當計數到(N/2-1)時,讓輸出狀態翻轉,并將計數器清零,這樣輸出的信號就是輸入時鐘的N分頻了。
else //復位信號無效;beginif(cnt == 4) //每一次時鐘上升沿到來時,都檢查一次計數值是否達到4;beginclk_div10 <= ~clk_div10;cnt <= 0; //計數器計數到4后,重新清零;計數值為4意味著已經計了5個周期,這時10分頻時鐘翻轉一次;endelse //如果計數器未計數到4,則來一個上升沿加1,同時分頻時鐘繼續保持原值不變。begincnt <= cnt + 1; clk_div10 <= clk_div10; //否則繼續保持;endend奇數分頻器的設計比偶數分頻器復雜一些,特別是占空比為50%的奇數分頻器。如果對占空比沒有明確的要求,則可以直接對上升沿計數,計數到(N-1)/2 時讓輸出翻轉,計數到(N-1)時讓輸出狀態再次翻轉,并將計數器清零,這樣就可以得到一個占空比為2:3的N分頻(N為奇數)的分頻器。而如果要實現50%的占空比,可以通過“錯位相或”的方法實現。具體方法是用剛才的方法先通過對上升沿計數產生一個占空比為不是50%的N分頻器,再用同樣的方法對下降沿計數產生一個占空比也不是50%的N分頻器,最后將兩個分頻器的輸出進行“或”運算,就可以得到占空比為50%的奇數N分頻器,
reg [2:0] div_cnt; //5分頻always@(posedge clk or negedge rst_n) beginif(~rst_n) begindiv_cnt <= 0;endelse if(div_cnt <4) begindiv_cnt <= div_cnt + 1;endelse div_cnt <= 0;endreg clk_div_r, clk_div_rr;always@(posedge clk or negedge rst_n) beginif(~rst_n) beginclk_div_r <= 1;endelse if(div_cnt == 1) beginclk_div_r <= ~clk_div_r;endelse if(div_cnt == 4) beginclk_div_r <= ~clk_div_r;endelse clk_div_r <= clk_div_r;endalways@(negedge clk or negedge rst_n) beginif(~rst_n) beginclk_div_rr <= 1;endelse clk_div_rr <= clk_div_r;endassign clk_div5 = clk_div_r | clk_div_rr;總結:
吐詞不清,基礎不熟,知其然不知其所以然。
二、實戰問題(西安北京深圳)
易失性與非易失性存儲器
易失性存儲器 :電源關閉時不能保留數據。主要指RAM系列,SRAM和DRAM。
非易失性存儲器:電源關閉時能保留數據。主要是指ROM系列(不可隨時改寫)和FLASH閃存。ROM、PROM、EPROM、OTPRAM、EEPRAM。
補充:
ROM:一旦存儲數據就無法再將之改變或刪除,且內容不會因為電源關閉而消失。
PROM:可編程。內部有行列式的镕絲。寫入所需的數據及程序,镕絲一經燒斷便無法再恢復,亦即數據無法再更改。
EPROM:可抹除,可編程。利用紫外線抹除,數據始可被清空,再供重復使用。
OTPROM:一次編程。編程后不能抹除改寫。
EEPROM(24LC04B,2Block,4Kbit):電可擦,可復寫。
FLASH(M25P16,16Mbit,32扇區):電可擦,可復寫,快速,動態抗震性,抗水壓,耐溫,但有記憶損耗,(扇)區塊抹除,讀取干擾。
RAM:除刷新時,可隨時讀寫,速度快,對靜電敏感,需要通電和刷新,需要刷新正好解釋了隨機存取存儲器的易失性。刷新是指定期讀取電容器的狀態,然后按照原來的狀態重新為電容器充電,彌補流失了的電荷。電容器或多或少有漏電的情形,不斷電數據也會隨時間流失。
SRAM不需要刷新電路即能保存它內部存儲的數據。而DRAM每隔一段時間,要刷新充電一次。
SDRAM:通常DRAM是有一個異步接口的,這樣它可以隨時響應控制輸入的變化。而SDRAM還有一個同步接口,在響應控制輸入前會等待一個時鐘信號,這樣就能和計算機的系統總線同步。時鐘被用來驅動一個有限狀態機,對進入的指令進行管線(Pipeline)操作。等待的過程可以發出其它附加指令。這種延遲被稱為等待時間。
DDR:雙倍速率同步動態隨機存儲器(Double data Rate SDRAM,DDR SDRAM,簡稱DDR),采用2.5V工作電壓,內存數據位寬64位,一個時鐘脈沖傳輸兩次數據,分別在時鐘脈沖的上升沿和下降沿各傳輸一次數據,因此稱為雙倍速率的SDRAM。
事件、進程、敏感信號
事件:當線網型或寄存器型信號的值發生變化時,對電路來說就是產生了一個事件,就需要進行相應的計算。
在仿真當中,事件指模型中數值的變化,功能仿真是一種事件驅動的仿真,整個仿真過程都是圍繞事件來組織的。
更新事件:在被仿真的電路中,線網或寄存器的值在任何進程中的任何改變都被認為是一個更新事件。
計算事件:由于更新事件產生的,進程的計算,計算事件。
計算事件和更新事件之間循環往復的互相觸發,推動仿真時間的前進。
進程是Verilog中的獨立執行單元,包括:原語(Primitives), 模塊(Moules), initial過程塊, always過程塊, 連續賦值語句(assign), 異步任務(task)。
在仿真時,所有的進程都是仿真器按Verilog的語義來順序執行的,效果是各個進程并行執行的效果,在未執行完當前所有的進程時,仿真時間不會向前推進。
事件在代碼中以@(時間列表/敏感列表)形式出現,事件列表可以有多個,用or分開,也可以用“,”分開,他們之間是“或”的關系。也就是說只要有一個事件產生,就會執行進程語句。事件分為電平信號和邊沿信號兩種。(posedge:上升沿事件,negedge:下降沿事件。)
進程:行為模型的本質是進程。一個進程可以被看做是一個獨立的運行單元,它可能很簡單,也可能很復雜,我們可以將數字系統的行為看作很多有機結合的進程的集合。
在Verilog HDL中,描述進程的基本語句是always和initial。Always過程反復執行其中的塊語句,而initial過程中的語句塊只執行一次。除了always和initial過程塊外,一個assign賦值語句、一個實例元件的調用都可以看作是一個進程。
進程的特點:
1-進程只有兩種狀態,即執行態和等待狀態。進程是否進入執行態,取決于是否滿足特定的條件,如敏感變量是否發生變化。一旦滿足條件,進程即進入執行狀態。當該進程執行完畢或遇到停止語句后,即停止執行,自動返回到起始語句,進入等待狀態。
2-進程一般由敏感信號的變化來啟動
3-各個進程之間通過信號線進行通信。多個進程之所以能同步并發運行,一個很重要的原因就是有進程之間的信號線的通信和協議。
4-一個進程中只允許描述對應于一個時鐘信號的同步時序邏輯。
5-進程之間是并發執行的。兩個或更多個“always”過程塊、“assign”持續賦值語句、實例元件調用等操作都是同時執行的。】
Verilog代碼執行的七個步驟
綜合:將用行為和功能層表達的電子系統轉換成低層次的便于具體實現的模塊組合裝備的過程。
綜合過程將把軟件設計的HDL描述與硬件結構掛鉤,是將軟件轉化為硬件電路的關鍵步驟,是文字描述與硬件相結合的一座橋梁。綜合就是將電路的高級語言(如行為描述)轉化為低級的,可以FPGA/CPLD的基本結構相映射的網表文件或程序。
當輸入的hdl文件在eda工具中檢測無誤后,首選面臨的就是邏輯綜合,因此要求hdl源文件中的語句都是可綜合的?!?/p>
連續賦值、過程性賦值、過程性連續賦值、重新賦值
過程性連續賦值是過程性賦值的一類,即它不能夠在 a l w a y s語句或 i n i t i a l語句中出現。這
種賦值語句能夠替換其它所有對線網或寄存器的賦值。它允許賦值中的表達式被連續驅動到
寄存器或線網當中。注意,這不是一個連續賦值,連續賦值發生在 i n i t i a l或a l w a y s語句之外。
過程性連續賦值語句有兩種類型:
賦值和重新賦值過程語句:它們對寄存器進行賦值。
強制和釋放過程性賦值語句:雖然它們也可以用于對寄存器賦值,但主要用于對線網
賦值。
賦值和強制語句在如下意義上是“連續”的:即當賦值或強制發生效用時,右端表達式
中操作數的任何變化都會引起賦值語句重新執行。
過程性連續賦值的目標不能是寄存器部分選擇或位選擇。
賦值—重新賦值
一個賦值過程語句包含所有對寄存器的過程性賦值,重新賦值過程語句中止對寄存器的
連續賦值。寄存器中的值被保留到其被重新賦值為止。
乒乓緩存
輸入數據流通過“輸入數據選擇單元”將數據流等時分配到兩個數據緩沖區,數據緩沖模塊可以為任何存儲模塊,比較常用的存儲單元為雙口 RAM(DPRAM)、單口RAM(SPRAM)、FIFO等。在第一個緩沖周期,將輸入的數據流緩存到“數據緩沖模塊1”;在第2個緩沖周期,通過“輸入數據選擇單元”的切換,將輸入的數據流緩存到“數據緩沖模塊2”,同時將“數據緩沖模塊1”緩存的第1個周期數據通過“輸出數據選擇單元”的選擇,送到 “數據流運算處理模塊”進行運算處理;在第3個緩沖周期通過“輸入數據選擇單元”的再次切換,將輸入的數據流緩存到“數據緩沖模塊1”,同時將“數據緩沖模塊2”緩存的第2個周期的數據通過“輸出數據選擇單元”切換,送到“數據流運算處理模塊”進行運算處理。如此循環。
可以節約緩沖區空間。
可以達到用低速模塊處理高速數據流的效果。
三極管和的區別
參考:
1.建立時間和保持時間
2.消除亞穩態——異步FIFO
3.異步信號的同步處理
4.打拍與亞穩態
5.狀態機
6.UART協議
7.FPGA分頻電路實現(奇數,偶數,小數半分頻,任意分頻)
8. 易失性存儲器 // 非易失性存儲器
9. Verilog HDL模塊代碼結構說明
10.過程性連續賦值
總結
以上是生活随笔為你收集整理的记录FPGA面试的准备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可汗学院统计学 task 3
- 下一篇: 计算机科学概论918