рджреЛрд╕реНрд░реЛ HDMI рдордирд┐рдЯрд░ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рд░ FPGA рдмреЛрд░реНрдб рдорд╛рд░реНрдлрдд Raspberry Pi3 рдорд╛


рдпреЛ рднрд┐рдбрд┐рдпреЛрд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ: рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 рдмреЛрд░реНрдб, рдЬрд╕рдорд╛, GPIO рдХрдиреЗрдХреНрдЯрд░ рдорд╛рд░реНрдлрдд, FPGA рдорд╛рд░реНрд╕ рд░реЛрднрд░2rpi (рд╕рд╛рдЗрдХреНрд▓реЛрди IV) рдмреЛрд░реНрдб рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рдорд╛ HDMI рдордирд┐рдЯрд░ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред рджреЛрд╕реНрд░реЛ рдордирд┐рдЯрд░ рдорд╛рдирдХ рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 HDMI рдХрдиреЗрдХреНрдЯрд░ рдорд╛рд░реНрдлрдд рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред рд╕рдмреИ рд╕рдБрдЧреИ рдпреЛ рдПрдХ рджреЛрд╣реЛрд░реЛ рдордирд┐рдЯрд░ рдкреНрд░рдгрд╛рд▓реА рдЬрд╕реНрддреИ рдХрд╛рдо рдЧрд░реНрджрдЫред

рдЕрд░реНрдХреЛ рдо рддрдкрд╛рдИрд▓рд╛рдИ рдмрддрд╛рдЙрдиреЗрдЫреБ рдХрд┐ рдпреЛ рдХрд╕рд░реА рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫред

рд▓реЛрдХрдкреНрд░рд┐рдп Raspberry Pi3 рдмреЛрд░реНрдбрдорд╛ GPIO рдХрдиреЗрдХреНрдЯрд░ рдЫ рдЬрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рддрдкрд╛рдИрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдбрд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: рд╕реЗрдиреНрд╕рд░рд╣рд░реВ, LEDs, рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдЪрд╛рд▓рдХрд╣рд░реВ рд░ рдЕрдзрд┐рдХред рдХрдиреЗрдХреНрдЯрд░рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдирдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реНрдп рдкреЛрд░реНрдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред GPIO ALT2 рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХрдиреЗрдХреНрдЯрд░рд▓рд╛рдИ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рдореЛрдб, рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред DPI рдорд╛рд░реНрдлрдд VGA рдордирд┐рдЯрд░рд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдбрд╣рд░реВ рдЫрдиреНред рдпрджреНрдпрдкрд┐, рдкрд╣рд┐рд▓реЛ, VGA рдореЛрдирд┐рдЯрд░рд╣рд░реВ рдЕрдм HDMI рдЬрддреНрддрд┐рдХреИ рд╕рд╛рдорд╛рдиреНрдп рдЫреИрдирдиреН, рд░ рджреЛрд╕реНрд░реЛ, рдбрд┐рдЬрд┐рдЯрд▓ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдПрдирд╛рд▓рдЧ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рд╣реБрдБрджреИрдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рдпрд╕реНрддреЛ VGA рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдбрд╣рд░реВрдорд╛ DAC рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ R-2-R рдЪреЗрдирд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдмрдирд╛рдЗрдиреНрдЫ рд░ рдкреНрд░рд╛рдпрдГ 6 рдмрд┐рдЯ рдкреНрд░рддрд┐ рд░рдВрдЧ рднрдиреНрджрд╛ рдмрдвреА рд╣реБрдБрджреИрдиред

ALT2 рдореЛрдбрдорд╛, GPIO рдХрдиреЗрдХреНрдЯрд░рдХреЛ рдкрд┐рдирдХреЛ рдирд┐рдореНрди рдЕрд░реНрде рд╣реБрдиреНрдЫ:

рджреЛрд╕реНрд░реЛ HDMI рдордирд┐рдЯрд░ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рд░ FPGA рдмреЛрд░реНрдб рдорд╛рд░реНрдлрдд Raspberry Pi3 рдорд╛

