рд╣рд╛рд▓ рд╣реА рдореЗрдВ, FPGA рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдХрдВрдкрдирд┐рдпреЛрдВ рдиреЗ FPGAs рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реИрдВред
рдПрдХ FPGA рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрд░рд┐рд▓реЛрдЧ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ (
HDL ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдирдП рддрд░реАрдХреЛрдВ рдХреА рдмрдврд╝рддреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдиреЗ рдореЗрд░реА рдмрд╣реБрдд рд░реБрдЪрд┐ рдкреИрджрд╛ рдХреА, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред
рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдПрдХ FPGA рдбреЗрд╡рд▓рдкрд░ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреНрдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ FPGA рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрддрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рдпрд╣ рдХреНрдпрд╛ рдЖрдпрд╛ред
рдЖрдкрдХреЛ FPGA рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЧрддрд┐ рджреЗрдВ
- рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг;
- рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬрдм рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛;
- рд╕рдВрдХрд▓рди рд╕рдордп рдФрд░ рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдХреЛ рдХрдо рдХрд░рдХреЗред
- рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ рдХрд┐рд╕реА рднреА FPGA рдкрд░рд┐рд╡рд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧреАред
- FPGAs рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреА рд╕реАрдорд╛ рдХреЛ рдХрдо рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдШрдбрд╝реА рдЖрд╡реГрддреНрддрд┐" рдФрд░ рдЕрдиреНрдп рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдмрдЪрдирд╛ред FPGA рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ рдПрдЪрдбреАрдПрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ?
рдЕрдм рдХрдИ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдЙрддреНрд╕рд╛рд╣реА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдХреНрд╡реЛрдХрдХрд╛ рдФрд░
рдкрд╛рдпрдерди рдХреЛрдб рдЬрдирд░реЗрдЯрд░ , рдФрд░ рдирд┐рдЧрдо, рдЬреИрд╕реЗ
рдореИрдерд╡рд░реНрдХреНрд╕ , рдФрд░ рдПрдлрдкреАрдЬреАрдП рдирд┐рд░реНрдорд╛рддрд╛
рдЗрдВрдЯреЗрд▓ рдФрд░
рдПрдХреНрд╕рд▓рд┐рдирдХреНрд╕ рдЗрд╕рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВред
рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рдкреВрд░реНрдг рдФрд░ рд╕реБрдВрджрд░ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣реА рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд╛рд╕ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдпрдерди рдпрд╛ рд╕реА #ред рдирд┐рдЧрдо, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдореМрдЬреВрджрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдореИрдерд╡рд░реНрдХреНрд╕ рдПрдо-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЙрдбрд▓ рд╕реЗ рдПрдЪрдбреАрдПрд▓ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрдВрдЯреЗрд▓ рдФрд░ рдПрдХреНрд╕рд▓рд┐рдирдХреНрд╕ рдЖрдо рд╕реА / рд╕реА ++ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдлрд┐рд▓рд╣рд╛рд▓, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рддреНрддреАрдп рдФрд░ рдорд╛рдирд╡ рд╕рдВрд╕рд╛рдзрди рд╡рд╛рд▓реА рдХрдВрдкрдирд┐рдпреЛрдВ рдиреЗ рдЕрдзрд┐рдХ рд╕рдлрд▓рддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИ, рдЬрдмрдХрд┐ рдЙрддреНрд╕рд╛рд╣реА рдХреБрдЫ рд╣рдж рддрдХ рдкреАрдЫреЗ рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдЙрддреНрдкрд╛рдж рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХреЗ рдореИрдерд╡рд░реНрдХреНрд╕ рдФрд░ рдЗрдВрдЯреЗрд▓ рд╕реЗ рдПрдЪрдПрд▓рдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред
Xilinx рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Xilinx рд╕реЗ HIL рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрдВрдЯреЗрд▓ рдФрд░ Xilinx рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ CAD рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдЬреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдПрдЪрдПрд▓рдПрд╕ рдХреА рддрд░рд╣ рдПрдХреНрд╕рд┐рд▓рд┐рдирдХреНрд╕ рдПрдЪрдПрд▓рдПрд╕, рдПрдХ рд╕реА / рд╕реА ++ рд╕рдВрдХрд▓рдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИрдВред
рдЖрдЗрдП, рдореИрдерд╡рд░реНрдХреНрд╕ рдФрд░ рдЗрдВрдЯреЗрд▓ рдПрдЪрдПрд▓рдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред
рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХреА рддреБрд▓рдирд╛
рдПрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред "рджреЛ рдЧреБрдгрдХ рдФрд░ рдПрдХ рдпреЛрдЬрдХ"
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдлрд╝рдВрдХреНрд╢рди 4 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдЪреМрдереЗ рдХреЗ рд╕рд╛рде рддреАрд╕рд░рд╛ рдФрд░ рдЧреБрдгрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред
рдореИрдерд╡рд░реНрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдо-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
function [out] = TwoMultAdd(a,b,c,d) out = (a*b)+(c*d); end
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдореИрдерд╡рд░реНрдХреНрд╕ рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдПрдЪрдбреАрдПрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдПрдЪрдбреАрдПрд▓-рдХреЛрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдлрдкреАрдЬреАрдП рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓реЗрдВрдЧреЗ, рдФрд░ рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХреЛ MATLAB рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ FPGA рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреЛ, рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред FPGA рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рдЪрд┐рдд рдЪрд╛рд░, рдЗрдВрдЯ, рдлреНрд▓реЛрдЯ, рдбрдмрд▓ рдирд╣реАрдВ рд╣реИрдВред рд╕рдВрдЦреНрдпрд╛ рдХреА рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рдХрд┐рд╕реА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЪрд┐рддреНрд░ 1MATLAB рдЪрд░, рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╕реЛрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдмрд┐рдЯ рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрджрд┐ рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рдФрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд┐рддреНрд░ 2рдПрдЪрдбреАрдПрд▓ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдореЗрдВ рдХрдИ рдЯреИрдм рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдк рднрд╛рд╖рд╛ рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ (рд╡реЗрд░рд┐рд▓реЙрдЧ рдпрд╛ рд╡реАрдПрдЪрдбреАрдПрд▓); рдХреЛрдб рд╢реИрд▓реА рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдирд╛рдоред рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЯреИрдм, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдиреБрдХреВрд▓рди рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ, рдЕрдм рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рд╕рднреА рдЪреВрдХ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рд░рди рдмрдЯрди рджрдмрд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
`timescale 1 ns / 1 ns module TwoMultAdd_fixpt (a, b, c, d, out); input [7:0] a; // ufix8 input [7:0] b; // ufix8 input [7:0] c; // ufix8 input [7:0] d; // ufix8 output [16:0] out; // ufix17 wire [15:0] TwoMultAdd_fixpt_mul_temp; // ufix16 wire [16:0] TwoMultAdd_fixpt_2; // ufix17 wire [15:0] TwoMultAdd_fixpt_mul_temp_1; // ufix16 wire [16:0] TwoMultAdd_fixpt_3; // ufix17 //HDL code generation from MATLAB function: TwoMultAdd_fixpt //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // % // Generated by MATLAB 9.2 and Fixed-Point Designer 5.4 % // % //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% assign TwoMultAdd_fixpt_mul_temp = a * b; assign TwoMultAdd_fixpt_2 = {1'b0, TwoMultAdd_fixpt_mul_temp}; assign TwoMultAdd_fixpt_mul_temp_1 = c * d; assign TwoMultAdd_fixpt_3 = {1'b0, TwoMultAdd_fixpt_mul_temp_1}; assign out = TwoMultAdd_fixpt_2 + TwoMultAdd_fixpt_3; endmodule // TwoMultAdd_fixpt
рдХреЛрдб рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред MATLAB рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрд░рд┐рд▓реЙрдЧ рдкрд░ рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрдирд╛ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдЧреБрдгрдХ рдФрд░ рдпреЛрдЬрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ
рддрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдЪрд┐рдВрддрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЧрд╛рдпрдм рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдЪрдбреАрдПрд▓-рдХреЛрдбрд░ рд╕реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкреВрдЫрд╛, рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рдЙрдирдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рд╕реЗ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдХрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдг рд╣реЛрддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 3рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ, рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдерд╛ред
FPGA рдореЗрдВ рд╣рдо рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рднреА рдореИрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдПрдЪрдбреАрдПрд▓-рдХреЛрдбрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдП, рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╣реИред рд╣рдо рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░реЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдПрдбрд▓рд░ рдХреЗ рд╕рд╛рдордиреЗ рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░реЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╛ рдпреЛрдЬрдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ FPGA рдЪрдХреНрд░рд╡рд╛рдд V рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдЪреБрдирд╛, рдЬрд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖ рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдЬреЛрдбрд╝рд┐рдпреЛрдВ рдФрд░ рдЧреБрдгрдХреЛрдВ рдореЗрдВ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЪрд┐рддреНрд░ 4рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХ рдореЗрдВ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЧреБрдгрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реНрдиреИрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдХрд┐ рд╡рд╣ рд╡рд┐рд▓рдВрдмрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрддрдо рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдПрдЪрдбреАрдПрд▓-рдХреЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдЯреИрдм рдореЗрдВ рдЖрдкрдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдЙрдЯрдкреБрдЯ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ:
`timescale 1 ns / 1 ns module TwoMultAdd_fixpt (clk, reset, clke_ena_i, a, b, c, d, clke_ena_o, out); input clk; input reset; input clke_ena_i; input [7:0] a; // ufix8 input [7:0] b; // ufix8 input [7:0] c; // ufix8 input [7:0] d; // ufix8 output clke_ena_o; output [16:0] out; // ufix17 wire enb; wire [16:0] out_1; // ufix17 wire [15:0] TwoMultAdd_fixpt_mul_temp; // ufix16 wire [16:0] TwoMultAdd_fixpt_2; // ufix17 wire [15:0] TwoMultAdd_fixpt_mul_temp_1; // ufix16 wire [16:0] TwoMultAdd_fixpt_3; // ufix17 reg [16:0] out_2; // ufix17 //HDL code generation from MATLAB function: TwoMultAdd_fixpt //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // % // Generated by MATLAB 9.2 and Fixed-Point Designer 5.4 % // % //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% assign TwoMultAdd_fixpt_mul_temp = a * b; assign TwoMultAdd_fixpt_2 = {1'b0, TwoMultAdd_fixpt_mul_temp}; assign TwoMultAdd_fixpt_mul_temp_1 = c * d; assign TwoMultAdd_fixpt_3 = {1'b0, TwoMultAdd_fixpt_mul_temp_1}; assign out_1 = TwoMultAdd_fixpt_2 + TwoMultAdd_fixpt_3; assign enb = clke_ena_i; always @(posedge clk or posedge reset) begin : out_reg_process if (reset == 1'b1) begin out_2 <= 17'b00000000000000000; end else begin if (enb) begin out_2 <= out_1; end end end assign clke_ena_o = clke_ena_i; assign out = out_2; endmodule // TwoMultAdd_fixpt
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореМрд▓рд┐рдХ рдЕрдВрддрд░ рд╣реИрдВред рдПрдХ рд╣рдореЗрд╢рд╛-рдмреНрд▓реЙрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ (рдмрд╕ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ)ред рд╣рдореЗрд╢рд╛-рдмреНрд▓реЙрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдХреНрд▓реЙрдХ рдореЙрдбреНрдпреВрд▓ (рдШрдбрд╝реА рдЖрд╡реГрддреНрддрд┐) рдФрд░ рд░реАрд╕реЗрдЯ (рд░реАрд╕реЗрдЯ) рдХреЗ рдЗрдирдкреБрдЯ рднреА рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрд╢рд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЯреНрд░рд┐рдЧрд░ рдореЗрдВ рдпреЛрдЬрдХ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд▓рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдирд╛ рдЕрдиреБрдорддрд┐ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВред
рдЖрдЗрдП рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдЕрдм рдХрд┐рд╕ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 5рдФрд░ рдлрд┐рд░, рдкрд░рд┐рдгрд╛рдо рдЕрдЪреНрдЫреЗ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред
рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рджрд┐рдЦрд╛рддреА рд╣реИ - рд╣рдо рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
рдЪрд┐рддреНрд░ 6рдЗрд╕ рдкрд╣рд▓реА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рдореИрдерд╡рд░реНрдХреНрд╕ рдХреЛ рдПрдХ рдХреНрд░реЗрдбрд┐рдЯ рдорд┐рд▓рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЕрдиреБрдорд╛рдирд┐рдд рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рдеред
рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдПрдХ рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХ рдХрд╛ рдЖрд░реЗрдЦ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдПрдЪрдбреАрдПрд▓-рдХреЛрдбрд░ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдЙрдкрдпреЛрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдРрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рднреА, рдПрдЪрдбреАрдПрд▓-рдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдлрдкреАрдЬреАрдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд░реНрдХрд┐рдЯрд░реА рдХреА рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдХрд╛ рдЬреНрдЮрд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдЪреЗрдд рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрдВрдЯреЗрд▓ рдПрдЪрдПрд▓рдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░
рдЖрдЗрдП C ++ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░ HLS рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FPGA рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рд╣реИред
рддреЛ C ++ рдХреЛрдб
component unsigned int TwoMultAdd(unsigned char a, unsigned char b, unsigned char c, unsigned char d) { return (a*b)+(c*d); }
рдореИрдВрдиреЗ рдЪрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЪреБрдирд╛ред
рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдлрдкреАрдЬреАрдП рдХреЗ рддрд╣рдд рд╕реА / рд╕реА ++ рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ, рд╕рднреА рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ред
рдЪреВрдВрдХрд┐ рдПрдЪрдПрд▓рдПрд╕ рд╕рдВрдХрд▓рдХ рдЗрдВрдЯреЗрд▓ рдХрд╛ рдПрдХ рдореВрд▓ рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдореЗрдВ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЙрд╕ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рдХреНрд╡рд╛рд░реНрдЯрд╕ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 7рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдЖрд╡рд░рдг рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рд╣рдо рд░реИрдкрд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ... рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рджреЗрдЦреЗрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИред
рдЪрд┐рддреНрд░ 8рдЗрдВрдЯреЗрд▓ рд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рд╣реИ "рдЗрд╕ рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рде рдордд рдЬрд╛рдУ!"ред рд▓реЗрдХрд┐рди рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреНрд░реА рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ | quartus_compile | TwoMultAdd: TwoMultAdd_inst | TwoMultAdd_internal: twomultadd_internal_inst | TwoMultAdd_fu.co |
nction_wrapper: TwoMultAdd_internal | TwoMultAdd_function: theTwoMultAdd_function | bb_TwoMultAdd_B1_start:
thebb_TwoMultAdd_B1_start | bb_TwoMultAdd_B1_start_stall_region: thebb_TwoMultAdd_B1_start_stall_region | i
_sfc_c1_wt_entry_twomultadd_c1_enter_twomultadd: thei_sfc_c1_wt_entry_twomultadd_c1_w_tomultad
d_aunroll_x | i_sfc_logic_c1_wt_entry_twomultadd_c1_enter_twomultadd13: thei_sfc_logic_c1_wt_entry_twom
ultadd_c1_enter_twomultadd13_aunroll_x | Mult1 рд╡рд╣ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдк рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╣рдо рдХреНрд╡рд╛рд░реНрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рд╡рд╛рдВрдЫрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрд░реЗрдЦ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд┐рддреНрд░ 9рдЗрд╕ рдпреЛрдЬрдирд╛ рд╕реЗ рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реБрдЖ рдЬреЛ рд╣рдордиреЗ MATLAB рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: рдЧреБрдгрдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХ рдЖрд░реЗрдЦ (рдЪрд┐рддреНрд░рд╛ 4) рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЧреБрдгрди рдПрдХ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 10рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рддрд╛рд▓рд┐рдХрд╛ (рдЪрд┐рддреНрд░рд╛ 6) рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдХреАрдорддреА рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХ рдЦрд░реНрдЪ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╣реИред
рд▓реЗрдХрд┐рди рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрдВрдЯреЗрд▓ рдПрдЪрдПрд▓рдПрд╕ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде, рдПрдЪрдПрд▓рдПрд╕ рд╕рдВрдХрд▓рдХ рдиреЗ FPGA рдореЗрдВ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рдЦрд░реНрдЪ рд╣реБрдПред рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдПрдЪрдПрд▓рдПрд╕ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рджреВрд╕рд░реА рдкрд░реАрдХреНрд╖рд╛ред "рдкрд░рд┐рдгрд╛рдо рдХреЗ рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХрд╛ рддрддреНрд╡-рд╡рд╛рд░ рдЧреБрдгрди"
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рддрдерд╛рдХрдерд┐рдд
"рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлрд╝рд┐рд▓реНрдЯрд░" ред рд╣рдо рдЗрд╕реЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрдЪрддреЗ рд╣реИрдВред
рдореИрдерд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░
рдХрд╛рдо рддреБрд░рдВрдд рдПрдХ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ 2-рдбреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ MATLAB рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдпрд╣ рдкреВрд░реЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдВрднреАрд░ рдЭрдЯрдХрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдмрди рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдХреЛрдб рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рднреА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрдирдкреБрдЯ рд╡реИрдХреНрдЯрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
MATLAB рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ
function [out] = mhls_conv2_manually(target,kernel) len = length(kernel); mult = target.*kernel; summ = sum(mult); out = summ/len; end
рдЙрддреНрдкрдиреНрди рдПрдЪрдбреАрдПрд▓ рдХреЛрдб рдмрд╣реБрдд рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдЗрд╕ рдХреЛрдб рд╕реЗ рдХрд┐рд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 11рдпрд╣ рдпреЛрдЬрдирд╛ рдЕрд╕рдлрд▓ рджрд┐рдЦрддреА рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЗрд╕ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд░рдЦреЗрдВрдЧреЗ рдФрд░ рдЯрд╛рдЗрдорд┐рдВрдЧ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдорджрдж рд╕реЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрдХрд┐рдЯ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рд╡рд╛рдпрд░рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрд▓реНрд▓рдВрдШрди рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╣рдордиреЗ рдЖрд╡реГрддреНрддрд┐ рдХреЛ 100 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рд░реНрдХрд┐рдЯ рд╕реЗ рдХреНрдпрд╛ рдирд┐рдЪреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 12рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдирд┐рдХрд▓рд╛: 33 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рддреБрдЪреНрдЫ рджрд┐рдЦрддрд╛ рд╣реИред рдЧреБрдгрдХ рдФрд░ рдпреЛрдЬрдХ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рджреЗрд░реА рд▓рдЧрднрдЧ 30 ns рд╣реИред рдЗрд╕ "рдЕрдбрд╝рдЪрди" рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдиреНрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рдж рд░рдЬрд┐рд╕реНрдЯрд░ рдбрд╛рд▓реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрде рдХрдо рд╣реЛред
рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рд╣рдореЗрдВ рдпрд╣ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рдЯреИрдм рдореЗрдВ, рдЖрдк рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдкреНрд░рд╢реНрди рдореЗрдВ рдХреЛрдб MATLAB рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░ (рдмрд╣реБ рдФрд░ рд╕рдо рдЪрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдПрдЪрдбреАрдПрд▓ рдХреЛрдб рдореЗрдВ рдЫрд┐рдкреЗ рдордзреНрдпрд╡рд░реНрддреА рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдмрджрддрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рднреА рд╣рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ
out = (sum(target.*kernel))/len;
рдпрд╣ MATLAB рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрдЪрдбреАрдПрд▓ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛ рддрд░реАрдХрд╛ рдХреЛрдб рдХреЛ рд╣рд╛рде рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдо-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ MATLAB рд╢реИрд▓реА рдореЗрдВ рдирд╣реАрдВред
рдирдпрд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ
function [out] = mhls_conv2_manually(target,kernel) len = length(kernel); mult = target.*kernel; summ_1 = zeros([1,(len/2)]); summ_2 = zeros([1,(len/4)]); summ_3 = zeros([1,(len/8)]); for i=0:1:(len/2)-1 summ_1(i+1) = (mult(i*2+1)+mult(i*2+2)); end for i=0:1:(len/4)-1 summ_2(i+1) = (summ_1(i*2+1)+summ_1(i*2+2)); end for i=0:1:(len/8)-1 summ_3(i+1) = (summ_2(i*2+1)+summ_2(i*2+2)); end out = summ_3/len; end
рдХреНрд╡рд╛рд░реНрдЯрд╕ рдореЗрдВ, рд╣рдо рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддреА рд╣реИред
рдЪрд┐рддреНрд░ 12рдЖрджрд┐рдо рдХреЗ рд╕рд╣реА рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде, рдЖрд╡реГрддреНрддрд┐ рд▓рдЧрднрдЧ 3 рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, 88 рдореЗрдЧрд╛рд╣рд░реНрдЯрдЬ рддрдХред
рдЪрд┐рддреНрд░ 13рдЕрдм рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢: рдЕрдиреБрдХреВрд▓рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ sum_1, sum_2 рдФрд░ sum_3 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рд╣рдо Quartus рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЪрд┐рддреНрд░ 14рдЕрдзрд┐рдХрддрдо рдЖрд╡реГрддреНрддрд┐ рдлрд┐рд░ рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЕрдм рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд▓рдЧрднрдЧ 195 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рд╣реИред
рдЪрд┐рддреНрд░ 15рдЪрд┐рдк рдкрд░ рдХрд┐рддрдиреЗ рд╕рдВрд╕рд╛рдзрди рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗ? рдЪрд┐рддреНрд░ 16 рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 16рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХрд╛ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ MATLAB рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, MATLAB рд╢реИрд▓реА рдореЗрдВ рдХреЛрдб рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдФрд╕рдд рджрд░реНрдЬреЗ рдХрд╛ рд╣реИред
рдореБрдЦреНрдп рдЦрддрд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдХрдореА рд╣реИред рдЗрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдЪрдбреАрдПрд▓ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдЖрдзреБрдирд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред
рдПрдЪрдбреАрдПрд▓ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдХреЛрдб рдХреЛ рддреЗрдЬ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЧрддрд┐ рдФрд░ рд╕рдВрд╕рд╛рдзрди рддреАрд╡реНрд░рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк MATLAB рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рддреЛ рд░рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ FPGA рдХреЗ рддрд╣рдд рдЕрдкрдирд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рди рдХрд░реЗрдВ, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред =)
рдЗрдВрдЯреЗрд▓ рдПрдЪрдПрд▓рдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░
рдЙрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд C / C ++ рдХреЛрдб рд▓рд┐рдЦрд╛
component unsigned int conv(unsigned char *data, unsigned char *kernel) { unsigned int mult_res[16]; unsigned int summl; summl = 0; for (int i = 0; i < 16; i++) { mult_res[i] = data[i] * kernel[i]; summl = summl+mult_res[i]; } return summl/16; }
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рддреА рд╣реИ рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рд╣реИред
рдЪрд┐рддреНрд░ 17рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ 1 рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЧреБрдгрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЗрдореЛрд░реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдПрдЪрдПрд▓рдПрд╕ рд╕рдВрдХрд▓рдХ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдЪрдПрд▓рдПрд╕ рд╕рдВрдХрд▓рдХ рдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╕рд░реНрдХрд┐рдЯ, рдЬреЛ рдХрд┐ рдХреНрд╡рд╛рд░реНрдЯрд╕ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рд╡рд┐рдлрд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЪрд┐рддреНрд░ 18рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдпрд╣ рд╕рд╣реА рд╣реИ, рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рдореЗрдВ рдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред
FPGA рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП HLS рдХреЗ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рд╣рдо рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдирд┐рд░реНрджреЗрд╢ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓реВрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
#pragma unroll for (int i = 0; i < 16; i++) { mult_res[i] = data[i] * kernel[i]; }
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдиреЗ рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреА
рдЪрд┐рддреНрд░ 19рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреАрдПрд╕рдкреА рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдЙрдирдореЗрдВ рд╕реЗ 16 рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣реБрд░реНрд░реЗ! рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдард┐рди рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рддрдирд╛ рдмрдврд╝рд╛ рд╣реИред рд╕рд░реНрдХрд┐рдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдардиреАрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 20рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдерд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд-рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рдЧрдгрдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдФрд░ рдЙрд╕рдиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рддрд░реНрдХ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рд╕рднреА рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЧрдгрд┐рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд╣рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд┐рд░ рд╕реЗ рдХреЛрдб рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рддреЗ рд╣реИрдВред
рдлрд┐рдХреНрд╕реНрдб-рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдХреНрд╖рд╛рдПрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдЪрд┐рддреНрд░ 21рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╣рдо рдЙрди рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдКрдкрд░ рд╕реЗрдЯ рд╣реИред рдЬреЛ рд▓реЛрдЧ рдПрдЪрдбреАрдПрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрджрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди C / C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╢рд╛рдпрдж рдЙрдирдХреЗ рд╕рд┐рд░ рдХреЛ рдкрдХрдбрд╝реЗрдВрдЧреЗред рдмрд┐рдЯ рдбреЗрдкреНрде, рдЬреИрд╕рд╛ рдХрд┐ MATLAB рдореЗрдВ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рднреА рдирд╣реАрдВ рдмрддрд╛рдПрдЧрд╛, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
component ac_fixed<16,16,false> conv(ac_fixed<8,8,false> *data, ac_fixed<8,8,false> *kernel) { ac_fixed<16,16,false>mult_res[16]; ac_fixed<32,32,false>summl; #pragma unroll for (int i = 0; i < 16; i++) { mult_res[i] = data[i] * kernel[i]; } for (int i = 0; i < 16; i++) { summl = summl+mult_res[i]; } return summl/16; }
рдФрд░ рдЪрд┐рддреНрд░ 20 рд╕реЗ рдЦреМрдлрдирд╛рдХ рдкрд╛рд╕реНрддрд╛ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдВрджрд░рддрд╛ рдорд┐рд▓рддреА рд╣реИ:
рдЪрд┐рддреНрд░ 22рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдЬреАрдм рд╣реЛрддрд╛ рд░рд╣рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 23рд▓реЗрдХрд┐рди рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдореАрдХреНрд╖рд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рд╣рдореЗрдВ рд╕реАрдзреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рджреЗрддрд╛ рд╣реИ рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЪрд┐рддреНрд░ 24рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдмреНрд▓реЙрдХ рдореЗрдореЛрд░реА рдХреА рд╡рд┐рд╢рд╛рд▓ рдЦрдкрдд рдкрд░рд┐рдзреАрдп рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЙрдирдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдЧрд╣рд░реЗ рдЕрд░реНрде рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдПрдХ рдЪрд░рдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдврд╛рдВрдЪреЗ рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд╛рдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдзреАрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
рддреАрд╕рд░реА рдкрд░реАрдХреНрд╖рд╛ред "RGB рд╕реЗ HSV рдореЗрдВ рд╕рдВрдХреНрд░рдордг"
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рддреАрд╕рд░реЗ рдФрд░ рдЕрдВрддрд┐рдо рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╡рдЬрд╣ рдпрд╣ рдереА рдХрд┐ рдореИрдВ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХреА рдУрд░ рджреЗрдЦрдиреЗ рд▓рдЧрд╛ред
рджреВрд╕рд░реЗ, рдкрд╣рд▓реЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ, рд╣рдо рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдЬрд╛рдЗрди рдЬрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдЙрдкрдХрд░рдг рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЙрддрдирд╛ рд╣реА рдЦрд░рд╛рдм рд╣реЛрдВрдЧреЗред
рдореИрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдгрдп рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдЬрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ, рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХреЗ рдлрд╛рдпрджреЗ рдЙрддрдиреЗ рд╣реА рдЕрдзрд┐рдХ рд╣реИрдВред
рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓, рдЬрдм рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореБрдЭреЗ Aliexpress рдкрд░ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдХреИрдорд░рд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛, рдЕрд░реНрдерд╛рддреН, рд░рдВрдЧ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдВрддреГрдкреНрдд рдирд╣реАрдВ рдереЗред рд░рдВрдЧ рд╕рдВрддреГрдкреНрддрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ RGB рд░рдВрдЧ рд╕реНрдерд╛рди рд╕реЗ HSV рд╕реНрдерд╛рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрддреГрдкреНрддрд┐ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдВрдХреНрд░рдордг рдлрд╛рд░реНрдореВрд▓рд╛ рдХреИрд╕реЗ рдЦреЛрд▓рд╛ рдФрд░ рдПрдХ рдЧрд╣рд░реА рд╕рд╛рдБрд╕ рд▓реА ... FPGA рдореЗрдВ рдРрд╕реА рдЧрдгрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХреБрдЫ рдЕрд╕рд╛рдзрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, RGB рд╕реЗ HSV рддрдХ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рд╕реВрддреНрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
рдЪрд┐рддреНрд░ 25FPGA рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рджрд┐рди рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдШрдВрдЯреЗ рд▓рдЧреЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рд╕рдм рдПрдЪрдбреАрдПрд▓ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕реА ++ рдореЗрдВ рдпрд╛ MATLAB рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдорд┐рдирдЯред
C ++ рдореЗрдВ, рдЖрдк рд╕реАрдзреЗ рдорд╛рдереЗ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ C ++ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦрд╛
struct color_space{ unsigned char rh; unsigned char gs; unsigned char bv; }; component color_space rgb2hsv(color_space rgb_0) { color_space hsv; float h,s,v,r,g,b; float max_col, min_col; r = static_cast<float>(rgb_0.rh)/255; g = static_cast<float>(rgb_0.gs)/255; b = static_cast<float>(rgb_0.bv)/255; max_col = std::max(std::max(r,g),b); min_col = std::min(std::min(r,g),b);
рдФрд░ рдХреНрд╡рд╛рд░реНрдЯреНрд╕ рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ 26рдЖрд╡реГрддреНрддрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИред
рдЪрд┐рддреНрд░ 27рдПрдЪрдбреАрдПрд▓ рдХреЛрдбрд░ рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВред
рд▓реЗрдЦ рдХреЛ рди рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдо-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд╕реЗ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рдереЗ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рдПрдо-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХрдИ рджрд╕ рдорд┐рдирдЯ рд▓рдЧреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдШрдВрдЯреЗ рдирд╣реАрдВред
C++ , .
, , , , тАФ , FPGA , HDL.
рдирд┐рд╖реНрдХрд░реНрд╖
.
, , , .
, , . , , HDL, .
, FPGA FPGA . .
, тАФ FPGA.
HLS compiler : , , , тАЬbest practicesтАЭ .. MATLAB, , GUI , , , , , .
? тАФ Intel HLS compiler. . HDL coder . , HDL coder , , . HLS, , , FPGA , .
Xilinx , тАФ FPGA. , , Verilog/VHDL , . ( ), .
? , , , HDL .
, , , , .