How to download VIP smartsearch?
DESIGNWARE_HOMEto required designware home location where VIP Smartsearch should be downloaded.
vip_smartsearch_<version>.runfile.
$DESIGNWARE_HOME/vip/svt/vip_smartsearch/<version>
How to install VIP Smartsearch?
Please refer to the fileVIP_Smartsearch_installation_and_usage_guide.pdfin
$DESIGNWARE_HOME/vip/svt/vip_smartsearch/<version>for installation steps.
Customer Support
For more details about VIP smartsearch tool, contact support_center@synopsys.com.Macros defined for APB SVT OVM Documentation:
|
|
`ifdef CONNECT_TOP_LEVEL_APB_IF_SIGNALS_BASED_ON_PSEL assign svt_apb_if.slave_if[port_num].pclk = pclk; assign svt_apb_if.slave_if[port_num].presetn = presetn; assign svt_apb_if.slave_if[port_num].psel = psel[port_num]; assign svt_apb_if.slave_if[port_num].penable = psel[port_num] ? penable : 1'b0; assign svt_apb_if.slave_if[port_num].pwrite = psel[port_num] ? pwrite : 1'b0; assign svt_apb_if.slave_if[port_num].paddr = psel[port_num] ? paddr : 'h0; assign svt_apb_if.slave_if[port_num].pwdata = psel[port_num] ? pwdata : 'h0; assign svt_apb_if.slave_if[port_num].pstrb = psel[port_num] ? pstrb : 1'b0; assign svt_apb_if.slave_if[port_num].pprot = psel[port_num] ? pprot : 3'h0; `ifdef SVT_APB5_RME_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pnse = psel[port_num] ? pnse : 'h0; `endif assign svt_apb_if.slave_if[port_num].control_puser = psel[port_num] ? control_puser : 'h0; `ifdef SVT_APB5_PAUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pauser = psel[port_num] ? pauser : 'h0; `endif `ifdef SVT_APB5_PWUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwuser = psel[port_num] ? pwuser : 'h0; `endif `ifdef SVT_APB5_SUBSYS_ID_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].psubsysid = psel[port_num] ? psubsysid : 'h0; `endif `ifdef SVT_APB5_WAKEUP_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwakeup = psel[port_num] ? pwakeup : 'h0; `endif `ifdef SVT_APB5_PARITY_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].paddrchk = psel[port_num] ? paddrchk : 'h0; assign svt_apb_if.slave_if[port_num].pctrlchk = psel[port_num] ? pctrlchk : 'h0; assign svt_apb_if.slave_if[port_num].pselchk = psel[port_num] ? pselchk : 'h0; assign svt_apb_if.slave_if[port_num].penablechk = psel[port_num] ? penablechk : 'h0; assign svt_apb_if.slave_if[port_num].pwdatachk = psel[port_num] ? pwdatachk : 'h0; assign svt_apb_if.slave_if[port_num].pstrbchk = psel[port_num] ? pstrbchk : 'h0; `ifdef SVT_APB5_PAUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pauserchk = psel[port_num] ? pauserchk : 'h0; `endif `ifdef SVT_APB5_PWUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwuserchk = psel[port_num] ? pwuserchk : 'h0; `endif `ifdef SVT_APB5_SUBSYS_ID_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].psubsysidchk = psel[port_num] ? psubsysidchk : 'h0; `endif `ifdef SVT_APB5_WAKEUP_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwakeupchk = psel[port_num] ? pwakeupchk : 'h0; `endif `endif assign prdata[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].prdata : 'h0; assign pready[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pready : 1'b0; assign pslverr[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pslverr : 'h0; `ifdef SVT_APB5_PRUSER_INTERNAL_ENABLE assign pruser[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pruser : 'h0; `endif `ifdef SVT_APB5_PBUSER_INTERNAL_ENABLE assign pbuser[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pbuser : 'h0; `endif `ifdef SVT_APB5_PARITY_INTERNAL_ENABLE assign preadychk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].preadychk : 'h0; assign pslverrchk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pslverrchk : 'h0; assign prdatachk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].prdatachk : 'h0; `ifdef SVT_APB5_PRUSER_INTERNAL_ENABLE assign pruserchk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pruserchk : 'h0; `endif `ifdef SVT_APB5_PBUSER_INTERNAL_ENABLE assign pbuserchk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pbuserchk : 'h0; `endif `endif `elsif CONNECT_TOP_LEVEL_APB_IF_SIGNALS_BASED_ON_PSEL_FROM_PASSIVE_SLAVE assign svt_apb_if.slave_if[port_num].pclk = pclk; assign svt_apb_if.slave_if[port_num].presetn = presetn; assign svt_apb_if.slave_if[port_num].psel = psel[port_num]; assign penable = psel[port_num] ? svt_apb_if.slave_if[port_num].penable : 1'b0; assign pwrite = psel[port_num] ? svt_apb_if.slave_if[port_num].pwrite : 1'b0; assign paddr = psel[port_num] ? svt_apb_if.slave_if[port_num].paddr : 'h0; assign pwdata = psel[port_num] ? svt_apb_if.slave_if[port_num].pwdata : 'h0; assign pstrb = psel[port_num] ? svt_apb_if.slave_if[port_num].pstrb : 1'b0; assign pprot = psel[port_num] ? svt_apb_if.slave_if[port_num].pprot : 3'h0; `ifdef SVT_APB5_RME_INTERNAL_ENABLE assign pnse = psel[port_num] ? svt_apb_if.slave_if[port_num].pnse : h0; `endif assign control_puser = psel[port_num] ? svt_apb_if.slave_if[port_num].control_puser : 'h0; `ifdef SVT_APB5_PAUSER_INTERNAL_ENABLE assign pauser = psel[port_num] ? svt_apb_if.slave_if[port_num].pauser : 'h0; `endif `ifdef SVT_APB5_PWUSER_INTERNAL_ENABLE assign pwuser = psel[port_num] ? svt_apb_if.slave_if[port_num].pwuser : 'h0; `endif `ifdef SVT_APB5_SUBSYS_ID_INTERNAL_ENABLE assign psubsysid = psel[port_num] ? svt_apb_if.slave_if[port_num].psubsysid : 'h0; `endif `ifdef SVT_APB5_WAKEUP_INTERNAL_ENABLE assign pwakeup = psel[port_num] ? svt_apb_if.slave_if[port_num].pwakeup : 'h0; `endif `ifdef SVT_APB5_PARITY_INTERNAL_ENABLE assign paddrchk = psel[port_num] ? svt_apb_if.slave_if[port_num].paddrchk : 'h0; assign pctrlchk = psel[port_num] ? svt_apb_if.slave_if[port_num].pctrlchk : 'h0; assign pselchk = psel[port_num] ? svt_apb_if.slave_if[port_num].pselchk : 'h0; assign penablechk = psel[port_num] ? svt_apb_if.slave_if[port_num].penablechk : 'h0; assign pwdatachk = psel[port_num] ? svt_apb_if.slave_if[port_num].pwdatachk : 'h0; assign pstrbchk = psel[port_num] ? svt_apb_if.slave_if[port_num].pstrbchk : 'h0; `ifdef SVT_APB5_PAUSER_INTERNAL_ENABLE assign pauserchk = psel[port_num] ? svt_apb_if.slave_if[port_num].pauserchk : 'h0; `endif `ifdef SVT_APB5_PWUSER_INTERNAL_ENABLE assign pwuserchk = psel[port_num] ? svt_apb_if.slave_if[port_num].pwuserchk : 'h0; `endif `ifdef SVT_APB5_SUBSYS_ID_INTERNAL_ENABLE assign psubsysidchk = psel[port_num] ? svt_apb_if.slave_if[port_num].psubsysidchk : 'h0; `endif `ifdef SVT_APB5_WAKEUP_INTERNAL_ENABLE assign pwakeupchk = psel[port_num] ? svt_apb_if.slave_if[port_num].pwakeupchk : 'h0; `endif `endif assign prdata[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].prdata : 'h0; assign pready[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pready : 1'b0; assign pslverr[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pslverr : 'h0; `ifdef SVT_APB5_PRUSER_INTERNAL_ENABLE assign pruser[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pruser : 'h0; `endif `ifdef SVT_APB5_PBUSER_INTERNAL_ENABLE assign pbuser[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pbuser : 'h0; `endif `ifdef SVT_APB5_PARITY_INTERNAL_ENABLE assign preadychk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].preadychk : 'h0; assign pslverrchk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pslverrchk : 'h0; assign prdatachk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].prdatachk : 'h0; `ifdef SVT_APB5_PRUSER_INTERNAL_ENABLE assign pruserchk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pruserchk : 'h0; `endif `ifdef SVT_APB5_PBUSER_INTERNAL_ENABLE assign pbuserchk[port_num] = psel[port_num] ? svt_apb_if.slave_if[port_num].pbuserchk : 'h0; `endif `endif `else assign svt_apb_if.slave_if[port_num].pclk = pclk; assign svt_apb_if.slave_if[port_num].presetn = presetn; assign svt_apb_if.slave_if[port_num].psel = psel[port_num]; assign svt_apb_if.slave_if[port_num].penable = penable; assign svt_apb_if.slave_if[port_num].pwrite = pwrite; assign svt_apb_if.slave_if[port_num].paddr = paddr; assign svt_apb_if.slave_if[port_num].pwdata = pwdata; assign svt_apb_if.slave_if[port_num].pstrb = pstrb; assign svt_apb_if.slave_if[port_num].pprot = pprot; `ifdef SVT_APB5_RME_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pnse = pnse; `endif assign svt_apb_if.slave_if[port_num].control_puser = control_puser; `ifdef SVT_APB5_PAUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pauser = pauser; `endif `ifdef SVT_APB5_PWUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwuser = pwuser; `endif `ifdef SVT_APB5_SUBSYS_ID_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].psubsysid = psubsysid; `endif `ifdef SVT_APB5_WAKEUP_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwakeup = pwakeup; `endif `ifdef SVT_APB5_PARITY_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].paddrchk = paddrchk; assign svt_apb_if.slave_if[port_num].pctrlchk = pctrlchk; assign svt_apb_if.slave_if[port_num].pselchk = pselchk; assign svt_apb_if.slave_if[port_num].penablechk = penablechk; assign svt_apb_if.slave_if[port_num].pwdatachk = pwdatachk; assign svt_apb_if.slave_if[port_num].pstrbchk = pstrbchk; `ifdef SVT_APB5_PAUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pauserchk = pauserchk; `endif `ifdef SVT_APB5_PWUSER_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwuserchk = pwuserchk; `endif `ifdef SVT_APB5_SUBSYS_ID_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].psubsysidchk = psubsysidchk; `endif `ifdef SVT_APB5_WAKEUP_INTERNAL_ENABLE assign svt_apb_if.slave_if[port_num].pwakeupchk = pwakeupchk; `endif `endif assign prdata[port_num] = svt_apb_if.slave_if[port_num].prdata; assign pready[port_num] = svt_apb_if.slave_if[port_num].pready; assign pslverr[port_num] = svt_apb_if.slave_if[port_num].pslverr; `ifdef SVT_APB5_PRUSER_INTERNAL_ENABLE assign pruser[port_num] = svt_apb_if.slave_if[port_num].pruser; `endif `ifdef SVT_APB5_PBUSER_INTERNAL_ENABLE assign pbuser[port_num] = svt_apb_if.slave_if[port_num].pbuser; `endif `ifdef SVT_APB5_PARITY_INTERNAL_ENABLE assign preadychk[port_num] = svt_apb_if.slave_if[port_num].preadychk; assign pslverrchk[port_num] = svt_apb_if.slave_if[port_num].pslverrchk; assign prdatachk[port_num] = svt_apb_if.slave_if[port_num].prdatachk; `ifdef SVT_APB5_PRUSER_INTERNAL_ENABLE assign pruserchk[port_num] = svt_apb_if.slave_if[port_num].pruserchk; `endif `ifdef SVT_APB5_PBUSER_INTERNAL_ENABLE assign pbuserchk[port_num] = svt_apb_if.slave_if[port_num].pbuserchk; `endif `endif `endif | |
APB Interface provides implicit connection between single master and multiple slaves by default. Below macro SVT_APB_DISCONNECT_TOP_LEVEL_APB_IF_SIGNALS can be defined in order to disable this implicit connection. Following connectivity between master and slave is further divided into 3 different topology. 1) CONNECT_TOP_LEVEL_APB_IF_SIGNALS_BASED_ON_PSEL - master signals are driven only to the slave which is selected by psel. Other slaves will be driven 0 for all signals. 2) CONNECT_TOP_LEVEL_APB_IF_SIGNALS_BASED_ON_PSEL_FROM_PASSIVE_SLAVE - this connection is only applicable for passive mode. Here passive slave signals are connected to passive master ports. 3) if none of the above two macros are defined then each slave receives signals driven by the master directly.
|
|
|
2
|
|
|
6
|
|
|
slave_0,slave_1,slave_2,slave_3,slave_4,slave_5
|
|
|
|
|
option.per_instance = 1; apb_state : coverpoint {cov_xact_psel, cov_xact_penable} { bins IDLE_STATE = {2'b00}; bins SETUP_STATE = {2'b10}; bins ACCESS_STATE = {2'b11}; } |
|
|
|
|
|
|
if (enablefieldwdth > 0) begin `SVT_DATA_UTIL_COMPARE_BITVEC_SLICE(fieldname,fieldmaxwidth,enablefieldwdth-1,0) end else begin `SVT_DATA_UTIL_COMPARE_BITVEC(fieldname) end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
32
|