<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>H군의 개발 일지</title>
    <link>https://embedded-mg.tistory.com/</link>
    <description>임베디드 시스템 개발자입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 28 Jun 2026 22:46:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>개발자 H</managingEditor>
    <image>
      <title>H군의 개발 일지</title>
      <url>https://tistory1.daumcdn.net/tistory/4378228/attach/fc31e125afc6462e841604a8ec0925c7</url>
      <link>https://embedded-mg.tistory.com</link>
    </image>
    <item>
      <title>[#1] GitLab won&amp;rsquo;t start &amp;ndash; runsv not running</title>
      <link>https://embedded-mg.tistory.com/11</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;window10에서 ubuntu 18.04 앱 사용 중에&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&quot;GitLab won&amp;rsquo;t start &amp;ndash; runsv not running&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;* execute[/opt/gitlab/bin/gitlab-ctl start redis] action run&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[execute] /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/omnibus-ctl-0.6.0/lib/omnibus-ctl.rb:692: warning: Insecure world writable dir /mnt/c in PATH, mode 040777&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;위 문제가 계속 발생하였는데 구글링하여 다음과 같은 해결책을 찾았다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Problem&lt;/h3&gt;
&lt;p&gt;admin@MyHost:~$ sudo gitlab-ctl start&lt;br /&gt;fail: alertmanager: runsv not running&lt;br /&gt;fail: gitaly: runsv not running&lt;br /&gt;fail: gitlab-monitor: runsv not running&lt;br /&gt;fail: gitlab-workhorse: runsv not running&lt;br /&gt;fail: logrotate: runsv not running&lt;br /&gt;fail: nginx: runsv not running&lt;br /&gt;fail: node-exporter: runsv not running&lt;br /&gt;fail: postgres-exporter: runsv not running&lt;br /&gt;fail: postgresql: runsv not running&lt;br /&gt;fail: prometheus: runsv not running&lt;br /&gt;fail: redis: runsv not running&lt;br /&gt;fail: redis-exporter: runsv not running&lt;br /&gt;fail: registry: runsv not running&lt;br /&gt;fail: sidekiq: runsv not running&lt;br /&gt;fail: unicorn: runsv not running&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Solution&lt;/h3&gt;
&lt;p&gt;sudo systemctl start gitlab-runsvdir&lt;br /&gt;&lt;br /&gt;sudo gitlab-ctl restart&lt;/p&gt;</description>
      <category>Linux/Solution</category>
      <category>Linux</category>
      <category>Ubuntu 18.04</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/11</guid>
      <comments>https://embedded-mg.tistory.com/11#entry11comment</comments>
      <pubDate>Thu, 10 Dec 2020 05:40:33 +0900</pubDate>
    </item>
    <item>
      <title>[Verilog] #3-1 Structural Modeling (Gate level Modeling)</title>
      <link>https://embedded-mg.tistory.com/10</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Structural Modeling&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;Verilog로 코드를 구현하는 방법 중에서 가장 먼저 소개할 방법은 Structural Modeling이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 방법은 논리 게이트를 사용하여 모델을 구현하는 가장 낮은 레벨(Low level)의 코딩방식이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;디지털 논리회로 과목에서 배우는 논리회로를 이용하여 실제로 회로도를 그리듯이 프로그래밍 한다.&lt;/p&gt;
&lt;p&gt;코드가 매우 직관적이며 다른 방법에 경우 합성(&lt;span&gt;synthesis&lt;/span&gt;)이과 구현(Implementaion) 과정에서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;불필요한 회로가 포함되는 최적화 문제가 발생할 수 있지만, 지금 소개하는 방법은 코드가 결과에 그대로 반영된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 본인의 능력이 되고 시간이 많다면 Structural Modeling으로 회로를 최적화하여 구현하는 것도 방법이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Structural Modeling에는 Gate-level Modeling과 Switch-level Modeling이 있는데,&lt;/p&gt;
&lt;p&gt;이번 글에서는 게이트 레벨 모델링에 대해서만 설명하고 스위치 레벨 모델링에 대해서는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다른 글을 통해서 혹은 추후에 글 밑에 추가하도록 하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Gate Primitives&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;Verilog에서 지원하는 12개의 Logic Gate Primitives를 이용하여 코드를 구현한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Primitives는 기본적으로 Verilog에서 미리 정의되어있는 논리게이트 모듈을 의미한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;AND / OR 게이트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;출력: 1개 / 입력: 多개&amp;nbsp;&lt;/p&gt;
&lt;p&gt;관련 모듈: and / or / xor / nana / nor / xnor&lt;/p&gt;
&lt;p&gt;&lt;b&gt;and&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;or&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;nand&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;xor&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;nor&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;xnor&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[instance name] (output, input1, &amp;hellip;.., inputn);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;논리연산에 가장 기초가 되는 게이트이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNLW7p/btqPsDwaaeO/dEACI9SOIcmCYFNrNK0m00/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNLW7p/btqPsDwaaeO/dEACI9SOIcmCYFNrNK0m00/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNLW7p/btqPsDwaaeO/dEACI9SOIcmCYFNrNK0m00/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bNLW7p/btqPsDwaaeO/dEACI9SOIcmCYFNrNK0m00/img.gif&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Buf / Not 게이트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;출력: 1개 / 입력: 1 or 多개&lt;/p&gt;
&lt;p&gt;관련 모듈: buf / not / bufif / notif / bufif1 / notf1&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;not | buf&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;[instance name] (output 1, output2, &amp;hellip;.., output n, input);&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;bufif1&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;bufif0&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;notif1&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;notif0&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;[instance name] (output, input, control);&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;if가 붙은 모듈의 경우 제어신호(control signal)에 따라서 출력을 제어하게 된다.&lt;/p&gt;
&lt;p&gt;if0은 control signal이 0일 때 동작하고 (Active low)&amp;nbsp;if1은 &lt;span style=&quot;color: #333333;&quot;&gt;control signal이 1일 때 동작한다. (Active High)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래 진리표에서 Z는 High Impedance로 High도 Low도 아닌 Floating한 값을 의미한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;X는 알려지지 않은 혹은 초기화되지 않은 값을 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crz3nR/btqPDIJfsm1/FuPQcyYjXWNQ7gNovkAP91/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crz3nR/btqPDIJfsm1/FuPQcyYjXWNQ7gNovkAP91/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crz3nR/btqPDIJfsm1/FuPQcyYjXWNQ7gNovkAP91/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/crz3nR/btqPDIJfsm1/FuPQcyYjXWNQ7gNovkAP91/img.gif&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LnKE9/btqPC1WzC1R/bVA8OugKdZaxhnBLoH9mD0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LnKE9/btqPC1WzC1R/bVA8OugKdZaxhnBLoH9mD0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LnKE9/btqPC1WzC1R/bVA8OugKdZaxhnBLoH9mD0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/LnKE9/btqPC1WzC1R/bVA8OugKdZaxhnBLoH9mD0/img.gif&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Code Implementation&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;사용한 모듈의 이름은 적고 인스턴트 이름을 짓고 인자를 받으면 된다.&lt;/p&gt;
&lt;p&gt;모든 게이트들은 출력을 맨 앞의 인자로 받도록 구성되어 있고 게이트에 따라서 입력의 수가 다르다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex) and and1(out, input1, input2);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Array Instantiation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;사용하고자 하는 모듈이 1bit만 처리할 경우 모듈을 배열로 인스턴트화 할 수 있다.&lt;/p&gt;
&lt;p&gt;아래의 예시 코드를 참조하자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dl2X7/btqPFVgYRZN/6Q77qU7SHkbCiaPKcwIl81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dl2X7/btqPFVgYRZN/6Q77qU7SHkbCiaPKcwIl81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dl2X7/btqPFVgYRZN/6Q77qU7SHkbCiaPKcwIl81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDl2X7%2FbtqPFVgYRZN%2F6Q77qU7SHkbCiaPKcwIl81%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1-bit Full Adder&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XlZ4I/btqPwmtSIWa/BrMSfVoBAijkJ3kXDni4NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XlZ4I/btqPwmtSIWa/BrMSfVoBAijkJ3kXDni4NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XlZ4I/btqPwmtSIWa/BrMSfVoBAijkJ3kXDni4NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXlZ4I%2FbtqPwmtSIWa%2FBrMSfVoBAijkJ3kXDni4NK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Hardware/FPGA</category>
      <category>gate</category>
      <category>Gate-level Modeling</category>
      <category>Structural Modeling</category>
      <category>Verilog</category>
      <category>베릴로그</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/10</guid>
      <comments>https://embedded-mg.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 9 Dec 2020 02:28:08 +0900</pubDate>
    </item>
    <item>
      <title>[Verilog] #2 테스트벤치 (Testbench)</title>
      <link>https://embedded-mg.tistory.com/8</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;테스트벤치 (Testbench)&lt;/h3&gt;
