FPGA Makes ASCII Video

Human beings like pictures which is probably why there’s the old adage “A picture’s worth a thousand words.” We take computer graphic output for granted now, but even in the earliest days for Teletypes and line printers, there was artwork made from characters ranging from Snoopy to Spock. [Wenting Z] continues the tradition by creating an FPGA that converts VGA video to ASCII art and outputs it via DVI.

The device uses a Xilinx Virtex device and uses about 500 LUT (look up tables) which is not much at all. You can see a video (that includes an overlay of the source video) of the device in action below.

In fact, we think of art like this as a computer phenomenon, but [Flora Stacey] created a butterfly on a typewriter in 1898 and ham radio operators were doing art using paper tape for the last half of the twentieth century. Even before that, In 1865, Alice in Wonderland had a certain passage that was typeset to suggest a mouse’s tail. Perhaps the pinnacle is the famous ASCII version of Star Wars.

This is decidedly less mechanical than some of the other ASCII art projects we’ve seen. If you have a taste for more text art, have a look at some other examples, including a very old advertisement that uses character art.

28 thoughts on “FPGA Makes ASCII Video

  1. I’d like to know if this is faster than just having VLC output to the terminal (which is, as far as I’m aware, the *default* when running it from a terminal).

    1. Yes.

      But what if the FPGA streamed the output over RS232? Based on the github, the frame size seems to be 800×600 with 8×16 characters. You’d need a minimum of 888000 bps UART rate to stream 24 FPS with the same character array size. 921600 is a higher multiple of standard rates and supported by many USB-UART devices, and gives some overhead to reposition the cursor at the end of frame and CRLFs (or the Line Termination of your Faith’s Choosing)

      1. FTDI chips support up to 3Mbaud on full-speed devices (FT232R) , and 12Mbaud on hi-speed ones (FT232H). There really is no need to use the archaic “Standard” baudrates these days.

  2. Years ago (many years to some of you) when working at a particularly mind-numbing tech support job I attempted to watch dvr recordings stored in my home computer at work using a computer where I wasn’t allowed to install any software.

    I had an X-server in a java applet embedded in a webpage. That was way too slow though so I tried an ssh client as a java applet and used the -ao option to get ASCII out of mplayer and an mp3 streamer for the audio.

    It was very recognizable but the video couldn’t keep up with realtime and the audio quickly became out of sync.

  3. I was intrigued by the reference to paper tape art “ham radio operators were doing art using paper tape for the last half of the twentieth century” I googled around but just found baudot/ascii images on tty’s. Was there actually some done with the tape?

    My reprogrammed Boyd Calculator has a narrow printer and i’ve been looking for ideas to use it once i get it going:

    1. Well there are two things. First, yes, I have seen gimmick tape that had very simple graphical patterns (often banner letter fonts) punched into the tape. But mostly hams used tape to encode the pictures that were displayed on the printer. Here’s why. Someone had to type those things out to start with. You would make mistakes. You could delete things with a razor blade and some tape. You can also overpunch with a NUL (all holes) to erase a single character. Then you could splice in new tape. For example, if I had XXX—XXX and decided I wanted XXX——XXX in that space (6 dashes instead of 3, I could overpunch the XXX—XXX with NULs and cut in between. Then I’d punch a new tape with 4 or 5 NULS on one side, the new sequence, then 4 or 5 NULs at the end.Then I could tape over using the NULs as alignment points.

      Once you had it all set, you’d reperf it (read it in one end and punch a new tape on the punch).

      You’d also see punched cards with simple patterns in them.

      Not quite a picture but https://books.google.com/books?id=_4ZMC_QBAC4C&pg=PA105&lpg=PA105&dq=printing+banners+on+paper+tape+teletype&source=bl&ots=RVdt2Izt90&sig=a-FP65oy4wjY1Z_TQhOTQzPR730&hl=en&sa=X&ved=0ahUKEwiY_9iKg9bZAhVBWq0KHSJ6D5IQ6AEIVDAK#v=onepage&q=printing%20banners%20on%20paper%20tape%20teletype&f=false

      Funny there seem to be no pictures of tape banners or graphical cards (although I saw someone talking about remembering a punched card with a Christmas tree, but no picture). Not to be confused with trees made from cards: https://aadl.org/N021_0795_005

      Ah… here we go… and from our much admired friend Ken….http://www.righto.com/2017/12/repairing-1960s-mainframe-fixing-ibm.html — direct link to picture: https://lh3.googleusercontent.com/-Jkp6tPfeWyY/Wj9dCsErf1I/AAAAAAABHe4/NTjVNzF_teU3fKEWU90m8AGQNT7vwvl4QCHMYBhgL/w9999/xmas-card.jpg

  4. I want to show lyrics on a TV from my phone, using the smallest physical adaptor possible.
    There’s some serial-to-VGA adaptors, or phone-to-HDMI, or some kind of wireless solution if I buy a Chromecast/competitor.
    From what I can tell, all the custom video output devices use FPGAs, and they use a lot of power and are large. But they’re open-source.
    Can anyone recommend how I can get text onto a screen using a gadget that fits in my pocket?

  5. Hi AI Williams, I found your project very cool. I cloned your source code and tried to upload on my XUPV5-LX110T. The only difference between my and your board is that my board has XC5VLX110T FPGA and the board features are same. But there seems to some problem somewhere, the ASCII video is not stable. I have uploaded a video of the ASCII output on monitor, Red channel vs Hsync and Red channel vs Vsync obtained from DVI to VGA converter on an oscilloscope for a fully red image from VGA input. Please suggest me a solution or possible error.


Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.