Thursday, 2019-07-18

*** tpb has joined #litex00:00
*** carlatwin has joined #litex00:48
carlatwin(LX P=arty C=mor1kx) [email protected]:~/lhub/litex-buildenv$ uname -a00:48
carlatwinLinux DESKTOP-KOJ4LVF 4.4.0-17763-Microsoft #379-Microsoft Wed Mar 06 19:16:00 PST 2019 x86_64 GNU/Linux00:48
*** carlatwin has quit IRC01:24
*** rohitksingh_work has joined #litex04:45
xobsWhat's the best way to mux io pins in litex?  I'm looking to interleve a hardware SPI block with `spi_flash`, and it seems like that's almost doable.05:52
xobsThe problem being that the SPI pins are bidirectional.  In SpiFlashDualQuad they use a TSTriple.  Is there something that exists that fakes that to let me mux it?05:53
keesjI don't understand the faking part.06:57
xobsI guess what I'm looking to do is hand SpiFlash a "Pad-ish" object that it could pass to TSTriple, but that I could disconnect and hand over to a different block instead.06:58
xobsIn a CPU, you can usually mux one pin between behaviors and the blocks themselves don't care about what's going on in the outside world.06:59
keesjI think... I am currently also working on something with bidirectinal pins and I copied code from litedram 's code base07:00
keesjthis uses the special block. I think you are looking for an abtraction of a bidirectional pin07:00
xobsYeah, one option is to redo it so that it accepts an "in", "out" and "oe" pins instead of a "Pad".07:01
xobsI'm wondering if such a thing exists already.07:02
keesjI am seraching .. I had something like that yesterday07:03
xobsThough, maybe it makes sense to change the SpiFlash() constructor to accept a Module that could be overriden for fancier bitbanging.07:03
keesjby itself this is already supported in verilog (setting the port to high impedence) ( indeed uses TSTriple)07:10
tpbTitle: litex/ at master · enjoy-digital/litex · GitHub (at
keesjis Tristate note enough?07:10
tpbTitle: migen/ at master · m-labs/migen · GitHub (at
keesjI am used to grepping code but for language type constructs I think a good reference manual would certainly help07:11
*** CarlFK has joined #litex07:23
_florent_xobs: there is no pre-existing module to do that07:40
_florent_but if you define pads like this: pads = Record([("clk", 1), ("cs_n", 1), ("dq_o", 4), ("dq_i", 4), ("dq_oe", 1)])07:41
_florent_and then in SPIFlash, so something like this:07:41
tpbTitle: Snippet | IRCCloud (at
_florent_sorry, like this:07:42
tpbTitle: Snippet | IRCCloud (at
_florent_then you will be able to put the TSTriple outside07:42
xobs_florent_: that looks like an interesting (and clever) approach, thanks!07:43
_florent_but the actual SPIFlash is indeed not easy to modify, i'd like we make it more generic and easy to modify07:43
_florent_your idea about having a specific module for the bitbang logic and pass it as a parameter was also interesting and could ease readibility07:48
_florent_in fact maybe we should remove the bitbang logic from SpiFlashDualQuad/SpiFlashSingle07:48
_florent_create SpiFlashDualQuadBitbang/SpiFlashSingleBitbang modules07:49
xobsThat's what I'm thinking.  Or something similar.07:49
xobsRight now I'm looking into what it would take to use the SB_SPI block.07:50
xobsIt has an initialization process, where 5 registers must be configured at boot.  Is there anything like that in litex?07:50
_florent_and just create a mux with the modified pads record in SpiFlash when bitbang is needed07:50
xobsSomething where, at reset, it steps through address/data pairs and writes them to registers, and continues when an "ACK" line is asserted.07:51
_florent_no sorry, i haven't used SB_SPI yet and not aware others project using it (with litex)07:51
xobsOkay, I'll just use a FSM to load the registers.  Thanks!07:52
xobs_florent_: do you have an example of indexing an array in the synthesized output? I have an array "init_dat = [0, 1, 0x80, 0x80, 12, 0xff]" and I'd like to access it from the design, but of course you can't index Python arrays with Signals.08:39
xobsI could create a Memory or similar, and manually manage it, but I feel like this must have a ready-made solution.08:39
*** CarlFK has quit IRC10:18
_florent_xobs: sorry was away10:21
_florent_you can use Migen's Arrays10:21
tpbTitle: migen/ at master · m-labs/migen · GitHub (at
_florent_something like this: init_dat = Array(Signal(8, reset=dat) for dat in [0, 1, 0x80, 0x80, 12, 0xff]))10:23
xobsflorent: thanks! That looks like just what I need.11:55
xobsRight now it's much less elegant. For example:
tpbTitle: valentyusb/ at master · im-tomu/valentyusb · GitHub (at
*** Finde has quit IRC13:00
*** Finde has joined #litex13:03
*** rohitksingh_work has quit IRC14:06
*** rohitksingh has joined #litex14:39
*** rohitksingh has quit IRC15:53
*** CarlFK has joined #litex16:11
*** rohitksingh has joined #litex16:52
*** daveshah has quit IRC17:55
*** daveshah has joined #litex17:57
*** rohitksingh has quit IRC18:01
*** ambro718 has joined #litex19:08
*** CarlFK has quit IRC20:27
tpbTitle: OpenPitons JuxtaPiton Processor to get Open-Source i486 Core - AB Open (at
*** CarlFK has joined #litex21:40
*** ambro718 has quit IRC22:39

Generated by 2.13.1 by Marius Gedminas - find it at!