2016-09-17 5 views
0

을 사용합니다. Verilog를 사용하고 시뮬레이션의 모든 입력은 문제가 없지만 모든 출력은 높은 임플란트 상태 (웨이브 창에서 파란색 선)로 유지됩니다.Modelsim 시뮬레이션 출력은 항상 높은 임플란트 상태 (파란색 선)

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 

여기

는 .V 파일입니다. 왜 이런 일이 일어나는가 ...

+0

테스트 벤치에서'de_mux'의 인스턴스화가 보이지 않습니다. – gudok

+0

아! 내가 얼마나 부주의한지. 직접적인 코멘트 주셔서 감사합니다. –

답변

0

주 모듈의 클록 된 프로세스에서 비 차단 할당을 사용하고 있습니다. 효과적으로 DataOutN < =에 8'b00000000과 case 문을 모두 할당하려고합니다. < = to = (차단 할당)을 변경하면 모든 DataOutN의 문제를 해결할 수 있습니다.

또한 변수 h를 사용하여 동일한 작업을 수행하고 있습니다. 비 차단을 h로 두 번 지정합니다. 비 블로킹에서 블로킹으로 전환하면서 h를 고칠 수 있지만 NewPacket 이벤트에서 h = DataIn [6 : 4] - 3'b001에 의해 할당 된 다음 나중에 업데이트되도록하려는 경우 012h # h + 1을 사용합니다.

"else"용어에 변수 l이 지정되어 있지 않습니다. 아마 원래 값으로 할당되기를 원할 것입니다. 나는 의도적으로 보이게하기 위해 그것을 진술서에 실제로 써 넣을 것이다.

+0

정말 고마워요. –