-
Notifications
You must be signed in to change notification settings - Fork 9
Not all I/O are reachable from nextpnr in the xc7k325t #8
Comments
Could this be related to how prjxray-db is generated? If so, adjustment of f4pga/prjxray#1794 such as f4pga/prjxray#1844 may help resolve this. |
(transfer comment from PR) Connectivity of switches on Genesys2, cf. https://digilent.com/reference/_media/reference/programmable-logic/genesys-2/genesys-2_sch.pdf and https://github.com/Digilent/digilent-xdc/blob/master/Genesys-2-Master.xdc Note that all LEDs are connected to bank 14 as well. This supports your hypothesis stated in #7 , @jrrk2 From Xilinx' documentation On the bright side, this would mean that the following I/O is currently available for bitstream configuration on the Genesys2:
|
I can confirm the reset button can function as a convenient manual clock. |
Investigations in #9 support our current assumptions. |
The reset pin may be made bidirectional in order to self-oscillate. This happens at about 64MHz. Now the Genesys2 8-bit counter will self-count. see the ring-oscillator branch of the blinky project. |
Sounds great! How reliable and defined is the clock frequency with this approach? Either way, this is a definite leap for publicity and proving the point that an open-source Genesys2 design is possible! 👍 Can you rebase your branch to the latest revision of makeit.sh, please? |
For details of the approach, see the paper that I previously attached:
https://caslab.csl.yale.edu/publications/burgiel2021characterization.pdf
In short, it’s not great, but for pedagogical purposes it can be used to show how not to do it.
Concerning rebasing, I see no changes of mine that need to be kept in makeit.sh
Regards,
Jonathan
|
I am just finished building a database for the 160T based on @unbtorsten's branch and I have the same issue.
@jrrk2 : What did you use as a basis for your database? Was it ./download-latest-db.sh? |
This pretty much agrees with my diagnosis that the root cause is no support for the 1.8V I/O in the prjxray Makefile. Even when that is fixed, we still have to understand the behaviour and configuration bits for the 1.8V I/O (and in particular the LVDS crystal 200MHz input that Genesys2 relies on). This is essential to support the DDR memory interface standards also. |
@jrrk2 Can you point me to the exact location in the Makefile? |
diff --git a/fuzzers/000-init-db/Makefile b/fuzzers/000-init-db/Makefile
-DB_SIMPLE += segbits_lioi3 segbits_liob33 BLOCK_RAM_EXTRA_FOR= |
I came across this module which should provide access to a clock on Genesys2 from a 3.3V I/O bank. It does not claim PMOD compatibility but with only 3 pins hopefully it will fit somehow: |
@jrrk2 I patched nextpnr to print the BEL it is looking for before the failed assert, and I got: |
@jrrk2 Oh I wasn't aware you already started working on an iob18 branch. I will try to pull those changes into the kintex-chatter fork. |
@jrrk2 In your iob18 branch, shouldn't the IOSTANDARDS also include LVCMOS18? |
What I have is just a mess that doesn’t do anything useful. It’s just a playpen to investigate how many different pieces of code need to be changed. Moreover, we need to reintegrate it all back into the existing iob fuzzer. |
This is the previous mentioned external oscillator (10MHz) attached to the JB PMOD of the Genesys2. Documentation is a bit scanty but I am confident the signal will appear either on JB1_P or JB3_P which is connected to pin V29 or T25 (conveniently both in Bank 14). Somebody with better eyesight than me could have soldered it themselves but it only cost £10 including postage from China, see above. |
External temperature compensated crystal oscillator module is working on Genesys2. Branch main has been updated with the changes. Blinking is fairly slow at 5/8 Hz or so. This can be speeded up by the use of a PLL as required (if that works yet). I did not go through the pull request process since I was confident my changes were small, so feel free to blame me if it breaks your board support. |
@jrrk2 We have now working preliminary support for the high speed IO banks. See https://twitter.com/1gkojima/status/1506925318875267072 |
Excellent progress. I need to refresh my memory a bit, should I be using branch iob18-trial in the kazkojima nextpnr repo ? |
@jrrk2 Yes that should be the branch. I am not shure yet, if nextpnr supports the LVDS IO standard. |
I guess that LVDS IOSTANDARD won't work yet for the several missing keys in the segment DBs. More importantly, it's very likely that the modified nextpnr can't set the correct bits in the bitstream, even if the missing keys are resolved. When there is an external chip connected to the IOB18 pins, that chip or FPGA could be damaged with the wrong voltage or some collision, in the worst case. |
@kazkojima I think for the clock input it should not be a problem and the danger of damaging something is fairly minimal. |
Hi, I was trying to get a different xc7k325 board up and running and came across this issue as I have a differential clock is attached at IOB_X1; is there a solution for this issue? If someone could tell me what needs done, I'd be happy to have a go at fixing it. |
I think this is the latest progress: https://github.com/kazkojima/nextpnr-xilinx/tree/iob18-trial I haven't personally been able to work on it due to hardware unreliability that was only recently fixed. |
@JakeMercer |
The IO bank database bits should be in pretty good shape at this point: |
@jrrk2 @unbtorsten It's been quite a while, but today I got the differential clock input working on my |
@hansfbaier Great work! I've got your differential blinky example running on my board. Apologies for taking so long to get back to you; I've been flat out with work but found some time to get back to this, this evening. Is there anything I can check with my board that you aren't able to that would help progress things? https://digilent.com/reference/_media/netfpga-1g-cml:netfpga-1g-cml_rm.pdf is the reference manual; I'm aiming to get the Ethernet's up and running but I'm not sure what the state of DDR I/O is at the moment? Also is bidirectional I/O special in any way as far as the IOBs are concerned or does it work the same as single-ended I/O? |
@JakeMercer Yes DDR3 is the next frontier. I already can build a DDR3 design but it does not work yet. We will have to test the individual primitives to see where the problems are. |
@JakeMercer I haven't tested bidirectional IO yet and it would be great if you could whip up a simple test case for that, |
@JakeMercer I just pushed my latest version of the database, to ensure we are testing the same thing. |
@JakeMercer I also just pushed all my interim changes to nextpnr-xilinx. Please pull again from the iob18-trial branch. |
@hansfbaier I've pulled in your latest changes and rebuilt after a
Which does not appear to work. I have isolated both the input and output side by reverting each back to input/output instead of inout and tweaking things to not use the IOBUF instantiations and things operate as expected in the fully reverted case but not when either side uses bidirectional IO. I have had gpio0 as a normal input and the state is reflected in the LED and I have had gpio1 as a normal output and it changes with r_count. Having gpio0 as bidirectional and configured as input the LED stays off regardless of what is connected to the pin. Having gpio1 as bidirectional and configured as an output it remains at a logic 1. It's entirely possible that I've made a rookie mistake, so apologies if that is the case. |
Hi @JakeMercer You swapped I and O in IOBUF |
@JakeMercer I have now the following set up which seams to work
|
Ah, I knew it would end up being something silly. I've tested that on my side now and looks good! I've tweaked the above to use 2 extra pins and
|
This is my .xdc file:
|
Can you give me the source and .xdc file for that? |
Apologies for the delay; the constraints file is as above and this is the Verilog:
|
The toolchain fails when I/O sites outside IOB_X0Yxxx are selected. Inside this range the tool runs without error but only a limited number of I/Os are operational in the resulting bitstream. See PR #7
This is a rough description of the behaviour which needs refining.
The text was updated successfully, but these errors were encountered: