<mangelis>
hi, i wonder if it's possible in yosys to force that certain inputs are not connected to same luts?
<mangelis>
i have module with 9 input bits, and it would help if i could force that only bits 0,1,2 or internal bits can be connected to a lut, then only 3,4,5 and internals etc
<mangelis>
i've tried to do group0 = input[0]+input[1]+input[2]; group1 = input[3]+input[4]+input[5]; ... result=group0+group1+group2; but the synthesis results are the same than if i have everything in one big expression
<Lofty>
mangelis: Why do you need this? The solution is to just instantiate LUTs directly, but this is a weird thing to want
<mangelis>
the hardware i'm using to run the design can't access all the inputs directly. i'll have to insert manual "buffer" luts if it's not possible with yosys to directly generate valid result
<Lofty>
And...what is the hardware you're using?
<Lofty>
mangelis: ^
<mangelis>
amiga blitter
kraiskil has quit [Ping timeout: 265 seconds]
<Lofty>
You, um, what.
<mangelis>
:p
<Lofty>
Why are you trying to synthesise a design for the Amiga blitter?
<mangelis>
i already have, several
<knielsen>
oh, nice, I spent a _lot_ of time understanding how to use the blitter back then ;-)
<Sarayan>
wasn't the copper a lot funkier?
* Lofty
sighs
<Lofty>
Okay, well
<mangelis>
ah, missed your question "why"
<Lofty>
I wrote a Yosys flow for 7400 logic, so I'm in no position to judge
<Lofty>
The long and short of it is that what you have here is not a LUT.
<Lofty>
Instead, you need to instruct ABC to produce something which maps to the blitter
<Lofty>
There are two ways of doing this
<Sarayan>
also "what is connected to a lut" is not something you're supposed to care about, It's like dictation the asm instructions to a compiler
<Lofty>
<Lofty> The long and short of it is that what you have here is not a LUT.
<mangelis>
well actually blitter is a 3-input 1-output lut
<Lofty>
...
<Lofty>
Then why aren't you mapping to LUT3s?
<mangelis>
i am
<Lofty>
But, that achieves what you're asking for, no?
<mangelis>
well no, because i'm trying to implement game of life now, and it needs to calculate 8 neighbours
<Lofty>
But you can construct that out of LUT3s.
<mangelis>
so when blitter is executing it reads 3 words from memory, performs this 3-to-1 boolean operation to all bits and writes output. you can do shifts by delaying some of the inputs. that gives a way how to access cells on the left
<Lofty>
I don't think Yosys is the tool for this.
<mangelis>
but to access cells on the right, blitter has to be run in "descending" mode. so one can not combine those in one blit operation. hence my need to group the inputs
<Lofty>
You can write a postprocessing script to group the inputs
<mangelis>
i know it's not. but i was just wondering if there exists some way to force certain operations
<Lofty>
ABC's idea of a LUT is too abstract to achieve this
<mangelis>
hmm okay
kraiskil has joined #yosys
<mangelis>
i imagine what i'd want is that i could force that optimization wouldn't happen across certain bits
<Lofty>
Even more: you're attempting to enforce a strict ordering of bits
<Lofty>
That's a constraint not even expressible to ABC
<mangelis>
ah, on verilog side i see that reg "group0" has 2 bits, which are generated by the sum of three input bits and then group0 is used in other expression
<mangelis>
but i guess it's not possible then to force the group0's 2 bits to "always exist"
<mangelis>
i'm not at all familiar how the synthesis works under the hood, thanks for telling me this anyway :)
<Lofty>
Well, I wrote a LUT mapper, so I know a reasonable amount on the subject
<Lofty>
Could I port my own LUT mapper to achieve this? Probably, but it wouldn't necessarily be as good
<mangelis>
cool
<Sarayan>
In fact you want to use yosys to generate a blitter configuration?
<mangelis>
Sarayan: more like i was thinking if i could add some constraints to generate design that fits the hw better
<Sarayan>
fun :-)
<mangelis>
actually while in shower i realized that non-blocking assignments probably do just what i want
<mangelis>
hmm, doesn't seem to change the result of synthesis. is the non blocking assigment -> flipflop mapping done somewhere else than just generic synthesis?
<Lofty>
That mapping is the proc pass, which is called by synth
<mangelis>
ah it probably needs a clock, ie. doesn't work inside always @( * )
<mangelis>
wow, it actually generates less luts and satifies the constraint i wanted :-))
philtor has joined #yosys
somlo_ has quit [Remote host closed the connection]
kraiskil has quit [Ping timeout: 240 seconds]
somlo has joined #yosys
tmeissner has quit [Quit: My MacBook Air has gone to sleep. ZZZzzz…]