whitequark[cis] changed the topic of #amaranth-lang to: Amaranth hardware definition language · weekly meetings: Amaranth each Mon 1700 UTC, Amaranth SoC each Fri 1700 UTC · play https://amaranth-lang.org/play/ · code https://github.com/amaranth-lang · logs https://libera.irclog.whitequark.org/amaranth-lang · Matrix #amaranth-lang:matrix.org
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 264 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 260 seconds]
Hoernchen_ has quit [Ping timeout: 256 seconds]
Hoernchen has joined #amaranth-lang
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 264 seconds]
phire has joined #amaranth-lang
Hoernchen_ has joined #amaranth-lang
Hoernchen has quit [Ping timeout: 256 seconds]
__DuBPiRaTe__ has joined #amaranth-lang
__DuBPiRaTe__ has quit [Remote host closed the connection]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 255 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 264 seconds]
frgo has joined #amaranth-lang
frgo has quit [Remote host closed the connection]
Degi_ has joined #amaranth-lang
Degi has quit [Ping timeout: 256 seconds]
Degi_ is now known as Degi
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 246 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 268 seconds]
phire_ has joined #amaranth-lang
phire has quit [Ping timeout: 268 seconds]
frgo has joined #amaranth-lang
frgo has quit [Ping timeout: 272 seconds]
phire_ has quit [Ping timeout: 256 seconds]
phire has joined #amaranth-lang
frgo has joined #amaranth-lang
frgo_ has joined #amaranth-lang
frgo has quit [Read error: Connection reset by peer]
phire has quit [Remote host closed the connection]
phire has joined #amaranth-lang
pie_ has quit [Remote host closed the connection]
d_olex has quit [Ping timeout: 268 seconds]
phire has quit [Read error: Connection reset by peer]
phire has joined #amaranth-lang
Hoernchen_ is now known as Hoernchen
frgo_ has quit [Read error: Connection reset by peer]
pie_ has joined #amaranth-lang
frgo has joined #amaranth-lang
pie_ has quit [Remote host closed the connection]
pie_ has joined #amaranth-lang
frgo_ has joined #amaranth-lang
frgo has quit [Read error: Connection reset by peer]
frgo_ has quit [Read error: Connection reset by peer]
frgo has joined #amaranth-lang
frgo_ has joined #amaranth-lang
frgo has quit [Read error: Connection reset by peer]
frgo has joined #amaranth-lang
frgo_ has quit [Read error: Connection reset by peer]
<zyp[m]> <zyp[m]> "and I suppose the recommended..." <- the issue is that this is a situation that `MemoryMap` doesn't support
<zyp[m]> ValueError: Window has data width 32, and cannot be added to a memory map with data width 8
<whitequark[cis]> are you using the CSR bridge?
<whitequark[cis]> that bridge has configurable data width, which is why this wasn't considered an issue
<zyp[m]> sure, having an 8-bit wide CSR bus works fine
bl0x[m] has quit [Quit: Idle timeout reached: 172800s]
<zyp[m]> the issue is that since my initiator has a granularity of 8, everything has to have a granularity of 8 or less
<zyp[m]> and since the CSR bus doesn't have byte enables, it's impossible to have a wider CSR bus than 8-bit
<whitequark[cis]> yes, that sounds right to me
<whitequark[cis]> it is not in general possible to split or coalesce memory accesses to I/O regions
<zyp[m]> that's beside the point, I'm not interested in doing that
<whitequark[cis]> the CSR bridge has some very specific constraints for how the bytes may be accessed because of that
<whitequark[cis]> it's relevant: that's why the MemoryMap has this design
<zyp[m]> my point is that I don't necessarily want a MMIO access from my 32-bit CPU to be serialized into four byte-wide accesses and then reassembled back to access a 32-bit register
<whitequark[cis]> sounds like the core problem here is that the CSR bridge doesn't support granularity
<zyp[m]> yeah, so I started writing a gasket to put between the CSR bridge and the wishbone interconnect
<whitequark[cis]> or in other words: that the CSR bridge doesn't define a behavior for sub-word access
<whitequark[cis]> I think it's fine (as in, likely desirable) that you can't write such a gasket
<whitequark[cis]> memory mapped infrastructure isn't composable, if a driver is accessing a CSR in a particular way, it expects the access to do something very specific
<zyp[m]> and then ran into the issue that MemoryMap doesn't have a way to translate a 32b granularity map into an 8b granularity map
<whitequark[cis]> and if the CSR bridge doesn't define how to access the bus via some kind of interconnect, it's just undefined
<whitequark[cis]> the right way to resolve this, I think, is to define what granularity means for the CSR bus ("only full width accesses are supported") and then add support for it to the CSR bridge
<zyp[m]> that'd still have the same issue with MemoryMap
<whitequark[cis]> would it?
<zyp[m]> yes, because MemoryMap would have to multiply the resource addrs by 4 when doing the window translation, and currently it can only convert the other way
<whitequark[cis]> we should discuss this on a workday
<zyp[m]> because MemoryMap apparently doesn't distinguish between width and granularity, and what it calls width is really granularity
bl0x[m] has joined #amaranth-lang
<bl0x[m]> Writing Amaranth feels so cozy. VHDL kind of the opposite.
<whitequark[cis]> that is the direct intent
<bl0x[m]> I know. And it makes me happy every time I think about that
d_olex has joined #amaranth-lang
frgo has quit [Remote host closed the connection]
frgo has joined #amaranth-lang
frgo_ has joined #amaranth-lang
frgo has quit [Read error: Connection reset by peer]
frgo_ has quit [Remote host closed the connection]