*** tpb has joined #symbiflow | 00:00 | |
*** futarisIRCcloud has joined #symbiflow | 00:38 | |
*** hzeller has joined #symbiflow | 00:39 | |
*** space_zealot has joined #symbiflow | 01:18 | |
*** mats has quit IRC | 01:29 | |
*** hzeller has quit IRC | 01:58 | |
*** mats_ has joined #symbiflow | 02:03 | |
hackerfoo | Check this out: https://docs.verilogtorouting.org/en/latest/tutorials/arch/xilinx_virtex_6_like/ | 02:21 |
---|---|---|
hackerfoo | They just flattened the muxes! I was thinking about that, but it introduces some invalid configurations. | 02:24 |
hackerfoo | Can I list multiple FASM features? e.g. SLICEM_MODES.DI = BDI1MUX.DI ADI1MUX.BDI1 | 02:34 |
hackerfoo | It doesn't complain, at least. | 02:46 |
*** Bertl_oO is now known as Bertl_zZ | 03:16 | |
*** space_zealot has quit IRC | 04:55 | |
*** jevinskie has joined #symbiflow | 05:10 | |
*** hzeller has joined #symbiflow | 05:10 | |
*** hzeller has quit IRC | 05:15 | |
*** citypw has quit IRC | 05:23 | |
*** jevinski_ has joined #symbiflow | 05:47 | |
*** jevinskie has quit IRC | 05:48 | |
*** kraiskil has joined #symbiflow | 06:31 | |
*** jevinskie has joined #symbiflow | 07:25 | |
*** jevinski_ has quit IRC | 07:25 | |
*** kraiskil has quit IRC | 07:36 | |
*** OmniMancer has joined #symbiflow | 07:42 | |
*** kraiskil has joined #symbiflow | 07:48 | |
*** auscompgeek has quit IRC | 07:56 | |
*** auscompgeek has joined #symbiflow | 07:56 | |
*** Vonter has quit IRC | 07:57 | |
*** Vonter has joined #symbiflow | 08:00 | |
*** GuzTech has joined #symbiflow | 08:20 | |
*** kraiskil has quit IRC | 08:53 | |
*** OmniMancer1 has joined #symbiflow | 09:16 | |
*** futarisIRCcloud has quit IRC | 09:17 | |
*** OmniMancer has quit IRC | 09:19 | |
*** futarisIRCcloud has joined #symbiflow | 10:15 | |
*** kerel_ has joined #symbiflow | 10:26 | |
*** rvalles_ has joined #symbiflow | 10:27 | |
*** rvalles has quit IRC | 10:27 | |
*** kerel has quit IRC | 10:27 | |
*** Bertl_zZ is now known as Bertl | 10:55 | |
*** kraiskil has joined #symbiflow | 11:17 | |
sf-slack2 | <kgugala> @mithro @litghost https://github.com/SymbiFlow/symbiflow-arch-defs/pull/639#issuecomment-488635015 | 11:25 |
tpb | Title: reenable v2x dsp tests by kgugala · Pull Request #639 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 11:25 |
*** rvalles_ is now known as rvalles | 11:29 | |
*** jevinskie has quit IRC | 12:20 | |
*** jevinskie has joined #symbiflow | 12:24 | |
*** GuzTech has quit IRC | 15:06 | |
*** OmniMancer1 has quit IRC | 15:08 | |
litghost | elms: https://github.com/verilog-to-routing/vtr-verilog-to-routing/issues/551#issuecomment-488710355 | 15:16 |
tpb | Title: PVT corner timing models · Issue #551 · verilog-to-routing/vtr-verilog-to-routing · GitHub (at github.com) | 15:16 |
litghost | elms: Looks like kmurray is also thinking along the same lines as you about an explicit split | 15:16 |
*** hzeller has joined #symbiflow | 15:45 | |
*** jevinskie has quit IRC | 16:09 | |
*** jevinskie has joined #symbiflow | 16:09 | |
*** lethalbit has quit IRC | 16:10 | |
*** lethalbit has joined #symbiflow | 16:11 | |
*** tux3 has quit IRC | 16:41 | |
*** tux3 has joined #symbiflow | 16:41 | |
*** futarisIRCcloud has quit IRC | 16:47 | |
*** acomodi has joined #symbiflow | 16:48 | |
*** hzeller has quit IRC | 16:56 | |
*** tux3 has quit IRC | 17:13 | |
*** tux3 has joined #symbiflow | 17:13 | |
*** tux3 has quit IRC | 17:19 | |
*** tux3_ has joined #symbiflow | 17:19 | |
*** tux3 has joined #symbiflow | 17:20 | |
*** tux3_ has quit IRC | 17:26 | |
litghost | hackerfoo: I'm relatively sure that https://docs.verilogtorouting.org/en/latest/tutorials/arch/xilinx_virtex_6_like/ is just plain wrong | 17:40 |
litghost | hackerfoo: So I wouldn't use it as a reference | 17:41 |
litghost | hackerfoo: Can I list multiple FASM features? -> Yes, but I'm not sure when that is valid | 17:41 |
litghost | hackerfoo: Can you explain what you are trying to do with "BDI1MUX.DI ADI1MUX.BDI1"? | 17:41 |
litghost | hackerfoo: Because I'm pretty sure it's wrong | 17:41 |
hackerfoo | I'm trying to flatten two chained muxes into one, since I don't think VTR supports chaining things together. | 17:43 |
hackerfoo | I understand why they have this limitation, to prevent combinatorial explosion in the interconnect. | 17:43 |
hackerfoo | My current approach is to just see if this works for now, and then add support for parallel muxes to VTR later. | 17:44 |
litghost | hackerfoo: Cascaded muxes do work, you just cannot connect them directly, you need to pass through an intermediate pb_type | 17:45 |
hackerfoo | If muxes could switch multiple signals in parallel, I could properly flatten the two muxes into a single parallel one. | 17:45 |
litghost | hackerfoo: Why do you need to mux multiple singles at all? | 17:46 |
litghost | hackerfoo: The underlying structure in this case is always N to 1 muxes | 17:46 |
litghost | signals* | 17:46 |
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. | 17:47 |
litghost | hackerfoo: Can you make a diagram? I don't think I get what you are trying to model | 17:47 |
litghost | hackerfoo: I believe you are trying to model the fact that the ADI1MUX uses the output of the BDI1MUX | 17:48 |
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 | 17:48 |
litghost | hackerfoo: This is what the PARENT_DI stuff was about | 17:49 |
hackerfoo | Yeah, give me a minute. | 17:49 |
hackerfoo | I want to allow VPR to make the decision, instead of forcing it. | 17:49 |
litghost | hackerfoo: There is no forcing? You are still just modelling the BDI1MUX and the ADI1MUX, yes? | 17:50 |
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? | 17:54 |
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 | 17:54 |
litghost | mithro: Simplest test? PnR a wire | 17:54 |
hackerfoo | This should work fine, since there's only one mux. | 17:54 |
hackerfoo | But I want it to work the same for the lower half. | 17:54 |
mithro | litghost: Yes, but how do I do that in the cmake? | 17:55 |
litghost | mithro: Same way you write any test that PnR's, use add_fpga_target | 17:55 |
litghost | hackerfoo: I think you would agree that the CDI1MUX and BDI1MUX can be modelling with simply a <mux> interconnect block, yes? | 17:56 |
litghost | modelled* | 17:56 |
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. | 17:56 |
hackerfoo | Yes. | 17:57 |
litghost | hackerfoo: Don't use the flattened mux? | 17:57 |
litghost | hackerfoo: Have ADI1MUX mux ADI1 and the output of the BDI1MUX | 17:57 |
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 | 17:58 |
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. | 17:59 |
litghost | hackerfoo: Just re-write the mux without the modes | 18:00 |
litghost | hackerfoo: The previous implementation was based on a bad understanding of the underlying hardware | 18:00 |
hackerfoo | There's a bunch of ways to do it that *almost* work. | 18:01 |
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. | 18:01 |
litghost | hackerfoo: The tutorial is wrong | 18:01 |
litghost | hackerfoo: Ignore the tutorial | 18:02 |
litghost | hackerfoo: It is modelling something like a v6 | 18:02 |
hackerfoo | I don't have a better solution. | 18:02 |
hackerfoo | v6 has the same arrangement. | 18:02 |
litghost | hackerfoo: But that tutorial isn't actually designed to run on hardware | 18:02 |
litghost | hackerfoo: So it can add flying elphanets and still be a valid tutorial | 18:02 |
hackerfoo | Maybe I should ask on #vtr? | 18:03 |
litghost | hackerfoo: It isn't actually a model of the real hardware | 18:03 |
hackerfoo | If their own example doesn't work, we should let them know, at least. | 18:04 |
litghost | hackerfoo: Their example works fine, but it isn't actually modelling a real piece of silicon | 18:04 |
litghost | hackerfoo: It is modelling a fictous similiar piece of hardware | 18:05 |
litghost | hackerfoo: You have to understand, VTR was never design to operate on real hardware | 18:05 |
litghost | hackerfoo: It is a research tool for hypothetical FPGA's | 18:05 |
hackerfoo | That's not what it says: https://docs.verilogtorouting.org/en/latest/tutorials/arch/xilinx_virtex_6_like/ | 18:05 |
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: | 18:06 |
litghost | hackerfoo: And what does the title say: "Virtex 6 like" | 18:07 |
litghost | hackerfoo: Their model does not accurately represent the ADI1MUX behavior | 18:07 |
litghost | hackerfoo: And it should be obvious that is the case! | 18:07 |
litghost | hackerfoo: Their description of the SLICEM can output something the hardware cannot model, therefore it is wrong, period | 18:08 |
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 | 18:09 |
hackerfoo | Anyway, I could fix it if it weren't for this: | 18:09 |
* 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 > | 18:09 | |
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 | 18:10 |
hackerfoo | I want to avoid introducing another stub. | 18:13 |
litghost | hackerfoo: I'm not sure why you think a stub is required? Maybe I don't understand what you mean by a stub | 18:13 |
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? | 18:13 |
litghost | mithro: In a word, yes | 18:14 |
litghost | mithro: But why not just latch this off of the testarch? | 18:14 |
litghost | mithro: Testarch already has those setup | 18:14 |
litghost | mithro: And it feels like testarch is the natural place to put this stuff | 18:14 |
mithro | litghost: I'm just trying to run model.xml / pb_type.xml generated from v2x through vpr to check that it is valid | 18:15 |
hackerfoo | I'm guessing there's no way to tie muxes together? | 18:15 |
litghost | hackerfoo: You can cascade a mux through an intermediate type | 18:16 |
litghost | hackerfoo: Linking mux choices is not supported, except through modes | 18:16 |
litghost | hackerfoo: And VPR cannot switch modes based soley on routing discessions | 18:16 |
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 | 18:17 |
litghost | mithro: Then you'd need to make an arch, etc, if you want to use the existing stuff | 18:17 |
litghost | mithro: You could always write your own add_custom_target and invoke VPR directly | 18:17 |
litghost | mithro: If you already have an arch.xml, an eblif, and don't need a custom rrgraph | 18:18 |
litghost | mithro: But that flow is very different than a architecture pack/place/route | 18:18 |
litghost | mithro: Also, for wire.eblif to work, you need a route through lut | 18:20 |
litghost | mithro: With only 1 tile, I assume not all of them will have a ".names" subckt | 18:21 |
mithro | I have an eblif already | 18:21 |
litghost | mithro: Sure | 18:21 |
litghost | mithro: If you want to invoke VPR directly, you'll need to write that yourself | 18:21 |
mithro | okay, I think I'll do that | 18:23 |
* 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 > | 18:23 | |
litghost | hackerfoo: The middle mux isn't legal and the bottom mux is wrong if the mux selector isn't the same | 18:26 |
litghost | hackerfoo: The top mux should be able to be modelled, so I don't know what the problem is | 18:27 |
hackerfoo | Yes, I know, hence the question about linking muxes. | 18:27 |
hackerfoo | With real muxes, you'd just tie the selection lines together. | 18:27 |
litghost | hackerfoo: VPR doesn't support that idea | 18:28 |
hackerfoo | Don't we work on VPR, though? Does it support any form of constraints other than modes? | 18:28 |
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. | 18:30 |
litghost | hackerfoo: As I stated earlier, you are more than welcome to start on a PR for linked muxes or muxes of bus's | 18:30 |
hackerfoo | Then I can add what I need to VPR later. | 18:30 |
hackerfoo | litghost: Okay. Thanks. | 18:31 |
litghost | hackerfoo: I believe what was there before could never get into trouble because the techmap output a configuration that was always valid | 18:32 |
litghost | hackerfoo: It consumed the BI1 pin when it didn't need too, but wasn't invalid on hardware | 18:32 |
litghost | hackerfoo: I'm ignoring the RAM32 of course | 18:32 |
*** Bertl is now known as Bertl_oO | 18:42 | |
*** acomodi has quit IRC | 18:58 | |
*** lopsided98 has quit IRC | 19:00 | |
*** lopsided98 has joined #symbiflow | 19:02 | |
*** hzeller has joined #symbiflow | 19:59 | |
*** kraiskil has quit IRC | 20:00 | |
litghost | hackerfoo: kem_ is active on #vtr-dev if you want to poke him about the mux stuff | 20:44 |
hackerfoo | Okay. I didn't want to bother -dev with a user question, but #vtr is pretty quiet. | 20:45 |
hackerfoo | There's no ADIMUX.BDI1 fasm feature? It's not listed in the documentation. | 21:11 |
litghost | hackerfoo: There is not. The absence of ADI1MUX.ADI1 is either BDI1 or MC31 | 21:18 |
litghost | hackerfoo: Presumably MC31 is controlled via the SRL bit | 21:18 |
litghost | hackerfoo: But we don't have evidence of that at this minute | 21:18 |
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. | 21:20 |
litghost | hackerfoo: That doesn't follow? | 21:24 |
litghost | ADI1 can be either AX, BX, or DX, yes? | 21:24 |
litghost | ADI1 can only come BX if BDI1 = BX | 21:24 |
litghost | and ADI1 can only become DX if BDI1 = DX | 21:24 |
litghost | Am I missing something? | 21:24 |
hackerfoo | No, ADIMUX selects AI, BDI1, and BMC31. | 21:25 |
hackerfoo | So this is also probably why RAM128X1D doesn't (didn't?) work. | 21:26 |
hackerfoo | Until we figure that bit out, RAM128X1D and RAM256X1S will have to use AI. | 21:27 |
litghost | hackerfoo: I wasn't talking about ADIMUX, I was talking about the effective ADI1 connection, which can be either AX, BX or DX | 21:28 |
litghost | hackerfoo: s/X/I/ | 21:29 |
hackerfoo | Oh, okay. I get it. Currently, ADI1MUX.AI = 0 ==> BDI1? | 21:29 |
litghost | ADI1 can be AI, BI or DI | 21:29 |
litghost | hackerfoo: Yes, ADI1MUX.AI = 0 ==> BDI1 | 21:29 |
hackerfoo | Right. | 21:29 |
litghost | hackerfoo: BDI1 can be either BI or DI based on the state of BDI1MUX | 21:30 |
hackerfoo | I see. I forgot that the default isn't DI for ADI1MUX, like the others, so the default is BDI1. | 21:31 |
hackerfoo | It would be nice if the other inputs were defined to make it easier to read, and to detect conflicts. | 21:33 |
litghost | Other formatS? | 21:33 |
hackerfoo | So that if VPR emits fasm that switches a mux multiple ways, it would get caught instead of just picking the non-default. | 21:35 |
hackerfoo | There seems to be a lot of silent failure in our toolchain. | 21:36 |
hackerfoo | I got all the shifter tests working again. | 21:38 |
litghost | hackerfoo: This particular case could be addressed in several ways. It is illegal to write FASM like: | 21:38 |
litghost | FEATURE_A = 1 | 21:38 |
litghost | FEATURE_A = 0 | 21:38 |
litghost | And it is illegal to write: | 21:38 |
litghost | FEATURE_A = 1 | 21:38 |
litghost | FEATURE_B = 1 | 21:38 |
litghost | Where those features result in conflicting bits | 21:38 |
litghost | In pretty much all cases, we can write the mux statement to generate that sort of conflict | 21:39 |
hackerfoo | Ah. That's probably why elms was suggesting `:`, so it would be `<input> : <feature> = <value>`. | 21:39 |
litghost | hackerfoo: not really, the code in VPR to handle : is the same as = | 21:40 |
litghost | hackerfoo: "<feature> = 1" and "<feature>" are the same statement | 21:40 |
hackerfoo | Oh. Can't we define a feature for each input? So e.g. CDI1MUX.DI is defined to set the bit to 0? | 21:41 |
litghost | hackerfoo: It's probably better to fix the fuzzer to emit a "zero feature" | 21:42 |
litghost | hackerfoo: Which defines "all bits cleared" | 21:42 |
litghost | hackerfoo: Example: https://github.com/SymbiFlow/prjxray-db/blob/master/artix7/segbits_bram_l.db#L3 | 21:42 |
tpb | Title: prjxray-db/segbits_bram_l.db at master · SymbiFlow/prjxray-db · GitHub (at github.com) | 21:42 |
litghost | hackerfoo: And then the mux will assert those bits are cleared | 21:42 |
litghost | hackerfoo: It also will then show up in bit2fasm output | 21:43 |
litghost | hackerfoo: FEATURE = 0 will disappear in a round trip FASM -> bit -> FASM | 21:43 |
litghost | hackerfoo: Zero features will appear | 21:43 |
litghost | hackerfoo: Zero features added to the fuzzers until after the xDI fuzzer was written | 21:43 |
hackerfoo | At least for muxes, that would be nice, so the FASM is easier to read. | 21:44 |
litghost | hackerfoo: Agreed. The current metadata was written for an MVP, which we do in fact have | 21:44 |
hackerfoo | Sure. If I create an issue, should it be in prjxray? | 21:45 |
litghost | Yes, because we need the segbit database to be updated first | 21:46 |
litghost | xDI fuzzer is https://github.com/SymbiFlow/prjxray/blob/master/fuzzers/019-clb-ndi1mux/generate.py | 21:46 |
tpb | Title: prjxray/generate.py at master · SymbiFlow/prjxray · GitHub (at github.com) | 21:46 |
litghost | https://github.com/SymbiFlow/prjxray/issues/347 is also relevant | 21:46 |
hackerfoo | Thanks | 21:46 |
tpb | Title: dbfixup: automatically create .dbf files · Issue #347 · SymbiFlow/prjxray · GitHub (at github.com) | 21:46 |
litghost | As .dbf files are how zero features are defined | 21:46 |
litghost | Example DBF file to go with the link I sent: https://github.com/SymbiFlow/prjxray/blob/master/fuzzers/060-bram-cascades/bits.dbf | 21:47 |
tpb | Title: prjxray/bits.dbf at master · SymbiFlow/prjxray · GitHub (at github.com) | 21:47 |
hackerfoo | Now I need to fix 2xRAM128X1S not getting packed together. | 21:55 |
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 | 21:55 |
hackerfoo | When running "make dram_2_128x1s_assert_usage", both CLBLM_R and L are used. | 21:57 |
hackerfoo | AssertionError: Expect usage of block CLBLM_L = 0, found 1 | 21:57 |
litghost | hackerfoo: Before you debug too far, make sure that Vivado packs them correctly | 21:57 |
hackerfoo | Okay, I'll check. | 21:57 |
litghost | hackerfoo: Correctly is the wrong term, but as we are asserting | 21:57 |
hackerfoo | I should check master, too. | 21:58 |
litghost | hackerfoo: Yep | 21:58 |
hackerfoo | It works on master. Is there a list of the Kokoro tests somewhere? | 22:00 |
litghost | hackerfoo: "make all_xc7" | 22:01 |
litghost | hackerfoo: Not really | 22:01 |
hackerfoo | Thanks | 22:01 |
litghost | hackerfoo: Right now most of our tests are just targets | 22:01 |
litghost | hackerfoo: Kokoro runs "make all_xc7" | 22:02 |
litghost | hackerfoo: I recommend a "-j" of roughly CPU/4 and RAM/10 GB | 22:02 |
litghost | Maybe RAM/5 GB | 22:02 |
litghost | hackerfoo: I run "-j16" and it doesn't chew all my ram | 22:03 |
hackerfoo | I'll do that after I fix 128x1s | 22:05 |
litghost | hackerfoo: Oh and kokoro is just running whatever is in https://github.com/SymbiFlow/symbiflow-arch-defs/blob/master/.github/kokoro/xc7.sh | 22:05 |
tpb | Title: symbiflow-arch-defs/xc7.sh at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 22:05 |
hackerfoo | I updated my PR if you want to look at the changes. | 22:06 |
litghost | hackerfoo: To notify you want a re-review, just request a new review | 22:06 |
litghost | hackerfoo: It's the little recycle icon next to me name | 22:07 |
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. | 22:08 |
litghost | hackerfoo: Ah, ok | 22:08 |
litghost | hackerfoo: Probably need a huge "this may emit invalid configurations!!!!" warning | 22:10 |
litghost | hackerfoo: For giggles, you can manually add the zero DB entries to prjxray-db and use those | 22:10 |
litghost | https://github.com/SymbiFlow/prjxray-db/blob/master/artix7/segbits_clblm_l.db#L352 | 22:11 |
tpb | Title: prjxray-db/segbits_clblm_l.db at master · SymbiFlow/prjxray-db · GitHub (at github.com) | 22:11 |
litghost | So | 22:12 |
litghost | CLBLM_L.SLICEM_X0.ALUT.DI1MUX.AI 00_00 | 22:12 |
litghost | CLBLM_L.SLICEM_X0.BLUT.DI1MUX.BI 00_20 | 22:12 |
litghost | Becomes | 22:12 |
litghost | CLBLM_L.SLICEM_X0.ALUT.DI1MUX.AI 00_00 | 22:12 |
litghost | CLBLM_L.SLICEM_X0.ALUT.DI1MUX.DI !00_00 !00_20 | 22:12 |
litghost | CLBLM_L.SLICEM_X0.ALUT.DI1MUX.BI !00_00 00_20 | 22:12 |
litghost | CLBLM_L.SLICEM_X0.BLUT.DI1MUX.BI 00_20 | 22:12 |
litghost | CLBLM_L.SLICEM_X0.BLUT.DI1MUX.DI !00_20 | 22:12 |
litghost | This won't prevent VPR from outputing an invalid configuration, but would allow fasm2frames to generate it error when it happens | 22:13 |
litghost | Another probably better configuration would be : | 22:15 |
litghost | CLBLM_L.SLICEM_X0.ALUT.DI1MUX.AI 00_00 | 22:15 |
litghost | CLBLM_L.SLICEM_X0.ALUT.DI1MUX.BDI1 !00_00 | 22:15 |
litghost | CLBLM_L.SLICEM_X0.BLUT.DI1MUX.BI 00_20 | 22:15 |
litghost | CLBLM_L.SLICEM_X0.BLUT.DI1MUX.DI !00_20 | 22:15 |
litghost | And have the fasm_mux line have two features | 22:15 |
hackerfoo | Yeah. I wouldn't want to control both muxes with one feature. VPR would just set both features. | 22:18 |
hackerfoo | That's what I wrote at first. | 22:19 |
litghost | Did it work, except for the fact that ALUT.DI1MUX.BDI1 isn't defined? | 22:20 |
litghost | e.g. did VPR output the right feature? | 22:20 |
hackerfoo | I didn't hit any of the multiple feature inputs, if that's what you're asking about. I should try that. | 22:22 |
litghost | hackerfoo: I'd recommend adding routing tests for them | 22:23 |
litghost | hackerfoo: E.g. a case in https://github.com/SymbiFlow/symbiflow-arch-defs/tree/master/xc7/tests/dram | 22:24 |
tpb | Title: symbiflow-arch-defs/xc7/tests/dram at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 22:24 |
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 | 22:24 |
tpb | Title: symbiflow-arch-defs/xc7/tests/dram at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 22:24 |
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 | 22:25 |
hackerfoo | Why? Internally all the dual port and >64 modes use shared DI. | 22:26 |
hackerfoo | I'm interested in how RAM1X32S works when using O5. | 22:28 |
hackerfoo | It would have to connect CX/DX externally, I think. | 22:28 |
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 | 22:30 |
tpb | Title: symbiflow-arch-defs/xc7/tests/dram at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 22:30 |
hackerfoo | litghost: No, not the dual port or >64 bit ones, because they are composed of multiple DPRAM32/64s sharing inputs. | 22:31 |
litghost | https://github.com/SymbiFlow/symbiflow-arch-defs/blob/master/xc7/tests/dram/dram_2_64x1d.v#L24 is in[13] and https://github.com/SymbiFlow/symbiflow-arch-defs/blob/master/xc7/tests/dram/dram_2_64x1d.v#L46 is in[12] | 22:32 |
tpb | Title: symbiflow-arch-defs/dram_2_64x1d.v at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 22:32 |
litghost | So for it work correctly, the second RAM64X1D needs to use BI rather than DI (or be packed into a second SLICEM) | 22:33 |
hackerfoo | https://github.com/SymbiFlow/symbiflow-arch-defs/blob/master/xc7/techmap/cells_map.v#L645-L683 | 22:33 |
tpb | Title: symbiflow-arch-defs/cells_map.v at master · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 22:33 |
litghost | I'm talking about the level above that | 22:33 |
litghost | e.g. two instances of RAM64X1D can either share or have different D lines | 22:34 |
litghost | If the D lines are common, then all of the xDI1MUX's should use the DI site pin | 22:34 |
hackerfoo | If they work independently, they should work shared. Primitives should be independent. | 22:34 |
litghost | Not true | 22:34 |
litghost | Have vivado pack two RAM64X1D's with common D lines, but different INIT's | 22:35 |
litghost | The DI line will be the only site pin, BI will not be used | 22:35 |
litghost | For clarify, when I say DI, I mean the SLICEM.DI site pin | 22:35 |
hackerfoo | I see. You want to make sure VPR takes advantage of the internal muxes even across primitives. | 22:36 |
litghost | Yes | 22:36 |
litghost | It actually causes some errors in fasm2v if we don't | 22:36 |
litghost | because Vivado will take advatange, even if VPR didn't | 22:36 |
*** proteusguy has quit IRC | 22:36 | |
litghost | And I don't think we can control it | 22:36 |
mithro | litghost: I have some comments around the implicit dff stuff, will try and comment a bit later tonigh | 22:40 |
litghost | mithro: k | 22:41 |
litghost | mithro: I'm interested how you are planning to solve things like FASM tagging implicitly. I'm not sure you can | 22:41 |
hackerfoo | Apparently, if you list FASM features separated by spaces, they just get concatenated. | 23:00 |
litghost | hackerfoo: We generally eat whitespace | 23:01 |
litghost | hackerfoo: In this case, it prevented a natural extension | 23:01 |
mithro | How do you do the equivalent of "basename" in cmake? | 23:01 |
litghost | get_filename_component | 23:01 |
litghost | hackerfoo: I would be open to <pin> : <feature>, <feature> | 23:02 |
litghost | which would allow for <pin>:<feature>=2,<feature> ,etc | 23:02 |
litghost | hackerfoo: And wouldn't require a large extension to the VPR FASM parser (which is brick stupid) | 23:02 |
mithro | litghost: What about "basename xyz.xml .xml" ? (IE strip extensions?) | 23:03 |
litghost | mithro: Same, still get_filename_component | 23:03 |
litghost | mithro: It's overloaded | 23:03 |
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. | 23:05 |
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 | 23:06 |
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. | 23:07 |
hackerfoo | "X = Y\n X = Z\n" doesn't work either. No error, though. | 23:09 |
litghost | hackerfoo: Not sure what you mean? Anything in the metadata tags is our code, so don't blame VPR for that | 23:09 |
hackerfoo | Where's the parser? | 23:09 |
litghost | https://github.com/SymbiFlow/vtr-verilog-to-routing/blob/master%2Bwip/utils/fasm/src/fasm.cpp | 23:10 |
tpb | Title: vtr-verilog-to-routing/fasm.cpp at master+wip · SymbiFlow/vtr-verilog-to-routing · GitHub (at github.com) | 23:10 |
litghost | hackerfoo: genfasm is seperate from the rest of VPR, but we need their internal data structures for now | 23:11 |
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 | 23:11 |
hackerfoo | Wow, that really is a simple parser. It just splits on = and :, and expects two items. | 23:14 |
hackerfoo | Oh well, I don't need that now. | 23:14 |
litghost | hackerfoo: I did say it was dumb as bricks | 23:15 |
hackerfoo | The surprising part is that it eats spaces. I figured if it didn't fail, it would work. | 23:16 |
litghost | hackerfoo: The eating of spaces is intentional, but it probably shouldn't eat interior spaces | 23:17 |
hackerfoo | The same thing for repeated inputs, where it only uses the first one. | 23:18 |
litghost | hackerfoo: But it is important to do something like python's "str.strip()" to avoid leading and trailing white space | 23:18 |
hackerfoo | Something like http://re2c.org or a hand-rolled tokenizer would take care of that. | 23:19 |
tpb | Title: re2c re2c 1.1.1 documentation (at re2c.org) | 23:19 |
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 | 23:20 |
litghost | live* | 23:20 |
hackerfoo | It doesn't have to be that complicated: https://github.com/HackerFoo/poprc/blob/master/tok.c | 23:20 |
tpb | Title: poprc/tok.c at master · HackerFoo/poprc · GitHub (at github.com) | 23:20 |
*** Bertl_oO is now known as Bertl_zZ | 23:20 | |
hackerfoo | But, yeah, not now. | 23:21 |
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. | 23:23 |
hackerfoo | But it's probably overkill for this. | 23:23 |
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 | 23:24 |
litghost | hackerfoo: For example, there should be a fasm_mux for each input to the mux | 23:24 |
litghost | hackerfoo: And no entries for non-existent inputs | 23:24 |
litghost | hackerfoo: etc etc | 23:24 |
hackerfoo | From looking at output_fasm_mux, I bet it doesn't handle FOO[0].BAR[1] | 23:28 |
litghost | It does I believe | 23:29 |
litghost | Lemme go look around | 23:29 |
litghost | https://github.com/SymbiFlow/symbiflow-arch-defs/blob/6d5640672f41eb2d048f65b97b2d7d028b1e1d03/ice40/devices/top-routing-virt/tiles/pio/pio.pb_type.xml#L46 | 23:29 |
tpb | Title: symbiflow-arch-defs/pio.pb_type.xml at 6d5640672f41eb2d048f65b97b2d7d028b1e1d03 · SymbiFlow/symbiflow-arch-defs · GitHub (at github.com) | 23:30 |
litghost | That's what "parse_name_with_optional_index" handles | 23:30 |
hackerfoo | I meant two levels of indexing, since there's only one index for each side in the code. | 23:30 |
litghost | hackerfoo: Ya, it would explode | 23:32 |
*** space_zealot has joined #symbiflow | 23:32 | |
litghost | hackerfoo: But not fail silently | 23:32 |
litghost | Ah, I remember | 23:33 |
litghost | It splits the two VPR parts | 23:33 |
litghost | So it is parsing FOO[0] into "FOO" and 0 | 23:33 |
litghost | So it does work | 23:34 |
litghost | I remember needing support for that, so I remember testing it | 23:34 |
hackerfoo | Where does the 0 go? Assuming it reads 1 as the index in "FOO[0].BAR[1]". | 23:36 |
litghost | mux_pb_index and mux_pin_index | 23:37 |
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. | 23:38 |
litghost | You aren't reading the code | 23:40 |
litghost | It splits on "=:" first | 23:40 |
litghost | So part[0] is "FOO[0].BAR[1] " and part[1] is "BAZ" | 23:40 |
litghost | Then it is split FOO[0] / BAR[1] | 23:40 |
litghost | Then parsed into (FOO, 0), (BAR 1) | 23:41 |
litghost | That part is fine | 23:41 |
litghost | The handling of the right hand side of the parse is less than ideal if we intended to support multiple FASM features | 23:41 |
litghost | left hand side is actually okay | 23:41 |
hackerfoo | Ah, I see. vtr_parts != mux_parts. My mistake. | 23:42 |
litghost | Ya | 23:43 |
Generated by irclog2html.py 2.13.1 by Marius Gedminas - find it at mg.pov.lt!