Warings regarding AXI Bus and SRAM #83
-
Hello, Just after loading the reference Design I am getting multiple warnings first. I just tried to ignore them and program the icicle kit with the reference design and then access the SRAM via the register 0x61000000U. However, as soon as I get to the line of code in the softconsole, the application just skips everything and does nothing anymore. It is as if the SRAM with the AXI BUS was not implemented properly.
And there are even more ID width mismatches. Best |
Beta Was this translation helpful? Give feedback.
Replies: 10 comments
-
Hi Kevin, I think this is a reset issue - can you confirm that your bare metal application enables the FIC0 clock, takes FIC0 out of reset and also takes the FPGA fabric out of reset? You should be able to do this using the following:
The behavior you described matches what occurs when you try to access a peripheral in reset - the read / write doesn't return. There is a Linux example using the SRAM available here. The warnings you mentioned will be resolved in a future release. Please let me know if this resolves your issue. Kind regards, |
Beta Was this translation helpful? Give feedback.
-
I've also opened this issue for tracking to update the HAL to better support the FPGA reset bit which needs to be set |
Beta Was this translation helpful? Give feedback.
-
Hi Hugh, Thank you very much for your quick reply. Now regarding the LIM Debug, sometimes I get an OCD error saying that it had a problem examining the code. But the problem simply is that it is unable to halt hart1. I then have to restart the board multiple times and eventually it works. Do you know a work-around or the cause of this problem? Furthermore, do you maybe have some resources or a hint on how to use the SRAM as a shared memory between a custom ip and multiple harts? What is the best way to enable the FIC 0 interface on multiple harts? Thank you very much in advance for your help. Your first answer already helped me a lot. Best regards, |
Beta Was this translation helpful? Give feedback.
-
Sweet I'm glad that got it 🥳 No unfortunately we don't have a specific document for which resets to unset, it's more awkward as the fabric configuration can change and the reset structure is design dependent. On the todo list for the reference design is adding a clock and reset structure diagram which may help. We could also add a reset source column to the memory map table to make it clearer as to what is actually driving the reset to each peripheral. I'll keep it in mind and see what can be done, would these help in your opinion? Re the fic clocks, there's a bit to this, the setting in the MSS configurator are for the internal AXI switch in the MSS block itself (300MHz). The FIC clock provided to the MSS from the fabric is used for CDC. The FIC on the fabric side can run up to 250MHz and in the reference design we use 125MHz as it meets timing easily and allows us sufficient throughput. If your fabric clock is going to be >= 125MHz you will need to enable DLL for the FIC in the configurator. On the open OCD error I'm not sure without seeing it first hand. If you have an idea of where it is in the code or if you have some empty loops waiting for something you could add a NOP in to offset the code a bit and see if it makes a difference, but I'm not sure off the top of my head. To share the sram, if you're using the pmps make sure there's a window to access the sram from all contexts, otherwise without the pmps all harts should have access to the FIC and SRAM. Once the reset is enabled by one hart (really this is a job for the HSS / E51) you don't have to do it on others. You could add your custom IP as an initiator on the interconnect for the SRAM and that way it will be accessible from the FIC and the IP. 😊 |
Beta Was this translation helpful? Give feedback.
-
Thanks for your detailed answer.😊 Yes anything that provides an easy overview helps. Yeah another column for the resets in reference to the peripherals sounds great. Your other idea with a clock and reset structure diagram is also good. Re FIC clock thanks that makes sense. Okay I will check the OCD error again and come back to you if I don't figure it out. Thank you very much I will try to implement it with without pmp. I highly appreciate your help🙂 |
Beta Was this translation helpful? Give feedback.
-
Hey Hugh, I have auto generated the timing constrain for the design and kept the configuration of the AXI initiator and the SRAM equal to the reference design provided by microchip. Here is the code of the timing constraint:
|
Beta Was this translation helpful? Give feedback.
-
Hmm in the clocks and resets block I would try connecting the "PLL_POWERDOWN_B" output of the "RESET_CLK_125MHz" block to the "PLLPOWERDOWN_N_0" input of your CCC instead of driving it with init done. In your design, without seeing it fully I can't tell if your CLK_125Hz is connected to the FIC clock or not, it doesn't look like it is based on the wires I can see only going into the interconnect and SRAM. It also looks like the unused FIC clocks are tied to ground but the DLL locks from those FICs are still being used. I don't think the DLLs would lock if the clocks are tied low. It would probably be safer to only use the DLL lock from the FIC thats in use and see if that helps. |
Beta Was this translation helpful? Give feedback.
-
Also just to mention we will be moving to use a CCC and PLL as well so we can scale / control the clocks from the MSS |
Beta Was this translation helpful? Give feedback.
-
Hey @MrKK11 how are you getting on? I think this issue is resolved now, would you mind closing it if you're happy and you can re-open or create a new one if something else comes up 🙂 Cheers, |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
Hi Kevin,
I think this is a reset issue - can you confirm that your bare metal application enables the FIC0 clock, takes FIC0 out of reset and also takes the FPGA fabric out of reset?
You should be able to do this using the following:
The behavior you described matches what occurs when you try to access a peripheral in reset - the read / write doesn't return. There is a Linux example using the SRAM available here. The warnings you mentioned will be resolved in a future release.
Please let me know if this re…