systemverilog 起步
轉(zhuǎn)一篇Systemverilog的一個(gè)牛人總結(jié):
http://blog.sina.com.cn/s/blog_5e9b181a010188re.html
1、合并數(shù)組和非合并數(shù)組
1)合并數(shù)組:
存儲(chǔ)方式是連續(xù)的,中間沒有閑置空間。
例如,32bit的寄存器,可以看成是4個(gè)8bit的數(shù)據(jù),或者也可以看成是1個(gè)32bit的數(shù)據(jù)。
表示方法:
數(shù)組大小和位,必須在變量名前指定,數(shù)組大小必須是【msb:lsb】
Bit[3:0] [7:0] bytes???;
2)非合并數(shù)組:
Bit [7:0] bytes?[0:3]???;或者 Bit [7:0] bytes?[4]???;
?
2、二維數(shù)組和合并數(shù)組識(shí)別:
合并數(shù)組:??bit [3:0] [7:0] arrys;???大小在變量名前面放得,且降序
二維數(shù)組:??int arrays[0:7] [0:3] ;??大小在變量名后面放得,可降序可升序
位寬在變量名前面,用于識(shí)別合并和非合并數(shù)組,位寬在后面,用于識(shí)別數(shù)組中元素個(gè)數(shù)。
?
3、非合并數(shù)組:
一般仿真器存放數(shù)組元素時(shí)使用32bit的字邊界,byte、shortint、int都放在一個(gè)字中。
非合并數(shù)組:字的地位存放變量,高位不用。
表示方法:
?Bit???[7:0] bytes;?
?
4、合并數(shù)組和非合并數(shù)組的選擇
(1)當(dāng)需要以字節(jié)或字為單位對(duì)存儲(chǔ)單元操作。
(2)當(dāng)需要等待數(shù)組中變化的,則必須使用合并數(shù)組。例如測(cè)試平臺(tái)需要通過存儲(chǔ)器數(shù)據(jù)的變化來喚醒,需要用到@,@只能用于標(biāo)量或者合并數(shù)組。
? ? ? ? ?Bit[3:0] [7:0] barray[3]??; 表示合并數(shù)組,合并數(shù)組中有3個(gè)元素,每個(gè)元素時(shí)8bit,4個(gè)元素可以組成合并數(shù)組
? ? ? ? ?可以使用barry[0]作敏感信號(hào)。
?
5、動(dòng)態(tài)數(shù)組
隨機(jī)事物不確定大小。
使用方法:數(shù)組在開始是空的,同時(shí)使用new[]來分配空間,在new[n]指定元素的個(gè)數(shù)。
int dyn[];
???Dyn = new[5];?????//分配5個(gè)元素空間
? ?Dyn.delete() ;?????//釋放空間
?
6、隊(duì)列
在隊(duì)列中增加或刪除元素比較方便。
?
7、關(guān)聯(lián)數(shù)組
當(dāng)你需要建立一個(gè)超大容量的數(shù)組。關(guān)聯(lián)數(shù)組,存放稀疏矩陣中的值。
表示方法:
采用在方括號(hào)中放置數(shù)據(jù)類型的形式聲明:
Bit[63:0] assoc[bit[63:0]];
?
8、常量:
1)Verilog 推薦使用文本宏。
好處:全局作用范圍,且可以用于位段或類型定義
缺點(diǎn):當(dāng)需要局部常量時(shí),可能引起沖突。
2)Parameter
???作用范圍僅限于單個(gè)module
3)Systemverilog:
???參數(shù)可以在多個(gè)模塊里共同使用,可以用typedef 代替單調(diào)乏味的宏。
?
9、可以在for循環(huán)中定義變量,作用范圍僅在循環(huán)內(nèi)部
for(int i=0;i<10;i++)
array[i] =i;
?
10、任務(wù)、函數(shù)及void函數(shù)
1) 區(qū)別:
Verilog中task 和function最重要的區(qū)別是:task可以消耗時(shí)間而函數(shù)不能。函數(shù)中不能使用#100的延時(shí)或@的阻塞語句,也不能調(diào)用任務(wù);
Systemverilog中函數(shù)可以調(diào)用任務(wù),但只能在fork??joinnone生成的線程中。
2)使用:
???如果有一個(gè)不消耗時(shí)間的systemverilog任務(wù),應(yīng)該把它定義成void函數(shù);這樣它可以被任何函數(shù)或任務(wù)調(diào)用。
??從最大靈活性角度考慮,所有用于調(diào)用的子程序都應(yīng)該被定義成函數(shù)而非任務(wù),以便被任何其它任務(wù)或函數(shù)調(diào)用。(因?yàn)槎x成任務(wù),函數(shù)調(diào)用任務(wù)很有限制)
?
11、 類靜態(tài)變量
作用:
1)類的靜態(tài)變量,可以被這個(gè)類的對(duì)象實(shí)例所共享。
當(dāng)你想使用全局變量的時(shí)候,應(yīng)該先想到創(chuàng)建一個(gè)類的靜態(tài)變量
靜態(tài)變量在聲明的時(shí)候初始化。
2)
類的每一個(gè)實(shí)例都需要從同一個(gè)對(duì)象獲取信息。
?
12、靜態(tài)方法
作用:
當(dāng)靜態(tài)變量很多的時(shí)候,操作它們的代碼是一個(gè)很大的程序,可以用在類中創(chuàng)建一個(gè)靜態(tài)方法讀寫靜態(tài)變量,但是靜態(tài)方法不能讀寫非靜態(tài)變量。
l???????ref高級(jí)的參數(shù)類型
Ref 參數(shù)傳遞為引用而不是復(fù)制。Ref比 input 、output、inout更好用。
Function void print_checksum(const ref bit [31:0] a[ ]);
1)???????也可以不用ref進(jìn)行數(shù)組參數(shù)傳遞,這時(shí)數(shù)組會(huì)被復(fù)制到堆棧區(qū),代價(jià)很高。
2)???????用帶ref 進(jìn)行數(shù)組參數(shù)傳遞,僅僅是引用,不需要復(fù)制;向子程序傳遞數(shù)組時(shí),應(yīng)盡量使用ref以獲得最佳性能,如果不希望子程序改變數(shù)組的值,可以使用const ref。
3)???????Ref參數(shù),用ref 傳遞變量;可以在任務(wù)里修改變量而且,修改結(jié)果對(duì)調(diào)用它的函數(shù)可見,相對(duì)于指針的功能。
?
轉(zhuǎn)載于:https://www.cnblogs.com/littleMa/p/4761974.html
總結(jié)
以上是生活随笔為你收集整理的systemverilog 起步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平均池化-最大池化-全局池化
- 下一篇: hdu1428(spfa与记忆化搜索)