我想知道什么assign hd_trs_detected = |hd_trs_match;
Verilog 中的意思。我最感兴趣的是|hd_trs_match
部分。我知道|表示按位或,但不确定如何解释它之前没有值|
。它是可理解的“1”还是“0”?如果它是“0”,那么使用它有什么好处|hd_trs_match
与只是hd_trs_match
as hd_trs_detected
永远都会是无论什么hd_trs_match is
?或者这本身就是一个明智的操作。
在这种用法中|
是归约运算符,而不是按位运算符。归约运算符的描述见归约运算符部分 LRM 的所有版本。从 Verilog 的原始 IEEE Std 1364-1995 § 4.1.11 到最新的 SystemVerilogIEEE 标准 1800-2012在第 11.4.9 节中。这是摘录自IEEE 标准 1800-2012§ 11.4.9:
The 一元归约运算符应对单个操作数执行按位运算以产生单位结果。为了减少和, 减少或, and 减少异或运算符,运算的第一步应使用表 11-16 到表 11-18 在操作数的第一位和第二位之间应用运算符。第二步和后续步骤应使用相同的逻辑表在前一步的 1 位结果和操作数的下一位之间应用运算符。 ...
按位运算符和归约运算符使用相同的字符(例如:|
, &
, ^
)。要区分两者,请检查运算符左侧的值。如果有值,则按位进行,如果没有,则进行归约。
您可以在同一表达式中混合按位和归约。例如out = &in1 ^ |in2;
哪里的&
and |
是归约运算符(左侧没有值)和^
是逐位的(结果&in1
是左值)。然而,为了更具人类可读性,我们重新开始使用括号使归约运算在视觉上更加明确:out = (&in1) ^ (|in2);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)