UVMF Responder

Hi,

I’m getting started with the UVMF and have a basic question. I’ve built a simple test bench around an SPI slave which has an SPI slave port and a memory mapped master port. I’ve configured my YAML for the mem mapped interface as a responder but the IO seems to get configured in the opposite polarity to what I’d expect.

As an example, I have a port ‘rdata’ which is an input to my DUT and an output with respect to the interface. From the description of the responder in the UVMF Users Guide, 5.3.6.2, I thought the BFM would drive the ‘rdata’ in response to the DUT but instead it’s trying to drive the outputs from the DUT, i.e. the en/ren/addr/wdata signals.

What is the responder mode used for and how should I be generating response data to my DUT?

Thanks.

In reply to Shareef Jalloq:

Hi Shareef,

  The UVMF interface generator creates agents/BFM's that can be used as either an initiator or a responder.  Some protocols use master or slave to describe the ends of the protocol.  When specifying the signal direction in the YAML that is used to generate an interface package, the direction is always specified from the perspective of the initiator.  For example, if the signal is an input for the initiator then specify input for the signal direction.  If the signal is an output for the initiator then specify output for the signal direction.  
  When using the UVMF environment generator, agents within the environment are listed in the YAML used to generate the environment.  The agent is an initiator by default.  If the agent is a responder, the initiator_responder label should have the value "RESPONDER".  This configures the agent and its driver BFM to operate as a responder.  It's signal directions will be opposite of those specified in the YAML, which was specified from the perspective of the initiator.
  In the bench generated by UVMF, each agent configured as a responder will have a responder sequence started on its sequencer.  The responder sequence receives data from the initiator and determines how to respond to the current transfer.  There is a [UVMF One Byte At A Time video](https://verificationacademy.com/courses/UVM-Framework-One-Bite-at-a-Time) that describes agent data flow on Verification Academy.  It describes data flow for initiator as well as responder agents.

Best regards,
Bob

In reply to bob_oden:

Hi Bob,

thanks. Yes, I’ve been watching the video series and reading the guide too but this just seemed like a strange choice. If the I/O was always defined with respect to the interface it would just be a question of choosing initiator or responder. This is a bit like trying to work out a double negative.

Anyway, now I know. Cheers.

Are there any examples of a responder anywhere? I’ve got to the point where I need to define the responder_info field in the YAML config and I can’t work out what the fields are supposed to be filled with.

In reply to Shareef Jalloq:

The men_if_cfg.yaml is an example of an interface yaml that uses response_info to specify what data is to be returned to the responder sequence from the driver BFM.