αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš HDMI αž‘αžΈαž–αžΈαžšαž‘αŸ… Raspberry Pi3 αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ DPI αž“αž·αž„αž”αž“αŸ’αž‘αŸ‡ FPGA


αžœαžΈαžŠαŸαž’αžΌαž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αŸ– αž”αž“αŸ’αž‘αŸ‡ Raspberry Pi3 αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆαžαžΆαž˜αžšαž™αŸˆαž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ GPIO αž‚αžΊαž‡αžΆαž”αž“αŸ’αž‘αŸ‡ FPGA Mars Rover2rpi (Cyclone IV) αžŠαŸ‚αž›αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš HDMI αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžšαž‘αžΈαž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆαž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ HDMI αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αŸƒ Raspberry Pi3 αŸ” αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžšαž–αžΈαžšαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαŸ”

αž”αž“αŸ’αž‘αŸ‡ Raspberry Pi3 αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ GPIO αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΆαžαž–αž„αŸ’αžšαžΈαž€αž•αŸ’αžŸαŸαž„αŸ—αŸ– αž§αž”αž€αžšαžŽαŸαž…αžΆαž”αŸ‹αžŸαž‰αŸ’αž‰αžΆ, LEDs, αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆαž˜αŸ‰αžΌαž‘αŸαžš stepper αž“αž·αž„αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ” αž˜αž»αžαž„αžΆαžšαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸƒαž˜αŸ’αž‡αž»αž›αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž‚αžΊαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αŸ’αžšαž€αŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ GPIO ALT2 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžαžΌαžšαž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžšαž”αŸ€αž”αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ DPI, αž”αž„αŸ’αž αžΆαž‰αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ” αž˜αžΆαž“αž€αžΆαžαž–αž„αŸ’αžšαžΈαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš VGA αžαžΆαž˜αžšαž™αŸˆ DPI αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‘αžΈαž˜αž½αž™ αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš VGA αž›αŸ‚αž„αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž’αž˜αŸ’αž˜αžαžΆαžŠαžΌαž… HDMI αž‘αŸ€αžαž αžΎαž™ αž αžΎαž™αž‘αžΈαž–αžΈαžš αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αžŒαžΈαž‡αžΈαžαž›αž‚αžΊαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„ analogue αž€αžΆαž“αŸ‹αžαŸ‚αžαŸ’αž›αžΆαŸ†αž„αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž 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 αž’αŸ’αž›αžΆαž€αŸ‹αž…αŸαž‰αŸ” αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ αžŸαž·αžαžŸαž€αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžšαž˜αžΆαž“ pinout αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„ Raspberry αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž”αž„αŸ’αžœαž·αž›αž€αŸ’αžαžΆαžšαž”αžΆαž“ 90 αžŠαžΊαž€αŸ’αžšαŸ αž αžΎαž™αž“αŸ…αžαŸ‚αž—αŸ’αž‡αžΆαž”αŸ‹αžœαžΆαž‘αŸ… raspberry αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†:

αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš HDMI αž‘αžΈαž–αžΈαžšαž‘αŸ… Raspberry Pi3 αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ DPI αž“αž·αž„αž”αž“αŸ’αž‘αŸ‡ FPGA

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ JTAG αžαžΆαž„αž€αŸ’αžšαŸ… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αž‰αŸ’αž αžΆαž‘αŸαŸ”

αž“αŸ…αžαŸ‚αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαžαžΌαž…αž˜αž½αž™αŸ” αž˜αž·αž“αž˜αŸ‚αž“αžšαžΆαž›αŸ‹αž˜αŸ’αž‡αž»αž› FPGA αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž“αžΆαž‘αž·αž€αžΆαž“αŸ„αŸ‡αž‘αŸαŸ” αž˜αžΆαž“αžαŸ‚αž˜αŸ’αž‡αž»αž›αž–αž·αžŸαŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαžΆ GPIO_0 CLK signal αž˜αž·αž“αžˆαžΆαž“αžŠαž›αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› FPGA αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž“αžΆαž‘αž·αž€αžΆ FPGA αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αžαŸ’αžŸαŸ‚αž˜αž½αž™αž“αŸ…αž›αžΎαž€αŸ’αžšαž˜αŸ‰αžΆαŸ” αžαŸ’αž‰αž»αŸ†αž—αŸ’αž‡αžΆαž”αŸ‹ GPIO_0 αž“αž·αž„αžŸαž‰αŸ’αž‰αžΆ KEY[1] αžšαž”αžŸαŸ‹αž€αŸ’αžšαž»αž˜αž”αŸ’αžšαžΉαž€αŸ’αžŸαžΆαž—αž·αž”αžΆαž›αŸ–

αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš HDMI αž‘αžΈαž–αžΈαžšαž‘αŸ… Raspberry Pi3 αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ DPI αž“αž·αž„αž”αž“αŸ’αž‘αŸ‡ FPGA

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αž“αŸ’αžαž·αž…αž’αŸ†αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„ FPGA αŸ” αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž…αž˜αŸ’αž”αž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαž‰αŸ’αž‰αžΆ HDMI αž‚αžΊαž”αŸ’αžšαŸαž€αž„αŸ‹αžαŸ’αž–αžŸαŸ‹αžŽαžΆαžŸαŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ HDMI pinout αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžαžΆαžŸαž‰αŸ’αž‰αžΆ RGB αž₯αž‘αžΌαžœαž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαž‰αŸ’αž‰αžΆαžŒαžΈαž•αŸαžšαŸ‰αž„αŸ‹αžŸαŸ’αž™αŸ‚αž›αžŸαŸ€αžšαŸ€αž›αŸ–

αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš HDMI αž‘αžΈαž–αžΈαžšαž‘αŸ… Raspberry Pi3 αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ DPI αž“αž·αž„αž”αž“αŸ’αž‘αŸ‡ FPGA

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž‰αŸ’αž‰αžΆαžŒαžΈαž•αŸαžšαŸ‰αž„αŸ‹αžŸαŸ’αž™αŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαž™αž»αž‘αŸ’αž’αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž€αžΆαžšαž‡αŸ’αžšαŸ€αžαž‡αŸ’αžšαŸ‚αž€αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž‘αžΌαž‘αŸ…αž“αŸ…αž›αžΎαžαŸ’αžŸαŸ‚αž”αž‰αŸ’αž‡αžΌαž“αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž€αžΌαžŠαž”αŸ’αžšαžΆαŸ†αž”αžΈαž”αŸŠαžΈαžαžŠαžΎαž˜αž“αŸƒαžŸαž‰αŸ’αž‰αžΆαž–αžŽαŸŒαž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αŸ…αž‡αžΆ TMDS 10 αž”αŸŠαžΈαž (αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αžŸαž‰αŸ’αž‰αžΆαžŒαžΈαž•αŸαžšαŸ‰αž„αŸ‹αžŸαŸ’αž™αŸ‚αž›αž’αž”αŸ’αž”αž”αžšαž˜αžΆ)αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαž–αž·αžŸαŸαžŸαžŠαžΎαž˜αŸ’αž”αžΈαžŠαž€αžŸαž˜αžΆαžŸαž’αžΆαžαž» DC αž…αŸαž‰αž–αžΈαžŸαž‰αŸ’αž‰αžΆ αž“αž·αž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž”αŸ’αžαžΌαžšαžŸαž‰αŸ’αž‰αžΆαž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αžΆαžαŸ‹αžŒαžΈαž•αŸαžšαŸ‰αž„αŸ‹αžŸαŸ’αž™αŸ‚αž›αŸ” αžŠαŸ„αž™αžŸαžΆαžš 10 αž”αŸŠαžΈαžαž₯αž‘αžΌαžœαž“αŸαŸ‡αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΌαž“αžαžΆαž˜αž”αž“αŸ’αž‘αžΆαžαŸ‹αžŸαŸ€αžšαŸ€αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž½αž™αž”αŸƒαž“αŸƒαž–αžŽαŸŒ αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž›αŸ’αž”αžΏαž“αž“αžΆαž‘αž·αž€αžΆαžŸαŸ€αžšαŸ€αž›αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„ 10 αžŠαž„αž“αŸƒαž›αŸ’αž”αžΏαž“αž“αžΆαž‘αž·αž€αžΆαž—αžΈαž€αžŸαŸ‚αž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž™αž€αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αŸ€αž”αžœαžΈαžŠαŸαž’αžΌ 1280x720 60Hz αž“αŸ„αŸ‡αž”αŸ’αžšαŸαž€αž„αŸ‹αž—αžΈαž€αžŸαŸ‚αž›αž“αŸƒαžšαž”αŸ€αž”αž“αŸαŸ‡αž‚αžΊ 74,25 MHz αŸ” αžŸαŸ€αžšαŸ€αž›αž‚αž½αžšαžαŸ‚αž˜αžΆαž“ 742,5 MHz αŸ”

