systemverilog中的数组操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了systemverilog中的数组操作相关的知识,希望对你有一定的参考价值。
sv中的数组基本操作:
/* Exercsise platform : Questa Sim 10.1b */ class Array; int array[9:0] ; function new(); for( int i = 0 ; i < 10 ; 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 < 10 ; i++ )begin $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 // 所有关于定长数组的操作都可以用在动态数组上
以上是关于systemverilog中的数组操作的主要内容,如果未能解决你的问题,请参考以下文章