2016-09-17 527 views
0

我使用Verilog和所有的輸入模擬中是好的,但所有輸出保持高impledance狀態(在波窗口藍線)。Modelsim的模擬輸出總是顯示高impledance狀態(藍線)

這裏是.V文件:

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 

和測試臺文件:

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 

我不知道問題出在哪裏。以及爲什麼會發生這種情況...

+0

我在測試平臺上看不到任何'de_mux'實例。 – gudok

+0

啊!我多麼粗心。感謝您的直接評論。 –

回答

0

您在主模塊的計時過程中使用了非阻塞賦值。實際上,您試圖在每個時鐘上分配DataOutN < = 8'b00000000和case語句。 如果您將這些< =更改爲=(阻止分配),則可以使用所有DataOutN的問題來解決問題

我還看到您正在對變量h做同樣的事情。您將h分配給非阻塞兩次。你可以修改h從非阻塞切換到阻塞,但是你需要驗證在NewPacket的情況下,你首先希望它通過h = DataIn [6:4] - 3'b001分配,然後更新啊= H + 1

變量L中的「其他」項不分配,這可能意味着你要指定爲它的原始值L。我實際上將這些寫入聲明中,使其看起來有意爲之。

+0

非常感謝。 –