微网站建设价格,网站文章更新时间,危险网站解除,哈尔滨高端模板建站关于function的应用无论是在systemverilog还是verilog中都有很广泛的应用#xff0c;但是一直有一个模糊的概念困扰着我#xff0c;今天刚好有时间来搞清楚并记录下来。
关于fucntion的返回值的问题#xff1a;
function integer clog2( input logic[255:0] value);for(cl…
关于function的应用无论是在systemverilog还是verilog中都有很广泛的应用但是一直有一个模糊的概念困扰着我今天刚好有时间来搞清楚并记录下来。
关于fucntion的返回值的问题
function integer clog2( input logic[255:0] value);for(clog2 0; value0; clog2 clog21)value value1;clog2 clog2-1;
// param clog2-1;
// return 8;
endfunction
logic[3:0] param;
initial
begin$display(start print sim result);$display(clog2 %b,clog2(256b1000));$display(end print sim result);
// $display(param %b,param);
end
上述function vcs编译之后打印的结果为
start print sim result
clog2 00000000000000000000000000000011
end print sim result
function中如果没有return语句这是systemverilog增加的特性那么默认返回与函数名相同的变量作为函数的返回值
如果以下面的方式code
function integer clog2( input logic[255:0] value);for(clog2 0; value0; clog2 clog21)value value1;clog2 clog2-1;
// param clog2-1;return 8;
endfunction
logic[3:0] param;
initial
begin$display(start print sim result);$display(clog2 %b,clog2(256b1000));$display(end print sim result);
// $display(param %b,param);
end
那么编译之后打印的结果是什么呢
start print sim result
clog2 00000000000000000000000000001000
end print sim result
看到了吧function会以return语句声明的值作为函数的返回值
这里还有两个小case需要注意一下就是for语句是连同它下面的value value1作为执行单元的执行完了之后才会执行下一个那行的语句。
还有这里要另外注意
function 返回值的类型
void如果你想调用函数并且忽略它的返回值可以使用void进行声明函数类型比如函数只用来打印一些想要的信息
function void load_array();int len 32b0;if(len0)begin$display(bad len);end// return;
endfunction
//int arry[];
initial
begin$display();$display(this is the load array functions print);load_array();$display();//$display(load_array %d,load_array());
end
打印结果 this is the load array functions print
bad len但是你如果把这句解开 $display(load_array %d,load_array());
那就会报错了因为这里使用了load_array()的返回值但是void函数是没有返回值的。
报错
Void functions cannot be used in contexts which require return values 函数类型还有logicintstaticautomatic数组结构体等等类型
Systemverilog中static、automatic区别_automatic变量-CSDN博客