1
对于一个reg阵列,我希望计算他们最大连续的。如何计算中位数组最大连续1/0-用Verilog
例如
reg [15:0] bit_array;
bit_array = 16'b1001_1111_1100_0100;
结果应该是7
如果我想要做一个256位,甚至更长REG阵列同样的事情, 有没有什么办法来实现它在一个或几个周期? (1GHz的16nm厚FF +)
编辑1:
真正的问题是,我想找到的最大的连续可用内存大小。 16位寄存器阵列代表一个64K字节meomry,每个位代表一个4K字节的存储器块,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个周期,这是不可接受的。
那么,请告诉我有一个更好的方式来做到这一点。
什么问题是什么呢?迭代和计数。 –
显示一些解决问题的尝试。否则,我们假设您希望我们为您提供代码并为您做好功课。 – Greg
你可以就像你说明或做“展开循环”,并做了两旋转,计数和每时钟进行比较。或者4,8,16,一直到256.在极端情况下,你可以在一个时钟内完成所有工作,但是会推断出大量的逻辑,并且几乎肯定不会满足时序要求,即使在你喜欢的过程中也是如此。这取决于门区与性能/延迟之间的关系。 –