【发布时间】:2019-10-09 05:37:16
【问题描述】:
我想遍历一个 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.
对于零索引也类似 always@(*)。
我也怀疑while循环是否可合成。
请帮助逻辑。
【问题讨论】:
-
"and store them..." 除非您有时钟,否则您无法存储数据。无论你做什么:没有时钟,你就会得到闩锁。在编写 HDL 时,您应该多阅读一下 HDL 编码的工作原理,因为它是 C 代码。
-
当
@*被触发时,i,j,one_index等。具有将被评估和修改的未知值。您每次都需要在 always 块中初始化它们。while循环未合成;for静态展开可以合成的循环。
标签: arrays verilog system-verilog hdl