FPGA рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред "рд╕рдВрдкрд░реНрдХреЛрдВ рдХрд╛ рдЙрдЫрд╛рд▓" рдФрд░ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдзреНрдпрдпрди

рд╣рдо FPGAs рдФрд░ VHDL рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ, рд╣рдо "рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ рдЙрдЫрд╛рд▓" рдХреА рдШрдЯрдирд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╕рдордЭреЗрдВрдЧреЗред

рддреЛ, рдХрд╛рдо рдХрд╛ рд▓рдХреНрд╖реНрдп: " рд╕рдВрдкрд░реНрдХ рдХреЗ рдмрдХрд╡рд╛рд╕ " рдХреА рдШрдЯрдирд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Xilinx ISE рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ: рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп 1 рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред


рднрд╛рдЧ 1. рд╕рдВрдкрд░реНрдХ рдЙрдЫрд╛рд▓ рдХреНрдпрд╛ рд╣реИ?


"рд╢реЙрдХрд┐рдВрдЧ рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рд╣реИ рдЬреЛ рдмрд┐рдЬрд▓реА рдФрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╕реНрдерд┐рд░ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рджреЛрд▓рдиреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ" (рд╕реА) рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ред
рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдЬрдм рдЖрдк рдмрдЯрди рджрдмрд╛рддреЗ рдФрд░ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреБрд░рдВрдд рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдмрдЯрди рдЖрдкрд╕ рдореЗрдВ рдЦрдбрд╝рдЦрдбрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХрдИ рджрд╛рд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрди рджрд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред рдиреЗрддреНрд░рд╣реАрди, рдЖрд╕реНрдЯрд╕реАрд▓реЛрдЧреНрд░рд╛рдо рдкрд░ рдЙрдЫрд╛рд▓ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рдХреНрд╖рдг рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрдм рдмрдЯрди рдЫреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:



рднрд╛рдЧ 2. рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ред


рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ , Xilinx ISE рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ v12.3 рдореЗрдВ рд╕реНрдкрд╛рд░реНрдЯрди -3 рдИ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, drebezg_habr рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ:

1. рд╣рдореЗрдВ рдПрдХ рдмрдЯрди рдФрд░ рдЖрда рдПрд▓рдИрдбреА рдЪрд╛рд╣рд┐рдПред рдкреЛрд░реНрдЯ рдореЗрдВ btn рдЗрдирдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рдФрд░ 8 рдПрд▓рдИрдбреА рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рдЬреЛрдбрд╝реЗрдВ:
рд╕рдВрд╕реНрдерд╛ drebezg_habr рд╣реИ
рдкреЛрд░реНрдЯ ( clk : STD_LOGIC рдореЗрдВ ;
btn : STD_LOGIC рдореЗрдВ ;
рдиреЗрддреГрддреНрд╡ : рдмрд╛рд╣рд░ STD_LOGIC_VECTOR ( 0 рд╕реЗ рдиреАрдЪреЗ 7 ) ) ;
рдЕрдВрдд drebezg_habr ;

2. pin.ucf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдмрдЯрди рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрд▓рдИрдбреА рдХреЗ рдЕрдиреБрд░реВрдк рдкреИрд░реЛрдВ рдХреЗ рдирд╛рдо рд▓рд┐рдЦреЗрдВ:
NET "clk" LOC = "C9" ;
NET "рдПрд▓рдИрдбреА <0>" LOC = "F12" ;
NET "рдПрд▓рдИрдбреА <1>" LOC = "E12" ;
NET "рдПрд▓рдИрдбреА <2>" LOC = "E11" ;
NET "рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ <3>" LOC = "F11" ;
NET "рдПрд▓рдИрдбреА <4>" LOC = "C11" ;
NET "рдПрд▓рдИрдбреА <5>" LOC = "D11" ;
NET "рдПрд▓рдИрдбреА <6>" LOC = "E9" ;
рдиреЗрдЯ "рдПрд▓рдИрдбреА <7>" рдПрд▓рдУрд╕реА = "рдПрдл 9" ;
рдиреЗрдЯ " рдмреАрдЯреАрдПрди" рдПрд▓рдУрд╕реА = "рдХреЗ 17" ;
рдиреЗрдЯ " рдмреАрдЯреАрдПрди " рдкреВрд░реНрдг ;

