資源描述:
《system verilog筆記總結(jié)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、Systemverilog數(shù)據(jù)類型l???????合并數(shù)組和非合并數(shù)組1)合并數(shù)組:存儲方式是連續(xù)的,中間沒有閑置空間。例如,32bit的寄存器,可以看成是4個8bit的數(shù)據(jù),或者也可以看成是1個32bit的數(shù)據(jù)。表示方法:數(shù)組大小和位,必須在變量名前指定,數(shù)組大小必須是【msb:lsb】Bit[3:0][7:0]bytes???;?2)二維數(shù)組和合并數(shù)組識別:合并數(shù)組:??bit[3:0][7:0]arrys;???大小在變量名前面放得,且降序二維數(shù)組:??intarrays[0:7][0:3];??大小在變量名后面放得,可降
2、序可升序位寬在變量名前面,用于識別合并和非合并數(shù)組,位寬在后面,用于識別數(shù)組中元素個數(shù)。?3)非合并數(shù)組一般仿真器存放數(shù)組元素時使用32bit的字邊界,byte、shortint、int都放在一個字中。非合并數(shù)組:字的地位存放變量,高位不用。表示方法:?Bit???[7:0]bytes;????????4)合并數(shù)組和非合并數(shù)組的選擇????????(1)當(dāng)需要以字節(jié)或字為單位對存儲單元操作。????????(2)當(dāng)需要等待數(shù)組中變化的,則必須使用合并數(shù)組。例如測試平臺需要通過存儲器數(shù)據(jù)的變化來喚醒,需要用到@,@只能用于標(biāo)量或者
3、合并數(shù)組。??????Bit[3:0][7:0]barray[3]??;表示合并數(shù)組,合并數(shù)組中有3個元素,每個元素時8bit,4個元素可以組成合并數(shù)組?????可以使用barry[0]作敏感信號。?l???????動態(tài)數(shù)組隨機事物不確定大小。使用方法:數(shù)組在開始是空的,同時使用new[]來分配空間,在new[n]指定元素的個數(shù)。Intdyn[];???Dyn=new[5];?????//分配5個元素空間??????????Dyn.delete();?????//釋放空間l???????隊列在隊列中增加或刪除元素比較方便。l??
4、?????關(guān)聯(lián)數(shù)組當(dāng)你需要建立一個超大容量的數(shù)組。關(guān)聯(lián)數(shù)組,存放稀疏矩陣中的值。表示方法:采用在方括號中放置數(shù)據(jù)類型的形式聲明:Bit[63:0]assoc[bit[63:0]];?l???????常量:1)Verilog推薦使用文本宏。好處:全局作用范圍,且可以用于位段或類型定義缺點:當(dāng)需要局部常量時,可能引起沖突。2)Parameter???作用范圍僅限于單個module3)Systemverilog:???參數(shù)可以在多個模塊里共同使用,可以用typedef代替單調(diào)乏味的宏。?過程語句l???????可以在for循環(huán)中定義變
5、量,作用范圍僅在循環(huán)內(nèi)部for(inti=0;i<10;i++)array[i]=i;?l???????任務(wù)、函數(shù)及void函數(shù)1)區(qū)別:Verilog中task和function最重要的區(qū)別是:task可以消耗時間而函數(shù)不能。函數(shù)中不能使用#100的延時或@的阻塞語句,也不能調(diào)用任務(wù);Systemverilog中函數(shù)可以調(diào)用任務(wù),但只能在fork??joinnone生成的線程中。2)使用:???如果有一個不消耗時間的systemverilog任務(wù),應(yīng)該把它定義成void函數(shù);這樣它可以被任何函數(shù)或任務(wù)調(diào)用。??從最大靈活性角度
6、考慮,所有用于調(diào)用的子程序都應(yīng)該被定義成函數(shù)而非任務(wù),以便被任何其它任務(wù)或函數(shù)調(diào)用。(因為定義成任務(wù),函數(shù)調(diào)用任務(wù)很有限制)?l???????類靜態(tài)變量作用:1)類的靜態(tài)變量,可以被這個類的對象實例所共享。當(dāng)你想使用全局變量的時候,應(yīng)該先想到創(chuàng)建一個類的靜態(tài)變量靜態(tài)變量在聲明的時候初始化。2)類的每一個實例都需要從同一個對象獲取信息。l???????靜態(tài)方法作用:當(dāng)靜態(tài)變量很多的時候,操作它們的代碼是一個很大的程序,可以用在類中創(chuàng)建一個靜態(tài)方法讀寫靜態(tài)變量,但是靜態(tài)方法不能讀寫非靜態(tài)變量。l???????ref高級的參數(shù)類型Re
7、f參數(shù)傳遞為引用而不是復(fù)制。Ref比input、output、inout更好用。Functionvoidprint_checksum(constrefbit[31:0]a[]);1)???????也可以不用ref進行數(shù)組參數(shù)傳遞,這時數(shù)組會被復(fù)制到堆棧區(qū),代價很高。2)???????用帶ref進行數(shù)組參數(shù)傳遞,僅僅是引用,不需要復(fù)制;向子程序傳遞數(shù)組時,應(yīng)盡量使用ref以獲得最佳性能,如果不希望子程序改變數(shù)組的值,可以使用constref。3)???????Ref參數(shù),用ref傳遞變量;可以在任務(wù)里修改變量而且,修改結(jié)果對調(diào)用它
8、的函數(shù)可見,相對于指針的功能。?l???????Return語句增加了return語句。Task任務(wù)由于發(fā)現(xiàn)了錯誤而需要提前返回,如果不這樣,那么任務(wù)中剩下的語句就必須被放到一個else條件語句中。體會下Taskload_array(intlen.Refinta