&lt;p&gt;테스트벤치란 우리가 베릴로그로 구현한 HDL 모델이 올바르게 동작하는지 검증하기 위한 시물레이터이다.&lt;/p&gt;
&lt;p&gt;구현한 모듈에 입력 신호를 넣고 출력 신호를 wire로 연결하면 입력 신호의 변화에 따른 출력 신호를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;보통은 시험하는 모듈의 이름 앞에 tb를 붙인다. ex) tb_adder&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uSJRE/btqPnbEW829/egiMGzbJWWSNWy4mkZXNSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uSJRE/btqPnbEW829/egiMGzbJWWSNWy4mkZXNSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uSJRE/btqPnbEW829/egiMGzbJWWSNWy4mkZXNSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuSJRE%2FbtqPnbEW829%2FegiMGzbJWWSNWy4mkZXNSK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;테스트벤치에는 입출력 포트가 없으며 initial block을 이용하여 SW처럼 순서대로 시간에 따른 동작을 구현하게 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;initial 구문&lt;/h3&gt;
&lt;p&gt;일반적으로 베릴로그로 작성된 코드를 시뮬레이션하게 되면 코드가 동시에 동작하지만&amp;nbsp;&lt;/p&gt;
&lt;p&gt;initial block 내부에 있는 코드는 시간 순서에 따라서 위에서 아래로 진행된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 특징으로 initial block은 절자적인(procedural) block이라고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 구문은 전체 시뮬레이션에서 한번만 실행되는 내용으로 초기화나 신호 값을 보기위해 사용된다.&lt;/p&gt;
&lt;p&gt;주의할 점은 실제 하드웨어는 멈추지 않고 계속 동작하므로 initial 구문은 오직 테스트용으로만 사용해야 한다.&lt;/p&gt;
&lt;p&gt;initial 구문은 begin - end로 묶어서 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;initial begin&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ~~~~~~~&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ~~~~~~~&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;end&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;~~~ 부분에 변수를 초기화하거나 시간에 따라 값을 변경해서 신호를 모니터링하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kZsef/btqPqkuUdY1/3XmwQ2IFnfOfzGIvKmsf1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kZsef/btqPqkuUdY1/3XmwQ2IFnfOfzGIvKmsf1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kZsef/btqPqkuUdY1/3XmwQ2IFnfOfzGIvKmsf1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkZsef%2FbtqPqkuUdY1%2F3XmwQ2IFnfOfzGIvKmsf1k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLtQOE/btqPnbydMOg/Ea5GP1hRM79K5N8VyT9NKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLtQOE/btqPnbydMOg/Ea5GP1hRM79K5N8VyT9NKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLtQOE/btqPnbydMOg/Ea5GP1hRM79K5N8VyT9NKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLtQOE%2FbtqPnbydMOg%2FEa5GP1hRM79K5N8VyT9NKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 코드에 대한 시뮬레이션 결과이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;초기에 모든 신호는 0으로 초기화 되었고 10ns단위로 A, SEL, B 신호가 1로 값이 바뀌었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;always 구문&lt;/h3&gt;
&lt;p&gt;initial block이 한번만 실행되는 구문이라면 always block은 계속 반복하여 내용을 실행하는 구문이다.&lt;/p&gt;
&lt;p&gt;initial block에서 초기화시킨 변수를 일정 시간마다 바뀌어줄 때 사용한다. ex) clock&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFBHk4/btqPe3IdEPo/auSvIlUtzkoLc46eoAFiuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFBHk4/btqPe3IdEPo/auSvIlUtzkoLc46eoAFiuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFBHk4/btqPe3IdEPo/auSvIlUtzkoLc46eoAFiuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFBHk4%2FbtqPe3IdEPo%2FauSvIlUtzkoLc46eoAFiuk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OBvd2/btqPnbrsnPk/EgXwecGlU4QQoKOO3Xdxk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OBvd2/btqPnbrsnPk/EgXwecGlU4QQoKOO3Xdxk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OBvd2/btqPnbrsnPk/EgXwecGlU4QQoKOO3Xdxk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOBvd2%2FbtqPnbrsnPk%2FEgXwecGlU4QQoKOO3Xdxk0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;reg 타입의 clock변수를 initial block에서 0으로 만들어주고 always block을 이용하여 5ns마다 토글되도록 하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;테스트벤치 결과 분석 명령어&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;$monitor&lt;/b&gt;: 신호 값이 바뀔 때 신호 값을 스크린에 출력한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $monitor (SEL, A, B, F); 이렇게 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;$time&lt;/b&gt;: 시간을 확인할 때 사용하는 명령어이다. $time을 변수처럼 사용하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt; $display&lt;/b&gt;: 변수, 문자열 등의 값을 표시한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;C언어의 printf처럼 %d, %b, %h, %o, %s, %m, %f를 반환자로 사용하여 변수 값을 받아서 출력할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;$monitoton&lt;/b&gt;: monitor를 실행한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;$monitotoff&lt;/b&gt;: monitor를 종료한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;$stop&lt;/b&gt;: 시뮬레이션을 중지한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;$finish&lt;/b&gt;: 시뮬레이션을 끝낸다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;stop은 잠시 종료하는 것이고, finish는 시뮬레이션을 완전히 종료된다.&lt;/p&gt;
&lt;p&gt;디버깅에는 $monitor나 $display가 주로 사용된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Time Scale&lt;/h3&gt;
&lt;p&gt;시뮬레이션에서는 특정한 시간단위로 동작할 것인지 설정할 수 있는데, 대게 맨 첫줄에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;`timescale time_unit / time_precision 이러한 형태로 존재한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;time_unit은 측정단위이고, &lt;span style=&quot;color: #333333;&quot;&gt;time_precision는 반올림을 어디서 할 것인지를 결정하는 요소이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예를 들어 10ns / 1ns로 되어있으면 #단위당 10ns로 측정하는 것으로&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#2.56라고 하면 2.56 x 10ns = 25.6ns가 되고 1ns단위로 반올림을 하므로 26ns가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#2.53라고 하면 2.53 x 10ns = 25.3ns가 되고 1ns단위로 반올림을 하므로 25ns가 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Hardware/FPGA</category>
      <category>Always</category>
      <category>initial</category>
      <category>TestBench</category>
      <category>time scale</category>
      <category>Verilog</category>
      <category>베릴로그</category>
      <category>테스트벤치</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/8</guid>
      <comments>https://embedded-mg.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 7 Dec 2020 09:26:44 +0900</pubDate>
    </item>
    <item>
      <title>[Verilog] #1 모듈 (Module)</title>
      <link>https://embedded-mg.tistory.com/5</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Port Declaration&lt;/h3&gt;
&lt;p&gt;모듈을 설명하기 앞서서 기본적인 내용인 포트에 대해서 설명하려고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지난시간에도 설명하였지만, 모듈의 입출력 타입은 3가지가 존재한다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;input:&lt;/b&gt; input ports&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;output:&lt;/b&gt; output ports&lt;/p&gt;
&lt;p&gt;&lt;b&gt;inout:&lt;/b&gt; bidirectional ports&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(필자는 용역을 여러번 해봤지만, 아직까지 inout을 써보지 못했다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0ZJC9/btqPnbETwqn/ZA5QxnsKlckk6lsc15xgR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0ZJC9/btqPnbETwqn/ZA5QxnsKlckk6lsc15xgR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0ZJC9/btqPnbETwqn/ZA5QxnsKlckk6lsc15xgR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0ZJC9%2FbtqPnbETwqn%2FZA5QxnsKlckk6lsc15xgR1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;input&lt;/b&gt;의 경우 외부에서 들어오는 형태는 상관이 없지만, 내부에서는 net(wire)타입이여야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;inout&lt;/b&gt;의 경우 외부에서 net타입으로 들어와야하고 모듈 내부에서도 net타입이여야 한다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;output&lt;/b&gt;의 경우 내부에서는 reg나 net 상관없지만 외부에서는 net으로 받아야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기본적으로 변수들은 wire로 설정되는데 출력단에서 값을 유지하기 위해서는 기억소자인 reg를 사용해야 한다.&lt;/p&gt;
&lt;p&gt;wire의 경우 전선이고 단순하게 값을 연결만 해주는 것으로 생각하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Port Connection Rules&lt;/h3&gt;
&lt;p&gt;각각의 모듈(Component)을 가져오는(Instantiation) 방법에는 2가지가 존재한다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Positional Association&lt;/b&gt;: 내연적인(Implicit) 방법으로 각 변수들의 위치에 따라서 연결하는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Named Association&lt;/b&gt;: 외연적인(Explicit) 방법으로 이름에 따라서 연결하는 방법이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crkyH0/btqPeoeMdTi/Tskn3UCndFq9XttkiOdY4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crkyH0/btqPeoeMdTi/Tskn3UCndFq9XttkiOdY4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crkyH0/btqPeoeMdTi/Tskn3UCndFq9XttkiOdY4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrkyH0%2FbtqPeoeMdTi%2FTskn3UCndFq9XttkiOdY4k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;앞 시간에 배운 adder를 예를 들어 설명하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;adder 모듈에는 sum, c_out, a, b, c_in 5개의 변수가 존재하는데&lt;/p&gt;
&lt;p&gt;순서대로 변수를 넣을 경우 Positional &lt;span style=&quot;color: #333333;&quot;&gt;Association&lt;/span&gt;이고 이름에 따라서 넣을 경우 Named Association이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Module&lt;/h3&gt;
&lt;p&gt;모듈은 특정한 기능을 하는 프로그램으로 생각해도 좋고 프로그래밍에서의 함수와 비슷한 개념이다.&lt;/p&gt;
&lt;p&gt;베릴로그에는 함수(function)과 테스트(task)와 서브모듈(submodule)이 존재하므로&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실제로는 함수, 테스크, 서브모듈 -&amp;gt; 모듈 -&amp;gt; 프로그램(FPGA)라고 생각하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zl89I/btqPsEs0DBL/v8HbVa6x0One5h9BGrsIZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zl89I/btqPsEs0DBL/v8HbVa6x0One5h9BGrsIZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zl89I/btqPsEs0DBL/v8HbVa6x0One5h9BGrsIZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzl89I%2FbtqPsEs0DBL%2Fv8HbVa6x0One5h9BGrsIZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림과 같이 Half Adder 모듈을 만들어 보도록 하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;179&quot; data-origin-height=&quot;216&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpwtR4/btqPenz7omk/PVkIMcfit3P8z32sEjy8kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpwtR4/btqPenz7omk/PVkIMcfit3P8z32sEjy8kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpwtR4/btqPenz7omk/PVkIMcfit3P8z32sEjy8kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpwtR4%2FbtqPenz7omk%2FPVkIMcfit3P8z32sEjy8kK%2Fimg.png&quot; data-origin-width=&quot;179&quot; data-origin-height=&quot;216&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;모든 변수의 경우 wire타입으로 구성되어 있고 수식에 맞게 출력 값에 입력 값을 연산하여 대입해주었다.&lt;/p&gt;
&lt;p&gt;위 모듈이 맞게 동작하는지 확인하는 방법으로는 테스트벤치를 이용하여 시뮬레이션 하는 방법이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음시간에는 테스트벤치를 이용하여 모듈을 테스트하는 방법에 대해서 소개하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이후에는 베릴로그에서 모델링하는 방법 3가지에 대해서 설명하도록 하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;순서: Testbench-&amp;gt; Structural Modeling -&amp;gt; Dataflow Modeling -&amp;gt; Behavioral Modeling&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Hardware/FPGA</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/5</guid>
      <comments>https://embedded-mg.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 7 Dec 2020 04:58:32 +0900</pubDate>
    </item>
    <item>
      <title>[Verilog] #0 베릴로그(Verilog)란? / 데이터 타입(Data Types)</title>
      <link>https://embedded-mg.tistory.com/4</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;베릴로그(Verilog)란?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;베릴로그(Verilog)는 전자 회로 및 시스템에 쓰이는 하드웨어 기술 언어(HDL, Hardware Description Language)다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;회로를 설계할 때 사용하는 언어로, 하드웨어는 순차적으로 돌아가지 않고 Clock에 따라서 동시에 동작하므로&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;시간과 &lt;span&gt;동시성(concurrency)을 표현할 수 있고 컴파일 과정이 일반적인 프로그래밍언어와 다르다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;VHDL(VHSIC Hardware Description Language)도 있는데 위에서 설명한 Verilog HDL는 다르므로 주의하자!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;기본적인 문법은 C언어와 유사하다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;if, for, while과 같은 제어문을 사용할 수 있고 세부적인 문법에서는 차이점이 존재하지만&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;대부분 유사하게 사용가능하고 연산자도 거의 비슷하게 사용할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;한가지 차이점은 중괄호 대신에 begin ~ end를 사용하여 묶어준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span&gt;데이터 타입(Data Types)&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czxfhf/btqPsDVarQQ/aZPBuV8ytHlNvLKUKEH4UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czxfhf/btqPsDVarQQ/aZPBuV8ytHlNvLKUKEH4UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czxfhf/btqPsDVarQQ/aZPBuV8ytHlNvLKUKEH4UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczxfhf%2FbtqPsDVarQQ%2FaZPBuV8ytHlNvLKUKEH4UK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;베릴로그의 데이터 타입으로는 기억소자인 Register와 연결하는 선인 Net으로 구성되어 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Register는 값을 받아서 저장할 때 사용되고 Net은 신호를 연결할 때 사용한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;일반적으로 Input에는 reg타입을 사용하고 Output에는 wire타입을 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxyY8/btqPna64TC2/gTKUb8vZkOWOZRAdSDzRCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxyY8/btqPna64TC2/gTKUb8vZkOWOZRAdSDzRCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxyY8/btqPna64TC2/gTKUb8vZkOWOZRAdSDzRCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxyY8%2FbtqPna64TC2%2FgTKUb8vZkOWOZRAdSDzRCk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;벡터형으로 변수 앞에 [7:0], [0:31]과 같이 표현할 수 있다.&lt;/p&gt;
&lt;p&gt;wire [7:0] databus 변수의 경우 8-bit wire타입이고 변수명은 databus이다.&lt;/p&gt;
&lt;p&gt;reg [0:31] address 변수의 경우에는 32-bit이고 reg타입의 변수명은 address이다.&lt;/p&gt;
&lt;p&gt;[7:0] bus와&amp;nbsp; [0:7] bus의 차이점은 각각 상위비트(MSB)가 bus[7], bus[0]이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reg [0:7] B1, B2, B3를 보면 address의 벡터 중에서 일부를 골라서 사용할 수 있다는 것을 의미한다.&lt;/p&gt;
&lt;p&gt;자세한 문법에 대해서는 다음 시간에 배우고 이번에는 벡터의 일부를 짤라서 사용할 수 있다는 것을 알아두자!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;각 변수들을 입출력으로 사용하는 방법은 변수명 앞에 input과 output을 넣어주면 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;입출력을 동시에 사용하는 변수에 경우 inout을 사용하면 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdKIev/btqPsCorgsb/inwcVZk3FgddUh1PRYPP8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdKIev/btqPsCorgsb/inwcVZk3FgddUh1PRYPP8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdKIev/btqPsCorgsb/inwcVZk3FgddUh1PRYPP8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdKIev%2FbtqPsCorgsb%2FinwcVZk3FgddUh1PRYPP8K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEBAjZ/btqPqkBy7T6/AVko9MWHltARXY9OtovTXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEBAjZ/btqPqkBy7T6/AVko9MWHltARXY9OtovTXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEBAjZ/btqPqkBy7T6/AVko9MWHltARXY9OtovTXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEBAjZ%2FbtqPqkBy7T6%2FAVko9MWHltARXY9OtovTXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림처럼 모듈 안에 input, output을 적어도 되고, 모듈 안에는 변수만 적고 외부에 따로 표시해도 된다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;모듈 안에 변수를 넣는 순서는 output에서 input 순서대로 변수들을 넣어주는 것이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(gate level modeling에 사용되는 모듈은 대부분 처음에 오는 변수가 출력 값이다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Hardware/FPGA</category>
      <category>FPGA</category>
      <category>Verilog</category>
      <category>VHDL</category>
      <category>디지털신호처리</category>
      <category>베릴로그</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/4</guid>
      <comments>https://embedded-mg.tistory.com/4#entry4comment</comments>
      <pubDate>Mon, 7 Dec 2020 03:18:52 +0900</pubDate>
    </item>
    <item>
      <title>저작권 없는 이미지 사이트 정리</title>
      <link>https://embedded-mg.tistory.com/3</link>
      <description>&lt;p&gt;&lt;b&gt;1. 픽사베이&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pixabay.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;pixabay.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 언스플래시 (Unsplash)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://unsplash.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;unsplash.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1607273175716&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Beautiful Free Images &amp;amp; Pictures | Unsplash&quot; data-og-description=&quot;Beautiful, free images and photos that you can download and use for any project. Better than any royalty free or stock photos.&quot; data-og-host=&quot;unsplash.com&quot; data-og-source-url=&quot;https://unsplash.com/&quot; data-og-url=&quot;https://unsplash.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hsWQ6/hyItUvF2qI/ESb9eenYn9UcR2Eap4UL00/img.jpg?width=1080&amp;amp;height=1028&amp;amp;face=0_0_1080_1028,https://scrap.kakaocdn.net/dn/bsAzMx/hyItWG25nc/3KSKXzWJ8i80FZqEE3tybK/img.jpg?width=1080&amp;amp;height=1028&amp;amp;face=0_0_1080_1028,https://scrap.kakaocdn.net/dn/ieuB6/hyItQUmjbS/wsImhTBe8Fs6A586juryK1/img.jpg?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://unsplash.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://unsplash.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hsWQ6/hyItUvF2qI/ESb9eenYn9UcR2Eap4UL00/img.jpg?width=1080&amp;amp;height=1028&amp;amp;face=0_0_1080_1028,https://scrap.kakaocdn.net/dn/bsAzMx/hyItWG25nc/3KSKXzWJ8i80FZqEE3tybK/img.jpg?width=1080&amp;amp;height=1028&amp;amp;face=0_0_1080_1028,https://scrap.kakaocdn.net/dn/ieuB6/hyItQUmjbS/wsImhTBe8Fs6A586juryK1/img.jpg?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Beautiful Free Images &amp;amp; Pictures | Unsplash&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Beautiful, free images and photos that you can download and use for any project. Better than any royalty free or stock photos.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;unsplash.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 픽점보 (Picjumbo)&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://picjumbo.com/&quot;&gt;https://picjumbo.com/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1607273214485&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;picjumbo: Free Stock Photos&quot; data-og-description=&quot;Free stock photos and images for your projects and websites.️ Beautiful 100% free high-resolution stock images with no watermark.&quot; data-og-host=&quot;picjumbo.com&quot; data-og-source-url=&quot;https://picjumbo.com/&quot; data-og-url=&quot;https://picjumbo.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/87N7U/hyItL6zydV/Ej1VtLDDXDOhLdd2A27uf0/img.jpg?width=1570&amp;amp;height=825&amp;amp;face=0_0_1570_825&quot;&gt;&lt;a href=&quot;https://picjumbo.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://picjumbo.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/87N7U/hyItL6zydV/Ej1VtLDDXDOhLdd2A27uf0/img.jpg?width=1570&amp;amp;height=825&amp;amp;face=0_0_1570_825');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;picjumbo: Free Stock Photos&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Free stock photos and images for your projects and websites.️ Beautiful 100% free high-resolution stock images with no watermark.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;picjumbo.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4. 아임프리 (IM FREE)&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;http://imcreator.com/free&quot;&gt;http://imcreator.com/free&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1607285051213&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;IM Free - Free Website Templates, Free Images &amp;amp; More&quot; data-og-description=&quot;Free, only high quality, resources for website building &amp;amp; other design projects. Free images, free icons, free templates.&quot; data-og-host=&quot;imcreator.com&quot; data-og-source-url=&quot;http://imcreator.com/free&quot; data-og-url=&quot;http://imcreator.com/free&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/joX24/hyItUbqrkO/hvTUB1LUlHnWa276K9iwF1/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/rvQql/hyItNXEc9x/sGaj0a5LHTwiriCy6XyKsK/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300&quot;&gt;&lt;a href=&quot;http://imcreator.com/free&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://imcreator.com/free&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/joX24/hyItUbqrkO/hvTUB1LUlHnWa276K9iwF1/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/rvQql/hyItNXEc9x/sGaj0a5LHTwiriCy6XyKsK/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;IM Free - Free Website Templates, Free Images &amp;amp; More&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Free, only high quality, resources for website building &amp;amp; other design projects. Free images, free icons, free templates.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;imcreator.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;5. 스플릿샤이어 (SplitShire)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;a href=&quot;https://www.splitshire.com/&quot;&gt;https://www.splitshire.com/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1607285056209&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Free Stock Photos - SplitShire&quot; data-og-description=&quot;What would you do if you had amazing royalty free photos? Download free stock photos with no copyright restrictions and real look.&quot; data-og-host=&quot;www.splitshire.com&quot; data-og-source-url=&quot;https://www.splitshire.com/&quot; data-og-url=&quot;https://www.splitshire.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.splitshire.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.splitshire.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Free Stock Photos - SplitShire&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;What would you do if you had amazing royalty free photos? Download free stock photos with no copyright restrictions and real look.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.splitshire.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>미분류 기타</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/3</guid>
      <comments>https://embedded-mg.tistory.com/3#entry3comment</comments>
      <pubDate>Mon, 7 Dec 2020 01:47:13 +0900</pubDate>
    </item>
    <item>
      <title>뇌전도(EEG),  근전도(EMG), 안전위도(EOG), 망막전위(ERG)에 대해서</title>
      <link>https://embedded-mg.tistory.com/2</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;eeg-2680957_1280.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot; width=&quot;390&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ORTE2/btqPibrVijb/Sb49KR7ZksO3dqAbeGI23k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ORTE2/btqPibrVijb/Sb49KR7ZksO3dqAbeGI23k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ORTE2/btqPibrVijb/Sb49KR7ZksO3dqAbeGI23k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FORTE2%2FbtqPibrVijb%2FSb49KR7ZksO3dqAbeGI23k%2Fimg.jpg&quot; data-filename=&quot;eeg-2680957_1280.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot; width=&quot;390&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;바이오전자공학시간에 배운 뇌전도, 근전도, 안전위도, 망막전위에 대해서 정리하려고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;생체신호란?&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;인간이 살아가면서 발생하는 생체현상에 대해서 센서를 이용하여 측정한 신호를 의미한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;침습적(Invasive)&lt;/b&gt;한 방법과 &lt;b&gt;비침습적(Non-Invasive)&lt;/b&gt;한 방법이 있는데 각각의 차이는 다음과 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;침습적인 방법&lt;/b&gt;은 신호를 취득하기 위하여 인체 내부에 센서를 직접 연결하는 방법이고&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;비침습적인 방법&lt;/b&gt;은 신체 외부, 즉 피부를 통해서 생체신호를 측정하는 방법이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m1vTM/btqPlcjLzjB/doEQ44iIJ6oPhZ9josrwJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m1vTM/btqPlcjLzjB/doEQ44iIJ6oPhZ9josrwJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m1vTM/btqPlcjLzjB/doEQ44iIJ6oPhZ9josrwJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm1vTM%2FbtqPlcjLzjB%2FdoEQ44iIJ6oPhZ9josrwJk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;예를 들면 바늘을 이용하여 주사를 놓아 신호를 측정하면 침습적인 방법이고&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;위 그림처럼 빛을 이용하여 피부를 통해 맥파나 산소포화도를 측정하는 방법은 비침습적인 방법이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;이러한 생체정보는 크기가 매우 작고 각각의 조직들은 유기적으로 조성되서 있어서 구조가 복잡하다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;또한, 각 생체신호는 특성이나 주파수가 다르기 때문에 고유한 방법으로 측정해야 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;뇌전도 (EEG, Electroencephalography)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;뇌전도는 뇌의 전기적인 활동을 기록하는 전기생리학적인 측정방법을 말한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;신경세포인 뉴런의 내부에서 발생하는 전류에 따라 유도되는 전위를 측정하는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;485&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsYgfL/btqPenGQ7BN/F0bbYlsiYWwDE3x9ocduR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsYgfL/btqPenGQ7BN/F0bbYlsiYWwDE3x9ocduR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsYgfL/btqPenGQ7BN/F0bbYlsiYWwDE3x9ocduR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsYgfL%2FbtqPenGQ7BN%2FF0bbYlsiYWwDE3x9ocduR0%2Fimg.png&quot; width=&quot;485&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;두피 EEG (Scalp EEG)는 시냅스 말단에 흐르는 전류(Post-Synaptic currents)의 총 활성도를 측정하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(시냅스에 대해서는 추후에 업로드 정리하도록 하겠다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;시냅스 말단에 흐르는 전압은 EEG 신호를 발생시키지만, 뇌 속에는 많은 뉴런이 존재하므로&amp;nbsp;&lt;/p&gt;
&lt;p&gt;두피 EEG가 단일 덴드라이트나 뉴런의 활동을 결정하는 것은 불가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EEG는 주파수에 따라서 5가지 종류의 신호가 존재한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKm0EU/btqPgGMpL94/GJULoqPJcdSIokBmoLunL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKm0EU/btqPgGMpL94/GJULoqPJcdSIokBmoLunL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKm0EU/btqPgGMpL94/GJULoqPJcdSIokBmoLunL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKm0EU%2FbtqPgGMpL94%2FGJULoqPJcdSIokBmoLunL0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;delta;파 (Delta wave)&lt;/b&gt;: 0.5 ~ 3Hz의 주파수를 의미하며 깊은 잠을 잘 때 발생하는 신호이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일정하지 않으며 50uV로 진폭이 비교적 다른 신호에 비해서 높다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pRL2n/btqPdRIeOS2/IImdFiP1bncNkSNDVY4m0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pRL2n/btqPdRIeOS2/IImdFiP1bncNkSNDVY4m0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pRL2n/btqPdRIeOS2/IImdFiP1bncNkSNDVY4m0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpRL2n%2FbtqPdRIeOS2%2FIImdFiP1bncNkSNDVY4m0K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;theta;파 (Theta wave)&lt;/b&gt;: 4 ~ 7.99Hz의 주파수를 의미하며 잠을 잘 때 발생하는 신호이다.&lt;/p&gt;
&lt;p&gt;졸음파라고도 불리며 정서적으로 안정된 상태나, 얕은 수면상태에서 발생하는 신호이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Icgzl/btqPnastEU3/fh3nkShqiKP0skr4onP0ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Icgzl/btqPnastEU3/fh3nkShqiKP0skr4onP0ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Icgzl/btqPnastEU3/fh3nkShqiKP0skr4onP0ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIcgzl%2FbtqPnastEU3%2Ffh3nkShqiKP0skr4onP0ek%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;alpha;파 (Alpha wave)&lt;/b&gt;: 8 ~ 12Hz의 주파수를 의미하며 안정되고 긴장이 이완되었을 때 발생하는 신호이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7ESLH/btqPqkO6Hhd/rogvg3tOIkkFA2CMDtVDN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7ESLH/btqPqkO6Hhd/rogvg3tOIkkFA2CMDtVDN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7ESLH/btqPqkO6Hhd/rogvg3tOIkkFA2CMDtVDN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7ESLH%2FbtqPqkO6Hhd%2Frogvg3tOIkkFA2CMDtVDN0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;beta;파 (Beta wave)&lt;/b&gt;: 12 ~ 30Hz의 주파수를 의미하며 깨어있을 때나 일할때, 불안하거나 긴장할 때 발생하는 신호이다.&lt;/p&gt;
&lt;p&gt;활동하거나 바쁠 때, 불안한 생각을 할때 발생하게 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EipJq/btqPdRVFp3a/OPq06l2U10IhecF8p3lKt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EipJq/btqPdRVFp3a/OPq06l2U10IhecF8p3lKt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EipJq/btqPdRVFp3a/OPq06l2U10IhecF8p3lKt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEipJq%2FbtqPdRVFp3a%2FOPq06l2U10IhecF8p3lKt0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Gamma wave&lt;/b&gt;: 26 ~ 100Hz의 주파수를 의미하며 깜짝 놀랐거나 극도록 흥분한 상태를 나타낸다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;내용 작성 중....&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;근전도 (Electromyography)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;안전위도 (Electrooculography)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;망막전위 (Electroretinography)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Bioelectronics</category>
      <category>eeg</category>
      <category>Electroencephalography</category>
      <category>Electromyography</category>
      <category>EMG</category>
      <category>EOG</category>
      <category>erg</category>
      <category>근전도</category>
      <category>뇌전도</category>
      <category>막막전위</category>
      <category>안전위도</category>
      <author>개발자 H</author>
      <guid isPermaLink="true">https://embedded-mg.tistory.com/2</guid>
      <comments>https://embedded-mg.tistory.com/2#entry2comment</comments>
      <pubDate>Mon, 7 Dec 2020 01:26:33 +0900</pubDate>
    </item>
  </channel>
</rss>