在 verilog 中的模块调用中不允许并发分配给非网络端口

concurrent assignment to a non-net port is not permitted in module call in verilog

我收到以下端口错误。谁能纠正这个。我附上所有使用端口的代码段。

主模块

`timescale 1ns / 1ps

module northlast_(
input  [15:0] a1,a2,a3,a4,
input  [1:0] c_x, c_y,
output reg [3:0] port
    );
wire [1:0] s_x, s_y,d_x, d_y;
 
 mesh u1(
 .a(a1),
  .c_x(c_x),
  .c_y(c_y),
  .port(port),
  .s_x(s_x),
   .s_y(s_y),
   .d_x(d_x),
   .d_y(d_y)
 );
 
  mesh u2(
  .a(a2),
   .c_x(c_x),
   .c_y(c_y),
   .port(port),
   .s_x(s_x),
    .s_y(s_y),
    .d_x(d_x),
    .d_y(d_y)
 );
 
  mesh u3(
  .a(a3),
   .c_x(c_x),
   .c_y(c_y),
   .port(port),
   .s_x(s_x),
    .s_y(s_y),
    .d_x(d_x),
    .d_y(d_y)
 );
 
  mesh u4(
  .a(a4),
   .c_x(c_x),
   .c_y(c_y),
   .port(port),
   .s_x(s_x),
    .s_y(s_y),
    .d_x(d_x),
    .d_y(d_y)
 );   
    
endmodule
`timescale 1ns / 1ps



module mesh  (
input  [15:0] a,
input  [1:0] c_x,
input  [1:0] c_y ,
output reg [3:0] port,
output reg [1:0] s_x,
output reg [1:0] s_y,
output reg [1:0] d_x,
output reg [1:0] d_y
    ); 
 
  reg d_x=0,d_y=0,s_x=0,s_y=0;
    
 always @ (*)//when cx or cy changes, this loop happens 
 begin
  d_y=a[1:0];// x coordinate of destination address
  d_x=a[3:2];//y coordinate of destination address
 s_y=a[5:4];// x coordinate of source addres
  s_x=a[7:6];// y coordinate of source addres
 

  
  if (d_y>c_y && d_y!= c_y)
      port = {c_x,c_y +2'b1};//east
  else if (d_y<c_y && d_y!= c_y )
         begin
          if ( c_y==0)
           port = {c_x,c_y +2'b1};//west
          else 
         port = {c_x,c_y -2'b1};//east
          end
   else if (d_x<c_x && d_y== c_y)
            port = {c_x-2'b1,c_y}; //south  
   else if (d_x>c_x && d_y== c_y )
               port = {c_x+2'b1,c_y};//north        
         end                   
endmodule


测试平台:

`timescale 1ns / 1ps

module northlast_tb;
reg  [15:0]  a1,a2,a3,a4;
reg [1:0] c_x, c_y;
wire [3:0] port;
    
    
northlast_ u1(
 .a1(a1),
 .a2(a2),
 .a3(a3),
 .a4(a4),
 .c_x(c_x),
 .c_y(c_y),
  .port(port)
 );
 initial 
  begin  
    a1[15:0] = 16'b0011001101001010;//
    c_x=2'b01;
    c_y =2'b00;
    #5
    c_x=2'b01;
    c_y =2'b01;
    #5
    c_x=2'b01;
    c_y =2'b10;
    #5
   /* c_x=2'b11;
    c_y =2'b11;
    #5*/
 a2[15:0] = 16'b0011001110001101;//
       c_x=2'b10;
       c_y=2'b00;
       #5
       c_x=2'b10;
       c_y =2'b01;
       #5
       
       
        a3[15:0] = 16'b0101001111001010;//
          c_x=2'b11;
          c_y =2'b00;
          #5
          c_x=2'b11;
          c_y =2'b01;
          #5
          c_x=2'b11;
          c_y =2'b10;
          #5
           a4[15:0] = 16'b0011001100010111;//
             c_x=2'b00;
             c_y =2'b01;
             #5
             c_x=2'b00;
             c_y =2'b10;
             #5
             c_x=2'b00;
             c_y =2'b11;
             #5
  $finish;                  

end
endmodule

这是错误信息:

ERROR: [VRFC 10-529] concurrent assignment to a non-net port is not permitted [D:/Vivado/northlast/northlast.srcs/sources_1/new/northlast_.v:14]
ERROR: [VRFC 10-529] concurrent assignment to a non-net port is not permitted [D:/Vivado/northlast/northlast.srcs/sources_1/new/northlast_.v:25]
ERROR: [VRFC 10-529] concurrent assignment to a non-net port is not permitted [D:/Vivado/northlast/northlast.srcs/sources_1/new/northlast_.v:36]
ERROR: [VRFC 10-529] concurrent assignment to a non-net port is not permitted [D:/Vivado/northlast/northlast.srcs/sources_1/new/northlast_.v:47]
ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.

您不能将 reg 连接到模块实例的输出端口。

module northlast_ 声明中将 output reg [3:0] port 更改为 output [3:0] port(使其成为错误消息所指的“网络”)。