{"id":968,"date":"2025-03-18T15:31:38","date_gmt":"2025-03-18T06:31:38","guid":{"rendered":"https:\/\/rtlearner.com\/?p=968"},"modified":"2025-12-30T15:08:44","modified_gmt":"2025-12-30T06:08:44","slug":"system-verilog-overview-4","status":"publish","type":"post","link":"https:\/\/rtlearner.com\/en\/system-verilog-overview-4\/","title":{"rendered":"[System Verilog] Overview \u2013 4 interface"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Verilog\uc5d0\uc11c\ub294 \ubaa8\ub4c8 \uac04 \ud1b5\uc2e0\uc744 \uc704\ud574 port\ub97c wire\ub85c \uc5f0\uacb0\ud588\uc2b5\ub2c8\ub2e4. System Verilog\uc5d0\uc11c\ub294 signal\uc758 \uc9d1\ud569\uc778 interface\ub97c \ud1b5\ud574 \ubaa8\ub4c8 \uac04 \ud1b5\uc2e0\uc744 \uc9c4\ud589\ud569\ub2c8\ub2e4.<\/p>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id968_3b88b2-79 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kb-table-of-content-nav.kb-table-of-content-id968_3b88b2-79 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id968_3b88b2-79 .kb-table-of-contents-title{font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id968_3b88b2-79 .kb-table-of-content-wrap .kb-table-of-content-list{font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id968_3b88b2-79 .kb-table-of-contents-title{font-size:var(--global-kb-font-size-md, 1.25rem);}.kb-table-of-content-nav.kb-table-of-content-id968_3b88b2-79 .kb-table-of-content-wrap .kb-table-of-content-list{font-size:var(--global-kb-font-size-sm, 0.9rem);}}<\/style>\n\n<style>.kadence-column968_f8dde1-71 > .kt-inside-inner-col{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kadence-column968_f8dde1-71 > .kt-inside-inner-col,.kadence-column968_f8dde1-71 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column968_f8dde1-71 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column968_f8dde1-71 > .kt-inside-inner-col{flex-direction:column;}.kadence-column968_f8dde1-71 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column968_f8dde1-71 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column968_f8dde1-71{position:relative;}@media all and (max-width: 1024px){.kadence-column968_f8dde1-71 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column968_f8dde1-71 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column968_f8dde1-71\"><div class=\"kt-inside-inner-col\">\n<p class=\"wp-block-paragraph\"><strong>\uad00\ub828 \uae00<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/system-verilog-overview-1\/\">[System Verilog] Overview \u2013 1 introduction, data type<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/system-verilog-overview-2\/\">[System Verilog] Overview \u2013 2 control flow<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/system-verilog-overview-3\/\">[System Verilog] Overview \u2013 3 process, communication<\/a><\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">System Verilog interface intro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub807\ub2e4\uba74 interface\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368 \uc5bb\ub294 \uc774\uc810\uc774 \ubb34\uc5c7\uc77c\uae4c\uc694?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verilog\uc5d0\uc11c \uc2e0\ud638\ub97c \ucd94\uac00\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud574\ub2f9 \ubaa8\ub4c8\uc774 \uc778\uc2a4\ud134\uc2a4\ud654\ub41c \ubaa8\ub4e0 \uacf3\uc744 \ucc3e\uc544 \uc77c\uc77c\uc774 \uc218\uc815\ud574 \uc918\uc57c \ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc System Verilog\uc758 interface\ub97c \uc0ac\uc6a9\ud558\uba74 interface block\ub9cc \uc218\uc815\ud558\uba74 \ub429\ub2c8\ub2e4.<\/li>\n\n\n\n<li>Project \uc804\ubc18\uc801\uc73c\ub85c reusable \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>Interface block\uc5d0 parameters, variables, functional coverage, assertions, tasks and functions \uac19\uc740 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>Interface block\uc5d0 \uc808\ucc28 \ud560\ub2f9\uacfc \uc5f0\uc18d \ud560\ub2f9\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n<style>.kb-image968_5411fb-70 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image968_5411fb-70\"><figure class=\"aligncenter size-large\"><img data-dominant-color=\"c6dce2\" data-has-transparency=\"false\" style=\"--dominant-color: #c6dce2;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"288\" src=\"https:\/\/rtlearner.com\/wp-content\/uploads\/2024\/10\/\uadf8\ub9bc1-1-1024x288.jpg\" alt=\"\uae00 \uc124\uba85 \uc774\ubbf8\uc9c0, Port VS Interface\" class=\"kb-img wp-image-971 not-transparent\" srcset=\"https:\/\/rtlearner.com\/wp-content\/uploads\/2024\/10\/\uadf8\ub9bc1-1-1024x288.jpg 1024w, https:\/\/rtlearner.com\/wp-content\/uploads\/2024\/10\/\uadf8\ub9bc1-1-300x85.jpg 300w, https:\/\/rtlearner.com\/wp-content\/uploads\/2024\/10\/\uadf8\ub9bc1-1-768x216.jpg 768w, https:\/\/rtlearner.com\/wp-content\/uploads\/2024\/10\/\uadf8\ub9bc1-1.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Port VS Interface<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 syntax\ub97c \uc54c\uc544\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>interface &#91;name&#93; (&#91;port_list&#93;);\n  &#91;list_of_signals&#93;\nendinterface<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">interface &#91;name&#93; (&#91;port_list&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  &#91;list_of_signals&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endinterface<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Interface\uc5d0\ub294 modport\ub97c \ud1b5\ud574 direction \uc815\ubcf4, clocking block\uc744 \ud1b5\ud574 timing \uc815\ubcf4\ub97c \uae30\uc220\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Connect interface with design<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">With Verilog design<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 Verilog\ub85c design \ub41c DUT\ub97c integrate \ud55c \uc608\uc2dc\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/DUT\nmodule counter_ud #(\n  parameter WIDTH = 4\n) (\n   input  wire             clk\n  ,input  wire             rstn\n  ,input  wire &#91;WIDTH-1:0&#93; load\n  ,input  wire             load_en\n  ,input  wire             down\n  ,output wire             rollover\n  ,output reg  &#91;WIDTH-1:0&#93; count\n);\n  \n  always @(posedge clk or negedge rstn) begin\n    if (!rstn)        count &lt;= 4'b0;\n    else if (load_en) count &lt;= load;\n    else begin\n      if (down)       count &lt;= count - 1;\n      else            count &lt;= count + 1;\n    end\n  end\n  \n  assign rollover = &count;\n  \nendmodule\n\n\/\/Interface\ninterface cnt_if #(\n  parameter WIDTH = 4\n) (\n  input bit clk\n);\n  logic             rstn;\n  logic             load_en;\n  logic &#91;WIDTH-1:0&#93; load;\n  logic &#91;WIDTH-1:0&#93; count;\n  logic             down;\n  logic             rollover;\n  \n  \/\/initialize\n  initial begin\n    rstn    = 0;\n    load_en = 0;\n    load    = 4'b0;\n    down    = 0;\n  end\n  \nendinterface\n\nmodule tb;\n  \n  \/\/clk gen\n  localparam period_clk = 10;\n  reg clk; initial clk = 0;\n  \n  always #(period_clk*0.5) clk = ~clk;\n  \n  \/\/instance\n  cnt_if     cnt_if0 (clk);\n  counter_ud c0 (\n     .clk      (cnt_if0.clk     )\n    ,.rstn     (cnt_if0.rstn    )\n    ,.load     (cnt_if0.load    )\n    ,.load_en  (cnt_if0.load_en )\n    ,.down     (cnt_if0.down    )\n    ,.rollover (cnt_if0.rollover)\n    ,.count    (cnt_if0.count   )\n  );\n  \n  initial begin\n    bit       load_en;\n    bit       down;\n    bit &#91;3:0&#93; load;\n    \n    @(posedge clk);\n    cnt_if0.rstn = 1;\n    \n    \/\/Stimulus\n    cnt_if0.load_en &lt;= 1;\n    cnt_if0.load    &lt;= 4'h3;\n    cnt_if0.down    &lt;= 1;\n    \n    @(posedge clk);\n    cnt_if0.load_en &lt;= 0;\n    \n    repeat (2) @(posedge clk);\n    cnt_if0.down    &lt;= 0;\n    \n    \/\/Sim. run time\n    repeat (7) @(posedge clk);\n    $finish;\n  end\n  \n  \/\/wave dump\n  initial begin\n    $dumpfile(\"dump.vcd\");\n    $dumpvars;\n  end\n  \nendmodule<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/DUT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> counter_ud <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  parameter<\/span><span style=\"color: #D8DEE9FF\"> WIDTH <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">) (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">wire<\/span><span style=\"color: #D8DEE9FF\">             clk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">wire<\/span><span style=\"color: #D8DEE9FF\">             rstn<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">wire<\/span><span style=\"color: #D8DEE9FF\"> &#91;WIDTH<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; load<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">wire<\/span><span style=\"color: #D8DEE9FF\">             load_en<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">wire<\/span><span style=\"color: #D8DEE9FF\">             down<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  ,<\/span><span style=\"color: #8FBCBB\">output<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">wire<\/span><span style=\"color: #D8DEE9FF\">             rollover<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  ,<\/span><span style=\"color: #8FBCBB\">output<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">reg<\/span><span style=\"color: #D8DEE9FF\">  &#91;WIDTH<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk <\/span><span style=\"color: #81A1C1\">or<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">negedge<\/span><span style=\"color: #D8DEE9FF\"> rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">rstn)        count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (load_en) count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> load;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (down)       count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> count <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\">            count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> count <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">assign<\/span><span style=\"color: #D8DEE9FF\"> rollover <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&amp;<\/span><span style=\"color: #D8DEE9FF\">count;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/Interface<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">cnt_if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">parameter<\/span><span style=\"color: #D8DEE9FF\"> WIDTH <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">) (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">bit<\/span><span style=\"color: #D8DEE9FF\"> clk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             rstn;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             load_en;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\"> &#91;WIDTH<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; load;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\"> &#91;WIDTH<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; count;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             down;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             rollover;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/initialize<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    rstn    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    load_en <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    load    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    down    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endinterface<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> tb;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/clk gen<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">localparam<\/span><span style=\"color: #D8DEE9FF\"> period_clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">10<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> clk; <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(period_clk<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #B48EAD\">5<\/span><span style=\"color: #D8DEE9FF\">) clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">~<\/span><span style=\"color: #D8DEE9FF\">clk;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/instance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">cnt_if<\/span><span style=\"color: #D8DEE9FF\">     cnt_if0 (clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">counter_ud<\/span><span style=\"color: #D8DEE9FF\"> c0 (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">     .<\/span><span style=\"color: #88C0D0\">clk<\/span><span style=\"color: #D8DEE9FF\">      (cnt_if0.<\/span><span style=\"color: #88C0D0\">clk<\/span><span style=\"color: #D8DEE9FF\">     )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.<\/span><span style=\"color: #88C0D0\">rstn<\/span><span style=\"color: #D8DEE9FF\">     (cnt_if0.<\/span><span style=\"color: #88C0D0\">rstn<\/span><span style=\"color: #D8DEE9FF\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.<\/span><span style=\"color: #88C0D0\">load<\/span><span style=\"color: #D8DEE9FF\">     (cnt_if0.<\/span><span style=\"color: #88C0D0\">load<\/span><span style=\"color: #D8DEE9FF\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.<\/span><span style=\"color: #88C0D0\">load_en<\/span><span style=\"color: #D8DEE9FF\">  (cnt_if0.<\/span><span style=\"color: #88C0D0\">load_en<\/span><span style=\"color: #D8DEE9FF\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.<\/span><span style=\"color: #88C0D0\">down<\/span><span style=\"color: #D8DEE9FF\">     (cnt_if0.<\/span><span style=\"color: #88C0D0\">down<\/span><span style=\"color: #D8DEE9FF\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.<\/span><span style=\"color: #88C0D0\">rollover<\/span><span style=\"color: #D8DEE9FF\"> (cnt_if0.<\/span><span style=\"color: #88C0D0\">rollover<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.<\/span><span style=\"color: #88C0D0\">count<\/span><span style=\"color: #D8DEE9FF\">    (cnt_if0.<\/span><span style=\"color: #88C0D0\">count<\/span><span style=\"color: #D8DEE9FF\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">    bit<\/span><span style=\"color: #D8DEE9FF\">       load_en;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">    bit<\/span><span style=\"color: #D8DEE9FF\">       down;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">    bit<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; load;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.rstn <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/Stimulus<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.load_en <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.load    <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;h3<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.down    <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.load_en <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">repeat<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.down    <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/Sim. run time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">repeat<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #B48EAD\">7<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$finish<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/wave dump<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$dumpfile<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">dump.vcd<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$dumpvars<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Interface\uc758 signal\uc744 \uc77c\uc77c\uc774 \uc5f0\uacb0\ud574 \uc904 \uc218 \uc788\uc9c0\ub9cc \uc544\ub798\uc758 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uba74 code\ub97c \uac04\uacb0\ud558\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">With System Verilog design<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/DUT\nmodule counter_ud #(\n  parameter WIDTH = 4\n) (cnt_if _if);\n  \n  always @(posedge _if.clk or negedge _if.rstn) begin\n    if (!_if.rstn)        _if.count &lt;= 4'b0;\n    else if (_if.load_en) _if.count &lt;= _if.load;\n    else begin\n      if (_if.down)       _if.count &lt;= _if.count - 1;\n      else                _if.count &lt;= _if.count + 1;\n    end\n  end\n  \n  assign _if.rollover = &amp;_if.count;\n  \nendmodule\n\n\/\/Interface\ninterface cnt_if #(\n  parameter WIDTH = 4\n) (\n  input bit clk\n);\n  logic             rstn;\n  logic             load_en;\n  logic &#91;WIDTH-1:0&#93; load;\n  logic &#91;WIDTH-1:0&#93; count;\n  logic             down;\n  logic             rollover;\n  \n  \/\/initialize\n  initial begin\n    rstn    = 0;\n    load_en = 0;\n    load    = 4'b0;\n    down    = 0;\n  end\n  \nendinterface\n\nmodule tb;\n  \n  \/\/clk gen\n  localparam period_clk = 10;\n  reg clk; initial clk = 0;\n  \n  always #(period_clk*0.5) clk = ~clk;\n  \n  \/\/instance\n  cnt_if     cnt_if0 (clk    );\n  counter_ud c0      (cnt_if0);\n  \n  initial begin\n    bit       load_en;\n    bit       down;\n    bit &#91;3:0&#93; load;\n    \n    @(posedge clk);\n    cnt_if0.rstn = 1;\n    \n    \/\/Stimulus\n    cnt_if0.load_en &lt;= 1;\n    cnt_if0.load    &lt;= 4'h3;\n    cnt_if0.down    &lt;= 1;\n    \n    @(posedge clk);\n    cnt_if0.load_en &lt;= 0;\n    \n    repeat (2) @(posedge clk);\n    cnt_if0.down    &lt;= 0;\n    \n    \/\/Sim. run time\n    repeat (7) @(posedge clk);\n    $finish;\n  end\n  \n  \/\/wave dump\n  initial begin\n    $dumpfile(\"dump.vcd\");\n    $dumpvars;\n  end\n  \nendmodule<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/DUT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> counter_ud <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  parameter<\/span><span style=\"color: #D8DEE9FF\"> WIDTH <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">) (cnt_if _if);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> _if.clk <\/span><span style=\"color: #81A1C1\">or<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">negedge<\/span><span style=\"color: #D8DEE9FF\"> _if.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">_if.rstn)        _if.count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (_if.load_en) _if.count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> _if.load;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (_if.down)       _if.count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> _if.count <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\">                _if.count <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> _if.count <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">assign<\/span><span style=\"color: #D8DEE9FF\"> _if.rollover <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&amp;<\/span><span style=\"color: #D8DEE9FF\">_if.count;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/Interface<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">cnt_if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">parameter<\/span><span style=\"color: #D8DEE9FF\"> WIDTH <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">) (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">bit<\/span><span style=\"color: #D8DEE9FF\"> clk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             rstn;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             load_en;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\"> &#91;WIDTH<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; load;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\"> &#91;WIDTH<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; count;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             down;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">             rollover;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/initialize<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    rstn    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    load_en <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    load    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    down    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endinterface<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> tb;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/clk gen<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">localparam<\/span><span style=\"color: #D8DEE9FF\"> period_clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">10<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> clk; <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(period_clk<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #B48EAD\">5<\/span><span style=\"color: #D8DEE9FF\">) clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">~<\/span><span style=\"color: #D8DEE9FF\">clk;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/instance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">cnt_if<\/span><span style=\"color: #D8DEE9FF\">     cnt_if0 (clk    );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">counter_ud<\/span><span style=\"color: #D8DEE9FF\"> c0      (cnt_if0);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">    bit<\/span><span style=\"color: #D8DEE9FF\">       load_en;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">    bit<\/span><span style=\"color: #D8DEE9FF\">       down;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">    bit<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; load;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.rstn <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/Stimulus<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.load_en <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.load    <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;h3<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.down    <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.load_en <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">repeat<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cnt_if0.down    <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/Sim. run time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">repeat<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #B48EAD\">7<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$finish<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/wave dump<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$dumpfile<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">dump.vcd<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$dumpvars<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Interface\ub97c \uc0ac\uc6a9\ud574 integrate\ub97c \ud558\uba74 \ucf54\ub4dc\ub97c \uac04\uacb0\ud558\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Modport<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Interface\uc5d0 \ud2b9\uc815 \uc81c\uc57d\uc870\uac74\uc744 \uac78\uc5b4\uc11c interface\uc758 \ubc29\ud5a5\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\uc2dc\ub97c \ubcfc\uae4c\uc694?<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/Syntax\nmodport  &#91;identifier&#93;  (\n\tinput  &#91;port_list&#93;,\n\toutput &#91;port_list&#93;\n);\n\ninterface ms_if (input clk);\n  logic       sready;\n  logic       rstn;\n  logic &#91;1:0&#93; addr;\n  logic &#91;7:0&#93; data;\n  \n  initial rstn = 0;\n    \n  modport slave (\n     input  clk\n    ,input  rstn\n    ,input  addr\n    ,input  data\n    ,output sready\n  );\n  \n  modport master (\n     input  clk\n    ,input  rstn\n    ,input  sready\n    ,output addr\n    ,output data\n  );\n  \nendinterface\n\nmodule master (ms_if.master mif);\n  \n  always @(posedge mif.clk or negedge mif.rstn) begin\n    if (!mif.rstn) begin\n      mif.addr &lt;= 2'b0;\n      mif.data &lt;= 8'b0;\n    end\n    else begin\n      if (mif.sready) begin\n        mif.addr &lt;= mif.addr + 1;\n        mif.data &lt;= (mif.addr * 4);\n      end\n      else begin\n        mif.addr &lt;= mif.addr;\n        mif.data &lt;= mif.addr;\n      end\n    end\n  end\n  \nendmodule\n\nmodule slave (ms_if.slave sif);\n  \n  reg &#91;7:0&#93; reg_a;\n  reg &#91;7:0&#93; reg_b;\n  reg       reg_c;\n  reg &#91;3:0&#93; reg_d;\n  \n  reg       dly;\n  reg &#91;3:0&#93; addr_dly;\n  \n  always @(posedge sif.clk or negedge sif.rstn) begin\n    if (!sif.rstn) addr_dly &lt;= 4'b0;\n    else           addr_dly &lt;= sif.addr;\n  end\n  \n  always @(posedge sif.clk or negedge sif.rstn) begin\n    if (!sif.rstn) begin\n      reg_a &lt;= 8'b0;\n      reg_b &lt;= 8'b0;\n      reg_c &lt;= 1'b0;\n      reg_d &lt;= 4'b0;\n    end\n    else begin\n      case (addr_dly)\n        0 : reg_a &lt;= sif.data;\n        1 : reg_b &lt;= sif.data;\n        2 : reg_c &lt;= sif.data;\n        3 : reg_d &lt;= sif.data;\n      endcase\n    end\n  end\n  \n  assign sif.sready = ~(sif.addr&#91;1&#93; &amp; sif.addr&#91;0&#93;) | ~dly;\n  \n  always @(posedge sif.clk or negedge sif.rstn) begin\n    if (!sif.rstn) dly &lt;= 1;\n    else           dly &lt;= sif.sready;\n  end\n  \nendmodule\n\nmodule dut (ms_if tif);\n  \n  master m0 (tif.master);\n  slave  s0 (tif.slave );\n  \nendmodule\n\nmodule tb;\n  \n  localparam period_clk = 10;\n  reg clk; initial clk = 0;\n  \n  always #(period_clk * 0.5) clk = ~clk;\n  \n  ms_if if0   (clk);\n  dut   u_dut (if0);\n  \n  initial begin\n    \n    @(posedge clk)\n    if0.rstn = 1;\n    \n    repeat (20) @(posedge clk);\n    $finish;\n  end\n  \n  initial begin\n    $dumpfile(\"dump.vcd\");\n    $dumpvars;\n  end\n  \nendmodule<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/Syntax<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">modport<\/span><span style=\"color: #D8DEE9FF\">  &#91;identifier&#93;  (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">\tinput<\/span><span style=\"color: #D8DEE9FF\">  &#91;port_list&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">\toutput<\/span><span style=\"color: #D8DEE9FF\"> &#91;port_list&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">ms_if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">       sready;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\">       rstn;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; addr;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  logic<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">7<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> rstn <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">modport<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">slave<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">     <\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  clk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  rstn<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  addr<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">output<\/span><span style=\"color: #D8DEE9FF\"> sready<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">modport<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">master<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">     <\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  clk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  rstn<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  sready<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">output<\/span><span style=\"color: #D8DEE9FF\"> addr<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,<\/span><span style=\"color: #8FBCBB\">output<\/span><span style=\"color: #D8DEE9FF\"> data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endinterface<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> master (<\/span><span style=\"color: #81A1C1\">ms_if<\/span><span style=\"color: #D8DEE9FF\">.master mif);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> mif.clk <\/span><span style=\"color: #81A1C1\">or<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">negedge<\/span><span style=\"color: #D8DEE9FF\"> mif.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">mif.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      mif.addr <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      mif.data <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">8&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (mif.sready) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        mif.addr <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> mif.addr <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        mif.data <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> (mif.addr <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        mif.addr <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> mif.addr;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        mif.data <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> mif.addr;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> slave (<\/span><span style=\"color: #81A1C1\">ms_if<\/span><span style=\"color: #D8DEE9FF\">.slave sif);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">7<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; reg_a;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">7<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; reg_b;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\">       reg_c;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; reg_d;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\">       dly;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93; addr_dly;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> sif.clk <\/span><span style=\"color: #81A1C1\">or<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">negedge<\/span><span style=\"color: #D8DEE9FF\"> sif.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">sif.rstn) addr_dly <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\">           addr_dly <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> sif.addr;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> sif.clk <\/span><span style=\"color: #81A1C1\">or<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">negedge<\/span><span style=\"color: #D8DEE9FF\"> sif.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">sif.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      reg_a <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">8&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      reg_b <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">8&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      reg_c <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      reg_d <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4&#39;b0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">case<\/span><span style=\"color: #D8DEE9FF\"> (addr_dly)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> reg_a <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> sif.data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> reg_b <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> sif.data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> reg_c <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> sif.data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> reg_d <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> sif.data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">endcase<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">assign<\/span><span style=\"color: #D8DEE9FF\"> sif.sready <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">~<\/span><span style=\"color: #D8DEE9FF\">(sif.addr&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">&#93; <\/span><span style=\"color: #81A1C1\">&amp;<\/span><span style=\"color: #D8DEE9FF\"> sif.addr&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">&#93;) <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">~<\/span><span style=\"color: #D8DEE9FF\">dly;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> sif.clk <\/span><span style=\"color: #81A1C1\">or<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">negedge<\/span><span style=\"color: #D8DEE9FF\"> sif.rstn) <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">sif.rstn) dly <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\">           dly <\/span><span style=\"color: #81A1C1\">&lt;=<\/span><span style=\"color: #D8DEE9FF\"> sif.sready;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> dut (ms_if tif);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">master<\/span><span style=\"color: #D8DEE9FF\"> m0 (tif.<\/span><span style=\"color: #88C0D0\">master<\/span><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">slave<\/span><span style=\"color: #D8DEE9FF\">  s0 (tif.<\/span><span style=\"color: #88C0D0\">slave<\/span><span style=\"color: #D8DEE9FF\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">module<\/span><span style=\"color: #D8DEE9FF\"> tb;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">localparam<\/span><span style=\"color: #D8DEE9FF\"> period_clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">10<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">  reg<\/span><span style=\"color: #D8DEE9FF\"> clk; <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">always<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #D8DEE9FF\">(period_clk <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #B48EAD\">5<\/span><span style=\"color: #D8DEE9FF\">) clk <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">~<\/span><span style=\"color: #D8DEE9FF\">clk;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">ms_if<\/span><span style=\"color: #D8DEE9FF\"> if0   (clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">dut<\/span><span style=\"color: #D8DEE9FF\">   u_dut (if0);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    if0.rstn <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">repeat<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #B48EAD\">20<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$finish<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">initial<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$dumpfile<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">dump.vcd<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">$dumpvars<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endmodule<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Interface\uc778 ms_if \ub0b4\ubd80 \ubaa8\ub4c8\ub85c &#8216;master&#8217; modport\uc640 &#8216;slave&#8217; modport\uac00 \uc788\uc2b5\ub2c8\ub2e4. clock, reset\uc740 \ub450 modport\uc5d0\uc11c \ubaa8\ub450 input\uc774\uc9c0\ub9cc addr, data, sready\ub294 \uc0c1\ubc18\ub41c \ubc29\ud5a5\uc744 \uac00\uc9c4 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 master, slave DUT\uc5d0\uc11c \uac01\uac01\uc758 \ubaa8\ub4c8\uc5d0 \ub9de\ub294 modport\ub97c \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c modport\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\ub294, interface\uc5d0 \uc120\uc5b8\ub41c logic\uc740 \uae30\ubcf8\uc801\uc73c\ub85c inout\uc774\uae30 \ub54c\ubb38\uc5d0 testbench\ub098 module\uc5d0\uc11c human error\ub85c \uc778\ud574 input\uacfc output\uc774 \ucda9\ub3cc\ub418\ub294 \uc0c1\ud669\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub54c\ub294 \ud574\ub2f9 net\uc5d0 X(unknown)\uac00 \ud45c\uc2dc\ub418\ub294\ub370, modport\ub97c \uc0ac\uc6a9\ud558\uba74 \uc774\ub7ec\ud55c \ucda9\ub3cc\uc744 \uc0ac\uc804\uc5d0 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Clocking block<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Clocking block\uc740 signal group\uc758 timing\uacfc \ub3d9\uae30\ud654\ub97c \uc9c0\uc815\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uba3c\uc800 \uac04\ub2e8\ud55c \uc608\uc2dc\ub97c \ud655\uc778\ud574\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>clocking cb @(posedge clk);\n  default input #1ns output #2ns;\n  input  from_Dut;\n  output to_Dut;\nendclocking<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">clocking<\/span><span style=\"color: #D8DEE9FF\"> cb <\/span><span style=\"color: #81A1C1\">@<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">posedge<\/span><span style=\"color: #D8DEE9FF\"> clk);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">default<\/span><span style=\"color: #8FBCBB\"> input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #B48EAD\">1ns<\/span><span style=\"color: #8FBCBB\"> output<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">#<\/span><span style=\"color: #B48EAD\">2ns<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">input<\/span><span style=\"color: #D8DEE9FF\">  from_Dut;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">  output<\/span><span style=\"color: #D8DEE9FF\"> to_Dut;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">endclocking<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">cb\ub77c\uace0 naming \ub41c clocking block\uc5d0\ub294 input signal\uc778 from_DUT\uc640 output signal\uc778 to_DUT\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uac01\uac01 skew\uac00 1ns, 2ns\ub85c \uc9c0\uc815\ub418\uc5b4 \uc788\ub294\ub370\uc694, \uc774 \uc758\ubbf8\ub294 \uc544\ub798 \uadf8\ub9bc\uc744 \ubcf4\uc2dc\uba74 \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n<style>.kb-image968_2c9d1d-2d.kb-image-is-ratio-size, .kb-image968_2c9d1d-2d .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image968_2c9d1d-2d.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image968_2c9d1d-2d .kb-image-is-ratio-size{align-self:unset;}.kb-image968_2c9d1d-2d figure{max-width:650px;}.kb-image968_2c9d1d-2d .image-is-svg, .kb-image968_2c9d1d-2d .image-is-svg img{width:100%;}.kb-image968_2c9d1d-2d .kb-image-has-overlay:after{opacity:0.3;}.kb-image968_2c9d1d-2d img.kb-img, .kb-image968_2c9d1d-2d .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image968_2c9d1d-2d.kb-image-is-ratio-size, .kb-image968_2c9d1d-2d .kb-image-is-ratio-size{max-width:280px;width:100%;}.kb-image968_2c9d1d-2d figure{max-width:280px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image968_2c9d1d-2d\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/b44mle\/btsMOh8xuFs\/WVGQcDxhQ1cKnnli1NeTD0\/img.png\" alt=\"Skew \uc124\uba85\" class=\"kb-img\"\/><figcaption>Skew \uc124\uba85<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Input skew\ub294 signal\uc774 sampling \ub418\ub294 timing\uc744 \uc9c0\uc815\ud558\ub294 \uac83\uc774\uace0, output skew\ub294 signal\uc774 driving \ub418\ub294 timing\uc744 \uc9c0\uc815\ud574 \uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4. \ub9cc\uc57d, default \uac12\uc774 \uc9c0\uc815\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\uba74, input skew\ub294 #1 step, output #0 step\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n\n\n<style>.kadence-column968_2c24fe-74 > .kt-inside-inner-col{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kadence-column968_2c24fe-74 > .kt-inside-inner-col,.kadence-column968_2c24fe-74 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column968_2c24fe-74 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column968_2c24fe-74 > .kt-inside-inner-col{flex-direction:column;}.kadence-column968_2c24fe-74 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column968_2c24fe-74 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column968_2c24fe-74{position:relative;}@media all and (max-width: 1024px){.kadence-column968_2c24fe-74 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column968_2c24fe-74 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column968_2c24fe-74\"><div class=\"kt-inside-inner-col\">\n<p class=\"wp-block-paragraph\"><strong>\uad00\ub828 \uae00<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/system-verilog-overview-1\/\">[System Verilog] Overview \u2013 1 introduction, data type<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/system-verilog-overview-2\/\">[System Verilog] Overview \u2013 2 control flow<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/system-verilog-overview-3\/\">[System Verilog] Overview \u2013 3 process, communication<\/a><\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc38\uace0:&nbsp;<a href=\"https:\/\/www.chipverify.com\/tutorials\/systemverilog\" target=\"_blank\" rel=\"noreferrer noopener\">chip verify<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Verilog, ports are connected with wires to communicate between modules. In System Verilog\u2026<\/p>","protected":false},"author":1,"featured_media":971,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[39],"tags":[102],"class_list":["post-968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-verilog","tag-system-verilog"],"_links":{"self":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/comments?post=968"}],"version-history":[{"count":9,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/968\/revisions"}],"predecessor-version":[{"id":1244,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/968\/revisions\/1244"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/media\/971"}],"wp:attachment":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/media?parent=968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/categories?post=968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/tags?post=968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 6a588749d36f73a90a601ae0. Config Timestamp: 2026-07-16 07:24:54 UTC, Cached Timestamp: 2026-09-03 11:27:28 UTC, Optimization Time: 114.57ms -->