2017-02-21 26 views
0

Я несколько новичок в verilog. Поэтому этот вопрос может быть очень простым. Я пытаюсь имитировать конечную машину с использованием verilog. Краткое описание: Есть три состояния: 0,1 & 2. По умолчанию, государство 0. состояние изменяется на 1, только если вход 01. состояние изменяется на 2, только если вход 10. состояние изменяется обратно на 0, только если ввод равен 00. Код успешно моделируется, но Im не получает выход. Пожалуйста, помогите мне с проблемой.Не получить симулированный выход для кода ошибки verilog

Код: (State.v)

module State(
    input clk, 
    input reset, 
    input [3:0] in, 
    output [3:0] out, 
    output [3:0] state 
    ); 

    wire clk,reset; 
    wire [3:0] in; 
    reg [3:0] out; 
    reg [3:0] state; 

    always @(posedge clk or posedge reset) 
     begin 
     if (reset == 1) 
     begin 
      state = 0; 
     end 
     else 
     begin 
      case (state) 
       0: if(in == 2'b01) 
         state = 1; 
         else 
         state = 0; 
       1: if(in == 2'b10) 
         state = 2; 
         else 
         state = 1; 
       2: if(in == 2'b00) 
         state = 0; 
         else 
         state = 2; 
       default: state = 0;  
      endcase 
     end 
    end  

    always @(*) 
     begin 
      case (state) 
       0: out = 2'b00; 
       1: out = 2'b01; 
       2: out = 2'b10; 
       default: out = 2'b00; 
      endcase  
     end  

endmodule 

Testbench: (StateTestBench.v)

module StateTestBench; 

    // Inputs 
    reg clk; 
    reg reset; 
    reg [3:0] in; 

    // Outputs 
    reg [3:0] out; 
    reg [3:0] state; 

    always 
     begin 
      #1 clk = !clk; 
     end 

    // Instantiate the Unit Under Test (UUT) 
    State uut (
     .clk(clk), 
     .reset(reset), 
     .in(in), 
     .out(out), 
     .state(state) 
    ); 

    initial begin 
     // Initialize Inputs 
     clk = 0; 
     reset = 0; 

     #1 reset = 1; 
     #10 reset = 0; 
     #5 in = 2'b00; 
     #10 in = 2'b01; 
     #10 in = 2'b10; 



    end 

endmodule 
+0

Должны быть предупреждения о компиляторе, поскольку вы смешиваете стили заголовков ANSI и не ANSI. С использованием стиля ANSI вы не должны повторно объявлять сети и переменные с теми же именами, что и порт. Измените 'output [3: 0]' на 'output reg [3: 0]' и удалите из '' '' '' '' '' 'декларации' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 'state' также должно быть назначено неблокирующими назначениями (' <= '), а не блокировкой назначений (' = '). – Greg

ответ

0

Я думаю, вы имитировать state.v вместо StateTestBench.v. Потому что у вашего testbench есть ошибка! Выходы и состояние ДОЛЖНЫ быть проводами.

+0

Спасибо большое! Это решило мою проблему. –