Your undertaking seems a little bit too much, to start off from.
Well, I do have some other project ideas to tackle first, to build up from practically nothing to where I *can* manage the ultimate goal. The USB stereo-to-2.1 sound card that I mentioned in the OP is just one of them, but all have something to do with live sound or video.
First off: Running Logic at ~100MHz is usually no problem. However, above that you need to be very carefully about timing in your design. This alone is a university course worth topic.
That's part of what I need to learn. If I just throw a bunch of Verilog at it, will the toolchain figure all that out for me? (within the chip, at least) Or is that something I need to watch out for as well, in addition to the relative trace lengths on a custom PCB? (once I get to that point of course; I'm pretty sure I'll be starting on a dev board that has all of the PCB work done already)
I don't really understand your goal, do you want to pass uncompressed 1080p30 Video Data through USB?
Not necessarily.
My primary goal with that one is to have a strobe light appear on the display in significantly less than 1 frame after that light hits the camera. Preferably less than one line, and ideally just a handful of pixels' worth of delay. No explicit buffer of any kind in that path: just send the pixel data straight through, with changes as it goes, and delay the original sync's by just that much. Definitely an "analog" feel here, in the sense of having already made a VGA processor with an entirely analog signal path and the sync's literally wired straight through.
That low latency is made possible by not having any kind of processing that involves neighboring pixels.
The PC and USB connections are auxiliary to that, and are only to have a "computer monitor" input to key over the critical path(*), and to give the same PC something to record. Whether the USB is compressed or not is immaterial for the high-level requirements. I suspect it would have to be, as uncompressed HD video is a LOT of data, even though USB 3 can technically cope with it.
(*) For each pixel independently, if the PC's pixel = 0,0,0 show camera, else show PC; and "no valid signal" from the PC (USB unplugged, for example), also shows the camera.I was kinda hoping, though, to just drop in a library for each that would play nice together, and end up with a composite USB device that appears to every PC without installing drivers, as a display adapter and a capture card. Nothing special about either of those on the PC side, and they "just work" up to and including their respective frame buffers that I can then interact with. My custom code would then be entirely focused on the super-low-latency camera-to-physical-display path, which would manage its own physical connections to those devices, and access the USB libraries' frame buffers asynchronously. That might be what you were thinking of next, perhaps?:
For processing Video Data there are ready to use logic blocks for Vivado, however they usually involve a cpu for configuration and control, which uses quite complicated AMBA Bus.
Like I said earlier in this post, do I really have to mess with that configuration and complicated bus? If I just throw a bunch of Verilog and static settings at it, will the toolchain figure all that out for me so that it "just works"?
(demonstrated by my custom code simply copying one frame buffer to the other as proof-of-function, possibly with a bitwise-NOT (easy color-inversion, or photographic negative) in between, to show that it is indeed using my code)
The Zybo Boards have HDMI out and In. The Zedboard only has 1 HDMI output port, but is probably the best documented board.
However, getting used to the Zynq environment including everything around it, is an absolute cluster fuck for a beginner.
Hmm... Is there a "video playground" sort of thing, like Analog Devices' SigmaDSP chips and SigmaStudio IDE for audio? Cheap hardware, free IDE, put a bunch of blocks together and mess with your HDMI camcorder and/or computer monitor in weird, wacky, wonderful, and fun ways? It probably won't have the sub-frame-instant throughput that I'm looking for in the final project, but at least it's *something*, right? (and it would probably be enough to find a permanent home in one of my "build-up" projects)
With FPGAs you should do very little steps, otherwise you'll get frustrated very quick.
Likewise with the 8-bit MCU's that I'm presently familiar with. I wasn't an instant expert with those either, which is part of what the "build-up" projects are for, in addition to each having its own usefulness.
(you *might* argue that a Configurable Logic Cell (CLC) peripheral in an 8-bit MCU is a *very* limited FPGA, but that's probably stretching things a bit)
I think my university did a disservice by making it look so easy 10 years ago, although I'm not really sure what else could have been done for a freshman intro class. Like I said earlier in this post, we pretty much just threw some Verilog at it and watched it work. I forget which chip or IDE it was, but it was one of the larger fine-pitch packages that's not BGA, on a university-owned dev board. Waaay overkill for what we were doing with it, but that's pretty much how it worked for us in class.