Ошибка при назначении выхода всегда в блоках гребня System Verilog - PullRequest
0 голосов
/ 09 октября 2018

У меня продолжает возникать эта проблема, когда я пытаюсь назначить выходные значения в всегда блоках гребенки, но он продолжает выдавать мне ошибку каждый раз, когда я компилирую, говоря:

Error-[IBLHS-NT] Illegal behavioral left hand side
hits.sv, 10
Net type cannot be used on the left side of this assignment.
The offending expression is : NumHits
Source info: NumHits = 7'b0;

Я не уверен, почемуэто происходит, я уверен, что это должно быть законным, чтобы присвоить выходные значения всегда в блоках гребенки, кто-нибудь может мне помочь?

`default_nettype none

module checkHits
    (output logic hit, [6:0] NumHits, [4:0] BiggestShipHit,
    input logic bomb, [3:0] x, [3:0] y);

    always_comb begin
       hit = 1'b0;
       NumHits = 7'b0000000;
       BiggestShipHit = 5'b00000;
       if (bomb == 1'b1) begin
           if ((x == 4'b0001 && y == 4'b1010)) begin
              hit = 1'b1;
              NumHits = 7'b0000010;
              BiggestShipHit = 5'b00010;
              end
           else if ((x == 4'b0001 && y == 4'b0001)) begin
              hit = 1'b1;
              NumHits = 7'b0000011;
              BiggestShipHit = 5'b01000;
              end
           else if (x == 4'b1010 && y == 4'b0001) begin
              hit = 1'b1;
              NumHits = 7'b0000010;
              BiggestShipHit = 5'b00001;
              end
           else if (x == 4'b1010 && y == 4'b1010) begin
              hit = 1'b0;
              end
           else if (x == 4'b0001) begin
              if ((x == 4'b0010 && y + 1'b1 == 4'b1010) || (x == 4'b0010 &&
                   y == 4'b1010) || (x == 4'b0010 && y - 1'b1 == 4'b1010) ||
                   (x + 1'b1 == 4'b0010 && y + 1'b1 == 4'b1010) ||
                   (x + 1'b1 == 4'b0010 && y == 4'b1010) ||
                   (x + 1'b1 == 4'b0010 && y -1'b1 == 4'b1010)) begin
                       hit = 1'b1;
                       NumHits += 1;
                       if (BiggestShipHit <= 5'b00010)
                          BiggestShipHit = 5'b00010;

1 Ответ

0 голосов
/ 09 октября 2018

Проблема в том, что вы не указали явные типы данных для NumHits и BiggestShipHit, а использовали только диапазоны - они становятся неявными сетями, которые не могут быть назначены процедурно.См. 23.2.2.3 Правила определения типа порта, типа данных и направления в LRM 1800-2017.

Правильный способ - добавить ключевое слово * 1007. *.

module checkHits
    (output logic hit, logic [6:0] NumHits, logic [4:0] BiggestShipHit,
    input logic bomb, logic [3:0] x, y);

Хотя правила не требуют его для ваших входных данных, я всегда добавлял явные типы данных в объявлениях портов.Гораздо легче читать,

...