рдкреИрд░ K17 рдЙрдкрд▓рдмреНрдз рдХреЗ рдирд┐рдЪрд▓реЗ рдмрдЯрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:

PULLUP рд╢рдмреНрдж рдПрдХ рдмрдЯрди рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (FPGA рдХреЗ рдЕрдВрджрд░):


рднрд╛рдЧ 3. рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред


Drebezg_habr.vhd рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВред рдЖрдЗрдП рдПрдХ 8-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░-рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмрд╛рд░ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ: рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмреАрдЪ рдФрд░ рд╣рдо рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рд╕рдВрдХреЗрдд count_led : std_logic_vector ( 7 рдбрд╛рдЙрдиреНрдЯреЛ 0 ) ;

рдФрд░ рддреБрд░рдВрдд, рд╢рдмреНрдж рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╣рдорд╛рд░реЗ рдПрд▓ рдИ рдбреА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рдиреЗрддреГрддреНрд╡ <= count_led ;

рдЕрдм рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдмрдЯрди рджрдмрд╛рдиреЗ рдкрд░ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛рдЙрдВрдЯ_рд▓реНрдб рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рддреБрд░рдВрдд рдирд┐рд░реНрдгрдп рдПрдХ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдарддрд╛ рд╣реИ рдЬреЛ рдмрдЯрди рдХреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ:
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ drebezg_habr рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ

рд╕рдВрдХреЗрдд count_led : std_logic_vector ( 7 рдбрд╛рдЙрдиреНрдЯреЛ 0 ) ;
рд╕рдВрдХреЗрдд old_btn : std_logic ;

рд╢реБрд░реВ рдХрд░рдирд╛

рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( clk )
рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдЧрд░ рдЙрда рд░рд╣рд╛ рд╣реИ рддреЛ ( clk ) рддрдм
old_btn <= btn ;
рдЕрдЧрд░ рдкреБрд░рд╛рдирд╛_рдмрдЯрди = ' 0 ' рдФрд░ рдмреАрдЯреАрдПрди = ' 1 ' рддрдм
count_led <= count_led + 1 ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ ;

рдиреЗрддреГрддреНрд╡ <= count_led ;

рдЕрдВрдд рд╡реНрдпрд╡рд╣рд╛рд░ ;

рд╣рдо рдкреНрд░рд╕рд╛рд░рдг, рд╕реАрдирд╛, рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбрд╛рдпреЛрдб рдмрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЭрдкрдХрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдЧрд░ old_btn = '0' рдФрд░ btn = '1' рд╣реИ рддреЛ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ рдЭреБрдирдЭреБрдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ рдФрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрд╣реБрдд рд╕рд╛рд░реА рдШрдЯрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рдШрдЯрдирд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдЗрдХрд╛рдИ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдореВрд▓реНрдп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ 1 рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрдЯрди рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдЗрдХрд╛рдИ рдХрд╛ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред рдХрд╛рдЙрдВрдЯрд░ рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рд╣реИ рдпрджрд┐ рдмрдЯрди рдиреЗ рддрд╛рд░реНрдХрд┐рдХ рд╢реВрдиреНрдп рдХрд╛ рдорд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдЫрд╛рд▓ рдХреЗ рдХрд╛рд░рдг рджрдмрд╛рдП рдЬрд╛ рд░рд╣реЗ рдПрдХ рдмрдЯрди рдХреЗ рджреМрд░рд╛рди рдЪрд╛рд╣реЗ рдХрд┐рддрдиреА рднреА рджрд╛рд▓реЗрдВ рд╣реЛрдВ, рдПрдХ рдХреНрд╖рдг рдЖрдПрдЧрд╛ рдЬрдм рдмреАрдЯреАрдПрди рдХрд╛ рдореВрд▓реНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЗрдХрд╛рдИ рдкрд░ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдП, рдХрд╛рдЙрдВрдЯрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдиреНрдпрд╛рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдЯрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдерд╛ред рдЕрдм рд╣рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ old_btn рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ drebezg_habr рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ

