天天看點

lnk200無法解析的外部符号_2020華為海思校招晶片崗真題解析(1)

秋招如火如荼地進行着,今天為大家帶來華為海思晶片崗的真題解析,如有錯漏,歡迎指正哈。

lnk200無法解析的外部符号_2020華為海思校招晶片崗真題解析(1)

下面是兩種情況下的UVM代碼: 

1.    表示任意兩位無符号十進制數需要(7)位二進制數。

2.    時間尺度定義為timescale 10ns/100ps,選擇正确答案(b)

a. 時間精度10ns

b. 時間精度100ps

c. 時間機關100ps

d. 時間精度不确定

 解析:10ns為時間機關,100ps為時間精度。

時間機關主要用在`timescale定義之後的代碼中,直至遇到另一個`timescale指令或`resetall指令為止,用來表示verilog文法中使用到時間的表達式的機關。比如:

and # (5.22, 6.17 ) Al (Z, A, B); 裡面的5.22和6.17分别代表52.2ns和61.7ns

或者 [email protected](posedge clk) out <= #3 in; 裡面的3代表30ns。

時間精度一般展現在波形的時間橫軸上,最小的一個時間機關跨度即時間精度100ps。

3. 時序邏輯電路不僅與輸入有關,還與原來的狀态有關。(正确)

4. 同步複位需要進行recovery和removal檢查,異步複位不需要進行recovery和removal檢查(錯誤)

解析:recovery和removal存在于擁有async reset端口的寄存器,是以異步複位需要做這種檢查。這種檢查的目的是為了保證複位釋放的時刻能早于時鐘沿并且保持到時鐘沿到來(recovery,恢複),并且保證複位置位的時刻能晚于時鐘沿一段時間(removal,清除),以此來避免複位釋放的時候出現亞穩态。類似于寄存器D端的setup和hold檢查。

5.  在異步FIFO設計中,滿信号由寫時鐘産生,空信号由讀時鐘産生(正确)

解析:寫時鐘驅動寫指針增加,和FIFO有效資料的增加,有效資料到達深度時滿信号拉高;讀時鐘驅動讀指針增加,和FIFO有效資料的減少,有效資料為0時空信号拉高;

6.關于false path,正确的是(d)

a. 一般異步電路可以設定為false path

b. 兩個不同頻率的接口一定可以設定為false path

c. 一般異步複位可以設定為false path

d. 一般模拟ip和系統的互聯接口都可以設定為false path

解析:

a是錯誤的。設定false path的原因是該路徑沒必要滿足特定時序(比如setup/hold,recovery/removal,clock gating,max delay等特定時序)。雖然異步電路時鐘之間沒有固定的相位關系,工具沒法直接做reg-reg的setup/hold檢查,但是可以設定max delay等特殊限制對需要滿足一定時序關系的異步電路做檢查,需要看具體的場景。

b是錯誤的。頻率不同和false path沒有任何關系。而異步電路的頻率可能不同,但是頻率不同不等于異步電路,異步電路的本質是來自不同晶振的時鐘源驅動的電路,他們頻率甚至也可以相同。

c是錯誤的。對于異步複位,指的隻是寄存器使用了異步複位端口async_reset,在複位的時候複位信号可以是異步的。但它在釋放的時候是需要滿足recovery-removal時序檢查的,需要做同步釋放,因為做了同步,是以STA工具有能力做檢查。是以異步複位不能設為false path,需要檢查recovery-removal時序。

d是正确的。模拟ip的時鐘頻率一般遠小于數字電路,是以對數字電路的時序不敏感,互聯接口可以設定false path。

7.下面是一個什麼電路:(c)

[email protected](posedge clk or negedge rst_n) begin

  If(rst_n == 1’b0)

    a<=2’b0;

  elseif(b>2’b0)

    a<= b

end

a.    綜合為latch

b.    帶同步複位的d觸發器

c.    帶異步複位的d觸發器

d.    組合邏輯

解析:posedge clk決定了這是一個觸發器,if(rst_n == 1’b0)和negedge rst_n決定了這是一個異步複位的d觸發器,複位和時鐘無關(異步)。

8. 對于信号定于語句:reg[0:4] always,a;說法錯誤的是(b)    

a. 不能使用關鍵字定義信号名

b. 信号定義為reg型,隻能使用在時序電路的指派中

c. bit定義順序應該從高到低

d. 每個信号應單獨用一行來聲明

解析:a和c違背verilog文法,是錯的。d隻是建議,并不違背verilog文法。相比之下,b是絕對錯的,因為reg型可以用于組合邏輯指派,比如always(*)。

9. 下列說法錯誤的是(d)

a. 條件語句,如果無優先級關系,盡量采用case,避免多級else if,影響時序;

b. If/else語句配對使用,case語句加default項;組合邏輯中在所有條件下都要對信号幅值,如果要保持步便用a=a方式指派;

c. 兩個向量進行比較操作或加減操作或指派操作時,兩個向量的位寬要相等,避免隐式擴充。

d. 可綜合代碼中,除了for語句中的循環變量可以定義為integer型以外,所有變量和信号都隻能為wire或reg型,不能定義為整型,實數型,無符号型,realtime型和time型。

解析:

a是正确的,優先級條件語句會綜合成串聯的選擇邏輯,時序較差,而case可以綜合成并行的選擇邏輯,n個條件邏輯級數為log2n。

b是正确的,但不嚴謹。if/else可以不配對使用,在時序邏輯下,可以隻有if沒有else,這時候else分支保持寄存器原值,當然有else使代碼更清晰。有case語句,如果是組合邏輯,隻要有條件沒給指派,會綜合出latch。

c是正确的。兩個向量位寬不比對會隐式拓展高位,如果有操作數定義為wire類型但是作為有符号數使用,隐式拓展會錯誤高位補0,拓展成無符号數,功能出錯。

d是錯誤的,integer可以被定義成信号,會綜合出32bit的register。但因為位寬固定,一般不這麼使用。另外在verilog-2001中加入了無符号型和有符号型的reg/wire定義,也屬于可綜合類型。其他類型不可綜合。

10.關于異步設計的危害,下面說法錯誤的是:(b)

a.  信号的時延随着每次布局布線的不同而不同,随着pvt的改變而改變,是以可靠性很差,而且不容易移植

b. 異步設計會産生毛刺

c.  異步設計不能做靜态時序分析

d. 異步設計會帶來很大的同步翻轉噪聲

解析:

a是正确的。現在大部分的設計都是同步設計,小部分高性能低功耗電路可能會考慮使用異步設計。異步設計的好處之一便是可以最大限度利用時間窗的margin。有點類似latch的timeborrow,無需等待同步打拍,并且沒有了時鐘信号,功耗可以大大降低。壞處是需要特殊的握手機制來保證時序,而握手機制又很大程度上依賴于信号的時延,像a所說,時延不可控型較強,是以可靠性較差,而且不容易移植。 

b是錯的,毛刺并非異步設計導緻,即便是同步設計,隻要信号傳遞過程中中間結果和最終輸出不同(卡諾圖可以清楚看到),也會有毛刺,隻不過異步設計的毛刺比較容易導緻功能錯誤,因為沒有時序檢查,沒有setup/hold來保證毛刺消除。

c是對的。現在的靜态時序分析都是基于同步設計,異步設計沒有時鐘的概念,所有信号沒有固定的相位關系,工具無法模組化分析。

d是對的。這裡的翻轉噪聲主要來自于信号線之間的耦合電容。如果兩個異步信号之間有耦合電容,那麼他們的噪聲比同步信号之間大得多,因為他們的電平跳變互相影響的時間視窗更大。

11.  多bit總線信号可以通過格雷碼轉換進行異步處理,例如:8bit的資料總線進行格雷碼轉換,然後通過雙觸發器法實作異步處理(正确)

解析:格雷碼将多bit的翻轉轉化為單bit的翻轉,解決了多bit異步信号傳播過程中因時延不同而導緻的資料采集端采集信号錯誤的問題。

12. System Verilog中,下面哪種數組在使用前需要執行new操作(c)

a. 壓縮數組

b. 聯合數組

c. 動态數組

d. 多元數組

解析:動态數組通過new()函數預先配置設定存儲空間。

13. 電路設計中,隻要采用靜态時序分析就可以保證電路設計的準确性,不需要再進行動态時序分析了。(錯誤)

解析:現在大部分的同步電路設計流程都是rtl驗證+formality形式驗證+sta靜态時序分析。通過rtl驗證保證功能完備,通過formality保證rtl和網表一緻性。因為有了formality保證網表和rtl的一緻性,是以如果rtl驗證完備,一般情況下就可以保證網表功能驗證完備。然後通過對網表進行靜态時序分析(sta)來保證沒有時序風險。動态時序分析(後仿)主要是跑一些典型場景,保證在典型場景下不會有時序問題,增強設計信心,對于同步電路,隻要sta階段檢查仔細,問題一般不大。但是設計中難免會有一小部分異步電路無法進行靜态時序分析,是以必須需要通過後仿來進行排查。

14. 對于initial語句,說法錯誤的是(d)

a. 在仿真過程中隻執行一次

b. 這是一種過程結構語句

c. 在模拟的0時刻開始

d. 可用于給實際電路賦初值

解析:initial是不可綜合語句,無法變成實際電路。

15. 線型信号必須顯性定義(錯誤)

解析:1bit的線型信号不需要顯性定義也可以被仿真工具識别,綜合工具自動生成。但是最好還是都顯性定義,好處主要有2個。一是在定義的時候将需要的信号定義全,幫助提前建立整個電路通路的架構。二是養成好習慣,避免多bit信号也沒定義,那麼多bit信号會被自動轉化為單bit信号,功能不符合預期。

16. 以下名稱不屬于verilog關鍵字的是(d)

a. genvar

b. endcase

c. cmos

d. cnt

17.  當功能覆寫率達到100%,可以說明:(b)

a. 功能覆寫率對應的DUT響應是正确的

b. 某些令人關注的情況已經得到測試覆寫

c. DUT的功能點已經100%覆寫

d. 意味着驗證的完整性

解析:功能覆寫率是通過cover語句來收集電路中信号的翻轉情況,保證在大規模随機回歸的情況下令人關注的信号是否翻轉到期望的值。一些特定信号翻轉到期望的值表示一種場景的出現,比如fifo的滿信号從0到1表示fifo滿的場景被覆寫到。是以b是正确的。

a是錯誤的,因為被覆寫到不意味着電路的響應是正确的,隻是被測試到。

c是錯誤的。功能覆寫的cover語句是驗證人員根據自己的測試點提取來寫的,并不一定是所有的功能點,隻能說驗證人員關注的功能點被覆寫。

d是錯誤的,功能點都不能保證是100%,更不用說驗證完整了。驗證完整這句話不是随便可以說的,即便是真的做足了各種驗證工作,都要對可能的疏忽保持敬畏之心。晶片的流片成功并不容易。

18.  下面表達式正确的是(c)

a.    A=4’df

b.    C=3’d8

c.    B=5’h1

d.    D=3’b2

19.  RTL代碼是測試點的一個重要來源(正确)

解析:測試點的提取可以大緻分為黑盒測試,白盒測試和灰盒測試。

黑盒測試直接通過對産品功能定義的解讀,完成端到端測試,通過輸入導出預期輸出,無需了解中間的RTL代碼。

白盒測試則是通過對RTL代碼的解讀,分解出代碼實作過程中可能出的問題,但是黑盒測試又不容易測試出來的點,利用斷言進行檢測。是以RTL代碼是白盒測試點的一個重要來源。

灰盒測試則介于黑盒和白盒之間,通過定向用例測試一些RTL内部實作的細節,觀察其輸出正确性,輔以斷言檢測。

20.  時序電路中,既可以使用阻塞語句,也可以使用非阻塞語句(錯誤)

解析:時序電路使用非阻塞語句。這點可以作為既定規則記住并使用。如果明白其背後verilog語言的編譯機制很好,但如果不明白也沒太大關系。畢竟我們是用這門語言設計硬體的,更多的應該關注如何使用它。就像老外可能搞不懂英語背後各種單詞的屬性,但不妨礙他們流利地使用英語交流。

繼續閱讀