เบงเบดเบเบตเปเบญเบเบตเปเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบ: เบเบฐเบเบฒเบ Raspberry Pi3, เปเบเบดเปเบเบเปเบฒเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเป GPIO, เบเบฐเบเบฒเบ FPGA Mars Rover2rpi (Cyclone IV) เบเบทเบเปเบเบทเปเบญเบกเบเปเป, เปเบเบดเปเบเปเบเบทเปเบญเบกเบเปเปเบเป HDMI. เบเปเบชเบฐเปเบเบเบเบปเบเบเบตเบชเบญเบเปเบกเปเบเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเป HDMI เบกเบฒเบเบเบฐเบเบฒเบเบเบญเบ Raspberry Pi3. เบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบฎเปเบงเบกเบเบฑเบเบเบทเบเบฑเบเบฅเบฐเบเบปเบเบเปเบเบฒเบเบเบนเป.
เบเปเปเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบญเบเบเปเบฒเบเบงเปเบฒเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบ.
เบเบฐเบเบฒเบ Raspberry Pi3 เบเบตเปเบเบดเบเบปเบกเบกเบตเบเบปเบงเปเบเบทเปเบญเบกเบเปเป GPIO เปเบเบเบเปเบฒเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฐเบเบฒเบเบเบฐเบซเบเบฒเบเบเปเบฒเบเป: เปเบเบฑเบเปเบเบต, LEDs, เปเบเปเบงเบตเบกเปเปเบเบต stepper เปเบฅเบฐเบญเบทเปเบเปเบญเบตเบ. เบเบฒเบเบเปเบฒเบเบฒเบเบเบตเปเปเบเปเบเบญเบเบเบญเบเปเบเปเบฅเบฐ pin เปเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเปเปเบกเปเบเบเบถเปเบเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบ. เบเบฒเบเบเบฑเปเบเบเปเบฒ GPIO ALT2 เบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเปเปเบเบซเบฒเปเบซเบกเบเบเบฒเบเปเบเปเบเบญเบ DPI, เบเบฒเบเบชเบฐเปเบเบเบเบฒเบเปเบเปเบเบญเบเบเบฐเบซเบเบฒเบ. เบกเบตเบเบฑเบเบเบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเป VGA เบเปเบฒเบ DPI. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบญเบดเบ, เบเป VGA เปเบกเปเบเบเปเปเบเปเบฒเบกเบฐเบเบฒเบเบทเบเบฑเบ HDMI, เปเบฅเบฐเบญเบฑเบเบเบตเบชเบญเบ, เบเบฒเบเปเบเปเบเบญเบเบเบดเบเบดเบเบญเบเปเบกเปเบเบเบตเบเปเบงเบฒเบเบฒเบเบเบฝเบเบเบฝเบ. เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, DAC เปเบเบเบฑเบเบเบฐเบซเบเบฒเบ VGA เบเบฑเปเบเบเปเบฒเบงเบเบปเบเบเบฐเบเบดเปเบฅเปเบงเปเบกเปเบเปเบฎเบฑเบเปเบเบฎเบนเบเปเบเบเบเบญเบเบเปเบญเบเปเบชเป R-2-R เปเบฅเบฐเบกเบฑเบเบเบฐเบเปเปเปเบเบตเบ 6 เบเบดเบเบเปเปเบชเบต.
เปเบเปเบซเบกเบ ALT2, เปเบเบฑเบกเปเบเบทเปเบญเบกเบเปเป GPIO เบกเบตเบเบงเบฒเบกเบซเบกเบฒเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
เบเบตเปเบเบตเปเบเปเบญเบเปเบเปเปเบชเปเบชเบต pins RGB เบเบญเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเปเปเบเบฑเบเบชเบตเปเบเบ, เบชเบตเบเบฝเบงเปเบฅเบฐเบชเบตเบเปเบฒเบเบฒเบกเบฅเปเบฒเบเบฑเบ. เบชเบฑเบเบเบฒเบเบเบตเปเบชเปเบฒเบเบฑเบเบญเบทเปเบเปเปเบกเปเบเบชเบฑเบเบเบฒเบ V-SYNC เปเบฅเบฐ H-SYNC, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ CLK. เบเบงเบฒเบกเบเบตเปเบเบญเบเปเบกเบ CLK เปเบกเปเบเบเบงเบฒเบกเบเบตเปเบเบตเปเบเปเบฒ pixels โโoutput เบเบฑเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเป; เบกเบฑเบเบเบถเปเบเบเบฑเบเบฎเบนเบเปเบเบเบงเบดเบเบตเปเบญเบเบตเปเปเบฅเบทเบญเบ.
เปเบเบทเปเบญเปเบเบทเปเบญเบกเบเปเปเบเป HDMI เบเบดเบเบดเบเบญเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฑเบเบชเบฑเบเบเบฒเบ DPI เบเบญเบเบเบฒเบเปเบเปเบเบญเบเปเบฅเบฐเบเปเบฝเบเปเบเบฑเบเบชเบฑเบเบเบฒเบ HDMI. เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเป, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเบฐเปเบเบเบเบญเบเบเบฐเบเบฒเบ FPGA. เบเปเบญเบเบงเปเบฒเบกเบฑเบเบซเบฑเบเบญเบญเบ, เบเบฐเบเบฒเบ Mars Rover2rpi เปเบกเปเบเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเบธเบเบเบฐเบชเบปเบเปเบซเบผเบปเปเบฒเบเบตเป. เบเบงเบฒเบกเบเบดเบ, เบเบฒเบเปเบฅเบทเบญเบเบเบปเปเบเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฐเบเบฒเบเบเบตเปเบเปเบฒเบเบญเบฐเปเบเบเปเบเบตเบเบดเปเบชเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบตเป:
เบเบฐเบเบฒเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเปเบเบตเปเบกเบเปเบฒเบเบงเบเบเบญเบ GPIO เปเบฅเบฐเปเบเบทเปเบญเบกเบเปเปเบญเบธเบเบฐเบเบญเบเบเปเปเบเบญเบเบเบฑเบ raspberry. เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, 4 เบชเบฑเบเบเบฒเบ GPIO เบเบตเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบตเปเบเบทเบเบเปเบฒเปเบเปเบชเปเบฒเบฅเบฑเบเบชเบฑเบเบเบฒเบ JTAG, เบเบฑเปเบเบเบฑเปเบเปเบเบเบเบฒเบเบเบฒเบเบเบฒเบเปเบเบเบขเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฅเบเปเบเบตเบกเปเบง FPGA เปเบเบปเปเบฒเปเบเปเบ FPGA. เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบตเป, เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบกเบฒเบเบเบฐเบเบฒเบเบเบตเปเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเปเบญเบ; 4 เบชเบฑเบเบเบฒเบ DPI เบซเบผเบธเบเบฅเบปเบ. เปเบเบเบเบต, combs เบเบดเปเบชเบเบขเบนเปเปเบเบเบฐเบเบฒเบเบกเบต pinout เบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเป Raspberry. เปเบเบทเปเบญเปเบซเปเบเปเบญเบเบชเบฒเบกเบฒเบเบซเบกเบธเบเบเบฐเบเบฒเบเปเบเป 90 เบญเบปเบเบชเบฒเปเบฅเบฐเบเบฑเบเปเบเบทเปเบญเบกเบเปเปเบกเบฑเบเบเบฑเบ raspberry เบเบญเบเบเปเบญเบ:
เปเบเปเบเบญเบ, เบเปเบฒเบเบเบฐเบเปเบญเบเปเบเปเปเบเปเบเบผเบก JTAG เบเบฒเบเบเบญเบ, เปเบเปเบเบตเปเบเปเปเปเบกเปเบเบเบฑเบเบซเบฒ.
เบเบฑเบเบกเบตเบเบฑเบเบซเบฒเปเบฅเบฑเบเบเปเบญเบ. เบเปเปเปเบกเปเบเบเบธเบเป pin FPGA เบชเบฒเบกเบฒเบเปเบเปเปเบเบฑเบเบเบปเบงเบเปเบญเบเบเปเปเบกเบนเบเปเบกเบเปเบเป. เบกเบตเบเบฝเบเปเบเปเบเบฒเบ pins เบเบตเปเบญเบธเบเบดเบเบเบปเบเบเบตเปเบชเบฒเบกเบฒเบเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบธเบเบเบฐเบชเบปเบเปเบซเบผเบปเปเบฒเบเบตเป. เบชเบฐเบเบฑเปเบเบกเบฑเบเปเบเปเบซเบฑเบเบญเบญเบเบขเบนเปเบเบตเปเบเบตเปเบงเปเบฒเบชเบฑเบเบเบฒเบ GPIO_0 CLK เบเปเปเปเบเบดเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบ FPGA, เปเบเบดเปเบเบชเบฒเบกเบฒเบเปเบเปเปเบเบฑเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเปเบกเบ FPGA เปเบเป. เบชเบฐเบเบฑเปเบเบเปเบญเบเบเบฑเบเบเปเบญเบเปเบญเบปเบฒเบชเบฒเบเปเบถเปเบเปเบชเปเบเปเบฒเบเบฑเบเบเป. เบเปเบญเบเปเบเบทเปเบญเบกเบเปเป GPIO_0 เปเบฅเบฐเบชเบฑเบเบเบฒเบ KEY[1] เบเบญเบเบเบฐเบเบฒเบ:
เบเบญเบเบเบตเปเบเปเบญเบเบเบฐเบเบญเบเปเบเบปเปเบฒเปเบฅเบฑเบเบเปเบญเบเบเปเบฝเบงเบเบฑเบเปเบเบเบเบฒเบ FPGA. เบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเบเบปเปเบเบเปเปเบเบเบฒเบเบชเปเบฒเบเบชเบฑเบเบเบฒเบ HDMI เปเบกเปเบเบเบงเบฒเบกเบเบตเปเบชเบนเบเบซเบผเบฒเบ. เบเปเบฒเบเปเบฒเบเปเบเบดเปเบเบเบปเบงเปเบเบทเปเบญเบกเบเปเป HDMI pinout, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเปเบงเปเบฒเบชเบฑเบเบเบฒเบ RGB เปเบเบเบฑเบเบเบธเบเบฑเบเปเบกเปเบเบชเบฑเบเบเบฒเบเบเบงเบฒเบกเปเบเบเบเปเบฒเบ serial:
เบเบฒเบโเบเปเบฒโเปเบเปโเบเบญเบโเบชเบฑเบโเบเบฒเบโเปเบเบโเบเปเบฒเบโเบญเบฐโเบเบธโเบเบฒเบโเปเบซเปโเบเปเบฒเบโเปเบเบทเปเบญโเบเปเบฒเบโเบเบฒเบโเปเบเบโเปเบเบโเบฎเบนเบโเปเบเบโเบเบปเปเบงโเปเบโเปเบโเบชเบฒเบโเบชเบปเปเบโ. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบฅเบฐเบซเบฑเบเปเบเบเบเบดเบเบเบปเปเบเบชเบฐเบเบฑเบเบเบญเบเปเบเปเบฅเบฐเบชเบฑเบเบเบฒเบเบชเบตเบเบฐเบเบทเบเบเปเบฝเบเปเบเบฑเบ 10-bit TMDS (Transition-minimized differential signaling). เบเบตเปโเปเบกเปเบโเบงเบดโเบเบตโเบเบฒเบโเปเบเบปเปเบฒโเบฅเบฐโเบซเบฑเบโเบเบดโเปเบชเบโเปเบเบทเปเบญโเปเบญเบปเบฒโเบญเบปเบโเบเบฐโเบเบญเบ DC เบญเบญเบโเบเบฒเบโเบชเบฑเบโเบเบฒเบโเปเบฅเบฐโเบซเบผเบธเบโเบเปเบญเบโเบเบฒเบโเบเปเบฝเบโเบชเบฑเบโเบเบฒเบโเปเบโเปเบชเบฑเปเบโเปเบเบโเบเปเบฒเบโเบเบฑเบโ. เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒ 10 bits เปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบชเบปเปเบเบเปเบฒเบเปเบชเบฑเปเบ serial เบชเปเบฒเบฅเบฑเบเบซเบเบถเปเบ byte เบเบญเบเบชเบต, เบกเบฑเบ turns เปเบซเปเปเบซเบฑเบเบงเปเบฒเบเบงเบฒเบกเปเบง serializer เปเบกเบเบเปเบญเบเปเบกเปเบ 10 เปเบเบปเปเบฒเบเบญเบเบเบงเบฒเบกเปเบงเปเบกเบ pixels เบฅเบงเบ. เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบปเบงเบขเปเบฒเบเบงเบดเบเบตเปเบญ 1280x720 60Hz, เบเบงเบฒเบกเบเบตเป pixels เบฅเบงเบเบเบญเบเปเบซเบกเบเบเบตเปเปเบกเปเบ 74,25 MHz. serializer เบเบงเบเบเบฐเปเบเบฑเบ 742,5 MHz.
FPGAs เบเบปเบเบเบฐเบเบด, เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบเปเปเบชเบฒเบกเบฒเบเบเบตเป. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เปเบเบเบเบตเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒ, FPGA เบกเบต pins DDIO เบเปเปเบชเปเบฒเบเปเบ. เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบปเบเบชเบฐเบซเบผเบธเบเบเบตเปเบกเบตเบขเบนเปเปเบฅเปเบง, เบเปเบญเบเบงเปเบฒเบกเบฑเบเปเบเบฑเบ, 2-to-1 serializers. เบเบฑเปเบเปเบกเปเบ, เบเบงเบเปเบเบปเบฒเบชเบฒเบกเบฒเบเบญเบญเบเบชเบญเบเบเบดเบเบเบฒเบกเบฅเปเบฒเบเบฑเบเบเบฒเบกเบเบงเบฒเบกเบเบตเปเบเบญเบเปเบกเบเบเบตเปเปเบเบตเปเบกเบเบถเปเบเปเบฅเบฐเบซเบผเบธเบเบฅเบปเบ. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเปเบเปเบเบเบเบฒเบ FPGA เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเปเปเปเบกเปเบ 740 MHz, เปเบเป 370 MHz, เปเบเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบญเบปเบเบเบฐเบเบญเบเบเบปเบเบเบฐเบฅเบดเบ DDIO เปเบ FPGA. เปเบเบเบฑเบเบเบธเบเบฑเบ 370 MHz เปเบกเปเบเบเบงเบฒเบกเบเบตเปเบเบตเปเบเบฑเบเบฅเบธเปเบเปเบขเปเบฒเบเบชเบปเบกเบเบนเบเปเบฅเปเบง. เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบฎเบนเบเปเบเบ 1280x720 เปเบกเปเบเบเปเบฒเบเบฑเบ. เบเบงเบฒเบกเบฅเบฐเบญเบฝเบเบชเบนเบเบเบงเปเบฒเบเปเปเบชเบฒเบกเบฒเบเบเบฑเบเบฅเบธเปเบเปเปเบ FPGA Cyclone IV เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบตเปเบเบดเบเบเบฑเปเบเบขเบนเปเปเบเบเบฐเบเบฒเบ Rover2rpi.
เบเบฑเปเบเบเบฑเปเบ, เปเบเบเบฒเบเบญเบญเบเปเบเบ, input pixel frequency CLK เปเบเบซเบฒ PLL, เบเปเบญเบเบเบตเปเบกเบฑเบเบเบทเบเบเบนเบเบเปเบงเบ 5. เปเบเบเบงเบฒเบกเบเบตเปเบเบตเป, R, G, B bytes เบเบทเบเบเปเบฝเบเปเบเบฑเบเบเบนเปเบเบดเบ. เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเบเบปเบงเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ 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
เปเบเบตเบกเปเบงเบเบตเปเบฅเบงเบเบฅเบงเบกเบชเปเบฒเบฅเบฑเบ FPGA เปเบกเปเบ flashed เปเบเบปเปเบฒเปเบเปเบเบเบดเบ EPCS เบเบตเปเบเบดเบเบเบฑเปเบเบขเบนเปเปเบเบเบฐเบเบฒเบ Mars Rover2rpi. เบเบฑเปเบเบเบฑเปเบ, เปเบกเบทเปเบญเบเบฐเบฅเบฑเบเบเบฒเบเบเบทเบเบเปเบฒเปเบเปเบเบฑเบเบเบฐเบเบฒเบ FPGA, FPGA เบเบฐเบเบทเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ flash เปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบ.
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบชเบปเบเบเบฐเบเบฒเปเบฅเบฑเบเบเปเบญเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบ Raspberry เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ.
เบเปเบญเบเบเบณเบฅเบฑเบเปเบฎเบฑเบเบเบฒเบเบเบปเบเบฅเบญเบเปเบ Raspberry PI OS (32 bit) เปเบเบเบญเบตเบเปเบชเป Debian Buster, เบฅเบธเปเบ: เบชเบดเบเบซเบฒ 2020,
เบงเบฑเบเบเบตเบเปเบญเบ: 2020-08-20, เบฅเบธเปเบ Kernel: 5.4.
เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฎเบฑเบเบชเบญเบเบขเปเบฒเบ:
- เปเบเปเปเบเปเบเบฅเป config.txt;
- เบชเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบตเบเปเบงเบต X เปเบเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบชเบญเบเบเปเบเบฒเบ.
เปเบกเบทเปเบญเปเบเปเปเบเปเบเบฅเป /boot/config.txt เบเปเบฒเบเบเปเบญเบเบเบฒเบ:
- เบเบดเบเบเบฒเบเปเบเป i2c, i2s, spi;
- เปเบเบตเบเปเบเปเปเปเบ DPI เปเบเบเปเบเป overlay dtoverlay=dpi24;
- เบเบฑเปเบเบเปเบฒเปเปเบเบงเบดเบเบตเปเบญ 1280ร720 60Hz, 24 bits เบเปเป pixel เบชเบธเบ DPI;
- เบฅเบฐเบเบธเบเปเบฒเบเบงเบเบเบตเปเบเปเบญเบเบเบฒเบเบเบญเบ 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. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบทเปเบเบเบตเป desktop เบเบฐเบเบทเบเบเบฐเบซเบเบฒเบเบญเบญเบเบขเปเบฒเบเปเบเบฑเบกเบเบตเปเปเบเบดเบเบชเบญเบเบเป, เบเบฑเปเบเบเบตเปเบชเบฐเปเบเบเบขเบนเปเปเบเบงเบดเบเบตเปเบญเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเปเบเบดเบ.
เบเบฑเปเบเบญเบฒเบเบเบฐเปเบกเปเบเบเบฑเบเบซเบกเบปเบ. เปเบเบเบฑเบเบเบธเบเบฑเบ, เปเบเบปเปเบฒเบเบญเบ Raspberry Pi3 เบเบฐเบชเบฒเบกเบฒเบเปเบเปเบชเบญเบเบเปเบเบฒเบ.
เบฅเบฒเบเบฅเบฐเบญเบฝเบ เปเบฅเบฐเปเบเบเบงเบฒเบเบงเบปเบเบเบญเบเบเบญเบเบเบฐเบเบฒเบ Mars Rover2rpi เบชเบฒเบกเบฒเบเบเบปเบเปเบเป
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com