<whitequark[cis]>
finalization is such a broken concept in Migen
<whitequark[cis]>
(so broken that Amaranth does not have anything like it at all, intentionally, and never will)
<whitequark[cis]>
the main problems with it is that (a) you only get one finalization order and if you don't like it, tough luck and (b) if you add another module to the tree in the finalizer, that one is never finalized
FabM has joined #litex
FabM has quit [Changing host]
FabM has joined #litex
sakman_ has joined #litex
SpaceCoaster_ has joined #litex
TMM__ has joined #litex
gurki_ has joined #litex
TMM_ has quit [*.net *.split]
sakman has quit [*.net *.split]
SpaceCoaster has quit [*.net *.split]
minute has quit [*.net *.split]
gurki has quit [*.net *.split]
SpaceCoaster_ is now known as SpaceCoaster
minute has joined #litex
lkcl has joined #litex
GNUmoon has quit [Remote host closed the connection]
cr1901 has quit [Killed (NickServ (GHOST command used by cr1901_!~cr1901@2601:8d:8600:226:6712:3a8e:7f64:543a))]
cr1901_ is now known as cr1901
jersey99 has joined #litex
<jersey99>
whitequark[cis] I hear you .. What is final and when is final. It's a hack, but it's been working. If we have distinctive phases of the transpilation with some sort of callbacks, that can be nice!
<whitequark[cis]>
I actually think that is the wrong approach entirely
<whitequark[cis]>
Amaranth only has one phase: elaboration. but before it, you can do whatever you want with the objects, so that they know exactly what to elaborate to
<whitequark[cis]>
by the time you are in def elaborate, there should be no order dependence, no mutation whatsoever, nothing like that
<whitequark[cis]>
if you are doing something really complicated that needs multiple phases of preprocessing? great! I am sure you can express that as a normal Python program better than I could anticipate :)
<jersey99>
Like, how do you take care of automatic address assignment?
<jersey99>
The HDL you write needs a phase where addresses need to be assigned, it would be great if they can even be used back inside the HDL as constants. There is a parse phase that would be useful here.
<jersey99>
After thinking about it a little more, what I said can still be achieved with a single elaboration phase. The address assignment can be part of the elaboration stage and made available to the user at the end in some form
<jersey99>
simplicity is good
<jersey99>
Also, good to see you back. Is Amaranth a happening place these days?
jersey99 has quit [Ping timeout: 246 seconds]
<whitequark[cis]>
you can look at the changelog
<whitequark[cis]>
<jersey99> "After thinking about it a little..." <- nope
<whitequark[cis]>
you assign addresses while constructing a representation of your design
<whitequark[cis]>
this in no way relates to anything "HDL"
<whitequark[cis]>
it's just manipulation of normal Python object
<whitequark[cis]>
s/object/objects/
<whitequark[cis]>
and if all you want to do is to e.g. write JSON metadata containing your SoC's addresses, you don't ever need to make any netlist or AST or anything like that
jersey99 has joined #litex
FabM has quit [Ping timeout: 245 seconds]
cr1901_ has joined #litex
cr1901 has quit [Ping timeout: 246 seconds]
cr1901__ has joined #litex
cr1901__ has quit [Read error: Connection reset by peer]
cr1901__ has joined #litex
cr1901_ has quit [Ping timeout: 246 seconds]
<jersey99>
I am seeing that the philosophy is let the user figure out bells and whistles by empowering them with python object introspection. Is that right?
cr1901__ is now known as cr1901
<jersey99>
I am now actually curious to see how one would do something like Litex's AutoCSR around Amaranth
ElfenKaiser has joined #litex
<jersey99>
AutoCSR in Amaranth would be some form of a trait/MixIn where member functions of it would introspect and provide information about some submodules, and the address assignment be something that it would return (in the form of some some Amaranth objects) which then Amaranth can use to generate RTL
<jersey99>
Looks promising!
jersey99 has quit [Ping timeout: 246 seconds]
jersey99 has joined #litex
cr1901_ has joined #litex
cr1901_ has quit [Read error: Connection reset by peer]