【问题标题】:What does |variable mean in verilog?|变量在verilog中是什么意思?
【发布时间】:2016-07-25 20:16:58
【问题描述】:

我想知道assign hd_trs_detected = |hd_trs_match; 在verilog 中的含义。我最感兴趣的是|hd_trs_match 部分。我知道 |表示按位或,但不确定如何在没有 | 之前的值的情况下解释它。它是理解的“1”还是“0”?如果它是“0”,那么使用|hd_trs_match 与仅使用hd_trs_match 相比有什么优势,因为hd_trs_detected 始终是hd_trs_match is?或者它本身可能是一个有点明智的操作。

【问题讨论】:

标签: verilog operator-keyword bitwise-operators


【解决方案1】:

在此用法中,| 是归约运算符,而不是按位运算符。归约运算符在 LRM 的所有版本的 归约运算符 部分中进行了描述。从第 4.1.11 节中的 Verilog 原始 IEEE Std 1364-1995 到第 11.4.9 节中的最新 SystemVerilog IEEE Std 1800-2012。以下是IEEE Std 1800-2012 § 11.4.9 的摘录:

一元归约运算符应对单个操作数执行按位运算以产生单个位结果。对于归约与归约或归约异或运算符,操作的第一步应在操作数的第一位之间应用运算符第二个使用表 11-16 到表 11-18。第二步和随后的步骤应使用相同的逻辑表在前一步的 1 位结果和操作数的下一位之间应用运算符。 ...

按位和归约运算符使用相同的字符(例如:|&^)。要区分两者,请检查运算符左侧的值。如果有值,则按位计算,如果没有,则归约。

您可以在同一个表达式中混合按位和归约。例如out = &in1 ^ |in2;,其中&| 是归约运算符(左侧没有值),^ 是按位运算(&in1 的结果是左侧值)。但是,为了更易于阅读,建议使用括号使归约操作更加直观:out = (&in1) ^ (|in2);

【讨论】:

    【解决方案2】:

    | 是一个归约运算符。对于多位信号,它会产生一个输出,将操作数应用于向量的每一位。

    例如,

    wire [3:0] in;
    wire out;
    assign out = |in; // the same as out = in[3] | in[2] | in[1] | in[0];
    

    &^ 等也可以这样做。

    【讨论】:

    • = 不是归约运算符的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2011-08-30
    • 2021-11-25
    • 2022-07-26
    • 1970-01-01
    相关资源
    最近更新 更多