2014-11-25 3 views
1

Мое задание состоит в том, чтобы закодировать простой 2-4-декодер, а затем отобразить возможные результаты и форму волны.Verilog testbench код с использованием gEDA и iVerilog

Я использую комплект gEDA вместе с Icarus Verilog (iVerilog) в качестве компилятора и GTKWave для формы волны.

Это мое первое кодирование с Verilog или работа с набором gEDA. Из поиска в Google кажется, что мне нужно следовать этому проекту:

  1. подумайте о дизайне, который хотите реализовать. В моем случае декодер
  2. реализовать проект в VHDL/Verilog.
  3. Внедрение тестового стенда в VHDL/Verilog.
  4. Compile дизайн файл и файл с iVerilog испытательного стенда
  5. Использованием и испытательным стендом .vcd файл дамп для отображения сигнала с использованием GTKWave

Файл обыкновения компилировать испытательный стенд, и я не знаю, почему, я попытался несколько вариаций и я продолжаю получать ошибки. Буду признателен за любую оказанную помощь. Спасибо.

Вот мой код дизайн файла:

// 2 to 4 Decoder 
// File Name: decoder.v 

module decoder(X,Y,E,Z); 
    input X,Y,E; 
    output [0:3]Z; 
    wire [0:3]Z; 
    wire X1, Y1; 

    not 
     inv1(X1,X), 
     inv2(Y1,Y); 
    and 
     and1(Z[0],X1,Y1,E), 
     and2(Z[1],Y1,X,E), 
     and3(Z[2],Y,X1,E), 
     and4(Z[3],X,Y,E); 
endmodule 

Вот мой испытательный стенд код:

module decoder_tb; 
    input X,Y,E; 
    output [0:3]Z; 
    //wire [0:3]Z; 
    //wire X1, Y1; 

    // should create .vcd dump file for GTKWave 
    initial 
     begin 
      $dumpfile("decoder.vcd"); 
      $dumpvars();  
     end 

    decoder decode(X,Y,E,Z); 
    initial 
     begin 
      $display($time,"<< Z[0]=%d Z[1]=%d Z[2]=%d Z[3]=%d >>", Z[0] , Z[1] , Z[2] , Z[3]); 
     end 

    initial 
     begin 
     #0 
     X = 0; Y = 0; E = 1; 
     #5 
     X = 0; Y = 1; E = 1; 
     #10 
     X = 1; Y = 0; E = 1; 
     #15 
     X = 1; Y = 1; E = 1; 
     end 
endmodule 

команды в терминале я использую являются:

iverilog -o decoder.vvp decoder.v decoder_tb.v 
gtkwave decoder.vcd 

EDIT: Вот точное сообщение об ошибке

[email protected]:~/verilogCode$ iverilog -o decoder.vvp decoder.v decoder_tb.v 
decoder_tb.v:26: error: X is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : X is declared here as wire. 
decoder_tb.v:26: error: Y is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : Y is declared here as wire. 
decoder_tb.v:26: error: E is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : E is declared here as wire. 
decoder_tb.v:28: error: X is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : X is declared here as wire. 
decoder_tb.v:28: error: Y is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : Y is declared here as wire. 
decoder_tb.v:28: error: E is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : E is declared here as wire. 
decoder_tb.v:30: error: X is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : X is declared here as wire. 
decoder_tb.v:30: error: Y is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : Y is declared here as wire. 
decoder_tb.v:30: error: E is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : E is declared here as wire. 
decoder_tb.v:32: error: X is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : X is declared here as wire. 
decoder_tb.v:32: error: Y is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : Y is declared here as wire. 
decoder_tb.v:32: error: E is not a valid l-value in decoder_tb. 
decoder_tb.v:6:  : E is declared here as wire. 
12 error(s) during elaboration. 

ответ

1

В вашем тестбенча, изменить input к reg и output к wire. Это исправляет ошибки компиляции для меня (хотя я не использую gEDA или iVerilog):

module decoder_tb; 
    reg X,Y,E; 
    wire [0:3]Z; 
+1

Спасибо, мужчина, не знаю, почему я этого не пытался. – milleraj66

+0

@ milleraj66: Добро пожаловать. В этом случае мои симуляторы выдавали гораздо более значимые сообщения об ошибках, чем ваш: «Идентификатор« X »не отображается в списке портов». – toolic