2016-12-15 53 views
0

我想合成使用被定义为以下合成SV inteface提领港口

interface smb_if #(
    parameter shortint ADDR_SZ = 8, 
    parameter shortint DATA_SZ = 8, 
    parameter shortint SLAVE_NUM = 8 
); 
    logic [DATA_SZ-1:0] wrdata; 
    logic [DATA_SZ-1:0] rddata [SLAVE_NUM-1:0]; 
    logic [ADDR_SZ-1:0] rdaddr; 
    logic [ADDR_SZ-1:0] wraddr; 
    logic     wr;     // =1 means 'write, =0 means 'read 
    logic     wrcmd;    // 
    logic     rd;     // =1 means 'write, =0 means 'read 
    logic     rdcmd;    // =1 means 'write, =0 means 'read 
    logic [ADDR_SZ-1:0] rdaddr_old; 
    logic     clrcmd; 
    logic [SLAVE_NUM-1:0] sel ; // one-hot; =1 means 'selected' 
    modport master (
    input rddata, output wrdata, output rdaddr, output rdaddr_old, output clrcmd, output wraddr, 
    output wr, output wrcmd, output rd, output rdcmd, output sel 
); 
    modport slave (
    output rddata, input wrdata, input rdaddr, input rdaddr_old, input clrcmd, input wraddr, 
    input wr, input wrcmd, input rd, input rdcmd, input sel 
); 

endinterface:smb_if 

接口的实例的接口在我最模块声明如下

smb_if #(.ADDR_SZ(8), .SLAVE_NUM(8)) i_smbif(); 

我下面那么接口端口连接到我的模块

.smb_page_sel  (i_smbif.master.sel    ), // Page selection 
.smb_addw   (i_smbif.master.wraddr   ), // data address for write 
.smb_dataw   (i_smbif.master.wrdata   ), // data to be written on a write cycle 
.smb_wr    (i_smbif.master.wr    ), // from SMB top: what diff with wr? 
.smb_wrcmd   (i_smbif.master.wrcmd    ), // register file write command 
.smb_addptr   (i_smbif.master.rdaddr   ), // data address for read 
.smb_rd    (i_smbif.master.rd), 
// etc. 

我从设计共同的错误制作过程中的mpiler(分析确实运行良好)

任何人都可以提出解决方法吗?我不想改变它是一个传统的Verilog代码2001

模拟与NCVLOG工作正常,但由于 多

回答

0

的modport信息不能在连接中指定的DUT的端口映射。 您使用的modport应在使用该接口的模块的端口声明中声明。

如果你在你想要使用它的模块中声明你的接口,那么你不必指定每个端口。我认为你将不得不修改代码以使其符合DC。但是,最好的方式是使用界面使您的代码更加简洁。

FYI,接口利用率的一个简单的例子:

接口声明

interface channel(
    logic request; 
    logic acknowledge; 
    modport src (output request, input acknowledge); 
    modport dst (input request, output acknowledge); 
endinterface 

源模块DECL

module source(
    Channel.src myChannel_out 
); 
    //Do stuff 
endmodule 

目的地模块DECL

module destination(
    Channel.dst myChannel_in 
); 
    //Do stuff 
endmodule 

要p模块

module top(); 

    Channel myChannel(); 
    source u_source(
    .myChannel_out(myChannel) 
); 
    destination u_destination(
    .myChannel_in(myChannel) 
); 
endmodule 

我在Design Compiler中使用了这个功能,目前为止没有任何问题。