ERROR: [VRFC 10-1145] non-net port d_x cannot be of mode inout error in verilog

ERROR: [VRFC 10-1145] non-net port d_x cannot be of mode inout error in verilog

我正在编写一个代码,用于在 NOC 中通过最北路由查找路径。我没有将任何输入声明为 inout,但仍然显示下面给出的错误。对于我编写的所有代码,都会弹出此错误。问题出在哪里?

我在这里提供我的代码和测试平台。

代码:

timescale 1ns / 1ps



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

测试平台:

`timescale 1ns / 1ps


module north_tb(
reg  [15:0] a,
reg [1:0] c_x,
reg [1:0] c_y ,
wire [3:0] port
 
    );
    
 mesh u1(
 .a(a),
 .c_x(c_x),
 .c_y(c_y),
 .port(port)
 );
    
  initial 
  begin  
    a[15:0] = 16'b100110101001010;//
    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'b10;
    c_y =2'b10;
    #5
          
    
 
                  
  
  $finish;                  
                    
                    
                    


end
endmodule

错误信息如下:

ERROR: [VRFC 10-1145] non-net port d_x cannot be of mode inout [D:/Vivado/northlast/northlast.srcs/sim_1/new/comp_tb.v:4]
ERROR: [VRFC 10-1145] non-net port d_y cannot be of mode inout [D:/Vivado/northlast/northlast.srcs/sim_1/new/comp_tb.v:5]
ERROR: [VRFC 10-1145] non-net port c_x cannot be of mode inout [D:/Vivado/northlast/northlast.srcs/sim_1/new/comp_tb.v:6]
ERROR: [VRFC 10-1145] non-net port c_y cannot be of mode inout [D:/Vivado/northlast/northlast.srcs/sim_1/new/comp_tb.v:7]
ERROR: [VRFC 10-1040] module comp_tb ignored due to previous errors [D:/Vivado/northlast/northlast.srcs/sim_1/new/comp_tb.v:3]

Testbench 一般没有端口。 模拟器不喜欢 posted 测试台使用端口访问被测设计 (DUT) 的方式。

测试台访问DUT的方式是使用在测试台本地声明的信号。

像这样:

// testbench module does not have ports
module north_tb();    

  // use local signals to access the DUT
  reg  [15:0] a  ;
  reg [1:0] c_x  ;
  reg [1:0] c_y  ;
  wire [3:0] port;  
    
 mesh u1(
 .a(a),
 .c_x(c_x),
 .c_y(c_y),
 .port(port)
 );
  initial 
  begin  
    a[15:0] = 16'b100110101001010;//
    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'b10;
    c_y =2'b10;
    #5

  $finish;                  
end
endmodule

post 网格模块有问题。它实例化了一个名为 comp 的模块,post 中没有提供。不过,我认为这不是触发 post 的问题。

我认为问题在于尝试在测试台模块上安装端口,并期望它们作为本地信号运行。

会不会是您编写的所有代码都在测试平台上有端口?

在网格模块中,由于几个原因,这个声明是错误的。

 always @ (a or c_x or c_y)//when cx or cy changes, this loop happens 

建议将其替换为

always @ (*)