
рд╣рд╛рдп Habr - рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ Altera Cyclone III
FPGAs рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдкрдиреА рд╕рдлрд▓рддрд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рд░реЛрд╢рдиреА рдФрд░ рдЧреЗрдо рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж - рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдЧрдВрднреАрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡реАрдЬреАрдП рдПрдбреЙрдкреНрдЯрд░ рдмрдирд╛рдпрд╛ред рдЗрд╕рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рд▓реЗрдЦ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрднрд╡реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрдп рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдп рд╣реИред рдореИрдВ
Altera DE0 рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдкрд░ рдЕрдкрдиреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛
рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ
рд╡реЗрд░рд┐рд▓реЛрдЧ , рдмреБрдзрд╡рд╛рд░ рдХреЛ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ - рдХреНрд╡рд╛рд░реНрдЯреНрд╕ II v 12.0ред рддреЛ - рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ:
рдПрдХ рд╡реАрдЬреАрдП рдПрдбрд╛рдкреНрдЯрд░ рдХреЗ рдмреНрд▓реЙрдХ рдЖрд░реЗрдЦрд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡реАрдЬреАрдП рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╡реАрдЬреАрдП рдПрдХ рдХреИрдереЛрдб рд░реЗ рдЯреНрдпреВрдм рдХреЗ рд╕рд╛рде рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрд▓рд╕реАрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдмреАрдо рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдврд╝рд╛рдирд╛ / рдХрдордЬреЛрд░ рдХрд░рдирд╛ рдпрд╛ рдЗрд╕реЗ рд╕рд╣реА рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рдореИрдВрдиреЗ рд╡реАрдЬреАрдП рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ - рдореИрдВ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ - рдЗрд╕ рдорд╛рдирдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рддрдиреА рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ - рдЬреЛ, рд╕рдВрдпреЛрдЧрд╡рд╢, рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдЗрд╕реЗ рдордирд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд▓реЗрдЦ рдорд╛рдирдХ рдХреЛ рдорд╛рд╣рд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╡реАрдЬреАрдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдХреА рд▓реЗрдЦ рдХрд╛ рдЕрдВрд╢:рд╡реАрдЬреАрдП (рд╕рд╛рде рд╣реА рд╕рд╛рде рдИрдЬреАрдП) рдореЗрдВ рдирд┐рдореНрди рдореБрдЦреНрдп рдЙрдкрдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╢рдмреНрдж "рд╕реАрдХреНрд╡реЗрдВрд╕рд░" рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдкреНрд▓реЗрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ):
- рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ (рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░), рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдЪрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдкрд░ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
- рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА (рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдореЛрд░реА), рдЬрд┐рд╕рдореЗрдВ рдореЙрдирд┐рдЯрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред 256 kB DRAM рдХреЛ рдЪрд╛рд░ 64 kB рд░рдВрдЧ рдХреА рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд╕реАрд░рд┐рдпрд▓ рдХрдиреНрд╡рд░реНрдЯрд░ (Serializer рдпрд╛ Sequencer) - рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдПрдХ рдмрд┐рдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдЕрдЯреЙрд░реНрдиреА рдХрдВрдЯреНрд░реЛрд▓рд░ - рдкреИрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝рд░ (Sequencer) - рд╡реАрдбрд┐рдпреЛ рдПрдбреЗрдкреНрдЯрд░ рдФрд░ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд░рдВрдЧ рдкрд░рддреЛрдВ рдХреЗ рдЕрд╕реНрдерд╛рдпреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
- CRT рдХрдВрдЯреНрд░реЛрд▓рд░ (CRT рдХрдВрдЯреНрд░реЛрд▓рд░) - CRT рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝рд░ рдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдкрд░ 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХрд╛ рдЬрдирд░реЗрдЯрд░ рдореМрдЬреВрдж рд╣реЛрдЧрд╛ред
рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдФрд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕реНрд╡рдпрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдЯ рд╕реНрдЯреНрд░реАрдо рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП - рдХрд╛рд░реНрдп рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝рд░ - 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛
- рдПрдХ рд╕реАрдЖрд░рдЯреА рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛ рд╡реАрдЬреАрдП рдорд╛рдирдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛
- рдЪрд┐рддреНрд░ рдЬрдирд░реЗрдЯрд░ - рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ - рдмреНрд▓реЙрдХ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрд╕реНрд╡реАрд░ рдЦреАрдВрдЪреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕реАрдЖрд░рдЯреА рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рджреЗрдЧрд╛
рд╕рдордХрд╛рд▓реАрди рдмрдирд╛рдиреЗрд╡рд╛рд▓рд╛
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рд┐рдХреА рдкрд░ рдЪрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡реАрдЬреАрдП рдХреЗ рд▓рд┐рдП
рд╕рд┐рдЧреНрдирд▓ рдЯрд╛рдЗрдорд┐рдВрдЧ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдШрдбрд╝реА рдХреА рдЖрд╡реГрддреНрддрд┐ 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


рдпрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рд╣реИ - 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП - 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬред рдкреАрдПрд▓рдПрд▓ рдпрд╛
рдкреАрдПрд▓рдПрд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред
рдореЗрдЧрд╛ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдкреАрдПрд▓рдПрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреВрд▓ / рдореЗрдЧрд╛рд╡рд┐рдЬрд╛рд░реНрдб рдкреНрд▓рдЧ-рдЗрдирдореИрдирдЬрд░ рдкрд░ рдЬрд╛рдПрдВред рд╡рд╣рд╛рдВ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ Verilog HDL I / O ALTPLL рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ - рдЗрдирдкреБрдЯ рдЖрд╡реГрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдФрд░ рднрд╛рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╣рдореЗрдВ 0.5035 рдирдВрдмрд░ рдХреЛ рдПрдХ рдЕрдВрд╢ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк 5035 рд╕реЗ рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ 10000 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рджреЛрдиреЛрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ 5 рд╕реЗ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ 1007/2000 рдХрд╛ рдЕрдВрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдЦреБрдж рд╣реА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░рдХ рдХреЛ рдЙрдкрд▓рдмреНрдз рдЕрдВрд╢ рдХреЗ рдХрд░реАрдм рд▓рд╛рдПрдЧрд╛ред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдмреЛрд░реНрдб рд╕реЗ рд╣рдорд╛рд░реЗ рдЗрдирдкреБрдЯ рдХреЛ рдЗрд╕рдХреЗ рдЗрдирдкреБрдЯ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рддрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд┐рд░ рд╕реЗ рдХрд╣реАрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдордж рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ - 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
CRT рдирд┐рдпрдВрддреНрд░рдХ
рдШрдбрд╝реА рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ
рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдШрдбрд╝реА рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рддреБрд▓реНрдпрдХрд╛рд▓рди рд╕рдордп рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдХреНрд╖реИрддрд┐рдЬ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИ:

