Verilog基礎知識9(常見數字IC設計、FPGA工程師面試題 )
需求說明:Verilog設計
內容 :面試必備知識
來自 :時間的詩
1:什麼是同步邏輯和非同步邏輯?
同步邏輯是時鐘之間有固定的因果關係。非同步邏輯是各時鐘之間沒有固定的因果關係。同步時序邏輯電路的特點:各觸發器的時鐘端全部連線在一起,並接在系統時鐘端,只有當時鍾脈衝到來時,電路的狀態才能改變。改變後的狀態將一直保持到下一個時鐘脈衝的到來,此時無論外部輸入 x 有無變化,狀態表中的每個狀態都是穩定的。
非同步時序邏輯電路的特點:電路中除可以使用帶時鐘的觸發器外,還可以使用不帶時鐘的觸發器和延遲元件作為儲存元件,電路中沒有統一的時鐘,電路狀態的改變由外部輸入的變化直接引起。
2:同步電路和非同步電路的區別:
同步電路:儲存電路中所有觸發器的時鐘輸入端都接同一個時鐘脈衝源,因而所有觸發器的狀態的變化都與所加的時鐘脈衝訊號同步。非同步電路:電路沒有統一的時鐘,有些觸發器的時鐘輸入端與時鐘脈衝源相連,只有這些觸發器的狀態變化與時鐘脈衝同步,而其他的觸發器的狀態變化不與時鐘脈衝同步。
3:時序設計的實質:
時序設計的實質就是滿足每一個觸發器的建立/保持時間的要求。4:建立時間與保持時間的概念?
建立時間:觸發器在時鐘上升沿到來之前,其資料輸入端的資料必須保持不變的最小時間。
保持時間:觸發器在時鐘上升沿到來之後,其資料輸入端的資料必須保持不變的最小時間。
5:為什麼觸發器要滿足建立時間和保持時間?
因為觸發器內部資料的形成是需要一定的時間的,如果不滿足建立和保持時間,觸發器將進入亞穩態,進入亞穩態後觸發器的輸出將不穩定,在0和1之間變化,這時需要經過一個恢復時間,其輸出才能穩定,但穩定後的值並不一定是你的輸入值。這就是為什麼要用兩級觸發器來同步非同步輸入訊號。這樣做可以防止由於非同步輸入訊號對於本級時鐘可能不滿足建立保持時間而使本級觸發器產生的亞穩態傳播到後面邏輯中,導致亞穩態的傳播。6:什麼是亞穩態?為什麼兩級觸發器可以防止亞穩態傳播?
這也是一個非同步電路同步化的問題。亞穩態是指觸發器無法在某個規定的時間段內到達一個可以確認的狀態。使用兩級觸發器來使非同步電路同步化的電路其實叫做“一位同步器”,他只能用來對一位非同步訊號進行同步。兩級觸發器可防止亞穩態傳播的原理:假設第一級觸發器的輸入不滿足其建立保持時間,它在第一個脈衝沿到來後輸出的資料就為亞穩態,那麼在下一個脈衝沿到來之前,其輸出的亞穩態資料在一段恢復時間後必須穩定下來,而且穩定的資料必須滿足第二級觸發器的建立時間,如果都滿足了,在下一個脈衝沿到來時,第二級觸發器將不會出現亞穩態,因為其輸入端的資料滿足其建立保持時間。同步器有效的條件:第一級觸發器進入亞穩態後的恢復時間 + 第二級觸發器的建立時間 < = 時鐘週期。更確切地說,輸入脈衝寬度必須大於同步時鐘週期與第一級觸發器所需的保持時間之和。最保險的脈衝寬度是兩倍同步時鐘週期。 所以,這樣的同步電路對於從較慢的時鐘域來的非同步訊號進入較快的時鐘域比較有效,對於進入一個較慢的時鐘域,則沒有作用 。
7:系統最高速度計算(最快時鐘頻率)和流水線設計思想:
同步電路的速度是指同步系統時鐘的速度,同步時鐘愈快,電路處理資料的時間間隔越短,電路在單位時間內處理的資料量就愈大。假設Tco是觸發器的輸入資料被時鐘打入到觸發器到資料到達觸發器輸出端的延時時間(Tco=Tsetpup+Thold);Tdelay是組合邏輯的延時;Tsetup是D觸發器的建立時間。假設資料已被時鐘打入D觸發器,那麼資料到達第一個觸發器的Q輸出端需要的延時時間是Tco,經過組合邏輯的延時時間為Tdelay,然後到達第二個觸發器的D端,要希望時鐘能在第二個觸發器再次被穩定地打入觸發器,則時鐘的延遲必須大於Tco+Tdelay+Tsetup,也就是說最小的時鐘週期Tmin =Tco+Tdelay+Tsetup,即最快的時鐘頻率Fmax =1/Tmin。FPGA開發軟體也是通過這種方法來計算系統最高執行速度Fmax。因為Tco和Tsetup是由具體的器件工藝決定的,故設計電路時只能改變組合邏輯的延遲時間Tdelay,所以說縮短觸發器間組合邏輯的延時時間是提高同步電路速度的關鍵所在。由於一般同步電路都大於一級鎖存,而要使電路穩定工作,時鐘週期必須滿足最大延時要求。故只有縮短最長延時路徑,才能提高電路的工作頻率。可以將較大的組合邏輯分解為較小的N塊,通過適當的方法平均分配組合邏輯,然後在中間插入觸發器,並和原觸發器使用相同的時鐘,就可以避免在兩個觸發器之間出現過大的延時,消除速度瓶頸,這樣可以提高電路的工作頻率。這就是所謂"流水線"技術的基本設計思想,即原設計速度受限部分用一個時鐘週期實現,採用流水線技術插入觸發器後,可用N個時鐘週期實現,因此係統的工作速度可以加快,吞吐量加大。注意,流水線設計會在原資料通路上加入延時,另外硬體面積也會稍有增加。8:時序約束的概念和基本策略?
時序約束主要包括週期約束,偏移約束,靜態時序路徑約束三種。通過附加時序約束可以綜合佈線工具調整對映和佈局佈線,使設計達到時序要求。附加時序約束的一般策略是先附加全域性約束,然後對快速和慢速例外路徑附加專門約束。附加全域性約束時,首先定義設計的所有時鐘,對各時鐘域內的同步元件進行分組,對分組附加週期約束,然後對FPGA/CPLD輸入輸出PAD附加偏移約束、對全組合邏輯的PAD TO PAD路徑附加約束。附加專門約束時,首先約束分組之間的路徑,然後約束快、慢速例外路徑和多週期路徑,以及其他特殊路徑。
9:附加約束的作用?
1:提高設計的工作頻率(減少了邏輯和佈線延時);2:獲得正確的時序分析報告;(靜態時序分析工具以約束作為判斷時序是否滿足設計要求的標準,因此要求設計者正確輸入約束,以便靜態時序分析工具可以正確的輸出時序報告)3:指定FPGA/CPLD的電氣標準和引腳位置。10:FPGA設計工程師努力的方向:
SOPC,高速序列I/O,低功耗,可靠性,可測試性和設計驗證流程的優化等方面。隨著晶片工藝的提高,晶片容量、整合度都在增加,FPGA設計也朝著高速、高度整合、低功耗、高可靠性、高可測、可驗證性發展。晶片可測、可驗證,正在成為複雜設計所必備的條件,儘量在上板之前查出bug,將發現bug的時間提前,這也是一些公司花大力氣設計模擬平臺的原因。另外隨著單板功能的提高、成本的壓力,低功耗也逐漸進入FPGA設計者的考慮範圍,完成相同的功能下,考慮如何能夠使晶片的功耗最低,據說altera、xilinx都在根據自己的晶片特點整理如何降低功耗的文件。高速序列IO的應用,也豐富了FPGA的應用範圍,象xilinx的v2pro中的高速鏈路也逐漸被應用。
11:對於多位的非同步訊號如何進行同步?
對以一位的非同步訊號可以使用“一位同步器進行同步”(使用兩級觸發器),而對於多位的非同步訊號,可以採用如下方法:1:可以採用保持暫存器加握手訊號的方法(多資料,控制,地址);2:特殊的具體應用電路結構,根據應用的不同而不同;3:非同步FIFO。(最常用的快取單元是DPRAM)12:FPGA和CPLD的區別?
CPLD |
FPGA |
|
內部結構 |
Product term(基於乘積項) |
Look up Table(基於查詢表) |
程式儲存 |
內部EEPROM/FLASH |
SRAM,外掛EEPROM |
資源型別 |
組合邏輯資源豐富 |
時序邏輯資源豐富 |
整合度 |
低 |
高 |
使用場合 |
完成控制邏輯 |
能完成比較複雜的演算法 |
速度 |
慢 |
快 ?? |
其他資源 |
- |
PLL、RAM和乘法器等 |
保密性 |
可加密 |
一般不能保密 |
13:鎖存器(latch)和觸發器(flip-flop)區別?
電平敏感的儲存器件稱為鎖存器。可分為高電平鎖存器和低電平鎖存器,用於不同時鐘之間的訊號同步。有交叉耦合的門構成的雙穩態的儲存原件稱為觸發器。分為上升沿觸發和下降沿觸發。可以認為是兩個不同電平敏感的鎖存器串連而成。前一個鎖存器決定了觸發器的建立時間,後一個鎖存器則決定了保持時間。
14:FPGA晶片內有哪兩種儲存器資源?
FPGA晶片內有兩種儲存器資源:一種叫BLOCK RAM,另一種是由LUT配置成的內部儲存器(也就是分散式RAM)。BLOCK RAM由一定數量固定大小的儲存塊構成的,使用BLOCK RAM資源不佔用額外的邏輯資源,並且速度快。但是使用的時候消耗的BLOCK RAM資源是其塊大小的整數倍。15:什麼是時鐘抖動?
時鐘抖動是指晶片的某一個給定點上時鐘週期發生暫時性變化,也就是說時鐘週期在不同的週期上可能加長或縮短。它是一個平均值為0的平均變數。16:FPGA設計中對時鐘的使用?(例如分頻等)
FPGA晶片有固定的時鐘路由,這些路由能有減少時鐘抖動和偏差。需要對時鐘進行相位移動或變頻的時候,一般不允許對時鐘進行邏輯操作,這樣不僅會增加時鐘的偏差和抖動,還會使時鐘帶上毛刺。一般的處理方法是採用FPGA晶片自帶的時鐘管理器如PLL,DLL或DCM,或者把邏輯轉換到觸發器的D輸入(這些也是對時鐘邏輯操作的替代方案)。17:FPGA設計中如何實現同步時序電路的延時?
首先說說非同步電路的延時實現:非同步電路一半是通過加buffer、兩級與非門等來實現延時(我還沒用過所以也不是很清楚),但這是不適合同步電路實現延時的。在同步電路中,對於比較大的和特殊要求的延時,一半通過高速時鐘產生計數器,通過計數器來控制延時;對於比較小的延時,可以通過觸發器打一拍,不過這樣只能延遲一個時鐘週期。18:FPGA中可以綜合實現為RAM/ROM/CAM的三種資源及其注意事項?
三種資源:BLOCK RAM,觸發器(FF),查詢表(LUT);注意事項:
1:在生成RAM等儲存單元時,應該首選BLOCK RAM 資源;其原因有二:第一:使用BLOCK RAM等資源,可以節約更多的FF和4-LUT等底層可程式設計單元。使用BLOCK RAM可以說是“不用白不用”,是最大程度發揮器件效能,節約成本的一種體現;第二:BLOCK RAM是一種可以配置的硬體結構,其可靠性和速度與用LUT和REGISTER構建的儲存器更有優勢。
2:弄清FPGA的硬體結構,合理使用BLOCK RAM資源;
3:分析BLOCK RAM容量,高效使用BLOCK RAM資源;
4:分散式RAM資源(DISTRIBUTE RAM)
19:Xilinx中與全域性時鐘資源和DLL相關的硬體原語:
常用的與全域性時鐘資源相關的Xilinx器件原語包括:IBUFG,IBUFGDS,BUFG,BUFGP,BUFGCE,BUFGMUX,BUFGDLL,DCM等。20:HDL語言的層次概念?
HDL語言是分層次的、型別的,最常用的層次概念有系統與標準級、功能模組級,行為級,暫存器傳輸級和門級。系統級,演算法級,RTL級(行為級),門級,開關級21:查詢表的原理與結構?
查詢表(look-up-table)簡稱為LUT,LUT本質上就是一個RAM。目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有 4位地址線的16x1的RAM。 當用戶通過原理圖或HDL語言描述了一個邏輯電路以後,PLD/FPGA開發軟體會自動計算邏輯電路的所有可能的結果,並把結果事先寫入RAM,這樣,每輸入一個訊號進行邏輯運算就等於輸入一個地址進行查表,找出地址對應的內容,然後輸出即可22:IC設計前端到後端的流程和EDA工具?
設計前端也稱邏輯設計,後端設計也稱物理設計,兩者並沒有嚴格的界限,一般涉及到與工藝有關的設計就是後端設計。1:規格制定:客戶向晶片設計公司提出設計要求。
2:詳細設計:晶片設計公司(Fabless)根據客戶提出的規格要求,拿出設計解決方案和具體實現架構,劃分模組功能。目前架構的驗證一般基於systemC語言,對價後模型的模擬可以使用systemC的模擬工具。例如:CoCentric和Visual Elite等。
3:HDL編碼:設計輸入工具:ultra ,visual VHDL等
4:模擬驗證:modelsim
5:邏輯綜合:synplify
6:靜態時序分析:synopsys的Prime Time
7:形式驗證:Synopsys的Formality.
23:寄生效應在IC設計中怎樣加以克服和利用?
所謂寄生效應就是那些溜進你的PCB並在電路中大施破壞、令人頭痛、原因不明的小故障。它們就是滲入高速電路中隱藏的寄生電容和寄生電感。其中包括由封裝引腳和印製線過長形成的寄生電感;焊盤到地、焊盤到電源平面和焊盤到印製線之間形成的寄生電容;通孔之間的相互影響,以及許多其它可能的寄生效應。理想狀態下,導線是沒有電阻,電容和電感的。而在實際中,導線用到了金屬銅,它有一定的電阻率,如果導線足夠長,積累的電阻也相當可觀。兩條平行的導線,如果互相之間有電壓差異,就相當於形成了一個平行板電容器(你想象一下)。通電的導線周圍會形成磁場(特別是電流變化時),磁場會產生感生電場,會對電子的移動產生影響,可以說每條實際的導線包括元器件的管腳都會產生感生電動勢,這也就是寄生電感。
在直流或者低頻情況下,這種寄生效應看不太出來。而在交流特別是高頻交流條件下,影響就非常巨大了。根據復阻抗公式,電容、電感會在交流情況下會對電流的移動產生巨大阻礙,也就可以折算成阻抗。這種寄生效應很難克服,也難摸到。只能通過優化線路,儘量使用管腳短的SMT元器件來減少其影響,要完全消除是不可能的。
24:用flip-flop和logic-gate設計一個1位加法器,輸入carryin和current-stage,輸出carryout和next-stage?
carryout=carryin*current-stage;與門next-stage=carryin’*current-stage+carryin*current-stage’; 與門,非門,或門(或者異或門)
module(clk,current-stage,carryin,next-stage,carryout);
input clk, current-stage,carryin;
output next-stage,carryout;
[email protected](posedge clk)
carryout<=carryin¤t-stage;
nextstage<=
25:IC設計中同步復位與非同步復位的區別?
同步復位在時鐘沿變化時,完成復位動作。非同步復位不管時鐘,只要復位訊號滿足條件,就完成復位動作。非同步復位對復位訊號要求比較高,不能有毛刺,如果其與時鐘關係不確定,也可能出現亞穩態。26:MOORE 與 MEELEY狀態機的特徵?
Moore 狀態機的輸出僅與當前狀態值有關, 且只在時鐘邊沿到來時才會有狀態變化。Mealy 狀態機的輸出不僅與當前狀態值有關, 而且與當前輸入值有關。
27:多時域設計中,如何處理訊號跨時域?
不同的時鐘域之間訊號通訊時需要進行同步處理,這樣可以防止新時鐘域中第一級觸發器的亞穩態訊號對下級邏輯造成影響。訊號跨時鐘域同步:當單個訊號跨時鐘域時,可以採用兩級觸發器來同步;資料或地址匯流排跨時鐘域時可以採用非同步FIFO來實現時鐘同步;第三種方法就是採用握手訊號。
28:說說靜態、動態時序模擬的優缺點?
靜態時序分析是採用窮盡分析方法來提取出整個電路存在的所有時序路徑,計算訊號在這些路徑上的傳播延時,檢查訊號的建立和保持時間是否滿足時序要求,通過對最大路徑延時和最小路徑延時的分析,找出違背時序約束的錯誤。它不需要輸入向量就能窮盡所有的路徑,且執行速度很快、佔用記憶體較少,不僅可以對晶片設計進行全面的時序功能檢查,而且還可利用時序分析的結果來優化設計,因此靜態時序分析已經越來越多地被用到數字積體電路設計的驗證中。動態時序模擬就是通常的模擬,因為不可能產生完備的測試向量,覆蓋門級網表中的每一條路徑。因此在動態時序分析中,無法暴露一些路徑上可能存在的時序問題;
29:如何防止亞穩態?
亞穩態是指觸發器無法在某個規定時間段內達到一個可確認的狀態。當一個觸發器進入亞穩態時,既無法預測該單元的輸出電平,也無法預測何時輸出才能穩定在某個正確的電平上。在這個穩定期間,觸發器輸出一些中間級電平,或者可能處於振盪狀態,並且這種無用的輸出電平可以沿訊號通道上的各個觸發器級聯式傳播下去。解決方法:
1 降低系統時鐘頻率
2 用反應更快的FF
3 引入同步機制,防止亞穩態傳播(可以採用前面說的加兩級觸發器)。
4 改善時鐘質量,用邊沿變化快速的時鐘訊號
相關推薦
Verilog基礎知識9(常見數字IC設計、FPGA工程師面試題 )
需求說明:Verilog設計 內容 :面試必備知識 來自 :時間的詩 1:什麼是同步邏輯和非同步邏輯? 同步邏輯是時鐘之間有固定的因果關係。非同步邏輯是各時鐘之間沒有
什麼是預編譯?何時需要預編譯 (C、C++工程師面試題)
題目:什麼是預編譯?何時需要預編譯? 答: 什麼是預編譯: 預編譯又稱為預處理 , 是做些程式碼文字的替換工作。處理以# 開頭的指令 , 比如拷貝 #include 包含的檔案程式碼,#d
linux雲自動化運維基礎知識9(openssh-server)
linux運維############################9.openssh-server################################1.openssh-server####功能:讓遠程主機可以通過網絡訪問sshd服務,開始一個安全shell####2.客戶端連接方式####s
Verilog基礎知識0(`define、parameter、localparam三者的區別及舉例)
1、概述 `define:作用 -> 常用於定義常量可以跨模組、跨檔案; 範圍 -> 整個工程; pa
Verilog基礎知識5(ASIC設計中各個階段的關鍵問題彙總)
需求說明:Verilog設計 內容 :ASIC設計關鍵問題 來自 :時間的詩 ASIC的複雜性不斷提高,同時工藝在不斷地改進,如何在較短的時間內開發一個穩定的可重用的ASIC晶片的設計,並且一次性流片成功,這需要一個成熟的ASIC的設計方
python基礎知識5(集合,高級特性,高階函數)
python** 刪除列表中重復的元素:l = [1,2,3,1,2,3]- 強制轉化列表為集合類型:list(set(l))- 將列表轉化為字典,拿出裏面的所有key值: dict.fromkeys(l).keys()** 實現switch的兩種方法:- if...elif...else...- 通過字典實
CSS基礎知識一(CSS的應用方式、CSS選擇器、選擇器的宣告、文字CSS效果、)
一、CSS在網頁中的應用方式: 1、 行業樣式:(把css樣式寫入html中----不推薦使用) 例如:<p style=”font-size:12px;” >網頁</p> 2、 內嵌樣式:(在<head></head>
【網路】網路基礎知識總結(包括TCP/IP協議、ARP、UDP等)
說到網路相關知識,首先先說說計算機網路體系結構中兩種最為重要的參考模型,OSI參考模型和TCP/IP參考模型。 1、OSI參考模型: OSI(Open System Interconnect),即開放式系統互聯。一般都稱為OSI參考模型,是ISO(國際標
iOS-知識梳理(觀察者模式-KVO、NSNotification的實現原理)
觀察者模式的定義:一個目標物件管理所有依賴於它的觀察者物件,並在它自身的狀態改變時主動通知觀察者物件。這個主動通知通常是通過呼叫各觀察者物件所提供的介面方法來實現的。觀察者模式較完美地將目標物件與觀察者物件解耦。 KVO基於runtime實現,當你觀察一個物件的時候,一個新
字串中最大對稱子串的長度(C++軟體工程師面試題)
最近看了一個關於求字串中最大對稱子串的長度的比較有意思的演算法,與大家分享一下! 思路:借用next陣列防止回朔比較,例如:字串str:"abcxxxxxcbvvvvv",它對應的next陣列值:
Mybaits 原始碼解析 (四)----- SqlSession的建立過程(看懂框架原始碼再也不用死記硬背面試題)
SqlSession是mybatis的核心介面之一,是myabtis介面層的主要組成部分,對外提供了mybatis常用的api。myabtis提供了兩個SqlSesion介面的實現,常用的實現類是DefaultSqlSession。它相當於一個數據庫連線物件,在一個SqlSession中可以執行多條SQL語句
安卓介面基礎知識總結(二):RelativeLayout佈局的常見屬性
1.android:layout_above="@id/xxx" --將控制元件置於給定ID控制元件之上 android:layout_below="@id/xxx" --將控制元件置於給定ID控制元件之下 2.android:layout_marginLe
安卓介面基礎知識總結(一):LinearLayout佈局的常見屬性
之前做專案都是用到了才會查詢自己所需的,沒有系統總結一下,也沒有特意去記,面試的時候被問到了居然不知道,-_-|| 決定開始系統總結一下: 1. android:orientation:設定線性佈局是水平還是豎直排列,可能選項如下: 1)vertical,豎直 2)horizontal,水
Java 核心技術學習筆記_卷1_(第9版) 基礎知識 002(實踐出真知)
第 1 章 Java程式設計概述 1. Java語言特性 (1)簡單性 1)語法上拋棄了C++很多晦澀的特性 2)基本直譯器及相關類支援僅需要40KB ; 增加基礎的標準類庫和對執行緒的支援,需要增加175KB (2)面向物件
Java 核心技術學習筆記_卷1_(第9版) 基礎知識 004(實踐出真知)day 1
第3章 Java的基本程式設計結構 1. 從一個簡單Java應用程式開始介紹Java程式語言的使用規範 public class FirstSample { public static void main(String[] args)
C# 基礎知識系列- 13 常見類庫介紹(一)
0. 前言 每篇一個前言,介紹一下這一篇的內容。之前的內容都是針對某些知識點進行的介紹,這篇內容介紹一下實際開發中常用的一些類和名稱空間。這一篇是個連續劇,大概有個三四集。嗯,就是這樣。 1. System 名稱空間 System空間,是C#的基礎名稱空間,裡面定義了常用值和資料型別以及各種型別的基類,當然也
C# 基礎知識系列- 13 常見類庫介紹(二)日期時間類
# 0. 前言 上一篇內容介紹了Console類和Math類,這篇內容著重介紹一下C#中時間日期的處理方式。 > 上一篇勘誤: 上一篇中關於靜態類沒有建構函式,這一表述有誤。正確的說法是C#中靜態類不包含常規建構函式,但可以新增一個靜態建構函式。 > 靜態建構函式與普通普通建構函式的區別是,靜態
javascript基礎知識整理(不定時更新)
nsh firefox 可用 splice mage true size -1 對數 1.js中真與假的定義: 真:true,非零數字,非空字符串,非空對象 假:false,數字零,空字符串,空對象(null),undefined 2.使用for循環對json進
工作中能用到的基礎知識總結(二)
protected 構造函數 blog 繼承鏈 附加 調用 初始化 傳統 -s 簡介 繼承、封裝和多態是面向對象編程的重要特性。要想運用好,就必須熟悉這三種特性,本篇說說我對封裝、繼承和多態相關的知識總結。 知識點 一、訪問修飾符 C#中類及
操作系統基礎知識總結(一)
一個 快速 會有 處理死鎖 b2c fcm 死鎖 空間 存儲系統 1. 進程和線程的區別 進程 進程,即正在運行的程序,程序從硬盤載入到內存就變成進程。進程是資源的擁有者,每個進程都擁有著自己的內存空間與多個線程。 線程 線程是指令的執行者,是計算機執行指令的基本單元,一個