cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Visitor
Visitor
3,159 Views
Registered: ‎04-25-2010

Incorrect Requester ID provided by Endpoint?

I followed the example xtp045_gen2_creation.pdf to create a gen2 x4 endpoint targetting Virtex-6/ML605 board.  Then I tried to do write/read back test to BAR0 as described in page 249 of UG517.  The test works fine however I was surprised to find that the Rootport and Endpoint have the same ID = 0x01A0.  The Root-Port behv model is configured with that ID, and the Endpont is generated with ID = 0x0624.     I see the Endpoint output port {cfg_bus_number, cfg_device_number, cfg_function_number} changed from 0 to 0x01A0 after receiving cfg transcation.   Shouldn't this be the Endpoint ID, 0x0624?  Why does the Endpoint copy the Requester ID and supply it to the application to be used as its own Requester ID?

0 Kudos
1 Reply
Highlighted
Visitor
Visitor
3,150 Views
Registered: ‎04-25-2010

OK I figured out.  The Device ID in cfg reg is static and has nothing to do with the Requester ID, which is dynamically assigned.   The Endpoint's Requiester ID should be copied from the Completer ID filed upon seeing a Type0 Config Write transaction.   The problem is in the root port model.   The Tx model (dsport/pci_exp_usrapp_tx.v) has both REQUESTER_ID and COMPLETER_ID_CFG defined but the REQUESTER_ID is never used.  Every ID in every trans type seems to be using only COMPLETER_ID_CFG.  That does not seem right. 

 

 Anyway, I went ahead and change REQUESTER_ID value to be different and change the code to make the header in all trans types use REQUESTER_ID, in stead of COMPLETER_ID_CFG.   If you know a reason why I shouldn't do that, please let me know.   Now the tx.dat and rx.dat look better to me.  

 

0 Kudos