Thursday, 2022-05-12

*** tpb <[email protected]> has joined #f4pga00:00
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has joined #f4pga00:02
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has quit IRC (Ping timeout: 240 seconds)00:11
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has joined #f4pga00:14
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has quit IRC (Ping timeout: 240 seconds)00:21
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has joined #f4pga00:24
*** xiretza[m] <xiretza[m]!~xiretzaxi@2001:470:69fc:105::9b1> has quit IRC (Ping timeout: 240 seconds)00:38
*** diadatp <diadatp!~diadatp@2001:470:69fc:105::c603> has quit IRC (Ping timeout: 260 seconds)00:39
*** lopsided98 <[email protected]> has quit IRC (Ping timeout: 256 seconds)00:47
*** xiretza[m] <xiretza[m]!~xiretzaxi@2001:470:69fc:105::9b1> has joined #f4pga01:09
*** lopsided98 <lopsided98!~quassel@2601:18c:8380:79f0:ba27:ebff:fe5e:6b6e> has joined #f4pga01:10
*** lopsided98 <lopsided98!~quassel@2601:18c:8380:79f0:ba27:ebff:fe5e:6b6e> has quit IRC (Client Quit)01:15
*** lopsided98 <[email protected]> has joined #f4pga01:16
*** diadatp <diadatp!~diadatp@2001:470:69fc:105::c603> has joined #f4pga01:19
*** cr1901 <cr1901!~cr1901@2601:8d:8600:911:547b:5317:6105:b877> has quit IRC (Ping timeout: 240 seconds)07:21
*** cr1901 <cr1901!~cr1901@2601:8d:8600:911:d2:685c:f1e:7edb> has joined #f4pga07:21
lkcljosuah, ok, the way it works is that to compile something to a bitstream you need two things:08:48
lkcl1) some HDL08:48
lkcl2) a constraints file08:48
lkclthe constraints file is what tells the nextpnr-$x to map individual NETLIST entries (pins) onto actual IO pads08:49
lkcla differential clock is a clock line that, rather than having one single pin that goes on and off, there are a *pair* of clock lines that, simultaneously, switch to the opposite direction08:50
lkcli.e. they are "differential"08:50
lkclthe convention to distinguish differential pair pins is, one ends with "P" the other ends with "N"08:51
lkclso08:51
lkclClockP08:51
lkclClockN08:51
lkclP for Positive, N for Negative08:51
lkclback to internal blocks08:53
lkclyosys does *not* know about constraints (the IO pads), it only knows about NETLISTs and the things that those nets connect to.08:54
lkclbut08:54
lkclyou do have to have some sort of representation of e.g. the IBUFDS, as a black-box module, with the inputs and outputs, so that when the *use* of that module is passed over to nextpnr-$x (or VTR), the PnR tool knows what to do with it08:55
lkclok so here's a declaration - a model - of IBUFDS08:57
lkclhttps://electronics.stackexchange.com/questions/93373/how-to-route-a-lvds-clock-from-fpga-input-to-output08:57
tpbTitle: vhdl - How to route a LVDS clock from FPGA input to output? - Electrical Engineering Stack Exchange (at electronics.stackexchange.com)08:57
lkclso, now you can (after probably translating that to verilog) use an IBUFDS / OBUFDS as if it was some sort of "black box".08:58
lkclyou *do not* have to write the *contents* of that black box named IBUFDS / OBUFDS: just use it (as an external module)08:59
lkclyosys is intelligent enough to recognise this and will not complain (or, it shouldn't). it will simply pass through the black box - and all its netlists - IBUFDS.I, IBUFDS.IB, IBUFDS.O - to nextpnr-$x / VTR09:00
lkclnextpnr-$x / VTR will go, "oh, you wanted an IBUFDS, and you're compiling for ICE40? sure, i recognise those, let me just wire that up and P&R it for you"09:01
lkclso it's actually extremely straightforward09:01
lkclthe only tricky bit, as you're finding out, is that none of this direct-interfacing with FPGA blocks is really properly documented, you're pretty much just expected to "work it out"09:03
lkclsometimes not even the FPGA designers properly provide documentation, one good example is the Lattice ECP5 JTAG block, which allows you to tap into the JTAG port and insert your own commands so that you can interact with openocd via the ECP5's JTAG port09:04
lkclsomeone had to actually reverse-engineer the ECP5's JTAG block09:04
lkclbut, your first priority is to find the "model" of the ICE40 IBUFDS.09:05
lkclthe one i found above i just saw it's for Xilinx FPGAs (sigh) despite (sigh) searching on gooogle "ICE40 IBUFDS". getting really irritating that google "helpfully" puts in additional unrelated searches to the keywords09:06
lkclsources where you should definitely find a model file (IBUFDS.v and/or IBUFDS.vhdl) will be in the Lattice (proprietary) SDK09:07
lkclbeyond that, you're into playing the "hunt the unknown reverse-engineered thing on the internet" game.09:08
tntNo such thing as IBUFDS in an ICE40. It's SB_IO 09:20
josuahlkcl: great overview, thank you10:38
* josuah takes a cup of tea and reads10:38
josuahlkcl: that confirms what I was supposing, thank you for providing me that ground12:11
josuahthere might be a way to get around the name of what to search through the vendor's documentation12:11
josuahfor ICE40 and SB_IO (thanks tnt): https://www.latticesemi.com/~/media/LatticeSemi/Documents/Handbooks/iCE40FamilyHandbook.pdf#page=15212:14
josuahthat makes a starting point to search in the meantime it gets better12:14
josuah@amuttur if you are still around: https://www.latticesemi.com/~/media/LatticeSemi/Documents/Handbooks/iCE40FamilyHandbook.pdf#page=152 -> Using Differential I/O12:25
josuahthat could be what you need if your board is the iCE40...12:25
josuahlkcl: may I quote what you said? It could be useful to some.12:26
josuahlkcl: anonymously or not as you would prefer12:27
josuahhttps://josuah.net/blog/1652358092/ <- I reworded slightly ('s -> is and alike for chat -> article conversion)12:43
tpbTitle: josuah.net (at josuah.net)12:43
lkclsure, no problem. do put a link to the irclogs - both i and mithro run irclog2html... 1 sec...14:24
lkclhttps://libre-soc.org/irclog-f4pga/%23f4pga.2022-05-12.log.html#t2022-05-12T11:38:1014:26
tpbTitle: Thursday, 2022-05-12 (at libre-soc.org)14:26
*** chexum <chexum!~quassel@gateway/tor-sasl/chexum> has quit IRC (Remote host closed the connection)14:47
*** chexum <chexum!~quassel@gateway/tor-sasl/chexum> has joined #f4pga14:47
josuahlkcl: thank you! changed on my side.14:49
*** ec <ec!~ec@gateway/tor-sasl/ec> has joined #f4pga15:29
lambdaHi, did something in the build pipeline for the prebuilt f4pga-arch-defs files break? Unfortunately I can't look at https://storage.cloud.google.com/symbiflow-arch-defs-gha/ at all without a google account, but https://storage.googleapis.com/symbiflow-arch-defs-gha/symbiflow-toolchain-latest, which I've been using so far, points to a build from March.16:01
tpbTitle: Anmelden – Google Konten (at storage.cloud.google.com)16:01
F4PGASlackBridge<amuttur> @josuah Thank you! My board is from Xilinx though. I can implement the differential clock on Vivado, but I wanted to see if someone did it on F4PGA cause I couldn't find a lot of documentation about it16:09
lkclamuttur: ah! then that link i found above *is* relevant :)16:12
lkclwhich FPGA is it?16:12
lkclyou should be able to extract the following from the vivado compilation:16:13
lkcl1) the verilog model for IBUFDS.v16:14
lkcl2) the constraints file (.xcf? something like that)16:14
lkcl3) if you used some sort of wizard, at least it will have created the verilog source *using* an IBUFDS instance which you can cut/paste out16:16
lkclbasically you have to do everything as text files / source-code files, so need to know a little bit more about how symbiflow / nextpnr-xilinx actually work16:16
lkclwhich board and which FPGA are you using?16:17
F4PGASlackBridge<amuttur> I'm using the AC 701 evaluation kit from Xilinx, it's Artix-7 series17:02
F4PGASlackBridge<amuttur> Yup, I used the clk_wiz.v verilog instantiation, but F4PGA has trouble understanding the IBUFDS cell17:02
F4PGASlackBridge<umartinezcorral> @mliberty could you get it to work?17:36
F4PGASlackBridge<mliberty> I think I know how to make it work but haven't had a chance yet to try it out.  I'll ping you if I need more help.  Thanks!17:37
*** ec <ec!~ec@gateway/tor-sasl/ec> has quit IRC (Quit: ec)17:42
*** ec <ec!~ec@gateway/tor-sasl/ec> has joined #f4pga17:43
*** ec <ec!~ec@gateway/tor-sasl/ec> has quit IRC (Client Quit)17:43
*** ec <ec!~ec@gateway/tor-sasl/ec> has joined #f4pga17:43
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has quit IRC (Remote host closed the connection)18:59
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has joined #f4pga19:04
F4PGASlackBridge<amuttur> ```# Building complex block graph # Building complex block graph took 0.06 seconds (max_rss 71.0 MiB, delta_rss +0.0 MiB) # Load circuit # Load circuit took 0.00 seconds (max_rss 71.0 MiB, delta_rss +0.0 MiB) Error 1: Type: Blif file File: top.eblif Line: 639 Message: Failed to find matching architecture model for 'IBUFDS'```19:12
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has quit IRC (Ping timeout: 240 seconds)21:16
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has joined #f4pga21:24
*** chexum <chexum!~quassel@gateway/tor-sasl/chexum> has quit IRC (Ping timeout: 240 seconds)22:04
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has quit IRC (Ping timeout: 240 seconds)22:04
*** chexum <chexum!~quassel@gateway/tor-sasl/chexum> has joined #f4pga22:04
*** littlebobeep <littlebobeep!~alMalsamo@gateway/tor-sasl/almalsamo> has joined #f4pga22:05

Generated by irclog2html.py 2.17.2 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!