I don't understand enough about how FPGA chips work... I guess you set them up so that they not only have a CPU core, but also have sub-cores for various support chips. Like if it was an Atari 8-bit, you would have the 6502, plus Antic chip, etc. Or a C64 would be the 6510, plus a VIC-II and SID sub-core. So the ADAM would need to be a Z80, plus the 6801 sub-cores (because you already have video and sound chips on the board already)... or would you even need to simulate the 6801 chips? I can't seem to wrap my mind around how it would work (but I'm sleep deprived, so that's that). ...
Field Programmable Gate Array == FPGA. A chip full of logic gates that you can reload in the field. The term "programming" refers to loading the chip, not the process used to design the bitstream that the FPGA loads. People working with FPGAs use a Hardware Description Language (HDL) like VHDL or Verilog to "describe hardware", you are not "programming" in the sense that you think of with computers.
Think of an FPGA as having a very large number of logic gates that you can easily arrange in any manner you like. You use an HDL to describe your circuits, and tools to "synthesize" your description into connections between the logic circuits inside the FPGA. If you describe enough logic in the right way, you can get an FPGA to behave like a Z80 CPU, or whatever other circuit you want. The process is similar in idea to code, compile, link, run on a computer, however with the FPGA you are truly working with hardware electronic circuits. Another way to think of it would be like having a very large amount of 74LSxxx TTL logic chips that you can easily connect in any way you want by using software instead of physically breadboarding the circuit.
These days, the number of gates in an FPGA is massive compared to the amount of transistors used in older 8-bit and 16-bit CPUs (and even modern 32 and 64-bit CPUs), so you can describe a Z80 CPU, and all the other support chips and glue-logic in a retro-computer, and the FPGA "becomes" that computer when you load the bitstream into it. When you describe a particular circuit, like a CPU, those are generally referred to as a "core", and lots of companies sell cores to people working with FPGAs (and lots of people write open source cores too). This is not unlike buying a CPU and other chips to make a computer or other circuit.
FPGAs come in various sizes, typically measured in the number of "logic cells" they provide, and it is hard to correlate an FPGAs logic to what kinds of circuits will fit inside it. However, suffice to say, smaller FPGAs available at hobbyist prices ($20 to $25 for the FPGA) have enough logic to easily fit a retro-computer plus lots of extras. FPGAs also get very expensive for the really big ones, and you can easily spend $1000 on the FPGA alone! I think that is why many people think FPGAs are too expensive to use. But like anything, it depends on what you use.
For example, the Phoenix is using a Xilinx Spartan-6 LX16 FPGA. The LX16 has 14,579 Logic Cells and costs about $25. With the LX16 you can fit the Z80 CPU, F18A core, HDMI video circuits, audio core, joystick logic, ROM data, and the other miscellaneous glue logic to make an enhanced CV computer. The current design is using about 80% of the LX16's logic resources. If you step up to the LX45 FPGA (about $35 or so), this same design would be about 38% of the FPGAs resources.
So, as you can see, low cost FPGAs are a great match for recreating retro computers. Also, since an FPGA is truly hardware, it is not "emulation" or "simulation" like you think of with software emulators. With the FPGA, you are doing actual hardware reproductions of the original hardware, down to the level of the individual transistors inside the original chips! That does not mean you can't get it wrong though. Making a CPU core for an FPGA is not exactly trivial, and you can certainly get something wrong and your core might function slightly differently from the original chip.
Also, since the FPGA loads its configuration when it powers on, the configuration can be changed (hence the "field programmable" part of the name) and your FPGA can become a completely different circuit. This is what allows a system like the Phoenix to be a CV, ADAM, 2600, or whatever. It cannot be all those systems at once, but it can reload its bitstream to become a different computer.
... Would the Phoenix hook up to a USB inkjet/laser printer to simulate the daisywheel, or would you not bother with printing? Also, I hope someone produces a ADAM keyboard interface box so we can use the ol' keyboard on the Phoenix... that would be so sweet!
Sorry, actually falling asleep while typing this out. Going to bed now. Sorry if it doesn't make sense.
No, it does not work like that. To use USB the computer described in the FPGA's circuits would have to be able to talk to the USB hardware at a low level, and the software running on the computer would have to be programmed to use the USB hardware and talk to the device at the other end of the USB link. This would be the same as trying to add a USB interface to a real CV. Having and FPGA does not make this any easier. Even if you have the hardware, you still need a lot of software to make it work. Modern computers make using USB devices seem quick and simple, but the hardware and software to support being able to just "plug in" a USB device is very complex.
Edited by matthew180, Sat Jan 19, 2019 2:13 PM.