> The question is >"How can I get familiar functionality into the FPGA?"
the real question is: what you have to do with it ?
First of all you have to define the purpose, what is the final project ?
Just toying with and fpga or having to deal with something that requires
specific needs?
in case of "specify needs", in the most cases it is easy to understand
that you are fine using MPU instead of putting soft cores into fpga, and
using fpga to expand the MPU devices!
SPI is the simplest interface you can imagine, and it is not so complex
to handle it up to 40Mbit/sec, that means it is the ideal way to
interface an MPU with an fpga! You may need much more throughput, and in
case you can think about FIFO synchronous or asynchronous interface.
I have interfaced an atheros9 Chip using its built-in USB2 EHCI with an
fpga using a synchronous FIFO method
(SOC----usb----cypress-USB-to-FIFO-chip----FPGA), and i got a throughput
of 40Mbyte/sec! Obviously it is much more complex than the simple SPI,
but it is extremely useful!
In my purposes i wanted to use a CMOS OV-CCD camera to toy with machine
vision algorithm, so i used an fpga to interface the CMOS OV-CCD camera,
acquiring images, doing a bit of FIR elaboration, and then sending
everything to the SoC through its USB interface: that is the coolest way
to develop an application because you could use linux lib-usb to handle
the fpga communication through a simply bulk connections (already
serviced by the linux kernel for free)
Note, the MPU inside the SoC is not able to drive the CMOS OV-CCD
directly because this device is interrupt consuming and there is no way
to use the DMA for that. But fpga can be designed to handle the OV-CCD
in a custom way, so that is the proof of real things! Interfacing ASIC
SoC to fpga is useful, much more useful than trying to put everything
into fpga!
I was able to put linux into the Atheros SoC, so i was able to use a lot
of tools to develop and debug the final application!
> And the second question>"How can I use much code in the next project?"
much code in the next project ? still no-sense, if you get MPUs you can
recycle your code
> One good soution is a microcontroller.
> The FPGAs are now large enougth to put such complex device inside.
it's good only if you have a lot of man power and you have specific
needs to be satisfied, something that smell like
uncommon-extremmely-custom constrains. Common applications do not
require higher integration which also cost a lot about human being
resources involved into the debugging activity.
> MIPS is attractive because the toolchain is avialable and also much
> literature is written
with the last ARM chips you get the same at a reduced ratio
what-you-can-really-to/how-much-they-cost
if you want to go for MIPS, you'd better buy a PIC32 chip from
Microchip, then interfacing it to an fpga to extend its functionality,
which is useful and has sense when you need "custom" devices.
An Atheros chip can be clocked up to 800Mhz, so it much more faster than
a soft core, it could also have FPU (64bit of precision), an MMU, and it
usually comes with a great debugger interface, an integrated Ethernet, a
dram controller, DMA, a built-in USB2, and a lot of already validated
functionality and costs the less! Just 10 USD for the whole system, and
you are already ready just out of the box, toolchain are already
provided, debugger are provided, too, there is no need to do
long-time-frustrating debugging activity to find out which VHDL line
code is wrong, no frustration around how to debug things, how to get a
toolchain, etc. About PIC32, you could clock them at 80Mhz and to
develop your firmware you just need to download a free-software from
Microchip. MPlabX is powerful with everything you need.
Softcore are useless, I think they are good for teaching about
"architecture" or to deal with hobby purposes, i mean in where the
purpose is developing a CPU instead of using it for real things.