轉自systemverilog學習(4)動態(tài)數組
本節(jié)主要內容:動態(tài)數組咖气,隊列衍慎,聯(lián)合數組欢顷,數組基本操作纱兑,結構體類型因俐,枚舉類型
一:動態(tài)數組
1:基礎
在run-time才知道元素個數榴嗅,在compile-time不知道,可以在仿真的時候再確定元素個數
2:表示
data_type name_of_dynamic_array[];
name_of_ dynamic_array = new[number of elements];
實例:int dyn[]; dyn = new[5];dyn.delete();
3:可將固定數組賦值給動態(tài)數組妄呕,要求是元素個數相同
二:隊列(先進先出)
1:基礎知識
可插入,刪除嗽测,sort绪励,search肿孵,push,pop疏魏,add停做,remove;可將固定數組或者動態(tài)數組賦給隊列
2:表示
data_type queue_name[$] = {..} //隊列賦值時大括號前面不加單引號
實例:int b[$] = {3,4}大莫; //{3,4}
b.insert(1,1); //{3,1,4} 在第一個元素后面添加1
b.delete(1); //{3蛉腌,4} 刪除元素1
b.push_front(6) ; //{6,3,4}
j = b.pop.back; //{6,3}, j = 4
三:聯(lián)合數組
1:基礎知識
充分利用內存里的離散空間,不連續(xù)空間只厘;
索引值可以為整型眉抬,字符型,一維數組
2:表示
data_type associative_array_name[*/string]
3:示例
在內存中的存儲
說明:標準數組存儲時懈凹,所有的存儲器都用到了蜀变;聯(lián)合數組使用內存時,稀疏介评。
4:操作
遍歷(foreach)库北,first,next们陆,prev寒瓦,delete,exits
四:數組的操作
1:算術運算
sum坪仇,product杂腰,and,or and xor
例如下面是sum舉例:
說明:on.sum返回on的位數椅文,即一位喂很,即值1(5個1相加取一位);將on.sum賦給位寬為8bit的summ皆刺,則返回值5少辣。
2:sort,rsort(反過來排序)羡蛾,reverse漓帅,shuffle(打亂排序),find_first痴怨,find_first_with_index忙干,unique(得到元素不重復的數組)
//find_index with (item > 3); //元素大于3的索引值
3:sum的擴展用法
//d.sum(x) with ((x>7)x); //99+8*8
五:總結
Fixed Arrays: 在compile time時知道size浪藻;連續(xù)內存存放捐迫,支持多維
Dynamic Arrays:run time時得到size;連續(xù)內存珠移;
Queues Arrays:FIFO/Stack
Associative Arrays:離散數據內存弓乙,索引可以為數字或者字符串;用于hash
六:結構體
將變量放在一起钧惧,比如總線協(xié)議放在結構體里暇韧;默認是unpacked存放
1:示例
使用:Instruction_Word.address = 24'hF00000;
2:packed存放(加入packed關鍵字)
第一個數據放在內存的左側。
七:枚舉類型
1:表示
enum {red,green.blue} RGB //red = 0浓瞪,green = 1懈玻,blue = 2
2:枚舉值類型
顯式指定枚舉值 enum{one = 1, five = 5, ten = 10} state;
部分顯式指定值
3:枚舉指定類型
enum bit {false,true} Boolean乾颁;
enum logic [1:0] {WAITE,LOAD,READY} state;
enum logic [1:0] {
WAITE=3'b001,
LOAD=3'b010,
READY=3'b100} state; //error涂乌;因為枚舉類型是兩位,賦值超過兩位
emum logic {on = 1'b1,OFF=1'bz} out;