2016-07-25 145 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);