frgo has quit [Read error: Connection reset by peer]
_whitelogger has joined #amaranth-lang
frgo has quit [Ping timeout: 260 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 276 seconds]
Degi has quit [Ping timeout: 260 seconds]
Degi has joined #amaranth-lang
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 244 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 265 seconds]
cr1901 has quit [Read error: Connection reset by peer]
cr1901 has joined #amaranth-lang
cr1901 has quit [Read error: Connection reset by peer]
cr1901 has joined #amaranth-lang
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 260 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 252 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 260 seconds]
_whitelogger has joined #amaranth-lang
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 248 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 260 seconds]
RobTaylor[m] has quit [Quit: Idle timeout reached: 172800s]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 265 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 260 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 245 seconds]
frgo has joined #amaranth-lang
frgo has quit [Read error: Connection reset by peer]
frgo_ has joined #amaranth-lang
RobTaylor[m] has joined #amaranth-lang
<RobTaylor[m]>
<whitequark[cis]> "Rob Taylor: something that may..." <- oh cool. Might be worth you taking a look at my (wip for handling pins in chipflow-lib)[https://github.com/ChipFlow/chipflow-lib/pull/38] - all critisism gladly received =)
<RobTaylor[m]>
stupid question - can you get the clock domains needed by a Fragment, or do you always need to know a-priori?
<whitequark[cis]>
Rob Taylor: i've looked at iosignatures etc and i'm really not a fan
<whitequark[cis]>
re: clock domains needed by a fragment: there is no supported way to do so and any implementation using the internals is very likely to stop working once we finish clock domain rework
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 272 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 248 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 244 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 248 seconds]
<RobTaylor[m]>
<whitequark[cis]> "Rob Taylor: i've looked at..." <- thanks :) What do you see at the issues/drawbacks?
<RobTaylor[m]>
<whitequark[cis]> "re: clock domains needed by a..." <- fair enough, wheres best to track the clock domain rework? Also any thoughts on power domains as part of that?
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 248 seconds]
<RobTaylor[m]>
* the issues/drawbacks? if you don't mind me asking!
<whitequark[cis]>
<RobTaylor[m]> "thanks :) What do you see at the..." <- a major one is that by only passing the triple of (i,o,oe) around, you are losing the clock domain; therefore if you instantiate an FFBuffer on the edge, the domain has to be manually matched to what the peripheral wants. this is very error-prone
<whitequark[cis]>
what I think I'm going to do is a special component, let's say PinMux, which accepts any type of PortLike, and provides its own PortLike on request. it will internally instantiate DDR buffers (since many of the amaranth-stdio peripherals will expect to use DDR buffers, for 2x increase in max clock frequency) and add clock muxing in addition to i/o/oe muxing
<whitequark[cis]>
this will necessitate adding a glitchless clock mux component first, which I think I'll do as an RFC, since it really belongs to the Amaranth core
<whitequark[cis]>
<RobTaylor[m]> "fair enough, wheres best to..." <- there is no centralized place to track clock domain rework. you can track it by following the RFCs and discussion on this channel
<whitequark[cis]>
we don't have any specific plans to handle power domains as a part of that. your input on the RFC may change that
<RobTaylor[m]>
whitequark[cis]: oooh, thats a really good point
<RobTaylor[m]>
whitequark[cis]: nice!
<whitequark[cis]>
I think the design you have for IO muxing is essentially broken architecturally, and will not scale beyond single clock domain designs
<RobTaylor[m]>
whitequark[cis]: that sounds lovely :)
<RobTaylor[m]>
whitequark[cis]: I'll try to give input :)
<whitequark[cis]>
I really do need a proper pin mux in Glasgow (for the probe-rs applet, to be able to have either JTAG or SWD on the same pins...) so I don't mind you reusing that of course
<RobTaylor[m]>
we certianly will :)
<whitequark[cis]>
it will have the downside that you cannot switch from a pin with a stopped clock (when using clocked buffers) because of the way glitchless clock muxes work
<whitequark[cis]>
it's also going to be an FPGA-oriented design more than an ASIC-oriented. but you will be able to keep the external interface (which is obviously what makes it feasible--or not--to reuse amaranth-stdio components) and replace the guts with a more ASIC-focused netlist
<RobTaylor[m]>
RobTaylor[m]: Does adding clock domain annotation to the sig help this, or would that cause more problems do you think?
<RobTaylor[m]>
A lot of this is really about port facing IPs being able to share enough metadata for the framework to assemble correctly
<whitequark[cis]>
that's kind of a vague question I can't answer without more context
<RobTaylor[m]>
whitequark[cis]: Will it need all clocks it is muxing to be running?
<RobTaylor[m]>
whitequark[cis]: fair point. I'll give it a try and see, then i can formulate better
<whitequark[cis]>
RobTaylor[m]: it will need the clock you're switching _from_ to be running (as well as the clock you're switching _to_) whenever you are doing a switch
<whitequark[cis]>
the others are irrelevant
<RobTaylor[m]>
whitequark[cis]: That seems like a perfectly fine requirement to me.
<whitequark[cis]>
there are practical designs where it's a problem; I've encountered such designs before. but really, my job here is to highlight the limitation, not to decide whether it's acceptable or not
<whitequark[cis]>
a glitchless clock mux is a very well known type of circuit so we really should have that
<RobTaylor[m]>
whitequark[cis]: 100%
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 268 seconds]
<RobTaylor[m]>
<RobTaylor[m]> "fair point. I'll give it a try..." <- ah, i see why it currently isn't a problem, as the IPs always allocate their own buffers via platform, so there's not currently any buffer allocation downstream of an IOSignature. Of course that fails when you have a pinmux...
<whitequark[cis]>
the buffer instantiation should of course be the responsibility of the IP
<whitequark[cis]>
not having this functionality was one of the major failures in early amaranth versions
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 276 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 252 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 245 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 248 seconds]
frgo has joined #amaranth-lang
frgo has quit [Read error: Connection reset by peer]