Π’Ρ‚ΠΎΡ€ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3 ΠΏΡ€Π΅ΠΊΡƒ DPI ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ FPGA ΠΏΠ»ΠΎΡ‡Π°


Ова Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°: ΠΏΠ»ΠΎΡ‡ΠΊΠ° Raspberry Pi3, ΠΏΠΎΠ²Ρ€Π·Π°Π½Π° со Π½Π΅Π° ΠΏΡ€Π΅ΠΊΡƒ GPIO ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ Π΅ FPGA ΠΏΠ»ΠΎΡ‡Π° Mars Rover2rpi (Cyclone IV), Π½Π° која Π΅ ΠΏΠΎΠ²Ρ€Π·Π°Π½ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€. Π’Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π΅ ΠΏΠΎΠ²Ρ€Π·Π°Π½ ΠΏΡ€Π΅ΠΊΡƒ стандардниот HDMI ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3. Π‘Γ¨ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΠΊΠ°ΠΊΠΎ систСм со Π΄Π²ΠΎΠ΅Π½ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€.

Π‘Π»Π΅Π΄Π½ΠΎ ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ сС спровСдува ΠΎΠ²Π°.

ΠŸΠΎΠΏΡƒΠ»Π°Ρ€Π½Π°Ρ‚Π° ΠΏΠ»ΠΎΡ‡ΠΊΠ° Raspberry Pi3 ΠΈΠΌΠ° GPIO ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΊΡƒ кој ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ²Ρ€Π·Π΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΡ‡ΠΊΠΈ Π·Π° ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΡšΠ΅: сСнзори, LED Π΄ΠΈΠΎΠ΄ΠΈ, Π΄Ρ€Π°Ρ˜Π²Π΅Ρ€ΠΈ Π·Π° стСпСр ΠΌΠΎΡ‚ΠΎΡ€ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ повСќС. Π’ΠΎΡ‡Π½Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π° сСкој ΠΏΠΈΠ½ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ зависи ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π°. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° GPIO ALT2 Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΡ‚Π΅ ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ Π²ΠΎ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ DPI, ΠŸΡ€ΠΈΠΊΠ°ΠΆΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ. ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΡ‡ΠΊΠΈ Π·Π° ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π½Π° VGA ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈ ΠΏΡ€Π΅ΠΊΡƒ DPI. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΡ€Π²ΠΎ, VGA ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚Π΅ вСќС Π½Π΅ сС Ρ‚ΠΎΠ»ΠΊΡƒ Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ HDMI, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎ, Π΄ΠΈΠ³ΠΈΡ‚Π°Π»Π½ΠΈΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π΅ сè ΠΏΠΎΠ΄ΠΎΠ±Π°Ρ€ ΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³Π½ΠΈΠΎΡ‚. Π—Π³ΠΎΡ€Π° Π½Π° Ρ‚ΠΎΠ°, DAC Π½Π° Ρ‚Π°ΠΊΠ²ΠΈΡ‚Π΅ ΠΏΠ»ΠΎΡ‡ΠΈ Π·Π° ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° VGA ΠΎΠ±ΠΈΡ‡Π½ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° R-2-R ΡΠΈΠ½ΡŸΠΈΡ€ΠΈ ΠΈ чСсто Π½Π΅ повСќС ΠΎΠ΄ 6 Π±ΠΈΡ‚Π° ΠΏΠΎ боја.

Π’ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ ALT2, ΠΏΠΈΠ½ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ GPIO Π³ΠΎ ΠΈΠΌΠ°Π°Ρ‚ слСдново Π·Π½Π°Ρ‡Π΅ΡšΠ΅:

Π’Ρ‚ΠΎΡ€ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3 ΠΏΡ€Π΅ΠΊΡƒ DPI ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ FPGA ΠΏΠ»ΠΎΡ‡Π°

ОвдС Π³ΠΈ ΠΎΠ±ΠΎΠΈΠ² RGB ΠΏΠΈΠ½ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ Ρ†Ρ€Π²Π΅Π½ΠΎ, Π·Π΅Π»Π΅Π½ΠΎ ΠΈ сино соодвСтно. Π”Ρ€ΡƒΠ³ΠΈ Π²Π°ΠΆΠ½ΠΈ сигнали сС сигналитС V-SYNC ΠΈ H-SYNC, ΠΊΠ°ΠΊΠΎ ΠΈ CLK. Π€Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° часовникот CLK Π΅ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° која врСдноститС Π½Π° пиксСли сС Π΅ΠΌΠΈΡ‚ΡƒΠ²Π°Π°Ρ‚ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚; Ρ‚ΠΎΠ° зависи ΠΎΠ΄ ΠΈΠ·Π±Ρ€Π°Π½ΠΈΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ.

