The USB To HDMI Adapter(External Graphic Card) is an attempt to reproduce a device that is similar to Startech's USB32HD4k device that works on Linux, Ubuntu specifically.
Currently, the device supports video streaming up to 1080p at 30HZ.
The device is compatible to most linux distribution that support by evdi. Currently, the device is tested and verified on Ubuntu 20.04.
Given the device is only powered by the USB 3.0 port (around 5 Watt), the device does not introduce the risk of electrical shock and injury in any situation.
However, please keep the device away from water split and do not use the device in any wet conditions. Doing so could damage the device!
-
C++ user program - C++ code that utilize evdi to create a virtual screen in the Linux-based OS.
-
Host laptop - The laptop/computer that runs the C++ program that generates video data.
-
CyUSB3014 - A Cypress USB 3014 Evaluation board produced by Infineon. Left component in Figure 1 and Figure 2.
-
ULX3s - An open-sourced ECP5 FPGA board designed by Radiona. The right component in Figure 1 and Figure 2
-
PCB Conversion board - A customized design double-layer PCB board that connects the pins between CyUSB3014 and ULX3s. Moreover, the board utilizes the Vcc pins on CyUSB3014 to power the ULX3s device. The middle component of Figure 1 and Figure 2.
Connect the USB 3.0 Wire to the USB 3.0 Port on CyUSB3014 and connect the other end of the wire to USB 3.0 port on laptop.
Connect the HDMI cable to the HDMI port on ULX3s.
Connect the Micro USB 2.0 cable to the FPGA. Navigate to /ulx3s-misc-colonePath/examples/dvi (Refer to STEP 4 in Prerequsite section of TechnicalManual), run the following command to flash the Verilog code to FPGA.
./loadToFlash.sh
cd to /pathOfClonedEdid/userProgram (refer to step 5 of prerequisite in TechnicalManual)
Modify the Line 199-2002 in Main.cpp to select the EDID file that match to the desired screen information.
NOTE: To generate edid file for a screen resolution that is not included in the GitHub repo, please check out the EDID project by searching the AnalogDisplay.md. Once located the did file, run the bash instruction under How to install EDID file and copy the new edid binary file to the project folder.
Run the following code to compile the program
make clean
make
cd to into the directory of /ulx3s-misc-colonePath/examples/dvi (refer to step 4 of Prerequisite in TechnicalManual )
Modify line 1-3 of top_usbtest.v
NOTE Due to the imperfect design of the PCB Conversion board, the current support resolution is listed below. For more details on the PCB conversion board, please refer to the technical manual. The list will be updated once a better PCB board design comes out
Resolution | FPS |
---|---|
640x400 | 30 or 60 HZ |
640x480 | 30 or 60 HZ |
720x576 | 30 HZ |
800x480 | 30 HZ |
1366x768 | 30 HZ |
1280x1024 | 30 HZ |
1920x1080 | 25 HZ |
Re-compile the Verilog code and flash the Verilog by running the following command.
./loadToFlash.sh
Press the reset button for about 5 seconds. NOTE Currently, the reset button is configured to be the right movement button(see Picture below). You are welcome to reconfigure the button by making change in the verilog code. However, be sure to remember to recompile and re-flash the verilog code after your change, refer to step 4 of Instruction/Operation .
cd back to /pathOfClonedEdid/userProgram ( refer in step 1 of Instruction/Operation ) and run the following command
./main
After a few seconds, the screen will blink and the monitor will show the newly configured screen.
- When the screen is distorted or out of the image
- First close the ./main program on the laptop by press ctrl+c
- Press the reset button(refer to step 5 of Instruction/Operation) for around 5 seconds or longer.
- Rerun the ./main program
- When No image is showing on the monitor Refer to the Instruction/Operation section to choose a lower/higher resolution screen setting.
If you have any issues or questions regarding the project, please create a new issue in the Github Repo and mention me in the discussion. I will try my best to respond to the question as soon as possible.