Changing FIC0 clock freq in mpfs_dma_benchmarking of LSRAM #311
-
I'm running the mpfs_dma_benchmarking bare metal example (on top of MPFS_ICICLE ref design generated with only MSS_BAREMETAL arg, Libero 2022.3) and it runs smoothly. I specifically want to run (and improve) the LSRAM involved PDMA performance (e.g. non-cached DDR to LSRAM), so I gradually increased the ACLK frequency going into FIC_0_PERIPHERALS from 125 MHz up to 250 MHz, modified the .sdc constraint (generated clock) accordingly, and reprogrammed the FPGA. However, the verify() function in the bare metal example app produces "Benchmarking Tests FAILED!" after changing the FIC0 ACLK to any value higher than 150 MHz (150 MHz passes). According to the note below Table 6-1 on page 120 of the TRM: "If the frequency of the FIC block is greater than or equal to 125 MHz, then the DLL must be enabled for removing clock insertion delay. If the frequency of the FIC block is less than 125 MHz, then the DLL must be bypassed". In my reference design, the Use Embedded DLL checkbox for FIC0 is checked. Also, the lowest FMAX of LSRAM in Table 80 of PolarFire SoC Advanced Datasheet is 196 MHz. Therefore, I don't see why I can't set FIC0 freq to values higher than 150 MHz. Help! |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 8 replies
-
Have you run verify timing when you've changed the clock configuration? Tbh I'd recommend adjusting the required clocks from the configurator of the PF_CCC in the "CLOCKS_AND_RESETS" block and then deriving the constraints instead of modifying the derived file directly. I don't think the issue here is the FIC DLL, its on by default as we run at 125MHz in the base so going higher you shouldn't have to change it. The FIC frequencies changing is odd, I've never seen this happen.. they're all independent outputs of the CCC/PLL so they shouldn't be affected when you change just one clock.. again I'd go through the configurator + derive and see what it does. |
Beta Was this translation helpful? Give feedback.
-
Ahhh ok I see now, its this: We can't solve this with the base design, you'll need to make a modification. Leave the original CCC ( Now add a new CCC to the design (just drag in a "Clock Conditioning Circuitry" core from the Catalog) - we'll use this to generate a dedicated FIC0 CLK. Configure it with a 50MHz reference and connect: CLKINT_REF_CLKL_50MHz: Y -> FIC_0_DEDICATED_CCC_0: REF_CLK_0 Leaving all of the existing connections in place. This should give you: This way the other FICs (1, 2 & 3) are driven by the original CCC at the original frequency and you can then configure the FIC 0 clock independently of the other FICs. You'll need to re-derive constraints and edit the "fic_clocks.sdc" file to point at the new clock for FIC 0. |
Beta Was this translation helpful? Give feedback.
Ahhh ok I see now, its this:
We can't solve this with the base design, you'll need to make a modification.
Leave the original CCC (
CCC_FIC_X_CLK
) as is and disconnectOUT0_FABCLK_0
(the output for FIC0) from theRESET_FIC_0_CLK
block and the top level port calledFIC_0_CLK
and disconnect thePLL_LOCK
input to theRESET_FIC_0_CLK
block. Mark theOUT_0_FABCLK_0
output of the CCC "Unused".Now add a new CCC to the design (just drag in a "Clock Conditioning Circuitry" core from the Catalog) - we'll use this to generate a dedicated FIC0 CLK. Configure it with a 50MHz reference and connect:
CLKINT_REF_CLKL_50MHz: Y -> FIC_0_DEDICATED_CCC_0: REF_CLK_0
AND4_0: Y -> FIC_0_DEDICATED_CCC_0: PLL_PO…