我想遍历32位的逻辑向量,并找到值为1和0的索引并将它们存储在两个单独的数组中。
我将通过输入知道,该输入将告诉数组中的个数。
indexs数组将是二维的。
我也希望使用组合逻辑来实现这一点并且可以将其合成。
如果不推断出锁存器,我将无法想到任何逻辑。
logic [31:0] data ; // Array to be traversed
logic [31:0] [ONES_NUM-1:0] one_index;// One's indices in array
logic [31:0] [32-ONES_NUM-1:0] zero_index;//Zeros indices in array
always @(*)
while(j < ONES_NUM)
while ( i < 32)
if(data[i]==1) begin
one_index[j][31:0] = i;
j++;
i++;
end
else
i++; //Here prob is no else statement so latch inferred.
类似的always @(*)也是零索引。
我也怀疑while循环是否可以合成。
请提供逻辑帮助。
答案 0 :(得分:0)
`logic [31:0] data ;
logic [31:0][(ONES_NUM-1):0] one_index; // One's indices in array
logic [31:0][(32-ONES_NUM-1):0] zero_index; // Zeros indices in array
bit clk;
int j,k;
always@(posedge clk)
for(i=0;i<32;i++)
begin
if(data[i]==1)
begin
one_index[j]=i;
j++;
end
else
begin
zero_index[k]=i;
k++;
end
end`
您必须使用时钟以避免闩锁。
您可以参考此链接https://www.edaplayground.com/x/kZ6以获得更好的理解。