Yes, that's essentially what's going on. RGBI (or CGA) isn't really "digital." It's bi-state analog.I kind of wondered if there may be a better way to take the Digital RGBI to HDMI modern Digital. I figured the signal differences are to great for a simple solution. RGB is for driving the electron guns in a CRT. I expect modern Digital HDMI/DVI are optimized for LCD technology and don't have that same throwback compatibility
Digital is an unfortunate, overloaded term. Essentially, it just means that a circuit is recognized as being "on" or "off", without any intermediate state. However, the common use of the term implies that a digital signal is really a bitstream signal, meaning bits and bytes are encoded in the stream.
CGA is a great example of a bi-state analog signal, because there are no bits or bytes in the signal. Each color line is on or off, but there's no division from one pixel to the next. Without a logical grouping of bits into bytes, the signal doesn't really qualify as "bitstream digital", in the sense that an RS-232 connection would. Instead, the pins and the electron gun on the CRT have a 1:1 relationship. When the pin is high, a pixel on the screen lights up. When the pin is low, the pixel does not light up. Because of this design, CGA is only useful for video information. You can't use CGA to send an MP3 file, for example.
DVI, on the other hand, is an actual bitstream interface. For each color channel, a series of bits is transmitted. Those bits have a logical division, with a definite spacing between bits. Those bits are grouped in 10-bit symbols, and those symbols are decoded into 8-bit bytes. This is truly a digital, bitstream interface that, with changes to the firmware driving the transmitter, could actually carry binary payloads, such as am MP3 file or a spreadsheet.
What's interesting is that DVI splits the signal into three physical channels, like CGA and VGA do. I think the reason for this is to allow for pixels to be decoded and displayed at exactly the same time. This also makes it possible to process DVI signals in parallel.
What you'd have to do is build a digital encoder for each channel that, essentially turns two lines from the CGA signal into a single byte of DVI data. The "I" line would feed the low bits of the byte, and the color line would feed the high bit.
0000 0000or 00h
0101 0101or 55h
1010 1010or AAh
1111 1111or FFh
(taken from https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Color_palette )
This is just one color, and that has to be done a total of 3 times, one for red, green, and blue. In an FPGA, this would be three separate logic blocks that then feed the DVI or HDMI encoder.
As you can imagine, it's probably simpler to just use an analog circuit to feed an off-the-shelf VGA circuit... which is how someone came up with the original CGA2VGA circuit for the Commodore 128 (and, presumably, IBM PC.)