对于一个reg数组,我想计算其中最大的连续数。
例如
reg [15:0] bit_array;
bit_array = 16'b1001_1111_1100_0100;
结果应为7。
如果我想在256位甚至更长的reg数组上做同样的事情, 有没有办法在一个或几个周期内实现它? (1GHz,16nm FF +)
编辑1:
真正的问题是我想找到最大的连续可用内存大小。 16位寄存器阵列代表64KByte meomry,每位代表一个4KByte的内存块,1'b1表示已分配,1'b0表示空闲。 因此,连续的最大计数显示可以分配一次的最大可用内存大小。
我对此的考虑是对寄存器阵列执行前导零计数,如下所示:
assign count = lzc(bit_array); // lzc is a function to count leading zeros
always @(posedge clk) begin
if(count >max_count)
max_count <= count;
bit_array <= {bit_array[0],bit_array[15:1]};
end
但问题是这需要16个周期,如果我想在256位寄存器阵列上执行此操作,则需要256个周期,这是不可接受的。
所以,请告诉我有更好的方法来做到这一点。
答案 0 :(得分:0)
下面的代码将在1个周期内组合最大连续1次计算,你可能会破坏这个循环来满足时间:
for(i=1;i<16;i=i+1) begin
if(bit_array[i] == 1 && bit_array[i-1] == 1) begin
count = count+1;
else begin
count = 0;
end
end