рдпрд╣рд╛рдБ рдореИрд▓реЗ рдХрдиреЗрдХреНрдЯрд░рдХреЛ RGB рдкрд┐рдирд▓рд╛рдИ рдХреНрд░рдорд╢рдГ рд░рд╛рддреЛ, рд╣рд░рд┐рдпреЛ рд░ рдиреАрд▓реЛ рд░рдВрдЧ рджрд┐рдПрдБред рдЕрдиреНрдп рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕рдВрдХреЗрддрд╣рд░реВ V-SYNC рд░ H-SYNC рд╕реНрд╡реАрдк рд╕рд┐рдВрдХ рд╕рдВрдХреЗрддрд╣рд░реВ, рд╕рд╛рдереИ CLK рд╣реБрдиреНред CLK рдШрдбреА рдЖрд╡реГрддреНрддрд┐ рднрдиреЗрдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рдирд╣рд░реВ рдХрдиреЗрдХреНрдЯрд░рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реБрдиреЗ рдЖрд╡реГрддреНрддрд┐ рд╣реЛ рд░ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рднрд┐рдбрд┐рдпреЛ рдореЛрдбрдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреНрдЫред

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

рджреЛрд╕реНрд░реЛ HDMI рдордирд┐рдЯрд░ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рд░ FPGA рдмреЛрд░реНрдб рдорд╛рд░реНрдлрдд Raspberry Pi3 рдорд╛

рдпреЛ рдмреЛрд░реНрдб GPIO рдкреЛрд░реНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╛рдЙрди рд░ рд░рд╛рд╕реНрдкрдмреЗрд░реАрдорд╛ рдердк рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгрд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдПрдХреИ рд╕рдордпрдорд╛, рдпрд╕ рдЬрдбрд╛рдирд╕рдБрдЧ 4 GPIO рд╕рдВрдХреЗрддрд╣рд░реВ JTAG рд╕рдВрдХреЗрддрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рддрд╛рдХрд┐ рд╡рд┐рддрд░рдгрдмрд╛рдЯ рдХрд╛рд░реНрдпрдХреНрд░рдорд▓реЗ FPGA рдлрд░реНрдорд╡реЗрдпрд░рд▓рд╛рдИ FPGA рдорд╛ рд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдЫред рдпрд╕ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛, рдпрд╕реНрддреЛ рдирд┐рдпрдорд┐рдд рдЬрдбрд╛рди рдорд▓рд╛рдИ рдЙрдкрдпреБрдХреНрдд рдЫреИрди, 4 DPI рд╕рдВрдХреЗрддрд╣рд░реВ рдЫреЛрдбреНрдЫрдиреНред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рдмреЛрд░реНрдбрдорд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдореНрдмреНрд╕рдорд╛ рд░рд╛рд╕реНрдкрдмреЗрд░реА-рдХрдореНрдкреНрдпрд╛рдЯрд┐рдмрд▓ рдкрд┐рдирдЖрдЙрдЯ рдЫред рддрд╛рдХрд┐ рдо рдмреЛрд░реНрдбрд▓рд╛рдИ 90 рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдЙрди рд╕рдХреНрдЫреБ рд░ рдЕрдЭреИ рдпрд╕рд▓рд╛рдИ рдореЗрд░реЛ рд░рд╛рд╕реНрдкрдмреЗрд░реАрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫреБ:

рджреЛрд╕реНрд░реЛ HDMI рдордирд┐рдЯрд░ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рд░ FPGA рдмреЛрд░реНрдб рдорд╛рд░реНрдлрдд Raspberry Pi3 рдорд╛

рдЕрд╡рд╢реНрдп рдкрдирд┐, рддрдкрд╛рдИрдВрд▓реЗ рдмрд╛рд╣реНрдп JTAG рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ, рддрд░ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЗрдиред

