You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog可综合非优先级编码器实现及代码综合特性问询

问题与解答

需求描述

我有一个包含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:该代码是否会综合为类似优先级编码器的结构?

会。这段代码的for循环是从高序号(i=15)到低序号(i=0)倒序遍历,一旦找到匹配项就给matched_row_num赋值,后续低序号的匹配项无法覆盖已赋值的结果——相当于高序号的表项拥有更高的匹配优先级。综合器会将这种逻辑实现为优先级编码器结构,高地址匹配结果会抢占低地址的输出。

问题2:如何使用for(或generate)语句编写代码以实现非优先级编码器?

因为所有表项唯一,只会存在一个匹配项,所以可以通过并行判断+无优先级赋值的方式实现,让所有匹配判断同时执行,不存在优先级抢占。以下是两种参数化的实现方式:

方式1:纯for循环实现

parameter TABLE_DEPTH = 16; // 可参数化表深度
logic [3:0] table_row[TABLE_DEPTH];
logic [$clog2(TABLE_DEPTH+1)-1:0] matched_row_num; // 多一位存储默认值(表深度值)

always_comb begin
  // 初始化默认值:无匹配时返回表深度(对应原代码的16)
  matched_row_num = TABLE_DEPTH;
  
  // 并行生成所有表项的匹配标志
  logic match_flags[TABLE_DEPTH];
  for (int i=0; i<TABLE_DEPTH; i++) begin
    match_flags[i] = (in[3:0] == table_row[i]);
  end
  
  // 根据匹配标志赋值行号:因仅存在一个匹配,赋值顺序不影响结果
  for (int i=0; i<TABLE_DEPTH; i++) begin
    if (match_flags[i]) begin
      matched_row_num = i;
    end
  end
end

方式2:generate块+for循环实现

parameter TABLE_DEPTH = 16; // 可参数化表深度
logic [3:0] table_row[TABLE_DEPTH];
logic [$clog2(TABLE_DEPTH+1)-1:0] matched_row_num;
logic [TABLE_DEPTH-1:0] match_bits; // 存储每个表项的匹配结果

// 用generate块并行生成所有匹配判断逻辑
generate
  for (genvar i=0; i<TABLE_DEPTH; i++) begin : match_logic_gen
    assign match_bits[i] = (in[3:0] == table_row[i]);
  end
endgenerate

always_comb begin
  matched_row_num = TABLE_DEPTH; // 默认值
  // 根据匹配位赋值行号,无优先级
  for (int i=0; i<TABLE_DEPTH; i++) begin
    if (match_bits[i]) begin
      matched_row_num = i;
    end
  end
end

这两种写法中,所有表项的匹配判断都是并行执行的,没有先后优先级。由于仅存在一个匹配项,最终只会有一个i满足赋值条件,综合器会将其实现为非优先级的多路选择器结构,也就是普通的查找匹配逻辑,不存在优先级抢占。


内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:22:34