Currently I am working on understanding the HPS-FPGA bridges on the Stratix 10. I have been able to write from the hps to fpga peripherals using the LW bridge. I am now trying to send data from the FPGA using the complete bridge, do some arithmetic, and then send the result back top the HPS, esentially just a loopback. I have been updated the top level qsys file to have two bridges and an arithmetic block between the two. This has not worked however because I am unsure what the address and address offset for the f2h slave is. I am not sure what I am missing, or even if my hardware is being programmed properly for that matter.
I will attach a photo of my current qsys design.
Any help for this project would be much appreciated.
After generating the HDL and adding in a simple function into the verilog file
"
always @(posedge clk_100_out_clk_clk or posedge rst_controller_reset_out_reset) begin if (rst_controller_reset_out_reset) begin internal_reg <= 0; end else begin // Perform arithmetic (multiply by 10) internal_reg <= qsys_top_fifo_hps_to_fpga_out_csr_writedata * 10; end end
The server can see the correct input from the client, however the result is a constant "2899692286", which is curious because this is the output from the command
and the client collects a constant "4" which is also strange because I would expect that it would return "2899692286".
This leads me to believe that the fpga to hps bridge is not configured correctly, or I have put the wrong address for OUTPUT_REG in my c code, which is why I have bolded it. I am confident though that the h2f_lw bridge is working.
The Output should just multiply the input by 10, not this system ID.
Sorry about the overflow of information.
Again, any help to understand the f2h bridge would be very helpful.
I wrote you a response this morning but it did not seem to get posted.
Thank you for the response. My issue is not with the HPS to FPGA transaction it is with the FPGA to HPS Bridge. I have updated my QSYS design to be the following:
and have added a little verilog function
always @(posedge clk_100_out_clk_clk or posedge rst_controller_reset_out_reset) begin if (rst_controller_reset_out_reset) begin internal_reg <= 0; end else begin // Perform arithmetic (multiply by 10) internal_reg <= mm_interconnect_3_qsys_top_fifo_hps_to_fpga_in_writedata * 10; end end
What do you mean losing terminal control of your board? Are you referring that the board will power cycle during and after the programming phase? If so it is expected.
You could refer to the link below on the steps of flashing the board.
Please pay attention to the MSEL selection switch during programming.
I am curious if I have to follow these steps all the way through if I change the hardware design (building yocto each time is slow on my machine) or if there is an easier path.
Since this thread been resolve, I shall set this thread to close pending. If you still need further assistance, you are welcome reopen this thread within 20days or open a new thread, some one will be right with you. Please login to ‘https://supporttickets.intel.com’, view details of the desire request, and post a feed/response within the next 15 days to allow me to continue to support you. After 15 days, this thread will be transitioned to community support. The community users will be able to help you on your follow-up questions.
If you happened to close this thread you might receive a survey. If you think you would rank your support experience less than 10 out of 10, please allow me to correct it before closing or if the problem can’t be corrected, please let me know the cause so that I may improve your future service experience.