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