Π—Π° Π΄Π° ΠΏΠΎΠ²Ρ€Π·Π΅Ρ‚Π΅ Π΄ΠΈΠ³ΠΈΡ‚Π°Π»Π΅Π½ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ снимитС DPI сигналитС Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ ΠΈ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π²ΠΎ HDMI сигнали. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° нСкој Π²ΠΈΠ΄ FPGA ΠΏΠ»ΠΎΡ‡Π°. Како ΡˆΡ‚ΠΎ сС испоставува, ΠΏΠ»ΠΎΡ‡ΠΊΠ°Ρ‚Π° Mars Rover2rpi Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΠΎΠ²ΠΈΠ΅ Ρ†Π΅Π»ΠΈ. Π—Π° волја Π½Π° вистината, Π³Π»Π°Π²Π½Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ²Π°Π° ΠΏΠ»ΠΎΡ‡Π° ΠΏΡ€Π΅ΠΊΡƒ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π΅Π½ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:

Π’Ρ‚ΠΎΡ€ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3 ΠΏΡ€Π΅ΠΊΡƒ DPI ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ FPGA ΠΏΠ»ΠΎΡ‡Π°

Оваа ΠΏΠ»ΠΎΡ‡Π° сС користи Π·Π° Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° GPIO ΠΏΠΎΡ€Ρ‚ΠΈ ΠΈ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π½Π° повСќС ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ ΡƒΡ€Π΅Π΄ΠΈ со raspberry. Π’ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, 4 GPIO сигнали со ΠΎΠ²Π°Π° врска сС користат Π·Π° JTAG сигнали, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΎΠ΄ Raspberry ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π²Ρ‡ΠΈΡ‚Π° Ρ„ΠΈΡ€ΠΌΠ²Π΅Ρ€ΠΎΡ‚ FPGA Π²ΠΎ FPGA. ΠŸΠΎΡ€Π°Π΄ΠΈ ΠΎΠ²Π°, ΠΎΠ²Π°Π° стандардна врска Π½Π΅ ΠΌΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°; 4 DPI сигнали испаѓаат. Π—Π° ΡΡ€Π΅ΡœΠ°, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ Ρ‡Π΅ΡˆΠ»ΠΈ Π½Π° Ρ‚Π°Π±Π»Π°Ρ‚Π° ΠΈΠΌΠ°Π°Ρ‚ ΠΏΠΈΠ½ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π΅Π½ со Raspberry. Π’Π°ΠΊΠ°, ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ја Ρ€ΠΎΡ‚ΠΈΡ€Π°ΠΌ Ρ‚Π°Π±Π»Π°Ρ‚Π° Π·Π° 90 стСпСни ΠΈ сСпак Π΄Π° ја ΠΏΠΎΠ²Ρ€Π·Π°ΠΌ со ΠΌΠΎΡ˜Π°Ρ‚Π° ΠΌΠ°Π»ΠΈΠ½Π°:

Π’Ρ‚ΠΎΡ€ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3 ΠΏΡ€Π΅ΠΊΡƒ DPI ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ FPGA ΠΏΠ»ΠΎΡ‡Π°

Π‘Π΅ΠΊΠ°ΠΊΠΎ, ќС ΠΌΠΎΡ€Π° Π΄Π° користитС Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ΅Π½ JTAG ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€, Π½ΠΎ Ρ‚ΠΎΠ° Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π‘Π΅ ΡƒΡˆΡ‚Π΅ ΠΈΠΌΠ° ΠΌΠ°Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. НС сСкој FPGA ΠΏΠΈΠ½ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π·Π΅Π½ часовник. Има само Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ посвСтСни ΠΈΠ³Π»ΠΈΡ‡ΠΊΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС користат Π·Π° ΠΎΠ²ΠΈΠ΅ Ρ†Π΅Π»ΠΈ. Π’Π°ΠΊΠ°, ΠΎΠ²Π΄Π΅ сС ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° сигналот GPIO_0 CLK Π½Π΅ Π³ΠΎ достигнува Π²Π»Π΅Π·ΠΎΡ‚ FPGA, кој ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π· Π½Π° часовникот FPGA. Π’Π°ΠΊΠ°, сСпак ΠΌΠΎΡ€Π°Π² Π΄Π° ставам Π΅Π΄Π½Π° ΠΆΠΈΡ†Π° Π½Π° ΡˆΠ°Π»ΠΎΡ‚. Π“ΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΠΌ GPIO_0 ΠΈ сигналот KEY[1] Π½Π° Ρ‚Π°Π±Π»Π°Ρ‚Π°:

