繁体   English   中英

我们可以在 C 或 SystemVerilog 中的 ifdef MACROS 中使用条件吗?

[英]Can we use conditions in ifdef MACROS in C or SystemVerilog?

我想要那样的东西

    `ifdef N_O > N_I
        `define GREATER 1
    `else
        `define LESSER 1
    `endif

却做不到。 任何解决方案或阅读?

我努力做到这一点,但做不到。

Verilog 不提供这样的工具。 文本宏只有一种可能的操作:检查它们是否存在。 因此有`ifdef`ifndef`elsif 所有只接受一个参数,即文本宏的名称。

然而,在许多情况下,可以通过使用generate verilog 特性来弥补这种功能上的不足。 最好使用此功能,因为 Verilog 控制声明的语法和范围。

以下是使用生成功能的示例:

module mod #(parameter N_0=1, parameter N_1=2)(input logic in1, in2, output logic out);
    if (N_1 > N_2) begin
         always_comb
             out = in1;
    end
    else begin
         always_comb 
             out  = in2;
    end
endmoudle

这是一个演示该功能的虚构示例,可以在没有“生成”块的情况下实现:

    alwas_comb begin
        if (N_1 > N_2) out = in1;
        else out = in2;
    end

然而,生成结构并不能解决所有问题,因此经常需要混合使用文本宏和生成块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM