2018年IC設計企業筆試題解析-(驗證方向)
1、請簡述:定寬數組,動態數組,關聯數組,隊列四種數據類型的各自特點
。
解析:
(1)定寬數組:其寬度在聲明的時候就指定了,故其寬度在編譯時就確定了。
(2)動態數組:可以在仿真時分配空間或者調整寬度,這樣在仿真中就可以使用最小的存儲量。在聲明時,其下標為空[ ],使用new[ ]操作符來分配空間。
(3)關聯數組:SystemVerilog提供關聯數組來保存稀疏矩陣的元素。一般用在對非常大的空間進行尋址,當對一個非常大的地址空間進行尋址時,SystemVerilog只為實際寫入的元素分配空間,這樣可以節省空間。
(4)隊列:結合了鏈表和數組的優點。可以在隊列中額任何位置增加或者刪除元素,這類操作在性能上的損失比動態數組小得多,因為動態數組需要分配新的數組並復制所有元素的值。隊列也可以通過索引實現對任何一元素的訪問。
解析:
(1)定寬數組:其寬度在聲明的時候就指定了,故其寬度在編譯時就確定了。
(2)動態數組:可以在仿真時分配空間或者調整寬度,這樣在仿真中就可以使用最小的存儲量。在聲明時,其下標為空[ ],使用new[ ]操作符來分配空間。
(3)關聯數組:SystemVerilog提供關聯數組來保存稀疏矩陣的元素。一般用在對非常大的空間進行尋址,當對一個非常大的地址空間進行尋址時,SystemVerilog只為實際寫入的元素分配空間,這樣可以節省空間。
(4)隊列:結合了鏈表和數組的優點。可以在隊列中額任何位置增加或者刪除元素,這類操作在性能上的損失比動態數組小得多,因為動態數組需要分配新的數組並復制所有元素的值。隊列也可以通過索引實現對任何一元素的訪問。
2、簡述在TB中使用interface和clocking block的好處
解析:
(1)由於在設計當中往往含有幾百個端口信號,需要數頁來聲明信號與端口。所有這些連接都是極易出錯的。因為一個信號可能流經過幾個設計層次,它必須一遍又一遍的聲明和互聯,最糟糕的是如果你想添加一個新的信號,它必須在多個文件中定義和連接。而通過interface,便可以解決這些問題,interface包含了連接,同步,甚至是兩個或者多個塊之間的通信,只要在interface里面聲明過的信號與端口,在其它模塊都可以共用。
(2)使用clocking block,可以保證測試平台在正確的時間點與信號交互,而不只是隨着一個同步時鍾采樣與驗證,一個時鍾塊,可以對應一個時鍾域。
解析:
(1)由於在設計當中往往含有幾百個端口信號,需要數頁來聲明信號與端口。所有這些連接都是極易出錯的。因為一個信號可能流經過幾個設計層次,它必須一遍又一遍的聲明和互聯,最糟糕的是如果你想添加一個新的信號,它必須在多個文件中定義和連接。而通過interface,便可以解決這些問題,interface包含了連接,同步,甚至是兩個或者多個塊之間的通信,只要在interface里面聲明過的信號與端口,在其它模塊都可以共用。
(2)使用clocking block,可以保證測試平台在正確的時間點與信號交互,而不只是隨着一個同步時鍾采樣與驗證,一個時鍾塊,可以對應一個時鍾域。
3、以下代碼中,x取各個值的概率是多少?
x dist {0:=1,[1:3]:=1};
解析:
x取0,1,2,3的概率都為1/4。
x dist {0:=1,[1:3]:=1};
解析:
x取0,1,2,3的概率都為1/4。
4、SV OOP編程中什么需求下必須使用virtual methods(virtual function/ virtual task)
解析:
當你需要對象調用的methods(funtion或者task)可以隨着真正的對象的類型去選擇method而不是根據句柄的類型去調用methods的時候,你就必須將類里的method聲明為Virtual method。
解析:
當你需要對象調用的methods(funtion或者task)可以隨着真正的對象的類型去選擇method而不是根據句柄的類型去調用methods的時候,你就必須將類里的method聲明為Virtual method。
5、factory 實現包含哪三步?使用factory帶來什么好處?
解析:
factory的實現包含三步
(1)注冊:當定義一個類的時候,必須要對其類型進行注冊。
(2)實例化對象:在對component或object型對象進行實例化的時候要使用靜態方法create(),不能采用new()去實例化。也就是要用如下實例化格式:
object_name = class_type::type_id::create("object_name",this);
(3)重載override:在需要override的時候,按照類型或者名稱去override原來的對象。
Factory的好處是便於創建模塊化、可復用的測試平台。同時Factory使得類的重載與復用變得更加簡單。
解析:
factory的實現包含三步
(1)注冊:當定義一個類的時候,必須要對其類型進行注冊。
(2)實例化對象:在對component或object型對象進行實例化的時候要使用靜態方法create(),不能采用new()去實例化。也就是要用如下實例化格式:
object_name = class_type::type_id::create("object_name",this);
(3)重載override:在需要override的時候,按照類型或者名稱去override原來的對象。
Factory的好處是便於創建模塊化、可復用的測試平台。同時Factory使得類的重載與復用變得更加簡單。
6、analysis port 是否不連或者可以連到多個impport?
解析:
都可以
第一,默認情況下,一個 analysis port( analysis export )可以連接多個 IMP ,也就是說, analysis port( analysis export)與 IMP 之間的通信是一種一對多的通信,而PORT 和 EXPORT 與 IMP 的通信是一種一對一的通信。 analysis port ( analysis export)更像是一個廣播。
第二,作為 PORT 和 EXPORT ,有 put, get, transport 操作,雖然如前面所示,一個 PORT 要么是 put_port,要么是 get_port,要么是 transport_port ,不可能是三者兼有,但是畢竟是有這三種操作。但是對於 analysis port( analysis export)來說,它只有一種操作 write 。 write 的意思就是廣播一下,剩下的事情就與他無關了。
第三,作為 PORT 和 EXPORT,都有阻塞和非阻塞的區分。相應的 put, get,transport 操作也分成了阻塞和非阻塞的。但是對於 analysis port 和 analysis export 來說, 沒有阻塞和非阻塞的概念。 因為它本身就是廣播, 不必等待與其相連的其它 port的響應。所以不存在阻塞和非阻塞。
解析:
都可以
第一,默認情況下,一個 analysis port( analysis export )可以連接多個 IMP ,也就是說, analysis port( analysis export)與 IMP 之間的通信是一種一對多的通信,而PORT 和 EXPORT 與 IMP 的通信是一種一對一的通信。 analysis port ( analysis export)更像是一個廣播。
第二,作為 PORT 和 EXPORT ,有 put, get, transport 操作,雖然如前面所示,一個 PORT 要么是 put_port,要么是 get_port,要么是 transport_port ,不可能是三者兼有,但是畢竟是有這三種操作。但是對於 analysis port( analysis export)來說,它只有一種操作 write 。 write 的意思就是廣播一下,剩下的事情就與他無關了。
第三,作為 PORT 和 EXPORT,都有阻塞和非阻塞的區分。相應的 put, get,transport 操作也分成了阻塞和非阻塞的。但是對於 analysis port 和 analysis export 來說, 沒有阻塞和非阻塞的概念。 因為它本身就是廣播, 不必等待與其相連的其它 port的響應。所以不存在阻塞和非阻塞。
7.請簡述一個slave vip的 dataflow
解析:
Driver 向sequencer申請發生請求,然后sequencer通過sequence里面的body產生激勵信號再發送給Driver,Driver再把激勵信號轉換為可以驅動DUV的時序信號。
解析:
Driver 向sequencer申請發生請求,然后sequencer通過sequence里面的body產生激勵信號再發送給Driver,Driver再把激勵信號轉換為可以驅動DUV的時序信號。
8.runphase和 mainphase能不能同時存在?為什么?
解析:
可以同時存在,
UVM 把 run_phase 又分割成了 12 個小的 phase, 這 12 個小的 phase各自在執行順序方面與 run_phase 完全相同,即自下而上的啟動,同時運行。
這 12 個動態運行的 phase 與 run_phase 之間有什么關系。從本小節的圖中可以看出,這 12 個動態運行的 phase與 run_phase 之間是並列的關系,這是不是也意味着它們之間的執行也是並列的呢?答案是確定的。
解析:
可以同時存在,
UVM 把 run_phase 又分割成了 12 個小的 phase, 這 12 個小的 phase各自在執行順序方面與 run_phase 完全相同,即自下而上的啟動,同時運行。
這 12 個動態運行的 phase 與 run_phase 之間有什么關系。從本小節的圖中可以看出,這 12 個動態運行的 phase與 run_phase 之間是並列的關系,這是不是也意味着它們之間的執行也是並列的呢?答案是確定的。
9.如果一個模塊的寄存器接口由APB變為AXILite,在寄存器模型的使用中需要做什么改變?
解析:
因為AXI-lite相對於APB而言的數據讀寫通道是分離的,控制和數據通道分離,就可以不等需要的操作完成,就發出下一個操作,流水線操作,所以要從field字段屬性,和register屬性和registerfile三個方面修改,要創建對應的RAL適配器;
要添加如下的信號:
(1)讀地址通道,包含ARVALID, ARADDR, ARREADY信號;
(2)讀數據通道,包含RVALID, RDATA, RREADY, RRESP信號;
(3)寫地址通道,包含AWVALID,AWADDR, AWREADY信號;
(4)寫數據通道,包含WVALID, WDATA,WSTRB, WREADY信號;
(5)寫應答通道,包含BVALID, BRESP, BREADY信號;
(6)系統通道,包含:ACLK,ARESETN信號。
解析:
因為AXI-lite相對於APB而言的數據讀寫通道是分離的,控制和數據通道分離,就可以不等需要的操作完成,就發出下一個操作,流水線操作,所以要從field字段屬性,和register屬性和registerfile三個方面修改,要創建對應的RAL適配器;
要添加如下的信號:
(1)讀地址通道,包含ARVALID, ARADDR, ARREADY信號;
(2)讀數據通道,包含RVALID, RDATA, RREADY, RRESP信號;
(3)寫地址通道,包含AWVALID,AWADDR, AWREADY信號;
(4)寫數據通道,包含WVALID, WDATA,WSTRB, WREADY信號;
(5)寫應答通道,包含BVALID, BRESP, BREADY信號;
(6)系統通道,包含:ACLK,ARESETN信號。
10、什么情況使用宏定義,什么情況使用運行時參數?
解析:
Verilog
1)宏
全局作用范圍,且可以用於位段或類型定義。當需要局部常量時,可能引起沖突。
2)Parameter
作用范圍僅限於單個module
解析:
Verilog
1)宏
全局作用范圍,且可以用於位段或類型定義。當需要局部常量時,可能引起沖突。
2)Parameter
作用范圍僅限於單個module
12:cpu在芯片中的主要作用有什么?
解析:
cpu簡稱中央處理器,它是軟硬交互的一個節點,通過寫C代碼可以控制硬件電路的工作,CPU在這里就是將C代碼經過編譯器得到的機器碼轉化為對具體電路的控制和邏輯運算。例如:在C代碼里要完成對某soc芯片內部一個寄存器的讀寫操作,那么在芯片內部中,cpu一般作為總線上的master控制總線,通過對總線的讀寫操作,進而控制在總線上slave模塊的讀寫控制。
解析:
cpu簡稱中央處理器,它是軟硬交互的一個節點,通過寫C代碼可以控制硬件電路的工作,CPU在這里就是將C代碼經過編譯器得到的機器碼轉化為對具體電路的控制和邏輯運算。例如:在C代碼里要完成對某soc芯片內部一個寄存器的讀寫操作,那么在芯片內部中,cpu一般作為總線上的master控制總線,通過對總線的讀寫操作,進而控制在總線上slave模塊的讀寫控制。
13:arm中執行的c程序如何和uvm的seq進行交互。
解析:
SystemVerilog可以通過DPI,與C/C++語言進行交互。在UVM的Sequence里面通過調用DPI接口,完成交互。arm中的c程序,在硬件里,就是執行一段二進制代碼,屬於DUV的部分,相當於uvm和duv內部進行交互,獲取c程序(實際為2進制程序)執行的中間結果。
解析:
SystemVerilog可以通過DPI,與C/C++語言進行交互。在UVM的Sequence里面通過調用DPI接口,完成交互。arm中的c程序,在硬件里,就是執行一段二進制代碼,屬於DUV的部分,相當於uvm和duv內部進行交互,獲取c程序(實際為2進制程序)執行的中間結果。