System Verilog学习小结
System Verilog課程小結
第一周
問題1:設計人員和驗證人員他們的協作關系體現在哪些地方?
1.設計人員和驗證人員都需要圍繞功能描述文檔開展工作
2.設計只有經過充分量化驗證,才有信心去流片
3.驗證人員需要懂設計才能很好地向設計人員反饋設計漏洞
4.設計初步實現后即需要驗證工作的加入
5.在系統由低向高的集成過程中,驗證與設計需在每一層展開工作,確保每一個階段的充分性
問題2:為什么芯片驗證的重要性目前越來越高?
答:早期的芯片開發工作由于晶體管數目少,電路規模也小,因而搭設電路時的難度和精度不是很高,且所需的成本以及糾錯能力要求不是很高。隨著現代集成電路設計技術的不斷推進,尤其到了7納米5納米這種關鍵技術節點,電路的規模和復雜程度空前,且流片失敗的代價非常高昂,這時在完整的產品出庫之前保證它的質量精度就顯得額外重要。而芯片驗證的工作目標即在于此。所以芯片驗證的重要性目前越來越高了。
問題3:在一個完成的驗證周期中,有哪些工作需要完成?
1.完成模塊功能描述;2.創建驗證計劃;3.開發驗證的環境;4.調試環境和HDL文件;
5.進行遞歸測試;6.進行硅后系統測試;7.進行逃逸分析。
第二周
問題1:四值邏輯的數據類型應該在哪些地方聲明,例如硬件部分,還是軟件部分,或者在其它結構中?為什么需要這么做?
四值邏輯的數據類型一般在描述硬件部分的代碼中聲明,用于描述邏輯電路的行為和狀態。
四值邏輯有0 1 X Z四種狀態,相比二值邏輯能更好的模擬實際電路的狀態,使仿真結果更加接近實際的電路綜合結果。
問題2:在處理枚舉類型變量和整形變量的相互賦值情況中,應該注意哪些容易出錯的地方?在從整形到枚舉類型轉換的過程中,有哪些方法?
整形變量不能直接賦值給枚舉類型變量,需先將整形變量轉為枚舉類型,而且注意整形變量的值不應超出枚舉類型變量的范圍值。
方法:‘利用()或者$cast(T,S)。
問題3:在狀態機或者組合電路中的case語句中的default分支或者if-else中的else分支語句,有時會把變量賦值為‘x’,這實際上只會影響仿真,但對綜合電路不產生影響,試問這么做是為什么?不影響電路綜合可能是由于什么原因?
添加default以及else語句是為了避免在硬件電路中綜合出鎖存器,這樣可以避免浪費更多資源還有一些靜態時序錯誤。不影響電路綜合的原因可能是在條件描述完備時不會出現其他情況,且在實際的電路中并不存在x信號。
第三周
問題1:模塊和接口之間的相近的地方有哪些?又有哪些差別?
相近:定義形式上相似,例化方式相同,都可以聲明變量和線網類型。
區別:模塊可以例化模塊和接口,但接口只能例化接口;模塊具有各種功能,接口只負責連線的分配;接口中的變量或者線網類型可以使用modport約束方向。
問題2:結構體和接口之間的聯系和差別有哪些地方?
結構體和接口中都可以包含許多例如線網變量等諸多信號,這些信號用在兩個模塊的連接時,結構體中并不能規定這些信號的方向,而在接口中,可以利用modport約束信號的方向,可降低模塊連接錯誤。接口能夠整合多個信號變成單一端口并應用于多個模塊,有利于設計復用。
問題3:在頂層連接DUT,interface,TB需要的步驟:
1.例化interface;2.例化DUT和TB等各個實例;3.聲明所需變量;4.設計端口的映射連接關系
第四周
問題1:激勵器(stimulator)對于它所生成的激勵,有什么辦法將其所有激勵數據保存下來?
問題2:對于實驗中的DUT設計,驗證環境組件checker比較器數據正確的邏輯是什么?如何利用monitor_in(監測輸入接口)和monitor_out(監測輸出接口)采取到的數據呢?
問題3:為什么大多數的功能都應該在模塊級驗證完成呢?
問題4:function和task的比較?
問題5:參數方向有哪些?差別在哪里?
1.可以通過接口緩存保存,用于后續查看使用,如monitor的采樣功能,此外還可以存放在monitor或checker內部,而后通過monitor與checker之間的通信實現數據傳輸。
2.用compare函數對比較payload[]隊列(用來參考的數據)和pkt2cmppayload[]隊列(用來參考的數據)和pkt2cmp_payload[]隊列(用來參考的數據)和pkt2cmpp?ayload[]隊列取樣的數據)中存儲的數據來驗證接收到的payload是否正確。
將monitor采集到的數據裝入數據對象trans,通過定義方法mon_trans()和put_trans()監視和傳輸有效數據,并在checker中使用。
3.模塊具有完整的功能,符合灰盒驗證思路。若對多模塊系統作為整體進行驗證,會有以下問題
a. 會有錯誤定位,在內部的定位需要連接monitor
b. 整體工作量并沒有減少
c. 內部模塊難以充分激勵
4.function內不消耗仿真時間,task可能消耗仿真時間。即function只能用于與純粹的數字或邏輯運算,而task則可能會被運用于需要耗時的信號采集或驅動場景。
function不能調用task,task可以調用function。
function可以有單一的返回值也可以沒有返回值。
有返回值的function可以作為表達式中的操作數。
5.input是從外部復制傳入的形式參數,output是由被調用方法產生并復制傳遞給外部的形式參數,inout表示的是進入方法和退出方法時分別被復制兩次,ref類似軟件中的指針,在調用方式時不會有任何復制行為,而是直接引用或修改外部傳入的數據對象。
inout和ref類型均可使得形式參數在方法中被調用,并且將輸出給外部,不同的是,inout只有在方法結束之后才傳遞到外部,而ref可以在方法執行過程中直接修改數據對象無須等到方法執行結束。
第五周
問題1:鏈表和SV中的哪些數組類型(定長數組、動態數組、隊列、關聯數組)相似,相似的特性有哪些?
鏈表與SV中的隊列類似。
實際上,SV中的隊列是一種結合了鏈表和數組優點的數據類型,SV中的隊列既可以像數組一樣通過索引實現對任意元素的訪問,又可以像鏈表一樣在任意位置插入或刪除元素。
但本質上,SV中的隊列中的元素是連續存放的(基于數組實現),所以在隊列的頭或者尾存取元素很快,而如果需要在隊列中間插入或者刪減元素,則需要額外的時間進行數據搬移。
第六周
問題1:類和結構體的聯系和差別有哪些?
聯系:類和結構體都可以封裝成員變量
差別:類還可以封裝成員方法,類需要使用new()來創建對象
問題2:類和模塊的聯系和差別有哪些?
聯系:
1.類和模塊內都可以包含方法和數據變量。
2.類和模塊都可以被例化調用。
區別:
1.類中不可以有過程塊語句;2.類中的成員變量和方法默認是動態的,而模塊默認是靜態的;3.類聲明后必須創建(new)才能夠使用,而模塊聲明/例化后就可以使用;4.類可以進行賦值以及拷貝,模塊不行;5.子類可以繼承父類,并且可以擴展,模塊不行。
問題3:為什么類的靜態方法不能訪問類的非靜態成員變量?
靜態方法是屬于類的,在類加載的時候就會分配內存,可以通過類名直接訪問。非靜態成員變量屬于實例對象,只有在對象實例化之后才存在,然后通過類的對象去訪問。
類的非靜態成員存在前類的靜態方法已經存在了,無法用靜態方法去訪問一個不存在的非靜態成員。
問題4:如果有同名的模塊,那么在編譯過程中應該怎么解決“同名”問題?
Class的對象中允許同名成員出現,因為在調用構建函數時會使用新的空間,就算是復制也是新建對象后Copy,而使用時則需要注意索引的問題。
①this關鍵字可明確索引當前所在對象的成員,但是僅限非靜態成員,約束,覆蓋組使用。正常索引原則為由近到遠,即會索引最近的同名成員(方法成員),加入this后會變成指向類成員。
②super關鍵字可訪問當前對象其父類成員。
③local、protected關鍵字可以保護成員,分別只能由本身、本身及其子類訪問,限制了程序中的索引。
第七周
問題1:隨機測試相比于定向測試,就你目前的認識,你認為有哪些優缺點?
優點:對于較大規模的設計,隨機測試相比定向測試可以產生更完備的測試向量,測試的覆蓋范圍更大,能夠找出預料不到的漏洞。
缺點:隨機測試的環境復雜度更高,帶來了更高的封裝要求,同時建立隨機測試環境周期也更長。
第八周
問題1:我們在使用信箱mailbox時,如何可以限定其容量為8,并且只能存放string類型呢?那么,是否類似的方法也可以限定一個存放字符串的隊列其最大容量為8呢?
可以采用typedef mailbox #(string)string_mailbox;string_mailbox sm = new(8);
不能用類似的方法限定一個存放字符串的隊列的最大容量,因為隊列空間是動態的,自動分配的。
問題2:用bit key=0來實現的類似旗語的功能,來保護對共享資源的訪問,是否有不安全的地方?
在旗語進程和鑰匙數目少的情況下可使用,但存在明顯安全隱患。該操作用數字表示key的個數而非對key進行實例化,鑰匙不具有獨立性,僅僅是強制改變鑰匙數量,從而無法實現阻塞式和非阻塞式操作,同時也無法保證程序中鑰匙的總數是合法值。
第九周
問題1:對于目前的DUT,要完成對它的功能測試,從接口時序、路由功能來看,需要考慮哪些功能和對應的測試場景?
需要考慮的功能:1.各個輸入端能否正確發送到任意輸出端;2.每個輸入端是否互不干擾;3.輸出端是否支持多個不同源的包
需要考慮的測試場景:1.單通道輸入,單通道輸出;2.多通道輸入,多通道輸出;3.多通道輸入,單通道輸出;4.單通道輸入,多通道輸出
總結
以上是生活随笔為你收集整理的System Verilog学习小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDLBits答案(17)_Verilo
- 下一篇: linux之awk命令学习笔记