数组搜索1s和0s

问题描述 投票:0回答:1

我想遍历32位的逻辑向量,并找到值为1和0的索引并将它们存储在两个单独的数组中。

我将通过输入知道,该输入将告诉数组中的个数。

索引数组将是二维的。

另外,我希望使用组合逻辑来实现,并且可综合。

如果不推断出闩锁,我将无法想到任何逻辑。

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.

同样也总是@(*)表示零索引。

我也怀疑while循环是否可以合成。

请提供逻辑帮助。

arrays verilog system-verilog hdl
1个回答
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以获得更好的理解。

© www.soinside.com 2019 - 2024. All rights reserved.