Π’Ρ‚ΠΎΡ€ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3 ΠΏΡ€Π΅ΠΊΡƒ DPI ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ FPGA ΠΏΠ»ΠΎΡ‡Π°

Π‘Π΅Π³Π° ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΌΠ°Π»ΠΊΡƒ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ FPGA. Π“Π»Π°Π²Π½Π°Ρ‚Π° Ρ‚Π΅ΡˆΠΊΠΎΡ‚ΠΈΡ˜Π° Π²ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ HDMI сигнали сС ΠΌΠ½ΠΎΠ³Ρƒ високитС Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΠΈ. Ако Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Π·Π° HDMI ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π΅ΠΊΠ° RGB сигналитС сСга сС сСриски Π΄ΠΈΡ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ сигнали:

Π’Ρ‚ΠΎΡ€ HDMI ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Raspberry Pi3 ΠΏΡ€Π΅ΠΊΡƒ DPI ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ FPGA ΠΏΠ»ΠΎΡ‡Π°

Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Π΄ΠΈΡ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π΅Π½ сигнал Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° сС Π±ΠΎΡ€ΠΈΡ‚Π΅ со ΠΏΡ€Π΅Ρ‡ΠΊΠΈ Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΈΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π΄Π°Π»Π½ΠΎΠ²ΠΎΠ΄ΠΎΡ‚. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΠΎΡ‚ осум-Π±ΠΈΡ‚Π΅Π½ ΠΊΠΎΠ΄ Π½Π° сСкој сигнал Π²ΠΎ боја сС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π° Π²ΠΎ 10-Π±ΠΈΡ‚Π½Π° TMDS (ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° Π΄ΠΈΡ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° со Ρ‚Ρ€Π°Π½Π·ΠΈΡ†ΠΈΡ˜Π°). Ова Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° DC ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ‚Π° ΠΎΠ΄ сигналот ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΡ€Π΅Ρ„Ρ€Π»ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° сигналот Π²ΠΎ Π΄ΠΈΡ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° линија. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ 10 Π±ΠΈΡ‚Π° сСга Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС прСнСсат ΠΏΡ€Π΅ΠΊΡƒ сСриската линија Π·Π° Π΅Π΄Π΅Π½ Π±Π°Ρ˜Ρ‚ боја, ΠΈΠ·Π»Π΅Π³ΡƒΠ²Π° Π΄Π΅ΠΊΠ° Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π½Π° часовникот Π½Π° ΡΠ΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ 10 ΠΏΠ°Ρ‚ΠΈ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ° ΠΎΠ΄ Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π½Π° часовникот Π½Π° пиксСлитС. Ако Π³ΠΎ Π·Π΅ΠΌΠ΅ΠΌΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ 1280x720 60Hz, Ρ‚ΠΎΠ³Π°Ρˆ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° пиксСли Π½Π° овој Ρ€Π΅ΠΆΠΈΠΌ Π΅ 74,25 MHz. Π‘Π΅Ρ€ΠΈΡ˜ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ 742,5 MHz.

Π Π΅Π΄ΠΎΠ²Π½ΠΈΡ‚Π΅ FPGA, Π·Π° ΠΆΠ°Π», Π½Π΅ сС способни Π·Π° ΠΎΠ²Π°. Π‘Π΅ΠΏΠ°ΠΊ, Π·Π° наша ΡΡ€Π΅ΡœΠ°, FPGA ΠΈΠΌΠ° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ DDIO ΠΏΠΈΠ½ΠΎΠ²ΠΈ. Ова сС Π·Π°ΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ ΠΊΠΎΠΈ сС вСќС, ΠΊΠ°ΠΊΠΎ Π΄Π° сС, ΡΠ΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ 2-Π½Π°-1. Π’ΠΎΠ° Π΅, Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° ΠΈΠ·Π»Π΅Π·Π°Ρ‚ Π΄Π²Π° Π±ΠΈΡ‚Π° послСдоватСлно Π½Π° растСчкитС ΠΈ ΠΎΠΏΠ°Ρ“Π°Ρ‡ΠΊΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΠ²ΠΈ Π½Π° Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° часовникот. Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ FPGA Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС 740 MHz, Ρ‚ΡƒΠΊΡƒ 370 MHz, Π½ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° користитС DDIO ΠΈΠ·Π»Π΅Π·Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π²ΠΎ FPGA. Π‘Π΅Π³Π° 370 MHz Π΅ вСќС цСлосно достиТна Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°. Π—Π° ΠΆΠ°Π», Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ 1280x720 Π΅ Π³Ρ€Π°Π½ΠΈΡ†Π°. НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС постигнС ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ° Ρ€Π΅Π·ΠΎΠ»ΡƒΡ†ΠΈΡ˜Π° Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ Cyclone IV FPGA инсталиран Π½Π° ΠΏΠ»ΠΎΡ‡ΠΊΠ°Ρ‚Π° Mars Rover2rpi.

