{"id":263426,"date":"2015-08-12T19:57:02","date_gmt":"2015-08-12T15:57:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=263426"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=263426","title":{"rendered":"\u041d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 SystemVerilog"},"content":{"rendered":"<p> \t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/files\/f64\/ee4\/158\/f64ee41585234b97aedb4d3b23a4847c.png\" alt=\"image\"\/><br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 SystemVerilog \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 Verilog-2001 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044f\u0437\u044b\u043a\u0430. <br \/>  \u0418\u0441\u0442\u043e\u0440\u0438\u044f SystemVerilog \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u0430 \u0434\u043b\u0438\u043d\u0430 \u0438 \u0442\u0443\u043c\u0430\u043d\u043d\u0430. \u041d\u0430\u0447\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 Verilog-95, \u043e\u043d\u0430 \u0432\u044b\u043b\u0435\u043b\u0430\u0441\u044c \u0432 Verilog-2001. \u041e\u0434\u043d\u0430\u043a\u043e \u044f\u0437\u044b\u043a \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0434\u043b\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044f\u0437\u044b\u043a\u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u00abE\u00bb \u2014 VERA, Testbuider. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 SystemVerilog \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 2005 \u0433\u043e\u0434\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Quartus II, ISE, ModelSim\/QuestaSim \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 SystemVerilog. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f IEEE 1800-2012. <\/p>\n<p>  <i>\u041f\u0440\u0438\u043c. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u0430\u0432\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430, \u043d\u043e \u043d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c.<\/i><br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  SystemVerilog \u043f\u0440\u0438\u0432\u043d\u0435\u0441 \u0432 \u043c\u0438\u0440 Verilog \u043c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439:  <\/p>\n<ul>\n<li>C-lile \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/li>\n<li>\u041e\u041e\u041f<\/li>\n<li>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f<\/li>\n<li>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432<\/li>\n<li>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e foreach, return, break, continue \u0438 \u0442.\u0434<\/li>\n<li>Semaphores, mailboxes.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b<\/li>\n<li>Assertions<\/li>\n<\/ul>\n<h4>\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f logic.<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0442 \u043d\u0443\u0436\u043d\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 reg \u0438 wire, \u0432\u0441\u044e\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f logic. \u0421\u0438\u043d\u0442\u0435\u0437\u0430\u0442\u043e\u0440 \u0441\u0430\u043c \u0440\u0435\u0448\u0438\u0442\u044c \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c (\u043f\u0440\u0438\u0432\u0435\u0442 signal \u0438\u0437 VHDL).<\/p>\n<h4> \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0438\u043f\u043e\u0432<\/h4>\n<p>  \u0412 SystemVerilog \u0441\u0442\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c   <\/p>\n<pre><code class=\"vhdl\">reg [63:0] data = 64'hFFFFFFFFFFFFFFFF; <\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"vhdl\">reg [63:0] data  = '1; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0438\u0441\u044c data = &#8216;0 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0443\u043b\u044f\u043c\u0438, \u0430 data = &#8216;bz \u2014 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c<\/p>\n<h4>\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b.<\/h4>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e state \u043c\u0430\u0448\u0438\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a  <\/p>\n<pre><code class=\"vhdl\">enum {WAITE, LOAD, STORE} State, NextState; always_ff @(posedge clock, negedge resetN) \tif (!resetN) State &lt;= WAITE; \telse State &lt;= NextState; \t always_comb begin \tcase (State) \t\tWAITE: NextState = LOAD; \t\tLOAD: NextState = STORE; \t\tSTORE: NextState = WAITE; \tendcase end <\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"vhdl\">enum {ONE = 1,FIVE = 5,TEN = 10 } state; <\/code><\/pre>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 int. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0432\u043e\u0442 \u0442\u0430\u043a<br \/>  \/\/ \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b \u0442\u0438\u043f \u0441 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 1 \u0431\u0438\u0442.<br \/>  \/\/ \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439  <\/p>\n<pre><code class=\"vhdl\">enum bit {TRUE, FALSE} Boolean; \/\/ \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b \u0442\u0438\u043f \u0441 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 2 \u0431\u0438\u0442\u0430. \/\/ \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f enum logic [1:0] {WAITE, LOAD, READY} state; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"vhdl\">$display(&quot;\\nCurrent state is %s (%b)&quot;, State.name); <\/code><\/pre>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0440\u0443\u0442\u044b<\/h4>\n<p>  \u041e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:  <\/p>\n<pre><code class=\"vhdl\">struct { \tint a, b; \/\/ 32-bit variables \topcode_t opcode; \/\/ user-defined type \tlogic [23:0] address; \/\/ 24-bit variable \tbit error; \/\/ 1-bit 2-state var. \t} Instruction_Word; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 typedef  <\/p>\n<pre><code class=\"vhdl\">typedef struct { \/\/ structure definition \tlogic [31:0] a, b; \tlogic [ 7:0] opcode; \tlogic [23:0] address; \t} instruction_word_t; \tinstruction_word_t IW; \/\/ structure allocation <\/code><\/pre>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a unpacked. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e packed \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439.  <\/p>\n<pre><code class=\"vhdl\">struct packed { \tlogic valid; \tlogic [ 7:0] tag; \tlogic [31:0] data; \t} data_word; <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/files\/b00\/1b8\/071\/b001b8071be94420896311a294e119af.PNG\" alt=\"image\"\/>  <\/p>\n<pre><code class=\"vhdl\">data_word.tag = 8\u2019hf0;  data_word[39:32] = 8\u2019hf0; \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 <\/code><\/pre>\n<h4>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f union<\/h4>\n<p>  \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e.<br \/>  \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e C-like.  <\/p>\n<pre><code class=\"vhdl\">union { \tint i; \tint unsigned u; } data; ... data.i = -5; $display(&quot;data is %d&quot;, data.i); data.u = -5; $display(&quot;now data is %d&quot;, data.u); <\/code><\/pre>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 packed unions. \u0412 \u043d\u0438\u0445 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0438\u0442. <br \/>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0442\u0438\u043f, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0432\u0438\u0434\u0435 (\u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0438\u043f\u0435). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"vhdl\">typedef struct packed { \tlogic [15:0] source_address; \tlogic [15:0] destination_address; \tlogic [23:0] data; \tlogic [ 7:0] opcode; } data_packet_t;  union packed { \tdata_packet_t packet; \/\/ packed structure \tlogic [7:0][7:0] bytes; \/\/ packed array } dreg; <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/files\/c00\/7e5\/538\/c007e5538e534ca99d3f766cb6160d0d.PNG\" alt=\"image\"\/><br \/>  \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043e, \u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 logic[7:0] \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 data_packet_t  <\/p>\n<pre><code class=\"vhdl\">initial begin \tlogic [15:0] src, dst;  \tfor (i = 0; i &lt;= N; i = i + 1) begin \t\tdreg.bytes[i] &lt;= byte_in; \/\/store as bytes \tend \tsrc = dreg.source_address; \tdst = dreg.destination_address; end <\/code><\/pre>\n<h4>Packed Array<\/h4>\n<p>  SystemVerilog \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b  <\/p>\n<pre><code class=\"vhdl\">logic [3:0][7:0] data; \/\/ 2-D packed array logic [1:0][3:0][7:0] data; \/\/ 3-D packed array <\/code><\/pre>\n<p>  \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 IEEE \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u043d\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f  <\/p>\n<pre><code class=\"vhdl\">logic [3:0][7:0] data; \/\/ 2-D packed array <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/files\/1d9\/6e1\/bc3\/1d96e1bc3a3a4fb9a9536affe1b079d2.PNG\" alt=\"image\"\/><br \/>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0430\u0441\u0441\u0438\u0432 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440, \u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0435\u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u043e \u0438 \u043d\u0430\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438  <\/p>\n<pre><code class=\"vhdl\">logic [3:0][15:0] a, b, result; \/\/ packed arrays result = (a &lt;&lt; 1) + b; <\/code><\/pre>\n<p>  \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0435\u043a\u0442\u043e\u0440\u0443 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u044b\u043c, \u0442\u0430\u043a \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0446\u0435\u043b\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c(\u0438). \u0422\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b \u0441\u0440\u0435\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.  <\/p>\n<pre><code class=\"vhdl\">logic [1:0][1:0][7:0] a; \/\/ 3-D packed array a[1][1][0] = 1\u2019b0; \/\/ \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 a = 32\u2019hF1A3C5E7; \/\/ \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043c\u0430\u0441\u0441\u0438\u0432 \u0446\u0435\u043b\u0438\u043a\u043e\u043c a[1][0][3:0] = 4\u2019hF; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b a[0] = 16\u2019hFACE; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0440\u0435\u0437\u0443 <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u043b\u0438 \u043f\u043e \u0441\u0440\u0435\u0437\u0430\u043c  <\/p>\n<pre><code class=\"vhdl\">bit [1:0][15:0] a; \/\/32\u0445 \u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 bit \u0442\u043e\u043b\u044c\u043a\u043e 0 \u0438\u043b\u0438 1 logic [3:0][7:0] b; \/\/32\u0445 \u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 logic O,1,Z,X logic [15:0] c; \/\/ 16\u0442\u0438 \u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 logic [39:0] d; \/\/ 40 \u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 b = a; \/\/ \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 32\u0445 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 32\u0445 \u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 c = a; \/\/ \u0441\u0442\u0430\u0440\u0448\u0438\u0435 16 \u0431\u0438\u0442 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u044b d = a; \/\/ \u0441\u0442\u0430\u0440\u0448\u0438\u0435 8 \u0431\u0438\u0442 \u0431\u0443\u0434\u0443\u0442 \u043d\u0443\u043b\u044f\u043c\u0438 <\/code><\/pre>\n<h4>\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/h4>\n<p>  1. <a href=\"http:\/\/www.asic-world.com\/systemverilog\/\">www.asic-world.com\/systemverilog<\/a><br \/>  2. \u00abSystemVerilog For Design Second Edition\u00bb by Stuart Sutherland         <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/geektimes.ru\/post\/254512\/\"> http:\/\/geektimes.ru\/post\/254512\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p> \t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/files\/f64\/ee4\/158\/f64ee41585234b97aedb4d3b23a4847c.png\" alt=\"image\"\/><br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 SystemVerilog \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 Verilog-2001 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044f\u0437\u044b\u043a\u0430. <br \/>  \u0418\u0441\u0442\u043e\u0440\u0438\u044f SystemVerilog \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u0430 \u0434\u043b\u0438\u043d\u0430 \u0438 \u0442\u0443\u043c\u0430\u043d\u043d\u0430. \u041d\u0430\u0447\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 Verilog-95, \u043e\u043d\u0430 \u0432\u044b\u043b\u0435\u043b\u0430\u0441\u044c \u0432 Verilog-2001. \u041e\u0434\u043d\u0430\u043a\u043e \u044f\u0437\u044b\u043a \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0434\u043b\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044f\u0437\u044b\u043a\u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u00abE\u00bb \u2014 VERA, Testbuider. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 SystemVerilog \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 2005 \u0433\u043e\u0434\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Quartus II, ISE, ModelSim\/QuestaSim \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 SystemVerilog. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f IEEE 1800-2012. <\/p>\n<p>  <i>\u041f\u0440\u0438\u043c. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u0430\u0432\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430, \u043d\u043e \u043d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c.<\/i>  <\/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-263426","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/263426","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=263426"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/263426\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=263426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=263426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=263426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}