2016-04-09 20 views
0

ich durch die LRM geschaut haben, haben keine klare Antwort gefunden ... Wie wird die interpretiert folgende:SystemVerilog: Verwendung von unsized & unbased wörtlichen im Vergleich

logic [7:0] data; 
logic  sig_out; 

assign sig_out = (data == '1); 

Wird es so interpretiert werden:

assign sig_out = (data == 8'hFF); 

Do sim & Synthese interpretieren dies anders?

thx

PB & J

+0

Ich kenne die Antwort nicht, aber ich habe Mühe zu sehen, wie 'sig_out = (data == '1)' anders interpretiert werden könnte als 'sig_out = (data == 8'hFF)'. Was hattest du vor? –

+0

Synthesiere es und finde es heraus. – toolic

Antwort

2

5.7.1 Ganzzahlliteral Konstanten der LRM 1800-2012 erklärt, dass '1 die Breite des Wertes hat, basierend auf dem Kontext, in dem sie verwendet wird. Wenn es in einem selbstbestimmten Kontext verwendet wird, hat es eine Breite von 1 Bit. Tabelle 11-21 erklärt, dass die Operanden von relationalen Operatoren in einem Kontext mit dem größten Operanden

So '1 in Ihrem Kontext ist 8'hff.

0

Es funktioniert als 8'hff.

Betrachten Sie den Code unten, damit Ausgang ist -

module top(); 
    logic [7:0] data; 
    logic  sig_out; 

    assign sig_out = (data == '1); 

    initial 
    begin 
     data = 'h01; 
     #1 $display("sig_out - %0h", sig_out); 
     data = 'h0f; 
     #1 $display("sig_out - %0h", sig_out); 
     data = 'hff; 
     #1 $display("sig_out - %0h", sig_out); 
    end 
endmodule 

Ausgang -

sig_out - 0 
sig_out - 0 
sig_out - 1 
0

‚1 bedeutet, dass alle diejenigen, also wenn Daten 8 Bit breit dann data = 8'hff. Wenn Sie den Wert 8'h01 in einem kontextbestimmten Längenweg schreiben wollen, verwenden Sie 'b1, was in diesem Fall als 8'h01 interpretiert wird.