Jump to content

Driving a custom RTL module from


rarow

Recommended Posts

Hi,

Basically I have a block design where a MicroBlaze is connected to an AXI GPIO. Then, the AXI GPIO drives the inputs (except the clock of course) of a custom PWM generator I made.

image.png.fbb0d89df4207f0503c5bac846067785.png

In Vitis, I made C code that writes to the GPIO in order to set the inputs of my PWM generator. However, it seems that nothing is happening. I directed the output of the PWM to an LED in order to see if it is working. I can never see the LED 'on'. Even if out of reset, the pwm is supposed to be at high.

I think the main problem is relating to the AXI GPIO. I found the following link where someone suggests the AXI GPIO can only drive top level I/Os. https://electronics.stackexchange.com/questions/677156/how-to-place-connections-between-microblaze-and-custom-rtl-modules-in-vivado

Also, I checked the AXI GPIO product guide : AXI GPIO v2.0 Product Guide (PG144) • Viewer • AMD Adaptive Computing Documentation Portal (xilinx.com)

It says :

image.png.d55b1bee8e22129be717fd1633c8e646.png

Can anyone confirm that my idea of using the GPIO to control an RTL module is indeed wrong?

If it is wrong, how can I do the functionality I want, I assume maybe create an AXI interface for my PWM generator?

Link to comment
Share on other sites

Hi @rarow

Using AXI GPIO to control module ports works fine, for example: https://forum.digilent.com/topic/28261-qol-script-for-vivado-block-design-and-ps-pl-communication/, https://forum.digilent.com/topic/22978-axi-dma-help-on-cora-z7-10/#comment-85544. Could you provide a screenshot of how your GPIO IPs are connected to your nets, as well as some source code that controls the GPIOs? There are some gotchas, for example, if the AXI GPIO doesn't use "All Outputs" for the appropriate channels and the tristate pins are set to input, output signals are not driven - as workarounds for this specific issue, you could either use the All Outputs setting or you could drive your module ports with the _t pin within the GPIO interface, and use SetDataDirection calls instead of DiscreteWrite (assuming you're using the xgpio driver).

Thanks,

Arthur

 

Link to comment
Share on other sites

@rarow,

I did a similar thing with pulsed LED with triggering a camera.  I couldn't see the LED since the pulse was so short it didn't make enough light for me to see with my eyes.  Though I finally timed the camera so I could see the led flashing, so you might need better eyes!  :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...