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

SystemVerilog下组合逻辑实现CAM+环形缓冲的索引查找方案咨询

SystemVerilog CAM查找逻辑实现方案

核心实现思路

由于仅需要64个条目、优先保障查找速度,直接采用全并行比较+优先编码器的组合逻辑实现即可,所有比较逻辑并行执行,无遍历延迟,完全符合需求。

代码实现

已完成的复位、写入逻辑无需修改,新增查找逻辑如下:

1. 内部信号定义

// 匹配掩码:每一位对应buffer一个条目的匹配状态,1表示匹配
logic [2**DEPTH_BITS - 1 : 0] match_mask;
// 组合逻辑输出的查找结果
logic [DEPTH_BITS - 1 : 0] index_comb;
logic index_valid_comb;

2. 组合逻辑查找块(完全无时序逻辑)

always_comb begin
  // 赋默认值避免生成锁存器
  match_mask = '0;
  index_comb = '0;
  index_valid_comb = 1'b0;

  if (rd_en) begin
    // 并行比较所有buffer条目,生成匹配掩码
    for (int i = 0; i < 2**DEPTH_BITS; i++) begin
      match_mask[i] = (buffer[i] == inp);
    end

    // 存在匹配条目时输出第一个命中的索引(任意命中即可,选第一个实现最简单)
    if (|match_mask) begin
      index_valid_comb = 1'b1;
      // SV2012内置$find_first_set返回第一个置1位的1-based序号,转换为0-based索引
      index_comb = $clog2($find_first_set(match_mask)) - 1'b1;
    end
  end
end

3. 输出打拍时序逻辑(仅此处有时序)

always_ff @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    index <= '0;
    index_valid <= 1'b0;
  end else begin
    index <= index_comb;
    index_valid <= index_valid_comb;
  end
end

FPGA适配说明

  • 上述逻辑在无CAM硬核的Lattice、Xilinx器件上均可正常综合,静态展开的并行比较会被映射为LUT实现的比较逻辑,64条目规模下100MHz以上时钟频率无时序压力
  • 若部分旧版EDA工具对$find_first_set支持不完善,可替换为自定义优先编码器逻辑,只需把索引计算部分替换为从高到低/从低到高遍历match_mask取第一个置1位即可,仍为纯组合逻辑
  • 若后续需要优先返回最新写入的匹配条目,只需调整匹配掩码的遍历顺序,从next指针的前一个位置反向查找即可,修改成本极低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:45:04