DiffieHellman has quit [Remote host closed the connection]
DiffieHellman has joined #yosys
so-offish1 has quit [Quit: Leaving]
tokamak has quit [Quit: ZNC 1.8.2+deb2build5 - https://znc.in]
lumo_e has quit [Quit: Quit]
tokamak has joined #yosys
Lord_Nightmare2 has joined #yosys
Lord_Nightmare has quit [Ping timeout: 255 seconds]
Lord_Nightmare2 is now known as Lord_Nightmare
bl0x_ has joined #yosys
bl0x has quit [Ping timeout: 248 seconds]
citypw has joined #yosys
kivikakk has joined #yosys
tlwoerner has quit [Remote host closed the connection]
tlwoerner has joined #yosys
ec has quit [Ping timeout: 255 seconds]
ec has joined #yosys
ec has quit [Remote host closed the connection]
ec has joined #yosys
kivikakk has quit [Quit: Leaving.]
FabM has joined #yosys
FabM has joined #yosys
FabM has quit [Changing host]
kivikakk has joined #yosys
ec has quit [Ping timeout: 255 seconds]
ec has joined #yosys
dormito has quit [Ping timeout: 248 seconds]
dormito has joined #yosys
DiffieHellman has quit [Ping timeout: 255 seconds]
DiffieHellman has joined #yosys
citypw has quit [Ping timeout: 255 seconds]
nak has quit [Ping timeout: 268 seconds]
nak has joined #yosys
nak has quit [Ping timeout: 248 seconds]
nak has joined #yosys
nak has quit [Ping timeout: 268 seconds]
nak has joined #yosys
nak has quit [Ping timeout: 248 seconds]
nak has joined #yosys
nak has quit [Ping timeout: 255 seconds]
nak has joined #yosys
so-offish has joined #yosys
nak has quit [Ping timeout: 276 seconds]
nak has joined #yosys
crzwdjk has joined #yosys
nak has quit [Ping timeout: 255 seconds]
nak has joined #yosys
nak has quit [Ping timeout: 276 seconds]
nak has joined #yosys
crzwdjk has quit [Quit: Client closed]
<so-offish>
How do I pack/place/route items with the Python API in NextPNR
<tnt>
so-offish: I'm not sure if you can trigger the pass. But you can add scripts at various stage of the process. I'm only used them to place things by setting the BEL property basically.
<so-offish>
tnt: Yeah I saw that capability - I think I figured out how to use it by looking at people's stuff on Github
<so-offish>
tnt: but I would need to generate like 100 slightly different copies of a ring oscillator, I thought it might be easier to do with just Python and the one output .json
<mewt_>
.32
<so-offish>
tnt: maybe that's stupid.
<so-offish>
tnt: I'm not sure yet.
FabM has quit [Ping timeout: 248 seconds]
<lofty>
so-offish: you can just use (* BEL="..." *) to manually place them. there's no need to bother with packing/routing
<so-offish>
lofty: But I need something like 100 of them, and I need them to be routed exactly the same way (just in different locations)
<so-offish>
lofty: like I need bitstream 000 to have it in BEL=X0/Y0/SLICEA, in bitstream 001 I need it in BEL=X1/Y0/SLICEA, bitstream 002.... etc
<so-offish>
lofty: They need to be "stamped" across the part with exactly the same routing
<so-offish>
If I just needed one, and I could just mess around until I got the 1, I'd be golden. :)
<tnt>
so-offish: I don't think there is anything to control routing unfortunatey.
<lofty>
That stuff mostly isn't exposed through python because it's ungodly slow to do that
<lofty>
I'm...a little confused about why you need to do that, but um
<so-offish>
Silicon supply chain research.
<so-offish>
silicon security supply chain research. I guess.
<lofty>
How delightfully vague
<so-offish>
lol
<so-offish>
If research doesn't work out for me, I'll try politics next.
<lofty>
Well, consider that nextpnr is a timing driven router, so it's going to pick the shortest paths
<lofty>
So I think even if you don't explicitly tell it the routing path, it should be very predictable if you constraint placement
<lofty>
*constrain
<so-offish>
lofty: That's a brilliant point, thank you.
<so-offish>
lofty: Maybe just moving the BELs around in the Python API is enough!
<lofty>
Granted, I can't promise anything, because nextpnr's approach to combinational loops is to throw its hands in the air and assume the user knows what they're doing
<so-offish>
lofty: Oh shoot. --ignore-loops makes it explicitly not timed.
<lofty>
Yes, which is why when someone goes "I need to make a ring oscillator", my instinct is "no, you probably don't".
<lofty>
I've seen people use them for true RNGs, but it's definitely weird
<lofty>
(combinational loops are flat-out forbidden in Yosys RTLIL, so nextpnr does not see them often...)
<tnt>
so-offish: I'm not sure about the ECP5 but routing resource are not necessarely uniform. i.e. if you create two identical loop and place them for instance one at Y=10 and the other at Y=20, the available wires might not be the same.
<tnt>
So you need to check the routing grid to see "how it repeats" to make sure to align your instances to that.
<whitequark>
I guess the research relates somehow to fingerprinting ICs
<so-offish>
tnt: I think at various "edges" there are aliased nets within the fabric that are covered by special routing rules? (I am trying to use all the NextPNR terminology)
<so-offish>
lofty: I haven't had a problem with Yosys so far in combinatorial loop land. NextPNR throws a fit and dies unless you include --ignore-loops, which again breaks the concept of "timing" in total for the device.
<so-offish>
whitequark: It turns out you can do a lot with that data; fingerprinting is a great example.
<lofty>
so-offish: the official capitalisation of nextpnr is nextpnr and everybody looks a little bit oddly whenever it's spelt differently :p
<so-offish>
lofty: I'm sorry; thanks for the correction. :)
<so-offish>
I think I saw that on a conference slide somewhere
<lofty>
so-offish: I mentioned that RTLIL forbids combinational loops, which is true: so Yosys very, very eagerly converts them into latches
<lofty>
It's the rare "undefined behaviour" of the IL.
<lofty>
(other than 'x, which, well, it's 'x)
<so-offish>
lofty: Ah, so I should add an extra check (within Yosys) before I get to nextpnr to make sure I'm really getting the loop I expect?