verilog中几种常用的位操作函数

clogb

计算二进制的对数上限,例如:1000的对数上限是3,但是1001的对数上限变成了4,计算过程如下:
if argument =1000;
argument=1000-1=111;
移位操作进行三位,所以记录得到最后的clogb的值为3;

function integer clogb(input integer argument);
   integer i;
   begin
      clogb = 0;
      for(i = argument - 1; i > 0; i = i >> 1)
    clogb = clogb + 1;
   end
endfunction

//计算参数的基础根的顶点

function integer croot(input integer argument, input integer base);
   integer i;
   integer j;
   begin
      croot = 0;
      i = 0;
      while(i < argument)
    begin
       croot = croot + 1;
       i = 1;
       for(j = 0; j < base; j = j + 1)
         i = i * croot;
    end
   end
endfunction

//统计一个二进制数的1的个数

function integer pop_count(input integer argument);
   integer i;
   begin
      pop_count = 0;
      for(i = argument; i > 0; i = i >> 1)
    pop_count = pop_count + (i & 1);
   end
endfunction

// compute the length of the longest disjoint suffix among two values,就是计算向右移动多少位后,两个数字可以相同:
verilog中几种常用的位操作函数_第1张图片

function integer suffix_length(input integer value1, input integer value2);
   integer v1, v2; 
   begin
      v1 = value1;
      v2 = value2;
      suffix_length = 0;
      while(v1 != v2)
    begin
       suffix_length = suffix_length + 1;
       v1 = v1 >> 1;
       v2 = v2 >> 1;
    end
   end
endfunction

你可能感兴趣的:(硬件代码)