1、采用循环语句+移位+逻辑& 1来计算1的数量
如下所示,采用循环语句+移位+逻辑与1+累加来实现1的统计。最终调用函数获得输入信号中1的数量。
module clk_mux #(parameter CLK_MASK = 16'hffff) (
input xxxx,
input xxxx,
output xxxx,
output xxxx
);
localparam NUM_INPUT_CLK = 16;
function integer countones;
input [NUM_INPUT_CLK-1:0] x;
integer k;
begin
countones = 0;
while(x > 0) begin
countones += x & 1;
x = x >> 1;
end
end
endfunction
localparam NUM_CLK = countones(CLK_MASK);
endmodule
2、采用for循环来计算1的数量
采用for循环语句,逐个bit位判断是否为1,为1则累加,否则保持不变,最终输出输入信号中1的数量。
wire [64-1:0] mem_addr_hit ; //
reg [7-1:0] mem_addr_hit_cnt ; //
always@(*) begin
mem_addr_hit_cnt = 'b0 ;
for(int i=0; i<64;i=i+1) begin : mem_addr_hit_cnt
if(mem_addr_hit[i])
mem_addr_hit_cnt = mem_addr_hit_cnt + 1'b1 ; //spyglass disable W415a W484
else
mem_addr_hit_cnt = mem_addr_hit_cnt ; //spyglass disable W415a W484
end
end