2016-07-25 98 views
0

我想知道什么assign hd_trs_detected = |hd_trs_match;意味着verilog。我主要对|hd_trs_match部分感兴趣。我知道|意思是位OR,但不知道如何在|之前没有值地解释它。它被理解为'1'还是'0'?如果它是'0',那么使用|hd_trs_match而不仅仅是hd_trs_match作为hd_trs_detected的优势将永远是什么hd_trs_match is?或者它本身可能是一个明智的操作。Verilog中的变量意味着什么?

+2

[Verilog bitwise或(“|”)monadic]的可能重复(http://stackoverflow.com/questions/19303928/verilog -bitwise-or-monadic) – Qiu

回答

3

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

例如,

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

你可以做同样的&^

+0

'='不是还原算子的一部分。 – Greg

+0

@Greg固定; (谢谢!) – wilcroft

4

在这种ussage的|是降低运营商,而不是逐位运算符。减法操作符在中描述,减法操作符部分描述了LRM的所有版本。从Verilog的原始IEEE标准1364-1995中的§ 4.1.11到最新的SystemVerilog IEEE Std 1800-2012的§ 11.4.9。下面是从IEEE Std 1800-2012 § 11.4.9的摘录:

一元减少运营应在单个操作数执行一个位方式操作以产生一个单位的结果。对于还原和还原OR,和还原XOR运营商,操作的第一步中,应通过表11-18使用表11-16应用操作数的第一位和第二之间的运算符。第二步及后续步骤应使用相同的逻辑表在前一步的1位结果和操作数的下一位之间应用操作符。 ...

逐位和减少运营商使用相同的字符(例如:|&^)。要区分这两者,请检查操作员左侧的值。如果有一个值,那么它是按位进行的,如果没有的话,然后减少。

您可以在同一个表达式中按位和缩减混合。例如out = &in1^|in2;其中&|是缩减运算符(左侧没有值),而^是按位进行的(&in1的结果是左侧值)。但是,为了让人们更容易阅读,重新开始使用括号来更直观地进行缩减操作:out = (&in1)^(|in2);