рд╣рд╛ рд╡реНрд╣рд┐рдбрд┐рдУ рджрд░реНрд╢рд╡рд┐рддреЛ: рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 рдмреЛрд░реНрдб, GPIO рдХрдиреЗрдХреНрдЯрд░рджреНрд╡рд╛рд░реЗ рддреНрдпрд╛рд╕ рдЬреЛрдбрд▓реЗрд▓рд╛ рдПрдХ FPGA рдмреЛрд░реНрдб Mars Rover2rpi (рд╕рд╛рдпрдХреНрд▓реЛрди IV) рдЖрд╣реЗ, рдЬреНрдпрд╛рд▓рд╛ HDMI рдореЙрдирд┐рдЯрд░ рдЬреЛрдбрд▓реЗрд▓рд╛ рдЖрд╣реЗ. рджреБрд╕рд░рд╛ рдореЙрдирд┐рдЯрд░ рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 рдЪреНрдпрд╛ рдорд╛рдирдХ HDMI рдХрдиреЗрдХреНрдЯрд░рджреНрд╡рд╛рд░реЗ рдЬреЛрдбрд▓реЗрд▓рд╛ рдЖрд╣реЗ. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдбреНрдпреБрдЕрд▓ рдореЙрдирд┐рдЯрд░ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рд░рдЦреЗ рдПрдХрддреНрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ.
рд╣реЗ рдХрд╕реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рддреЗ рддреЗ рдореА рдкреБрдвреЗ рд╕рд╛рдВрдЧреЗрди.
рд▓реЛрдХрдкреНрд░рд┐рдп рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 рдмреЛрд░реНрдбрдордзреНрдпреЗ рдПрдХ GPIO рдХрдиреЗрдХреНрдЯрд░ рдЖрд╣реЗ рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдЖрдкрдг рд╡рд┐рд╡рд┐рдз рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдб рдХрдиреЗрдХреНрдЯ рдХрд░реВ рд╢рдХрддрд╛: рд╕реЗрдиреНрд╕рд░реНрд╕, LEDs, рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА. рдХрдиреЗрдХреНрдЯрд░рд╡рд░реАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдирдЪреЗ рдЕрдЪреВрдХ рдХрд╛рд░реНрдп рдкреЛрд░реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. GPIO ALT2 рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ DPI рдЗрдВрдЯрд░рдлреЗрд╕ рдореЛрдб, рдбрд┐рд╕реНрдкреНрд▓реЗ рдкреЕрд░рд▓рд▓ рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. VGA рдореЙрдирд┐рдЯрд░реНрд╕ DPI рджреНрд╡рд╛рд░реЗ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдб рдЖрд╣реЗрдд. рддрдерд╛рдкрд┐, рдкреНрд░рдердо, рд╡реНрд╣реАрдЬреАрдП рдореЙрдирд┐рдЯрд░реНрд╕ рдЖрддрд╛ рдПрдЪрдбреАрдПрдордЖрдпрд╕рд╛рд░рдЦреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рд╣реАрдд рдЖрдгрд┐ рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рдбрд┐рдЬрд┐рдЯрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдЕреЕрдирд╛рд▓реЙрдЧрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓рд╛ рдЖрд╣реЗ. рд╢рд┐рд╡рд╛рдп, рдЕрд╢рд╛ VGA рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдбрд╛рдВрд╡рд░реАрд▓ DAC рд╕рд╣рд╕рд╛ R-2-R рдЪреЗрдирдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдмрдирд╡рд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдмрд╣реБрддреЗрдХрджрд╛ рдкреНрд░рддрд┐ рд░рдВрдЧ 6 рдмрд┐рдЯреНрд╕рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╕рддреЗ.
ALT2 рдореЛрдбрдордзреНрдпреЗ, GPIO рдХрдиреЗрдХреНрдЯрд░ рдкрд┐рдирдЪрд╛ рдЦрд╛рд▓реАрд▓ рдЕрд░реНрде рдЖрд╣реЗ:

