рдХреНрдпрд╛ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ VHDL рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рдХрдард┐рди рд╣реИ?

рдХреНрдпрд╛ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ VHDL рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд рдкреНрд░реЗрд░рдгрд╛ рд╣реИ ...


рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕ рдкрд▓ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдкрдбрд╝реЛрд╕реА рдиреЗ рдореБрдЭреЗ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдкрд▓реНрд╕ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ рд╕рдХреЗ рдФрд░ рдкрд▓реНрд╕ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдЕрд╡рдзрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдФрд░ 0.1 рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде ...

рдФрд░ рдореЗрд░реА рд░рд╛рдп рд╕реАрдкреАрдПрд▓рдбреА (200 рд░реВрдмрд▓, рд╕реЙрд░реНрдЯ) рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХрд╛рд░реНрдл рдкрд░ рдЧрд┐рд░ рдЧрдИ, рдЬрд┐рд╕ рдкрд░ рд╕рдВрдХреЗрддрдХ рдФрд░ рдмрдЯрди рдереЗред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕реА рдЪреАрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛, рдФрд░ ...

VHDL рдпрд╛ рд╡реЗрд░рд┐рд▓реЙрдЧ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕реА рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдПрдбреАрдП рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ - рдЗрд╕рд▓рд┐рдП рд╡реАрдПрдЪрдбреАрдПрд▓ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, FPGA рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрдп рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП)ред

рддреЛ, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рд╢рдмреНрдж рдерд╛ рдХрд┐ рдЪрд▓реЛ рдЦреБрдж рдХреЛ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рджреЗрд╢реА рдЪреВрд░реЗ рдХреА рдЖрд╡реГрддреНрддрд┐ 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╣рдо рдЗрд╕реЗ 10 рддрдХ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ, рддрд╛рдХрд┐ рдШрдбрд╝реА рдХреА рд░реЗрдЦрд╛ рдХрд╛ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдордзреНрдп рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣реЛред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИред

-- 100 ns signal generator process(clk) variable t:integer range 0 to 5 := 0; begin if rising_edge(clk) then t := t + 1; if t = 5 then t := 0; tact <= not tact; end if; if t = 2 then tact <= not tact; end if; end if; end process; 

рдлрд┐рд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдореВрд▓реНрдп рд╣реИрдВ - рдЕрд╡рдзрд┐ рдХреА рдЕрд╡рдзрд┐ рдФрд░ рдЖрд╡реЗрдЧ рдХреА рд▓рдВрдмрд╛рдИ, рддрд╛рдХрд┐ рдЕрд╡рдзрд┐ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣рдо 3 рдкрд░рд┐рдЪрд┐рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ (рджрд╕рд╡реАрдВ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП), рдФрд░ рдЕрд╡рдзрд┐ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП - 3ред

 shared variable period : integer range 0 to 1000 := 500; shared variable duty : integer range 0 to 1000 := 250; shared variable dig1:std_logic_vector(3 downto 0):="0000"; shared variable dig2:std_logic_vector(3 downto 0):="0101"; shared variable dig3:std_logic_vector(3 downto 0):="0010"; shared variable di1:std_logic_vector(3 downto 0):="0000"; shared variable di2:std_logic_vector(3 downto 0):="0000"; shared variable di3:std_logic_vector(3 downto 0):="0101"; 

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

рдпрд╣рд╛рдБ рдкреНрд░рдмрдВрдзрди рд╣реИ
 process(key1) begin if rising_edge(key1) then ready <= not ready; end if; end process; process(key3) begin if rising_edge(key3) then if key4 = '1' then inc_duty; else dec_duty; end if; end if; end process; process(key2) begin if rising_edge(key2) then if key4 = '1' then inc_period; else dec_period; end if; end if; end process; 


рдкреНрд░рдмрдВрдзрди рдореЗрдВ inc / dec рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рдпрд╣рд╛рдВ рд╡реЗ рд╣реИрдВ
 procedure inc_duty is begin if duty < period then duty := duty + 1; if dig1 = "1001" then dig1 := "0000"; if dig2 = "1001" then dig2 := "0000"; if dig3 = "1001" then dig3 := "0000"; else dig3 := dig3 + 1; end if; else dig2 := dig2 + 1; end if; else dig1 := dig1 + 1; end if; end if; end procedure; procedure dec_duty is begin if duty > 1 then duty := duty - 1; if dig1 = "0000" then dig1 := "1001"; if dig2 = "0000" then dig2 := "1001"; dig3 := dig3 - 1; else dig2 := dig2 - 1; end if; else dig1 := dig1 - 1; end if; end if; end procedure; procedure inc_period is begin if period < 1000 then period := period + 1; if di1 = "1001" then di1 := "0000"; if di2 = "1001" then di2 := "0000"; if di3 = "1001" then di3 := "0000"; else di3 := di3 + 1; end if; else di2 := di2 + 1; end if; else di1 := di1 + 1; end if; end if; end procedure; procedure dec_period is begin if period > 1 then period := period - 1; if di1 = "0000" then di1 := "1001"; if di2 = "0000" then di2 := "1001"; if di3 = "0000" then di3 := "1001"; else di3 := di3 - 1; end if; else di2 := di2 - 1; end if; else di1 := di1 - 1; end if; end if; end procedure; 


