eekee wrote:rdos wrote:I have a pretty advanced FPGA device that has Ethernet, Fibre interface, HDMI video interface, high speed ADC/DAC interface, USB, Micro SD-card interface, and an 8 lane PCI express interface. It's a pretty complex device on its own, but you need to program it with Verilog, and maybe a Verilog based OS is not such a good idea?
Haha! A Verilog-based OS would require a totally different way of thinking, I believe.
rdos wrote:OTOH, you could also use it as a general peripheral and then implement the OS with whatever hardware you like as long as it has 8x PCI express. That has the advantage of learning both how to create complex hardware devices and OSes.
Very funny!
I was thinking of FPGA-based computers where the usual practice is to load one or more cores into the FPGA. See opencores.org for some examples. There are also FPGAS with CPU cores in the same package. 9front runs on one of these; a dual-core ARM with the FPGA handling Ethernet, SATA, USB, and DisplayPort. (DP wasn't fun, but required fewer pins than HDMI. HDMI would have taken the IO which was wanted for SATA.) The guy who developed the board loves C and hates Verilog.
He made a simpler, C-like language for FPGAs. It compiles to Verilog. I don't think he had time to finish it though. I think he likes VHDL better than Verilog, but which one you get to use depends on your FPGA manufacturer. There are no open-source compilers here.
I have this device:
https://www.xilinx.com/products/boards- ... 705-g.html
Buying an evaluation board gives a lot of hardware, and also a limited license to their development tools which otherwise are pretty expensive.
They have a C environment they call "Microblaze", but I didn't like that too much so I wrote everything in Verilog instead.
I also bought a 1G sample, 2 channel ADC & DAC from Analog devices which interfaces through the FMC connection on the FPGA board. It was a lot of work to learn Verilog, and to create an environment that could configure the ADC through a PIC device interface and then send sample data through PCI express to RAM in the target computer. I also developed a driver for my OS that created a schedule for the ADC. It all works pretty well and I can sample up to 750 MHz and then transfer the data in real-time to the host. It was a fun project where I learned a lot about how PCI is implemented in devices.
There was also a lot of problems since the reference designs used MicroBlaze and the local SDRAM of the FPGA. MicroBlaze cannot keep up with an ADC running at 750 MHz.
It would be fun to explore the Ethernet device as well, but I've not had time for it and my license to the development tools soon expires.
Besides, this device also has a huge number of DSP slices and so it's possible to do very complex signal analysis in real-time, although I think it is much easier to do this on PC hardware, and so I decided it was better to get a fast PC with lots of RAM.
Another drawback of doing things with Verilog is that it takes a VERY long time to build the code when the project is complex. Debugging also was a bit different, with adding signal tracers to the design.