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

SystemVerilog中priority casez在同步always块不可综合问题求解

问题原因排查

首先你遇到的报错和priority casez本身的可综合性无关,错误来自两个代码编写问题:

  • 关键字拼写错误:SystemVerilog 关键字区分大小写,你写的大写Priority属于非法语法,正确关键字为小写priority
  • 异步复位逻辑缺失:你的always块敏感列表包含negedge rst异步复位触发条件,但代码块内没有任何复位分支判断,不符合可综合时序逻辑的编码规范,这是触发你报错的直接原因。

priority casez本身是标准可综合语法,主流FPGA、ASIC综合工具均提供支持,只要写法符合规范不会出现综合问题。

最优实现方案

你要实现的提取4位sel最低有效置位位的需求,不需要写分支判断,用位运算即可实现,代码更简洁,综合后的电路面积、时序表现更优,核心逻辑公式为:
check = sel & (~sel + 1'b1);
该逻辑通用任意位宽的sel信号,无需修改即可扩展到更高位宽的请求仲裁场景。

可综合代码示例

方案1:修正后的priority casez版本

always @(posedge clk or negedge rst) begin
    // 补充异步复位逻辑
    if(!rst) begin
        check <= 4'd0;
    end else begin
        priority casez(sel)
            4'b???1: check <= 4'd1;
            4'b??1?: check <= 4'd2;
            4'b?1??: check <= 4'd4;
            4'b1???: check <= 4'd8;
            default: check <= 4'd0;
        endcase
    end
end

注:原代码中4'b0000分支和default分支功能重复,可以直接删除冗余的4'b0000分支。

方案2:位运算最优版本

always @(posedge clk or negedge rst) begin
    if(!rst) begin
        check <= 4'd0;
    end else begin
        check <= sel & (~sel + 1'b1);
    end
end

内容的提问来源于stack exchange,提问作者Frog the Freddie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:09:00