proteusguy has quit [Ping timeout: 245 seconds]
proteusguy has joined #symbiflow
sf-slack2 has joined #symbiflow
sf-slack has quit [Remote host closed the connection]
adjtm_ has quit [Remote host closed the connection]
adjtm has joined #symbiflow
futarisIRCcloud has joined #symbiflow
Bertl_oO is now known as Bertl_zZ
nrossi has joined #symbiflow
futarisIRCcloud has quit [Quit: Connection closed for inactivity]
futarisIRCcloud has joined #symbiflow
OmniMancer has joined #symbiflow
GuzTech has joined #symbiflow
futarisIRCcloud has quit [Quit: Connection closed for inactivity]
proteusguy has quit [Ping timeout: 250 seconds]
Bertl_zZ is now known as Bertl
<sf-slack2> <acomodi> litghost, mithro: when you have some time, could you look at this https://github.com/SymbiFlow/vtr-verilog-to-routing/pull/36 on tile equivalence? Before proceeding with the other placer changes it would be good to check whether I am going into the right direction
<tpb> Title: WIP: Equivalent tiles VTR feature by acomodi · Pull Request #36 · SymbiFlow/vtr-verilog-to-routing · GitHub (at github.com)
nrossi has quit [Ping timeout: 240 seconds]
xobs has quit [Ping timeout: 240 seconds]
zeigren has quit [Ping timeout: 264 seconds]
galv[m] has quit [Ping timeout: 250 seconds]
mrhat2010[m] has quit [Ping timeout: 268 seconds]
<sf-slack2> <mkurc> @litghost I created a tool to traverse rr graph which allows to verify if a connection between two nodes is possible. And I verified that there is a possibility of connection between the SOURCE in the BLK_SY-GND and a CLB tile despite that the VPR throws an error. I checked using node indices as included in the error message.
<sf-slack2> <mkurc> The tool only cares only about node indices and edge to node indices. It does not check channel location and directions nor IPIN and OPIN directions.
<sf-slack2> <mkurc> BTW the graph traversal tool is still a WIP. I will be able to push it tomorrow.
<litghost> mkurc: Okay, that matches what happened when I first connected the constant network
<tpb> Title: Routing failure on global channel structure · Issue #520 · verilog-to-routing/vtr-verilog-to-routing · GitHub (at github.com)
<litghost> mkurc: I suggest filing a bug against VPR and talking to kem_ over in #vtr-dev
rvalles has joined #symbiflow
<litghost> mkurc: Do follow kem_'s suggestion in https://github.com/verilog-to-routing/vtr-verilog-to-routing/issues/520#issuecomment-478057904 to enable routing debug
<tpb> Title: Routing failure on global channel structure · Issue #520 · verilog-to-routing/vtr-verilog-to-routing · GitHub (at github.com)
<litghost> mkurc: kem_ did submit a fix for the constant routing that was require, but unclear if that is what is going on
<litghost> mkurc: All you did was shift the entire grid, yes?
<litghost> Weird :|
<sf-slack2> <mkurc> @litghost Yes what i did was shfit the grid 2 tiles to the right.
<litghost> mkurc: It's very confusing why that would break things, we must be missing something
<litghost> mkurc: The details routing output might provide a hint
<litghost> mkurc: I might finish up the FF CE/SR changes today, so I can dig into what is going on with your PR. Any new commits on the PR that haven't been pushed?
<sf-slack2> <mkurc> Though I am not 100% sure whether the grid shift implementation is correct. Lets say I am 99.9% sure that it is correct.
<sf-slack2> <mkurc> I will try with the kem's suggestion
<sf-slack2> <mkurc> Actually what is weird is when i shift the grid to the east I got an error but when I shift to the north I got no error...
<sf-slack2> <mkurc> @litghost I didn't push anything new
<litghost> mkurc: Definitely take a look at the detailed routing output, something must be different :(
GuzTech has quit [Remote host closed the connection]
citypw has joined #symbiflow
tux3 has quit [Changing host]
tux3 has joined #symbiflow
citypw has quit [Ping timeout: 252 seconds]
OmniMancer has quit [Quit: Leaving.]
<litghost> FYI https://github.com/SymbiFlow/conda-packages/issues/14 , this probably explains the excessive runtimes when using the conda build of VTR
<tpb> Title: VPR being compiled without thread support · Issue #14 · SymbiFlow/conda-packages · GitHub (at github.com)
proteusguy has joined #symbiflow
<elms> that explains what hzeller was seeing on build times as well
<litghost> elms: Yep!
lopsided98 has quit [Quit: Disconnected]
lopsided98 has joined #symbiflow
Bertl is now known as Bertl_oO
<hackerfoo> litghost: DLUT can't be used for dual port RAM, right?
<tpb> Title: RAM64X1D.fasm · GitHub (at gist.github.com)
<hackerfoo> That's from Vivado.
<litghost> Correct
<litghost> Kindof
<litghost> the DLUT cannot be the DPO, it must be the SPO
<litghost> Each of the other BLUT can be either DPO or SPO
<litghost> Sorry, let me try again
<litghost> CLUT and ALUT are either DPO and SPO
<mithro> litghost: You know that you can enable travis on your own repositories?
<litghost> BLUT is SPO when ALUT/BLUT are in RAM64X1D
<hackerfoo> litghost: Okay, so it just needs to be paired with a CLUT.
<litghost> hackerfoo: Ya
<litghost> hackerfoo: dual port DRAM's are always two LUT's
<litghost> hackerfoo: Maybe more
<litghost> hackerfoo: RAM128X1D is 2 SPO luts and 2 DPO luts
<litghost> hackerfoo: reduced with the MUXF7's
<litghost> hackerfoo: Something I've realized in the AI/BI/CI bit is truelly a mux control
<litghost> hackerfoo: The SPO vs DPO has to do with how the address lines are wires
<litghost> hackerfoo: wired
<litghost> hackerfoo: SPO simply means DPRA == A
<hackerfoo> So you can write one address and read another, or read two at once.
<litghost> hackerfoo: Right
<litghost> hackerfoo: So a dual port DRAM has a single port and dual port DRAM
<litghost> hackerfoo: In the case of a 64X1D that is generally DLUT/CLUT or BLUT/ALUT
<litghost> hackerfoo: I expected that 32X1D would be similiar, but I haven't tested it
<litghost> hackerfoo: Is https://gist.github.com/HackerFoo/1d54628ed8ad54fa16d356604af6842b from a RAM64X1D or something else?
<tpb> Title: RAM64X1D.fasm · GitHub (at gist.github.com)
<hackerfoo> It's the 2 RAM64X1D design you sent me.
<litghost> hackerfoo: Right, ya that makes sense to me
<litghost> hackerfoo: And it is the FASM model I implemented in the arch def, plus handling the BI mux for the BLUT/ALUT pair
<hackerfoo> I'm not sure what the point of 32X1D is. As far as I can tell, it's the same as 64X1D but with the two high address inputs high.
<litghost> hackerfoo: I tend to agree with you
<hackerfoo> Or low. I can't remember.
<litghost> hackerfoo: I think the useful thing is something akin to a 32X2D
<litghost> hackerfoo: But that doesn't appear explicitly
<litghost> hackerfoo: Anyways, if you are correct that a 32X1D is just a 64X1D with lines tied, then that is a super simple tech map fix
<tpb> Title: symbiflow-arch-defs/cells_map.v at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> hackerfoo: And if you are correct that there isn't a reason to use it, then there is no need to add back RAM32X1D synthesis to Yosys
<litghost> hackerfoo: However there is not reason not to support the primative, in case someone used one in their design
<hackerfoo> I'm guessing that it makes routing easier by not connecting those two address pins.
<litghost> hackerfoo: Another option to consider is to tech map the RAM32X1D to the RAM64X1D and let yosys further techmap down to the our VPR primatives
<litghost> hackerfoo: Sure, but yosys would've tied the pins to VCC anyways, and VCC ties on those lines are "free" and the default state of the hardware
<tpb> Title: RAM32X1D.fasm · GitHub (at gist.github.com)
<hackerfoo> The only difference is that the SMALL features are set.
<litghost> hackerfoo: Okay, that is the model I expected, and what I intended VPR to do
<litghost> hackerfoo: Does the VPR output behave like that?
<hackerfoo> I'm going to check that next.
<litghost> hackerfoo: Okay, sounds good
futarisIRCcloud has joined #symbiflow
<tpb> Title: RAM32X1D_vpr.fasm · GitHub (at gist.github.com)
<tpb> Title: RAM64X1D_vpr.fasm · GitHub (at gist.github.com)
<hackerfoo> What's DI1MUX.BI?
<hackerfoo> So BI is muxed into BLUT, and this is different.
<litghost> hackerfoo: It controls the DI1 mux
<litghost> hackerfoo: I don't think that is the problem. If you want to see vivado make that output, change the DI signals to not be the same
<litghost> hackerfoo: VPR doesn't currently have a perfect model of the DI muxes, so it uses two DI wires rather than 1
<tpb> Title: WIP [DNM]: generate arch.xml from verilog templates including timing info by kgugala · Pull Request #574 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<elms> mithro: yeah thanks for making sure though. I pulled it down and think I'll add some comments.
<mithro> elms: So, we have xc7/primitives/common_slice/Nlut/simtest/test_alut.py
<mithro> elms: I assume we are not running that test on CI in any way at the moment?
<hackerfoo> I changed the D input for the second RAM32X1D and Vivado added {C,D}OUTMUX.O5, but not any DI1MUX.
<hackerfoo> I'm not sure why BI would be used; doesn't the data (D) get connected to DI?
<litghost> hackerfoo: Is Vivado packing the the two RAM32X1D's into the same SLICE?
<hackerfoo> No, Vivado isn't. VPR is.
<litghost> hackerfoo: In order to do that the write address lines, write enable, read address lines must be the smae
<hackerfoo> Okay, I get one slice, but no BI: https://gist.github.com/HackerFoo/96785e5de287891b06d94f8ecdc6c0b7
<tpb> Title: RAM32X1D_vivado_1slice.v · GitHub (at gist.github.com)
<hackerfoo> (from Vivado)
<hackerfoo> That must be interpreted incorrectly, or BI is being enabled implicitly?
<litghost> Hold on a minute
<litghost> That FASM output only has 2 RAM instances
<litghost> Is the RAM32X1D located in just one LUT?
<litghost> With O5 as DPO/SPO and O6 as the other?
<litghost> That is a significant different
<litghost> And not what I modelled
<hackerfoo> That seems to contradict the datasheet.
<hackerfoo> But there's not much information on 32X1D. It just says it takes 2 LUTs.
<litghost> hackerfoo: Okay. Check the routing resources display on the Vivado output and see what is the actually placement
<litghost> hackerfoo: E.g. Where is the SPO and DPO lines?
<elms> mithro: I discovered those tests when I started looking reorganizing the code. Currently I think CI only runs on top level utils/
<mithro> elms: Yeah
<mithro> hackerfoo: So I started thinking about the idea of having a "library" of flipflop objects in symbiflow-arch-defs which we map the Xilinx primitives to
<tpb> Title: Yosys Primitives to VPR Mapping - Google Docs (at docs.google.com)
<mithro> hackerfoo: Yosys actually already has a pretty exhaustive set of flipflop types
<mithro> also started coming out of elms' quest to map various terms to each other https://docs.google.com/spreadsheets/d/1pWjU8RujiGdlr-8iG66O1rvognNHgtnNVvCjSfksH-4/edit#gid=0
<tpb> Title: SymbiFlow Name Mapping (Xilinx, Lattice, Altera/Intel) - Google Sheets (at docs.google.com)
adjtm has quit [*.net *.split]
Vonter has quit [*.net *.split]
kgugala has quit [*.net *.split]
<litghost> Call out if someone wants to help with xc7 fasm2verilog support: https://github.com/SymbiFlow/symbiflow-arch-defs/issues/578
<tpb> Title: Improve xc7 fasm2verilog output · Issue #578 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> We have something that is functional, but the net names are pretty unhelpful, soley based on the underlying BEL
adjtm has joined #symbiflow
Vonter has joined #symbiflow
kgugala has joined #symbiflow
<litghost> Would be nice if we could better annotate the net names based on the VPR net name
<litghost> Along with some carry chain beutification
<hackerfoo> Both RAM32X1Ds seem to map to those same two LUTs.
<litghost> hackerfoo: Which lines are the SPO and DPO?
<litghost> hackerfoo: I think what is happening is that RAM + SMALL makes two RAM32 instances per LUT
<litghost> hackerfoo: You were asking why RAM32X1D, well you can pack 2 RAM32X1D per LUT pair
<litghost> hackerfoo: Assuming I'm reading what is happening correctly
<litghost> hackerfoo: The key is thinking about a LUT6 as really just two LUT5's with a mux at the output
<hackerfoo> Ah, so 1 takes 2 LUTs, but you can fit a second one in for free?
<litghost> hackerfoo: That's the theory
<litghost> hackerfoo: If that is correct, then the two outputs on the top LUT should be inst1.SPO and inst2.SPO
<litghost> hackerfoo: Checkout LUT6_2 in the 7-series library
<litghost> hackerfoo: It has diagram that is pretty useful
<litghost> hackerfoo: If I5 is tied high, then the two LUT5 instances can be considered indepedent
<hackerfoo> SPOs are O5/6 from DLUT, and DPOs are from CLUT.
<litghost> hackerfoo: Yep, that matches the theory
tpb has quit [Remote host closed the connection]
tpb has joined #symbiflow
<hackerfoo> None of this explains why 32X1D doesn't work in VPR, right? I think I need to look at the routing.
<litghost> hackerfoo: True, VPR should be able to pack 1 of them (instead of both)
<litghost> hackerfoo: Check which address lines were being used
<litghost> hackerfoo: The high bit should be unused
<litghost> mkurc: I've got top_bram_n2 in Vivado simulating, and I'm starting to debug it. I can see that the fsm_pulse_cnt isn't incrementing, but debugging is going pretty slow
<litghost> mkurc: If you want a break from the tile split, https://github.com/SymbiFlow/symbiflow-arch-defs/issues/578 would probably accelerate debugging the scalable proc failure
<tpb> Title: Improve xc7 fasm2verilog output · Issue #578 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)