2016-04-19 6 views
0

Ich habe ein ungelöstes Problem mit der Verwendung von Struct in Verilog.VERILOG Problem mit Struktur

Hier ist mein Code:


//Other technic 
//typedef struct{bit Over_I;}reg_type; 

// Code 
module Overload(rst_n,clock,vlowp,IHigh,Over_I); 

    // Port declaration 
    input rst_n,clock,vlowp,IHigh; 
    output Over_I; 

    reg S_NOM = 0; 
    reg S_OVL = 1; 

    struct{ 
     reg Over_I; 
    } reg_type; 

    reg_type Reg,NextReg; 

    initial 
    begin 
     Over_I = Reg.Over_I; 
    end 

Ich habe versucht, mit einem typedef außerhalb des Moduls ohne Erfolg.

Die von der Konsole gegeben Fehler sind:

„ERROR: HDLCompiler: 806 - "C: /....../ Lattice_tests/Test_Verilog/sources/overload_test.v" Zeile 26: Syntaxfehler in der Nähe von "{".

die Linie 26 ist die Linie, wo i Struktur definiert.

Wenn mir jemand helfen kann, wäre ich dankbar. Dank. Franckois

Antwort

1

Verilog nicht struct Datentypen unterstützen SystemVerilog (th der Nachfolger von Verilog). Alle modernen Verilog-Simulatoren sind SystemVerilog-Simulatoren. Sie können SystemVerilog aktivieren, indem Sie die Dateilöschung von .v auf .sv ändern. Die meisten Simulatoren verfügen über eine Kompilierungsoption, um alle Verilog-Dateien als SystemVerilog zu erzwingen. Sie müssen jedoch auf das Handbuch verweisen, was nicht empfohlen wird. Es gibt eine Menge Verilog-Code, der Variablen-/Netznamen verwendete, die mit SystemVerilog-Schlüsselwörtern in Konflikt stehen (z. B. bit und byte). Der Simulator kann die Dateien korrekt analysieren, wenn die Dateierweiterungen korrekt verwendet werden.

Auch initial wird nur einmal zuweisen. Over_I hat nach Zeit 0 nicht den Wert Reg.Over_I. Plus eine Leitung (der Standardtyp eines Ausgangs) kann nicht innerhalb eines prozeduralen Blocks zugewiesen werden (z. B. initial und Blöcke). Verwenden Sie eine assign-Anweisung oder machen Sie sie zu einer output reg und ordnen Sie sie in einem (angenommenen SystemVerilog) always_comb oder always_ff Block oder Verilog Block zu.