Hi kevju,You could use bus switches in this application to make the FPGA I/Os 5V tolerant.
Thanks for sharing your practical experience which I appreciate a lot. And it's very practically relevant to read about your cost examples from JLCPCB so thanks also for that.
There are a lot of considerations in this project, which keeps me moving back and forth between using the 208 pin CPLDs and deciding to completely move the project into FPGA.
I am not quite there yet to decide this right now but it's getting close to take that decision. After I find no alternative except moving on to FPGA, I will need to consider a lot of things for the practical solution how to create the system. At that time I will be looking in detail into the level shifting and how to do it. The type of switches you mention, that kind of idea sounds great because it looks really basic and less complexity should indeed benefit the speeds, like you mentioned, fractions of nanoseconds that sounds really great. I will look around what type of ICs could be found, possibly in SMD format in order to decrease the board area more since I will be using a lot of pins to make the whole system possible. Definitely I will be using some modern solutions to connect the FPGA, and I will also look at the existing modules which can be bought to compare these with a custom board or module. One problem is finding some existing FPGA board with a larger number of pins. When pin numbers increase, the problem of how to make the connections in a solid way and keeping the connections short also becomes bigger. I will do more research in the future to try to find a good solution for this project.
Right now I am still looking at a possible CPLD version just as a final careful consideration to see if I can find some satisfactory configuration which could enable a 2 layer board design and using hand soldering.
Assembling these quartus projects takes some time to create all the logic and test compile, and I have had to rethink the whole system several times already in order to remain within the "6 OE" limitation of the CPLDs.
Right now, in order to be able to make a CPLD version which eliminates as many system transceivers as possible, I would need to make some changes in order to have a working compromise. It costs more pins because of needing to split a bus into an input bus in one package and a driving bus in another, which needs the same connections on two chips instead of one. Though this may not be a very big issue with the larger packages. Being able to choose the pin locations is also helpful to make the PCB traces at least less complex. However there will be a lot more connections on the board. It depends on if this could be done in a reasonable way. What I am looking at is to still get as many bus functions as possible inside a single chip, which is my preference rather than spreading parts of a bus across the board.
The biggest example is the AT DMA address generation. Some things even though they look correct from a standpoint of it being logically sound, presents different timing in the DMA process for example. Different timing in this case resulted in no issues at all. The DMA process is controlled in different stages, as long as the correct bus levels are established when the DMA controller is doing the actual operations, it will work without issues, which I was thankfully able to verify yesterday with the existing CPLD prototype.
I will finish the first large package CPLD project, enter it into KiCad and place it on the board, which will give me an impression of what the design and trace routing would look like. I need to determine if it would be a good idea in a practical sense to continue this development path using CPLDs, or if it will be better to continue with a FPGA instead. When I see the chip on the board, perhaps I can see a way to be able to run the large amount of traces in a reasonable way using a two layer PCB. That is really my target. For the FPGA version, I will also be looking at large connectors for a module and I need to try routing such a connector if this can even be done with two layers as well. Soldering a large pin count FPGA onto the mainboard will need more layers so using a module to connect it into the system may be a better solution.
Kind regards,
Rodney
Last edited: