verilog中数组的定义_systemverilog中的数组操作
sv中的數組基本操作:/*
Exercsise?platform?:?????Questa?Sim?10.1b
*/
class?Array;
int?array[9:0]?;
function?new();
for(?int?i?=?0?;?i?
array[i]?=?i?;
/*
array?=?'{'{1,2,3},'{5{5}},default:0};
無法使用這種基本的賦值方式,可能是編譯器的版本過低了
*/
endfunction:new
function?void?print();
foreach(array[i])?begin
$display("?array[%d]?=?%d?",i,array[i]);
end
for?(?int?i?=?0?;?i?
$write("?**?");
end
$display();
endfunction:print
function?void?funcs();
int?pos[$]?;
//???縮減操作?xor?,?or?,?and?,??xnor??,?sum?,?product?等
$display("the?sum?is?%d?",array.sum());
$display("the?and?is?%d?",array.and());
$display("the??or?is?%d?",array.or()?);
$display("the?xor?is?%d?",array.xor());
$display("the?product?is?%d?",array.product());
//???索引操作:取得相應的所需要的數組原素位置
$display("?max?value?is?%d?",array.max()[0]);
$display("?min?value?is?%d?",array.min()[0]);
array?=?array.unique();
print();???????//??在類中時,調用自己類的函數,可以直接調用。這點與cpp相同
pos?=?array.find?with?(?item?==?7?)?;
//??find?有多種變體:?find_first???find_last??find_first_index???find_last_index
$display("?pos?:?%d???value:?%d?",pos[0],array[pos[0]]);
//??排序操作:?sort?,??rsort??,?reverse?,?shuffle?,
//?其中?sort?,rsort??可以與with相結合,根據with后的條件排序
array.shuffle();
$display("shuffled:");
print();
array.sort();
$display("Sorted:");
print();
array.rsort();
$display("Resorted:");
print();
array.reverse();
$display("Reversed:");
print();
endfunction:funcs
endclass:Array
module?top;
Array?array;
int?arr[]?;?????//???動態數組的聲明
initial?begin
//??initial?process
array=new();
array.print();
array.funcs();
arr?=?new[20];???//???分配內存大小
foreach(arr[i])?$display("?arr[%2d]?=?%d?",i,arr[i]);
$display("***************");
arr.delete();
end
endmodule
//???所有關于定長數組的操作都可以用在動態數組上
仿真結果:#?**?Note:?(vsim-3812)?Design?is?being?optimized...
#
#?Loading?sv_std.std
#?Loading?work.array_sv_unit(fast)
#?Loading?work.top(fast)
>>>run
#??array[??????????9]?=???????????9
#??array[??????????8]?=???????????8
#??array[??????????7]?=???????????7
#??array[??????????6]?=???????????6
#??array[??????????5]?=???????????5
#??array[??????????4]?=???????????4
#??array[??????????3]?=???????????3
#??array[??????????2]?=???????????2
#??array[??????????1]?=???????????1
#??array[??????????0]?=???????????0
#??**??**??**??**??**??**??**??**??**??**
#?the?sum?is??????????45
#?the?and?is???????????0
#?the??or?is??????????15
#?the?xor?is???????????1
#?the?product?is???????????0
#??max?value?is???????????9
#??min?value?is???????????0
#??array[??????????9]?=???????????0
#??array[??????????8]?=???????????1
#??array[??????????7]?=???????????2
#??array[??????????6]?=???????????3
#??array[??????????5]?=???????????4
#??array[??????????4]?=???????????5
#??array[??????????3]?=???????????6
#??array[??????????2]?=???????????7
#??array[??????????1]?=???????????8
#??array[??????????0]?=???????????9
#??**??**??**??**??**??**??**??**??**??**
#??pos?:???????????7???value:???????????2
#?shuffled:
#??array[??????????9]?=???????????2
#??array[??????????8]?=???????????8
#??array[??????????7]?=???????????0
#??array[??????????6]?=???????????4
#??array[??????????5]?=???????????7
#??array[??????????4]?=???????????1
#??array[??????????3]?=???????????9
#??array[??????????2]?=???????????5
#??array[??????????1]?=???????????6
#??array[??????????0]?=???????????3
#??**??**??**??**??**??**??**??**??**??**
#?Sorted:
#??array[??????????9]?=???????????0
#??array[??????????8]?=???????????1
#??array[??????????7]?=???????????2
#??array[??????????6]?=???????????3
#??array[??????????5]?=???????????4
#??array[??????????4]?=???????????5
#??array[??????????3]?=???????????6
#??array[??????????2]?=???????????7
#??array[??????????1]?=???????????8
#??array[??????????0]?=???????????9
#??**??**??**??**??**??**??**??**??**??**
#?Resorted:
#??array[??????????9]?=???????????9
#??array[??????????8]?=???????????8
#??array[??????????7]?=???????????7
#??array[??????????6]?=???????????6
#??array[??????????5]?=???????????5
#??array[??????????4]?=???????????4
#??array[??????????3]?=???????????3
#??array[??????????2]?=???????????2
#??array[??????????1]?=???????????1
#??array[??????????0]?=???????????0
#??**??**??**??**??**??**??**??**??**??**
#?Reversed:
#??array[??????????9]?=???????????0
#??array[??????????8]?=???????????1
#??array[??????????7]?=???????????2
#??array[??????????6]?=???????????3
#??array[??????????5]?=???????????4
#??array[??????????4]?=???????????5
#??array[??????????3]?=???????????6
#??array[??????????2]?=???????????7
#??array[??????????1]?=???????????8
#??array[??????????0]?=???????????9
#??**??**??**??**??**??**??**??**??**??**
#??arr[?0]?=???????????0
#??arr[?1]?=???????????0
#??arr[?2]?=???????????0
#??arr[?3]?=???????????0
#??arr[?4]?=???????????0
#??arr[?5]?=???????????0
#??arr[?6]?=???????????0
#??arr[?7]?=???????????0
#??arr[?8]?=???????????0
#??arr[?9]?=???????????0
#??arr[10]?=???????????0
#??arr[11]?=???????????0
#??arr[12]?=???????????0
#??arr[13]?=???????????0
#??arr[14]?=???????????0
#??arr[15]?=???????????0
#??arr[16]?=???????????0
#??arr[17]?=???????????0
#??arr[18]?=???????????0
#??arr[19]?=???????????0
#?***************
關聯數組:
此數組適用于進行存儲量較大時的情況,存儲方式不是線性的直接存儲,而是使用樹或者hash的結構,節省空間module?coarr;
bit[63:0]??rom[bit[63:0]]?;???//?構建關聯數組
bit[63:0]??idx?;?????//??相對應的索引
function?automatic?void?print(bit[63:0]?pos,?ref?bit[63:0]?rom[bit[63:0]]);
$display("?rom[%d]?=?%d?",pos,rom[pos]);
endfunction:print
initial?begin
idx?=?1?;
repeat(64)?begin????????//??對關聯數組初始化,但實際上只存儲了64個值
rom[idx]?=?idx?;
idx?=?idx?<
end
if(?rom.first(idx))?begin?????//??找到第一個索引的位置
print(idx,rom);
while(?rom.next(idx)?)?print(idx,rom);????//???找到之后的索引的位置
end
end
endmodule:coarr
仿真結果:#??rom[????????????1]?=????????????????????1
#??rom[???????????2]?=????????????????????2
#??rom[??????????4]?=????????????????????4
#??rom[???????????8]?=????????????????????8
#??rom[??????????16]?=???????????????????16
#??rom[??????????32]?=???????????????????32
#??rom[??????????64]?=???????????????????64
#??rom[??????????128]?=??????????????????128
#??rom[?????????256]?=??????????????????256
#??rom[??????????512]?=??????????????????512
#??rom[?????????1024]?=?????????????????1024
#??rom[?????????2048]?=?????????????????2048
#??rom[?????????4096]?=?????????????????4096
#??rom[?????????8192]?=?????????????????8192
#??rom[????????16384]?=????????????????16384
#??rom[????????32768]?=????????????????32768
#??rom[?????????65536]?=????????????????65536
#??rom[????????131072]?=???????????????131072
#??rom[????????262144]?=???????????????262144
#??rom[????????524288]?=???????????????524288
#??rom[???????1048576]?=??????????????1048576
#??rom[???????2097152]?=??????????????2097152
#??rom[???????4194304]?=??????????????4194304
#??rom[???????8388608]?=??????????????8388608
#??rom[???????16777216]?=?????????????16777216
#??rom[???????33554432]?=?????????????33554432
#??rom[???????67108864]?=?????????????67108864
#??rom[??????134217728]?=????????????134217728
#??rom[??????268435456]?=????????????268435456
#??rom[??????536870912]?=????????????536870912
#??rom[??????1073741824]?=???????????1073741824
#??rom[??????2147483648]?=???????????2147483648
#??rom[??????4294967296]?=???????????4294967296
#??rom[??????8589934592]?=???????????8589934592
#??rom[?????17179869184]?=??????????17179869184
#??rom[?????34359738368]?=??????????34359738368
#??rom[?????68719476736]?=??????????68719476736
#??rom[?????137438953472]?=?????????137438953472
#??rom[?????274877906944]?=?????????274877906944
#??rom[?????549755813888]?=?????????549755813888
#??rom[?????1099511627776]?=????????1099511627776
#??rom[????2199023255552]?=????????2199023255552
#??rom[????4398046511104]?=????????4398046511104
#??rom[?????8796093022208]?=????????8796093022208
#??rom[????17592186044416]?=???????17592186044416
#??rom[????35184372088832]?=???????35184372088832
#??rom[????70368744177664]?=???????70368744177664
#??rom[????140737488355328]?=??????140737488355328
#??rom[???281474976710656]?=??????281474976710656
#??rom[???562949953421312]?=??????562949953421312
#??rom[???1125899906842624]?=?????1125899906842624
#??rom[???2251799813685248]?=?????2251799813685248
#??rom[???4503599627370496]?=?????4503599627370496
#??rom[???9007199254740992]?=?????9007199254740992
#??rom[??18014398509481984]?=????18014398509481984
#??rom[??36028797018963968]?=????36028797018963968
#??rom[??72057594037927936]?=????72057594037927936
#??rom[??144115188075855872]?=???144115188075855872
#??rom[??288230376151711744]?=???288230376151711744
#??rom[??576460752303423488]?=???576460752303423488
#??rom[?1152921504606846976]?=??1152921504606846976
#??rom[?2305843009213693952]?=??2305843009213693952
#??rom[?4611686018427387904]?=??4611686018427387904
#??rom[?9223372036854775808]?=??9223372036854775808
總結
以上是生活随笔為你收集整理的verilog中数组的定义_systemverilog中的数组操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会员直推奖php程序_PHP自适应卡益源
- 下一篇: java的标量和聚合量_第5节:Java