αž‡αžΆαž’αž€αž»αžŸαž› FPGAs αž’αž˜αŸ’αž˜αžαžΆαž˜αž·αž“αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž“αŸαŸ‡αž‘αŸαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž™αžΎαž„ FPGA αž˜αžΆαž“αž˜αŸ’αž‡αž»αž› DDIO αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αžšαž½αž…αž‘αŸ…αž αžΎαž™αžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž‚αžΊαž‡αžΆ 2-to-1 serializers αŸ” αž“αŸ„αŸ‡αž‚αžΊαž–αž½αž€αž‚αŸαž’αžΆαž…αž”αž‰αŸ’αž…αŸαž‰αž–αžΈαžšαž”αŸŠαžΈαžαž‡αžΆαž”αŸ‹αŸ—αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαž‚αŸ‚αž˜αž€αžΎαž“αž‘αžΎαž„ αž“αž·αž„αž’αŸ’αž›αžΆαž€αŸ‹αž…αž»αŸ‡αž“αŸƒαž”αŸ’αžšαŸαž€αž„αŸ‹αž“αžΆαž‘αž·αž€αžΆαŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„ FPGA αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž˜αž·αž“αž˜αŸ‚αž“ 740 MHz αž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚ 370 MHz αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž’αžΆαžαž»αž›αž‘αŸ’αž’αž•αž› DDIO αž“αŸ…αž€αŸ’αž“αž»αž„ FPGA αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ 370 MHz αž‚αžΊαž‡αžΆαž”αŸ’αžšαŸαž€αž„αŸ‹αžŠαŸ‚αž›αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž αžΎαž™αŸ” αž‡αžΆαž’αž€αž»αžŸαž› αžšαž”αŸ€αž” 1280x720 αž‚αžΊαž‡αžΆαžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αŸ” αž‚αž»αžŽαž—αžΆαž–αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž–αžŸαŸ‹αž˜αž·αž“αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Cyclone IV FPGA αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎ Mars Rover2rpi boardαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž…αž“αžΆ αž”αŸ’αžšαŸαž€αž„αŸ‹αž—αžΈαž€αžŸαŸ‚αž›αž”αž‰αŸ’αž…αžΌαž› 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

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‘αŸ†αž“αž„αž‡αžΆαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž“αŸ„αŸ‡αž‘αŸαŸ” αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžš megafunction ALTDDIO_OUT αžšαž”αžŸαŸ‹ Alter αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αž’αžΆαžαž»αž›αž‘αŸ’αž’αž•αž› DDIO αž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΎαžŸαž˜αžΆαžŸαž’αžΆαžαž»αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ ALTDDIO_OUT αŸ”

αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž’αžΆαž…αž˜αžΎαž›αž‘αŸ…αž–αž·αž”αžΆαž€αž”αž“αŸ’αžαž·αž… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ Verilog HDL αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž“αŸ…αž›αžΎ github.

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž„αŸ’αž€αž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ FPGA αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αŸαž‰αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αŸ‡αžˆαžΈαž” EPCS αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžš Mars Rover2rpiαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαžΆαž˜αž–αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‘αŸ…αž€αŸ’αžšαž»αž˜αž”αŸ’αžšαžΉαž€αŸ’αžŸαžΆαž—αž·αž”αžΆαž› FPGA αž“αŸ„αŸ‡ FPGA αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž–αž“αŸ’αž›αžΊ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž“αž·αž™αžΆαž™αž”αž“αŸ’αžαž·αž…αž’αŸ†αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹ Raspberry αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αŸ”

αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž›αžΎ Raspberry PI OS (32 bit) αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ Debian Buster, Version: August 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 αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž˜αŸ‰αžΌαž“αžΈαž‘αŸαžšαž–αžΈαžšαž“αŸ…αž›αžΎ framebuffers αž–αžΈαžš /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