nelgau has quit [Remote host closed the connection]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 250 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 240 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 250 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 272 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 256 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 250 seconds]
jesopo has joined #amaranth-lang
nelgau has joined #amaranth-lang
jesopo is now known as jess
nelgau has quit [Ping timeout: 256 seconds]
<cesar>
Lachlan Sneff: To avoid having a signal driven by multiple modules, i'd add write ports (write enable and data) to the flag on the IRQ module interface. Then, whenever you would write to the flag in a parent module, you write to the port instead. Of course, if you just want to clear the flag externally, you don't need a full port, just a single "clear_irq" input signal.
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 272 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 260 seconds]
<lsneff>
cesar: I ended up doing basically that! Thanks for the suggestion though!
<lsneff>
Are there examples about using GPIO in a platform-independent way? Is the `Pin` class in `amaranth.lib` the abstraction to use?
nelgau has quit [Ping timeout: 252 seconds]
urja has joined #amaranth-lang
<vup>
pretty much
<vup>
its what you get when you 'platform.request' some resource
<vup>
which is how you usually interact with IO in a platform-independent way
<vup>
note that some things are not yet implemented in a platform independent manner (for example serdes)
nelgau has joined #amaranth-lang
<lsneff>
vup: Awesome, thank you
nelgau has quit [Ping timeout: 256 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 240 seconds]
nelgau has joined #amaranth-lang
nelgau has quit [Ping timeout: 256 seconds]
<Degi>
How would you even do SERDES in a platform-independent way? They seem to be so complex and have many different ways of configuring them, which I guess are very manufacturer specific (I only know ECP5 well, but I assume that other FPGAs from other manufacturers have very different SERDES architectures)
<whitequark>
yeah, i don't really plan to do platform-independent SERDES as a part of Amaranth
nelgau has joined #amaranth-lang
duck29 is now known as duck2
<vup>
hmm having gearing ratios as part of the request interfaces then seems a bit weird?
benreynwar has quit [Read error: No route to host]
<whitequark>
that's not SERDES, just geared I/O
benreynwar has joined #amaranth-lang
gatecat has quit [Read error: No route to host]
tucanae47_ has quit [Read error: No route to host]
alanvgreen has quit [Read error: Connection reset by peer]
yuriks has quit [Read error: Connection reset by peer]
gatecat has joined #amaranth-lang
<vup>
whats the difference?, right now the geared I/O looks like a slim "wrapper" over the SERDES primitives to me?
alanvgreen has joined #amaranth-lang
tucanae47_ has joined #amaranth-lang
yuriks has joined #amaranth-lang
adamgreig[m] has quit [Ping timeout: 252 seconds]
mikolajw has quit [Ping timeout: 252 seconds]
<mwk>
~it doesn't come from the Serdés region of France~
<mwk>
vup: fast I/O primitives generally come in two majorly different variants, for which there is varying terminology
<mwk>
the SERDES referred to above is the "very fast" variant, characterized by speeds > gigabit, clock-data recovery and being ridiculously complex
<mwk>
think PCI Express etc.
<mwk>
the other variant is just a gearbox
<mwk>
Xilinx, confusingly, calls their gearbox primitives "SERDES", and it calls the clock-data recovery thing "multi-gigabit transceivers"
nelgau has quit [Ping timeout: 240 seconds]
<mwk>
there's loads of differences between the two, but the most important one: gearbox primitives are basically a direct extension of "plain" GPIO (ie. there's usually one gearbox for every GPIO on an FPGA and you can choose to use it or not), and is simple to use (eg. just provide the slow and fast clocks and some parameters)