рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рд╡реАрдПрдЪрдбреАрдПрд▓ред Brainfuck

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡реАрдПрдЪрдбреАрдПрд▓ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ рд╣реИ (рдпрджрд┐ рд╕рдВрджреЗрд╣ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рддрд░рдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рджреВрд╕рд░реА рдУрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ (рдмрд╣реБрдд рд╕реАрдорд┐рдд) рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдЬрд╛рджреВ рдХреА рд╡рдЬрд╣ рд╕реЗ рдмреНрд░реЗрдирдлреИрдХ рдкрд╕рдВрдж рдЖрдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рддрд▓реНрд▓реАрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ рдПрд▓реНрдЯрд░ рд╕рд╛рдЗрдХреНрд▓реЛрди II рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд┐рдЯ (EP2C20F484C7) рд╣реЛрдЧреА


рдЪрдордЪрдорд╛рддреА рд░реЛрд╢рдиреА рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ, рдореИрдВ рдмрд┐рд▓реНрд▓реА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред

рд╕рдВрджрд░реНрдн рдХреА рд╢рд░реНрддреЗрдВ


  1. рдХрдорд╛рдВрдб рдореЗрдореЛрд░реА - 64 рдХрдорд╛рдВрдб, рдореЗрдореЛрд░реА рд╕реЗрд▓ - рдкреНрд░рддреНрдпреЗрдХ 8 рдмрд┐рдЯ рдХреЗ 32 рд╕реЗрд▓;
  2. рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рджреЛ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛; рд╕реНрд╡рд┐рдЪ SW9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
  3. рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдВрдЯреНрд░реА рдореЛрдб рдореЗрдВ, рд╕реНрд╡рд┐рдЪ SW8 - SW3 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдореЛрд░реА рдореЗрдВ рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, SW2 - SW0 - рдХрдорд╛рдВрдб рдХреЛрдб; рдореЗрдореЛрд░реА рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ KEY3 рдмрдЯрди рджрдмрд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╡рд░реНрддрдорд╛рди рдореЗрдореЛрд░реА рд╕реЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА LEDR2 - LEDR0 рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ;
  4. рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдореЛрдб рдореЗрдВ, рдореЗрдореЛрд░реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╛рдд-рдЦрдВрдб рд╕рдВрдХреЗрддрдХ HEX1 - HEX0 рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕реЗрд▓ рдХрд╛ рдкрддрд╛ рд╕реНрд╡рд┐рдЪ SW4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - SW0;
  5. рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдореЗрдВ, KEY3 рдмрдЯрди рджрдмрд╛рдХрд░, рд╕рднреА рдореЗрдореЛрд░реА рд╕реЗрд▓ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рдордиреЗ рдХрд╛ рдЪрд┐рд╣реНрди

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдбрд┐рдХреЛрдбрд░ рдХреЛ рддреБрд░рдВрдд рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, "рдорд╛рдереЗ рдкрд░ред" рдпрд╣ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рджреЛ рдкреЛрд░реНрдЯ рд╣реИрдВ:

entity dc7x is port( i: in std_logic_vector(3 downto 0); z: out std_logic_vector(6 downto 0) ); end dc7x; 


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЙрдбрд▓ рдХреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 with i select z <= "1000000" when "0000", --0 "1111001" when "0001", --1 "0100100" when "0010", --2 "0110000" when "0011", --3 "0011001" when "0100", ******** "0001110" when "1111", --F "0111111" when others; 


рд╣рдо рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ
рд╢рд╛рдорд┐рд▓ рдмрд╛рд╣рд░реА рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ SW рдЯреЙрдЧрд▓ рд╕реНрд╡рд┐рдЪ, KEY рдмрдЯрди, LED рдФрд░ рд╕рд╛рдд-рдЦрдВрдб HEX рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдЖрдВрддрд░рд┐рдХ 50Mhz рдЬрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
 entity brainfuck is port( RUN: in std_logic; SW: in std_logic_vector(8 downto 0); LED: out std_logic_vector(2 downto 0); HEX1: out std_logic_vector(6 downto 0); HEX2: out std_logic_vector(6 downto 0); clk: in std_logic; RESET: in boolean ); end brainfuck; 

RUN - рд╕рдорд╛рди рдореЛрдб рд╕реНрд╡рд┐рдЪ SW9, RESET - рдмрдЯрди KEY3ред

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рд╣рдореЗрдВ рдХрдИ рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдХрдорд╛рдВрдб рдФрд░ рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ, рд╕рд╛рде рд╣реА рдЙрди рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрддред
рдЪреВрдВрдХрд┐ рд╕рдВрдХреЗрддрдХ рдХреЛ рди рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдореЛрд░реА рд╕реЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА, рджреЛ рд╡реИрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: out_result рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо_рдЖрдЙрдЯ_рдЯреНрд░реЗрд╕ рд╕рд╛рдд-рдЦрдВрдб рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рдбрд┐рдХреЛрдбрд░реНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред
 type t_memory is array (31 downto 0) of std_logic_vector (7 downto 0); -- command memory signal cell_memory: t_memory := (others => x"00"); type d_memory is array (63 downto 0) of std_logic_vector (2 downto 0); -- cells memory signal comm_memory: d_memory := (others => "000"); signal comm_number: std_logic_vector(6 downto 0) := (others => '0'); signal cell_number: std_logic_vector(5 downto 0) := (others => '0'); signal out_result: std_logic_vector(7 downto 0) := (others => '0'); signal final_out_result: std_logic_vector(7 downto 0) := (others => '0'); 


рдкреНрд░рдХреНрд░рд┐рдпрд╛ (clk, RESET)
рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдорд┐рд▓реА - рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЙрдбрд▓ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЦреБрд▓реЗ рдХреЛрд╖реНрдардХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
 variable u: integer := 0; 
рдЫреЛрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЪрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрдХреЗрдд рдирд╣реАрдВред рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдВрдХреЗрдд рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЪрд░ рдХреЛред
 begin if rising_edge(clk) then if (not RESET) then cell_memory <= (others => x"00"); out_result <= (others => '0'); final_out_result <= cell_memory(conv_integer(unsigned(cell_number))); if (RUN = '0') then -- writing a programm comm_memory(conv_integer(unsigned(SW(8 downto 3)))) <= SW(2 downto 0); end if; 

рд░реАрд╕реЗрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ (рд╕рд╛рдЗрдХреНрд▓реЛрди II рдореЗрдВ рдмрдЯрди рдЙрд▓рдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдЙрд▓рдЯрд╛ рд╣реИ), рдореЗрдореЛрд░реА рд╕реЗрд▓ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╡реЗрдХреНрдЯрд░ рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрднреА рднреА рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реА рдХрдорд╛рдВрдб рдореЗрдореЛрд░реА рдореЗрдВ рднрд░рддреЗ рд╣реИрдВред
 else if (RUN = '0') then running_led <= false; LED <= comm_memory(conv_integer(unsigned(SW(8 downto 3)))); comm_number <= (others => '0'); cell_number <= (others => '0'); cell_memory <= (others => x"00"); 

рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рдЖрдк рд░рди рдореЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рднреВрд▓рдирд╛" рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рд╢реБрд░реБрдЖрдд рдЦрд░реЛрдВрдЪ рд╕реЗ рд╣реЛред
 else -- executing running_led <= true; LED <= (others => '0'); if (SW(5) = '1') then final_out_result <= cell_memory(conv_integer(unsigned(SW(4 downto 0)))); -- out: user's or programm's cell else final_out_result <= out_result; end if; 

рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ: рдпрд╛ рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рд╕реЗ рдореВрд▓реНрдп рдбрд┐рдХреЛрдбрд░реНрд╕ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрдпрди рд╕реНрд╡рд┐рдЪ SW5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  case comm_memory(conv_integer(unsigned(comm_number))) is when "000" => -- next if (u = 0) then cell_number <= cell_number + 1; end if; if (u < 0 )then comm_number <= comm_number - 1; else comm_number <= comm_number + 1; end if; **************** when "100" => -- [ if ((cell_memory(conv_integer(unsigned(cell_number))) = x"00") or (u /= 0)) then u := u + 1; end if; if (u < 0 )then comm_number <= comm_number - 1; else comm_number <= comm_number + 1; end if; when "101" => -- ] if ((cell_memory(conv_integer(unsigned(cell_number))) /= x"00") or (u /= 0)) then u := u - 1; end if; if (u < 0 )then comm_number <= comm_number - 1; else comm_number <= comm_number + 1; end if; when others => -- stop if (u = 0) then null; end if; 

рдмреНрд░реЗрдирдлрдХ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рдСрдЯреЛрдореЗрдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдХреА рдЪрд╛рд▓ рдХреЛ (рдЪрдХреНрд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред VHDL (рдФрд░ рди рдХреЗрд╡рд▓) рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЙрдбрд▓ рдХреЛ рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпреВ рдЦреБрд▓реЗ рдХреЛрд╖реНрдардХ рдХрд╛ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╣реИред рдХрдорд╛рдВрдб рдХреЗрд╡рд▓ (рдпреВ = 0) рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдЬреЛрдбрд╝реА рдмреНрд░реИрдХреЗрдЯ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рдФрд░ рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рдХрдорд╛рдВрдб рдкреЙрдЗрдВрдЯрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдкреАрдЫреЗред рдпрд╣рд╛рдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдпреВ рдПрдХ рд╕рдВрдХреЗрдд рдерд╛, рддреЛ рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдХрдорд╛рдВрдб рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝реЗрдЧрд╛, рдХреЗрд╡рд▓ рдЕрдЧрд▓реЗ рдорд╛рдк рдореЗрдВ рд╕реВрдЪрдХ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдЧрд╛, рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдкрд░ рджреВрд╕рд░реА рдмрд╛рд░ рдареЛрдХрд░ (рдпреВ = -2), рдФрд░ рдЗрддрдиреЗ рд╣реА рдпреБрдЧреНрдорд┐рдд рдЙрджреНрдШрд╛рдЯрди рдмреНрд░реИрдХреЗрдЯ рдирд╣реАрдВ - рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рд╛рд▓рдд (рдпреВ / = 0) рдиреЗрд╕реНрдЯреЗрдб рдЫреЛрд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИред

testbench

рдХреЛрдб рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рд╣реИ,

рд▓реЗрдХрд┐рди рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЪрдордХрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЯреЗрд╕реНрдЯрдмреЗрдВрдЪ рдХрд╛ рдкрд╛рда рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдпрд╣ рд╕рдВрд▓рдЧреНрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдмреЗрд╡рдХреВрдл рдЕрдиреБрдХреНрд░рдорд┐рдХ рд░рди рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдореИрдВрдиреЗ рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛:
+++>++<[->+<]>.x
ModelSim-Altera рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкреАрд╕реАрдмреА рд▓реЗрдЖрдЙрдЯ

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



рдирд┐рд╖реНрдХрд░реНрд╖

рдЦреИрд░ рдпрд╣ рд╕рдм рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЦреЛрд▓рдиреЗ, рдмреЛрд░реНрдб рдХреЛ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ, рдФрд░ ... рд╕рднреА рдХрдорд╛рдВрдб рдФрд░ рдкрддреЗ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдмреИрдарддреЗ рд╣реИрдВ :) рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдЬреИрд╕реЗ рдорд╛рдирдХ рднрд╛рдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рджрд┐рдП рд╣реИрдВред рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛:


рдкреБрдирд╢реНрдЪ

рдмреЗрд╢рдХ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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


All Articles