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
dyniec has quit [Quit: WeeChat 4.2.2]
Degi_ has joined #amaranth-lang
Degi has quit [Ping timeout: 268 seconds]
Degi_ is now known as Degi
phire has quit [Ping timeout: 256 seconds]
phire has joined #amaranth-lang
peeps[zen] has quit [Remote host closed the connection]
peeps[zen] has joined #amaranth-lang
kc5tja has joined #amaranth-lang
<kc5tja> Hello; I have a design which I'd like to get estimated timing parameters from (in particular, maximum clock frequency).  I'm using Amaranth 0.4.3, and I tried installing amaranth_boards from GitHub (since the package in pypi is just a stub).  Where do I go from here though?  I'm looking at approximately 200 I/Os total, although I can stub a good
<kc5tja> number of those off if need be.  Any advice would be appreciated.  Many thanks in advance.
<kc5tja> When I attempt to create my own top.py file and run it, I get the following results:   https://gist.github.com/sam-falvo/f1a196eddf4188d079c5df256a6ae389
<whitequark[cis]> Amaranth 0.5 had a total rework of the memory subsystem, so it's very likely that if you upgrade to it you'll no longer hit this issue
<whitequark[cis]> it's not worth reporting because the 0.4 branch is no longer supported
<kc5tja> Ooh, I was unaware there is a new version out.  I'll update and try again.  Thanks!
phire has quit [Ping timeout: 255 seconds]
mabl[m] has joined #amaranth-lang
<mabl[m]> Should you discuss it again, I like to throw in one more wrinkle:... (full message at <https://catircservices.org/_matrix/media/v3/download/catircservices.org/HcqGYNLLZhXTdiqYQiiCZCJG>)
<kc5tja> Unfortunately, upgrading to 0.5 breaks my unit tests.  My register file code says that every read port returns zero, no matter what address I give.  I'll need to look further into this tomorrow or day after; it's way past my bed-time here.
d_olex_ has joined #amaranth-lang
_catircservices1 has joined #amaranth-lang
Degi has quit [Quit: ZNC 1.8.2+deb2build5 - https://znc.in]
d_olex has quit [Read error: Connection reset by peer]
_catircservices has quit [Ping timeout: 268 seconds]
richardeoin has quit [Ping timeout: 268 seconds]
richardeoin has joined #amaranth-lang
whitequark[cis] has quit [Ping timeout: 268 seconds]
whitequark[cis] has joined #amaranth-lang
Degi has joined #amaranth-lang
<whitequark[cis]> <kc5tja> "Unfortunately, upgrading to 0...." <- you probably need to add the Memory as a submodule
d_olex_ has quit [Ping timeout: 256 seconds]
<zyp[m]> <mabl[m]> "Should you discuss it again, I..." <- > <@mabl:matrix.org> Should you discuss it again, I like to throw in one more wrinkle:... (full message at <https://catircservices.org/_matrix/media/v3/download/catircservices.org/LnUXZbqpWvsXyDdOJRZivZAy>)
<zyp[m]> when you have a 32-bit bus with granularity 8 bridged to an 8-bit CSR bus, you should drive csr_bus.w_stb once per enabled byte lane, like the wishbone bridge does here: https://github.com/amaranth-lang/amaranth-soc/blob/main/amaranth_soc/csr/wishbone.py#L94
<zyp[m]> so a 16-bit write arrives on the upstream bus as a 32-bit write with two enable bits set, you translate that to two independent 8-bit writes on the CSR bus, and a CSR register multiplexer further downstream takes care of reassembling those to a 16-bit write
<mabl[m]> Yes, I am doing this. I guess I was more talking about the memory layout. I was using [MemoryMap.add_resource](https://github.com/amaranth-lang/amaranth-soc/blob/main/amaranth_soc/memory.py#L314C9-L314C21) with alignment. That not only aligns the start but also the stop of the inserted range. It seems that the Mux then only sets the register element write strobe on [the aligned
<mabl[m]> So the 2times 8bit-write into the aligned 16bit wide register newer gets properly realigned until the stop address is written to. At least, that is how I understand all this. :-)
<mabl[m]> s/add_resource/add\_resource/, s///, s/realigned/reaassembled/
<mabl[m]> * Yes, I am doing this. I guess I was more talking about the memory layout. I was using [MemoryMap.add\_resource](https://github.com/amaranth-lang/amaranth-soc/blob/main/amaranth_soc/memory.py#L314C9-L314C21) with alignment. That not only aligns the start but also the stop of the inserted range. It seems that the Mux then only sets the register element write strobe on [the aligned
<mabl[m]> So the 2times 8bit-write into the aligned 16bit wide register newer gets properly reaassembled until the 32bit stop address is written to. At least, that is how I understand all this. :-)
<zyp[m]> oh, yeah, that looks correct
<zyp[m]> but in that case, the generated code would also treat it as a 32-bit register, issuing a write with all byte lanes enabled
jfng[m] has joined #amaranth-lang
<jfng[m]> <whitequark[cis]> "the right way to resolve this, I..." <- as this use-case seems to come up regularly (bridging a WB bus with an 8-bit granularity to a 32-bit CSR bus), i think it may be worthwhile to modify the CSR bridge as you just described
<jfng[m]> it already adds a clock cycle of latency, so aborting a transaction with ERR can be done here without adding more latency
<kc5tja> whitequark[cis] - that was it, thank you.  I was rushing to get things finished before the end of my vacation, and my eyes refused to see the obvious.  Thank you again.
<whitequark[cis]> no meeting today--I am feeling kind of unwell, apologies
<tpw_rules> sorry to hear that
galibert[m] has joined #amaranth-lang
<galibert[m]> Take care of yourself
kc5tja has quit [Quit: Client closed]
d_olex_ has joined #amaranth-lang
bl0x[m] has quit [Quit: Idle timeout reached: 172800s]