futarisIRCcloud has joined #symbiflow
hzeller has joined #symbiflow
space_zealot has joined #symbiflow
mats has quit [Ping timeout: 240 seconds]
hzeller has quit [Ping timeout: 250 seconds]
mats_ has joined #symbiflow
<hackerfoo> They just flattened the muxes! I was thinking about that, but it introduces some invalid configurations.
<hackerfoo> Can I list multiple FASM features? e.g. SLICEM_MODES.DI = BDI1MUX.DI ADI1MUX.BDI1
<hackerfoo> It doesn't complain, at least.
Bertl_oO is now known as Bertl_zZ
space_zealot has quit [Ping timeout: 276 seconds]
jevinskie has joined #symbiflow
hzeller has joined #symbiflow
hzeller has quit [Ping timeout: 250 seconds]
citypw has quit [Ping timeout: 258 seconds]
jevinski_ has joined #symbiflow
jevinskie has quit [Ping timeout: 245 seconds]
kraiskil has joined #symbiflow
jevinskie has joined #symbiflow
jevinski_ has quit [Ping timeout: 246 seconds]
kraiskil has quit [Ping timeout: 246 seconds]
OmniMancer has joined #symbiflow
kraiskil has joined #symbiflow
auscompgeek has quit [Remote host closed the connection]
auscompgeek has joined #symbiflow
Vonter has quit [Ping timeout: 255 seconds]
Vonter has joined #symbiflow
GuzTech has joined #symbiflow
kraiskil has quit [Ping timeout: 240 seconds]
OmniMancer1 has joined #symbiflow
futarisIRCcloud has quit [Quit: Connection closed for inactivity]
OmniMancer has quit [Ping timeout: 246 seconds]
futarisIRCcloud has joined #symbiflow
kerel_ has joined #symbiflow
rvalles_ has joined #symbiflow
rvalles has quit [Ping timeout: 252 seconds]
kerel has quit [Ping timeout: 252 seconds]
Bertl_zZ is now known as Bertl
kraiskil has joined #symbiflow
<tpb> Title: reenable v2x dsp tests by kgugala · Pull Request #639 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
rvalles_ is now known as rvalles
jevinskie has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
jevinskie has joined #symbiflow
GuzTech has quit [Remote host closed the connection]
OmniMancer1 has quit [Quit: Leaving.]
<tpb> Title: PVT corner timing models · Issue #551 · verilog-to-routing/vtr-verilog-to-routing · GitHub (at github.com)
<litghost> elms: Looks like kmurray is also thinking along the same lines as you about an explicit split
hzeller has joined #symbiflow
jevinskie has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
jevinskie has joined #symbiflow
lethalbit has quit [Ping timeout: 258 seconds]
lethalbit has joined #symbiflow
tux3 has quit [Changing host]
tux3 has joined #symbiflow
futarisIRCcloud has quit [Quit: Connection closed for inactivity]
acomodi has joined #symbiflow
hzeller has quit [Ping timeout: 250 seconds]
tux3 has quit [Disconnected by services]
tux3 has joined #symbiflow
tux3 has quit [Disconnected by services]
tux3_ has joined #symbiflow
tux3 has joined #symbiflow
tux3_ has quit [Quit: quit]
<litghost> hackerfoo: I'm relatively sure that https://docs.verilogtorouting.org/en/latest/tutorials/arch/xilinx_virtex_6_like/ is just plain wrong
<litghost> hackerfoo: So I wouldn't use it as a reference
<litghost> hackerfoo: Can I list multiple FASM features? -> Yes, but I'm not sure when that is valid
<litghost> hackerfoo: Can you explain what you are trying to do with "BDI1MUX.DI ADI1MUX.BDI1"?
<litghost> hackerfoo: Because I'm pretty sure it's wrong
<hackerfoo> I'm trying to flatten two chained muxes into one, since I don't think VTR supports chaining things together.
<hackerfoo> I understand why they have this limitation, to prevent combinatorial explosion in the interconnect.
<hackerfoo> My current approach is to just see if this works for now, and then add support for parallel muxes to VTR later.
<litghost> hackerfoo: Cascaded muxes do work, you just cannot connect them directly, you need to pass through an intermediate pb_type
<hackerfoo> If muxes could switch multiple signals in parallel, I could properly flatten the two muxes into a single parallel one.
<litghost> hackerfoo: Why do you need to mux multiple singles at all?
<litghost> hackerfoo: The underlying structure in this case is always N to 1 muxes
<litghost> signals*
<hackerfoo> But then the connection information would be lost, right? You'd have to explicitly instantiate the intermediate pb_type, so VPR could no longer make that decision by itself.
<litghost> hackerfoo: Can you make a diagram? I don't think I get what you are trying to model
<litghost> hackerfoo: I believe you are trying to model the fact that the ADI1MUX uses the output of the BDI1MUX
<litghost> hackerfoo: The solution is for the output of the BDI1MUX to go through the B LUT-RAM intermediate, and then connect to the ADI1MUX
<litghost> hackerfoo: This is what the PARENT_DI stuff was about
<hackerfoo> Yeah, give me a minute.
<hackerfoo> I want to allow VPR to make the decision, instead of forcing it.
<litghost> hackerfoo: There is no forcing? You are still just modelling the BDI1MUX and the ADI1MUX, yes?
<mithro> litghost: So, I'm now generating an arch.xml with v2x which includes the pb_type.xml / model.xml -- what would be the best way to run vpr on it to test the arch.xml is valid?
<hackerfoo> Rather than saying, for instance, DI goes to D_DRAM.DI and B_DRAM.DI when they implement a dual port RAM, I want VPR to see that they share an input, and route it through DI, setting BDI1MUX.DI
<litghost> mithro: Simplest test? PnR a wire
<hackerfoo> This should work fine, since there's only one mux.
<hackerfoo> But I want it to work the same for the lower half.
<mithro> litghost: Yes, but how do I do that in the cmake?
<litghost> mithro: Same way you write any test that PnR's, use add_fpga_target
<litghost> hackerfoo: I think you would agree that the CDI1MUX and BDI1MUX can be modelling with simply a <mux> interconnect block, yes?
<litghost> modelled*
<hackerfoo> The problem with the flattened mux is if VPR wants A_DRAM.DI to connect to DI amd B_DRAM.DI to BI, that would be invalid, but VPR won't know that.
<hackerfoo> Yes.
<litghost> hackerfoo: Don't use the flattened mux?
<litghost> hackerfoo: Have ADI1MUX mux ADI1 and the output of the BDI1MUX
<litghost> hackerfoo: In order to use the output of the BDI1MUX, you have to pass it through an intermediate pb_type, but that's fine
<hackerfoo> But then, how does VPR know when to get A_DRAM.DI from BDIMUX? The previous solution was to force it with the modes, which worked except in 32 bit mode.
<litghost> hackerfoo: Just re-write the mux without the modes
<litghost> hackerfoo: The previous implementation was based on a bad understanding of the underlying hardware
<hackerfoo> There's a bunch of ways to do it that *almost* work.
<hackerfoo> But since the tutorial uses the flattening approach, I'm guessing that that way is the least broken, so I'm just going to try it.
<litghost> hackerfoo: The tutorial is wrong
<litghost> hackerfoo: Ignore the tutorial
<litghost> hackerfoo: It is modelling something like a v6
<hackerfoo> I don't have a better solution.
<hackerfoo> v6 has the same arrangement.
<litghost> hackerfoo: But that tutorial isn't actually designed to run on hardware
<litghost> hackerfoo: So it can add flying elphanets and still be a valid tutorial
<hackerfoo> Maybe I should ask on #vtr?
<litghost> hackerfoo: It isn't actually a model of the real hardware
<hackerfoo> If their own example doesn't work, we should let them know, at least.
<litghost> hackerfoo: Their example works fine, but it isn't actually modelling a real piece of silicon
<litghost> hackerfoo: It is modelling a fictous similiar piece of hardware
<litghost> hackerfoo: You have to understand, VTR was never design to operate on real hardware
<litghost> hackerfoo: It is a research tool for hypothetical FPGA's
<hackerfoo> In order to demonstrate the expressiveness of the architecture description language, we use it to describe a section of a commercial logic block. In this example, we describe the Xilinx Virtex-6 FPGA logic slice [Xilinx Inc12], shown in Fig. 40, as follows:
<litghost> hackerfoo: And what does the title say: "Virtex 6 like"
<litghost> hackerfoo: Their model does not accurately represent the ADI1MUX behavior
<litghost> hackerfoo: And it should be obvious that is the case!
<litghost> hackerfoo: Their description of the SLICEM can output something the hardware cannot model, therefore it is wrong, period
<litghost> hackerfoo: As a concrete example, their model does not correctly model that the D LUT-RAM must be enabled for the C/B/A LUT-RAM's to be used
<hackerfoo> Anyway, I could fix it if it weren't for this:
* hackerfoo uploaded an image: Screenshot from 2019-05-02 11-00-50.png (17KB) < http://sandbox.hackerfoo.com:8008/_matrix/media/v1/download/sandbox.hackerfoo.com/lxSgwKzRitxuNinyaBzvPUwN >
<litghost> hackerfoo: You are more than welcome to submit a PR to VTR to fix that, but that seems unnessecary. Cascaded mux's are supported
<hackerfoo> I want to avoid introducing another stub.
<litghost> hackerfoo: I'm not sure why you think a stub is required? Maybe I don't understand what you mean by a stub
<mithro> litghost: So it seems to get cmake to use an arch.xml I have to call DEFINE_ARCH, DEFINE_DEVICE_TYPE, DEFINE_DEVICE, ADD_FPGA_TARGET?
<litghost> mithro: In a word, yes
<litghost> mithro: But why not just latch this off of the testarch?
<litghost> mithro: Testarch already has those setup
<litghost> mithro: And it feels like testarch is the natural place to put this stuff
<mithro> litghost: I'm just trying to run model.xml / pb_type.xml generated from v2x through vpr to check that it is valid
<hackerfoo> I'm guessing there's no way to tie muxes together?
<litghost> hackerfoo: You can cascade a mux through an intermediate type
<litghost> hackerfoo: Linking mux choices is not supported, except through modes
<litghost> hackerfoo: And VPR cannot switch modes based soley on routing discessions
<mithro> litghost: I have a script which generates an arch.xml with exactly 1 tile, a wrapper around the pb_type and enough IBUF / OBUF
<litghost> mithro: Then you'd need to make an arch, etc, if you want to use the existing stuff
<litghost> mithro: You could always write your own add_custom_target and invoke VPR directly
<litghost> mithro: If you already have an arch.xml, an eblif, and don't need a custom rrgraph
<litghost> mithro: But that flow is very different than a architecture pack/place/route
<litghost> mithro: Also, for wire.eblif to work, you need a route through lut
<litghost> mithro: With only 1 tile, I assume not all of them will have a ".names" subckt
<mithro> I have an eblif already
<litghost> mithro: Sure
<litghost> mithro: If you want to invoke VPR directly, you'll need to write that yourself
<mithro> okay, I think I'll do that
* hackerfoo uploaded an image: Screenshot from 2019-05-02 11-14-47.png (96KB) < http://sandbox.hackerfoo.com:8008/_matrix/media/v1/download/sandbox.hackerfoo.com/PyWdToQzlbVenAHvLrHMbfTz >
<litghost> hackerfoo: The middle mux isn't legal and the bottom mux is wrong if the mux selector isn't the same
<litghost> hackerfoo: The top mux should be able to be modelled, so I don't know what the problem is
<hackerfoo> Yes, I know, hence the question about linking muxes.
<hackerfoo> With real muxes, you'd just tie the selection lines together.
<litghost> hackerfoo: VPR doesn't support that idea
<hackerfoo> Don't we work on VPR, though? Does it support any form of constraints other than modes?
<hackerfoo> Anyway, the architecture definition was already wrong, so I'm just going to see if I can make it almost correct for now, and see if it works.
<litghost> hackerfoo: As I stated earlier, you are more than welcome to start on a PR for linked muxes or muxes of bus's
<hackerfoo> Then I can add what I need to VPR later.
<hackerfoo> litghost: Okay. Thanks.
<litghost> hackerfoo: I believe what was there before could never get into trouble because the techmap output a configuration that was always valid
<litghost> hackerfoo: It consumed the BI1 pin when it didn't need too, but wasn't invalid on hardware
<litghost> hackerfoo: I'm ignoring the RAM32 of course
Bertl is now known as Bertl_oO
acomodi has quit [Quit: Connection closed for inactivity]
lopsided98 has quit [Quit: Disconnected]
lopsided98 has joined #symbiflow
hzeller has joined #symbiflow
kraiskil has quit [Ping timeout: 258 seconds]
<litghost> hackerfoo: kem_ is active on #vtr-dev if you want to poke him about the mux stuff
<hackerfoo> Okay. I didn't want to bother -dev with a user question, but #vtr is pretty quiet.
<hackerfoo> There's no ADIMUX.BDI1 fasm feature? It's not listed in the documentation.
<litghost> hackerfoo: There is not. The absence of ADI1MUX.ADI1 is either BDI1 or MC31
<litghost> hackerfoo: Presumably MC31 is controlled via the SRL bit
<litghost> hackerfoo: But we don't have evidence of that at this minute
<hackerfoo> Then I guess we don't need to worry about the chained mux problem right now, since we can't configure them that way yet.
<litghost> hackerfoo: That doesn't follow?
<litghost> ADI1 can be either AX, BX, or DX, yes?
<litghost> ADI1 can only come BX if BDI1 = BX
<litghost> and ADI1 can only become DX if BDI1 = DX
<litghost> Am I missing something?
<hackerfoo> No, ADIMUX selects AI, BDI1, and BMC31.
<hackerfoo> So this is also probably why RAM128X1D doesn't (didn't?) work.
<hackerfoo> Until we figure that bit out, RAM128X1D and RAM256X1S will have to use AI.
<litghost> hackerfoo: I wasn't talking about ADIMUX, I was talking about the effective ADI1 connection, which can be either AX, BX or DX
<litghost> hackerfoo: s/X/I/
<hackerfoo> Oh, okay. I get it. Currently, ADI1MUX.AI = 0 ==> BDI1?
<litghost> ADI1 can be AI, BI or DI
<litghost> hackerfoo: Yes, ADI1MUX.AI = 0 ==> BDI1
<hackerfoo> Right.
<litghost> hackerfoo: BDI1 can be either BI or DI based on the state of BDI1MUX
<hackerfoo> I see. I forgot that the default isn't DI for ADI1MUX, like the others, so the default is BDI1.
<hackerfoo> It would be nice if the other inputs were defined to make it easier to read, and to detect conflicts.
<litghost> Other formatS?
<hackerfoo> So that if VPR emits fasm that switches a mux multiple ways, it would get caught instead of just picking the non-default.
<hackerfoo> There seems to be a lot of silent failure in our toolchain.
<hackerfoo> I got all the shifter tests working again.
<litghost> hackerfoo: This particular case could be addressed in several ways. It is illegal to write FASM like:
<litghost> FEATURE_A = 1
<litghost> FEATURE_A = 0
<litghost> And it is illegal to write:
<litghost> Where those features result in conflicting bits
<litghost> FEATURE_A = 1
<litghost> FEATURE_B = 1
<litghost> In pretty much all cases, we can write the mux statement to generate that sort of conflict
<hackerfoo> Ah. That's probably why elms was suggesting `:`, so it would be `<input> : <feature> = <value>`.
<litghost> hackerfoo: not really, the code in VPR to handle : is the same as =
<litghost> hackerfoo: "<feature> = 1" and "<feature>" are the same statement
<hackerfoo> Oh. Can't we define a feature for each input? So e.g. CDI1MUX.DI is defined to set the bit to 0?
<litghost> hackerfoo: It's probably better to fix the fuzzer to emit a "zero feature"
<litghost> hackerfoo: Which defines "all bits cleared"
<tpb> Title: prjxray-db/segbits_bram_l.db at master · SymbiFlow/prjxray-db · GitHub (at github.com)
<litghost> hackerfoo: And then the mux will assert those bits are cleared
<litghost> hackerfoo: It also will then show up in bit2fasm output
<litghost> hackerfoo: FEATURE = 0 will disappear in a round trip FASM -> bit -> FASM
<litghost> hackerfoo: Zero features will appear
<litghost> hackerfoo: Zero features added to the fuzzers until after the xDI fuzzer was written
<hackerfoo> At least for muxes, that would be nice, so the FASM is easier to read.
<litghost> hackerfoo: Agreed. The current metadata was written for an MVP, which we do in fact have
<hackerfoo> Sure. If I create an issue, should it be in prjxray?
<litghost> Yes, because we need the segbit database to be updated first
<tpb> Title: prjxray/generate.py at master · SymbiFlow/prjxray · GitHub (at github.com)
<hackerfoo> Thanks
<tpb> Title: dbfixup: automatically create .dbf files · Issue #347 · SymbiFlow/prjxray · GitHub (at github.com)
<litghost> As .dbf files are how zero features are defined
<litghost> Example DBF file to go with the link I sent: https://github.com/SymbiFlow/prjxray/blob/master/fuzzers/060-bram-cascades/bits.dbf
<tpb> Title: prjxray/bits.dbf at master · SymbiFlow/prjxray · GitHub (at github.com)
<hackerfoo> Now I need to fix 2xRAM128X1S not getting packed together.
<litghost> hackerfoo: What error are you getting? I may have found a bug a packer change we made, and have a PR with a fix
<hackerfoo> When running "make dram_2_128x1s_assert_usage", both CLBLM_R and L are used.
<hackerfoo> AssertionError: Expect usage of block CLBLM_L = 0, found 1
<litghost> hackerfoo: Before you debug too far, make sure that Vivado packs them correctly
<hackerfoo> Okay, I'll check.
<litghost> hackerfoo: Correctly is the wrong term, but as we are asserting
<hackerfoo> I should check master, too.
<litghost> hackerfoo: Yep
<hackerfoo> It works on master. Is there a list of the Kokoro tests somewhere?
<litghost> hackerfoo: "make all_xc7"
<litghost> hackerfoo: Not really
<hackerfoo> Thanks
<litghost> hackerfoo: Right now most of our tests are just targets
<litghost> hackerfoo: Kokoro runs "make all_xc7"
<litghost> hackerfoo: I recommend a "-j" of roughly CPU/4 and RAM/10 GB
<litghost> Maybe RAM/5 GB
<litghost> hackerfoo: I run "-j16" and it doesn't chew all my ram
<hackerfoo> I'll do that after I fix 128x1s
<litghost> hackerfoo: Oh and kokoro is just running whatever is in https://github.com/SymbiFlow/symbiflow-arch-defs/blob/master/.github/kokoro/xc7.sh
<tpb> Title: symbiflow-arch-defs/xc7.sh at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<hackerfoo> I updated my PR if you want to look at the changes.
<litghost> hackerfoo: To notify you want a re-review, just request a new review
<litghost> hackerfoo: It's the little recycle icon next to me name
<hackerfoo> I meant just if you're curious. I still have a bit more work to do before it's ready for a proper review. Thanks.
<litghost> hackerfoo: Ah, ok
<litghost> hackerfoo: Probably need a huge "this may emit invalid configurations!!!!" warning
<litghost> hackerfoo: For giggles, you can manually add the zero DB entries to prjxray-db and use those
<tpb> Title: prjxray-db/segbits_clblm_l.db at master · SymbiFlow/prjxray-db · GitHub (at github.com)
<litghost> So
<litghost> CLBLM_L.SLICEM_X0.ALUT.DI1MUX.AI 00_00
<litghost> CLBLM_L.SLICEM_X0.ALUT.DI1MUX.AI 00_00
<litghost> Becomes
<litghost> CLBLM_L.SLICEM_X0.BLUT.DI1MUX.BI 00_20
<litghost> CLBLM_L.SLICEM_X0.ALUT.DI1MUX.DI !00_00 !00_20
<litghost> CLBLM_L.SLICEM_X0.ALUT.DI1MUX.BI !00_00 00_20
<litghost> CLBLM_L.SLICEM_X0.BLUT.DI1MUX.BI 00_20
<litghost> CLBLM_L.SLICEM_X0.BLUT.DI1MUX.DI !00_20
<litghost> This won't prevent VPR from outputing an invalid configuration, but would allow fasm2frames to generate it error when it happens
<litghost> Another probably better configuration would be :
<litghost> CLBLM_L.SLICEM_X0.ALUT.DI1MUX.BDI1 !00_00
<litghost> CLBLM_L.SLICEM_X0.BLUT.DI1MUX.BI 00_20
<litghost> CLBLM_L.SLICEM_X0.BLUT.DI1MUX.DI !00_20
<litghost> CLBLM_L.SLICEM_X0.ALUT.DI1MUX.AI 00_00
<litghost> And have the fasm_mux line have two features
<hackerfoo> Yeah. I wouldn't want to control both muxes with one feature. VPR would just set both features.
<hackerfoo> That's what I wrote at first.
<litghost> Did it work, except for the fact that ALUT.DI1MUX.BDI1 isn't defined?
<litghost> e.g. did VPR output the right feature?
<hackerfoo> I didn't hit any of the multiple feature inputs, if that's what you're asking about. I should try that.
<litghost> hackerfoo: I'd recommend adding routing tests for them
<tpb> Title: symbiflow-arch-defs/xc7/tests/dram at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> hackerfoo: I believe all of the ones in https://github.com/SymbiFlow/symbiflow-arch-defs/tree/master/xc7/tests/dram use seperate D lines
<tpb> Title: symbiflow-arch-defs/xc7/tests/dram at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> hackerfoo: We probably want common D lines, and in an ideal world would check the state of the DI muxes to verify the "right" thing happened
<hackerfoo> Why? Internally all the dual port and >64 modes use shared DI.
<hackerfoo> I'm interested in how RAM1X32S works when using O5.
<hackerfoo> It would have to connect CX/DX externally, I think.
<litghost> hackerfoo: The current tests in https://github.com/SymbiFlow/symbiflow-arch-defs/tree/master/xc7/tests/dram all use seperate D lines, so anything packed into C/B/A will use their AI mux, rather than the common DI line
<tpb> Title: symbiflow-arch-defs/xc7/tests/dram at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<hackerfoo> litghost: No, not the dual port or >64 bit ones, because they are composed of multiple DPRAM32/64s sharing inputs.
<tpb> Title: symbiflow-arch-defs/dram_2_64x1d.v at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> So for it work correctly, the second RAM64X1D needs to use BI rather than DI (or be packed into a second SLICEM)
<tpb> Title: symbiflow-arch-defs/cells_map.v at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> I'm talking about the level above that
<litghost> e.g. two instances of RAM64X1D can either share or have different D lines
<litghost> If the D lines are common, then all of the xDI1MUX's should use the DI site pin
<hackerfoo> If they work independently, they should work shared. Primitives should be independent.
<litghost> Not true
<litghost> Have vivado pack two RAM64X1D's with common D lines, but different INIT's
<litghost> The DI line will be the only site pin, BI will not be used
<litghost> For clarify, when I say DI, I mean the SLICEM.DI site pin
<hackerfoo> I see. You want to make sure VPR takes advantage of the internal muxes even across primitives.
<litghost> Yes
<litghost> It actually causes some errors in fasm2v if we don't
<litghost> because Vivado will take advatange, even if VPR didn't
proteusguy has quit [Ping timeout: 255 seconds]
<litghost> And I don't think we can control it
<mithro> litghost: I have some comments around the implicit dff stuff, will try and comment a bit later tonigh
<litghost> mithro: k
<litghost> mithro: I'm interested how you are planning to solve things like FASM tagging implicitly. I'm not sure you can
<hackerfoo> Apparently, if you list FASM features separated by spaces, they just get concatenated.
<litghost> hackerfoo: We generally eat whitespace
<litghost> hackerfoo: In this case, it prevented a natural extension
<mithro> How do you do the equivalent of "basename" in cmake?
<litghost> get_filename_component
<litghost> hackerfoo: I would be open to <pin> : <feature>, <feature>
<litghost> which would allow for <pin>:<feature>=2,<feature> ,etc
<litghost> hackerfoo: And wouldn't require a large extension to the VPR FASM parser (which is brick stupid)
<mithro> litghost: What about "basename xyz.xml .xml" ? (IE strip extensions?)
<litghost> mithro: Same, still get_filename_component
<litghost> mithro: It's overloaded
<hackerfoo> litghost: Whatever works. I don't think writing architecture descriptions in XML is ever going to be pleasant. Luckily, it shouldn't be a common task.
<litghost> hackerfoo: The good news is v2x in theory is replacing right these XML's by hand, and I think that will be more extensible than this
<hackerfoo> I don't mind verbosity, but I don't like how VPR just seems to take reasonable-looking stuff and do unexpected things with it without complaining.
<hackerfoo> "X = Y\n X = Z\n" doesn't work either. No error, though.
<litghost> hackerfoo: Not sure what you mean? Anything in the metadata tags is our code, so don't blame VPR for that
<hackerfoo> Where's the parser?
<tpb> Title: vtr-verilog-to-routing/fasm.cpp at master+wip · SymbiFlow/vtr-verilog-to-routing · GitHub (at github.com)
<litghost> hackerfoo: genfasm is seperate from the rest of VPR, but we need their internal data structures for now
<litghost> hackerfoo: It's possible with the work that duck2 is doing, we can just parse the VPR outputs without libvpr, but that isn't something on the main line
<hackerfoo> Wow, that really is a simple parser. It just splits on = and :, and expects two items.
<hackerfoo> Oh well, I don't need that now.
<litghost> hackerfoo: I did say it was dumb as bricks
<hackerfoo> The surprising part is that it eats spaces. I figured if it didn't fail, it would work.
<litghost> hackerfoo: The eating of spaces is intentional, but it probably shouldn't eat interior spaces
<hackerfoo> The same thing for repeated inputs, where it only uses the first one.
<litghost> hackerfoo: But it is important to do something like python's "str.strip()" to avoid leading and trailing white space
<hackerfoo> Something like http://re2c.org or a hand-rolled tokenizer would take care of that.
<tpb> Title: re2c re2c 1.1.1 documentation (at re2c.org)
<litghost> hackerfoo: We do like inside VPR, and so new dependencies are not really good ideas. Fixing the space issue with a parse doesn't actually solve the "using only the first mux entry", which is probably just a bug
<litghost> live*
<hackerfoo> It doesn't have to be that complicated: https://github.com/HackerFoo/poprc/blob/master/tok.c
<tpb> Title: poprc/tok.c at master · HackerFoo/poprc · GitHub (at github.com)
Bertl_oO is now known as Bertl_zZ
<hackerfoo> But, yeah, not now.
<hackerfoo> The cool thing about re2c is that it doesn't add dependencies, it generates C from regular expressions. I haven't tried it yet, though.
<hackerfoo> But it's probably overkill for this.
<litghost> hackerfoo: There is a pass of FASM error check that is probably worth doing. Something like lint_fasm, that would check for fasm_mux issues like this
<litghost> hackerfoo: For example, there should be a fasm_mux for each input to the mux
<litghost> hackerfoo: And no entries for non-existent inputs
<litghost> hackerfoo: etc etc
<hackerfoo> From looking at output_fasm_mux, I bet it doesn't handle FOO[0].BAR[1]
<litghost> It does I believe
<litghost> Lemme go look around
<tpb> Title: symbiflow-arch-defs/pio.pb_type.xml at 6d5640672f41eb2d048f65b97b2d7d028b1e1d03 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com)
<litghost> That's what "parse_name_with_optional_index" handles
<hackerfoo> I meant two levels of indexing, since there's only one index for each side in the code.
<litghost> hackerfoo: Ya, it would explode
space_zealot has joined #symbiflow
<litghost> hackerfoo: But not fail silently
<litghost> Ah, I remember
<litghost> It splits the two VPR parts
<litghost> So it is parsing FOO[0] into "FOO" and 0
<litghost> So it does work
<litghost> I remember needing support for that, so I remember testing it
<hackerfoo> Where does the 0 go? Assuming it reads 1 as the index in "FOO[0].BAR[1]".
<litghost> mux_pb_index and mux_pin_index
<hackerfoo> So it would read it as "FOO[0] = BAR[1]"? Then "FOO[0].BAR[1] = BAZ" would fail, I guess, because it would see 3 parts.
<litghost> You aren't reading the code
<litghost> It splits on "=:" first
<litghost> So part[0] is "FOO[0].BAR[1] " and part[1] is "BAZ"
<litghost> Then it is split FOO[0] / BAR[1]
<litghost> Then parsed into (FOO, 0), (BAR 1)
<litghost> That part is fine
<litghost> The handling of the right hand side of the parse is less than ideal if we intended to support multiple FASM features
<litghost> left hand side is actually okay
<hackerfoo> Ah, I see. vtr_parts != mux_parts. My mistake.
<litghost> Ya
tpb has quit [Remote host closed the connection]
tpb has joined #symbiflow