рдпрд╣реА рд╣реИ, рдбреЗрдЯрд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕рдордп рдП рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд▓рд╛рдЗрди рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рд╕рдордп рдмреА рдХреЗ рд▓рд┐рдП рдЬрдореАрди рдкрд░ рджрдмрд╛рдПрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдЙрдЪреНрдЪ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦреЗрдВ, рд╕рдордп рд╕реА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╣реЛрддрд╛ рд╣реИ - рдХрд┐рд░рдг рд╕рдордп рд░реЗрдЦрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ рдФрд░ рд╣рдо рдбреАред 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдордп рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдКрд░реНрдзреНрд╡рд╛рдзрд░ рддреБрд▓реНрдпрдХрд╛рд▓рди рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдШрдбрд╝реА рдХреА рдПрдХ рдЕрд╡рдзрд┐ рдореЗрдВ рд╣рдо рдкреВрд░реЗ рдлреНрд░реЗрдо рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдПрдХ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реАрдЬреАрдП_рд╕реАрдПрд▓рдХреЗ рдЖрд╡реГрддреНрддрд┐ рд▓реЗ рд░рд╣рд╛ рд╣реИ, рдЗрдирдкреБрдЯ рд╕реЗ рд╣рдо рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рд╢рд╛рдпрдж, рдПрдХ рд░реАрд╕реЗрдЯ рд╕рд┐рдЧреНрдирд▓ред рдРрд╕реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
1 / VGA_CLK = 0.03972194637537239324726911618669 microseconds рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ A рдкрд░ 24 рдЪрдХреНрд░, B рдкрд░ 95, C рдкрд░ 48, рдФрд░ 640 рдкрд░ D. рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдЯрд┐рдХрд▓ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рдкрд░ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рддреБрд▓реНрдпрдХрд╛рд▓рди рд╕рдВрдХреЗрдд рдХреЗ рдмрдврд╝рддреЗ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░, рдлрд┐рд░ рд░реЗрдЦрд╛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рд╕рднреА рджреЗрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ "рдирд┐рд╖реНрдХреНрд░рд┐рдп" рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ - рд╕реНрдХреНрд░реАрди рдЯрд┐рдХ рдореЗрдВ рдереЛрдбрд╝реА рдмрдбрд╝реА рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджреГрд╢реНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рд╣рдореЗрдВ рдХрд┐рд░рдг рдХреЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрддрд╛рддрд╛ рд╣реИ, рдФрд░ рднрд▓реЗ рд╣реА рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реЛрдВред рдХреБрдЫ рд░рдВрдЧ - рдЖрдк рдмреАрдо рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдореЙрдбреНрдпреВрд▓module VGA_SYNC( input CLK, input SYNC_RST_N, output reg H_SYNC_CLK, output reg V_SYNC_CLK, output wire [10:0]oCurrent_X, output wire [10:0]oCurrent_Y, output reg oSYNC_COLOR); parameter A_TIME_H = 24; parameter B_TIME_H = 95; parameter C_TIME_H = 48; parameter D_TIME_H = 640; parameter TOTAL_TIME_H = A_TIME_H + B_TIME_H + C_TIME_H + D_TIME_H; parameter BLANK_H = A_TIME_H + B_TIME_H + C_TIME_H; parameter A_TIME_V = 10; parameter B_TIME_V = 2; parameter C_TIME_V = 33; parameter D_TIME_V = 480; parameter TOTAL_TIME_V = A_TIME_V + B_TIME_V + C_TIME_V + D_TIME_V; parameter BLANK_V = A_TIME_V + B_TIME_V + C_TIME_V; reg [10:0]H_Counter; reg [10:0]V_Counter; assign oCurrent_X = (H_Counter >= BLANK_H) ? H_Counter-BLANK_H : 11'h0 ; assign oCurrent_Y = (V_Counter >= BLANK_V) ? V_Counter-BLANK_V : 11'h0 ; always@(posedge(CLK) or negedge(SYNC_RST_N)) begin if(!SYNC_RST_N) begin H_Counter <= 1'b0; H_SYNC_CLK <= 1'b1; end else begin if(H_Counter < (TOTAL_TIME_H-1)) H_Counter <= H_Counter + 1'b1; else begin H_Counter <= 1'b0; oSYNC_COLOR <= 1'b0; end if(H_Counter == A_TIME_H-1) H_SYNC_CLK <= 1'b0; if(H_Counter == A_TIME_H + B_TIME_H-1) H_SYNC_CLK <= 1'b1; if(H_Counter == BLANK_H) oSYNC_COLOR <= 1'b1; end end always@(posedge(H_SYNC_CLK) or negedge(SYNC_RST_N)) begin if(!SYNC_RST_N) begin V_Counter <= 1'b0; V_SYNC_CLK <= 1'b1; end else begin if(V_Counter < (TOTAL_TIME_V-1)) V_Counter <= V_Counter + 1'b1; else V_Counter <= 1'b0; if(V_Counter == A_TIME_V-1) V_SYNC_CLK <= 1'b0; if(V_Counter == A_TIME_V + B_TIME_V-1) V_SYNC_CLK <= 1'b1; end end endmodule
рдЖрдЙрдЯрдкреБрдЯ рдореЙрдбреНрдпреВрд▓
рджрд░рдЕрд╕рд▓, рджрд╛рд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдВрджреБ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреНрдЮрд╛рдд рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд┐рд░рдг рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреА рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЖрд╡реГрддреНрддрд┐ 25.175 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ, 3 рд░рдВрдЧреАрди рдмрд╕реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ 4-рдмрд┐рдЯ рдЖрд░ -2 рдЖрд░ 2 рдЖрд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреАрдПрд╕реА, рдФрд░ рдЖрдЧреЗ - рд╡реАрдЬреАрдП рдХрдиреЗрдХреНрдЯрд░
рдЖрдЙрдЯрдкреБрдЯ рдореЙрдбреНрдпреВрд▓ module VGA_OUT(RESET, SYNC_COLOR, VGA_CLK, oVGA_R, oVGA_G, oVGA_B, iVGA_R, iVGA_G, iVGA_B, Current_X, Current_Y); input wire VGA_CLK; input wire RESET; input wire SYNC_COLOR; input wire [10:0]Current_X; input wire [10:0]Current_Y; input wire [3:0]iVGA_R; input wire [3:0]iVGA_G; input wire [3:0]iVGA_B; output reg [3:0]oVGA_R; output reg [3:0]oVGA_G; output reg [3:0]oVGA_B; always@(posedge VGA_CLK or negedge RESET) begin if(!RESET) begin oVGA_R <= 0; oVGA_G <= 0; oVGA_B <= 0; end else begin oVGA_R <= ((SYNC_COLOR == 1)&&(Current_X > 0)&&(Current_Y > 0)) ? iVGA_R : 0; oVGA_G <= ((SYNC_COLOR == 1)&&(Current_X > 0)&&(Current_Y > 0)) ? iVGA_G : 0; oVGA_B <= ((SYNC_COLOR == 1)&&(Current_X > 0)&&(Current_Y > 0)) ? iVGA_B : 0; end end endmodule
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддрд╕реНрд╡реАрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рдмреНрд▓реЙрдХ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдСрд▓реНрдЯрд░ рдХреЗ рдПрдХреНрд╕рдЯреНрд░реЛрд╡реНрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдмрд┐рд╕реНрдЯрд┐рдо рдЬрдирд░реЗрд╢рди рдореЙрдбреНрдпреВрд▓ module VGA_BITSTREAM ( // Read Out Side oRed, oGreen, oBlue, iVGA_X, iVGA_Y, iVGA_CLK, // Control Signals iRST_n, iColor_SW ); // Read Out Side output reg [9:0] oRed; output reg [9:0] oGreen; output reg [9:0] oBlue; input [9:0] iVGA_X; input [9:0] iVGA_Y; input iVGA_CLK; // Control Signals input iRST_n; input iColor_SW; always@(posedge iVGA_CLK or negedge iRST_n) begin if(!iRST_n) begin oRed <= 0; oGreen <= 0; oBlue <= 0; end else begin if(iColor_SW == 1) begin if (iVGA_Y<120) begin oRed <= (iVGA_X<40) ? 0 : (iVGA_X>=40 && iVGA_X<80) ? 1 : (iVGA_X>=80 && iVGA_X<120) ? 2 : (iVGA_X>=120 && iVGA_X<160) ? 3 : (iVGA_X>=160 && iVGA_X<200) ? 4 : (iVGA_X>=200 && iVGA_X<240) ? 5 : (iVGA_X>=240 && iVGA_X<280) ? 6 : (iVGA_X>=280 && iVGA_X<320) ? 7 : (iVGA_X>=320 && iVGA_X<360) ? 8 : (iVGA_X>=360 && iVGA_X<400) ? 9 : (iVGA_X>=400 && iVGA_X<440) ? 10 : (iVGA_X>=440 && iVGA_X<480 ) ? 11 : (iVGA_X>=480 && iVGA_X<520 ) ? 12 : (iVGA_X>=520 && iVGA_X<560 ) ? 13 : (iVGA_X>=560 && iVGA_X<600 ) ? 14 : 15 ; oGreen <= 0; oBlue <= 0; end else if (iVGA_Y>=120 && iVGA_Y<240) begin oRed <= 0; oGreen <= (iVGA_X<40) ? 15 : (iVGA_X>=40 && iVGA_X<80) ? 14 : (iVGA_X>=80 && iVGA_X<120) ? 13 : (iVGA_X>=120 && iVGA_X<160) ? 12 : (iVGA_X>=160 && iVGA_X<200) ? 11 : (iVGA_X>=200 && iVGA_X<240) ? 10 : (iVGA_X>=240 && iVGA_X<280) ? 9 : (iVGA_X>=280 && iVGA_X<320) ? 8 : (iVGA_X>=320 && iVGA_X<360) ? 7 : (iVGA_X>=360 && iVGA_X<400) ? 6 : (iVGA_X>=400 && iVGA_X<440) ? 5 : (iVGA_X>=440 && iVGA_X<480 ) ? 4 : (iVGA_X>=480 && iVGA_X<520 ) ? 3 : (iVGA_X>=520 && iVGA_X<560 ) ? 2 : (iVGA_X>=560 && iVGA_X<600 ) ? 1 : 0 ; oBlue <= 0; end else if (iVGA_Y>=240 && iVGA_Y<360) begin oRed <= 0; oGreen <= 0; oBlue <= (iVGA_X<40) ? 0 : (iVGA_X>=40 && iVGA_X<80) ? 1 : (iVGA_X>=80 && iVGA_X<120) ? 2 : (iVGA_X>=120 && iVGA_X<160) ? 3 : (iVGA_X>=160 && iVGA_X<200) ? 4 : (iVGA_X>=200 && iVGA_X<240) ? 5 : (iVGA_X>=240 && iVGA_X<280) ? 6 : (iVGA_X>=280 && iVGA_X<320) ? 7 : (iVGA_X>=320 && iVGA_X<360) ? 8 : (iVGA_X>=360 && iVGA_X<400) ? 9 : (iVGA_X>=400 && iVGA_X<440) ? 10 : (iVGA_X>=440 && iVGA_X<480 ) ? 11 : (iVGA_X>=480 && iVGA_X<520 ) ? 12 : (iVGA_X>=520 && iVGA_X<560 ) ? 13 : (iVGA_X>=560 && iVGA_X<600 ) ? 14 : 15 ; end else begin oRed <= (iVGA_X<40) ? 15 : (iVGA_X>=40 && iVGA_X<80) ? 14 : (iVGA_X>=80 && iVGA_X<120) ? 13 : (iVGA_X>=120 && iVGA_X<160) ? 12 : (iVGA_X>=160 && iVGA_X<200) ? 11 : (iVGA_X>=200 && iVGA_X<240) ? 10 : (iVGA_X>=240 && iVGA_X<280) ? 9 : (iVGA_X>=280 && iVGA_X<320) ? 8 : (iVGA_X>=320 && iVGA_X<360) ? 7 : (iVGA_X>=360 && iVGA_X<400) ? 6 : (iVGA_X>=400 && iVGA_X<440) ? 5 : (iVGA_X>=440 && iVGA_X<480 ) ? 4 : (iVGA_X>=480 && iVGA_X<520 ) ? 3 : (iVGA_X>=520 && iVGA_X<560 ) ? 2 : (iVGA_X>=560 && iVGA_X<600 ) ? 1 : 0 ; oGreen <= (iVGA_X<40) ? 15 : (iVGA_X>=40 && iVGA_X<80) ? 14 : (iVGA_X>=80 && iVGA_X<120) ? 13 : (iVGA_X>=120 && iVGA_X<160) ? 12 : (iVGA_X>=160 && iVGA_X<200) ? 11 : (iVGA_X>=200 && iVGA_X<240) ? 10 : (iVGA_X>=240 && iVGA_X<280) ? 9 : (iVGA_X>=280 && iVGA_X<320) ? 8 : (iVGA_X>=320 && iVGA_X<360) ? 7 : (iVGA_X>=360 && iVGA_X<400) ? 6 : (iVGA_X>=400 && iVGA_X<440) ? 5 : (iVGA_X>=440 && iVGA_X<480 ) ? 4 : (iVGA_X>=480 && iVGA_X<520 ) ? 3 : (iVGA_X>=520 && iVGA_X<560 ) ? 2 : (iVGA_X>=560 && iVGA_X<600 ) ? 1 : 0 ; oBlue <= (iVGA_X<40) ? 15 : (iVGA_X>=40 && iVGA_X<80) ? 14 : (iVGA_X>=80 && iVGA_X<120) ? 13 : (iVGA_X>=120 && iVGA_X<160) ? 12 : (iVGA_X>=160 && iVGA_X<200) ? 11 : (iVGA_X>=200 && iVGA_X<240) ? 10 : (iVGA_X>=240 && iVGA_X<280) ? 9 : (iVGA_X>=280 && iVGA_X<320) ? 8 : (iVGA_X>=320 && iVGA_X<360) ? 7 : (iVGA_X>=360 && iVGA_X<400) ? 6 : (iVGA_X>=400 && iVGA_X<440) ? 5 : (iVGA_X>=440 && iVGA_X<480 ) ? 4 : (iVGA_X>=480 && iVGA_X<520 ) ? 3 : (iVGA_X>=520 && iVGA_X<560 ) ? 2 : (iVGA_X>=560 && iVGA_X<600 ) ? 1 : 0 ; end end else begin oRed <= (iVGA_Y<120) ? 3 : (iVGA_Y>=120 && iVGA_Y<240) ? 7 : (iVGA_Y>=240 && iVGA_Y<360) ? 11 : 15 ; oGreen <= (iVGA_X<80) ? 1 : (iVGA_X>=80 && iVGA_X<160) ? 3 : (iVGA_X>=160 && iVGA_X<240) ? 5 : (iVGA_X>=240 && iVGA_X<320) ? 7 : (iVGA_X>=320 && iVGA_X<400) ? 9 : (iVGA_X>=400 && iVGA_X<480) ? 11 : (iVGA_X>=480 && iVGA_X<560) ? 13 : 15 ; oBlue <= (iVGA_Y<60) ? 15 : (iVGA_Y>=60 && iVGA_Y<120) ? 13 : (iVGA_Y>=120 && iVGA_Y<180) ? 11 : (iVGA_Y>=180 && iVGA_Y<240) ? 9 : (iVGA_Y>=240 && iVGA_Y<300) ? 7 : (iVGA_Y>=300 && iVGA_Y<360) ? 5 : (iVGA_Y>=360 && iVGA_Y<420) ? 3 : 1 ; end end end endmodule
рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ module VGA_MAIN(CLOCK_50, KEY, LEDG, VGA_HS, VGA_VS, VGA_R, VGA_G, VGA_B, SW ); input CLOCK_50; input [2:0]KEY; input [9:0]SW; output [9:0]LEDG; output VGA_HS; // VGA H_SYNC output VGA_VS; // VGA V_SYNC output [3:0] VGA_R; // VGA Red[3:0] output [3:0] VGA_G; // VGA Green[3:0] output [3:0] VGA_B; // VGA Blue[3:0] wire VGA_CLK; wire H_SYNC_CLK; wire V_SYNC_CLK; wire RESET; wire [10:0]Current_X; wire [10:0]Current_Y; wire SYNC_COLOR; reg [3:0] iVGA_R; reg [3:0] iVGA_G; reg [3:0] iVGA_B; wire [3:0] irVGA_R; wire [3:0] irVGA_G; wire [3:0] irVGA_B; assign irVGA_R[3:0] = iVGA_R[3:0]; assign irVGA_G[3:0] = iVGA_G[3:0]; assign irVGA_B[3:0] = iVGA_B[3:0]; assign RESET = KEY[0]; assign VGA_HS = H_SYNC_CLK; assign VGA_VS = V_SYNC_CLK; VGA_PLL u1 ( .inclk0(CLOCK_50), .c0(VGA_CLK) ); VGA_SYNC u2 ( .CLK(VGA_CLK), .H_SYNC_CLK(H_SYNC_CLK), .V_SYNC_CLK(V_SYNC_CLK), .SYNC_RST_N(KEY[0]), .oCurrent_X(Current_X), .oCurrent_Y(Current_Y), .oSYNC_COLOR(SYNC_COLOR)); VGA_OUT u3 ( .oVGA_R(VGA_R[3:0]), .oVGA_G(VGA_G[3:0]), .oVGA_B(VGA_B[3:0]), .iVGA_R(iVGA_R[3:0]), .iVGA_G(iVGA_G[3:0]), .iVGA_B(iVGA_B[3:0]), .VGA_CLK(VGA_CLK), .Current_X(Current_X), .Current_Y(Current_Y), .SYNC_COLOR(SYNC_COLOR), .RESET(RESET) ); VGA_BITSTREAM u4(.oRed(irVGA_R), .oGreen(irVGA_G), .oBlue(irVGA_B), .iVGA_X(Current_X), .iVGA_Y(Current_Y), .iVGA_CLK(VGA_CLK), .iRST_n(RESET), .iColor_SW(SW[0])); endmodule
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЖрд░реЗрдЦ рд╣реИ:


рдЦреИрд░, рд╡реАрдбрд┐рдпреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ - рдЖрдкрдХреЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдХрджрдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдФрд░ рдмрд╛рд╣рд░реА рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд╕рдЯреАрдПрдо 32ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореИрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдирд╛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдПрдбреЗрдкреНрдЯрд░ рдкрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдм рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ - рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд░рд╛рдиреА рд╣реИрдВ рдФрд░ рдмрд▓реНрдХрд┐ рдЖрджрд┐рдо рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рдореЗрдХрд┐рдд рдХреМрд╢рд▓ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди, рд╕рд▓рд╛рд╣ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