{"id":269715,"date":"2015-12-06T17:12:03","date_gmt":"2015-12-06T14:12:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=269715"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=269715","title":{"rendered":"Altera + OpenCL: \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044f\u0434\u0440\u043e"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/24d\/b7d\/6d4\/24db7d6d40c34705b697925ebf922a21.jpg\"\/><\/p>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!<\/p>\n<p>  \u0412 <a href=\"http:\/\/habrahabr.ru\/company\/metrotek\/blog\/269009\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 OpenCL \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 FPGA \u0444\u0438\u0440\u043c\u044b Altera:  <\/p>\n<pre><code>\/\/ ACL kernel for adding two input vectors __kernel void vector_add( __global const uint *restrict x,                             __global const uint *restrict y,                             __global       uint *restrict z ) {     \/\/ get index of the work item     int index = get_global_id(0);       \/\/ add the vector elements     z[index] = x[index] + y[index]; } <\/code><\/pre>\n<p>  \u042f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u043b\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0443 \u0430\u0439\u0441\u0431\u0435\u0440\u0433\u0430: \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0434\u0438\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432\u043e \u0447\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f (\u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b FPGA) \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u0441\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0430 \u0447\u0442\u043e \u0443\u0445\u043e\u0434\u044f\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u0441\u043a\u0440\u044b\u0442\u044c \u044f\u0434\u0440\u043e \u0438 \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:  <\/p>\n<ul>\n<li>\u041a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430?<\/li>\n<li>\u041a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430? \u041a\u0430\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443?<\/li>\n<li>\u041d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0427\u0435\u043c \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f?<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0440\u043e \u0432 RTL-\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430\u0445?<\/li>\n<li>\u041a\u0430\u043a\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043a\u0430\u043a-\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c? <\/li>\n<\/ul>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0451\u043c \u043d\u0430 \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438! \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442!<br \/>  <a name=\"habracut\"><\/a><br \/>  <a name=\"altera_vision\"><\/a>  <\/p>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u0438\u0434\u0438\u0442 \u0410\u043b\u044c\u0442\u0435\u0440\u0430<\/h2>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f FPGA, \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u043c \u043e\u0442 \u0432\u0435\u043d\u0434\u043e\u0440\u0430: \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u043c (\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u043e\u043c) \u044f\u0437\u044b\u043a\u0435.<\/p>\n<p>  \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e-\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 OpenCL \u043e\u0442 \u0410\u043b\u044c\u0442\u0435\u0440\u044b<br \/>  <a href=\"http:\/\/tcfpga.org\/fpga2013\/openCL_tutorial.pdf\"> <b>Harnessing the Power of FPGAs using Altera\u2019s OpenCL Compiler<\/b><\/a> (<b>\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e<\/b>, \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0430 \u0441\u043b\u0430\u0439\u0434\u043e\u0432, ~16 \u041c\u0411). <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/cc7\/ab8\/33b\/cc7ab833b2fb4c58795c064cae7b302b.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437:  <\/p>\n<ul>\n<li>IP-\u044f\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 (PCIe, \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c (DDR, QDR)).<\/li>\n<li>\u042f\u0434\u0435\u0440, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b\u0435 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430. \u0412 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 OpenCL \u044f\u0434\u0440\u0430\u0445.<\/li>\n<li>\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430: <b>Global<\/b> \u0438 <b>Local Memory Interconnect<\/b>. <\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u2014 \u044d\u0442\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u0448\u0438\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u0441\u043b\u0435\u0439\u0432\u0430\u043c\u0438 (\u0432\u0435\u0434\u0443\u0449\u0438\u043c\u0438 \u0438 \u0432\u0435\u0434\u043e\u043c\u044b\u043c\u0438). <\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u2014 \u044d\u0442\u043e <b>\u044f\u0434\u0440\u0430<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u044e\u0442\/\u043f\u0438\u0448\u0443\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c (\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u043c\u044f\u0442\u044c \u0445\u043e\u0441\u0442\u0430, \u0442\u0430\u043a \u0438 \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c), \u0442\u0430\u043a \u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e), \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043a\u044d\u0448\u043e\u043c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u0430 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0438\u0436\u0435, \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u044a\u0435\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0442. Altera \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0442\u0438\u043f\u0430 <b>Avalon<\/b>: <b>Avalon-MM<\/b> (Memory Mapped) \u0438 <b>Avalon-ST<\/b> (Streaming). \u042f \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443: \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e \u044d\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/www.altera.com\/content\/dam\/altera-www\/global\/en_US\/pdfs\/literature\/manual\/mnl_avalon_spec.pdf\">\u0442\u0443\u0442<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Avalon-MM.<\/p>\n<p>  \u0415\u0449\u0435 \u0440\u0430\u0437 \u0441\u0434\u0435\u043b\u0430\u044e \u0430\u043a\u0446\u0435\u043d\u0442 \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <b>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/b> \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044f\u0434\u0440\u0430 \u043d\u0430 OpenCL.<\/p>\n<h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 Quartus 14.1. <br \/>  \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 15.1, \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u043b \u0438\u0445 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/p>\n<p>  \u0423\u0432\u044b, \u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0435 OpenCL \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e (\u0441 \u0432\u0438\u0434\u0443): \u0438\u0445 \u0432\u0438\u0434 \u0432\u0441\u0451 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e.<\/p>\n<p>  <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/blob\/master\/vector_add\/bin_vector_add\/top.fit.rpt\">\u041e\u0442\u0447\u0435\u0442<\/a> \u043e \u0441\u0431\u043e\u0440\u043a\u0435 \u0441 <b>&#8212;profile<\/b> (\u0441 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c\u0438):  <\/p>\n<pre><code>+-----------------------------------------------------------------------------------+ ; Fitter Summary                                                                    ; +---------------------------------+-------------------------------------------------+ ; Fitter Status                   ; Successful - Sun Nov 22 13:18:14 2015           ; ; Quartus Prime Version           ; 15.1.0 Build 185 10\/21\/2015 SJ Standard Edition ; ; Family                          ; Cyclone V                                       ; ; Device                          ; 5CSEMA5F31C6                                    ; ; Timing Models                   ; Final                                           ; ; Logic utilization (in ALMs)     ; 5,472 \/ 32,070 ( 17 % )                         ; ; Total registers                 ; 10409                                           ; ; Total pins                      ; 103 \/ 457 ( 23 % )                              ; ; Total block memory bits         ; 127,344 \/ 4,065,280 ( 3 % )                     ; ; Total RAM Blocks                ; 44 \/ 397 ( 11 % )                               ; ; Total PLLs                      ; 2 \/ 6 ( 33 % )                                  ; ; Total DLLs                      ; 1 \/ 4 ( 25 % )                                  ; +---------------------------------+-------------------------------------------------+ <\/code><\/pre>\n<p>  \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0445\u0443\u0434\u0435\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 100 ALM. <\/p>\n<p>  \u0410 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/blob\/master\/vector_add\/bin_vector_add\/top.fit.rpt_no_profile\">\u043e\u0442\u0447\u0435\u0442<\/a> \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432:  <\/p>\n<pre><code>+-----------------------------------------------------------------------------------+ ; Fitter Summary                                                                    ; +---------------------------------+-------------------------------------------------+ ; Fitter Status                   ; Successful - Sun Nov 22 13:51:21 2015           ; ; Quartus Prime Version           ; 15.1.0 Build 185 10\/21\/2015 SJ Standard Edition ; ; Family                          ; Cyclone V                                       ; ; Device                          ; 5CSEMA5F31C6                                    ; ; Timing Models                   ; Final                                           ; ; Logic utilization (in ALMs)     ; 4,552 \/ 32,070 ( 14 % )                         ; ; Total registers                 ; 7991                                            ; ; Total pins                      ; 103 \/ 457 ( 23 % )                              ; ; Total block memory bits         ; 127,344 \/ 4,065,280 ( 3 % )                     ; ; Total RAM Blocks                ; 44 \/ 397 ( 11 % )                               ; ; Total PLLs                      ; 2 \/ 6 ( 33 % )                                  ; ; Total DLLs                      ; 1 \/ 4 ( 25 % )                                  ; +---------------------------------+-------------------------------------------------+ <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043e\u043a\u043e\u043b\u043e 1000 ALM \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u00ab\u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u00bb. <br \/>  \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043e\u0442\u0447\u0435\u0442 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0447\u0442\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442.<\/p>\n<h2>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442<\/h2>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043b\u043e\u0436\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/tree\/master\/vector_add\/bin_vector_add\">\u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435<\/a>.<\/p>\n<p>  \u0424\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u0442\u043e: <b>top.qpf<\/b> (QPF \u2014 Quartus Project File), \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c <b>top.v<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u043e\u0434\u0443\u043b\u044f <b>system<\/b> \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u0445.<\/p>\n<h3>system (4535 ALM)<\/h3>\n<p>  <a href=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9c4\/2ff\/2cb\/9c42ff2cb817483a61880fdc7c13c445.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9c4\/2ff\/2cb\/9c42ff2cb817483a61880fdc7c13c445.png\"\/><\/a><\/p>\n<p>  <b>system<\/b> \u2014 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u0441\u0433\u0435\u043d\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/www.altera.com\/products\/design-software\/fpga-design\/quartus-ii\/quartus-ii-subscription-edition\/qts-qsys.html\">Qsys<\/a>. Qsys \u2014 \u044d\u0442\u043e GUI-\u0438\u0448\u043d\u0430\u044f \u0442\u0443\u043b\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0431\u043b\u043e\u043a\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0438 \u043f\u0440.<\/p>\n<p>  \u041c\u043e\u0434\u0443\u043b\u0438:  <\/p>\n<ul>\n<li><b>vector_add_system (2141 ALM)<\/b> \u2014 \u044d\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u044f\u0434\u0440\u0435 <b>vector_add<\/b>.<\/li>\n<li><b>acl_iface (2343 ALM)<\/b> \u2014 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0438\u0435 \u0441 \u044f\u0434\u0440\u043e\u043c.<\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b:  <\/p>\n<ul>\n<li><b>avs_vector_add_cra<\/b> \u2014 Avalon-MM \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u043e\u043c.<\/li>\n<li><b>avm_memgmem0_port_0_0_rw<\/b> \u2014 Avalon-MM \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a DDR \u043f\u0430\u043c\u044f\u0442\u0438. \u0428\u0438\u0440\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 256 \u0431\u0438\u0442.<\/li>\n<\/ul>\n<h3>acl_iface (2343 ALM)<\/h3>\n<p>  <a href=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/059\/8c0\/6bf\/0598c06bfc0b2df17cbb926a5213ba59.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/059\/8c0\/6bf\/0598c06bfc0b2df17cbb926a5213ba59.png\"\/><\/a><br \/>  \u041c\u043e\u0434\u0443\u043b\u0438:  <\/p>\n<ul>\n<li><b>pll (0 ALM)<\/b>: <abbr title=\"phase-locked loop\">PLL<\/abbr>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 <abbr title=\"\u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\">\u043a\u043b\u043e\u043a<\/abbr> <b>pll_outclk0<\/b> (100 \u041c\u0413\u0446) \u0438\u0437 <b>config_clk<\/b> (50 \u041c\u0413\u0446, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430). <\/li>\n<li><b>acl_kernel_clk (1057 ALM)<\/b>: \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 PLL: \u043e\u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044f\u0434\u0440\u043e. \u041e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441: \u043e \u043d\u0435\u0439 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435. <\/li>\n<li><b>acl_kernel_interface (439 ALM) <\/b>: \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u00ab\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u00bb \u044f\u0434\u0440\u0430 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435).<\/li>\n<li><b>clock_cross_kernel_mem1 (82 ALM)<\/b>: \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u00ab\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435\u043c\u00bb \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 (<abbr title=\"clock domain crossing\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Clock_domain_crossing\">CDC<\/a><\/abbr> ). <\/li>\n<li><b>hps (0 ALM)<\/b>: \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441 HPS (Hard Processor System). \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 FPGA \u043e\u043d \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442, \u0442.\u043a. \u044d\u0442\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u044f\u0434\u0440\u043e.<\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b:  <\/p>\n<ul>\n<li><b>f2h_sdram0<\/b> \u2014 Avalon-MM \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a DDR \u043f\u0430\u043c\u044f\u0442\u0438. \u0428\u0438\u0440\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 256 \u0431\u0438\u0442, \u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u2014 <b>pll_outclk0<\/b> (100 \u041c\u0413\u0446).<\/li>\n<li><b>h2f_lw<\/b> \u2014 AXI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e CPU (ARM) \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435\/\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a\u0435\u0440\u043d\u0435\u043b\u0430 \u0438 \u0442.\u0434. <\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u043b\u043e\u0436\u0438\u043c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0443\u044e \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u0441\u043e\u0439\u0434\u0435\u0442\u0441\u044f. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Qsys \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0438 \u0442\u0438\u043f\u0430 <b>interconnect<\/b>. \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0436\u0430\u0442\u044c <b>Show System With Qsys Interconnect<\/b> \u0432 \u043c\u0435\u043d\u044e <b>System<\/b>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u0438\u0434\u0430 <b>mm_interconnect_*<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 568 \u0438 195 ALM.<\/p>\n<h3>vector_add_system (2141 ALM)<\/h3>\n<p>  \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 GUI: \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0432 Verilog.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d06\/c9d\/f02\/d06c9df020a0d51e97f4f8c2bb019263.png\" alt=\"image\"\/>  <\/p>\n<ul>\n<li><b>vector_add_system_interconnect_* (443 ALM)<\/b> \u2014 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <b>avm_memgmem0_port_0_0_rw<\/b><\/li>\n<li><b>LSU_X (235)<\/b>, <b>LSU_Y (239)<\/b> \u2014 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u044f\u0434\u0440\u0430 <b>x<\/b> \u0438 <b>y<\/b> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e).<\/li>\n<li><b>LSU_Z (424 ALM)<\/b> \u2014 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c (\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <b>z<\/b>). <\/li>\n<li><b>acl_id_iterator (228 ALM)<\/b>, <b>acl_work_group_dispatcher (149 ALM)<\/b> \u2014 \u043e\u043d\u0438 \u0432\u044b\u0434\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u0443 (\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c). <\/li>\n<li><b>acl_kernel_finish_detector (144 ALM)<\/b> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u044f\u0434\u0440\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0443.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<br \/>  LSU-\u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f (<b>lsu_top<\/b>) \u0438 \u0438\u043c\u0435\u044e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f <b>lsu_local_bb0_ld_<\/b>, <b>lsu_local_bb0_ld__u0<\/b> \u0438 <b>lsu_local_bb0_st_add<\/b>. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u044f \u043f\u0440\u0438\u0434\u0430\u043b \u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u00ab\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u043d\u044b\u0435\u00bb \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e LSU \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044f\u0434\u0440\u043e:  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 CRA, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430.<\/li>\n<li><b>LSU_X<\/b> \u0438 <b>LSU_Y<\/b> \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u00ab\u043a\u043e\u043c\u0430\u043d\u0434\u044b\u00bb \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (<abbr title=\"First Input First Output\">FIFO<\/abbr>), \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043e\u0431\u043e\u0438\u0445 <b>LSU<\/b>.<\/li>\n<li>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u043e\u0431\u043e\u0438\u0445 FIFO, \u043e\u043d\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0432\u0435\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/li>\n<li>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 <b>LSU_Z<\/b>, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0434\u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/li>\n<li>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0432\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u044c (\u043d\u0435\u0442 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439) \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 <b>kernel_finish_detector<\/b> \u2014 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 <b>kernel_irq<\/b>.<\/li>\n<\/ul>\n<p>  \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0440\u0438 <b>LSU<\/b> \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0437\u0430 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Avalon-MM.<\/p>\n<p>  \u041a\u043e\u043d\u0432\u0435\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b \u0432 \u0441\u0445\u0435\u043c\u0435 \u043a\u0430\u043a <b>add_pipeline<\/b> \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f: \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/blob\/master\/vector_add\/bin_vector_add\/vector_add.v\"><b>vector_add.v<\/b><\/a> \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 <b>vector_add_basic_block_0<\/b>.<\/p>\n<p>  \u0421\u0430\u043c\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code>assign local_bb0_add = (rstag_3to3_bb0_ld__u0 + rstag_3to3_bb0_ld_); <\/code><\/pre>\n<p>  \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0441\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<br \/>  \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u044d\u0442\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435.<\/p>\n<h4>LSU (Load Store Unit)<\/h4>\n<p>  \u0421\u0430\u043c\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f LSU. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/blob\/master\/vector_add\/bin_vector_add\/system\/synthesis\/submodules\/lsu_top.v\"><b>lsu_top<\/b><\/a> \u2014 \u044d\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 <b>lsu_*<\/b>-\u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <b>READ<\/b> \u0438 <b>STYLE<\/b>.<\/p>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0435:  <\/p>\n<ul>\n<li><b>LSU_READ_STREAMING<\/b> \u2014 <b>LSU_X<\/b>, <b>LSU_Y<\/b> (READ = 1, STYLE = \u00abSTREAMING\u00bb)<\/li>\n<li><b>LSU_WRITE_STREAMING<\/b> \u2014 <b>LSU_Z<\/b> (READ = 0, STYLE = \u00abSTREAMING\u00bb)<\/li>\n<\/ul>\n<h5>LSU_READ_STREAMING<\/h5>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ba9\/34a\/8df\/ba934a8df116453b92a2e785452ca9ee.png\"\/><br \/>  \u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0434\u0443\u043b\u044f:  <\/p>\n<pre><code>BURSTCOUNT_WIDTH = 5;                                                           MEMORY_SIDE_MEM_LATENCY = 89;                                           <\/code><\/pre>\n<p>  <b>BURSTCOUNT_WIDTH<\/b> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <b>avm_burstcount<\/b> \u2014 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 Avalon-MM \u0442\u0430\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Burst_mode_%28computing%29\">\u0431\u0451\u0440\u0441\u0442\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/a>. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0448\u0438\u0440\u0438\u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0440\u0430\u0432\u043d\u0430 \u043f\u044f\u0442\u0438, \u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0451\u0440\u0441\u0442\u0430 \u0440\u0430\u0432\u043d\u043e 16. \u042d\u0442\u043e \u044f\u0432\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 <a href=\"https:\/\/www.altera.com\/content\/dam\/altera-www\/global\/en_US\/pdfs\/literature\/manual\/mnl_avalon_spec.pdf\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/a>:  <\/p>\n<pre><code>The value of the maximum burstcount parameter must be a power of 2.  A burstcount interface of width n can encode a max burst of size 2^(n-1).  For example, a 4-bit burstcount signal can support a maximum burst count of 8.  The minimum burstcount is 1. <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0437\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e 16 256-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e 4096 \u041a\u0431\u0438\u0442 \u0438\u043b\u0438 128 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b (\u043c\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430).<\/p>\n<p>  <b>MEMORY_SIDE_MEM_LATENCY<\/b> \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 FIFO \u0432 <b>lsu_burst_read_master<\/b>. \u042d\u0442\u0430 FIFO \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u041a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u0451:  <\/p>\n<pre><code>localparam MAXBURSTCOUNT=2**(BURSTCOUNT_WIDTH-1);   \/\/ Parameterize the FIFO depth based on the &quot;drain&quot; rate of the return FIFO \/\/   In the worst case you need memory latency + burstcount, but if the kernel \/\/   is slow to pull data out we can overlap the next burst with that.  Also \/\/   since you can't backpressure responses, you need at least a full burst \/\/   of space.                     \/\/ Note the burst_read_master requires a fifo depth &gt;= MAXBURSTCOUNT + 5.  This \/\/ hardcoded 5 latency could result in half the bandwidth when burst and \/\/ latency is small, hence double it so we can double buffer. localparam _FIFO_DEPTH = MAXBURSTCOUNT + 10 + ((MEMORY_SIDE_MEM_LATENCY * WIDTH_BYTES + MWIDTH_BYTES - 1) \/ MWIDTH_BYTES);  \/\/ This fifo doesn't affect the pipeline, round to power of 2                                 localparam FIFO_DEPTH = 2**$clog2(_FIFO_DEPTH);                <\/code><\/pre>\n<pre><code>_FIFO_DEPTH = 16 + 10 + ((89 * 4 + 32 - 1)\/32) = 39  \u041e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u043c \u0432\u0432\u0435\u0440\u0445 \u0434\u043e \u0447\u0438\u0441\u043b\u0430, \u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0432\u043e\u0439\u043a\u0438: FIFO_DEPTH = 64 <\/code><\/pre>\n<p>  <b>\u0412\u044b\u0432\u043e\u0434<\/b>:<br \/>  \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0431\u0443\u0444\u0435\u0440 (\u043a\u044d\u0448) \u043d\u0430 64 \u0441\u043b\u043e\u0432\u0430 \u043f\u043e 256 \u0431\u0438\u0442. <\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u043b\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u0430 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e <b>RAM Summary<\/b> \u043e\u0442\u0447\u0435\u0442\u0430 \u043e\u0442 \u0441\u0431\u043e\u0440\u043a\u0435. \u041d\u0430\u0448 \u0440\u0430\u0441\u0447\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432\u0435\u0440\u043d\u044b\u043c, \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u043e\u0442\u0447\u0435\u0442\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e 7 \u0431\u043b\u043e\u043a\u043e\u0432 M10K. \u0421\u0435\u043c\u044c \u0431\u043b\u043e\u043a\u043e\u0432 \u044d\u0442\u043e 10240 \u0431\u0438\u0442 * 7 = 70 \u041a\u0431\u0438\u0442, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 256 \u0431\u0438\u0442 * 64 = 16 \u041a\u0431\u0438\u0442. <\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e?<br \/>  \u0412 FPGA \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.<br \/>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a M10K (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u0443 \u0432 \u0447\u0438\u043f\u0430\u0445 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 Cyclone V) \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/documentation.altera.com\/#\/00005773-AA$NT00073186\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0431\u043b\u043e\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 40 \u0431\u0438\u0442, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u043e \u0432 256 \u0431\u0438\u0442, \u0442\u043e \u043d\u0430\u0434\u043e 256\/40 = 6.4 -&gt; 7 \u0431\u043b\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 64, \u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a 64&#215;40, \u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 75% \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041d\u0430 \u0447\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0451\u0440\u0441\u0442\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u044d\u0448\u0430?  <\/p>\n<ul>\n<li>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0451\u0440\u0441\u0442, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043f\u0430\u043c\u044f\u0442\u0438 (\u0443 \u043d\u0430\u0441 \u0442\u0440\u0438 \u043c\u0430\u0441\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e). <\/li>\n<li>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u044d\u0448, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0435\u0441\u0442\u044c \u0432 \u00ab\u0437\u0430\u043f\u0430\u0441\u0435\u00bb \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u043e\u043a\u0430 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u043f\u043e\u0440\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u0438\u043d\u0443\u0441\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u044d\u0448\u0430 \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0440\u043e\u043c\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u044d\u0448 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043b\u043e\u0432 \u0440\u0430\u0432\u043d\u043e\u0435 256 \u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432 M10K.<\/li>\n<\/ul>\n<p>  <\/p>\n<h5>LSU_WRITE_STREAMING<\/h5>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/49d\/bc3\/05a\/49dbc305a0514c08be294d475dc6a51c.png\"\/><br \/>  \u041f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u043a\u043b\u0430\u0434\u0443\u0442\u0441\u044f \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432 \u0441\u0432\u043e\u0438 FIFO. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e <b>MAXBURSTCOUNT<\/b> (\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u043e\u0436\u0435 \u0440\u0430\u0432\u0435\u043d 16), \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 FIFO \u0438\u043c\u0435\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 32. \u0422\u0430\u043a\u0438\u0445 \u0444\u0438\u0444\u043e\u0448\u0435\u043a FIFO \u0432\u043e\u0441\u0435\u043c\u044c \u0448\u0442\u0443\u043a (256\/32).<\/p>\n<p>  \u041d\u0430 \u043a\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u044d\u0442\u0438 \u0444\u0438\u0444\u043e\u0448\u043a\u0438? <\/p>\n<p>  \u0420\u0430\u0441\u0447\u0435\u0442 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0438\u0437 \u043a\u043e\u0434\u0430 <b>lsu_streaming_write<\/b>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. <b>MEMORY_SIDE_MEM_LATENCY<\/b> \u0440\u0430\u0432\u0435\u043d 32.  <\/p>\n<pre><code>localparam MAXBURSTCOUNT=2**(BURSTCOUNT_WIDTH-1); localparam __FIFO_DEPTH=2*MAXBURSTCOUNT + (MEMORY_SIDE_MEM_LATENCY * WIDTH + MWIDTH - 1) \/ MWIDTH;         localparam _FIFO_DEPTH= ( __FIFO_DEPTH &gt; MAXBURSTCOUNT+4 ) ? __FIFO_DEPTH : MAXBURSTCOUNT+5;               \/\/ This fifo doesn't affect the pipeline, round to power of 2                                              localparam FIFO_DEPTH= 2**($clog2(_FIFO_DEPTH));                                                      <\/code><\/pre>\n<p>  <\/p>\n<pre><code>MAXBURSTCOUNT = 2^4 = 16 __FIFO_DEPTH = 2 * 16 + ( 32 * 32 + 256 - 1)\/256 = 36 + 5 = 41 _FIFO_DEPTH = 41  \u041e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u043c \u0432\u0432\u0435\u0440\u0445 \u0434\u043e \u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0432\u043e\u0439\u043a\u0438: FIFO_DEPTH = 64 <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0430\u0435\u043c \u043e\u0442\u0447\u0435\u0442\u043e\u043c: 64 * 32 = 2048 \u0431\u0438\u0442 (1 M10K).<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a FIFO \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435, \u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e FIFO \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u043b\u043e\u043a\u0443 M10K, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a 8 \u0431\u043b\u043e\u043a\u0430\u043c M10K, \u043f\u0440\u043e\u0442\u0438\u0432 7 \u0431\u043b\u043e\u043a\u043e\u0432 M10K \u0432 <b>lsu_read_streaming<\/b>. <\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 8 FIFO, \u0445\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u0443, \u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0443\u044e? \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c (\u043d\u0435 \u043d\u0430\u0434\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u0441\u043b\u043e\u0432).<\/p>\n<h5>\u041a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b LSU?<\/h5>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043e\u0442\u043a\u0443\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438:<br \/>  \u0415\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0435\u0440\u0443\u0442\u044c\u0441\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0442\u0443 <b>(altera\/15.1\/hld\/board\/de1soc\/de1soc_sharedonly\/board_spec.xml)<\/b>. <\/p>\n<p>  \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e:  <\/p>\n<pre><code> &lt;!-- One DDR3-800 DIMM, 256-bit data --&gt; &lt;global_mem max_bandwidth=&quot;6400&quot;&gt;   &lt;interface name=&quot;acl_iface&quot; port=&quot;kernel_mem0&quot; type=&quot;slave&quot; width=&quot;256&quot; maxburst=&quot;16&quot; latency=&quot;240&quot; address=&quot;0x00000000&quot; size=&quot;0x40000000&quot;\/&gt; &lt;\/global_mem&gt; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a <b><a href=\"https:\/\/www.altera.com\/content\/dam\/altera-www\/global\/en_US\/pdfs\/literature\/hb\/opencl-sdk\/ug_aocl_custom_platform_toolkit.pdf\">Altera SDK for OpenCL: Custom Platform Toolkit User Guide<\/a><\/b> \u0433\u043b\u0430\u0432\u0430 <b>XML Elements, Attributes, and Parameters in the board_spec.xml File<\/b>.<\/p>\n<p>  <b>max_bandwidth<\/b> \u2014 <i>The maximum bandwidth of all global memory interfaces combined in their current configuration. The Altera Offline Compiler uses max_bandwidth to choose an architecture suitable for the application and the board. Compute this bandwidth value from datasheets of your memories.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\"><b>max_bandwidth<\/b> \u2014 <i>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. Altera Offline Compiler \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 max_bandwidth \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435 \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/i>  <\/div>\n<\/div>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0435\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u0430\u043a\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f: \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0435 <a href=\"https:\/\/hsto.org\/files\/c8f\/b62\/907\/c8fb629071844e2eb796e8b5e1aa4db0.png\">\u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c<\/a> 6400 MB\/s, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u043c 6400 MB\/s \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f: 400 (\u041c\u0413\u0446, \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 DDR) * 32 (\u0431\u0438\u0442, \u0448\u0438\u0440\u0438\u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 DDR-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435) * 2 (\u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0434\u0432\u0443\u043c \u0444\u0440\u043e\u043d\u0442\u0430\u043c) = 25600 Mb\/s = 3200 MB\/s. \u041b\u0438\u0431\u043e \u043d\u0430\u0434\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b?<\/p>\n<p>  <b>max_burst<\/b> \u2014 <i>Maximum burst size for the slave interface. <\/i>   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\"><b>max_burst<\/b> \u2014 <i>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0435\u0440\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e (\u0441\u043b\u0435\u0439\u0432) \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. <\/i>   <\/div>\n<\/div>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 16, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 BURSTCOUNT_WIDTH = 5. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e 16? \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <b>fpga2hps_sdram<\/b> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <b>max_burstcount<\/b> = 128. 16 \u2014 \u044d\u0442\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435\u043c? \ud83d\ude42<\/p>\n<p>  <b>latency<\/b> \u2014 <i>An integer specifying the time in nanoseconds (ns) for the memory interface to respond to a request. The latency is the round-trip time from the kernel issuing the board system a memory read request to the memory data returning to the kernel. For example, the Altera DDR3 memory controller running at 200 MHz with clock-crossing bridges has a latency of approximately 240 ns. <\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\"><b>latency<\/b> \u2014 <i>\u0426\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0432 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435<br \/>  \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u2014 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u044f\u0434\u0440\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Altera DDR3 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 200 \u041c\u0413\u0446 \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u043a\u043e\u043b\u043e 240 \u043d\u0441. <\/i>  <\/div>\n<\/div>\n<p>  <abbr title=\"\u0445\u043e\u0442\u044f \u044f \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0441\u044c, \u0442.\u043a. \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u0430\u0445 DDR \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f\">\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c<\/abbr>, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0436\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 240 ns. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c <b>MEMORY_SIDE_MEM_LATENCY<\/b> \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0442\u043e\u0432 (\u0434\u0430 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u044d\u0442\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442: <i>Latency in cycles between LSU and memory<\/i>).<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <b>board_spec.xml<\/b> (<b>maxburst<\/b>, <b>latency<\/b>) \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u044f\u0434\u0440\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f (<b>readers<\/b>)). \u0421\u043b\u0435\u0434\u0438\u043c \u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <b>MEMORY_SIDE_MEM_LATENCY<\/b> \u0443 \u043e\u0431\u043e\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (<b>LSU_X<\/b> (lsu_read_streaming) \u0438 <b>LSU_Z<\/b> (lsu_write_streaming) ).<\/p>\n<pre><code>|--------------------------------------------------------| | maxburst | latency | readers | MEMORY_SIDE_MEM_LATENCY | |          |         |         |-------------------------| |          |         |         | LSU_X     | LSU_Z       | |--------------------------------------------------------| | 16       | 0       | 1       | 25        | 16          | | 16       | 100     | 1       | 45        | 16          | | 16       | 240     | 1       | 73        | 16          | |--------------------------------------------------------| | 16       | 0       | 2       | 41        | 32          | | 16       | 100     | 2       | 61        | 32          | | 16       | 240     | 2       | 89        | 32          | |--------------------------------------------------------| | 16       | 0       | 3       | 57        | 48          | | 16       | 100     | 3       | 77        | 48          | | 16       | 240     | 3       | 105       | 48          | |--------------------------------------------------------| | 32       | 0       | 1       | 41        | 32          | | 32       | 100     | 1       | 61        | 32          | | 32       | 240     | 1       | 89        | 32          | |--------------------------------------------------------| | 32       | 0       | 2       | 73        | 64          | | 32       | 100     | 2       | 93        | 64          | | 32       | 240     | 2       | 121       | 64          | |--------------------------------------------------------| | 32       | 0       | 3       | 105       | 96          | | 32       | 100     | 3       | 125       | 96          | | 32       | 240     | 3       | 153       | 96          | |--------------------------------------------------------| <\/code><\/pre>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:  <\/p>\n<ul>\n<li>\u041f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 latency \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 <b>maxburst<\/b> \u0438 <b>readers<\/b> <b>LSU_X_MEMORY_SIDE_MEM_LATENCY<\/b> \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e\u0435 latency\/5. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e 5 \u2014 \u044d\u0442\u043e 5 ns (\u043d\u0430\u0441 \u043e\u0442\u0441\u044b\u043b\u0430\u044e\u0442 \u043a \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 200 \u041c\u0413\u0446?).<\/li>\n<li>\u041f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 <b>LSU_X_MEMORY_SIDE_MEM_LATENCY<\/b> \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0451\u0440\u0441\u0442\u0430.<\/li>\n<li><b>LSU_Z_MEMORY_SIDE_MEM_LATENCY<\/b> \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u0451\u0440\u0441\u0442\u0430. <\/li>\n<\/ul>\n<p>  \u0412\u0438\u0434\u043d\u0435\u044e\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u044b:  <\/p>\n<ul>\n<li> <b>LSU_X_MEMORY_SIDE_MEM_LATENCY<\/b> = 9 + <b>readers<\/b> * <b>maxburst<\/b> + <b>latency<\/b>\/5. (9 \u2014 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043b\u0438\u0431\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u044f\u0434\u0440\u0430, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043d\u0435 \u0434\u043e\u043a\u043e\u043f\u0430\u043b\u0441\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043e\u0431\u0449\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u044f\u0434\u0440\u0430).<\/li>\n<li> <b>LSU_Z_MEMORY_SIDE_MEM_LATENCY<\/b> = <b>maxburst<\/b> * <b>readers<\/b>.<\/li>\n<\/ul>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b>:<br \/>  \u044d\u0442\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438), \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0432\u0441\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<h2>\u041d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044f\u0434\u0440\u043e<\/h2>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u044f\u0434\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c <b>acl_kernel_clk<\/b>.<br \/>  \u0412 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0435\u0436\u0438\u0442 PLL, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u043c\u0435\u043d\u044f\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443). <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 Qsys \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/blob\/master\/vector_add\/bin_vector_add\/system\/synthesis\/submodules\/system_acl_iface_acl_kernel_clk_kernel_pll.v\"><b>system_acl_iface_acl_kernel_clk_kernel_pll.v<\/b><\/a>, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u0430 PLL \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u2014 140 \u041c\u0413\u0446 (<b>kernel_clk<\/b>) \u0438 280 \u041c\u0413\u0446 (<b>kernel_clk2x<\/b>). \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e <b>kernel_clk2x<\/b> \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043b\u0438, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0432\u0441\u0435\u0433\u0434\u0430 (\u0438 \u043b\u044e\u0431\u043e\u0435) \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 140 \u041c\u0413\u0446 \u0438 \u0435\u0433\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c? \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, <b>\u043d\u0435\u0442<\/b>.<br \/>  140 \u041c\u0413\u0446 \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>  \u0412 \u0437\u0430\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0445\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0441\u0431\u043e\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c. \u042f \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/235037\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043f\u0440\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u2014 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b (\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0431\u043b\u043e\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440.) \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e:  <\/p>\n<ul>\n<li>\u043e\u043d \u043d\u0435 \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0441\u0442 \u0441\u0430\u043c\u0443\u044e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443. <\/li>\n<li>\u0435\u0441\u043b\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d, \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0447\u0438\u043f\u0435, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u0442\u043e \u043e\u043d \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430).<\/li>\n<\/ul>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u043e 140 \u041c\u0413\u0446 <b>Quartus<\/b> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 135 \u041c\u0413\u0446. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e:  <\/p>\n<ul>\n<li>\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c 135 \u041c\u0413\u0446, \u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0443\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442 \u0438 \u043f\u0440. (\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u0434\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f).<\/li>\n<li>\u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c 140 \u041c\u0413\u0446, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438, \u0447\u0442\u043e \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0435\u0442. \u042d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0447\u0438\u043f\u0430 \u2014 \u0447\u0438\u043f\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u0445\u0443\u0434\u0448\u0435\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e.<\/li>\n<\/ul>\n<p>  \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FPGA \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u043e\u0442\u0447\u0435\u0442 \u043e \u0441\u0431\u043e\u0440\u043a\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f: \u0443\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0441\u0445\u0435\u043c\u0430. \u041c\u044b \u0436\u0435 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0438 \u0437\u0430\u0448\u0438\u043b\u0438 \u0435\u0433\u043e. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0443\u043b\u043e\u0436\u0438\u043b\u0441\u044f \u0432 \u044d\u0442\u0438 140 \u041c\u0413\u0446? \u0420\u0430\u0441\u0447\u0435\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u044b?<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, Altera \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0444\u0438\u0448\u043a\u0443 (\u043d\u0430\u0432\u0435\u0440\u043d\u043e, \u0441\u0430\u043c\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u0440\u0430\u0441\u043a\u043e\u043f\u0430\u043b, \u043a\u043e\u0433\u0434\u0430 \u0438\u0433\u0440\u0430\u043b\u0441\u044f \u0441 Altera OpenCL SDK):  <\/p>\n<ul>\n<li>\u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 <a href=\"https:\/\/github.com\/johan92\/altera_opencl_sandbox\/blob\/master\/vector_add\/bin_vector_add\/iface\/ip\/bsp\/adjust_plls.tcl\"><b>adjust_plls.tcl<\/b><\/a>. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0434\u043b\u044f \u044f\u0434\u0440\u0430 (<b>Fmax<\/b>), \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b (<b>pll_rom.mif<\/b> \u0438 <b>pll_rom.hex<\/b>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ROM \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 <b>pll_rom<\/b>.<\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f FPGA, \u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 (140 \u041c\u0413\u0446). \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u044f\u0434\u0440\u0430, \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 ROM, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0430 PLL (\u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438). \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043a\u0435\u0440\u043d\u0435\u043b \u0443\u0436\u0435 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430. <\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u0434\u0443 tcl-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 ROM \u043a\u043b\u0430\u0434\u0443\u0442\u0441\u044f \u043a\u043e\u044d\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b m, n, k, c0, c1, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <abbr title=\"\u044f \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\"> \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c <\/abbr> \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"https:\/\/www.altera.com\/en_US\/pdfs\/literature\/an\/an661.pdf\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Altera PLL<\/a>.  <\/div>\n<\/div>\n<p>  <b>\u0418\u0442\u043e\u0433\u043e<\/b>:  <\/p>\n<ul>\n<li>\u041d\u0430 \u044f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0430\u043d\u0430 \u0442\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0451\u043c\u043a\u043e\u0439, \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u0435\u0435 \u0438\u0434\u0442\u0438.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0448\u0435, \u0442\u043e PLL \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u0441\u044f). \u041f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0441\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u00ab\u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c\u00bb, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043b\u0430\u043d\u043a\u0443 \u0443 \u0447\u0430\u0441\u0442\u043e\u0442\u044b PLL.<\/li>\n<\/ul>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443<\/h2>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0438 \u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043d\u0435\u0441\u0442\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (\u0432 \u044f\u0434\u0440\u043e) \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e <a href=\"http:\/\/habrahabr.ru\/company\/metrotek\/blog\/269009\/#workflow\">\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/a>: \u0444\u0430\u0439\u043b <b>vector_add.aocx<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 FPGA \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 <b>vector_add.cl<\/b>.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u043d\u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u041a\u0432\u0430\u0440\u0442\u0443\u0441\u0430, \u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 <b>*.aocx<\/b>, \u0442.\u043a. \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <b>aoc<\/b> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u00ab\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u00bb \u0438 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f <b>Verilog IP<\/b>. \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u0430\u0448\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u0430\u0434\u0443\u0442.<\/p>\n<p>  \u0423\u0442\u0438\u043b\u0438\u0442\u0430 <b>aoc<\/b> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u043c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435:  <\/p>\n<pre><code>$ aoc device\/vector_add.cl -o bin\/vector_add.aocx --board de1soc_sharedonly --profile -v <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 \u043f\u0435\u0440\u043b\u0435 <b>aoc.pl<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. <br \/>  \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b <b>aoc<\/b>.   <\/p>\n<pre><code>$ \/home\/ish\/altera\/15.1\/quartus\/linux64\/perl\/bin\/perl \/home\/ish\/altera\/15.1\/hld\/share\/lib\/perl\/acl\/aoc.pl device\/vector_add.cl --board de1soc_sharedonly --profile -v <\/code><\/pre>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <br \/>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u044e\u0447\u0438 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0445\u0435\u043b\u043f\u0435). <\/p>\n<p>  \u0422\u0430\u043a, \u0442\u0430\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0438\u043a <b>&#8212;quartus<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0431\u043e\u0440\u043a\u0443 \u043a\u0432\u0430\u0440\u0442\u0443\u0441\u0430 \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0432 *.aocx \u0444\u0430\u0439\u043b. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043b\u043e\u0433 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 stdout \u0438 stderr \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>mysystem_full<\/b>:  <\/p>\n<pre><code>$return_status = mysystem_full(   {'time' =&gt; 1, 'time-label' =&gt; 'Quartus compilation', 'stdout' =&gt; '', 'stderr' =&gt; ''},                $synthesize_cmd); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 (\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c SignalTap) \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f FPGA, \u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u043e \u044f\u0434\u0440\u0430 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c clang&#8217;a \u0438 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b SignalTap \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b (\u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b 15 \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u0439 sleep \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430 \u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u044f \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u0430). <\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4ca\/d12\/ed6\/4cad12ed602cd52d8f1847af42dfbc17.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4ca\/d12\/ed6\/4cad12ed602cd52d8f1847af42dfbc17.png\" alt=\"image\"\/><\/a><\/p>\n<h2>\u041a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e<\/h2>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <b>avs_vector_add_cra<\/b> \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0435\u0440\u043d\u0435\u043b\u0430: \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u0447\u0442\u043e \u043a\u0430\u043a \u043d\u0430\u0434\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0412\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 <b>vector_add.v<\/b> \u0438 \u0438\u043c\u0435\u044e\u0442 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f 64-\u0431\u0438\u0442\u043d\u044b\u043c\u0438: [31:0] \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u043d\u0438\u0436\u043d\u0438\u0435 32 \u0431\u0438\u0442\u0430, \u0430 [63:32] \u2014 \u0441\u0442\u0430\u0440\u0448\u0438\u0435.  <\/p>\n<pre><code>0x0           - status 0x1 - 0x4     - profile  0x5 - [31:0]  - work_dim  0x5 - [63:32] - workgroup_size  0x6 - [31:0]  - global_size[0] 0x6 - [63:32] - global_size[1] 0x7 - [31:0]  - global_size[2]  0x7 - [63:32] - num_groups[0] 0x8 - [31:0]  - num_groups[1] 0x8 - [63:32] - num_groups[2]  0x9 - [31:0]  - local_size[0] 0x9 - [63:32] - local_size[1] 0xA - [31:0]  - local_size[2]  0xA - [63:32] - global_offset[0] 0xB - [31:0]  - global_offset[1] 0xB - [63:32] - global_offset[2]  0xC - [31:0]  - kernel_arguments[31:0]    - input_x[31:0] 0xC - [63:32] - kernel_arguments[63:32]   - input_x[63:32]  0xD - [31:0]  - kernel_arguments[95:64]   - input_y[31:0] 0xD - [63:32] - kernel_arguments[127:96]  - input_y[63:32]  0xE - [31:0]  - kernel_arguments[159:128] - input_z[31:0] 0xE - [63:32] - kernel_arguments[191:160] - input_z[63:32] <\/code><\/pre>\n<p>  \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0443\u0433\u0430\u0434 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u0442\u044c, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0442\u0443\u0434\u0430 \u043f\u0438\u0448\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SignalTap&#8217;a):  <\/p>\n<pre><code>---------------------------------------------- | addr | write_data            | byte_enable | ---------------------------------------------- | 0x5  | 0x00000000 0x00000001 | 0x0F        | | 0x5  | 0x000F4240 0x00000000 | 0xF0        | ---------------------------------------------- | 0x6  | 0x00000000 0x000F4240 | 0x0F        | | 0x6  | 0x00000001 0x00000000 | 0xF0        | ---------------------------------------------- | 0x7  | 0x00000000 0x00000001 | 0x0F        | | 0x7  | 0x00000001 0x00000000 | 0xF0        | ---------------------------------------------- | 0x8  | 0x00000000 0x00000001 | 0x0F        | | 0x8  | 0x00000001 0x00000000 | 0xF0        | ---------------------------------------------- | 0x9  | 0x00000000 0x000F4240 | 0x0F        | | 0x9  | 0x00000001 0x00000000 | 0xF0        | ---------------------------------------------- | 0xA  | 0x00000000 0x00000001 | 0x0F        | | 0xA  | 0x00000000 0x00000000 | 0xF0        | ---------------------------------------------- | 0xB  | 0x00000000 0x00000000 | 0x0F        | | 0xB  | 0x00000000 0x00000000 | 0xF0        | ---------------------------------------------- | 0xC  | 0x00000000 0x20100000 | 0x0F        | | 0xC  | 0x00000000 0x00000000 | 0xF0        | ---------------------------------------------- | 0xD  | 0x00000000 0x20500000 | 0x0F        | | 0xD  | 0x00000000 0x00000000 | 0xF0        | ---------------------------------------------- | 0xE  | 0x00000000 0x20900000 | 0x0F        | | 0xE  | 0x00000000 0x00000000 | 0xF0        | ---------------------------------------------- | 0x0  | 0x00000000 0x00000001 | 0x0F        | ---------------------------------------------- <\/code><\/pre>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b>:<br \/>  <b>byte_enable<\/b> \u00ab\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u00bb \u0432 \u043a\u0430\u043a\u0438\u0435 \u0431\u0430\u0439\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043f\u0438\u0441\u0430\u0442\u044c: \u0442\u0430\u043a, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0430\u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 0x00000001 \u0432 \u043d\u0438\u0436\u043d\u0438\u0435 32 \u0431\u0438\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 0x5 (\u0441\u0442\u0430\u0440\u0448\u0438\u0435 32 \u0431\u0438\u0442\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c).<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432 SignalTap \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e: \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u0431\u0430\u0433 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0433\u043b\u0430\u0432\u0435 <b>Troubleshooting<\/b> <a href=\"https:\/\/www.altera.com\/content\/dam\/altera-www\/global\/en_US\/pdfs\/literature\/hb\/opencl-sdk\/ug_aocl_s5_net_platform.pdf\">Altera Stratix V Network Reference Platform Porting Guide<\/a>.<\/p>\n<p>  \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <b>ACL_HAL_DEBUG<\/b>. \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 2 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <b>vector_add<\/b>:  <\/p>\n<pre><code>root@socfpga:~\/myvectoradduint# export ACL_HAL_DEBUG=2 root@socfpga:~\/myvectoradduint# .\/vector_add  \/\/ &lt;\u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0439 \u0434\u0435\u0431\u0430\u0433&gt; :: Launching kernel 0 on accelerator 0. ::   Writing inv image [ 0] @    0x28 :=    1 ::   Writing inv image [ 4] @    0x2c := f4240 ::   Writing inv image [ 8] @    0x30 := f4240 ::   Writing inv image [12] @    0x34 :=    1 ::   Writing inv image [16] @    0x38 :=    1 ::   Writing inv image [20] @    0x3c :=    1 ::   Writing inv image [24] @    0x40 :=    1 ::   Writing inv image [28] @    0x44 :=    1 ::   Writing inv image [32] @    0x48 := f4240 ::   Writing inv image [36] @    0x4c :=    1 ::   Writing inv image [40] @    0x50 :=    1 ::   Writing inv image [44] @    0x54 :=    0 ::   Writing inv image [48] @    0x58 :=    0 ::   Writing inv image [52] @    0x5c :=    0 ::   Writing inv image [56] @    0x60 := 20100000 ::   Writing inv image [60] @    0x64 :=    0 ::   Writing inv image [64] @    0x68 := 20500000 ::   Writing inv image [68] @    0x6c :=    0 ::   Writing inv image [72] @    0x70 := 20900000 ::   Writing inv image [76] @    0x74 :=    0 :: Accelerator 0 reporting status 2. :: Accelerator 0 is done. <\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e 0x28 \u2014 \u044d\u0442\u043e \u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439 \u043e\u0444\u0444\u0441\u0435\u0442 5-\u0433\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. <br \/>  \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u043f\u0440\u0430\u0432\u0434\u0430, \u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u0431\u0430\u0433\u0435 \u043d\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 <b>ACL_HAL_DEBUG<\/b> \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0432\u043d\u044b\u043c \u043f\u044f\u0442\u0438).<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:  <\/p>\n<ul>\n<li><b>work_dim<\/b> \u2014 0x1 \u2014 \u0442.\u043a. \u0443 \u043d\u0430\u0441 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440.<\/li>\n<li><b>workgroup_size<\/b> \u2014 0xF4240 \u0438\u043b\u0438 1000000.<\/li>\n<li><b>global_size<\/b> \u2014 0xF4240 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438 0x1 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445.<\/li>\n<li><b>num_groups<\/b> \u2014 0x1 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439.<\/li>\n<li><b>local_size<\/b> \u2014 0xF4240 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438 0x1 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445.<\/li>\n<li><b>global_offset<\/b> \u2014 0x0 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439.<\/li>\n<li><b>input_x<\/b>, <b>input_y<\/b>, <b>input_z<\/b> \u2014 0x20100000, 0x20500000, 0x20900000 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 \u0434\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u0442\u0430\u0440\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043e\u043a\u0430 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0431\u0430\u0440\u0430\u0431\u0430\u043d, \u0445\u043e\u0447\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0438\u0437 \u0410\u043b\u044c\u0442\u0435\u0440\u044b.<br \/>  \u0417\u0430\u0447\u0435\u043c \u0432\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <b>status<\/b>?<br \/>  \u041c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u043b\u043e \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435?  <\/div>\n<\/div>\n<h2>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u044f\u0434\u0440\u0430<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e \u2014 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c!<br \/>  \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0447\u0442\u043e \u0443 \u044f\u0434\u0440\u0430 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2014 \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 (\u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 \u043e\u0434\u0438\u043d \u0441\u0438\u0433\u043d\u0430\u043b) \u0434\u043b\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u2014 \u043d\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e).<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043a\u0430\u043a \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438:  <\/p>\n<ul>\n<li>\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e (\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439).<\/li>\n<li>\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0434\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u043b\u0435\u0436\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0435.<\/li>\n<\/ul>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u043d\u0443\u043a\u0441 \u0438 \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u044b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0438\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u043e\u0439:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bba\/fc2\/838\/bbafc2838b21b366dbc577a3b7c2173c.png\" alt=\"image\"\/>  <\/p>\n<ul>\n<li><b>cra_driver<\/b> \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430.<\/li>\n<li><b>vector_add_system<\/b> \u2014 \u044f\u0434\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c (<abbr title=\"device (design) under test\">DUT<\/abbr>).<\/li>\n<li><b>avalon_mm_clock_crossing<\/b> \u2014 \u043f\u0435\u0440\u0435\u0431\u0440\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0435\u0440\u043d\u0435\u043b\u0430 (140 \u041c\u0413\u0446) \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (100 \u041c\u0413\u0446) \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/li>\n<li><b>prepare_data<\/b> \u2014 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0442\u0430\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0443\u0444\u0435\u0440\u044b <b>X<\/b> \u0438 <b>Y<\/b> \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li><b>avalon_mm_interconnect<\/b> \u2014 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436 \u0434\u0432\u0443\u0445 Avalon-MM \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.<\/li>\n<li><b>ddr3_contoller<\/b>, <b>ddr3_model<\/b> \u2014 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 Altera Hard Memory Controller \u0438 DDR3 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0442\u0435\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 <b>hps<\/b>.<\/li>\n<\/ul>\n<p>  \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0430\u0441\u043a\u0430 \u0441 \u0442\u0435\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u044f\u0434\u0440\u0430, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u043a\u043e\u043f\u0430\u043b\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f SignalTap&#8217;\u0443:  <\/p>\n<pre><code>task cra_write( input bit [3:0] _addr, bit [63:0] _data, bit [7:0] _byteenable );   $display(&quot;%m: _addr = 0x%x, _data = 0x%x, _byteenable = 0x%x&quot;,                 _addr,        _data,        _byteenable );    @( posedge clk );   cra_addr        &lt;= _addr;   cra_wr_data     &lt;= _data;   cra_byteenable  &lt;= _byteenable;   cra_wr_en       &lt;= 1'b0;    @( posedge clk );   cra_wr_en       &lt;= 1'b1;    @( posedge clk );   cra_wr_en       &lt;= 1'b0;    \/\/ dummy waiting    repeat (10) @( posedge clk ); endtask <\/code><\/pre>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>initial                                                                                                      begin                                                                                                        wait( ram_init_done );                                                                                     wait( test_data_init_done );                                                                               cra_write( 4'h5, 64'h000F424000000000, 8'hF0 );                                                     cra_write( 4'h5, 64'h0000000100000000, 8'hF0 );                                                            cra_write( 4'h6, 64'h00000000000F4240, 8'h0F );                                                            cra_write( 4'h6, 64'h0000000100000000, 8'hF0 );                                                            cra_write( 4'h7, 64'h0000000000000001, 8'h0F );                                                            cra_write( 4'h7, 64'h0000000100000000, 8'hF0 );                                                   cra_write( 4'h8, 64'h0000000000000001, 8'h0F );                                                            cra_write( 4'h8, 64'h0000000100000000, 8'hF0 );                                                            cra_write( 4'h9, 64'h00000000000F4240, 8'h0F );                                                    cra_write( 4'h9, 64'h0000000100000000, 8'hF0 );                                                                                                  cra_write( 4'hA, 64'h0000000000000001, 8'h0F );                                                            cra_write( 4'hA, 64'h0000000000000000, 8'hF0 );                                                            cra_write( 4'hB, 64'h0000000000000000, 8'h0F );                                                            cra_write( 4'hB, 64'h0000000000000000, 8'hF0 );                                                            cra_write( 4'hC, 64'h0000000020100000, 8'h0F );                                                            cra_write( 4'hC, 64'h0000000000000000, 8'hF0 );                                                            cra_write( 4'hD, 64'h0000000020500000, 8'h0F );                                                            cra_write( 4'hD, 64'h0000000000000000, 8'hF0 );                                                            cra_write( 4'hE, 64'h0000000020900000, 8'h0F );                                                            cra_write( 4'hE, 64'h0000000000000000, 8'hF0 );                                                            cra_write( 4'h0, 64'h0000000000000001, 8'h0F );                                                          end   <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442 \u043f\u0438\u0448\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0442\u0430\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0431\u0438\u0442\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c. (\u0414\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043d\u0430\u043c \u043d\u0438\u043a\u043e\u0433\u043e (\u0441\u0438\u0441\u0442\u0435\u043c\u0443) \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e). \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c 2&#215;1000000 \u0447\u0438\u0441\u0435\u043b \u043a\u0430\u043a \u043d\u0430\u0434\u043e \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u0442\u044b\u0441\u044f\u0447, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0437\u0430\u043f\u0438\u0448\u0435\u043c, \u0442\u043e \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f <b>x<\/b> (<b>unknown value<\/b>), \u0442.\u043a. \u0432 \u044d\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 (\u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f\u043d\u043a\u0430\u0445 \u0432 16-\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435) (\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u043b\u0443\u0447\u0448\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435):<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/0dd\/5aa\/489\/0dd5aa489a53459c9d3791fcd1c3a123.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0dd\/5aa\/489\/0dd5aa489a53459c9d3791fcd1c3a123.png\"\/><\/a><\/p>\n<p>  \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b <b>start<\/b> \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0442\u043e\u0432 \u043e\u0431\u0430 LSU \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u0435\u0440\u0441\u0442\u0430 \u0440\u0430\u0432\u043d\u044b\u043c 0x10 = 16. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 <b>LSU_X<\/b>, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u0442 <b>LSU_Y<\/b>: \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 <b>avm_waitrequest<\/b> \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 <b>waitrequest<\/b> \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e. \u041f\u043e\u0447\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0435 \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0442\u0441\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u043a \u0448\u0435\u0434\u0443\u043b\u043b\u0435\u0440\u0443 \u0438 \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0443 \u0434\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. <\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b\u043b\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430? <br \/>  \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 \u0432 FIFO \u0432 LSU \u0440\u0430\u0432\u043d\u043e 64, \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0436\u0438\u0434\u0430\u0442\u044c 4 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u043e \u0432 \u0442\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u043d \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u044e\u043a:  <\/p>\n<pre><code>parameter READTHRESHOLD = FIFODEPTH - MAXBURSTCOUNT - 4; assign too_many_reads_pending = (reads_pending + fifo_used) &gt;= READTHRESHOLD;  \/\/ make sure there are fewer reads posted than room in the FIFO <\/code><\/pre>\n<p>  \u041c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 (3 x 16 = 48 \u0441\u043b\u043e\u0432): \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f 16 \u0441\u043b\u043e\u0432, \u043d\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043b\u043e\u0432\u0430. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0431\u0435\u0440\u0441\u0442\u0430 \u0438\u0437 12 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0442.\u043a. \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0442\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 (\u0434\u0430 \u0438 \u0441\u043c\u044b\u0441\u043b\u0430 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u2014 \u043b\u0438\u0448\u043d\u044e\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0442\u0440\u0430\u0442\u0438\u0442\u044c).<\/p>\n<p>  \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0441\u043c. \u0441\u0438\u0433\u043d\u0430\u043b <b>LSU_X_avm_readdatavalid<\/b>) \u0438 \u043f\u043e\u0447\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b <b>LSU_X_o_valid<\/b>, \u0438\u0437\u0432\u0435\u0449\u0430\u044e\u0449\u0438\u0439, \u0447\u0442\u043e 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 <b>LSU_X_o_readdata<\/b> \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u043e \u043d\u0430\u0441 \u0437\u0430\u0442\u044b\u043a\u0430\u044e\u0442: <b>LSU_X_i_stall<\/b> \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 <b>LSU_Y<\/b>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451 \u0437\u0430\u0442\u044b\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442 <b>LSU_Y_avm_readdatavalid<\/b> \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f <b>LSU_Y_o_valid<\/b>.<\/p>\n<p>  \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0430\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 <b>LSU_Z_i_valid<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u0432\u0435\u0449\u0430\u0435\u0442 \u043e \u0432\u0430\u0434\u0438\u0434\u043d\u043e\u0441\u0442\u0438 <b>LSU_Z_i_writedata<\/b>: \u043a\u043e\u043d\u0432\u0435\u0435\u0440 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0437\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442.<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/afc\/38d\/5b2\/afc38d5b2eac4e229c1c66974ef549e4.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/afc\/38d\/5b2\/afc38d5b2eac4e229c1c66974ef549e4.png\"\/><\/a><\/p>\n<p>  <b>LSU_Z<\/b> \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 16 256-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u044d\u0442\u0438\u043c <b>LSU_X<\/b> \u0438 <b>LSU_Y<\/b> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0432\u043e\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 FIFO. \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e <b>LSU_X_i_stall<\/b> \u0438 <b>LSU_Y_i_stall<\/b> \u043d\u0435 \u0432\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043a\u043e\u043d\u0432\u0435\u0435\u0440 \u043d\u0435 \u0437\u0430\u0442\u044b\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/files\/3b2\/785\/4f2\/3b27854f2d7c4b809e4c2d41103d4536.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3b2\/785\/4f2\/3b27854f2d7c4b809e4c2d41103d4536.png\"\/><\/a><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043c\u043d\u043e\u0433\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0442\u044b\u043a\u0430\u043d\u0438\u0439 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  <b>\u0412\u044b\u0432\u043e\u0434<\/b>:<br \/>  \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0435\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f (\u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430) \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u043a\u0438\u043c \u0437\u0432\u0435\u043d\u043e\u043c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e 256-\u0431\u0438\u0442\u043d\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043e\u0441\u044c\u043c\u0438 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u2014 \u0442\u043e\u0433\u0434\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u043e\u0442\u043b\u043d\u0435\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0411<b>\u043e<\/b>\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0443\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043c\u044b\u0441\u043b\u0430 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442<\/p>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a RTL-\u043a\u043e\u0434 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u0438\u043d\u0443 \u0431\u0435\u0440\u0441\u0442\u0430 \u0438\u043b\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u043a\u044d\u0448\u0435\u0439) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0442\u0432\u0435\u0442: \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c 10-15 \u043c\u0438\u043d\u0443\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u041a\u0432\u0430\u0440\u0442\u0443\u0441\u043e\u043c \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <b>*.cl<\/b> \u0444\u0430\u0439\u043b\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b): \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u0438 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0431\u0435\u0437 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041c\u044b \u0443\u0437\u043d\u0430\u043b\u0438 \u0432\u043e \u0447\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e OpenCL \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b FPGA \u0438 \u043a\u0430\u043a \u043e\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0431\u044b \u0443 FPGA \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 (\u0435\u0441\u043b\u0438 \u0431\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0441 \u043d\u0443\u043b\u044f), \u0431\u044b\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u044b:  <\/p>\n<ul>\n<li>\u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u044d\u0448\u0435\u0439<\/li>\n<li>\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/li>\n<li>\u0441\u0434\u0435\u043b\u0430\u043d \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u0438 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432<\/li>\n<li>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0435\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/li>\n<\/ul>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\u0425\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 Quartus&#8217;a (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0441\u0451, \u043a\u0440\u043e\u043c\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b) \u00ab\u0441\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb. \u0412 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c:  <\/p>\n<ul>\n<li>\u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438<\/li>\n<li>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/li>\n<li>\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430<\/li>\n<li>\u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435<\/li>\n<\/ul>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: \u0445\u043e\u0442\u0438\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u2014 \u043f\u043b\u0430\u0442\u0438\u0442\u0435 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 FPGA. <\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u043f\u044b\u0442\u043d\u044b\u043c FPGA \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c, \u0434\u043e\u0441\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c <b>Advisor<\/b>&#8216;\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 GUI \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043a\u043b\u0438\u043a\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442. \u0415\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0438\u0434\u0435\u043e\u0443\u0440\u043e\u043a\u0430\u043c\u0438 (\u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Altera).  <\/div>\n<\/div>\n<p>  \u041d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0442\u044e\u043d\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433. \u0412\u044b \u0447\u0430\u0441\u0442\u043e \u043b\u0435\u0437\u0435\u0442\u0435 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 gcc? \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0432 <b>*.cl<\/b> \u0438 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 Quartus&#8217;a. <\/p>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0434\u0440\u043e: \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u0435 \u0438\u043c\u0435\u044f \u0436\u0435\u043b\u0435\u0437\u0430 (\u043f\u043b\u0430\u0442\u044b) \u043d\u0430 \u0440\u0443\u043a\u0430\u0445.<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0438\u043b\u0438 \u0432 \u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u0435.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/269925\/\"> http:\/\/habrahabr.ru\/post\/269925\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/24d\/b7d\/6d4\/24db7d6d40c34705b697925ebf922a21.jpg\"\/><\/p>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!<\/p>\n<p>  \u0412 <a href=\"http:\/\/habrahabr.ru\/company\/metrotek\/blog\/269009\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 OpenCL \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 FPGA \u0444\u0438\u0440\u043c\u044b Altera:  <\/p>\n<pre><code>\/\/ ACL kernel for adding two input vectors __kernel void vector_add( __global const uint *restrict x,                             __global const uint *restrict y,                             __global       uint *restrict z ) {     \/\/ get index of the work item     int index = get_global_id(0);       \/\/ add the vector elements     z[index] = x[index] + y[index]; } <\/code><\/pre>\n<p>  \u042f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u043b\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0443 \u0430\u0439\u0441\u0431\u0435\u0440\u0433\u0430: \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0434\u0438\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432\u043e \u0447\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f (\u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b FPGA) \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u0441\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0430 \u0447\u0442\u043e \u0443\u0445\u043e\u0434\u044f\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u0441\u043a\u0440\u044b\u0442\u044c \u044f\u0434\u0440\u043e \u0438 \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:  <\/p>\n<ul>\n<li>\u041a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430?<\/li>\n<li>\u041a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430? \u041a\u0430\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443?<\/li>\n<li>\u041d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0427\u0435\u043c \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f?<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0440\u043e \u0432 RTL-\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430\u0445?<\/li>\n<li>\u041a\u0430\u043a\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043a\u0430\u043a-\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c? <\/li>\n<\/ul>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0451\u043c \u043d\u0430 \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438! \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442!  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-269715","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=269715"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269715\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=269715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=269715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=269715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}