2016-12-15 6 views
0

나는합성 SV inteface을 역 참조 포트

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

I를 다음과 같이 내 상위 모듈에 선언되어

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_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 (분석은 정상적으로 실행되었습니다)

아무도 해결 방법을 제안 할 수 있습니까? 나는 덕분에 많은

답변

0

modport 정보는 관련 규정하지 않아야하지만 NCVLOG 2001 코드

시뮬레이션, 잘 작동 레거시를 Verilog에게 인 DUT의 포트 맵을 수정하지 않습니다. 사용하는 modport는 인터페이스를 사용하여 모듈의 포트 선언에 선언해야합니다.

인터페이스를 사용하려는 모듈에 선언하면 각 포트를 지정할 필요가 없습니다.

DC를 준수하도록 코드를 수정해야한다고 생각합니다. 하지만 인터페이스를 사용하면 코드를 더 짧고 명확하게 만드는 것이 가장 좋습니다. 참고로

, 인터페이스 사용의 빠른 예 :

인터페이스 선언

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

소스 모듈 자명 한 일 입니

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

신지 모듈

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와 함께 사용하고 있습니다.