рдЕрдЭреИ рдкрдирд┐ рд╕рд╛рдиреЛ рд╕рдорд╕реНрдпрд╛ рдЫред рдкреНрд░рддреНрдпреЗрдХ FPGA рдкрд┐рди рдШрдбреА рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред рддреНрдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдХреЗрд╣рд┐ рд╕рдорд░реНрдкрд┐рдд рдкрд┐рдирд╣рд░реВ рдЫрдиреН рдЬреБрди рдпрд╕ рдЙрджреНрджреЗрд╢реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдпрд╣рд╛рдБ рдмрд╛рд╣рд┐рд░ рднрдпреЛ рдХрд┐ GPIO_0 CLK рд╕рд┐рдЧреНрдирд▓ FPGA рдЗрдирдкреБрдЯрдорд╛ рдкреБрдЧреНрджреИрди, рдЬреБрди FPGA рдШрдбреА рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рддреНрдпрд╕реЛрднрдП рд╕рдмреИ рдЙрд╕реНрддреИ, рдореИрд▓реЗ рд╕реНрдХрд╛рд░реНрдлрдорд╛ рдПрдЙрдЯрд╛ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдлрд╛рд▓реНрдиреБрдкрд░реНрдЫред рдо рдмреЛрд░реНрдбрдХреЛ GPIO_0 рд░ KEY[1] рд╕рд┐рдЧреНрдирд▓ рдЬрдбрд╛рди рдЧрд░реНрдЫреБ:

рджреЛрд╕реНрд░реЛ HDMI рдордирд┐рдЯрд░ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рд░ FPGA рдмреЛрд░реНрдб рдорд╛рд░реНрдлрдд Raspberry Pi3 рдорд╛

рдЕрдм рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ FPGA рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╛рд░реЗ рдереЛрд░реИ рдмрддрд╛рдЙрдиреЗрдЫреБред HDMI рд╕рдВрдХреЗрдд рдХреЛ рдЧрдарди рдорд╛ рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рдзреЗрд░реИ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐рд╣рд░реБ рдЫред HDMI рдХрдиреЗрдХреНрдЯрд░рдХреЛ рдкрд┐рдирдЖрдЙрдЯрдорд╛ рд╣реЗрд░реНрджреИ, рддрдкрд╛рдИрдВрд▓реЗ RGB рд╕рдВрдХреЗрддрд╣рд░реВ рдЕрдм рдХреНрд░рдорд┐рдХ рднрд┐рдиреНрдирддрд╛ рд╕рдВрдХреЗрддрд╣рд░реВ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

рджреЛрд╕реНрд░реЛ HDMI рдордирд┐рдЯрд░ DPI рдЗрдиреНрдЯрд░рдлреЗрд╕ рд░ FPGA рдмреЛрд░реНрдб рдорд╛рд░реНрдлрдд Raspberry Pi3 рдорд╛

