P1V with native HDMI output @ 720p
Rayman
Posts: 14,632
Just got P1V (FPGA) working with native HDMI output.
Doesn't use any cogs because it's all done in FPGA fabric.
It uses a separate copy of the ROM font so that the RAM/ROM space where the ROM font usually is can be used for the screen buffer.
The screen buffer uses two bytes per tile, one for tile index and one for color.
There are 256 sets of 24 bit colors to choose from.
The colors are currently hard coded in FPGA, but maybe could be in HUB RAM if needed.
This Arty S7 board with Spartan 7 FPGA doesn't have a HDMI connector for some reason, so I'm using this P2 eval board adapter with some jumper wires.
This will probably work at 1080p too.
Update: Attached full Vivado source files.
Comments
The HDMI code is pretty vanilla, the real work is done in hub_mem.v (attached as text file).
The code brings the pixel clock, and x and y pixel numbers (sx & sy) up from the HDMI driver and then down into hub_mem.v.
I think the tile driver has to be in hub_mem.v because that's where the HUB memory is and you can't import 2D arrays in regular Verilog.
Here's the .spin test program.
You can see there is no screen driver in it.
The FPGA just looks for the screen array at some predetermined place.
Now at $7000, but I'll probably move it to $8000.
But, you can see how the print statement works is very similar to the regular VGA demo.
I was thinking you should go the other way.
Build a HDMI adapter to hookup to the P1 or P2 that excepts commands to drive the HDMI screen like maybe an SSD1331.
I hate to have to run the P2 at 350 mhz just to display some data on an HDMI screen.
Maybe I should look at the Dazzler board again. It does just that but I don't like the FPGA he used to build it.
Mike
Already done P2 --> Dazzler 3X.
It works at 720p. Doesn't seem to work with TVs for some reason though.
That reminds me, I wanted to see if this works with TVs or not...
Nice thing about this is that it's just one chip.
See here how there's plenty of room for more stuff:
Ya, but the footprint is way too big. Need something 2 inches in size would be nice.
Oh, by the way, Adafruits makes some nice 30 gauge silicon wires that would work a lot better than the spaghetti wires you have soldered up there. They even come in multi colors. adafruit wires
Mike
Do you mean the Arty S7 board is too big?
Digilent does make smaller versions:
https://digilent.com/shop/cmod-a7-breadboardable-artix-7-fpga-module/
The Spartan 7 one looks out of stock at the moment, but the Artix 7 one is in stock.
I imagine the fpga files would work with just a change to the constraint file and the target...
BTW: Putting the full source in the top post.