首页 > 解决方案 > 编写一个简单的函数来计算向量中的个数

问题描述

作为学习如何在 Verilog 中编写函数的任务,我正在尝试编写一个仅计算给定向量中的个数的函数:

module m ();
 parameter n = 4;
function integer count_ones (input [n-1:0] a);
   
    for (integer i = 0 ; i<n ; i=i+1)
      begin
        if (a[i] ==1'b1)begin
          count_ones=count_ones+1;
        end
        
      end
    
    endfunction
initial begin 
reg [3:0] a = 4'b1;
integer result =  count_ones (a);
  
  $display("output is ", result);
end 
endmodule 

结果显示为x。那么这段代码中的错误是什么?

标签: verilog

解决方案


您声明count_ones为 type integer,这是一个 4 状态类型,其默认值为x。此外,count_ones=count_ones+1;保持count_ones等于x

您应该在函数内部进行初始化count_ones

function integer count_ones (input [n-1:0] a);
    count_ones = 0;

请记住,有一个内置的$countones系统功能。请参阅 IEEE Std 1800-2017,第 20.9 节位向量系统功能


推荐阅读