Я получаю ошибки компиляции: data_out не является допустимым l-значением

  1. Это блок-модуль...

    module register_unit(data_out,data_in,load,clk,rst);
    parameter word_size=8;
    output [word_size-1:0] data_out;
    input [word_size-1:0] data_in;
    input load,clk,rst;
    reg data_out;
    
    always@(posedge clk or negedge rst)
      if(rst==0)
        data_out <= 0;
      else if(load)
        data_out <= data_in;
    endmodule
    
  2. Это испытательный стенд

    `include "register_unit.v"
    
    module test_bench();
    
    parameter word_size=8;
    
    reg clk,rst,load;
    reg [word_size-1:0] data_in;
    wire [word_size-1:0] data_out;
    
    register_unit m1 (.data_out(data_out),.data_in(data_in),.load(load),.clk(clk),.rst(rst));
    
    initial
    begin
      clk=0;
      forever begin
        #5 clk = ! clk; 
      end
    end
    
    initial
    begin
      rst=0;
      data_out=8'b0;
      load=0;
      #10 rst=1;
      load=1;
      #10 data_out=8'b00000100;
      #10 data_out=8'b00000101;
      #20 load=0;
    end
    
    initial
    begin
      $dumpfile ("register_unit.vcd");
      $dumpvars;
    end
    endmodule
    
  3. Я компилирую этот код с помощью команды iverilog в Linux.

  4. iverilog -o register_unit.v register_unit_tb.v

  5. При компиляции кода выдает ошибку на порту data_out, говорит, что это недопустимое преобразование.

  6. Ошибки заключаются в том, что data_out не является допустимым значением l в test_bench, а data_out объявлен здесь как wire.


person Devender Bhardwaj    schedule 07.03.2017    source источник


Ответы (1)


Вы не можете присвоить значение wire в блоке initial. В блоке initial вашего тестового стенда измените data_out на data_in:

initial
begin
rst=0;
data_in=8'b0;
load=0;
#10 rst=1;
load=1;
#10 data_in=8'b00000100;
#10 data_in=8'b00000101;
#20 load=0;
end

Я также получил предупреждение компилятора в register_unit. Вы должны объявить reg, используя битовую ширину:

reg [word_size-1:0] data_out;
person toolic    schedule 07.03.2017
comment
Предупреждение компилятора о register_unit также можно устранить, переключившись на заголовок в стиле ANSI. module register_unit #(parameter word_size=8) ( output reg [word_size-1:0] data_out, input [word_size-1:0] data_in, input load, clk, rst ); - person Greg; 07.03.2017