рд╡рд┐рднреЗрджрдХ рд╕рдВрдХреЗрддрдХреЛ рдкреНрд░рдпреЛрдЧрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рд╕рд╛рд░рдг рд▓рд╛рдЗрдирдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рд╢реЛрд░рд╕рдБрдЧ рд╕рдореНрдЭреМрддрд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рддреНрдпреЗрдХ рд░рдЩ рд╕рдВрдХреЗрддрдХреЛ рдореВрд▓ рдЖрда-рдмрд┐рдЯ рдХреЛрдб резреж-рдмрд┐рдЯ TMDS (рдЯреНрд░рд╛рдиреНрдЬрд┐рд╕рди-рдорд┐рдирд┐рдорд╛рдЗрдЬреНрдб рдбрд┐рдлрд░реЗрдВрд╢рд┐рдпрд▓ рд╕рд┐рдЧреНрдирд▓рд┐рдЩ) рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рд╣реБрдиреНрдЫред рдпреЛ рд╕рд┐рдЧреНрдирд▓рдмрд╛рдЯ DC рдХрдореНрдкреЛрдиреЗрдиреНрдЯ рд╣рдЯрд╛рдЙрди рд░ рд╡рд┐рднреЗрдж рд░реЗрдЦрд╛рдорд╛ рд╕рд┐рдЧреНрдирд▓ рд╕реНрд╡рд┐рдЪрд┐рдЩ рдХрдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рд╕рдЩреНрдХреЗрддрди рд╡рд┐рдзрд┐ рд╣реЛред рд╕рд┐рд░рд┐рдпрд▓ рд▓рд╛рдЗрдирдорд╛ рдкреНрд░рддрд┐ рдмрд╛рдЗрдЯ рд░рдЩ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рдЯ рдЧрд░реНрди 10 рдмрд┐рдЯрд╣рд░реВ рднрдПрдХрд╛рд▓реЗ, рдпреЛ рд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬрд░рдХреЛ рдШрдбреА рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА рдкрд┐рдХреНрд╕реЗрд▓рдХреЛ рдШрдбреА рдЖрд╡реГрддреНрддрд┐ рднрдиреНрджрд╛ 10 рдЧреБрдгрд╛ рдмрдвреА рд╣реБрдиреБрдкрд░реНрдЫред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рднрд┐рдбрд┐рдпреЛ рдореЛрдб 10x1280 720Hz рд▓рд╛рдИ рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рд▓рд┐рдпреМрдВ рднрдиреЗ, рдпрд╕ рдореЛрдбрдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА 60MHz рд╣реЛред рд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬрд░ ренрекреи.рел рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рд╣реБрдиреБрдкрд░реНрдЫред

рдкрд░рдореНрдкрд░рд╛рдЧрдд FPGAs рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпреЛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рдЫреИрдирдиреН, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢ред рдпрджреНрдпрдкрд┐, рд╣рд╛рдореНрд░реЛ рднрд╛рдЧреНрдпрдорд╛, FPGA рд╕рдБрдЧ рдирд┐рд░реНрдорд┐рдд DDIO рдкрд┐рдирд╣рд░реВ рдЫрдиреНред рдпреА рдирд┐рд╖реНрдХрд░реНрд╖рд╣рд░реВ рд╣реБрдиреН рдЬреБрди рдкрд╣рд┐рд▓реЗ рдиреИ рдЫрдиреН, рдЬрд╕реНрддреИ рдпреЛ рдерд┐рдпреЛ, реи-рджреЗрдЦрд┐-рез рд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬрд░рд╣рд░реВред рдЕрд░реНрдерд╛рддреН, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдмрдвреНрджреЛ рд░ рдШрдЯреНрджреЛ рдШрдбреА рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╣рд░реВрд╕рдБрдЧ рдЕрдиреБрдХреНрд░рдордорд╛ рджреБрдИ рдмрд┐рдЯрд╣рд░реВ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ FPGA рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛ рддрдкрд╛рдИрдВрд▓реЗ 2 MHz рд╣реЛрдЗрди, рддрд░ 1 MHz рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ FPGA рдорд╛ DDIO рдЖрдЙрдЯрдкреБрдЯ рддрддреНрд╡рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╣рд╛рдБ 740 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдкрд╣рд┐рд▓реЗ рдиреИ рдПрдХ рдкреНрд░рд╛рдкреНрдд рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА рд╣реЛред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, 370x370 рдореЛрдб рд╕реАрдорд╛ рд╣реЛред Rover1280rpi рдмреЛрд░реНрдбрдорд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣рд╛рдореНрд░реЛ FPGA рдЪрдХреНрд░рд╡рд╛рдд IV рдорд╛ рдЙрдЪреНрдЪ рд░рд┐рдЬреЛрд▓реНрдпреБрд╕рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред

рддреНрдпрд╕реЛрднрдП, рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛, рдЗрдирдкреБрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА 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

рддрд░ рдпреЛ рд╕рдореНрднрд╡рддрдГ рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрджреИрдиред DDIO рдЖрдЙрдЯрдкреБрдЯ рддрддреНрд╡рд╣рд░реВ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓реЗ Altera рдХреЛ ALTDIO_OUT рдореЗрдЧрд╛рдлрдВрдХреНрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдореЗрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдореНрдкреЛрдиреЗрдиреНрдЯ ALTDIO_OUT рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