рдпрд╣ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИ (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЦреИрд░, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдд-рдЦрдВрдб рд╕рдВрдХреЗрддрдХ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ 6 (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 8) рд╣реИрдВред рд╣рдо рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреЗ рджрд╕рд╡реЗрдВ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреБрдЧрддрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдЕрдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:

 process(tactX) begin case tactX is when"000"=> en_xhdl<="11111110"; when"001"=> en_xhdl<="11111101"; when"010"=> en_xhdl<="11111011"; when"011"=> en_xhdl<="11110111"; when"100"=> en_xhdl<="11101111"; when"101"=> en_xhdl<="11011111"; when"110"=> en_xhdl<="10111111"; when"111"=> en_xhdl<="01111111"; when others => en_xhdl<="01111111"; end case; end process; process(en_xhdl) begin case en_xhdl is when "11111110"=> data4<=dig1; when "11111101"=> data4<=dig2; when "11111011"=> data4<=dig3; when "11110111"=> data4<="1111"; when "11101111"=> data4<=di1; when "11011111"=> data4<=di2; when "10111111"=> data4<=di3; when "01111111"=> data4<="0000"; when others => data4<="1111"; end case; end process; process(data4) begin case data4 is WHEN "0000" => dataout_xhdl1 <= "11000000"; WHEN "0001" => dataout_xhdl1 <= "11111001"; WHEN "0010" => dataout_xhdl1 <= "10100100"; WHEN "0011" => dataout_xhdl1 <= "10110000"; WHEN "0100" => dataout_xhdl1 <= "10011001"; WHEN "0101" => dataout_xhdl1 <= "10010010"; WHEN "0110" => dataout_xhdl1 <= "10000010"; WHEN "0111" => dataout_xhdl1 <= "11111000"; WHEN "1000" => dataout_xhdl1 <= "10000000"; WHEN "1001" => dataout_xhdl1 <= "10010000"; WHEN OTHERS => dataout_xhdl1 <= "11111111"; END CASE; END PROCESS; 

рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХрд╛рд░реНрдл рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рд╣реИ - рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ! en_xhdl - рдпрд╣ рд╕рд┐рдЧреНрдирд▓ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЪрдХреНрд░ рдореЗрдВ рдХреМрди рд╕рд╛ рд╕рдВрдХреЗрддрдХ рдЪрд╛рд▓реВ рд╣реИ, dataout_xhdl1 - рдпрд╣ рд╕рдВрдХреЗрдд рдПрд▓ рдИ рдбреА рдкрд░ рдореБрдбрд╝рддрд╛ рд╣реИ, рдареАрдХ рд╣реИ, data4 рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ рдФрд░ рдПрдХ рдЕрдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рджрд┐рд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рд╕рдм рдХреБрдЫ рд╕рдордЭрддрд╛ рд╣реИ - рдЬрдирд░реЗрдЯрд░ред рдпрд╣рд╛рдВ рдЯреИрдХрдПрдХреНрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рдЬрдирд░реЗрдЯрд░ рд╣реИ, рдФрд░ cnt рдкрд▓реНрд╕ рдкреЛрдЬрд┐рд╢рди рдХрд╛рдЙрдВрдЯрд░ рд╣реИред рдареАрдХ рд╣реИ, рд▓рд┐рди рд╣реА рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред

 process(tact) variable cntX : integer range 0 to 1000 := 0; variable cnt : integer range 0 to 1000 := 0; begin if rising_edge(tact) then if cntX = 0 then tactX <= tactX + 1; end if; cntX := cntX + 1; if cnt > period then cnt := 0; else cnt := cnt + 1; end if; if cnt = 0 then lin <= '0'; elsif cnt = duty then lin <= '1'; end if; end if; end process; 

рдЦреИрд░, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ - рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдмреНрд▓реЙрдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  cat_led <= dataout_xhdl1; en_led <= en_xhdl; led1 <= not ready; out1 <= lin when ready = '1' else '0'; out2 <= not lin when ready = '1' else '0'; 

рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЕрдВрдзреА рдХрд░ рджреЗрдВ - рдкрд░рд┐рдгрд╛рдореА рдХреНрд╡рд╛рд░реНрд╕ рдкреНрд░рд╛рдЗрдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдиреБрдХреВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕рдХреА рд╕реВрдЪрдирд╛ рджреА рдЧрдИ

 Top-level Entity Name v12 Family MAX II Device EPM240T100C5 Timing Models Final Total logic elements 229 / 240 ( 95 % ) Total pins 29 / 80 ( 36 % ) Total virtual pins 0 UFM blocks 0 / 1 ( 0 % ) 

рд╕рдмрд╕реЗ рдердХрд╛рдК рдЪрд░рдг рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХ рд╣реИ - рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд┐рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдФрд░ рдпрд╣ рд╕рдм - рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рднрд░рдиреЗ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ! рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо 229 рд╕реЗрд▓ рдХреЗ рднреАрддрд░ рд░рдЦрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 11 рдмрдЪреЗ рдереЗ - рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рдмрдХреБрдЫ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - рдмрдЯрди рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХрдИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдвреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрдВрдЯреЗрд▓ рдХреЗ рдкрд╛рд╕ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ 1 рдПрд▓рдпреВрдЯреА рдореЗрдВ рд╕реНрдЯреИрдХ рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ - рдареАрдХ рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд┐рдирд╛ ...

рдЗрд╕рд▓рд┐рдП рд╣реЗрдбрд▓рд╛рдЗрди рдХреЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╕рдордп - рдирд╣реАрдВ, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдЖрдк C рдпрд╛ Ada рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдЬрд┐рдЯрд▓ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ ... рдХрдо рд╕реЗ рдХрдо, рдореБрдЭреЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдПрдХ рджрд┐рди рд▓рдЧрд╛, рдФрд░ рдореБрдЭреЗ рдореБрдЭреЗ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ, рдФрд░ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрдкрдХрд░рдг рджреЛрдиреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢реА рдорд┐рд▓реА! рдФрд░ рдкрдбрд╝реЛрд╕реА рдЦреБрд╢ рд╣реИ :)

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


All Articles