System verilog 在systemverilog中使用接口?

System verilog 在systemverilog中使用接口?,system-verilog,System Verilog,我已经在系统verilog中为接口编写了一个代码。但它给了我clk的错误。错误是未定义的变量clk。。。。 代码是 始终时出错(posedge clk) 接口简单_总线(输入逻辑时钟); //定义接口 逻辑请求,gnt; 逻辑[7:0]地址,数据; 逻辑[1:0]模式; 逻辑启动,rdy; endinterface:简单总线 模块memMod(简单_总线a); //简单的_总线接口端口逻辑可用; //逻辑时钟; 始终@(posedge clk) a、 gntclk被输入到给定的接口simple_

我已经在系统verilog中为接口编写了一个代码。但它给了我clk的错误。错误是未定义的变量clk。。。。 代码是 始终时出错(posedge clk)

接口简单_总线(输入逻辑时钟);
//定义接口
逻辑请求,gnt;
逻辑[7:0]地址,数据;
逻辑[1:0]模式;
逻辑启动,rdy;
endinterface:简单总线
模块memMod(简单_总线a);
//简单的_总线接口端口逻辑可用;
//逻辑时钟;
始终@(posedge clk)

a、 gnt
clk
被输入到给定的接口
simple_bus
,您需要分层访问它。例如
a.clk

因此,您的模块代码为:

   module memMod(simple_bus a); 
     always @(posedge a.clk) 
       a.gnt <= a.req & avail; 
   endmodule
模块memMod(简单总线a);
始终@(posedge a.clk)

a、 gnt现在我在poedege a.clk错误:(vlog-13069)C:/Users/venkat/Desktop/New folder/systemverilog/second.sv(9):接近“.”:语法错误,意外“.”,预期“)。@venkatpasumarthi什么是
avail
?你为什么要注释clk信号的定义逻辑时钟
?您需要取消注释它以避免错误。一旦取消注释,您仍然需要以某种方式从另一个always块或memMod的主输入端口驱动它。谢谢,它起作用了。我通过两种方式实现了它,即作为输入和位clk
   module memMod(simple_bus a); 
     always @(posedge a.clk) 
       a.gnt <= a.req & avail; 
   endmodule
interface simple_bus(input logic clk);  
     // Define the interface   
     logic req, gnt; 
     logic [7:0] addr, data; 
     logic [1:0] mode; 
     logic start, rdy; 
endinterface: simple_bus 

module memMod(simple_bus a); 
  // simple_bus interface port logic avail; 
  //logic clk; 
  always @(posedge a.clk) a.gnt <= a.req; 
endmodule

module main();
  logic clk;

  simple_bus sb(clk);
  memMod m(sb);

  initial repeat(10) clk = #5 ~clk;
endmodule