рд╕рдВрдХреЗрдд count_led : std_logic_vector ( 7 рдбрд╛рдЙрдиреНрдЯреЛ 0 ) ;
рдирд┐рд░рдВрддрд░ clk_freq : рдкреВрд░реНрдгрд╛рдВрдХ : = 50 _000_000 ; - рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдЖрд╡реГрддреНрддрд┐
рдирд┐рд░рдВрддрд░ btn_wait : рдкреВрд░реНрдгрд╛рдВрдХ : = clk_freq / 4 ; - рд╣рдо рдПрдХ рдпреВрдирд┐рдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 0.25 рд╕реЗрдХрдВрдб рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ
рд╕рдВрдХреЗрдд рдЧрдгрдирд╛ : рдкреВрд░реНрдгрд╛рдВрдХ рд╕реАрдорд╛ 0 рд╕реЗ btn_wait : = 0 ;

рд╢реБрд░реВ рдХрд░рдирд╛

рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( clk )
рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдЧрд░ рдЙрда рд░рд╣рд╛ рд╣реИ рддреЛ ( clk ) рддрдм
рдЕрдЧрд░ btn = ' 1 ' рддреЛ
рдЧрд┐рдирддреА <= рдЧрд┐рдирддреА + 1 ;
рдЕрдЧрд░ рдЧрд┐рдирддреА = btn_wait
count_led <= count_led + 1 ;
рдЧрд┐рдирддреА <= 0 ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдиреНрдпрдерд╛
рдЧрд┐рдирддреА <= 0 ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ ;

рдиреЗрддреГрддреНрд╡ <= count_led ;

рдЕрдВрдд рд╡реНрдпрд╡рд╣рд╛рд░ ;

Btn_wait рдорд╛рди рдХреЛ 0.25 рд╕реЗрдХрдВрдб рдЪреБрдирд╛ рдЧрдпрд╛ рддрд╛рдХрд┐ count_led рдорд╛рди рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рдЬреЛрдбрд╝рд╛ рди рдЬрд╛рдП рдЬрдмрдХрд┐ рдмрдЯрди рдХреНрд▓реИрдореНрдкрдб рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реЛред
рдПрдВрдЯреА-рдмрд╛рдЙрдВрд╕ (рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп) рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдмреАрдЯреАрдПрди 1 рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЗрдХрд╛рдИ рд╣реИ, рдФрд░ рдмреАрдЯреАрдПрди рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдкрд░ рдЧрдгрдирд╛ 1 рд╕реЗ рдШрдЯрд╛рдХрд░ 1 рдореЗрдВ рдЧрд┐рдирддреА рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЧрд┐рдирддреА рдорд╛рди 0 рдкрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрдЯрди рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдмрдХрдмрдХ рдерд╛ред рдЦреИрд░, рдЕрдЧрд░ рдХрд╝реАрдорддреА btn_wait рдХреА рдЧрд┐рдирддреА рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдПрдХ рдкреНрд░реЗрд╕ рдерд╛ =
рдПрдХ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ: рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдФрд░ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж count_led рдЬреЛрдбрд╝реЗрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдо "рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ рдЙрдЫрд╛рд▓" рдХреА рдШрдЯрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдП рдФрд░ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рд╕реАрдЦ рджреАред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рди рдХреЗрд╡рд▓ рдмрдЯрди, рдЯреЙрдЧрд▓ рд╕реНрд╡рд┐рдЪ рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рдЪреАрдЬреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрднреА-рдХрднреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рднреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП RS-232ред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред рдореИрдВ FPGAs рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

Source: https://habr.com/ru/post/In133871/


All Articles