我有一个包含 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
使用 for 循环的原因是表深度实际上是可参数化的,因此我希望这个逻辑是模块化的。这就是原因,我没有使用 case 语句。
我无法使用支持系统 verilog 的免费综合工具。所以,我无法验证我的假设。
您可以将结果进行“或”运算
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