Raito_Bezarius has quit [Ping timeout: 250 seconds]
Raito_Bezarius has joined #nmigen
thorns514 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
thorns514 has joined #nmigen
thorns514 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
revolve has quit [Read error: Connection reset by peer]
revolve has joined #nmigen
Degi_ has joined #nmigen
Degi has quit [Ping timeout: 265 seconds]
Degi_ is now known as Degi
falteckz__ has joined #nmigen
falteckz_ has quit [Ping timeout: 240 seconds]
Bertl is now known as Bertl_zZ
falteckz__ is now known as falteckz
falteckz has quit [Quit: Leaving]
falteckz has joined #nmigen
nelgau has joined #nmigen
nelgau_ has joined #nmigen
nelgau_ has quit [Remote host closed the connection]
nelgau has quit [Ping timeout: 265 seconds]
nelgau has joined #nmigen
nelgau has quit [Remote host closed the connection]
nelgau has joined #nmigen
nelgau_ has joined #nmigen
nelgau_ has quit [Remote host closed the connection]
nelgau_ has joined #nmigen
nelgau has quit [Read error: Connection reset by peer]
revolve has quit [Ping timeout: 246 seconds]
revolve has joined #nmigen
falteckz has quit [Quit: Leaving]
<d1b2>
<mubes> That doesn't seem to be an option since the protocol requires immediate response to what you've received...for example, if you receive a WAIT response to your read request then you have to abort that read request and re-submit it immediately...I don't see how to do that with synced inputs. In fairness the signals are in response to my synchronous clock output, and they've gone through the IO pin processing, so they shouldn't be too bad (and this
<d1b2>
does work up to 25Mhz!).
<d1b2>
<mubes> I did try using the DDR cells (xdr=2) which, if I wire o1 and o2 together and use the i1 output, I would expect to do what I want, but the clocking is subtly different to the xdr=1 case in ways I don't understand and didn't expect....I end up with a cycle delay.
chiastre has quit [Remote host closed the connection]
thorns514 has joined #nmigen
chiastre has joined #nmigen
<agg>
mubes: using xdr=2 instead of feeding an inverted clock seems like a better option if you can make it work, i didn't think there was an extra latency cycle in ddr instead of sdr (unlike ice40 where one is added to fix timings)
<agg>
another option is to run the ecp5 logic at 100MHz and keep all the IO as SDR, which might also give you more time to do processing and get around extra register latency
<agg>
(and might make it easier to support lower clock rates by just dividing down the output clock from 100MHz without having to change pll settings on the fly or whatever...)
<d1b2>
<mubes> We do divide down a 100MHz clock to be able to support any 100/(2(n+1) MHz clock speed....the 100MHz is a limitation of the logic thats in there, in reality it can/ will be more like 160MHz but it's a pain when a build doesn't complete, so I've got it set low right now
<agg>
in that case, why not run the IO at SDR and your system clock speed?
<agg>
(btw you can also just tell nextpnr to ignore timing failures if you want it to carry on with generating a bitstream etc)
<agg>
assuming you don't want the swd/jtag to go >50MHz or so (which at least for the low end stuff i work with tends to be the practical limit)
<d1b2>
<mubes> In respect of (i) It's a good idea and (ii) I don't want to chase phantom problems
<d1b2>
<mubes> I'm sure I've tried the clock before, no recollection what the problem was
<agg>
fair enough yea
<d1b2>
<mubes> I'll go give that a try though...
<agg>
inverting the clock going to the output seems like asking for more trouble since it would need to come off a clock net and go through logic to get inverted
<agg>
(unless the iologic has an inverted clock config bit? not sure)
<agg>
uh, going to the input register*
Bertl_zZ is now known as Bertl
chipmuenk has joined #nmigen
whitequark has quit [Ping timeout: 250 seconds]
whitequark has joined #nmigen
revolve has quit [Read error: Connection reset by peer]
revolve has joined #nmigen
bvernoux has joined #nmigen
thorns51_ has joined #nmigen
bsmt1 has joined #nmigen
bsmt has quit [Quit: Ping timeout (120 seconds)]
bsmt1 is now known as bsmt
thorns514 has quit [Ping timeout: 240 seconds]
pftbest has quit [Remote host closed the connection]
pftbest has joined #nmigen
pftbest has quit [Remote host closed the connection]
pftbest has joined #nmigen
pftbest has quit [Remote host closed the connection]
pftbest has joined #nmigen
revolve has quit [Ping timeout: 246 seconds]
revolve has joined #nmigen
bvernoux has quit [Quit: Leaving]
chipmuenk has quit [Quit: chipmuenk]
<d1b2>
<mubes> lkyl , agg, whitequark Thanks for the sounding board. We have 50MHz. Not perfect yet, but a big step forward from where I was;
<agg>
And how are you sampling for that screenshot? Looks a bit low bandwidth maybe
<d1b2>
<mubes> I used an unregistered clock output which is at 50MHz and clocked the swdio at 100MHz directly. I'll probably look at registering the clock output against the 100MHz just to square up any jitter as a next step, but I need to get the transmit side working first...this is just reception (but the received value is correct).
<kbeckmann>
i have a question regarding Reset and multiple clock domains. it seems that signals belonging to clock domains other than 'sync' are not properly being reset. i tied the same signal to the ResetSignal() of each clock domain. i am probably just doing something wrong but i don't know what, so any help is appreciated. i have a test case here:
<d1b2>
<mubes> That sample has 350MHz alleged b/w but it's 1GS/s and a 10MS frame, zoomed a long way in. Now we're one stage firther on I can trigger more accurately for better resolution, but it's not been the core problem until now.
pftbest has quit [Remote host closed the connection]
pftbest has joined #nmigen
<kbeckmann>
oh. if i create the second clock domain with async_reset=True, i am able to reset it properly.
<kbeckmann>
now i also understand why my test case didn't reset the second counter - since the second clock was generated from the sync domain, there was never a clock pulse while the reset signal for the second domain was asserted. learned something today!
<d1b2>
<DX-MON> IIRC you want to use FFSynchroniser to take your ResetSignal() which is synchronous to the sync domain, and resync it to your target domain, and have the re-synchronised reset signal feed the new domain
<whitequark[m]>
there's ResetSynchronizer as well
<d1b2>
<DX-MON> *FFSynchronizer as I think it's actually spelt with a z
<d1b2>
<DX-MON> ah, neat
<d1b2>
<DX-MON> multiple clock domain designs are Tricky™
<kbeckmann>
thanks! will check it out.
<kbeckmann>
in my case i would just need to do `m.submodules += ResetSynchronizer(reset, domain="second")` and remove my manual assignment of `ResetSignal(domain="second").eq(reset)`. seems to work, and introduces some expected latency. thanks again.
pftbest has quit [Remote host closed the connection]