2016-09-17 2 views
0

Ich benutze Verilog und alle Eingabe in der Simulation ist in Ordnung, aber alle Ausgänge bleiben High-Implementierungs-Zustand (blaue Linie in Wave-Fenster). HierModelsim Simulation Ausgabe zeigt immer High-Implementierung-Zustand (blaue Linie)

ist die .v-Datei:

module de_mux(
input clk, NewPacket, 
input [7:0] DataIn, 
output reg [7:0] DataOut0, DataOut1, DataOut2, DataOut3, DataOut4, DataOut5, DataOut6, DataOut7 
); 
reg [2:0] h = 3'bxxx; 
reg [3:0] l = 4'bxxxx; 
reg [7:0] t = 8'b00000000; 

always @ (posedge clk) 
begin 
    DataOut0 <= 8'b00000000; 
    DataOut1 <= 8'b00000000; 
    DataOut2 <= 8'b00000000; 
    DataOut3 <= 8'b00000000; 
    DataOut4 <= 8'b00000000; 
    DataOut5 <= 8'b00000000; 
    DataOut6 <= 8'b00000000; 
    DataOut7 <= 8'b00000000; 

    case (h) 
     3'b000: DataOut0 <= t; 
     3'b001: DataOut1 <= t; 
     3'b010: DataOut2 <= t; 
     3'b011: DataOut3 <= t; 
     3'b100: DataOut4 <= t; 
     3'b101: DataOut5 <= t; 
     3'b110: DataOut6 <= t; 
     3'b111: DataOut7 <= t; 
     default:; 
    endcase 

    if (NewPacket) 
     begin 
      h <= DataIn [6:4] - 3'b001; 
      l <= DataIn [3:0] + 4'b0001; 
     end 
    else if (l > 0) 
     begin 
      t <= DataIn; 
      l <= l - 4'b0001; 

     end 
    else 
     begin 
      t <= 8'b00000000; 
     end 
    h <= h + 3'b001; 
end 
endmodule 

und der Prüfstand-Datei:

module de_mux_test(); 
reg clk; 
reg NewPacket; 
reg [7:0] DataIn; 
wire [7:0] DataOut0, DataOut1, DataOut2, DataOut3, DataOut4, DataOut5, DataOut6, DataOut7; 

always begin 
    #10 clk = ~clk; 
end 

initial begin 

    clk = 1'b1; 

    NewPacket = 1'b1; DataIn = 8'b01110011; #20 
    NewPacket = 1'b0; DataIn = 8'b00010001; #20 
    NewPacket = 1'b0; DataIn = 8'b00100010; #20 
    NewPacket = 1'b0; DataIn = 8'b00110011; #20 
    NewPacket = 1'b0; DataIn = 8'b01000100; #20 
    NewPacket = 1'b0; DataIn = 8'b00000000; #20 

    NewPacket = 1'b1; DataIn = 8'b00000010; #20 
    NewPacket = 1'b0; DataIn = 8'b10001000; #20 
    NewPacket = 1'b0; DataIn = 8'b10011001; #20 
    //NewPacket = 1'b0; DataIn = 8'b00000000; 
    #20 
    #20 
    $finish; 
end 
endmodule 

Ich weiß nicht, wo das Problem ist. und warum das passiert ...

+0

Ich sehe keine Instanziierung von 'de_mux' im Prüfstand. – gudok

+0

Ah! Wie unvorsichtig ich bin. Danke für deinen direkten Kommentar. –

Antwort

0

Sie verwenden in Ihrem getakteten Prozess Ihres Hauptmoduls nicht blockierende Zuweisungen. Effektiv versuchen Sie DataOutN < = mit sowohl 8'b00000000 als auch der case-Anweisung auf jeder Uhr zuzuweisen. Wenn Sie ändern diejenigen < = to = (Blockzuweisung) Sie das Problem beheben kann mit allen Ihren DataOutN des

Ich sehe auch, dass Sie die gleiche Sache mit der Variablen h tun. Sie weisen h zweimal nicht blockierend zu. Sie könnten vielleicht h mit dem Wechsel von Nicht-Blockieren zu Blockieren beheben, aber Sie werden sicherstellen wollen, dass im Fall von NewPacket, dass Sie es zuerst von h = DataIn [6: 4] - 3'b001 zugewiesen und dann später aktualisiert werden sollen mit ah = h + 1.

Die Variable l ist im "else" -Begriff nicht zugeordnet, was wahrscheinlich bedeutet, dass Sie l als ursprünglichen Wert zugewiesen bekommen sollen. Ich würde das in die Aussage schreiben, um es absichtlich aussehen zu lassen.

+0

Vielen Dank. –

Verwandte Themen