2011-05-08 13 views
21

Jaka jest różnica pomiędzy:Jaka jest różnica między == a === w Verilog?

if (dataoutput[7:0] == 8'bx) begin 

i

if (dataoutput[7:0] === 8'bx) begin 

Po wykonaniu dataoutput = 52'bx, drugi daje 1, ale pierwszy daje 0. Dlaczego? (0 lub 1 to wynik porównania.)

+2

Wynik 'dataoutput == 8'bx' nie jest tak naprawdę 0, jest X. Jednak zarówno 0, jak i X są wartościami fałszywymi, co oznacza, że ​​ciało' if' nie zostanie wykonane. – Andy

+3

'a == b' to 'a equals b'. '===' jest 'a really equals b'. Ok, to trochę niepoważne, ale tak je zapamiętuje. Jest też "==?" (może równe), które używa 'x' jako symbolu wieloznacznego. –

Odpowiedz

20

Niektóre typy danych w Verilog, takie jak reg, są 4-stanowe. Oznacza to, że każdy bit może być jedną z 4 wartości: 0,1, x, z.

z operatorem „przypadek” równość, ===, x są porównywane, a wynik jest 1.

Z ==, wynik porównania nie jest równa 0, jak podano; raczej wynik jest x, zgodnie z IEEE Std (1800-2009), rozdział 11.4.5 "operatorów równości" (! == i =)

Dla logicznego równości i logicznych operatorów nierówności jeśli, z powodu nieznanych lub wysokiej impedancji bitów w operandach, relacja jest niejednoznaczna, wówczas wynikiem będzie 1-bitowa nieznana wartość (x).

13

W Verilogu:

  • testy == logiczny równości (testy na 1 i 0, wszystkie inne spowoduje X)
  • === testy 4 -state logiczna równość (testy dla 1, 0, z i x)
4

== Na bitach porównywanie (0 lub 1) === porównywania wszystkich 4 stanów (0, 1, x, z)

== można zsyntetyzować w sprzęcie (x-nor gate), ale === nie może być zsyntetyzowane, ponieważ x nie jest prawidłowym poziomem logicznym w postaci cyfrowej, ma napięcie w zakresie od 0 do 1. A z nie jest żadną logiką, pokazuje odłączenie obwodu.

+0

x może reprezentować 0 lub 1. – toolic