ΠΠ° ΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ: ΠΏΠ»Π°ΡΠ° Raspberry Pi3, ΠΊ Π½Π΅ΠΉ, ΡΠ΅ΡΠ΅Π· ΡΠ°Π·ΡΠ΅ΠΌ GPIO, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° FPGA ΠΏΠ»Π°ΡΠ° ΠΠ°ΡΡΠΎΡ ΠΎΠ΄2rpi (Cyclone IV), ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ HDMI ΠΌΠΎΠ½ΠΈΡΠΎΡ. ΠΡΠΎΡΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΡΠ΅Π· ΡΡΠ°ΡΠ½ΡΠΉ ΡΠ°Π·ΡΠ΅ΠΌ HDMI Raspberry Pi3. ΠΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° Ρ Π΄Π²ΡΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°ΠΌΠΈ.
ΠΠ°Π»ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ.
ΠΠ° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΠ΅ Raspberry Pi3 Π΅ΡΡΡ ΡΠ°Π·ΡΠ΅ΠΌ GPIO, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠ»Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ: Π΄Π°ΡΡΠΈΠΊΠΈ, ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ, Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΡΠ°Π³ΠΎΠ²ΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠ°Π·ΡΠ΅ΠΌΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ². ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ GPIO ALT2 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ ΡΠ°Π·ΡΠ΅ΠΌ Π² ΡΠ΅ΠΆΠΈΠΌ DPI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Display Parallel Interface. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠ»Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ VGA ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠ², ΡΠ΅ΡΠ΅Π· DPI. ΠΠ΄Π½Π°ΠΊΠΎ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΠΎΠ½ΠΈΡΠΎΡΡ VGA ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Ρ, ΠΊΠ°ΠΊ HDMI, Π° Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²ΡΠ΅ Π»ΡΡΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ Π¦ΠΠ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ VGA ΠΏΠ»Π°ΡΠ°Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π² Π²ΠΈΠ΄Π΅ R-2-R ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈ ΡΠ°ΡΡΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 6 Π±ΠΈΡ Π½Π° ΡΠ²Π΅Ρ.
Π ΡΠ΅ΠΆΠΈΠΌΠ΅ ALT2 ΠΏΠΈΠ½Ρ ΡΠ°Π·ΡΠ΅ΠΌΠ° GPIO ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
Π― Π·Π΄Π΅ΡΡ ΡΠ°ΡΠΊΡΠ°ΡΠΈΠ» RGB Π²ΡΠ²ΠΎΠ΄Ρ ΡΠ°Π·ΡΠ΅ΠΌΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΊΡΠ°ΡΠ½ΡΠΉ, Π·Π΅Π»Π΅Π½ΡΠΉ ΠΈ ΡΠΈΠ½ΠΈΠΉ ΡΠ²Π΅ΡΠ°. ΠΡΡΠ³ΠΈΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ ΡΡΠΎ ΡΠΈΠ³Π½Π°Π»Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π²Π΅ΡΡΠΊΠΈ V-SYNC ΠΈ H-SYNC, Π° ΡΠ°ΠΊ ΠΆΠ΅ CLK. Π’Π°ΠΊΡΠΎΠ²Π°Ρ ΡΠ°ΡΡΠΎΡΠ° CLK ΡΡΠΎ ΡΠ°ΡΡΠΎΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΠΊcΠ΅Π»Π΅ΠΉ Π²ΡΠ΄Π°ΡΡΡΡ Π½Π° ΡΠ°Π·ΡΠ΅ΠΌ, ΠΎΠ½Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ°.
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ HDMI ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π½ΡΠΆΠ½ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠΈΠ³Π½Π°Π»Ρ DPI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΡΠΈΠ³Π½Π°Π»Ρ HDMI. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ FPGA ΠΏΠ»Π°ΡΡ. ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΠΏΠ»Π°ΡΠ° ΠΠ°ΡΡΠΎΡ ΠΎΠ΄2rpi ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ. ΠΠΎ ΠΏΡΠ°Π²Π΄Π΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΠΈΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
ΠΡΠ° ΠΏΠ»Π°ΡΠ° ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° GPIO ΠΏΠΎΡΡΠΎΠ² ΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠΈΡΠ»Π° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΡΡ
ΡΡΡΡΠΎΠΉΡΡΠ² ΠΊ raspberry. ΠΡΠΈ ΡΡΠΎΠΌ, 4 ΡΠΈΠ³Π½Π°Π»Π° GPIO ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΠ΄ JTAG ΡΠΈΠ³Π½Π°Π»Ρ, ΡΠ°ΠΊ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ· ΡΠ°ΡΠΏΠ±Π΅ΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ FPGA ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π² ΠΠΠΠ‘. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½Π΅ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ, Π²ΡΠΏΠ°Π΄Π°ΡΡ 4 DPI ΡΠΈΠ³Π½Π°Π»Π°. ΠΠΎ ΡΡΠ°ΡΡΡΡ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π³ΡΠ΅Π±Π΅Π½ΠΎΡΠΊΠΈ Π½Π° ΠΏΠ»Π°ΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ Ρ Raspberry ΡΠ°ΡΠΏΠΈΠ½ΠΎΠ²ΠΊΡ. Π’Π°ΠΊ, ΡΡΠΎ Ρ ΠΌΠΎΠ³Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΠ»Π°ΡΡ Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π΅Π΅ ΠΊ ΠΌΠΎΠ΅ΠΉ ΠΌΠ°Π»ΠΈΠ½ΠΊΠ΅:
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ JTAG ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΡΠΎΡ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΠ΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ΅ ΠΆΠ΅ Π΅ΡΡΡ. ΠΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ²ΠΎΠ΄ FPGA ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ. ΠΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ dedicated pin, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ. Π’Π°ΠΊ ΠΈ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ GPIO_0 ΡΠΈΠ³Π½Π°Π» CLK Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π½Π° Π²Π²ΠΎΠ΄ FPGA, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ ΠΠΠΠ‘. Π’Π°ΠΊ ΡΡΠΎ Π²ΡΠ΅ ΡΠ°ΠΊΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΊΠΈΠ½ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΎΠΊ Π½Π° ΠΏΠ»Π°ΡΠΊΡ. Π― ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ GPIO_0 ΠΈ ΡΠΈΠ³Π½Π°Π» KEY[1] ΠΏΠ»Π°ΡΡ:
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΠΠΠ‘. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ HDMI ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΈΠ΅ ΡΠ°ΡΡΠΎΡΡ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠΎΠΊΠΎΠ»Π΅Π²ΠΊΡ ΡΠ°Π·ΡΠ΅ΠΌΠ° HDMI, ΡΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΈΠ³Π½Π°Π»Ρ RGB ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠ³Π½Π°Π»Π°ΠΌΠΈ:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΠΎΡΠΎΡΡΡΡ Ρ ΡΠΈΠ½ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΠΌΠ΅Ρ
Π°ΠΌΠΈ Π½Π° Π»ΠΈΠ½ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ, ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ Π²ΠΎΡΡΠΌΠΈΠ±ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΡΠ²Π΅ΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² 10-ΡΠΈ Π±ΠΈΡΠ½ΡΠΉ TMDS (Transition-minimized differential signaling). ΠΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΈΠ· ΡΠΈΠ³Π½Π°Π»Π° ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π² Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ ΡΠ²Π΅ΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ 10 Π±ΠΈΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΡΠΎΠ²Π°Ρ ΡΠ°ΡΡΠΎΡΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π² 10 ΡΠ°Π· Π²ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΎΠ²Π°Ρ ΡΠ°ΡΡΠΎΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. ΠΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄Π΅ΠΎ ΡΠ΅ΠΆΠΈΠΌ 1280Ρ
720 60ΠΡ, ΡΠΎ ΡΠ°ΡΡΠΎΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° 74,25ΠΠΡ. ΠΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ 742,5ΠΠΡ.
ΠΠ±ΡΡΠ½ΡΠ΅ FPGA Π²ΠΎΠΎΠ±ΡΠ΅-ΡΠΎ Π½Π° ΡΠ°ΠΊΠΎΠ΅, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ ΡΠΏΠΎΡΠΎΠ±Π½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎ Π½Π°ΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΡΡ, Π² FPGA ΠΈΠΌΠ΅ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ DDIO. ΠΡΠΎ ΡΠ°ΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΠΊΠ°ΠΊ Π±Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°ΠΌΠΈ 2-ΠΊ-1. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π²Π° Π±ΠΈΡΠ° ΠΏΠΎ ΡΡΠΎΠ½ΡΡ ΠΈ ΡΠΏΠ°Π΄Ρ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ. ΠΠ½Π°ΡΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ FPGA ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ 740ΠΠΡ, Π° 370ΠΠΡ, Π½ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΉcΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ DDIO Π² ΠΠΠΠ‘. ΠΠΎΡ 370ΠΠΡ ΡΠΆΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠ°Ρ ΡΠ°ΡΡΠΎΡΠ°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ΅ΠΆΠΈΠΌ 1280×720 ΡΡΠΎ ΠΏΡΠ΅Π΄Π΅Π». ΠΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π² Π½Π°ΡΠ΅ΠΉ FPGA Cyclone IV ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° ΠΏΠ»Π°ΡΠ΅ ΠΠ°ΡΡΠΎΡ ΠΎΠ΄2rpi Π½Π΅ Π΄ΠΎΡΡΠΈΡΡ.
ΠΡΠ°ΠΊ, Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π²Ρ ΠΎΠ΄Π½Π°Ρ ΡΠ°ΡΡΠΎΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ CLK ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π½Π° PLL, Π³Π΄Π΅ ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΡΡΡ Π½Π° 5. ΠΠ° ΡΡΠΎΠΉ ΡΠ°ΡΡΠΎΡΠ΅ Π±Π°ΠΉΡΡ R, G, B, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΠΏΠ°ΡΡ Π±ΠΈΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ TMDS ΡΠ½ΠΊΠΎΠ΄Π΅Ρ. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Verilog HDL Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
module hdmi(
input wire pixclk, // 74MHz
input wire clk_TMDS2, // 370MHz
input wire hsync,
input wire vsync,
input wire active,
input wire [7:0]red,
input wire [7:0]green,
input wire [7:0]blue,
output wire TMDS_bh,
output wire TMDS_bl,
output wire TMDS_gh,
output wire TMDS_gl,
output wire TMDS_rh,
output wire TMDS_rl
);
wire [9:0] TMDS_red, TMDS_green, TMDS_blue;
TMDS_encoder encode_R(.clk(pixclk), .VD(red ), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_red));
TMDS_encoder encode_G(.clk(pixclk), .VD(green), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_green));
TMDS_encoder encode_B(.clk(pixclk), .VD(blue ), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_blue));
reg [2:0] TMDS_mod5=0; // modulus 5 counter
reg [4:0] TMDS_shift_bh=0, TMDS_shift_bl=0;
reg [4:0] TMDS_shift_gh=0, TMDS_shift_gl=0;
reg [4:0] TMDS_shift_rh=0, TMDS_shift_rl=0;
wire [4:0] TMDS_blue_l = {TMDS_blue[9],TMDS_blue[7],TMDS_blue[5],TMDS_blue[3],TMDS_blue[1]};
wire [4:0] TMDS_blue_h = {TMDS_blue[8],TMDS_blue[6],TMDS_blue[4],TMDS_blue[2],TMDS_blue[0]};
wire [4:0] TMDS_green_l = {TMDS_green[9],TMDS_green[7],TMDS_green[5],TMDS_green[3],TMDS_green[1]};
wire [4:0] TMDS_green_h = {TMDS_green[8],TMDS_green[6],TMDS_green[4],TMDS_green[2],TMDS_green[0]};
wire [4:0] TMDS_red_l = {TMDS_red[9],TMDS_red[7],TMDS_red[5],TMDS_red[3],TMDS_red[1]};
wire [4:0] TMDS_red_h = {TMDS_red[8],TMDS_red[6],TMDS_red[4],TMDS_red[2],TMDS_red[0]};
always @(posedge clk_TMDS2)
begin
TMDS_shift_bh <= TMDS_mod5[2] ? TMDS_blue_h : TMDS_shift_bh [4:1];
TMDS_shift_bl <= TMDS_mod5[2] ? TMDS_blue_l : TMDS_shift_bl [4:1];
TMDS_shift_gh <= TMDS_mod5[2] ? TMDS_green_h : TMDS_shift_gh [4:1];
TMDS_shift_gl <= TMDS_mod5[2] ? TMDS_green_l : TMDS_shift_gl [4:1];
TMDS_shift_rh <= TMDS_mod5[2] ? TMDS_red_h : TMDS_shift_rh [4:1];
TMDS_shift_rl <= TMDS_mod5[2] ? TMDS_red_l : TMDS_shift_rl [4:1];
TMDS_mod5 <= (TMDS_mod5[2]) ? 3'd0 : TMDS_mod5+3'd1;
end
assign TMDS_bh = TMDS_shift_bh[0];
assign TMDS_bl = TMDS_shift_bl[0];
assign TMDS_gh = TMDS_shift_gh[0];
assign TMDS_gl = TMDS_shift_gl[0];
assign TMDS_rh = TMDS_shift_rh[0];
assign TMDS_rl = TMDS_shift_rl[0];
endmodule
module TMDS_encoder(
input clk,
input [7:0] VD, // video data (red, green or blue)
input [1:0] CD, // control data
input VDE, // video data enable, to choose between CD (when VDE=0) and VD (when VDE=1)
output reg [9:0] TMDS = 0
);
wire [3:0] Nb1s = VD[0] + VD[1] + VD[2] + VD[3] + VD[4] + VD[5] + VD[6] + VD[7];
wire XNOR = (Nb1s>4'd4) || (Nb1s==4'd4 && VD[0]==1'b0);
wire [8:0] q_m = {~XNOR, q_m[6:0] ^ VD[7:1] ^ {7{XNOR}}, VD[0]};
reg [3:0] balance_acc = 0;
wire [3:0] balance = q_m[0] + q_m[1] + q_m[2] + q_m[3] + q_m[4] + q_m[5] + q_m[6] + q_m[7] - 4'd4;
wire balance_sign_eq = (balance[3] == balance_acc[3]);
wire invert_q_m = (balance==0 || balance_acc==0) ? ~q_m[8] : balance_sign_eq;
wire [3:0] balance_acc_inc = balance - ({q_m[8] ^ ~balance_sign_eq} & ~(balance==0 || balance_acc==0));
wire [3:0] balance_acc_new = invert_q_m ? balance_acc-balance_acc_inc : balance_acc+balance_acc_inc;
wire [9:0] TMDS_data = {invert_q_m, q_m[8], q_m[7:0] ^ {8{invert_q_m}}};
wire [9:0] TMDS_code = CD[1] ? (CD[0] ? 10'b1010101011 : 10'b0101010100) : (CD[0] ? 10'b0010101011 : 10'b1101010100);
always @(posedge clk) TMDS <= VDE ? TMDS_data : TMDS_code;
always @(posedge clk) balance_acc <= VDE ? balance_acc_new : 4'h0;
endmodule
ΠΠΎΡΠΎΠΌ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΡΡ ΠΏΠΎΠ΄Π°ΡΡΡΡ Π½Π° DDIO Π²ΡΡ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ΄Π°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ±ΠΈΡΠ½ΡΠΉ ΡΠΈΠ³Π½Π°Π» ΠΏΠΎ ΡΡΠΎΠ½ΡΡ ΠΈ ΡΠΏΠ°Π΄Ρ.
Π‘Π°ΠΌ DDIO ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠΌ Verilog ΠΊΠΎΠ΄ΠΎΠΌ:
module ddio(
input wire d0,
input wire d1,
input wire clk,
output wire out
);
reg r_d0;
reg r_d1;
always @(posedge clk)
begin
r_d0 <= d0;
r_d1 <= d1;
end
assign out = clk ? r_d0 : r_d1;
endmodule
ΠΠΎ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»ΡΡΠ΅ΡΠΎΠ²ΡΠΊΡΡ ΠΌΠ΅Π³Π°ΡΡΠ½ΠΊΡΠΈΡ ALTDDIO_OUT, ΡΡΠΎΠ±Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ DDIO ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. Π ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ALTDDIO_OUT.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠ΅ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΡΠ΄ΡΠ΅Π½ΠΎ, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²Π΅ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Verilog HDL, ΠΌΠΎΠΆΠ½ΠΎ
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΎΡΠΈΠ²ΠΊΠ° Π΄Π»Ρ FPGA Π·Π°ΡΠΈΠ²Π°Π΅ΡΡΡ Π² EPCS ΡΠΈΠΏ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π½Π° ΠΏΠ»Π°ΡΠ΅ ΠΠ°ΡΡΠΎΡ ΠΎΠ΄2rpi. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ ΠΏΠΎΠ΄Π°ΡΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π° ΠΏΠ»Π°ΡΡ FPGA, ΠΠΠΠ‘ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ· ΡΠ»ΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΡΠ°ΡΡΠΎΠ²Π°ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Raspberry.
Π― Π΄Π΅Π»Π°Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Π½Π° Raspberry PI OS (32 bit) based on Debian Buster, Version:August 2020,
Release date:2020-08-20, Kernel version:5.4.
ΠΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π²Π΅ Π²Π΅ΡΠΈ:
- ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» config.txt;
- ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ X ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π²ΡΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°ΠΌΠΈ.
ΠΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° /boot/config.txt Π½ΡΠΆΠ½ΠΎ:
- Π²ΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ i2c, i2s, spi;
- Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ DPI Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ²Π΅ΡΠ»Π΅Ρ dtoverlay=dpi24;
- Π½Π°ΡΡΡΠΎΠΈΡΡ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌ 1280×720 60ΠΡ, 24 Π±ΠΈΡΠ° Π½Π° ΡΠΎΡΠΊΡ Π½Π° DPI;
- ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΡΠ΅ΡΠΎΠ² 2 (max_framebuffers=2, ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²ΠΈΡΡΡ Π²ΡΠΎΡΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ /dev/fb1)
ΠΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΡΠ°ΠΉΠ»Π° config.txt Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ.
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
dtparam=i2c_arm=off
dtparam=spi=off
dtparam=i2s=off
dtoverlay=dpi24
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=1280
framebuffer_height=720
display_default_lcd=0
enable_dpi_lcd=1
dpi_group=2
dpi_mode=87
#dpi_group=1
#dpi_mode=4
dpi_output_format=0x6f027
dpi_timings=1280 1 110 40 220 720 1 5 5 20 0 0 0 60 0 74000000 3
# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18
# Additional overlays and parameters are documented /boot/overlays/README
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2
[all]
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ, Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ X ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π²ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠ² Π½Π° Π΄Π²ΡΡ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΡΠ΅ΡΠ°Ρ /dev/fb0 ΠΈ /dev/fb1:
ΠΠΎΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ /usr/share/x11/xorg.conf.d/60-dualscreen.conf ΡΠ°ΠΊΠΎΠΉ
Section "Device"
Identifier "LCD"
Driver "fbturbo"
Option "fbdev" "/dev/fb0"
Option "ShadowFB" "off"
Option "SwapbuffersWait" "true"
EndSection
Section "Device"
Identifier "HDMI"
Driver "fbturbo"
Option "fbdev" "/dev/fb1"
Option "ShadowFB" "off"
Option "SwapbuffersWait" "true"
EndSection
Section "Monitor"
Identifier "LCD-monitor"
Option "Primary" "true"
EndSection
Section "Monitor"
Identifier "HDMI-monitor"
Option "RightOf" "LCD-monitor"
EndSection
Section "Screen"
Identifier "screen0"
Device "LCD"
Monitor "LCD-monitor"
EndSection
Section "Screen"
Identifier "screen1"
Device "HDMI"
Monitor "HDMI-monitor"
EndSection
Section "ServerLayout"
Identifier "default"
Option "Xinerama" "on"
Option "Clone" "off"
Screen 0 "screen0"
Screen 1 "screen1" RightOf "screen0"
EndSection
ΠΡ ΠΈ, Π΅ΡΠ»ΠΈ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Xinerama. Π’ΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΎ Π½Π° Π΄Π²Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅ Π½Π° Π΄Π΅ΠΌΠΎ ΡΠΎΠ»ΠΈΠΊΠ΅.
ΠΠΎΡ ΠΏΠΎΠΆΠ°Π»ΡΠΉ ΠΈ Π²ΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ, ΠΈ Π²Π»Π°Π΄Π΅Π»ΡΡΡ Raspberry Pi3 ΡΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π²ΡΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°ΠΌΠΈ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΡΡ
Π΅ΠΌΡ ΠΏΠ»Π°ΡΡ ΠΠ°ΡΡΠΎΡ
ΠΎΠ΄2rpi ΠΌΠΎΠΆΠ½ΠΎ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com