2011-05-08 17 views
21

Qual è la differenza tra:Qual è la differenza tra == e === in Verilog?

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

e

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

Dopo l'esecuzione dataoutput = 52'bx, il secondo dà 1, ma la prima dà 0. Perché? (0 o 1 è il risultato del confronto.)

+2

Il risultato di 'dataoutput == 8'bx' non è realmente 0, è X. Tuttavia, sia 0 che X sono valori falsi, il che significa che il corpo di' if' non verrà eseguito. – Andy

+3

'a == b' è 'a uguale a b'. '===' è 'a davvero uguale a b'. Ok, è un po 'irriverente, ma è come ricordarli. C'è anche '==?' (forse è uguale a) che usa 'x' come carattere jolly. –

risposta

20

Alcuni tipi di dati in Verilog, come reg, sono 4-stato. Ciò significa che ogni bit può essere uno di 4 valori: 0,1, x, z.

Con l'operatore "caso uguaglianza", ===, xe vengono confrontati, e il risultato è 1.

Con ==, il risultato del confronto non è 0, come avete dichiarato; piuttosto, il risultato è x, secondo lo standard IEEE Std (1800-2009), sezione 11.4.5 "operatori uguaglianza": (! == e =)

Per l'uguaglianza logico e logici operatori disuguaglianza, se, a causa di bit sconosciuti o ad alta impedenza negli operandi, la relazione è ambigua, quindi il risultato deve essere un valore sconosciuto a 1 bit (x) .

13

In Verilog:

  • test == uguaglianza logico (test per 1 e 0, tutti gli altri si tradurrà in x)
  • prove === 4 -state parità logico (test per 1, 0, z ed x)
4

== Per bit confrontando (0 o 1) === per confrontare tutti i 4 stati (0, 1, x, z)

== può essere sintetizzato in un hardware (x-nor gate), ma === non può essere sintetizzato poiché x non è un livello logico valido in digitale, infatti ha tensioni tra 0 e 1. E z non è di per sé logico, mostra disconnessione del circuito.

+0

x può rappresentare uno 0 o un 1. – toolic

Problemi correlati