{"id":274978,"date":"2016-02-25T21:41:06","date_gmt":"2016-02-25T18:41:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=274978"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=274978","title":{"rendered":"\u041a\u0430\u043a \u044f \u043e\u0448\u0438\u0431\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043a\u0430\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u043b"},"content":{"rendered":"<br \/>\n<blockquote><p>\u0414\u043b\u044f \u044f\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0435\u0442 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u0443\u0442\u0438, \u0447\u0435\u043c \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0433\u043e\u0440\u044c\u043a\u043e\u043c \u043e\u043f\u044b\u0442\u0435. (\u0424\u0440\u0438\u0434\u0440\u0438\u0445 \u042d\u043d\u0433\u0435\u043b\u044c\u0441)<\/p><\/blockquote>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!<\/p>\n<p>  \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u043c\u043d\u0435 \u0432 \u043b\u0438\u043d\u043a\u0435\u0434\u0438\u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u043b, \u0447\u0442\u043e \u0432 \u043c\u043e\u0435\u043c <a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\">\u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a> \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u0435\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430.<\/p>\n<p>  \u041c\u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u044b \u0438 \u0444\u0438\u043a\u0441, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0433\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 &quot;\u0437\u0430\u0432\u0438\u0441\u0430\u043b\u0430&quot;. \u041f\u0440\u0438 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0442\u0435\u043c\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 RTL-\u043a\u043e\u0434\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<p>  \u0418\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435:<\/p>\n<ul>\n<li>\u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 FPGA.<\/li>\n<li>\u043d\u0430 \u0447\u0451\u043c \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.<\/li>\n<li>\u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b (\u043e\u043d\u0438 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0430\u0433\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u0430 \u0440\u0430\u043d\u044c\u0448\u0435).<\/li>\n<li>\u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/li>\n<\/ul>\n<p>  \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>  <\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u043e \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/h2>\n<p>  <\/p>\n<h3>\u0426\u0435\u043b\u0438 \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  \u0426\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<ul>\n<li>\u0435\u0441\u043b\u0438 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0430 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f \u0442\u0430\u043c \u043b\u044e\u0431\u044b\u0445 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. <\/li>\n<li>\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0430\u043c\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 \u043d\u0435\u0442 (\u043d\u043e \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f).<\/li>\n<li>\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0443<\/li>\n<li>\u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439, \u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0433\u043e\u0442\u043e\u0432\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442 (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c).<\/li>\n<li>\u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u044f \u043d\u0435 <abbr title=\"\u0445\u043e\u0442\u044f, \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0442 \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\u0438, \u043d\u043e \u0434\u0430 \u043b\u0430\u0434\u043d\u043e\">\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u044e\u0441\u044c<\/abbr>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/h3>\n<p>  \u042f \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u044e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/126\/633\/93b\/12663393b5b94e9a9d0b75a512f06070.png\"\/><br \/>  \u0412\u0445\u043e\u0434 (<code>ht_cmd<\/code>):<\/p>\n<pre><code>typedef enum logic [1:0] {   OP_SEARCH,   OP_INSERT,   OP_DELETE } ht_opcode_t;  typedef struct packed {   logic        [KEY_WIDTH-1:0]    key;   logic        [VALUE_WIDTH-1:0]  value;   ht_opcode_t                     opcode; } ht_command_t;<\/code><\/pre>\n<p>  \u0412\u044b\u0445\u043e\u0434 (<code>ht_res<\/code>):<\/p>\n<pre><code>typedef enum int unsigned {   SEARCH_FOUND,   SEARCH_NOT_SUCCESS_NO_ENTRY,    INSERT_SUCCESS,   INSERT_SUCCESS_SAME_KEY,   INSERT_NOT_SUCCESS_TABLE_IS_FULL,    DELETE_SUCCESS,   DELETE_NOT_SUCCESS_NO_ENTRY } ht_rescode_t;  typedef struct packed {   ht_command_t                cmd;   ht_rescode_t                rescode;    logic  [BUCKET_WIDTH-1:0]   bucket;    \/\/ valid only for opcode = OP_SEARCH   logic [VALUE_WIDTH-1:0]     found_value; } ht_result_t;<\/code><\/pre>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/strong>:<br \/>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 <code>ht_result_t<\/code> \u043d\u0430\u0441 \u0432\u043e\u043b\u043d\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <code>rescode<\/code> \u0438 <code>found_value<\/code>, \u043d\u043e \u0447\u0443\u0442\u044c \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434 \u2014 \u0431\u0435\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0432\u0435\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432 \u0436\u0435\u043b\u0435\u0437\u0435 \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0430\u0442\u043e\u0440 \u0438\u0445 \u0432\u044b\u0440\u0435\u0436\u0435\u0442 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043e\u043d\u0438 \u043d\u0435 \u0437\u0430\u0439\u043c\u0443\u0442.<\/p>\n<p>  \u0427\u0442\u043e \u0438 \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e:<\/p>\n<ul>\n<li>\u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (<code>key<\/code>, <code>value<\/code>) \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 <code>data_table<\/code>.<\/li>\n<li>\u0420\u044f\u0434\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (<code>next_ptr<\/code>, <code>next_ptr_val<\/code>).<\/li>\n<li>\u041d\u043e\u043c\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u0437\u0438\u043d\u044b, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 <code>head_table<\/code>.<\/li>\n<li><code>empty_ptr_storage<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0432 <code>data_table<\/code>.<\/li>\n<\/ul>\n<p>  \u0421\u043b\u043e\u0432\u043e \u0432 <code>head_table<\/code>:<\/p>\n<pre><code>typedef struct packed {   logic [HEAD_PTR_WIDTH-1:0] ptr;   logic                      ptr_val; } head_ram_data_t;<\/code><\/pre>\n<p>  \u0421\u043b\u043e\u0432\u043e \u0432 <code>data_table<\/code>:<\/p>\n<pre><code>typedef struct packed {   logic [KEY_WIDTH-1:0]      key;   logic [VALUE_WIDTH-1:0]    value;   logic [HEAD_PTR_WIDTH-1:0] next_ptr;   logic                      next_ptr_val; } ram_data_t;<\/code><\/pre>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<ul>\n<li><code>calc_hash<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>key<\/code> \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0445\u0435\u0448\u0430 (\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043a\u043e\u0440\u0437\u0438\u043d\u044b (<code>bucket_num<\/code>)).<\/li>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>bucket_num<\/code> \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f <code>head_table<\/code>: \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u0437\u0438\u043d\u044b.<\/li>\n<li>\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (<code>data_table_search<\/code>, <code>data_table_insert<\/code>, <code>data_table_delete<\/code>) (\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 <code>opcode<\/code>).<\/li>\n<li>\u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f (<code>task<\/code>) \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 (\u043d\u0430\u0439\u0442\u0438, \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0443\u0434\u0430\u043b\u0438\u0442\u044c) \u0438 \u0447\u0438\u0442\u0430\u044e\u0442\/\u043f\u0438\u0448\u0443\u0442 \u0438\u0437 <code>data_table<\/code> (\u0431\u0435\u0433\u0430\u044e\u0442 \u043f\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443). \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>ht_res<\/code>.<\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b:<\/p>\n<ul>\n<li>\u043f\u0430\u043c\u044f\u0442\u044c <code>data_table<\/code> \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432 \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a, \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e (\u043f\u044f\u0442\u044c) \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f round-robin&#8217;\u043e\u043c.<\/li>\n<li>\u0434\u043b\u044f \u0443\u0431\u044b\u0441\u0442\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d <code>empty_ptr_storage<\/code>. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e: \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c <code>empty_ptr_mask<\/code> (\u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>data_table<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u0410 \u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 &quot;\u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c&quot; \u0437\u0430 \u043d\u043e\u043b\u044c \u0442\u0430\u043a\u0442\u043e\u0432 (\u043d\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u043e\u043d\u043a\u0435). \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0442\u0430\u043a (<em>\u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f<\/em>):<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/d08\/eae\/6d1\/d08eae6d1671420cb6867a7ac00a996a.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d08\/eae\/6d1\/d08eae6d1671420cb6867a7ac00a996a.png\"\/><\/a><\/p>\n<h2>\u0427\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a\/\u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443<\/h2>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<h3>SystemVerilog &amp; Coding Style<\/h3>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 HDL-\u044f\u0437\u044b\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f SystemVerilog \u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434\u0438\u043d\u0433 \u0441\u0442\u0430\u0439\u043b.<\/p>\n<p>  \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0441\u043c. \u0432\u044b\u0448\u0435) \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f FSM:<\/p>\n<pre><code>enum int unsigned {   IDLE_S,   NO_VALID_HEAD_PTR_S,   READ_HEAD_S,   GO_ON_CHAIN_S,   KEY_MATCH_S,   ON_TAIL_WITHOUT_MATCH_S } state, next_state;<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (Avalon-ST)<\/h3>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 <a href=\"https:\/\/habrahabr.ru\/company\/metrotek\/blog\/235037\/\">\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f<\/a>.<br \/>  \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b.<\/p>\n<p>  \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u044f \u043f\u0438\u0448\u0443 \u043f\u043e\u0434 FPGA \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Altera, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043b\u0443\u0447\u0448\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\/\u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u044e\u0442. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e <a href=\"https:\/\/www.altera.com\/content\/dam\/altera-www\/global\/en_US\/pdfs\/literature\/manual\/mnl_avalon_spec.pdf\">Avalon<\/a>.<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 (\u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e \u2014 \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 <code>Avalon-Streaming (Avalon-ST)<\/code> (\u0441\u0438\u0433\u043d\u0430\u043b\u044b <code>data<\/code>, <code>ready<\/code>, <code>valid<\/code>).<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043d\u0430 <code>Avalon-ST<\/code> \u043f\u0440\u0438 <code>readyLatency = 0<\/code> (<em>\u0432\u0437\u044f\u0442\u043e \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430<\/em>):<\/p>\n<p>  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/54d\/8b6\/9ca\/54d8b69ca360b5f8202f681a65564dc8.png\" width=\"600\" height=\"312\"\/><br \/>  \u041d\u0430 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b <em>ready<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0439\u0432, \u0437\u0430\u0442\u044b\u043a\u0430\u0435\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h3>Dummy hash<\/h3>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u043a\u0430\u043a \u044f \u0431\u0443\u0434\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0443 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0435\u0451 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u043f\u044b\u0442\u0430\u0435\u0448\u044c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443, \u0433\u0434\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043b\u0438\u0431\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0448\u044c \u0438\u0437 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u043b\u0435\u0433\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 (<code>key<\/code>).<\/p>\n<p>  \u0421 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c\u0438 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>HASH_TYPE<\/code> \u0440\u0430\u0432\u043d\u043e\u0435 <code>&quot;dummy hash&quot;<\/code>.<br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0445\u044d\u0448\u0430, \u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u0435 <code>BUCKET_WIDTH<\/code> \u0431\u0438\u0442 \u043e\u0442 \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 <code>key = 0x92123456<\/code>, \u0430 <code>BUCKET_WIDTH<\/code> \u0440\u0430\u0432\u0435\u043d 8, \u0442\u043e <code>bucket_num = 0x92<\/code>.<br \/>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0438\u0435 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432.<\/p>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438<\/h3>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 RTL-\u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435 (\u0447\u0438\u0442\u0430\u0439, \u043f\u043b\u0430\u0442\u0430\u0445) \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/marsohod.org\/11-blog\/213-signaltap\">SignalTap<\/a> \u0438\u043b\u0438 <a href=\"http:\/\/www.xilinx.com\/products\/design-tools\/chipscopepro.html\">ChipScope<\/a>. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u2014 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043e\u0442 10 \u043c\u0438\u043d\u0443\u0442 \u0434\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u043e\u0432) (\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437), \u043f\u043b\u0430\u0442\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u0442.\u0434.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_HDL_simulators\">\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u044b<\/a>, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"https:\/\/www.mentor.com\/products\/fv\/modelsim\/\">ModelSim<\/a>, VCS, Icarus Verilog \u0438 \u0434\u0440. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 (\u043b\u0438\u0431\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445) \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432\/<em>\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/em> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0443\u0442\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c (\u0432\u0440\u0435\u043c\u044f\u043d\u043e\u043a). \u041d\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u044d\u0442\u0438\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u043c\u043e\u0436\u0435\u0442 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438 \u0434\u0435\u0431\u0430\u0433\u0435.<\/p>\n<p>  <strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/strong>:<br \/>  \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442, \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u043b\u0430\u0437\u0430\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 <code>data_table_insert<\/code>, <code>data_table_delete<\/code>, <code>data_table_search<\/code> \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0442 \u0432 \u043b\u043e\u0433:<\/p>\n<pre><code>function void print( string s );   $display(&quot;%08t: %m: %s&quot;, $time, s); endfunction<\/code><\/pre>\n<p>  \u0424\u043e\u0440\u043c\u0430\u0442 <code>display<\/code> \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 <code>printf<\/code> (\u043c\u043e\u0436\u043d\u043e <code>%d<\/code>, <code>%f<\/code> \u0438 \u043f\u0440. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c):<\/p>\n<ul>\n<li><code>%08t<\/code> \u2014 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 (\u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438).<\/li>\n<li><code>%m<\/code> \u2014 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c (\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u043c\u044f), \u0433\u0434\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. (\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u044d\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432!) <\/li>\n<li><code>%s<\/code> \u2014 \u043f\u0435\u0447\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0438<\/li>\n<\/ul>\n<p>  \u041b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b FSM:<\/p>\n<pre><code>function void print_state_transition( );   string msg;    if( next_state != state )     begin       $sformat( msg, &quot;%s -&gt; %s&quot;, state, next_state );       print( msg );     end endfunction<\/code><\/pre>\n<p>  \u041f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u043f\u0440\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>function string pdata2str( input ht_pdata_t pdata );                                                         string s;                                                                                                   $sformat( s, &quot;opcode = %s key = 0x%x value = 0x%x head_ptr = 0x%x head_ptr_val = 0x%x&quot;,                        pdata.cmd.opcode, pdata.cmd.key, pdata.cmd.value, pdata.head_ptr, pdata.head_ptr_val );       return s;              endfunction                                                                                                 function void print_new_task( ht_pdata_t pdata );                                                            print( pdata2str( pdata ) );                                                                             endfunction<\/code><\/pre>\n<p>  \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435&#8230;<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e ModelSim. \u0412 \u0435\u0433\u043e \u043b\u043e\u0433\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 (\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043b <code>transcript<\/code>) \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:<\/p>\n<pre><code>1465: top_tb.dut.d_tbl.sea_eng.g_s_eng[3].search.print: opcode = OP_SEARCH key = 0x04000000 value = 0x0000 head_ptr = 0x000 head_ptr_val = 0x0 1465: top_tb.dut.d_tbl.sea_eng.g_s_eng[3].search.print: IDLE_S -&gt; NO_VALID_HEAD_PTR_S 1475: top_tb.dut.d_tbl.sea_eng.g_s_eng[3].search.print: RES: key = 0x04000000 value = 0x0000 rescode = SEARCH_NOT_SUCCESS_NO_ENTRY 1475: top_tb.dut.d_tbl.sea_eng.g_s_eng[3].search.print: NO_VALID_HEAD_PTR_S -&gt; IDLE_S 1475: ht_tb.print: IN_MONITOR: key = 0x04000000 value = 0x0000 rescode = SEARCH_NOT_SUCCESS_NO_ENTRY 1485: top_tb.dut.d_tbl.del_eng.print: opcode = OP_DELETE key = 0x04111111 value = 0x0000 head_ptr = 0x000 head_ptr_val = 0x0 1485: top_tb.dut.d_tbl.del_eng.print: IDLE_S -&gt; NO_VALID_HEAD_PTR_S 1495: top_tb.dut.d_tbl.del_eng.print: RES: key = 0x04111111 value = 0x0000 rescode = DELETE_NOT_SUCCESS_NO_ENTRY 1495: top_tb.dut.d_tbl.del_eng.print: NO_VALID_HEAD_PTR_S -&gt; IDLE_S 1495: ht_tb.print: IN_MONITOR: key = 0x04111111 value = 0x0000 rescode = DELETE_NOT_SUCCESS_NO_ENTRY 1505: top_tb.dut.d_tbl.ins_eng.print: opcode = OP_INSERT key = 0x04000000 value = 0xb95f head_ptr = 0x000 head_ptr_val = 0x0 1505: top_tb.dut.d_tbl.ins_eng.print: IDLE_S -&gt; NO_HEAD_PTR_WR_HEAD_PTR_S 1515: top_tb.dut.h_tbl.print: addr = 0x04 wr_data.ptr = 0x003 wr_data.ptr_val = 0x1 1515: top_tb.dut.d_tbl.ins_eng.print: NO_HEAD_PTR_WR_HEAD_PTR_S -&gt; NO_HEAD_PTR_WR_DATA_S 1525: top_tb.dut.d_tbl.ins_eng.print: WR: addr = 0x003 key = 0x04000000 value = 0xb95f next_ptr = 0x000, next_ptr_val = 0x0 1525: top_tb.dut.d_tbl.ins_eng.print: RES: key = 0x04000000 value = 0xb95f rescode = INSERT_SUCCESS 1525: top_tb.dut.d_tbl.ins_eng.print: NO_HEAD_PTR_WR_DATA_S -&gt; IDLE_S<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043b\u043e\u0433 \u043b\u0435\u0433\u043a\u043e grep&#8217;\u0430\u0442\u044c, \u043b\u0438\u0431\u043e \u043f\u043e\u0431\u0435\u0433\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 vim&#8217;e).<\/p>\n<p>  \u041b\u043e\u0433\u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438: \u043f\u0440\u0438 \u043f\u043e\u0434\u0430\u0447\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432 \u043b\u043e\u0433. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u043a\u043e\u0434\u0430, \u0430 \u043d\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c. <\/p>\n<p>  \u0412\u0441\u0435\u043c \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0435\u043b\u0435\u043d\u0434\u0436\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c RTL-\u043a\u043e\u0434 \u0431\u0435\u0437 \u0432\u0440\u0435\u043c\u044f\u043d\u043e\u043a (\u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u0437\u043e\u043d\u044b \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430).<\/p>\n<h3>\u0412\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"http:\/\/www.amazon.com\/SystemVerilog-Verification-Learning-Testbench-Language\/dp\/1461407141\">SystemVerilog for Verification<\/a>, \u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0430 \u0442\u0430\u043c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/512\/72e\/4d1\/51272e4d10994b4dadbdd8a72c5ddb3e.png\"\/><br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0445\u043b\u0435\u0431 \u0443 Chris Spear \u044f \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. <\/p>\n<p>  \u0421\u0445\u0435\u043c\u0430 \u043c\u043e\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a42\/43d\/536\/a4243d53696649628ddc6eda431e56a7.png\"\/>  <\/p>\n<h4>top_tb<\/h4>\n<p>  \u0422\u043e\u043f\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c.<\/p>\n<h4>DUT (Device\/Design Under Test)<\/h4>\n<p>  \u041d\u0430\u0448 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u043e\u0434\u0443\u043b\u044f <code>hash_table_top<\/code>.<\/p>\n<h4>ht_driver<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 mailbox <code>gen2drv<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 <code>DUT<\/code>.<\/li>\n<li>\u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0442\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 <code>DUT<\/code>.<\/li>\n<li>\u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 <code>DUT<\/code>, \u043e\u043d\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 <code>ht_scoreboard<\/code>.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u044d\u0442\u043e\u0442 mailbox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f:<\/p>\n<pre><code>task send_to_dut_c( input ht_command_t c );                                                                  \/\/ using hierarchial access to put command in mailbox                                                      env.drv.gen2drv.put( c );                                                                                endtask                                                        <\/code><\/pre>\n<p>  <\/p>\n<h4>tests<\/h4>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430\/\u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  \u041c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<pre><code>`define CMD( _OP, _KEY, _VALUE ) cmds.push_back( '{ opcode : _OP, key : _KEY, value : _VALUE } ); `define CMD_SEARCH( _KEY )         `CMD( OP_SEARCH, _KEY, 0 ) `define CMD_INSERT( _KEY, _VALUE ) `CMD( OP_INSERT, _KEY, _VALUE ) `define CMD_INSERT_RAND( _KEY )    `CMD_INSERT( _KEY, $urandom() ) `define CMD_DELETE( _KEY )         `CMD( OP_DELETE, _KEY, 0 )<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u0441\u0442\u0430:<\/p>\n<pre><code>task test_01( );   ht_command_t cmds[$];   $display(&quot;%m:&quot;);    `CMD_INSERT( 32'h01_00_00_00, 16'h1234 )   `CMD_INSERT( 32'h01_00_10_00, 16'h1235 )    `CMD_INSERT_RAND( 32'h01_00_00_00 )   `CMD_INSERT_RAND( 32'h01_00_00_01 )   `CMD_DELETE     ( 32'h01_00_00_00 )   `CMD_INSERT_RAND( 32'h01_00_00_02 )    `CMD_SEARCH( 32'h01_00_00_00 )   `CMD_SEARCH( 32'h01_00_00_01 )   `CMD_SEARCH( 32'h01_00_00_01 )   `CMD_SEARCH( 32'h01_00_00_03 )    foreach( cmds[i] )     begin       send_to_dut_c( cmds[i] );     end endtask<\/code><\/pre>\n<p>  <\/p>\n<h4>ht_monitor<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c <code>ht_res<\/code>. <\/li>\n<li>\u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u043e \u0432\u044b\u0446\u0435\u043f\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 <code>ht_scoreboard<\/code>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4>ht_scoreboard<\/h4>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b DUT&#8217;a.<\/p>\n<p>  \u0412 \u0441\u0435\u0431\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:<\/p>\n<ul>\n<li>\u0434\u0432\u0430 <code>mailbox<\/code>, \u043a\u0443\u0434\u0430 \u043a\u043b\u0430\u0434\u0443\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>ht_driver<\/code> \u0438 <code>ht_monitor<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/li>\n<li>\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>ref_hash_table<\/code>.<\/li>\n<\/ul>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<ul>\n<li>\u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0448\u0435\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>ht_res<\/code>, \u0442\u043e \u0432\u044b\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u043d \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043d\u0430 \u0440\u0443\u043a\u0443 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0442.<\/li>\n<li>\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>check<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0442 DUT&#8217;a \u0438 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/li>\n<li>\u0435\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0442, \u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>$error<\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043b\u043e\u0433, \u0430 \u0432 GUI ModelSim&#8217;a \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0430 \u0432 \u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>Coverage<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (\u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0438\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043a\u0446\u0438\u0438 DUT. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0431\u0430\u0433\u043e\u0432 \u043d\u0435\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u044c &quot;\u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435&quot; \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 SystemVerilog \u0432\u0432\u0435\u0434\u0435\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u0430\u043a <a href=\"http:\/\/www.testbench.in\/CO_00_INDEX.html\">covergroup \u0438 coverpoint<\/a>. \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435 \u0442\u043e\u0447\u043a\u0438, \u0433\u0434\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c.<\/p>\n<pre><code>covergroup cg();    option.per_instance = 1;    CMDOP:    coverpoint result_locked.cmd.opcode;   CMDRES:   coverpoint result_locked.rescode;    BUCKOCUP: coverpoint bucket_occup[ result_locked.bucket ] {               bins zero   = { 0 };               bins one    = { 1 };               bins two    = { 2 };               bins three  = { 3 };               bins four   = { 4 };               bins other  = { [5:$] };             }    CMDOP_BUCKOCUP: cross CMDOP, BUCKOCUP;    CMDRES_BUCKOCUP: cross CMDRES, BUCKOCUP {                      \/\/ we should ignore SEARCH_FOUND, INSERT_SUCCESS_SAME_KEY, DELETE_SUCCESS                       \/\/ when in bucket was zero elements, because it's not real situation                      ignore_bins not_real = binsof( CMDRES   ) intersect{ SEARCH_FOUND, INSERT_SUCCESS_SAME_KEY, DELETE_SUCCESS  } &amp;&amp;                        binsof( BUCKOCUP ) intersect{ 0 };                    } endgroup<\/code><\/pre>\n<p>  \u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li><code>CMDOP<\/code> \u0438 <code>CMDRES<\/code> \u0441\u043b\u0435\u0434\u044f\u0442 \u0437\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u0431\u044b\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>ht_cmd<\/code> \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b <code>ht_res<\/code>.<\/li>\n<li>\u043c\u0430\u0441\u0441\u0438\u0432 <code>bucket_occup<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/li>\n<li><code>CMDOP_BUCKOCUP<\/code> \u2014 &quot;\u0441\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u0435\u0442&quot; \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435: \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0431\u044b\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 X, \u0430 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0441\u044f <code>key<\/code>, \u0433\u0434\u0435 \u0431\u044b\u043b\u043e Y \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/li>\n<li><code>CMDRES_BUCKOCUP<\/code> \u2014 &quot;\u0441\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u0435\u0442&quot; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 ModelSim&#8217;a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0447\u0435\u0442:<\/p>\n<pre><code>coverage save 1.ucdb vcover report 1.ucdb -verbose -cvg<\/code><\/pre>\n<p>  \u041e\u0442\u0447\u0451\u0442:<\/p>\n<pre><code>COVERGROUP COVERAGE: ---------------------------------------------------------------------------------------------------- Covergroup                                             Metric      Goal\/ Status                                                                                     At Least                            ----------------------------------------------------------------------------------------------------  TYPE \/top_tb\/dut\/resm\/cg                               94.0%        100 Uncovered                      Coverpoint cg::CMDOP                               100.0%        100 Covered                        Coverpoint cg::CMDRES                               85.7%        100 Uncovered                      Coverpoint cg::BUCKOCUP                            100.0%        100 Covered                        Cross cg::CMDOP_BUCKOCUP                           100.0%        100 Covered                        Cross cg::CMDRES_BUCKOCUP                           84.6%        100 Uncovered                   Covergroup instance \\\/top_tb\/dut\/resm\/cg1              94.0%        100 Uncovered                      Coverpoint CMDOP                                   100.0%        100 Covered                            covered\/total bins:                                 3          3                                    missing\/total bins:                                 0          3                                    bin auto[OP_SEARCH]                                21          1 Covered                            bin auto[OP_INSERT]                                21          1 Covered                            bin auto[OP_DELETE]                                18          1 Covered                        Coverpoint CMDRES                                   85.7%        100 Uncovered                          covered\/total bins:                                 6          7                                    missing\/total bins:                                 1          7                                    bin auto[SEARCH_FOUND]                             12          1 Covered                            bin auto[SEARCH_NOT_SUCCESS_NO_ENTRY]               9          1 Covered                            bin auto[INSERT_SUCCESS]                           14          1 Covered                            bin auto[INSERT_SUCCESS_SAME_KEY]                   7          1 Covered                            bin auto[INSERT_NOT_SUCCESS_TABLE_IS_FULL]          0          1 ZERO                               bin auto[DELETE_SUCCESS]                           11          1 Covered                            bin auto[DELETE_NOT_SUCCESS_NO_ENTRY]               7          1 Covered                        Coverpoint BUCKOCUP                                100.0%        100 Covered                            covered\/total bins:                                 6          6                                    missing\/total bins:                                 0          6                                    bin zero                                            7          1 Covered                            bin one                                            13          1 Covered                            bin two                                             9          1 Covered                            bin three                                          12          1 Covered                            bin four                                            8          1 Covered                            bin other                                          11          1 Covered                        Cross CMDOP_BUCKOCUP                               100.0%        100 Covered                            covered\/total bins:                                18         18                                    missing\/total bins:                                 0         18                                    bin &lt;auto[OP_SEARCH],zero&gt;                          1          1 Covered                            bin &lt;auto[OP_INSERT],zero&gt;                          5          1 Covered                                      bin &lt;auto[OP_SEARCH],one&gt;                           5          1 Covered                            ...                     Cross CMDRES_BUCKOCUP                               84.6%        100 Uncovered                          covered\/total bins:                                33         39                                    missing\/total bins:                                 6         39                                    bin &lt;auto[SEARCH_NOT_SUCCESS_NO_ENTRY],zero&gt;                                                              1          1 Covered                            bin &lt;auto[INSERT_SUCCESS],zero&gt;                     5          1 Covered                            bin &lt;auto[DELETE_NOT_SUCCESS_NO_ENTRY],zero&gt;                                                              1          1 Covered                                          ...<\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u0440\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 <code>OP_INSERT<\/code> \u0431\u044b\u043b\u043e 21, \u0430 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 18<\/li>\n<li>\u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0438\u0441\u043a\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/li>\n<li>\u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f <code>INSERT_NOT_SUCCESS_TABLE_IS_FULL<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0412 \u0438\u0442\u043e\u0433\u0435<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 DUT, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0435\u0451 \u0432\u044b\u0445\u043e\u0434 \u0441 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e. <\/li>\n<li>\u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/li>\n<li>\u0435\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 (coverage). <\/li>\n<li>\u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0438 \u0434\u0435\u0431\u0430\u0433 \u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f &quot;dummy hash&quot; \u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0412 \u0447\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0431\u0430\u0433\u0430<\/h2>\n<p>  \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435:<\/p>\n<pre><code>`CMD_INSERT_RAND( 32'h05_00_00_00 ) `CMD_INSERT_RAND( 32'h05_00_00_01 )  `CMD_DELETE     ( 32'h05_00_00_01 )  `CMD_INSERT_RAND( 32'h05_00_00_02 ) `CMD_INSERT_RAND( 32'h05_00_00_03 )<\/code><\/pre>\n<p>  \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u043a\u043b\u044e\u0447\u0430 <code>0x05000003<\/code> \u043c\u043e\u0434\u0443\u043b\u044c <code>data_table_insert<\/code> &quot;\u0437\u0430\u0432\u0438\u0441\u0430\u043b&quot;:<\/p>\n<ul>\n<li>\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u0430 0x001<\/li>\n<li>\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 FSM <code>state<\/code> \u0432\u0438\u0441\u0438\u0442 \u0432 <code>GO_ON_CHAIN_S<\/code> (\u0438 \u0438\u0437 \u043d\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442)<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/habrastorage.org\/files\/026\/798\/6d3\/0267986d381f4dd8b0294c40be007eb7.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/026\/798\/6d3\/0267986d381f4dd8b0294c40be007eb7.png\"\/><\/a><br \/>  (<em>\u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f<\/em>)<\/p>\n<p>  \u0412 \u043b\u043e\u0433\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>385: top_tb.dut.d_tbl.ins_eng.print: opcode = OP_INSERT key = 0x05000003 value = 0x7e7e head_ptr = 0x000 head_ptr_val = 0x1 385: top_tb.dut.d_tbl.ins_eng.print: IDLE_S -&gt; READ_HEAD_S 415: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x001, next_ptr_val = 0x1 415: top_tb.dut.d_tbl.ins_eng.print: READ_HEAD_S -&gt; GO_ON_CHAIN_S 445: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1 475: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1 505: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1 535: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1 ...<\/code><\/pre>\n<p>  \u041e\u0442\u043c\u043e\u0442\u0430\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u043e\u0433 \u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e. \u042f \u043f\u0440\u0438\u0432\u0451\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b (\u0447\u0442\u043e \u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c \u0438 \u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>data_table<\/code>):<\/p>\n<pre><code> 75: top_tb.dut.d_tbl.ins_eng.print: opcode = OP_INSERT key = 0x05000000 value = 0x1f62 head_ptr = 0x000 head_ptr_val = 0x0  95: top_tb.dut.d_tbl.ins_eng.print: WR: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x000, next_ptr_val = 0x0  115: top_tb.dut.d_tbl.ins_eng.print: opcode = OP_INSERT key = 0x05000001 value = 0x3ff2 head_ptr = 0x000 head_ptr_val = 0x1 145: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x000, next_ptr_val = 0x0 155: top_tb.dut.d_tbl.ins_eng.print: WR: addr = 0x001 key = 0x05000001 value = 0x3ff2 next_ptr = 0x000, next_ptr_val = 0x0 165: top_tb.dut.d_tbl.ins_eng.print: WR: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x001, next_ptr_val = 0x1  185: top_tb.dut.d_tbl.del_eng.print: opcode = OP_DELETE key = 0x05000001 value = 0x0000 head_ptr = 0x000 head_ptr_val = 0x1 215: top_tb.dut.d_tbl.del_eng.print: RD: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x001, next_ptr_val = 0x1 245: top_tb.dut.d_tbl.del_eng.print: RD: addr = 0x001 key = 0x05000001 value = 0x3ff2 next_ptr = 0x000, next_ptr_val = 0x0 255: top_tb.dut.d_tbl.del_eng.print: WR: addr = 0x001 key = 0x05000001 value = 0x3ff2 next_ptr = 0x000, next_ptr_val = 0x0 265: top_tb.dut.d_tbl.del_eng.print: WR: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x000, next_ptr_val = 0x0  285: top_tb.dut.d_tbl.ins_eng.print: opcode = OP_INSERT key = 0x05000002 value = 0x5429 head_ptr = 0x000 head_ptr_val = 0x1 315: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x001, next_ptr_val = 0x1 345: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x000, next_ptr_val = 0x0 355: top_tb.dut.d_tbl.ins_eng.print: WR: addr = 0x001 key = 0x05000002 value = 0x5429 next_ptr = 0x000, next_ptr_val = 0x0 365: top_tb.dut.d_tbl.ins_eng.print: WR: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1  385: top_tb.dut.d_tbl.ins_eng.print: opcode = OP_INSERT key = 0x05000003 value = 0x7e7e head_ptr = 0x000 head_ptr_val = 0x1 415: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x000 key = 0x05000000 value = 0x1f62 next_ptr = 0x001, next_ptr_val = 0x1 445: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1 475: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1 505: top_tb.dut.d_tbl.ins_eng.print: RD: addr = 0x001 key = 0x00000000 value = 0x0000 next_ptr = 0x001, next_ptr_val = 0x1<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 255-265 \u043d\u0441 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 <code>addr = 0x001<\/code> \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0435. <\/p>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 <code>data_table<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<ul>\n<li>\u044f\u0447\u0435\u0439\u043a\u0430 0x000 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 0x001 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 (<code>next_ptr = 0x001<\/code>, <code>next_ptr_val = 0x1<\/code>)<\/li>\n<li>\u0432 \u044f\u0447\u0435\u0439\u043a\u0435 0x001 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u043b\u044e\u0447 0x00000000. \u041e\u043d \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 0x05, \u0442.\u043a. \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>dummy hash<\/code>.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 0x05000002 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f: \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0432 \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443 0x001. <\/p>\n<ul>\n<li>\u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 355 \u043d\u0441 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442.\u043a. \u043c\u043e\u0434\u0443\u043b\u044c <code>empty_ptr_storage<\/code> \u0432\u044b\u0434\u0430\u043b, \u0447\u0442\u043e 0x001 \u043f\u0443\u0441\u0442\u0443\u0435\u0442 (\u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0442\u0430\u043a\u043e\u0439, \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u0434\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c)<\/li>\n<li>\u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 365 \u043d\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435, \u0438 \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e \u043c\u043e\u0434\u0443\u043b\u044f \u044d\u0442\u043e 0x001. \u0412 \u0438\u0442\u043e\u0433\u0435 0x001 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 0x001.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 0x05000003 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 445 \u043d\u0441 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u0435\u0433\u0430\u0442\u044c \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<h3>\u0412 \u0447\u0451\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430<\/h3>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u043d\u043e\u0441\u0438\u0442 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0434\u0430\u043b\u044f\u043b \u0434\u0430\u043d\u043d\u044b\u0435 (<code>data_table_delete<\/code>). <\/p>\n<p>  \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 255 \u043d\u0441 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 0x000 \u0444\u043b\u0430\u0433 <code>next_ptr_val<\/code> \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e, \u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 265 \u043d\u0441 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 0x001 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u043b\u0438. \u0422\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u043a\u043e\u0434\u0443 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u043d\u043e \u044d\u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. <\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c <code>rd_addr<\/code> \u0438 <code>rd_data<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0441 \u043a\u043e\u043d\u0446\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0430 \u0442\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 (\u043b\u0438\u0448\u043d\u044f\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u0440.) \u0432\u0435\u0441\u044c\u043c\u0430 \u0442\u0438\u043f\u0438\u0447\u043d\u044b \u0432 RTL-\u043a\u043e\u0434\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043e\u043d\u0438 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u044d\u0442\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<h2>\u041a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u044b\u043b\u0438 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u044b (\u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435)<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &quot;\u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e&quot;<\/h3>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044f \u043d\u0435 \u0434\u043e\u0432\u0451\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0441\u0435\u0431\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b. \u041f\u043e\u0447\u0435\u043c\u0443 \u2014 \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0436\u0435 \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u044e.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <code>README<\/code> \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u0433\u043e, \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f\/\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c.<\/p>\n<p>  \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0434\u0432\u0435 \u0444\u0440\u0430\u0437\u044b:<\/p>\n<ol>\n<li>\u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0432 <a href=\"http:\/\/metrotek.spb.ru\/b100.html\">100G \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u0435<\/a>.<\/li>\n<li>\u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043f\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0437\u0430 <del>\u0431\u0430\u043d\u043a\u0430\u043c\u0438 \u043f\u0438\u0432\u0430<\/del> \u0442\u043e\u043c\u0430\u0442\u043d\u044b\u043c \u0441\u043e\u043a\u043e\u043c. <\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u043d\u0438\u043a\u0443\u0434\u0430 \u0435\u0433\u043e \u043d\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b, \u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043c\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0441\u044a\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u0438 \u0431\u044b \u0441\u0435\u0431\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u0440\u0430\u0432\u0434\u0430, \u0442\u043e\u0433\u0434\u0430 \u0431\u044b \u044f \u043d\u0435 \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0431\u0430\u0433\u0430, \u0430 \u0432\u044b \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e).<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0433\u0434\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043a\u043e\u0434\u0435, \u044f \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0435\u0441\u0442\u044c \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>prev_rd_addr<\/code>. \u0411\u043b\u043e\u043a, \u0433\u0434\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>always_ff @( posedge clk_i or posedge rst_i )   if( rst_i )     prev_rd_addr &lt;= '0;   else     if( rd_en_o ) \/\/FIXME       prev_rd_addr &lt;= rd_addr;<\/code><\/pre>\n<p>  <code>FIXME<\/code> \u0431\u0435\u0437 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e. \u041b\u0438\u0448\u043d\u0438\u0435 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043a\u0443\u043f\u044f\u0442\u0441\u044f \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<p>  *<em>\u0412\u044b\u0432\u043e\u0434\u044b<\/em>:<\/p>\n<ul>\n<li>\u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0435 \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u044f\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0433\u0434\u0435 \u043e\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435 (\u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c). \u0415\u0441\u043b\u0438 \u043e\u043d\u043e \u043d\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c, \u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u044f\u0432\u043d\u043e.<\/li>\n<li>\u0435\u0441\u043b\u0438 \u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443, \u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u043a\u043e\u0433\u043e-\u0442\u043e (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 electronix.ru) \u043e\u0442\u0440\u0435\u0432\u044c\u044e\u0438\u0442\u044c \u043a\u043e\u0434. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d \u0434\u0430\u0441\u0442 \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0432\u0435\u0442\u044b, \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f.<\/li>\n<li>\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0440\u0435\u0448\u0438\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u044b\u043b\u043e \u0432\u0430\u043c \u043b\u0435\u043d\u044c), \u0442\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u0442\u0438\u043f\u0430, <code>KNOWN_PROBLEMS<\/code>\/<code>KNOWN_BUGS<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>Coverage<\/h3>\n<p>  \u041b\u0435\u0433\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0435 \u0442\u043e\u0447\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u043d\u0435 \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b:<\/p>\n<ul>\n<li>\u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f &quot;\u0438\u0441\u0442\u043e\u0440\u0438\u044f&quot;: \u043a\u0430\u043a \u0448\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u043a \u043a\u0430\u043a\u0438\u043c \u043a\u043e\u0440\u0437\u0438\u043d\u0430\u043c \u043e\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c.<\/li>\n<li>\u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0438\u0441\u043a, \u043b\u0438\u0431\u043e \u0431\u044b\u043b\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 (\u0432 \u043d\u0430\u0447\u0430\u043b\u0435\/\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435\/\u043a\u043e\u043d\u0446\u0435).<\/li>\n<\/ul>\n<p>  <strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c<\/strong>:<\/p>\n<p>  \u0412\u0432\u043e\u0434\u0438\u043c \u0442\u0438\u043f <code>ht_chain_state_t<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code>typedef enum int unsigned {   NO_CHAIN,    IN_HEAD,   IN_MIDDLE,   IN_TAIL,    IN_TAIL_NO_MATCH } ht_chain_state_t;  \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 ht_result_t ... \/\/ only for verification   ht_chain_state_t            chain_state; } ht_result_t;<\/code><\/pre>\n<p>  \u0412 \u0441\u043e\u043e\u0442\u0441\u0442\u0432\u0435\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437. \u0414\u043b\u044f <code>data_table_delete<\/code> \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>ht_chain_state_t chain_state;  always_ff @( posedge clk_i or posedge rst_i )   if( rst_i )     chain_state &lt;= NO_CHAIN;   else     if( state != next_state )       begin         case( next_state )           NO_VALID_HEAD_PTR_S     : chain_state &lt;= NO_CHAIN;           IN_TAIL_WITHOUT_MATCH_S : chain_state &lt;= IN_TAIL_NO_MATCH;           KEY_MATCH_IN_HEAD_S     : chain_state &lt;= IN_HEAD;           KEY_MATCH_IN_MIDDLE_S   : chain_state &lt;= IN_MIDDLE;           KEY_MATCH_IN_TAIL_S     : chain_state &lt;= IN_TAIL;           \/\/ no default: just keep old value         endcase       end  \/\/ \u043a\u043b\u0430\u0434\u0435\u043c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 ```ht_res_monitor``` assign result_o.chain_state = chain_state;<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 <code>ht_res_monitor<\/code>:<\/p>\n<pre><code> \/\/ \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 ht_result_t result_history [HISTORY_DELAY:1];  always_ff @( posedge clk_i )   begin     if( result_locked_val )       begin         result_history[1] &lt;= result_locked;          for( int i = 2; i &lt;= HISTORY_DELAY; i++ )           begin             result_history[i] &lt;= result_history[i-1];           end       end   end  \/\/ 1 \u0432 \u043c\u0430\u0441\u043a\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0440\u0437\u0438\u043d\u044b (bucket) \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 logic [HISTORY_DELAY:1] bucket_hist_mask;  always_comb   begin     for( int i = 1; i &lt;= HISTORY_DELAY; i++ )       bucket_hist_mask[i] = ( result_history[i].bucket == result_locked.bucket );   end<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 covergroup:<\/p>\n<pre><code>...   CMDOP_D1:   coverpoint result_history[1].cmd.opcode;   CMDOP_D2:   coverpoint result_history[2].cmd.opcode;    CMDRES_D1:  coverpoint result_history[1].rescode;   CMDRES_D2:  coverpoint result_history[2].rescode;    CHAIN:      coverpoint result_locked.chain_state;    BUCK_HIST_MASK: coverpoint bucket_hist_mask;    CMDOP_HISTORY_D2: cross CMDOP_D2, CMDOP_D1, CMDOP, BUCK_HIST_MASK;    CMDRES_HISTORY_D2: cross CMDRES_D2, CMDRES_D1, CMDRES, BUCK_HIST_MASK {     ignore_bins not_check_now = binsof( CMDRES    ) intersect{ INSERT_NOT_SUCCESS_TABLE_IS_FULL } ||                                 binsof( CMDRES_D1 ) intersect{ INSERT_NOT_SUCCESS_TABLE_IS_FULL } ||                                 binsof( CMDRES_D2 ) intersect{ INSERT_NOT_SUCCESS_TABLE_IS_FULL };   }    CMDOP_CHAIN: cross CMDOP, CHAIN {     ignore_bins insert_in_middle        = binsof( CMDOP ) intersect { OP_INSERT        } &amp;&amp;                                           binsof( CHAIN ) intersect { IN_MIDDLE        };      ignore_bins insert_in_tail_no_match = binsof( CMDOP ) intersect { OP_INSERT        } &amp;&amp;                                           binsof( CHAIN ) intersect { IN_TAIL_NO_MATCH };    }<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 bin \u0434\u043b\u044f <code>CMDOP_HISTORY_D2<\/code>:<\/p>\n<pre><code>bin &lt;auto[OP_DELETE],auto[OP_SEARCH],auto[OP_SEARCH],auto['b10]&gt;<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435, \u0435\u0441\u043b\u0438:<\/p>\n<ul>\n<li>\u0441\u0435\u0439\u0447\u0430\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>OP_SEARCH<\/code>,<\/li>\n<li>\u043f\u0440\u043e\u0448\u043b\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u044b\u043b\u0430 <code>OP_SEARCH<\/code> \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0443, \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439<\/li>\n<li>\u043f\u043e\u0437\u0430\u043f\u0440\u043e\u0448\u043b\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u044b\u043b\u0430 <code>OP_DELETE<\/code> \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439<\/li>\n<\/ul>\n<p>  \u0414\u043e \u0432\u0441\u0435\u0445 \u0444\u0438\u043a\u0441\u043e\u0432 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0440\u0443\u043a\u0430\u043c\u0438 \u0442\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u0430. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438\u0445:<\/p>\n<pre><code>Coverpoint cg::CMDOP                               100.0%        100 Covered                    Coverpoint cg::CMDRES                               85.7%        100 Uncovered                  Coverpoint cg::CMDOP_D1                            100.0%        100 Covered                    Coverpoint cg::CMDOP_D2                            100.0%        100 Covered                    Coverpoint cg::CMDRES_D1                            85.7%        100 Uncovered                  Coverpoint cg::CMDRES_D2                            85.7%        100 Uncovered                  Coverpoint cg::CHAIN                               100.0%        100 Covered                    Coverpoint cg::BUCK_HIST_MASK                      100.0%        100 Covered                    Coverpoint cg::BUCKOCUP                            100.0%        100 Covered                    Cross cg::CMDOP_BUCKOCUP                           100.0%        100 Covered                    Cross cg::CMDRES_BUCKOCUP                           84.6%        100 Uncovered                  Cross cg::CMDOP_HISTORY_D2                          18.5%        100 Uncovered    covered\/total bins:                                20        108                              missing\/total bins:                                88        108  Cross cg::CMDRES_HISTORY_D2                          3.1%        100 Uncovered                    covered\/total bins:                                27        864                              missing\/total bins:                               837        864 Cross cg::CMDOP_CHAIN                               84.6%        100 Uncovered   <\/code><\/pre>\n<p>  (<em>\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433 \u044f \u0443\u0431\u0440\u0430\u043b, \u0442.\u043a. \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439<\/em>)<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0443 \u0442\u043e\u0447\u0435\u043a \u0441 <code>HISTORY<\/code> \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 (18.5% \u0438 3.1%). \u0422\u0440\u0438 \u0442\u0435\u0441\u0442\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u0430\u043c\u0438, \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0434\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f.<\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u0442\u043e\u043b\u044c\u043a\u043e <strong>\u0442\u0440\u0438<\/strong> \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0435?<br \/>  \u042d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u0437\u044f\u0442\u043e \u043d\u0430\u0443\u0433\u0430\u0434. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0438 \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f 100% \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f. <\/p>\n<p>  \u0413\u0434\u0435 \u0437\u0434\u0435\u0441\u044c \u0433\u0440\u0430\u043d\u044c \u0438 \u043a\u0430\u043a\u043e\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u2014 \u044f \u043d\u0435 \u0437\u043d\u0430\u044e. \u041d\u0430\u0432\u0435\u0440\u043d\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0432\u043d\u044f\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043f\u043e\u0440\u044f\u0434\u043a\u0430 5 \u0438\u043b\u0438 6 <em>\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u044f \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u043b<\/em>).<\/p>\n<p>  <strong>\u0412\u044b\u0432\u043e\u0434\u044b<\/strong>:<\/p>\n<ul>\n<li>coverage \u0432\u0430\u0448 \u0434\u0440\u0443\u0433 \u0438 \u0441\u043e\u044e\u0437\u043d\u0438\u043a. \u0411\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043e\u043d \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0442\u0435 \u0442\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0438 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443. \u041c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f\u0445 \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f.<\/li>\n<li>\u0447\u0435\u043c \u0432 \u0431<strong>\u043e<\/strong>\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u0431\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438. <\/li>\n<li>\u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d RTL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0435 (\u0431\u0435\u043b\u044b\u0439 \u044f\u0449\u0438\u043a), \u0442\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0442\u0430\u043c \u0431\u044b\u0432\u0430\u044e\u0442. \u041f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u044d\u0442\u043e \u0432 bin&#8217;\u0430\u0445 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041d\u0435\u0442 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/h3>\n<p>  \u041f\u0440\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<br \/>  \u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b. \u0412\u044b\u0445\u043e\u0434 \u2014 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435, \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f: \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 <a href=\"http:\/\/www.testbench.in\/CR_01_CONSTRAINED_RANDOM_VERIFICATION.html\">Constrained Random Verification<\/a>.<\/p>\n<p>  \u0414\u0430, \u043c\u044b \u043f\u043e\u0434\u0430\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u043e\u043d\u0438 \u0447\u0435\u043c-\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0447\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 (\u0438\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c) \u0437\u0430\u043a\u043e\u043d\u0443, \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0430\u0434\u043e. <\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043a\u043e\u0440\u0437\u0438\u043d \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439:<\/p>\n<pre><code>function bit [KEY_WIDTH-1:0] gen_rand_key( int min_bucket_num  = 0,                                            int max_bucket_num = ( 2**BUCKET_WIDTH - 1 ),                                            int max_key_value  = ( 2**( KEY_WIDTH - BUCKET_WIDTH ) - 1 ) );   bit [BUCKET_WIDTH-1:0] bucket_num;   bit [KEY_WIDTH-1:0]    gen_key;    if( hash_table::HASH_TYPE != &quot;dummy&quot; )     begin       $display(&quot;%m: hash_type = %s not supported here!&quot;, hash_table::HASH_TYPE );       $fatal();     end    bucket_num = $urandom_range( max_bucket_num, min_bucket_num );   gen_key    = $urandom_range( max_key_value,  0              );    \/\/ replace high bits by bucket_num (is needs in dummy hash)   gen_key[ KEY_WIDTH - 1 : KEY_WIDTH - BUCKET_WIDTH ] = bucket_num;    return gen_key; endfunction<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u0440\u0437\u0438\u043d <code>[0;15]<\/code> \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043b\u044e\u0447\u0435\u0439 <code>[0;7]<\/code>.<\/p>\n<pre><code>\/\/ testing small amount of buckets with random commands task test_05( );   ht_command_t cmds[$];    $display(&quot;%m:&quot;);    for( int c = 0; c &lt; 5000; c++ )     begin       `CMD_SEARCH      ( gen_rand_key( 0, 15, 7 ) )       `CMD_INSERT_RAND ( gen_rand_key( 0, 15, 7 ) )       `CMD_DELETE      ( gen_rand_key( 0, 15, 7 ) )     end    \/\/ \u0432\u0437\u0431\u043e\u043b\u0442\u0430\u0442\u044c, \u043d\u043e \u043d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c :)   cmds.shuffle( );    foreach( cmds[i] )     begin       send_to_dut_c( cmds[i] );     end  endtask<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u0434\u0430\u0436\u0435 \u044d\u0442\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f:<\/p>\n<pre><code>Cross cg::CMDOP_HISTORY_D2                          98.1%        100 Uncovered              covered\/total bins:                               106        108                              missing\/total bins:                                 2        108    Cross cg::CMDRES_HISTORY_D2                         81.1%        100 Uncovered    covered\/total bins:                               701        864                              missing\/total bins:                               163        864<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 bin&#8217;\u044b \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u043b\u0438\u0441\u044c, \u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u043d\u0430 \u043e\u0434\u043d\u0443 \u043a\u043e\u0440\u0437\u0438\u043d\u0443:<\/p>\n<pre><code>\/\/ testing only one bucket with random commands task test_06( );   ht_command_t cmds[$];    $display(&quot;%m:&quot;);    for( int c = 0; c &lt; 1000; c++ )     begin       `CMD_SEARCH     ( gen_rand_key( 0, 0, 7 ) )       `CMD_INSERT_RAND( gen_rand_key( 0, 0, 7 ) )       `CMD_DELETE     ( gen_rand_key( 0, 0, 7 ) )     end    cmds.shuffle( );    foreach( cmds[i] )     begin       send_to_dut_c( cmds[i] );     end  endtask<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>Cross cg::CMDOP_HISTORY_D2                         100.0%        100 Covered                   covered\/total bins:                               108        108                              missing\/total bins:                                 0        108     Cross cg::CMDRES_HISTORY_D2                         99.1%        100 Uncovered    covered\/total bins:                               857        864                              missing\/total bins:                                 7        864 <\/code><\/pre>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 (\u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>rescode=INSERT_NOT_SUCCESS_TABLE_IS_FULL<\/code>)<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/strong>:<\/p>\n<ul>\n<li>\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f <em>\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f<\/em> \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 <em>shuffle<\/em>, \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0438\u0434\u0435\u044f. \u0414\u0435\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u043e \u043d\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f. \u0412 SystemVerilog \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <a href=\"http:\/\/www.testbench.in\/CR_08_CONSTRAINT_BLOCK.html\">constraint \u0431\u043b\u043e\u043a<\/a>: \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/li>\n<\/ul>\n<p>  <strong>\u0412\u044b\u0432\u043e\u0434\u044b<\/strong>:<\/p>\n<ul>\n<li>\u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041d\u0435 \u043f\u043e\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0441\u0442\u043e\u0432, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041d\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 &quot;\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c&quot; \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/h3>\n<p>  \u041d\u044e\u0430\u043d\u0441 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0442 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c. <\/p>\n<p>  \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 (\u0430 \u0435\u0451 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0432\u044b\u0445\u043e\u0434\u0443 <code>ht_res<\/code>), \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f &quot;\u043e\u0442\u043c\u0430\u0442\u044b\u0432\u0430\u0442\u044c&quot; \u0432\u0440\u0435\u043c\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438, \u043b\u043e\u0433\u0438 \u0438 \u0442. \u0434. \u041f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0440\u0443\u0434\u043e\u0451\u043c\u043a\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c.<\/p>\n<p>  \u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 (\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432) \u2014 \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043b\u0438\u0436\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043c\u0435\u0441\u0442\u0443 (\u043c\u043e\u0434\u0443\u043b\u044e) \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449:<\/p>\n<ul>\n<li><code>head_table<\/code><\/li>\n<li><code>data_table<\/code><\/li>\n<li><code>empty_ptr_storage<\/code><\/li>\n<\/ul>\n<p>  \u042d\u0442\u0430 \u0431\u0430\u0433\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0430 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438.<br \/>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 (<em>\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438<\/em>) \u044d\u0442\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043c, \u0442\u043e \u0431\u0430\u0433\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\/\u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c.<\/p>\n<p>  \u0412\u044b\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0434\u0447\u0438\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445:<br \/>  <code>head_table<\/code>:<\/p>\n<ul>\n<li>\u0432 \u043d\u0451\u043c \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0432\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441 <code>ptr_val<\/code><\/li>\n<li>\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441 <code>ptr_val<\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a empty <\/li>\n<\/ul>\n<p>  <code>data_table<\/code>:<\/p>\n<ul>\n<li><code>key<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435\/\u043a\u043e\u0440\u0437\u0438\u043d\u0435<\/li>\n<li>\u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u044c\u0446\u043e<\/li>\n<li><code>next_ptr_val<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u0430\u044f<\/li>\n<li>\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u044f\u0447\u0435\u0435\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0432\u0435\u0434\u0435\u0442 (\u043d\u0438 \u043e\u0442 <code>head_table<\/code>, \u043d\u0438 \u043e\u0442 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0438)<\/li>\n<li>\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0439 \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u0430\u044f<\/li>\n<\/ul>\n<p>  <code>empty_ptr_storage<\/code>:<\/p>\n<ul>\n<li>\u043c\u043e\u0434\u0443\u043b\u0438 <code>data_table_*<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u043f\u0443\u0441\u0442\u0430\u044f<\/li>\n<li>\u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0443\u0441\u0442\u0430\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f (\u043d\u0435 \u0431\u044b\u043b\u0430 \u043e\u0447\u0438\u0449\u0435\u043d\u0430 \u0440\u0430\u043d\u0435\u0435).<\/li>\n<\/ul>\n<p>  \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 <em>\u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/em>:<\/p>\n<ul>\n<li>\u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u044e\u0430\u043d\u0441, \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u0430. (\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u044f\u0447\u0435\u0435\u043a \u2014 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b). \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043d\u0435\u0451 <strong>\u043d\u0435<\/strong> \u043f\u0438\u0448\u0443\u0442.<\/li>\n<\/ul>\n<p>  \u0411\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d <code>tables_monitor<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 <code>head_table<\/code>, <code>data_table<\/code>, <code>empty_ptr<\/code>.<br \/>  \u0422\u0430\u043a \u0436\u0435 \u0442\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430 \u0442\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435. \u0424\u0430\u0439\u043b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c <a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\/blob\/master\/tb\/tables_monitor.sv\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  \u041e\u0442\u043a\u0430\u0442\u0438\u043c \u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0431\u0430\u0433\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u043e\u0433:<\/p>\n<pre><code>... 1195: top_tb.dut.d_tbl.del_eng.print: opcode = OP_DELETE key = 0x01000000 value = 0x0000 head_ptr = 0x001 head_ptr_val = 0x1 1195: top_tb.dut.d_tbl.del_eng.print: IDLE_S -&gt; READ_HEAD_S 1225: top_tb.dut.d_tbl.del_eng.print: RD: addr = 0x001 key = 0x01001000 value = 0x1235 next_ptr = 0x002 next_ptr_val = 0x1 1225: top_tb.dut.d_tbl.del_eng.print: READ_HEAD_S -&gt; GO_ON_CHAIN_S 1255: top_tb.dut.d_tbl.del_eng.print: RD: addr = 0x002 key = 0x01000001 value = 0x3ff2 next_ptr = 0x000 next_ptr_val = 0x1 1285: top_tb.dut.d_tbl.del_eng.print: RD: addr = 0x000 key = 0x01000002 value = 0x5429 next_ptr = 0x004 next_ptr_val = 0x1 1315: top_tb.dut.d_tbl.del_eng.print: RD: addr = 0x004 key = 0x01000000 value = 0x1cc0 next_ptr = 0x000 next_ptr_val = 0x0 1315: top_tb.dut.d_tbl.del_eng.print: GO_ON_CHAIN_S -&gt; KEY_MATCH_IN_TAIL_S 1325: top_tb.dut.d_tbl.del_eng.print: WR: addr = 0x004 key = 0x01000000 value = 0x1cc0 next_ptr = 0x000 next_ptr_val = 0x0 1325: top_tb.dut.d_tbl.del_eng.print: KEY_MATCH_IN_TAIL_S -&gt; CLEAR_RAM_AND_PTR_S 1335: top_tb.dut.d_tbl.del_eng.print: WR: addr = 0x004 key = 0x00000000 value = 0x0000 next_ptr = 0x000 next_ptr_val = 0x0 1335: top_tb.dut.d_tbl.del_eng.print: RES: key = 0x01000000 value = 0x0000 rescode = DELETE_SUCCESS chain_state = IN_TAIL 1335: top_tb.dut.d_tbl.del_eng.print: CLEAR_RAM_AND_PTR_S -&gt; IDLE_S 1335: ht_tb.print: IN_MONITOR: key = 0x01000000 value = 0x0000 rescode = DELETE_SUCCESS chain_state = IN_TAIL 1335: top_tb.dut.d_tbl.empty_ptr_storage.print: add_empty_ptr: 0x004 ** Error: ERROR: addr = 0x004. This addr is empty, but ptr is val Time: 1340 ns  Scope: top_tb.tm.check_one_addr File: ..\/tb\/tables_monitor.sv Line: 119 ** Error: ERROR: addr = 0x004 key=0x00000000 don't match bucket_num = 0x01 Time: 1340 ns  Scope: top_tb.tm.check_one_addr File: ..\/tb\/tables_monitor.sv Line: 127<\/code><\/pre>\n<p>  \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0430 \u0442\u0435\u0445 \u0442\u0440\u0435\u0445 <strong>\u0440\u0443\u0447\u043d\u044b\u0445<\/strong> \u0442\u0435\u0441\u0442\u0430\u0445 (\u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445)!<\/p>\n<p>  \u041e\u0431\u0445\u043e\u0434 \u044f\u0447\u0435\u0435\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043b: <\/p>\n<ul>\n<li>\u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 0x004, \u0445\u043e\u0442\u044f \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0443\u0441\u0442\u0430\u044f, \u0442.\u043a. \u043d\u0430 1335 \u043d\u0441 \u0435\u0451 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0438.<\/li>\n<li>\u0432 \u044f\u0447\u0435\u0439\u043a\u0435 0x004 \u043b\u0435\u0436\u0438\u0442 <code>key = 0x00000000<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u0440\u0437\u0438\u043d\u0435 0x01 (\u0442.\u043a. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <em>dummy hash<\/em>).<\/li>\n<\/ul>\n<p>  <strong>\u0412\u044b\u0432\u043e\u0434\u044b<\/strong>:<\/p>\n<ul>\n<li>\u043f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435. \u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e! \u041b\u044e\u0431\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u043e\u0440\u043c\u044b \u044f\u0432\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u043c (\u0438\u043b\u0438 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c) \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438. <\/li>\n<li>\u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438. \u0422\u043e\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043a\u0430\u043a <a href=\"http:\/\/www.asic-world.com\/systemverilog\/assertions2.html\">assertion<\/a>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<blockquote><p>\u0414\u0443\u0440\u0430\u043a\u0438 \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0443\u0447\u0430\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435, \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u043f\u044b\u0442\u0435 \u0434\u0440\u0443\u0433\u0438\u0445. (\u041e\u0442\u0442\u043e \u0444\u043e\u043d \u0411\u0438\u0441\u043c\u0430\u0440\u043a)<\/p><\/blockquote>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u0438\u0437 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447 \u0434\u043b\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 IP-\u044f\u0434\u0435\u0440 \u0434\u043b\u044f ASIC\/FPGA \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  <strong>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438<\/strong>:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\">\u043f\u0440\u043e\u0435\u043a\u0442<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\/tree\/2b502a8b5228392c4db05c3b571c8b25f5f9cfca\">\u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e \u0444\u0438\u043a\u0441\u0430 \u0431\u0430\u0433\u0438<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\/tree\/4c2c6196c075d923bc3a1a1c3ef38d005a7631cd\">\u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u0444\u0438\u043a\u0441\u0430 \u0431\u0430\u0433\u0438<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\/tree\/dc74c7ff2f247d7b2067e977f75148b2130ab7e0\">\u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/li>\n<\/ul>\n<p>  \u0413\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0434\u043e\u0434\u0435\u043b\u0430\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f. \u041f\u043b\u0430\u043d \u043f\u043e \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0443 \u043c\u0435\u043d\u044f <a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\/blob\/2b502a8b5228392c4db05c3b571c8b25f5f9cfca\/tb\/verification_testplan.ru\">\u0431\u044b\u043b<\/a>, \u0438 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u0447\u0430\u0441\u0442\u044c \u0438\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c RTL-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0438.<\/p>\n<p>  \u0414\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0431\u044b\u043b \u0443 \u0432\u0430\u0441 \u043f\u0440\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 RTL-\u043a\u043e\u0434\u0430 \ud83d\ude42<\/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<p>  P.S.:<br \/>  \u042d\u0442\u043e \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0441\u0442 <del>\u043d\u0430 \u0425\u0430\u0431\u0440\u0435<\/del> \u0432 \u043c\u0430\u0440\u043a\u0434\u0430\u0443\u043d\u0435 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435.<br \/>  \u041f\u043e\u0434\u0441\u043a\u0430\u0436\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430:<\/p>\n<ul>\n<li>\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f <em>\u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e<\/em> \u043a\u043e\u0434, \u0445\u043e\u0442\u044f \u044f \u0435\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u043b <code>systemverilog<\/code>? <strong>GitHub Flavored Markdown<\/strong> \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u044d\u0442\u043e&#8230;<\/li>\n<li>\u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u044d\u0433 <code>spoiler<\/code> \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a markdown?<\/li>\n<\/ul>\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=\"https:\/\/habrahabr.ru\/post\/277313\/\"> https:\/\/habrahabr.ru\/post\/277313\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<blockquote><p>\u0414\u043b\u044f \u044f\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0435\u0442 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u0443\u0442\u0438, \u0447\u0435\u043c \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0433\u043e\u0440\u044c\u043a\u043e\u043c \u043e\u043f\u044b\u0442\u0435. (\u0424\u0440\u0438\u0434\u0440\u0438\u0445 \u042d\u043d\u0433\u0435\u043b\u044c\u0441)<\/p><\/blockquote>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!<\/p>\n<p>  \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u043c\u043d\u0435 \u0432 \u043b\u0438\u043d\u043a\u0435\u0434\u0438\u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u043b, \u0447\u0442\u043e \u0432 \u043c\u043e\u0435\u043c <a href=\"https:\/\/github.com\/johan92\/fpga-hash-table\">\u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a> \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u0435\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430.<\/p>\n<p>  \u041c\u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u044b \u0438 \u0444\u0438\u043a\u0441, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0433\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 &quot;\u0437\u0430\u0432\u0438\u0441\u0430\u043b\u0430&quot;. \u041f\u0440\u0438 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0442\u0435\u043c\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 RTL-\u043a\u043e\u0434\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<p>  \u0418\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435:<\/p>\n<ul>\n<li>\u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 FPGA.<\/li>\n<li>\u043d\u0430 \u0447\u0451\u043c \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.<\/li>\n<li>\u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b (\u043e\u043d\u0438 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0430\u0433\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u0430 \u0440\u0430\u043d\u044c\u0448\u0435).<\/li>\n<li>\u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/li>\n<\/ul>\n<p>  \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-274978","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274978","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=274978"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274978\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=274978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=274978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=274978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}