错误消息“抱歉:当前不支持在always_*进程中选择常量(将包括所有位)。”在系统Verilog中

发布于 2025-01-21 00:57:39 字数 457 浏览 0 评论 0原文

我需要使用“案例”语句来实现4位优先级编码器,并且代码如下:

module case2(
    input [3 : 0] in,
    output logic [1 : 0] pos
);
    always_comb begin
        case(1)
            in[0]:pos=2'b00;
            in[1]:pos=2'b01;
            in[2]:pos=2'b10;
            in[3]:pos=2'b11;
            default:pos=2'b00;
        endcase
    end
endmodule

看来我不能将'1'用作efference_comb block中的案例。我在Google中搜索了,但没有任何帮助。我怎么能解决这个问题?不能将常数用作案件的典范?我认为这是不合理的。 感谢您的建议!

I need to use "case" statement to implement a 4-bit priority encoder,and the code is showed below:

module case2(
    input [3 : 0] in,
    output logic [1 : 0] pos
);
    always_comb begin
        case(1)
            in[0]:pos=2'b00;
            in[1]:pos=2'b01;
            in[2]:pos=2'b10;
            in[3]:pos=2'b11;
            default:pos=2'b00;
        endcase
    end
endmodule

It seems that I can't use '1' as a expr of case in the always_comb block.I have searched in google,but nothing helpful is acquired.How can I solve this problem?Is constant can not be used as a expr of case?I think it's unreasonable.
Thanks for your advice!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

短暂陪伴 2025-01-28 00:57:39

当前不支持”表示该工具认为代码有效,但尚未实现。你没有说你用的是什么工具。

总有蛮力方法:

always_comb 
        case(in)
        4'b0001,4'b0011, ...     4'b1111 :pos=2'b00;
        4'b0010,4'b0110, 4'b1010,4'b1110 :pos=2'b01;
        4'b0100,4'b1100                  :pos=2'b10;
        4'b1000                          :pos=2'b11;
        default                          :pos=2'b00;
endcase

另一种编写方法是使用 priority if 语句

always_comb
  priority if (in[0]) pos=2'b00;
      else if (in[1]) pos=2'b01;
      else if (in[2]) pos=2'b10;
      else if (in[3]) pos=2'b11;
      else            pos=2'b00;

"Not currently supported" means the tool believes the code is valid, but they have not implemented it yet. You did not say what tool you are using.

There is always the brute force approach:

always_comb 
        case(in)
        4'b0001,4'b0011, ...     4'b1111 :pos=2'b00;
        4'b0010,4'b0110, 4'b1010,4'b1110 :pos=2'b01;
        4'b0100,4'b1100                  :pos=2'b10;
        4'b1000                          :pos=2'b11;
        default                          :pos=2'b00;
endcase

Another way you can write this is with a priority if statement

always_comb
  priority if (in[0]) pos=2'b00;
      else if (in[1]) pos=2'b01;
      else if (in[2]) pos=2'b10;
      else if (in[3]) pos=2'b11;
      else            pos=2'b00;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文