Π—Π½Π°Ρ‡ΠΈ, Π²ΠΎ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΎΡ‚, Π²Π»Π΅Π·Π½Π°Ρ‚Π° Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π° Π½Π° пиксСли 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

Но, Π½Π°Ρ˜Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π½Π° Ρ‚ΠΎΡ˜ Π½Π°Ρ‡ΠΈΠ½. Π’Ρ€Π΅Π±Π° Π΄Π° ја користитС ΠΌΠ΅Π³Π°Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Alter ALTDDIO_OUT Π·Π° Π΄Π° Π³ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡ‚Π΅ ΠΈΠ·Π»Π΅Π·Π½ΠΈΡ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ DDIO. ΠœΠΎΡ˜ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ја користи ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ALTDDIO_OUT.

Π‘Π΅Ρ‚ΠΎ ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΌΠ°Π»ΠΊΡƒ Π½Π΅Π·Π³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΈΠΎΡ‚ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ напишан Π²ΠΎ Verilog HDL ΠΎΠ²Π΄Π΅ Π½Π° github.

ΠšΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ Ρ„ΠΈΡ€ΠΌΠ²Π΅Ρ€ Π·Π° FPGA сС Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π²ΠΎ Ρ‡ΠΈΠΏΠΎΡ‚ EPCS инсталиран Π½Π° ΠΏΠ»ΠΎΡ‡ΠΊΠ°Ρ‚Π° Mars Rover2rpi. Π’Π°ΠΊΠ°, ΠΊΠΎΠ³Π° Π½Π°ΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ќС сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ Π½Π° FPGA ΠΏΠ»ΠΎΡ‡Π°Ρ‚Π°, FPGA ќС сС ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΎΠ΄ Ρ„Π»Π΅Ρˆ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΈ ќС стартува.

Π‘Π΅Π³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡƒ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° самата Малина.

ΠŸΡ€Π°Π²Π°ΠΌ СкспСримСнти Π½Π° Raspberry PI OS (32 Π±ΠΈΡ‚Π΅Π½) Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Debian Buster, Π²Π΅Ρ€Π·ΠΈΡ˜Π°: август 2020 Π³ΠΎΠ΄ΠΈΠ½Π°,
Π”Π°Ρ‚ΡƒΠΌ Π½Π° издавањС: 2020-08-20, Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚: 5.4.

Π’Ρ€Π΅Π±Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π΄Π²Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ:

  • ΡƒΡ€Π΅Π΄Π΅Ρ‚Π΅ ја Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° config.txt;
  • ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° X сСрвСр Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со Π΄Π²Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈ.

Кога ја ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° /boot/config.txt, Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°:

  1. ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° i2c, i2s, spi;
  2. ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ DPI ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΏΡ€Π΅ΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ dtoverlay=dpi24;
  3. ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ 1280Γ—720 60Hz, 24 Π±ΠΈΡ‚Π° ΠΏΠΎ пиксСл Π½Π° DPI;
  4. Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΠΎΡ‚ Π±Ρ€ΠΎΡ˜ Π½Π° framebuffers 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 ќС ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° користат Π΄Π²Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈ.

МоТС Π΄Π° сС Π½Π°Ρ˜Π΄Π°Ρ‚ опис ΠΈ Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌ Π½Π° ΠΊΠΎΠ»ΠΎΡ‚ΠΎ Π½Π° ΠΏΠ»ΠΎΡ‡ΠΊΠ°Ρ‚Π° Mars Rover2rpi ΠŸΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊΠ°.

Π˜Π·Π²ΠΎΡ€: www.habr.com