使用系统verilog for循环的可合成编码器(非优先级)

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

我有一个包含 16 个条目的表,其中每个条目都是 4 位宽。我必须在表中找到一个 4 位输入搜索向量,然后返回匹配条目的行号。这些条目都是唯一的,因此只会有一个匹配项。

我目前使用的RTL是:

logic [3:0] table_row[16];
logic [4:0] matched_row_num;

always_comb 
begin
  matched_row == 16; // default value if there is no actual match
  for (int i=15; i>=0; i--)
    begin
      if (in[3:0] == table_row[i])
        matched_row == i;
    end
end
  1. 这会合成一个类似优先级编码器的结构吗?
  2. 如果是,我如何使用 for (或生成)对其进行编码以获得非优先级编码器?

使用 for 循环的原因是表深度实际上是可参数化的,因此我希望这个逻辑是模块化的。这就是原因,我没有使用 case 语句。

我无法使用支持系统 verilog 的免费综合工具。所以,我无法验证我的假设。

for-loop system system-verilog encoder synthesis
1个回答
0
投票

您可以将结果进行“或”运算

always_comb 
begin
  matched_row == 16; // default value if there is no actual match
  foreach(table_row[i])
    if (in[3:0] == table_row[i]) begin
        matched_row[4] == 0;
        matched_row |= i;
    end
© www.soinside.com 2019 - 2024. All rights reserved.