рдпреЗрдереЗ рдореА рдХрдиреЗрдХреНрдЯрд░рдЪреНрдпрд╛ RGB рдкрд┐рдирд▓рд╛ рдЕрдиреБрдХреНрд░рдореЗ рд▓рд╛рд▓, рд╣рд┐рд░рд╡рд╛ рдЖрдгрд┐ рдирд┐рд│рд╛ рд░рдВрдЧ рджрд┐рд▓рд╛ рдЖрд╣реЗ. рдЗрддрд░ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рд╕рд┐рдЧреНрдирд▓ рдореНрд╣рдгрдЬреЗ V-SYNC рдЖрдгрд┐ H-SYNC рд╕рд┐рдЧреНрдирд▓, рддрд╕реЗрдЪ CLK. CLK рдШрдбреНрдпрд╛рд│ рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд╣реА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдЕрд╕рддреЗ рдЬреНрдпрд╛рд╡рд░ рдХрдиреЗрдХреНрдЯрд░рд╡рд░ рдкрд┐рдХреНрд╕реЗрд▓ рдореВрд▓реНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд; рддреА рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣рд┐рдбрд┐рдУ рдореЛрдбрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ.
рдбрд┐рдЬрд┐рдЯрд▓ HDMI рдореЙрдирд┐рдЯрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдЪреЗ DPI рд╕рд┐рдЧреНрдирд▓ рдХреЕрдкреНрдЪрд░ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ HDMI рд╕рд┐рдЧреНрдирд▓рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ FPGA рдмреЛрд░реНрдб рд╡рд╛рдкрд░реВрди. рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА, рдорд╛рд░реНрд╕ рд░реЛрд╡реНрд╣рд░2рдЖрд░рдкреАрдЖрдп рдмреЛрд░реНрдб рдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдВрд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗ. рдЦрд░рдВ рддрд░, рд╣рд╛ рдмреЛрд░реНрдб рдПрдХрд╛ рд╡рд┐рд╢реЗрд╖ рдЕреЕрдбреЙрдкреНрдЯрд░рджреНрд╡рд╛рд░реЗ рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдореБрдЦреНрдп рдкрд░реНрдпрд╛рдп рдпрд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ:

рд╣рд╛ рдмреЛрд░реНрдб GPIO рдкреЛрд░реНрдЯрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реАрд▓рд╛ рдЕрдзрд┐рдХ рдкрд░рд┐рдзреАрдп рдЙрдкрдХрд░рдгреЗ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдпрд╛ рдХрдиреЗрдХреНрд╢рдирд╕рд╣ 4 GPIO рд╕рд┐рдЧреНрдирд▓ JTAG рд╕рд┐рдЧреНрдирд▓рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреЗрдгреЗрдХрд░реВрди рд░рд╛рд╕реНрдкрдмреЗрд░реАрдЪрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо FPGA рдлрд░реНрдорд╡реЗрдЕрд░ FPGA рдордзреНрдпреЗ рд▓реЛрдб рдХрд░реВ рд╢рдХреЗрд▓. рдпрд╛рдореБрд│реЗ, рд╣реЗ рдорд╛рдирдХ рдХрдиреЗрдХреНрд╢рди рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХреВрд▓ рдирд╛рд╣реА; 4 DPI рд╕рд┐рдЧреНрдирд▓ рдмрд╛рд╣реЗрд░ рдкрдбрддрд╛рдд. рд╕реБрджреИрд╡рд╛рдиреЗ, рдмреЛрд░реНрдбрд╡рд░реАрд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдореНрдмреНрд╕рдордзреНрдпреЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА-рд╕реБрд╕рдВрдЧрдд рдкрд┐рдирдЖрдЙрдЯ рдЖрд╣реЗ. рдореНрд╣рдгреВрди рдореА рдмреЛрд░реНрдб 90 рдЕрдВрд╢ рдлрд┐рд░рд╡реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддрд░реАрд╣реА рддреЗ рдорд╛рдЭреНрдпрд╛ рд░рд╛рд╕реНрдкрдмреЗрд░реАрд╢реА рдЬреЛрдбреВ рд╢рдХрддреЛ:

рдЕрд░реНрдерд╛рдд, рддреБрдореНрд╣рд╛рд▓рд╛ рдмрд╛рд╣реНрдп JTAG рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдкрд░рдВрддреБ рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА.
рдЕрдЬреВрдирд╣реА рдПрдХ рдЫреЛрдЯреАрд╢реА рдЕрдбрдЪрдг рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ FPGA рдкрд┐рди рдШрдбреНрдпрд╛рд│ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА. рдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдВрд╕рд╛рдареА рдлрдХреНрдд рдХрд╛рд╣реА рд╕рдорд░реНрдкрд┐рдд рдкрд┐рди рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рддреНрдпрд╛рдореБрд│реЗ рдпреЗрдереЗ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА GPIO_0 CLK рд╕рд┐рдЧреНрдирд▓ FPGA рдЗрдирдкреБрдЯрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрдд рдирд╛рд╣реА, рдЬреЗ FPGA рдШрдбреНрдпрд╛рд│ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рддреНрдпрд╛рдореБрд│реЗ рдорд▓рд╛ рдЕрдЬреВрди рдПрдХ рд╡рд╛рдпрд░ рд╕реНрдХрд╛рд░реНрдлрд╡рд░ рдареЗрд╡рд╛рдпрдЪреА рд╣реЛрддреА. рдореА GPIO_0 рдЖрдгрд┐ рдмреЛрд░реНрдбрдЪрд╛ KEY[1] рд╕рд┐рдЧреНрдирд▓ рдЬреЛрдбрддреЛ:

рдЖрддрд╛ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ FPGA рдкреНрд░рдХрд▓реНрдкрд╛рдмрджреНрджрд▓ рдереЛрдбреЗрд╕реЗ рд╕рд╛рдВрдЧреЗрди. рдПрдЪрдбреАрдПрдордЖрдп рд╕рд┐рдЧреНрдирд▓ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рдд рдореБрдЦреНрдп рдЕрдбрдЪрдг рдЦреВрдк рдЙрдЪреНрдЪ рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдЖрд╣реЗ. рддреБрдореНрд╣реА рдПрдЪрдбреАрдПрдордЖрдп рдХрдиреЗрдХреНрдЯрд░ рдкрд┐рдирдЖрдЙрдЯ рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдЖрд░рдЬреАрдмреА рд╕рд┐рдЧреНрдирд▓ рдЖрддрд╛ рд╕реАрд░рд┐рдпрд▓ рдбрд┐рдлрд░реЗрдВрд╢рд┐рдпрд▓ рд╕рд┐рдЧреНрдирд▓ рдЖрд╣реЗрдд:

рд╡рд┐рднреЗрджрдХ рд╕рд┐рдЧреНрдирд▓рдЪрд╛ рд╡рд╛рдкрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рди рд▓рд╛рдЗрдирд╡рд░реАрд▓ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рд╣рд╕реНрддрдХреНрд╖реЗрдкрд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЛ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рд╕рд┐рдЧреНрдирд▓рдЪрд╛ рдореВрд│ рдЖрда-рдмрд┐рдЯ рдХреЛрдб 10-рдмрд┐рдЯ TMDS (рдЯреНрд░рд╛рдиреНрдЭрд┐рд╢рди-рдорд┐рдирд┐рдорд╛рдЗрдЬреНрдб рдбрд┐рдлрд░реЗрдВрд╢рд┐рдпрд▓ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ) рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╕рд┐рдЧреНрдирд▓рдордзреВрди DC рдШрдЯрдХ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд┐рднреЗрджрдХ рдУрд│реАрдд рд╕рд┐рдЧреНрдирд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреЛрдбрд┐рдВрдЧ рдкрджреНрдзрдд рдЖрд╣реЗ. рд░рдВрдЧрд╛рдЪреНрдпрд╛ рдПрдХрд╛ рдмрд╛рдЗрдЯрд╕рд╛рдареА рдЖрддрд╛ 10 рдмрд┐рдЯреНрд╕ рд╕рд┐рд░реАрдпрд▓ рд▓рд╛рдЗрдирд╡рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рд╕рд┐рд░реАрдпрд▓рд╛рдпрдЭрд░ рдШрдбреНрдпрд╛рд│ рдЧрддреА рдкрд┐рдХреНрд╕реЗрд▓ рдШрдбреНрдпрд╛рд│ рдЧрддреАрдкреЗрдХреНрд╖рд╛ 10 рдкрдЯ рдЬрд╛рд╕реНрдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЬрд░ рдЖрдкрдг рд╡реНрд╣рд┐рдбрд┐рдУ рдореЛрдб 1280x720 60Hz рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдШреЗрддрд▓реЗ рддрд░ рдпрд╛ рдореЛрдбрдЪреА рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ 74,25 MHz рдЖрд╣реЗ. рдЕрдиреБрдХреНрд░рдорд╛рдВрдХ ренрекреи.рел рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЭ рдЕрд╕рд╛рд╡рд╛.
рдирд┐рдпрдорд┐рдд FPGAs, рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдпрд╛рд╕рд╛рдареА рд╕рдХреНрд╖рдо рдирд╛рд╣реАрдд. рддрдерд╛рдкрд┐, рд╕реБрджреИрд╡рд╛рдиреЗ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА, FPGA рдордзреНрдпреЗ рдЕрдВрдЧрднреВрдд DDIO рдкрд┐рди рдЖрд╣реЗрдд. рд╣реЗ рдЕрд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдЖрд╣реЗрдд рдЬреЗ рдЖрдзреАрдкрд╛рд╕реВрди рдЖрд╣реЗрдд, рдЬрд╕реЗ рдХреА 2-рдЯреВ-1 рд╕реАрд░рд┐рдпрд▓рд╛рдпрдЭрд░реНрд╕. рдореНрд╣рдгрдЬреЗрдЪ, рддреЗ рдШрдбреНрдпрд╛рд│рд╛рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрдЪреНрдпрд╛ рд╡рд╛рдврддреНрдпрд╛ рдЖрдгрд┐ рдШрд╕рд░рд▓реЗрд▓реНрдпрд╛ рдХрдбрд╛рдВрд╡рд░ рдЕрдиреБрдХреНрд░рдореЗ рджреЛрди рдмрд┐рдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реВ рд╢рдХрддрд╛рдд. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА FPGA рдкреНрд░рдХрд▓реНрдкрд╛рдордзреНрдпреЗ рддреБрдореНрд╣реА 740 MHz рдирд╡реНрд╣реЗ рддрд░ 370 MHz рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рддреБрдореНрд╣рд╛рд▓рд╛ FPGA рдордзреНрдпреЗ DDIO рдЖрдЙрдЯрдкреБрдЯ рдШрдЯрдХ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдЖрддрд╛ 370 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЭ рдЖрдзреАрдЪ рдПрдХ рдкреВрд░реНрдгрдкрдгреЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдЖрд╣реЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, 1280x720 рдореЛрдб рд╣реА рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗ. рдорд╛рд░реНрд╕ рд░реЛрд╡реНрд╣рд░2рдЖрд░рдкреАрдЖрдп рдмреЛрд░реНрдбрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдордЪреНрдпрд╛ рдЪрдХреНрд░реАрд╡рд╛рджрд│ IV FPGA рдордзреНрдпреЗ рдЙрдЪреНрдЪ рд░рд┐рдЭреЛрд▓реНрдпреВрд╢рди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.
рддрд░, рдбрд┐рдЭрд╛рдЗрдирдордзреНрдпреЗ, рдЗрдирдкреБрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ CLK PLL рдХрдбреЗ рдЬрд╛рддреЗ, рдЬрд┐рдереЗ рддреЗ 5 рдиреЗ рдЧреБрдгрд╛рдХрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрд╡рд░, R, G, B рдмрд╛рдЗрдЯреНрд╕ рдмрд┐рдЯ рдЬреЛрдбреНрдпрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛рдд. TMDS рдПрдиреНрдХреЛрдбрд░ рд╣реЗрдЪ рдХрд░рддреЛ. рд╡реНрд╣реЗрд░рд┐рд▓реЙрдЧ рдПрдЪрдбреАрдПрд▓ рдордзреАрд▓ рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
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
рдирдВрддрд░ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбреНрдпрд╛ рдбреАрдбреАрдЖрдпрдУ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреЗ рдХреНрд░рдорд╢рдГ рд╡рд╛рдврддреНрдпрд╛ рдЖрдгрд┐ рдШрд╕рд░рдгрд╛рд▒реНрдпрд╛ рдХрдбрд╛рдВрд╡рд░ рдПрдХ-рдмрд┐рдЯ рд╕рд┐рдЧреНрдирд▓ рддрдпрд╛рд░ рдХрд░рддрд╛рдд.
рдбреАрдбреАрдЖрдпрдУрдЪреЗ рд╡рд░реНрдгрди рдЦрд╛рд▓реАрд▓ рд╡реЗрд░рд┐рд▓реЙрдЧ рдХреЛрдбрд╕рд╣ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
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рдкрдг рдмрд╣реБрдзрд╛ рддреЗ рддрд╕реЗ рдХрд╛рдо рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. DDIO рдЖрдЙрдЯрдкреБрдЯ рдШрдЯрдХ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ Alter рдЪреЗ рдореЗрдЧрд╛рдлрдВрдХреНрд╢рди ALTDIO_OUT рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдорд╛рдЭрд╛ рдкреНрд░рдХрд▓реНрдк ALTDIO_OUT рд▓рд╛рдпрдмреНрд░рд░реА рдШрдЯрдХ рд╡рд╛рдкрд░рддреЛ.
рд╣реЗ рд╕рд░реНрд╡ рдереЛрдбреЗ рдЕрд╡рдШрдб рд╡рд╛рдЯреВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рддреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ.
Verilog HDL рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рд╕рд░реНрд╡ рд╕реЛрд░реНрд╕ рдХреЛрдб рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ .
FPGA рд╕рд╛рдареА рд╕рдВрдХрд▓рд┐рдд рдлрд░реНрдорд╡реЗрдЕрд░ Mars Rover2rpi рдмреЛрд░реНрдбрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ EPCS рдЪрд┐рдкрдордзреНрдпреЗ рдлреНрд▓реЕрд╢ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЬреЗрд╡реНрд╣рд╛ FPGA рдмреЛрд░реНрдбрд╡рд░ рдкреЙрд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, FPGA рдлреНрд▓реЕрд╢ рдореЗрдорд░реАрдордзреВрди рдЖрд░рдВрдн рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рд╕реБрд░реВ рд╣реЛрдИрд▓.
рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд░рд╛рд╕реНрдкрдмреЗрд░реАрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдмрджреНрджрд▓ рдереЛрдбреЗрд╕реЗ рдмреЛрд▓рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.
рдореА рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдп рдУрдПрд╕ (рейреи рдмрд┐рдЯ) рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдпреЛрдЧ рдХрд░рдд рдЖрд╣реЗ Debian рдмрд╕реНрдЯрд░, рдЖрд╡реГрддреНрддреА: рдСрдЧрд╕реНрдЯ реирежреиреж
рдкреНрд░рдХрд╛рд╢рди рддрд╛рд░реАрдЦ: 2020-08-20, рдХрд░реНрдирд▓ рдЖрд╡реГрддреНрддреА: 5.4.
рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреЛрди рдЧреЛрд╖реНрдЯреА рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:
- config.txt рдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛;
- рджреЛрди рдореЙрдирд┐рдЯрд░реНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА X рд╕рд░реНрд╡реНрд╣рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддрдпрд╛рд░ рдХрд░рд╛.
/boot/config.txt рдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
- i2c, i2s, spi рдЪрд╛ рд╡рд╛рдкрд░ рдЕрдХреНрд╖рдо рдХрд░рд╛;
- рдЖрдЪреНрдЫрд╛рджрди рд╡рд╛рдкрд░реВрди DPI рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░рд╛ dtoverlay=dpi24;
- рдбреАрдкреАрдЖрдп рд╡рд░ рд╡реНрд╣рд┐рдбрд┐рдУ рдореЛрдб 1280├Ч720 60Hz, 24 рдмрд┐рдЯреНрд╕ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛;
- рдлреНрд░реЗрдордмрдлрд░ 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
рдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рджреЛрди рдлреНрд░реЗрдордмрдлрд░ /dev/fb0 рдЖрдгрд┐ /dev/fb1 рд╡рд░ рджреЛрди рдореЙрдирд┐рдЯрд░реНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА X рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓:
рдорд╛рдЭреА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ /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 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдирдВрддрд░ рд╡рд░реАрд▓ рдбреЗрдореЛ рд╡реНрд╣рд┐рдбрд┐рдУрдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реНрдкреЗрд╕ рдкреВрд░реНрдгрдкрдгреЗ рджреЛрди рдореЙрдирд┐рдЯрд░реНрд╕рдордзреНрдпреЗ рд╡рд╛рдврд╡рд┐рд▓реА рдЬрд╛рдИрд▓.
рдмрд╣реБрдзрд╛ рдПрд╡рдвреЗрдЪ. рдЖрддрд╛, рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 рдорд╛рд▓рдХ рджреЛрди рдореЙрдирд┐рдЯрд░реНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рддреАрд▓.
рдорд╛рд░реНрд╕ рд░реЛрд╡реНрд╣рд░2рдЖрд░рдкреАрдЖрдп рдмреЛрд░реНрдбрдЪреЗ рд╡рд░реНрдгрди рдЖрдгрд┐ рд╕рд░реНрдХрд┐рдЯ рдЖрдХреГрддреА рдЖрдврд│реВ рд╢рдХрддреЗ .
рд╕реНрддреНрд░реЛрдд: www.habr.com
