Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
114 Views

AXI Translator from Platform Designer (QSYS) doesn't follow AXI4-Lite protocol spec.

Hello All,

This might be a known problem. It looks like AXI Translator module has a bug. When you pick AXI4-Lite on master side AXI Translator expects that RID and BID signals will be set by a module connected to AXI4-Lite but AXI4-Lite doesn't have these signals and that is a responsibility of translator to set it. 

I use AXI translator for connecting my AXI4-Lite slave block to HPS (I have Cyclone V FPGA). Since these signals remain not connected any access by software running on HPS hangs the system.

 

ARM's AXI specification explains translation process in detail so AXI Translator block just doesn't comply it.

 

PS1: I made a quick experiment and changed a system generated by QSYS so it picks BID and RID from AWID and ARID respectively and this solves the problem.

PS2: I suspect previous versions also have this issue.

 

Thanks,

Stepan

 

0 Kudos
3 Replies
Highlighted
Beginner
48 Views

Attached waveforms of AXI LW interface captured with Signaltap for two different cases when SW reads slave. For hanging case RID signal remains zero.

0 Kudos
Highlighted
48 Views

I could not find any significant difference from the waveform diagram in modelsim. Perhaps you could help to share screenshot on it? Could you share both of your projects (hang and no hang) so I could duplicate the issue?

0 Kudos
Highlighted
Beginner
48 Views

Thanks a lot for reply.

 

Here are waveforms I captured with SignalTap.

 

Read transaction, no hang case, when translating to AXI4:

axi4_no_hang.png

Notice RID signal is set to ARID.

 

Read transaction, hang case, when translating to AXI4-Lite:

axi4_lite_hang.png

See RID remains zero. Both RID and BID are not connected inside of the translator when translating to AXI4-Lite.

 

See axi4lite_quick_fix file with a hacky fix to my top of QSYS generated block. Unfortunately I cannot share whole design.

 

To reproduce you need to run Platform Designer, instantiate HPS, then instantiate AXI translator, connect its slave side to AXI master on HPS and export master side as AXI4-Lite. You'll notice that RID and BID signals are not exported which is correct because AXI4-Lite doesn't use it, however AXI translator doesn't handle these signals correctly for HPS side. That's why it hangs when you try to access MMIO range.

 

0 Kudos