Ошибка: "(vlog-2110) Недопустимая ссылка на сеть"

У меня есть простой код fifo в System Verilog. Я получаю несколько vlog-2110 illegal reference to net Сообщения об ошибках. Я ознакомился с предыдущими рекомендациями по работе со стеком и не увидел ничего плохого в том, что я делаю. Пожалуйста помоги!!!

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

Сообщения об ошибках:

vlog -work work -sv -stats= нет C:/Users/Single_FIFO.sv Технология модели ModelSim DE vlog 10.4 Компилятор 2014.12 3 декабря 2014 г. - Модуль компиляции fifo_core_and_cntl
Ошибка: C:/Users/Single_FIFO.sv(24): (vlog-2110) Недопустимая ссылка на net "occucy".
Ошибка: C:/Users/Single_FIFO.sv(26): (vlog-2110) Недопустимая ссылка на net "empty".
Ошибка: C:/Users/Single_FIFO.sv(28): (vlog-2110) Недопустимая ссылка на net "empty".
Ошибка: C:/Users/Single_FIFO.sv(30): (vlog-2110) Недопустимая ссылка на net "full".
Ошибка: C:/Users/Single_FIFO.sv(32): (vlog-2110) Недопустимая ссылка на net "full". ...... ......

Мой простой код fifo: маленькая его оскорбительная часть показана ниже.

module fifo_core_and_cntl (data_in, data_put, data_get, clk, reset_n, data_out, occucy, empty, full); 
  input [7:0]data_in;
  input data_put, data_get, clk, reset_n;
  output [7:0]data_out;
  output empty, full;
  output [4:0]occucy;
  logic [4:0]current_readptr, current_writeptr, next_readptr, next_writeptr;
  logic [15:0][7:0]data_fifo;   // This is data Fifo: 2D packed array of vectors: sixteen 8 bit vectors.

  always_ff @ (posedge clk, negedge reset_n) // For the Current counter updates.
    if (!reset_n)
    begin   
      current_writeptr <= 0;
      current_readptr <= 0;
    end
    else
    begin
      current_writeptr <= next_writeptr;    
      current_readptr <= next_readptr;
    end
  end

  always_comb begin  // Combo logic for fifo status outputs and also for internal fifo rd/wr pointer updates.
    occucy = current_writeptr - current_readptr;     // fifo occupancy indication
    if (current_writeptr == current_readptr)
      empty = 1'b1;
    else
      empty = 1'b0;
  end
endmodule

2 ответа

empty а также full объявлены как output, что означает, что их подразумеваемый тип wire, Вы можете вести только провода с непрерывным assign:

assign empty = some_value;

Если вы хотите назначить эти сигналы из всегда блока, вы должны явно объявить их как logic (или же reg если вы используете Verilog):

`output logic empty, full;

Вы не можете назначать процедуры для проводов, которые являются типом сигнала для ваших выходов по умолчанию. Поскольку вы уже используете SystemVerilog, вам следует обновить список объявлений портов, чтобы сделать его намного проще

module fifo_core_and_cntl ( 
  input wire [7:0] data_in,
  input wire data_put, data_get, clk, reset_n,
  output logic [7:0]data_out,
  output logic empty, full,
  output logic [4:0]occupy
);
Другие вопросы по тегам