рдпреЛ рд╕рдмреИ рдереЛрд░реИ рдХрдард┐рди рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ, рддрд░ рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрджрдЫред

рддрдкрд╛рдИрдВрд▓реЗ Verilog HDL рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдпрд╣рд╛рдБ github рдорд╛.

FPGA рдХрд╛ рд▓рд╛рдЧрд┐ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдлрд░реНрдорд╡реЗрдпрд░ рдорд╛рд░реНрд╕ рд░реЛрднрд░2rpi рдмреЛрд░реНрдбрдорд╛ рд╕реНрдерд╛рдкрд┐рдд EPCS рдЪрд┐рдкрдорд╛ рдЗрдореНрдмреЗрдб рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕рд░реА, рдЬрдм рд╢рдХреНрддрд┐ FPGA рдмреЛрд░реНрдбрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ, FPGA рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реАрдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреЗрдЫ рд░ рд╕реБрд░реБ рд╣реБрдиреЗрдЫред

рдЕрдм рд╣рд╛рдореА рд░рд╛рд╕реНрдкрдмреЗрд░реА рдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдереЛрд░реИ рдХреБрд░рд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдо рдбреЗрдмрд┐рдпрди рдмрд╕реНрдЯрд░, рд╕рдВрд╕реНрдХрд░рдг: рдЕрдЧрд╕реНрдд реирежреиреж рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкреАрдЖрдИ рдУрдПрд╕ (рейреи рдмрд┐рдЯ) рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдЫреБред
рд░рд┐рд▓реАрдЬ рдорд┐рддрд┐: 2020-08-20, рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: 5.4ред

рддрдкрд╛рдИрдВрд▓реЗ рджреБрдИ рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

  • config.txt рдлрд╛рдЗрд▓ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН;
  • рджреБрдИ рдореЛрдирд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди X рд╕рд░реНрднрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

/boot/config.txt рдлрд╛рдЗрд▓ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ:

  1. i2c, i2s, spi рдХреЛ рдкреНрд░рдпреЛрдЧ рдЕрд╕рдХреНрд╖рдо рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН;
  2. рдУрднрд░рд▓реЗ dtoverlay=dpi24 рд╕рдБрдЧ DPI рдореЛрдб рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН;
  3. рднрд┐рдбрд┐рдпреЛ рдореЛрдб рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН 1280├Ч720 60Hz, 24 рдмрд┐рдЯ рдкреНрд░рддрд┐ рдмрд┐рдиреНрджреБ рдкреНрд░рддрд┐ DPI;
  4. рдлреНрд░реЗрдордмрдлрд░ реи рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (max_framebuffers=2, рддреНрдпрд╕рдкрдЫрд┐ рдорд╛рддреНрд░ рджреЛрд╕реНрд░реЛ рдпрдиреНрддреНрд░ /dev/fb2 рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫ)

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 рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреНрдпрд╕рдкрдЫрд┐ рдбреЗрд╕реНрдХрдЯрдк рд╕реНрдкреЗрд╕ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рджреБрдИ рдореЛрдирд┐рдЯрд░рд╣рд░реВрдорд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░рд┐рдиреЗрдЫ, рдЬрд╕реНрддреИ рдорд╛рдерд┐рдХреЛ рдбреЗрдореЛ рднрд┐рдбрд┐рдпреЛрдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫред

рд╕рд╛рдпрдж рдпрддрд┐ рдиреИ рд╣реЛред рдЕрдм, рд░рд╛рд╕реНрдкрдмреЗрд░реА Pi3 рдорд╛рд▓рд┐рдХрд╣рд░реВрд▓реЗ рджреБрдИ рдореЛрдирд┐рдЯрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫрдиреНред

Mars Rover2rpi рдмреЛрд░реНрдбрдХреЛ рд╡рд┐рд╡рд░рдг рд░ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд╣реБрди рд╕рдХреНрдЫ рдпрд╣рд╛рдБ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН.

рд╕реНрд░реЛрдд: www.habr.com