电子说
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
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !