_florent_ changed the topic of #litex to: LiteX FPGA SoC builder and Cores / Github : https://github.com/enjoy-digital, https://github.com/litex-hub / Logs: https://libera.irclog.whitequark.org/litex
tpb has quit [Remote host closed the connection]
tpb has joined #litex
cr1901_ is now known as cr1901
<AndrewD> anyone had success using JTAG debug of vexriscv-smp on ecp5 with openocd_vex?
<AndrewD> Info : JTAG tap: ecp5.tap tap/device found: 0x81112043 (mfg: 0x021 (Lattice Semi.), part: 0x1112, ver: 0x8)
<AndrewD> Info : JTAG tap: vexrisc_ocd.bridge tap/device found: 0xffffffff (mfg: 0x7ff (<invalid>), part: 0xffff, ver: 0xf)
<AndrewD> Warn : JTAG tap: vexrisc_ocd.bridge UNEXPECTED: 0xffffffff (mfg: 0x7ff (<invalid>), part: 0xffff, ver: 0xf)
<AndrewD> Error: JTAG tap: vexrisc_ocd.bridge expected 1 of 1: 0x10001fff (mfg: 0x7ff (<invalid>), part: 0x0001, ver: 0x1)
<AndrewD> I've tried both of these:
<AndrewD> if self.cpu_type in ["vexriscv_smp"]:
<AndrewD> if False:
<AndrewD> self.submodules.jtag = jtag = ECP5JTAG()
<AndrewD> self.comb += self.cpu.jtag_clk.eq(self.jtag.tck)
<AndrewD> self.comb += self.cpu.jtag_enable.eq(1)
<AndrewD> self.comb += self.cpu.jtag_capture.eq(self.jtag.capture)
<AndrewD> self.comb += self.cpu.jtag_shift.eq(self.jtag.shift)
<AndrewD> self.comb += self.cpu.jtag_update.eq(self.jtag.update)
<AndrewD> self.comb += self.cpu.jtag_reset.eq(self.jtag.reset)
<AndrewD> self.comb += self.cpu.jtag_tdi.eq(self.jtag.tdi)
<AndrewD> self.comb += self.jtag.tdo.eq(self.cpu.jtag_tdo)
<AndrewD> # JTAG clock domain ------------------------------------------------------------------------
<AndrewD> self.clock_domains.cd_jtag = ClockDomain()
<AndrewD> self.comb += ClockSignal("jtag").eq(jtag.tck)
<AndrewD> self.specials += AsyncResetSynchronizer(self.cd_jtag, ResetSignal("jtag"))
<AndrewD> else:
<AndrewD> self.specials += Instance("JTAGG",
<AndrewD> o_JRSTN = self.cpu.jtag_reset,
<AndrewD> o_JSHIFT = self.cpu.jtag_shift,
<AndrewD> o_JUPDATE = self.cpu.jtag_update,
<AndrewD> o_JTCK = self.cpu.jtag_clk,
<AndrewD> o_JTDI = self.cpu.jtag_tdi,
<AndrewD> o_JCE1 = self.cpu.jtag_capture,
<AndrewD> i_JTDO1 = self.cpu.jtag_tdo,
<AndrewD> )
cr1901 has quit [Quit: Leaving]
Degi_ has joined #litex
Degi has quit [Ping timeout: 250 seconds]
Degi_ is now known as Degi
nelgau has quit [Remote host closed the connection]
nelgau has joined #litex
nelgau has quit [Ping timeout: 256 seconds]
nelgau has joined #litex
nelgau has quit [Ping timeout: 256 seconds]
nelgau has joined #litex
nelgau has quit [Ping timeout: 256 seconds]
cr1901 has joined #litex
nelgau has joined #litex
nelgau has quit [Ping timeout: 250 seconds]
nelgau has joined #litex
nelgau has quit [Ping timeout: 252 seconds]
<tnt> AndrewD: use pastebin please ...
<AndrewD> tnt: OK - will do in the future. Or should I repeat the above with pastebin?
<AndrewD> The ECP5 JTAG issue is porbably related to capture being derived from JCE1 and requiring a custom command (IR==0x32)?
FabM has joined #litex
FabM has joined #litex
FabM has quit [Changing host]
lexano has quit [Ping timeout: 256 seconds]
lexano has joined #litex
lexano has quit [Ping timeout: 252 seconds]
lexano has joined #litex
lexano has quit [Ping timeout: 260 seconds]
<tnt> _florent_: ping ? Any clue on the ILAS issue ? I mean if you're using it with 20b data path, I must be missing somewhere.
lexano has joined #litex
cr1901 has quit [Remote host closed the connection]
cr1901 has joined #litex
essele has joined #litex
essele_ has quit [Read error: Connection reset by peer]
<tnt> I switches to a 40b phy data width and running the JESD domain at line_rate / 40 instead of / 20 and so now it gets 32b at a time and the ILAS check does pass and link gets established. Still no idea how it's supposed to work with 20.
<tnt> Looking at the source.converterN data streams (after having put the ADI chip in test 'RAMP' mode), I see the ramp correctly on converter0 but converter[1..3] seem to be garbage.
<tnt> Disabling scrambling "fixes" it, so I guess the scrambler has an issue.
<tnt> mmmmh, nm, it might have been pebkak and I might have screwed up the order of the init in that previous test.
nelgau has joined #litex
nelgau has quit [Ping timeout: 256 seconds]
nelgau has joined #litex
nelgau has quit [Ping timeout: 256 seconds]
nelgau has joined #litex
nelgau has quit [Ping timeout: 250 seconds]
lexano has quit [Ping timeout: 250 seconds]
<_florent_> tnt: Sorry, I was on something else, 20b is what I'm using on 7-Series Artix7/KinteX7. I'm not sure I already tested JESD RX with on Ultrascale, so that's possible Comma alignement was not configured correctly.
<_florent_> tnt: If you have issue with the ILAS check, you could disable to check or reset to at least be able to observe the full ILAS sequence with LiteScope
<_florent_> for the 40b/20b issue, it could be an issue in the clocking
<tnt> yeah, looking at your code, the jesd domain is set to linerate / 40
<tnt> I thought the jesd domain had to be linerate / phy_width basically.
<tnt> (so I had it set to linerate / 20 when phy_width was 20 and now I have it set to linerate / 40 with phy_width set to 40. I didn't try linerate / 40 with phy_width=20).
<_florent_> tnt: I should have mention this, but the core is always working on 32-bit and and inserting adapters when phy is configured to 16-bit (20-bit + 8b10b)
<tnt> yeah, that's what I saw in the code and why I was confused.
<tnt> I didn't realize that implied that the jesd rate was always linerate / 40, independent of the phy_width.
<tnt> (to get 32b per cycle and not 32b every 2 cycles since there is no 'valid/ready').
<tnt> But good to confirm that this is normal operation. And so in the end the phy_width doesn't really matter ... that just changes the phy clock frequency but this gets down to linerate / 40 anyway.
<_florent_> tnt: Once you'll have this working, I'll try to do a pass to document the points that were not clear. The hardware that I used to developed the core is also not open-source, so don't have a good example I can share. If your project end up being open-source, future users could also use it as reference.
<tnt> I don't think it'll be open-source. I want to put the board file and a basic target upstream, but that wouln't include the JESD, that takes a shit-ton of init code to setup the whole clock tree and the whole ADI chip bringup.
<tnt> However starting from your example relly the main obstacles were (1) GTHE4 support and ultrascale comma alignement in general (which hopefully will be upstreamed) and (2) the clocking, the example you had has switchable clocks, I simpified that to just use a simple buffer, no mmcm, no mux. (3) that confusion with jesd domain and it needing to be inerate/40. and (4) knowing that you need to set all the enables bit for phy/rx/tx cores and that needs to be done _after
lexano has joined #litex
FabM has quit [Ping timeout: 252 seconds]
essele has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
essele has joined #litex
<tnt> Am I correct that if I have a Module createing ClockDomain('blah') and some of its submodule refering to it ( using ClockSignal('blah') or ClockDomainsRenamer('blah') or self.sync.blah += xxx ), they will indeed all be the same domain ? And that if my top module instanciates 2 of those Modules, it will create two distinct clock domains but each of the subsubmodule will be correcty using the one of its parent ?
<tnt> (not sure if I'm making myself super clear here ...)
Martoni42 has joined #litex
essele has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
Martoni42 has quit [Ping timeout: 252 seconds]
<zyp> I believe that is the case
<SpaceCoaster> My snickerdoodle platform code doesn’t pass CI because it doesn’t have a clock pin. The only clock is a ps7 derived internal clock.
<cr1901> tnt: I wrote this a while ago, and it doesn't mention ClockDomainsRenamer, but it should still be correct: https://gist.github.com/cr1901/5de5b276fca539b66fe7f4493a5bfe7d
<cr1901> tnt: The bad news is... if that gist does NOT help you... I've not been doing so hot this week, so me correcting the gist to help you will have to wait :(
<_florent_> tnt: That's correct yes
<cr1901> _florent_: If I were to buy e.g. a litefury, could you recommend something (M2 to PCIe adapter) that would let me put it into a PCIe slot on a desktop motherboard?
<zyp> any pcie to m-key m.2 adapter should work
<zyp> and most of them will be m-key since that's what nvme ssds use