cr1901 has quit [Read error: Connection reset by peer]
cr1901 has joined #amaranth-lang
Degi has quit [Ping timeout: 250 seconds]
Degi has joined #amaranth-lang
emeb_mac has quit [Quit: Leaving.]
tpw_rules has quit [Ping timeout: 240 seconds]
peepsalot has quit [Quit: Connection reset by peep]
tpw_rules has joined #amaranth-lang
peepsalot has joined #amaranth-lang
bvernoux1 has quit [Read error: Connection reset by peer]
dicethrow has joined #amaranth-lang
<dicethrow>
Hello all, I have a question about why I have such low allowable clock frequencies. I'm trying to make a ~143 MHz clock for a SDRAM driver for my ULX3S board. What sort of thing could cause or fix this?
<dicethrow>
(sorry for the repost, just realised I posted on the wrong side of midnight earlier)
<dicethrow>
Hello all, I have a question about why I have such low allowable clock frequencies. I'm trying to make a ~143 MHz clock for a SDRAM driver for my ULX3S board. What sort of thing could cause or fix this?
<adamgreig[m]>
dicethrow: is this a RAM controller you expect to be faster and something weird/unexpected is making it slow, or a novel design and it's not as fast as you'd like and you want to know why?
<dicethrow>
I think that answers the question - so the reason the clock has this limit is because of the fanout etc to the rest of the design that the clock is connected to?
<dicethrow>
In that case, It sounds like I need to have a think about how to make it faster, any general tips on how to do that?
<adamgreig[m]>
the "max frequency for clock" report means "this is the fastest this clock domain can run, given the length of the longest logic chain between two registers", so yea, it's about the rest of the design rather than some intrinsic limit on the PLL or anything like that
<dicethrow>
That makes a lot of sense, thanks
<adamgreig[m]>
the nextpnr output will show you the longest (critical) path, which might give you some clues as to what's causing it
<adamgreig[m]>
in general the goal is to limit how much logic and routing is in a row is between two registers, because that's what limits the frequency
<adamgreig[m]>
sometimes it's just something easy you can add and sometimes it's really hard and you have to rearchitecture the whole idea 😭
<adamgreig[m]>
I don't know of any particular guides on this and the nextpnr critical path might or might not be super helpful in finding the main problems - there's a histogram so you can get an idea of it it's just one or two paths that need fixing or like the whole design is slow
<adamgreig[m]>
lots of fanout might give you high routing delays and perhaps adding some registers will help, complicated logic functions will give higher logic delays and maybe you can pipeline them...
<dicethrow>
Ok sweet, that definitely gives me a direction to work in, thanks!