Voltage Level Translation
Date: Saturday, March 17 2012 @ 16:59:26 UTC
Topic: Amiga FPGA accelerator
Main problem in development of Amiga FPGA Accelerator was solving Voltage Level Translation. As we know MC68000 operates at 5V CMOS and most of the signals are in that range of voltage levels. Problem occurs when you want to use or replace that signals with newer devices like FPGA ones who are unable to use anything higher than 3.3V or in LVCMOS range. In this case I decided to use Altera Cyclone II device for MC68000 emulation but like I said it is very hard to find 5V tolerant FPGA device so only solution was Voltage Level Translation between MC68000 and Altera Cyclone device. On the market we can find lot of devices for Voltage Level Translation like QuickSwitch devices, Level Shifters, Transceivers, Buffers/Drivers or Voltage Level Translators with or without Auto Direction Sensing, but not all of them are suitable for this job because we don't have just unidirectional signals here, we must provide Voltage Level translation for some bidirectional signals also. Simplest solution is to use Schottky diodes with series of resistors but I decided to use different approach because I wanted to simplify design as much is possible. There are number of parameters that we need to consider and for better understanding check two pictures below.
Using Schottky diodes
After some investigation I found that some Dev boards have some kind of protection for 5V signals. This protection is needed to keep FPGA device protected for high voltages. For example Altera DE2 board have over voltage protection using Schottky diodes with series of resistors. Unlike the DE1 (which has no protection), the DE2/DE2_70/DE2_115 boards have 47ohm series resistors on all the GPIO lines, plus a BAT54 diode pair clamping to +3.3 and GND respectively on the FPGA side of the resistor. So it is perfectly safe to apply 5V signals on the GPIO pins on these boards even during configuration.
Altera DE2 Schematics
Using QuickSwitch devices provided by Pericom or IDT can solve lot of problems. They are NMOS transistors based. You just need to add diode at the VCC to drop down Voltage Level by 0.8V, for this often is used 1N4148 diode.
All of this should work fine with unidirectional signals, but in situation where we need to solve problems with bidirectional signals in CMOS to LVCMOS translation and vice verse it could drive to number of problems, because sometimes 5V CMOS device in some cases can't detect LVCMOS signals. Those problems can be solved by using external pull-up resistor with a typical resistor value of 1K or 10K connected to a higher power source. This technique works but it can drive to increasing power dissipation on the circuit. Also this technique is problematic with high speed signals. You need to remember that this need to be done with every bidirectional signal and that could drive to design complications because we increase number of components on the board.
Using this devices you don't need to think which way are signals going as the QuickSwitch devices don't have direction control pin. For this operations you can use basic PI3C3384 from Pericom or equivalent from IDT QS3384 if you don't have large number of signals needed for Voltage Level Translation, but if you have it is better to use something like PI5C34X245 32 bit or 16 bit QS32X245 device.
Level Shifters, Transceivers, Buffers/Drivers, Voltage Level Translators with or without Auto Direction Sensing
Level Shifters - Why we can't shift away
Voltage Translation using PI5Cxx Switches
There are lot of devices that can be used for Voltage Level Translation produced by TI, NXP, Maxim and others. First you need to select correct Logic Family that is suitable for your design for example LVC, LVT, and each family represent some Logic Type. For selecting right Logic family you need to check electrical characteristics of the devices like VIH, VIL, VOH, VOL. In my case using MC68000 and Altera Cyclone II device I had to provide minimum and maximum ratings to establish safe connection with those two components.
Many of those devices have direction control pins, even if they are dual voltage devices or 5V tolerant devices you need to pay attention to those pins because with those pins you will decide which side of logic device is input side and which one is output. Also you may pay your attention to "244" or "245" number in component name as "244" stands for unidirectional device and "245" for bidirectional but that doesn't mean that they can change direction of input and output signals on their own, devices don't have Auto Direction Sensing and that could be a large problem if you need truly bidirectional device . In my situation I needed cheap devices but in the same time I needed device that can change direction depending on signals so when A side needed to become input that B side become output and when B side needed to become input A side automatically goes to output state. To accomplish this you need to program direction control and output enable pins on selected Logic device, and I solve that just driving those pins to Cyclone II I/O pins and then programmed them. So now I have truly bidirectional Level Shifters and his A and B side, or input and output one depends from Cyclone.
There are few devices on the market like TXB0108 from TI who have Auto Direction Sensing so if you don't know what to do and don't understand any of this just use them and you will be fine in most cases but remember those devices have dual voltage VCCs and this could drive to PCB complications as you need to drive two power sources to the device. For better understanding Logic Families and Voltage Level Translation you need to read lot of documents. Some of them you can find here in Further reading section.
TI - Texas instruments:
Voltage Translation, Switching Standards, and Bus Contention
Benefits and Issues on Logic Migration
Digital Logic - Pocket Data Book
Voltage Translators/Level Shifters
Low Voltage Logic Interfacing
Logic Family Signal Integrity Comparisons by Roy Leventhal