<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Computing</title>
    <link>https://computing-jhson.tistory.com/</link>
    <description>안녕하세요. 컴퓨터, 소프트웨어, 하드웨어 관련 공부를 정리하기 위한 블로그 입니다. </description>
    <language>ko</language>
    <pubDate>Wed, 13 May 2026 07:37:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jhson989</managingEditor>
    <image>
      <title>Computing</title>
      <url>https://tistory1.daumcdn.net/tistory/5255470/attach/e0a5932725714448b935f40ec4732bd1</url>
      <link>https://computing-jhson.tistory.com</link>
    </image>
    <item>
      <title>DRAM Cell 정리 [2] (Transistor Gate, Short Channel Effect, RCAT, BCAT)</title>
      <link>https://computing-jhson.tistory.com/146</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;반도체 및 DRAM 설계를 공부하면서 정리한 내용으로 틀린 내용이 있을 수 있습니다. :)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;이전글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;a href=&quot;https://computing-jhson.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DRAM Cell 정리 [1] (1T1C Cell, Cell Array, Cell Layout)&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이전글에서 DRAM Cell을 구체적인 구현에 대해서 정리하였다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNBQwu/btsHZ8buqId/cOHAUqkvdoTo5uB7Hj2op0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNBQwu/btsHZ8buqId/cOHAUqkvdoTo5uB7Hj2op0/img.png&quot; data-alt=&quot;Fig 1. DRAM Cell Schematic [1]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNBQwu/btsHZ8buqId/cOHAUqkvdoTo5uB7Hj2op0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNBQwu%2FbtsHZ8buqId%2FcOHAUqkvdoTo5uB7Hj2op0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;245&quot; height=&quot;189&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 1. DRAM Cell Schematic [1]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DRAM Cell은 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;1T1C&lt;/b&gt; 구조로 &lt;/span&gt;1개의 &lt;b&gt;Transistor (Tr)&lt;/b&gt;와 1개의 &lt;b&gt;Capacitor (Cap)&lt;/b&gt;로 구성된다. &lt;b&gt;Cap&lt;/b&gt; 는 1 bit 데이터를 저장하는 &lt;b&gt;저장소&lt;/b&gt; 역할로, 전기가 &lt;b&gt;Cap &lt;/b&gt;에 모여있으면 1 bit를 비어있으면 0 bit를 의미한다. &lt;b&gt;Tr &lt;/b&gt;는 데이터를 쓸지 말지를 결정하는 &lt;b&gt;스위치&lt;/b&gt; 역할로, &lt;b&gt;Tr&lt;/b&gt; 가 On되면 &lt;b&gt;Cap&lt;/b&gt; 가 외부 회로와 연결되어 데이터를 쓰거나 데이터를 읽어올 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1T1C Cell은 &lt;b&gt;Word Line (WL)&lt;/b&gt;과 &lt;b&gt;Bit Line&lt;/b&gt; &lt;b&gt;(BL)&lt;/b&gt;을 통해 외부와 연결된다. &lt;b&gt;WL &lt;/b&gt;는 &lt;b&gt;Tr&lt;/b&gt; 의 Gate 단자와 연결되어 &lt;b&gt;Tr&lt;/b&gt; 를 키거나 끄는 역할을 수행한다. &lt;b&gt;WL&lt;/b&gt; 에 전압이 걸리면 &lt;b&gt;Tr&lt;/b&gt; 가 On되고 전압이 걸리지 않으면 &lt;b&gt;Tr&lt;/b&gt; 가 Off된다. &lt;b&gt;BL &lt;/b&gt;은 &lt;b&gt;Tr &lt;/b&gt;이 On되면 &lt;b&gt;Cap &lt;/b&gt;과 연결되며, &lt;b&gt;BL&lt;/b&gt; 을 통해 &lt;b&gt;Cap&lt;span&gt; &lt;/span&gt;&lt;/b&gt;에 데이터를 쓰거나 데이터를 읽어올 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Transistor Gate와 Short Channel Effect&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czQKaQ/btsIFGqpeD7/ZbFs4P3PTa8vS5Q9GjD2MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czQKaQ/btsIFGqpeD7/ZbFs4P3PTa8vS5Q9GjD2MK/img.png&quot; data-alt=&quot;Fig 2. 1T1C의 위, 옆에서 본 Layout&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czQKaQ/btsIFGqpeD7/ZbFs4P3PTa8vS5Q9GjD2MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczQKaQ%2FbtsIFGqpeD7%2FZbFs4P3PTa8vS5Q9GjD2MK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;299&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 2. 1T1C의 위, 옆에서 본 Layout&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 2.는 각각 1T1C DRAM Cell을 위, 아래에서 바로본 Layout이다. 반도체의 성능을 평가하기 위한 기준으로 주로 Performance(성능)-Power(소비전력)-Area(면적) (PPA)라고 하는 3가지 지표[3]를 사용한다. DRAM Cell Layout은 Area를 최소화하기 위해 두 개의 Cells이 하나의 BL을 공유하도록 구현된다. (8F2, 6F2 Cell Layout에 한하여..)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 디바이스의 성능을 향성시키기 위해 반도체 회사들은 Tr을 크기를 줄이는 방향으로 Tr 공정을 발전시켜 나갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- (Area 관점에서의 성능 향상) Tr이 작아질수록, 같은 영역에 더 많은 Tr을 형성됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Performance 관점에서의 성능 향상) &lt;/span&gt;Tr이 작아질수록, WL(Gate, Channel)의 길이가 감소해 Tr 반응 속도가 향상됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 반도체 생산 회사들은 더 작은 Tr을 생성하기 위해 발전해 나갔고 WL의 크기는 지속적으로 줄어들었다(파장 축소, Multi Patterning, etc.).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwP2dZ/btsIra6lFBl/pcMoj5QnbaDi2GSpJptzg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwP2dZ/btsIra6lFBl/pcMoj5QnbaDi2GSpJptzg1/img.jpg&quot; data-alt=&quot;Fig 3. Short Channel Effect [4]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwP2dZ/btsIra6lFBl/pcMoj5QnbaDi2GSpJptzg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwP2dZ%2FbtsIra6lFBl%2FpcMoj5QnbaDi2GSpJptzg1%2Fimg.jpg&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; loading=&quot;lazy&quot; width=&quot;522&quot; height=&quot;282&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 3. Short Channel Effect [4]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 Fig 3.과 같이 WL의 크기가 줄어들수록  WL 밑에 형성되는 Channel의 길이 (= 소스와 드레인 사이의 간격) 또한 줄어들게 된다. 소스와 드레인 사이의 간격이 계속 좁아지게 되다면, 어느 순간 드레인에 가해진 전압에 의해서도 소스의 전자가 드레인으로 이동하는 Short Channel Effect가 발생한다. 즉 게이트(WL)의 On-Off에 상관없이 누설 전류가 흐르게 되는 상황이 발생하게 된 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 Short Channel Effect에 의해 WL을 계속해서 줄일 수는 없게 된다. 따라서 이를 방지하면서도 Tr의 크기를 줄이기 위해서는 새로운 기법이 적용되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;RCAT과 BCAT&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vr7Kk/btsIqRMHz78/ZPNXk7EuOI3DXOnWgrsH41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vr7Kk/btsIqRMHz78/ZPNXk7EuOI3DXOnWgrsH41/img.png&quot; data-alt=&quot;Fig 4. 기본, RCAT, BCAT 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vr7Kk/btsIqRMHz78/ZPNXk7EuOI3DXOnWgrsH41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVr7Kk%2FbtsIqRMHz78%2FZPNXk7EuOI3DXOnWgrsH41%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;409&quot; height=&quot;286&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 4. 기본, RCAT, BCAT 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RCAT은 Recess Channel Array Transistor, BCAT은 Buried Channel Array Transistor의 약자이다. Fig 4.에서 볼 수 있듯, RCAT과 BCAT은 모두 Short Channel Effect를 해결하기 위해, Effective Channel Length를 늘리기 위한 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 4.의 기본 Tr은 Gate가 너무 작아지다보니 Channel의 길이가 매우 작게 형성된 것을 볼 수 있다. 따라서 Short Channel Effect가 발생하여 누설 전류가 생길 수 있으며, 심하면 Gate에 의해 On-Off 되는 Tr의 특성을 잃을 수 있다. 그에 비해 RCAT과 BCAT은 같은 길이의 WL에도 불구하고, Channel이 매우 길게 형성된 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RCAT의 R은 Recess로, 한국말로는 우묵하게 들어간 부분을 의미하는 영단어이다. 이름 그대로 실리콘 기판 (substrate)을 우묵하게 Etching하여 그 안까지 WL으로 채우는 기술이다. RCAT의 Variant로 S-RCAT도 존재한다. S-RCAT의 S는 Sphere를 의미하는데, RCAT의 끝부분을 아예 둥글게 더 Eching하여 Channel의 길이를 늘리는 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RCAT의 경우 WL와 Drain이 이웃하는 영역이 많아서 GIDL (&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Gate Induced Drain Leakage) 현상이 발생할 수 있다. GIDL[5]은 WL에 강한 음전압을 가하면 Drain으로 부터 Gate로 누설전류가 흐르는 현상으로, RCAT의 경우 WL과 Drain이 이웃하는 영역이 넓기에 GIDL 현상이 강하게 발생할 수 있다. &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;또한 기본 Tr과 RCAT 모두의 문제로 WL과 BL이 서로 이웃하게 존재하기에 WL과 BL 사이에 기생 Cap이 생길 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;BCAT은 RCAT의 이러한 단점을 보완하기 위한 기술이다. BCAT의 B는 Buried (i.e. 파묻힌)을 의미한다. WL 자체를 아예 실리콘 기판안에 형성한다. Source와 Drain사이는 아예 절연체로 채워버린다. 이를 통해 BCAT의 WL은 Drain과 BL 모두에게서 멀어지게 된다. RCAT의 장점을 그대로 가져가면서 단점은 보완할 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;[1]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.microcontrollertips.com/dram-vs-sram/&quot;&gt;https://www.microcontrollertips.com/dram-vs-sram/&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[2] &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;S. Slesazeck, U. Schroeder and T. Mikolajick, &quot;Embedding hafnium oxide based FeFETs in the memory landscape,&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;2018 International Conference on IC Design &amp;amp; Technology (ICICDT)&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;, Otranto, Italy, 2018, pp. 121-124, doi: 10.1109/ICICDT.2018.8399771.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[3] &lt;a href=&quot;https://news.samsungsemiconductor.com/kr/%ec%82%bc%ec%84%b1%ec%a0%84%ec%9e%90-%ec%84%b8%ea%b3%84-%ec%b5%9c%ec%b4%88-3%eb%82%98%eb%85%b8-%ed%8c%8c%ec%9a%b4%eb%93%9c%eb%a6%ac-%ec%96%91%ec%82%b0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.samsungsemiconductor.com/kr/%ec%82%bc%ec%84%b1%ec%a0%84%ec%9e%90-%ec%84%b8%ea%b3%84-%ec%b5%9c%ec%b4%88-3%eb%82%98%eb%85%b8-%ed%8c%8c%ec%9a%b4%eb%93%9c%eb%a6%ac-%ec%96%91%ec%82%b0/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[4] &lt;a href=&quot;https://news.skhynix.co.kr/post/short-channel-effect&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.skhynix.co.kr/post/short-channel-effect&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[5] &lt;a href=&quot;https://www.sciencedirect.com/topics/engineering/gate-induced-drain-leakage&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.sciencedirect.com/topics/engineering/gate-induced-drain-leakage&lt;/a&gt;&lt;/p&gt;</description>
      <category>Semiconductor/jhFAB</category>
      <category>BCAT</category>
      <category>BL</category>
      <category>channel</category>
      <category>DRAM</category>
      <category>Gate</category>
      <category>RCAT</category>
      <category>Semiconductor</category>
      <category>shortchanneleffect</category>
      <category>WL</category>
      <category>반도체</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/146</guid>
      <comments>https://computing-jhson.tistory.com/146#entry146comment</comments>
      <pubDate>Sun, 7 Jul 2024 20:18:22 +0900</pubDate>
    </item>
    <item>
      <title>DRAM Cell 정리 [1] (1T1C Cell, Cell Array, Cell Layout)</title>
      <link>https://computing-jhson.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;반도체 및 DRAM 설계를 공부하면서 정리한 내용으로 틀린 내용이 있을 수 있습니다. :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1T1C Cell &amp;amp; Cell Array Schematic&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvONFZ/btsHVHZvxJn/oJ5CB8QySScslA6N3ydyfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvONFZ/btsHVHZvxJn/oJ5CB8QySScslA6N3ydyfK/img.png&quot; data-alt=&quot;Fig 1. DRAM Cell Schematic [1]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvONFZ/btsHVHZvxJn/oJ5CB8QySScslA6N3ydyfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvONFZ%2FbtsHVHZvxJn%2FoJ5CB8QySScslA6N3ydyfK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;327&quot; height=&quot;252&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 1. DRAM Cell Schematic [1]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 1. 은 DRAM Cell과 Cell들의 배치를 나타내는 Schematic diagram이다. DRAM Cell 하나는 1 Transistor &amp;amp; 1 Capacitor (&lt;b&gt;1T1C 구조&lt;/b&gt;)로 이루어진다[2].&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://computing-jhson.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이전글&lt;/a&gt;에서도 정리하였는데, &lt;b&gt;Capacitor&lt;/b&gt;는 전기 신호 1 또는 0을 저장하는 기억소자 역할을 담당한다. Capacitor에 일정량 이상의 전하가 충전되면 1이 저장되었음을 의미한다. 반대로 Capacitor가 방전되었을 때에는 0이 저장되었음을 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transistor&lt;/b&gt; (NMOS)는 전자가 Capacitor에 쌓이거나 혹은 방출되도록 조절하는 스위치 역할을 담당한다. Fig 1.을 보면 Transistor의 Gate단자는 Word Line에, Source (Drain) 단자는 Bit Line에 연결되었음을 확인할 수 있다. Transistor는 Word Line에 들어오는 신호를 기반으로 Capacitor와 Bit Line 사이를 연결하거나 끊는다. Word Line이 On이 될 경우, Bit Line과 Capacitor 간에 전자 이동이 가능하여 Bit line에서 Capacitor으로 전자가 이동하거나 (데이터가 저장됨), 혹은 Capacitor에서 Bit line으로 전자가 이동한다 (데이터를 읽음).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmwdvt/btsHVD3TmdZ/7tcDw536r8lZTpuNG5VyZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmwdvt/btsHVD3TmdZ/7tcDw536r8lZTpuNG5VyZk/img.png&quot; data-alt=&quot;Fig 2. DRAM Cell Array Schematic [1]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmwdvt/btsHVD3TmdZ/7tcDw536r8lZTpuNG5VyZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmwdvt%2FbtsHVD3TmdZ%2F7tcDw536r8lZTpuNG5VyZk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;397&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 2. DRAM Cell Array Schematic [1]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1T1C DRAM Cell&lt;/b&gt;은 1bit (1 or 0) 만큼의 데이터를 저장할 수 있다. 1bit 데이터를 저장할 수 있는 Cell을 무수히 많이 반복 배치하면 GB 단위 이상의 더 큰 용량의 데이터를 저장할 수 있는 DRAM 제품이 된다. 이러한 Cell들의 반복 배치를 Cell Array라고 한다. Fig 2.은 Cell Array를 나타내는 Schematic Diagram이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 말한 것처럼, Word Line은 Cell을 키고 끄는 역할을 수행한다. 만약 Read 모드에서 Word Line 3에 전압을 가한다면, Word Line 3에 연결된 모든 Cell들의 Capacitor가 Bit line들과 연결된다. 이후 Cell들에 저장된 데이터가 Bit Line을 통해 Sense Amplifier에 전달된다. 최종적으로 이 데이터를 우리가 읽을 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DRAM Cell Layout&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doj2Is/btsHZSmf7bq/HP0LSdHPO3VZnPZyDdbyl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doj2Is/btsHZSmf7bq/HP0LSdHPO3VZnPZyDdbyl1/img.png&quot; data-alt=&quot;Fig 3. 1T1C Cell Layout&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doj2Is/btsHZSmf7bq/HP0LSdHPO3VZnPZyDdbyl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdoj2Is%2FbtsHZSmf7bq%2FHP0LSdHPO3VZnPZyDdbyl1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;244&quot; height=&quot;375&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 3. 1T1C Cell Layout&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 3.은 1T1C DRAM Cell 2개를 나타내는 Layout을 표현한 Diagram이다. Fig 3.는 2개의 Cells (Cell 1, Cell 2) 을 동시에 포함하고 있다. 이때 2개의 Cells이 하나의 Bit line을 공유하는 것을 알 수 있다. 일반적으로 (8F2, 6F2 DRAM Array, etc.) Cell Array Layout을 그릴 때 위와 같이 2개의 Cells이 하나의 Bit line (&lt;b&gt;BL&lt;/b&gt;) 을 공유하게끔 드로잉하여 공간 절약을 달성한다고 한다. Cell 1과 Cell 2의 경우 각기 다른 Word Line (&lt;b&gt;WL&lt;/b&gt;) 에 연결되어 있기에 2개의 Cells이 모두 동시에 Bit Line과 연결될 일이 절대 없기 때문에 가능한 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cell 1을 보면 1개의 Cell은 하나의 Transistor (1 WL, 1 BL) 와 하나의 Capacitor로 구성되어 있음을 확인할 수 있다. 이때 Transistor가 형성되는 영역을 Active Area라고 한다. Transistor의 Source/Drain 부분 위로 MOS Capacitor가 형성된다. MOS Capacitor를 형성하기 위한 방법은 다음과 같다. Active 영역에 N+로 highly 도핑한다. 그 위에 dielectric을 형성, 마지막으로 polysilcon을 다시 형성한 후 도핑(Metal과 같은 역할을 하도록) 하는 방식으로 capacitor를 구현한다. (다만 현재는 또다른 방식으로 구현한다고 하니 점점 정리해 나가도록 하겠다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://www.microcontrollertips.com/dram-vs-sram/&quot;&gt;https://www.microcontrollertips.com/dram-vs-sram/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_random-access_memory#Memory_cell_design&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Dynamic_random-access_memory#Memory_cell_design&lt;/a&gt;&lt;/p&gt;</description>
      <category>Semiconductor/jhFAB</category>
      <category>Capacitor</category>
      <category>cell</category>
      <category>DRAM</category>
      <category>Semiconductor</category>
      <category>transistor</category>
      <category>반도체</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/145</guid>
      <comments>https://computing-jhson.tistory.com/145#entry145comment</comments>
      <pubDate>Sun, 16 Jun 2024 13:07:00 +0900</pubDate>
    </item>
    <item>
      <title>반도체 제조 공정 단계별 정리 (웨이퍼 제조, 프론트엔드, 백엔드 공정)</title>
      <link>https://computing-jhson.tistory.com/144</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;반도체 제품 생산을 위한 공정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://computing-jhson.tistory.com/34&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이전 글&lt;/a&gt;에서 반도체 [8대 공정]에 대해서 정리하였다. [8대 공정]은 반도체 제조를 위한 필수 기술들의 리스트이다. 반도체 제조를 위한 실제 공정은 이러한 [8대 공정]들을 조합하여 만들어진다. 반도체 공정을 기술이 아닌, 단계별로 간단하게 정리하자면 다음과 같이 3단계로 나눌 수 있다[1,2,3,4].&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 웨이퍼 제조 공정 (Wafer manufacturing)&lt;br /&gt;2. 프론트엔드 공정 (Front-end Process) : 반도체 디바이스(소자) 제조 공정 (FEOL, BEOL로 구성됨)&lt;br /&gt;3. 백엔드 공정 (Back-end Process) : 패키징 및 테스트 공정&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/twMom/btsHmwwJcf9/RduEZdkb3wbNiJHqLo0v00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/twMom/btsHmwwJcf9/RduEZdkb3wbNiJHqLo0v00/img.png&quot; data-alt=&quot;Fig 1. 간략화된 3단계 반도체 제조 공정&amp;amp;nbsp; [3]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/twMom/btsHmwwJcf9/RduEZdkb3wbNiJHqLo0v00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtwMom%2FbtsHmwwJcf9%2FRduEZdkb3wbNiJHqLo0v00%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;316&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 1. 간략화된 3단계 반도체 제조 공정&amp;nbsp; [3]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 1. 위 3 단계 제조공정을 그림으로 잘 표현한다. 반도체 제조 회사들은 Fig 1.과 같은 3 단계 제조 공정을 거쳐 모래(실리콘)[5]에서부터 CPU, GPU, 메모리 등의 복잡한 디바이스를 생산한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;웨이퍼 제조 공정 Wafer Manufacturing Process&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[웨이퍼 제조 공정]은 반도체 소자 및 회로를 형성하기 위한 기판이 되는 웨이퍼를 제조하는 단계이다. 반도체 [8대 공정] 중 첫 번째인 [웨이퍼 제조] 공정에 해당하는 공정 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9LfPN/btsHnK1I5UN/7oiBhy1wTv6tnZFY8mf621/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9LfPN/btsHnK1I5UN/7oiBhy1wTv6tnZFY8mf621/img.png&quot; data-alt=&quot;Fig 2. 웨이퍼 제조 공정 [6]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9LfPN/btsHnK1I5UN/7oiBhy1wTv6tnZFY8mf621/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9LfPN%2FbtsHnK1I5UN%2F7oiBhy1wTv6tnZFY8mf621%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;524&quot; height=&quot;273&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 2. 웨이퍼 제조 공정 [6]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;웨이퍼는 실리콘[5]으로 부터 만들어진다.&lt;span&gt; 모래로 부터 웨이퍼의 원료가 되는 실리콘을 추출한다. 추출된 실리콘을 녹여서 둥근 기둥 형태의 잉곳(Ingot)을 제작한다. 잉곳은 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;초크랄스키법 등의 방법으로 형성하는데, 단결정 실리콘 시드 막대기를 녹은 실리콘에 넣고 회전시켜 만든다. (그렇기에 형태가 둥근 기둥이 됨) 이렇게 생성된 잉곳을 얇은 두께로 절단한다. 이렇게 절단된 한장 한장이 웨이퍼가 된다. 마지막으로 절단된 웨이퍼 표면을 매끄럽게 연마하면 웨이퍼가 완성된다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프론트엔드 공정 (Front-end Process, 전공정)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[프론트엔드 공정] 혹은 [전공정]은 웨이퍼 위에 반도체 디바이스(소자) 및 회로를 형성하는 단계이다. 우리가 일반적으로 생각하는 반도체 제조 공정에 해당한다. 프론트엔드 공정은 [8대 공정] 중 [2. 산화 공정] [3. 포토 공정] [4. 식각 공정] [5. 증착 &amp;amp; 이온 주입 공정] [6. 금속배선 공정] 을 이용하여 진행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트엔드 공정은 Fig 1.과 같이 크게 두 가지 단계로 나눠진다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. Front-end of Line (FEOL)&lt;br /&gt;2. Back-end of Lien (BEOL)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FEOL과 BEOL에서도 Front-end와 Back-end 단어가 나와 헷깔릴 수 있는데, (반도체 소자를 형성하는) 프론트엔드 공정과 (패키징과 테스트를 담당하는) 백엔드 공정과 분명히 다른 것을 나타내는 단어이다. FEOL과 BEOL은 프론트엔드 공정의 하위 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7WRaJ/btsHjb6pJEl/0zaBenGSEZFmYr5Lgs34K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7WRaJ/btsHjb6pJEl/0zaBenGSEZFmYr5Lgs34K0/img.png&quot; data-alt=&quot;Fig 3. FEOL과 BEOL로 형성되는 부분 [7]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7WRaJ/btsHjb6pJEl/0zaBenGSEZFmYr5Lgs34K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7WRaJ%2FbtsHjb6pJEl%2F0zaBenGSEZFmYr5Lgs34K0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;646&quot; height=&quot;332&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 3. FEOL과 BEOL로 형성되는 부분 [7]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FEOL은 Transistor (트랜지스터), Capacitor (캐패시터) 등과 같은 핵심적인 반도체 소자를 웨이퍼 위에 형성하는 단계이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BEOL은 소자와 소자 간, 혹은 소자와 외부 접점과의 금속 배선 (Metal, Via) 을 형성하는 단계이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 과정을 통해 웨이퍼 위에 형성된 반도체 회로는 작동하는 회로가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;백엔드 공정 (Back-end Process, 후공정)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[백엔드 공정] 혹은 [후공정]은 프론트엔드 공정에서 생산된 반도체 소자 및 회로를 테스트하고 패키징하는 단계이다. [8대 공정] 중 [7. EDS 공정] [8. 패키징 공정]에 해당하는 단계이다. 전공정을 통해 회로가 형성된 웨이퍼는 후공정에서 잘 만들어졌는 지 테스트된다. 이후 웨이퍼를 개별 칩으로 만드는 패키지 단계를 진행하여, 최종 반도체 제품을 완성한다. 최근 반도체 집적화가 높아지고, 3D 반도체, Chiplet CPU, HBM 등 새로운 형태의 반도체 제품이 등장함에 따라 백엔드 공정이 더욱 중요해지고 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pMLM3/btsHnK8usoE/gvRiDktRdkGxoC1qX3UeSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pMLM3/btsHnK8usoE/gvRiDktRdkGxoC1qX3UeSK/img.png&quot; data-alt=&quot;Fig 4. 후공정: 테스트 및 패키지 [8]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pMLM3/btsHnK8usoE/gvRiDktRdkGxoC1qX3UeSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpMLM3%2FbtsHnK8usoE%2FgvRiDktRdkGxoC1qX3UeSK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;361&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 4. 후공정: 테스트 및 패키지 [8]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웨이퍼에 형성된 반도체 회로는 항상 정상 작동하지는 않는다. 따라서 웨이퍼 위에 형성된 반도체 회로가 정상 작동하는 지 테스트 하는 EDS 공정을 진행한다. EDS 공정에서는 프로브 카드를 웨이퍼에 접착시키고 전기를 흘려보낸다. 그 신호를 분석하여 각 칩이 정상 작동하는 지를 판단한다. 이후 불량 칩을 선별하고, 혹은 수선할 수 있는 불량 칩은 수선을 시도한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키징 공정에서는 웨이퍼를 개별 칩으로 자르고 (Die Sawaing &amp;amp; Grinding), 자른 개별 칩(Die)을 리드 프레임에 붙이고 (Die Attach), 외부와 연결되는 Interconnection을 붙인다. 이를 통해 최종적으로 작동하는 반도체 제품이 완성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://www.hitachi-hightech.com/global/en/knowledge/semiconductor/room/manufacturing/process.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.hitachi-hightech.com/global/en/knowledge/semiconductor/room/manufacturing/process.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] &lt;a href=&quot;https://namu.wiki/w/%EB%B0%98%EB%8F%84%EC%B2%B4%20%EA%B3%B5%EC%A0%95#toc&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://namu.wiki/w/%EB%B0%98%EB%8F%84%EC%B2%B4%20%EA%B3%B5%EC%A0%95#toc&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3] &lt;a href=&quot;https://news.skhynix.com/semiconductor-front-end-process-episode-2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.skhynix.com/semiconductor-front-end-process-episode-2/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[4] &lt;a href=&quot;https://amkorinstory.com/1049&quot;&gt;https://amkorinstory.com/1049&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[5] &lt;a href=&quot;https://news.skhynix.co.kr/post/silicone-from-sand&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.skhynix.co.kr/post/silicone-from-sand&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[6] &lt;a href=&quot;https://news.lxsemicon.com/5092&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.lxsemicon.com/5092&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[7] &lt;a href=&quot;https://www.researchgate.net/figure/Typical-split-manufacturing-arrangement-assuming-split-made-between-Metal-2-and-Metal_fig1_321608666&quot;&gt;https://www.researchgate.net/figure/Typical-split-manufacturing-arrangement-assuming-split-made-between-Metal-2-and-Metal_fig1_321608666&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[8] &lt;a href=&quot;https://news.skhynix.co.kr/post/seominsuk-column-test&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.skhynix.co.kr/post/seominsuk-column-test&lt;/a&gt;&lt;/p&gt;</description>
      <category>Semiconductor/반도체공정</category>
      <category>BEOL</category>
      <category>feol</category>
      <category>Semiconductor</category>
      <category>반도체</category>
      <category>백엔드공정</category>
      <category>웨이퍼</category>
      <category>전공정</category>
      <category>프론트엔드공정</category>
      <category>후공정</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/144</guid>
      <comments>https://computing-jhson.tistory.com/144#entry144comment</comments>
      <pubDate>Sat, 11 May 2024 22:43:53 +0900</pubDate>
    </item>
    <item>
      <title>[C++ STL] std::set을 통한 중복 제거 (Duplicate 판단 기준)</title>
      <link>https://computing-jhson.tistory.com/143</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;이전 글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://computing-jhson.tistory.com/133&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[STL] Set, Map Custom Sort 구현 방법 (Red-black tree)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 Set을 이용한 Custom Sort 구현 방법에 대해서 소개하였다. 윗 포스터와 같이 std::set은 Balanced Binary Tree (i.e. Red-Black Tree)를 기반으로 구현[1]되었기에 내부적으로 데이터들을 정렬하여 저장한다. 따라서 std::set을 정렬을 위한 용도로 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;std::set의 또다른 기능 : Duplicate 테스트 및 중복 제거&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::set은 정렬 용도 말고도 중복된 요소 제거를 위해 사용될 수 있다. 이는 Set 자료구조의 기본 특성인, std::set 내 저장된 데이터는 고유의 Key 값을 가져야 한다는 특성[2] 덕분이다. 즉 std::set 내 모든 데이터는 유일해야 하며 중복을 허용하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1715218137279&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::vector&amp;lt;int&amp;gt; vec;
... Do something

// no_dupl은 중복된 값을 가지지 않는다.
std::set&amp;lt;int&amp;gt; no_dupl( vec.begin(), vec.end() ); 

// 다시 no_dupl의 값을 vec에 저장한다.
vec.assign( s.begin(), s.end() );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 std::vector 내의 중복된 값을 std::set을 이용해 제거하는 간단한 코드이다. 단 두 줄이면 (vector -&amp;gt; set 변환, set -&amp;gt; vector 변환) std::vector 내에 저장된 중복된 요소들을 모두 제거할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;std::set의 duplicate 판단 기준&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::set은 내부적으로 정렬된 자료구조로 데이터를 저장하기에, 데이터 저장 시 데이터간 비교 연산자를 이용해 대소관계를 비교한다. 그렇다면 어떻게 두 데이터가 같은 지 (equivalent) 를 판단할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::set은 데이터 a, b가&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;!comp(a,&amp;nbsp;b)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!comp(b,&amp;nbsp;a).&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식을 만족할 때, 두 데이터 a, b가 동일하다고 판단[1][3]한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 Custom Sort를 개발할 시, 비교 연산자 opeartor&amp;lt; 만 정의해주면 되고, 비교 연산자 operator==는 정의해 줄 필요가 없다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://en.cppreference.com/w/cpp/container/set&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.cppreference.com/w/cpp/container/set&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;[2] &lt;a href=&quot;https://learn.microsoft.com/ko-kr/cpp/standard-library/set-class?view=msvc-170&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/cpp/standard-library/set-class?view=msvc-170&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;[3] &lt;a href=&quot;https://stackoverflow.com/questions/1114856/stdset-with-user-defined-type-how-to-ensure-no-duplicates&quot;&gt;https://stackoverflow.com/questions/1114856/stdset-with-user-defined-type-how-to-ensure-no-duplicates&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/C++</category>
      <category>duplicate</category>
      <category>equivalent</category>
      <category>set</category>
      <category>std::set</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/143</guid>
      <comments>https://computing-jhson.tistory.com/143#entry143comment</comments>
      <pubDate>Thu, 9 May 2024 22:40:09 +0900</pubDate>
    </item>
    <item>
      <title>[DRAM] DRAM 제품 세대 명칭 (1a, 1b, 1c.. 공정)</title>
      <link>https://computing-jhson.tistory.com/142</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;이전글&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://computing-jhson.tistory.com/141&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;반도체 선폭과 공정(14nm, 10nm, 7nm 공정의 의미)&lt;/span&gt;&lt;/a&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;반도체 공정과 DRAM 제품 세대 명칭&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 14nm, 10nm, 7nm 반도체 공정 등에 대해서 정리하였다. 14nm 공정 -&amp;gt; 10nm 공정 -&amp;gt; 7nm 공정 -&amp;gt; 3nm 공정 등 숫자가 작아질수록 선단 공정(최신 공정)을 의미한다. 삼성 파운드리 사업부, TSMC, Intel 파운드리 사업부 등 파운드리 업계에서는 이렇게 숫자를 이용해 반도체&amp;nbsp; 공정의 세대를 표현한다[1]. (7nm 공정, 3nm 공정 1세대, 3nm 공정 2세대 등등)&lt;br&gt;&amp;nbsp;&lt;br&gt;DRAM 반도체 제품도 마찬가지로 제품의 세대가 발전할수록 더 작은 숫자의 공정을 이용한다. 다만 이쪽 업계에서는 단순히 숫자로만 나타내지 않고, 1x, 1y, 1z, 1a, 1b, 1c ... 등등의 별도의 명칭을 이용해서 제품의 세대를 표현한다[2].&lt;br&gt;&amp;nbsp;&lt;br&gt;DRAM 반도체 제품의 세대 명칭의 의미는 다음과 같다.&lt;br&gt;- 1x : 18nm 공정과 동급 (10나노급 1세대) [3]&lt;br&gt;- 1y : 16nm 공정과 동급 (10나노급 2세대) [3]&lt;br&gt;- 1z : 15nm 공정과 동급 (10나노급 3세대) [3]&lt;br&gt;- 1a (or alpha) : 14nm 공정과 동급 (10나노급 4세대) [2]&lt;br&gt;- 1b (or beta) : 12~13nm 공정과 동급 (10나노급 5세대) [2]&lt;br&gt;- 1c (or gamma) : 11~12nm 공정과 동급 (10나노급 6세대) [2]&lt;br&gt;&amp;nbsp;&lt;br&gt;밑의 Fig 1.은 3대 DRAM 제조사별 제품 개발 로드맵이다. 글을 쓰는 현재 시점 1a, 1b가 최신 제품 D램에 주로 사용되는 공정이다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhcWb6/btsGMGm1PJZ/vDk9RtNELGjtGN1hltT0EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhcWb6/btsGMGm1PJZ/vDk9RtNELGjtGN1hltT0EK/img.png&quot; data-alt=&quot;Fig 1. DRAM 제조사별 제품 개발 로드맵&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhcWb6/btsGMGm1PJZ/vDk9RtNELGjtGN1hltT0EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhcWb6%2FbtsGMGm1PJZ%2FvDk9RtNELGjtGN1hltT0EK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;2156&quot; height=&quot;576&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 1. DRAM 제조사별 제품 개발 로드맵&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://namu.wiki/w/%ED%8C%8C%EC%9A%B4%EB%93%9C%EB%A6%AC%EA%B0%84%20%EA%B8%B0%EC%88%A0%EB%A0%A5%20%EB%B9%84%EA%B5%90&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://namu.wiki/w/%ED%8C%8C%EC%9A%B4%EB%93%9C%EB%A6%AC%EA%B0%84%20%EA%B8%B0%EC%88%A0%EB%A0%A5%20%EB%B9%84%EA%B5%90&lt;/span&gt;&lt;/a&gt;&lt;br&gt;[2] &lt;a href=&quot;https://news.skhynix.co.kr/post/expert-insights-dram-nand-prospect-1&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://news.skhynix.co.kr/post/expert-insights-dram-nand-prospect-1&lt;/span&gt;&lt;/a&gt;&lt;br&gt;[3] &lt;a href=&quot;https://brunch.co.kr/@jeejhzz/169&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://brunch.co.kr/@jeejhzz/169&lt;/span&gt;&lt;/a&gt;&lt;br&gt;[4] &lt;a href=&quot;https://in4.iue.tuwien.ac.at/pdfs/sispad2021/P03.pdf&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://in4.iue.tuwien.ac.at/pdfs/sispad2021/P03.pdf&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <category>Semiconductor/반도체공정</category>
      <category>DRAM</category>
      <category>공정</category>
      <category>디램</category>
      <category>반도체</category>
      <category>세대</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/142</guid>
      <comments>https://computing-jhson.tistory.com/142#entry142comment</comments>
      <pubDate>Sun, 21 Apr 2024 22:05:05 +0900</pubDate>
    </item>
    <item>
      <title>반도체 선폭과 공정(14nm, 10nm, 7nm 공정의 의미)</title>
      <link>https://computing-jhson.tistory.com/141</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;선단 공정과 반도체 선폭&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14nm 공정, 10nm 공정, 7nm 공정, 3nm 공정 까지. 반도체 공정은 이렇게 숫자를 이용해서 명칭되며, 숫자가 작아질수록 더 고도화된 선단 공정을 의미한다 (공정이 미세화된다고 함). 현재, 최신 프로세서의 경우 10nm, 7nm가 메인이며 3nm 수준의 공정이 개발 및 3nm 공정을 이용한 양산이 시작되고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B79GI/btsGNZyRfaM/bA0xVUav42L4dMkK3c2nGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B79GI/btsGNZyRfaM/bA0xVUav42L4dMkK3c2nGk/img.png&quot; data-alt=&quot;Fig 1. Channel length (Or Gate Length) [1]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B79GI/btsGNZyRfaM/bA0xVUav42L4dMkK3c2nGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB79GI%2FbtsGNZyRfaM%2FbA0xVUav42L4dMkK3c2nGk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;377&quot; height=&quot;271&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 1. Channel length (Or Gate Length) [1]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tbFyQ/btsGPaNob3A/LpOI2Qy5q48gpDL14dKhK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tbFyQ/btsGPaNob3A/LpOI2Qy5q48gpDL14dKhK0/img.png&quot; data-alt=&quot;Fig 2. 회로의 선폭 (Half-pitch) [2]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tbFyQ/btsGPaNob3A/LpOI2Qy5q48gpDL14dKhK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtbFyQ%2FbtsGPaNob3A%2FLpOI2Qy5q48gpDL14dKhK0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;172&quot; height=&quot;273&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig 2. 회로의 선폭 (Half-pitch) [2]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;반도체 공정을 설명하는 이 나노미터 숫자는 일반적으로 &lt;b&gt;채널의 길이 (Fig 1. Channel Length)&lt;/b&gt; 혹은 &lt;b&gt;회로의 선폭(Fig 2. Metal 배선과 배선과의 최소 거리, half-pitch)&lt;/b&gt; 을 의미한다. (후술하겠지만 이제는 일치하지 않는다고 함[3,4]) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Fig 1.에서 주황색 화살표(Channel Length)가 줄어들수록 트랜지스터의 크기는 감소한다. 혹은 Fig 2. 에서 선과 선 사이의 거리 (Half-pitch)가 감소하면 선들을 촘촘히 배치할 수 있다. 따라서 공정이 미세화될수록 같은 크기의 영역에 더 많은 트랜지스터와 회로를 넣을 수 있다고 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;다만 최근에는 공정의 숫자가 채널의 길이와 회로의 선폭과 정확히 일치하지 않고, 단순 최신 세대를 나타내는 마케팅 용어로 쓰인다고 한다[3][4]. 밑의 Table 1.은 공정별 예상되는 Pitch의 길이를 나타낸 숫자로 7nm 공정은 대략 40nm 정도 Pitch (Half-Pitch는 20nm)를 가진다. 이 수치 또한 트랜지스터의 종류 (MOSFET, FINFET, GAA...), 제조사 (TSMC, SEC, Intel..) 에 따라서도 달라진다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J1c5G/btsGMgIPQIE/9hGBqXIcu09d4XCIKxA0N0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J1c5G/btsGMgIPQIE/9hGBqXIcu09d4XCIKxA0N0/img.png&quot; data-alt=&quot;Table 1. 공정별 Pitch의 길이 [4]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J1c5G/btsGMgIPQIE/9hGBqXIcu09d4XCIKxA0N0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ1c5G%2FbtsGMgIPQIE%2F9hGBqXIcu09d4XCIKxA0N0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;252&quot; height=&quot;168&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Table 1. 공정별 Pitch의 길이 [4]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://news.skhynix.co.kr/post/short-channel-effect&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.skhynix.co.kr/post/short-channel-effect&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] &lt;a href=&quot;https://www.tel.com/museum/magazine/material/150227_report04_01/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.tel.com/museum/magazine/material/150227_report04_01/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3] &lt;a href=&quot;https://www.quora.com/Does-14nm-in-a-processor-mean-that-the-size-of-the-transistor-is-14nm-or-that-the-gap-between-the-transistors-is-14nm-What-are-some-valid-references&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.quora.com/Does-14nm-in-a-processor-mean-that-the-size-of-the-transistor-is-14nm-or-that-the-gap-between-the-transistors-is-14nm-What-are-some-valid-references&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[4] &lt;a href=&quot;https://en.wikipedia.org/wiki/2_nm_process&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/2_nm_process&lt;/a&gt;&lt;/p&gt;</description>
      <category>Semiconductor/반도체공정</category>
      <category>10nm</category>
      <category>14nm</category>
      <category>7nm</category>
      <category>반도체</category>
      <category>선폭</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/141</guid>
      <comments>https://computing-jhson.tistory.com/141#entry141comment</comments>
      <pubDate>Sun, 21 Apr 2024 21:17:18 +0900</pubDate>
    </item>
    <item>
      <title>[Vim] 여러 줄에 같은 글자 추가하기 (Multi line cursor, Multi line insert mode)</title>
      <link>https://computing-jhson.tistory.com/140</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;185&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyO7Ym/btsGMRn99ca/AcLn2g9L5TWVRJ9TrJeerk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyO7Ym/btsGMRn99ca/AcLn2g9L5TWVRJ9TrJeerk/img.png&quot; data-alt=&quot;Vim 로고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyO7Ym/btsGMRn99ca/AcLn2g9L5TWVRJ9TrJeerk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyO7Ym%2FbtsGMRn99ca%2FAcLn2g9L5TWVRJ9TrJeerk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;185&quot; height=&quot;186&quot; data-origin-width=&quot;185&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Vim 로고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;Vim을 쓰다보면 VScode의 multi-line cursor와 같은 기능이 있으면 좋겠다는 생각이 들 것이다. 자세히 찾아보니까 VScode의 multi-line cursor와 동일한 기능을 제공하는 Vim plugin이 존재하기에, 이것을 설치하면 된다고 한다. 하지만 Customize의 세계는 넓고 무서우니 일단 넘어가고 간단한 방법을 찾아보았다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;Multi-line Insert Mode&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;밑의 시나리오 1과 같이, 동일한 문자열(i.e. abc123)을 여러 줄에 걸쳐 동일한 위치에 추가하고자 한다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cleofh/btsGNqXTpDN/rAQkZKfkU1uLpI95KfgKS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cleofh/btsGNqXTpDN/rAQkZKfkU1uLpI95KfgKS1/img.png&quot; data-alt=&quot;시나리오 1 (모든 라인의 2번째 위치부터 문자열 abc123 추가하기)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cleofh/btsGNqXTpDN/rAQkZKfkU1uLpI95KfgKS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcleofh%2FbtsGNqXTpDN%2FrAQkZKfkU1uLpI95KfgKS1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;688&quot; height=&quot;138&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시나리오 1 (모든 라인의 2번째 위치부터 문자열 abc123 추가하기)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;1. 원하는 위치에 커서를 위치 시킨다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CFHjo/btsGPpXVPp3/nUom0dtRxp2Kvze5X0ryJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CFHjo/btsGPpXVPp3/nUom0dtRxp2Kvze5X0ryJK/img.png&quot; data-alt=&quot;2번째 위치에 abc123을 추가하고자 하니, 2번째에 커서를 위치시킴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CFHjo/btsGPpXVPp3/nUom0dtRxp2Kvze5X0ryJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCFHjo%2FbtsGPpXVPp3%2FnUom0dtRxp2Kvze5X0ryJK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;670&quot; height=&quot;146&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2번째 위치에 abc123을 추가하고자 하니, 2번째에 커서를 위치시킴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;2. [Ctrl + v] 를 눌려 [VISUAL BLOCK] 모드에 진입&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7189P/btsGMVxjMVO/DAPEA15xhKEF6ihIZaU5k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7189P/btsGMVxjMVO/DAPEA15xhKEF6ihIZaU5k0/img.png&quot; data-alt=&quot;[VISUAL BLOCK] 모드에 들어서면 왼쪽 밑에 VISUAL BLOCK 이라 표시됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7189P/btsGMVxjMVO/DAPEA15xhKEF6ihIZaU5k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7189P%2FbtsGMVxjMVO%2FDAPEA15xhKEF6ihIZaU5k0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;232&quot; height=&quot;219&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[VISUAL BLOCK] 모드에 들어서면 왼쪽 밑에 VISUAL BLOCK 이라 표시됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;3. 원하는 라인까지 커서 이동 (↓ 버튼)&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yL5vG/btsGNPbYuBW/OlRtVS4teCLXrmlK0p2yuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yL5vG/btsGNPbYuBW/OlRtVS4teCLXrmlK0p2yuk/img.png&quot; data-alt=&quot;원하는 라인까지 커서 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yL5vG/btsGNPbYuBW/OlRtVS4teCLXrmlK0p2yuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyL5vG%2FbtsGNPbYuBW%2FOlRtVS4teCLXrmlK0p2yuk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;654&quot; height=&quot;140&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원하는 라인까지 커서 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;4. [Shift + i] 입력&lt;br&gt;원하는 라인까지 선택된 상태에서&lt;b&gt; Shift키&lt;/b&gt;와 &lt;b&gt;소문자 i키&lt;/b&gt;를 &lt;b&gt;동시에&lt;/b&gt; 누르면 [VISUAL BLOCK] 모드에서 [Multi-line Insert] 모드로 돌입한다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z4ScT/btsGMGNZ2I3/fhsH95BKcYChLv8crGSr70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z4ScT/btsGMGNZ2I3/fhsH95BKcYChLv8crGSr70/img.png&quot; data-alt=&quot;[VISUAL BLOCK] -&amp;amp;amp;gt; [INSERT]로 변경됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z4ScT/btsGMGNZ2I3/fhsH95BKcYChLv8crGSr70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ4ScT%2FbtsGMGNZ2I3%2FfhsH95BKcYChLv8crGSr70%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;264&quot; height=&quot;174&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[VISUAL BLOCK] -&amp;amp;gt; [INSERT]로 변경됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;5. 원하는 글자를 입력한다.&lt;br&gt;커서의 앞에 문자열이 입력된다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxqoI5/btsGM8QKD0H/M8Q9kncsLh2Fh8mAexF9K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxqoI5/btsGM8QKD0H/M8Q9kncsLh2Fh8mAexF9K0/img.png&quot; data-alt=&quot;abc123을 입력한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxqoI5/btsGM8QKD0H/M8Q9kncsLh2Fh8mAexF9K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxqoI5%2FbtsGM8QKD0H%2FM8Q9kncsLh2Fh8mAexF9K0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;454&quot; height=&quot;230&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;abc123을 입력한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;6. [ESC] 2번 누르기&lt;br&gt;[ESC] 버튼을 2번 누르면, [INSERT] 모드를 벗어나며 원하는 라인까지 동일한 문자열이 추가된다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cszpG1/btsGNbzYhsr/gsIlEbOaIPdV7pMIRs14GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cszpG1/btsGNbzYhsr/gsIlEbOaIPdV7pMIRs14GK/img.png&quot; data-alt=&quot;문자열 추가 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cszpG1/btsGNbzYhsr/gsIlEbOaIPdV7pMIRs14GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcszpG1%2FbtsGNbzYhsr%2FgsIlEbOaIPdV7pMIRs14GK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;199&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문자열 추가 완료&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <category>Programming/일반</category>
      <category>IDE</category>
      <category>multiline</category>
      <category>multiline_cursor</category>
      <category>vim</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/140</guid>
      <comments>https://computing-jhson.tistory.com/140#entry140comment</comments>
      <pubDate>Sun, 21 Apr 2024 16:14:47 +0900</pubDate>
    </item>
    <item>
      <title>[토스환전] 대만 타오위안 공항 2터미널 (타이베이) 토스 무료 환전 위치</title>
      <link>https://computing-jhson.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;토스의 무료 ATM 인출을 믿고, 대만에 대만돈 환전 없이 도착했다.&lt;br&gt;결과는 성공적이었다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;lt;위치&amp;gt;&lt;br&gt;타오위안 공항의 토스 환전 무료 수수료로 인출 가능한 ATM의 위치는 MRT 탑승구 왼쪽에 있다.&lt;br&gt;- 입국장 나와서 오른쪽 에스컬레이터를 타고 한 층 내려간다. (에스컬레이터 옆에도 ATM이 하나있는데 줄이 길다.)&lt;br&gt;- 에스켈레이터를 내려가자 말자 앞에 빨간 간판의 타이완 은행 (Bank of Taiwan) ATM이 있다.&lt;br&gt;- 여기서 인출하면 된다.&amp;nbsp; (2024년 4월 기준 수수료 무료. 이후에 정책 변경이 있을 수 있음. 혹시 모르니 조금만 뽑아보는 것도 좋을 듯 하다)&lt;br&gt;(혹시라도 못찾으면, &lt;b&gt;&lt;span style=&quot;color: #EE2323;&quot;&gt;MRT 표지판을 따라 가면 된다&lt;/span&gt;&lt;/b&gt;. 타오위안 2터미널에서 MRT 지하철 탑승구에 카드 찍기전에 왼쪽에 있다. 밑의 그림 2 참고)&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJS5Qy/btsGNBjZliC/chwX5Jd6Kb3RXdsf9uPLak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJS5Qy/btsGNBjZliC/chwX5Jd6Kb3RXdsf9uPLak/img.jpg&quot; data-alt=&quot;여기다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJS5Qy/btsGNBjZliC/chwX5Jd6Kb3RXdsf9uPLak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJS5Qy%2FbtsGNBjZliC%2FchwX5Jd6Kb3RXdsf9uPLak%2Fimg.jpg&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; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;469&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여기다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vn3cN/btsGMKIMlfD/0p7spolQKkWZVjoy1uzzbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vn3cN/btsGMKIMlfD/0p7spolQKkWZVjoy1uzzbK/img.jpg&quot; data-alt=&quot;멀리서 보면 이렇다. MRT 게이트 왼쪽에 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vn3cN/btsGMKIMlfD/0p7spolQKkWZVjoy1uzzbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvn3cN%2FbtsGMKIMlfD%2F0p7spolQKkWZVjoy1uzzbK%2Fimg.jpg&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; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;314&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;멀리서 보면 이렇다. MRT 게이트 왼쪽에 있다.&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <category>이것저것/일상 &amp;amp; 맛집 &amp;amp; 데이트 기록</category>
      <category>대만</category>
      <category>타오위안</category>
      <category>타이베이</category>
      <category>토스</category>
      <category>환전</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/139</guid>
      <comments>https://computing-jhson.tistory.com/139#entry139comment</comments>
      <pubDate>Fri, 19 Apr 2024 18:27:07 +0900</pubDate>
    </item>
    <item>
      <title>[C++] 진짜 랜덤 숫자 생성하기 (std::random_device)</title>
      <link>https://computing-jhson.tistory.com/138</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;기존 C-style 랜덤 숫자 생성 방법 및 한계&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;밑의 코드 예시는 기존 C-style code에서 랜덤 숫자 (정확히는 랜덤한 것처럼 느껴지는 pseudo-random 숫자를 생성) 를 생성하는 코드이다. std::rand()함수[1]는 Seed 숫자를 이용해 어떤 숫자를 생성하는데, std::srand() 함수를 이용하면 std::rand()함수가 사용하는 Seed 숫자를 설정할 수 있다. 밑의 코드에서는 std::srand() 함수를 이용해 Seed를 현재 시간으로 설정하였다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;ctime&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
...

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::srand(time(NULL)); 랜덤 생성 시의 Seed 설정. Seed를 현재 시간으로 설정한다.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i=0; i&amp;lt;10; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;	// int std::rand() 함수는 의사 난수 (pseudo-random, 랜덤한 것같은 숫자) 숫자를 생성함
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// int std::rand() 가 생성하는 의사 난수는 0부터 RAND_MAX(32767) 중 하나이다.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int random_value = std::rand() % 100; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

... // 계속&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;문제는 C-style std::rand() 함수가 생성하는 랜덤 숫자는 그 퀄리티에 문제가 있다고 한다[1].&lt;br&gt;1. 기본적으로 랜덤하게 생성되는 숫자의 크기가 최대 32767밖에 안된다.&lt;br&gt;2. 생성되는 숫자들의 분포가 균일하지 않는다고 한다.&lt;br&gt;3. 랜덤한 숫자를 생성하는 알고리즘이 존재하기에 std::rand() 함수가 생성하는 의사 난수는 결정적(deterministic)이고 std::srand()에서 설정한 Seed값만 알면 어떤 랜덤한 숫자가 생성되는 지를 알 수 있다.&lt;br&gt;구체적인 단점은 다음과 같다[2].&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;std::random_device의 도입과 예시&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 시뮬레이션 환경을 개발할 때, 균일한 분포를 가지는 진정으로 랜덤한 숫자에 대한 필요성은 항상 존재할 것이다. Modern C++ (Since C++11) 부터는 std::rand() 함수를 대체하기 위해 std::random_device class[3]가 도입되었다. std::random_device는 균일한 분포(uniformly-distributed)를 가진 비결정적(non-deterministic)인 int 숫자를 생성하는 클래스이다.&lt;br&gt;&amp;nbsp;&lt;br&gt;컴퓨터가 비결정적인 숫자를 생성할 수 있다는 것이 놀라운데, 구현에서 실제 물리 디바이스 (hardware) 와 연관된 어떠한 랜덤한 특징을 이용해 비결정적인 진짜 랜덤한 숫자를 생성해낸다고 한다.&lt;br&gt;&lt;br&gt;std::random_device를 이용한 랜덤 숫자 생성 예시는 다음과 같다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;random&amp;gt;

int main(void) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::random_device rd;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; &quot;Min Value : &quot; &amp;lt;&amp;lt; rd.min() &amp;lt;&amp;lt; std::endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; &quot;Max Value : &quot; &amp;lt;&amp;lt; rd.max() &amp;lt;&amp;lt; std::endl;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i=0; i&amp;lt;3; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; &quot; - Generated Random Value : &quot; &amp;lt;&amp;lt; rd() &amp;lt;&amp;lt; std::endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

}

////////////////////////
// 결과
// Min Value : 0
// Max Value : 4294967295
//&amp;nbsp;&amp;nbsp;- Generated Random Value : 3499211612
//&amp;nbsp;&amp;nbsp;- Generated Random Value : 581869302
//&amp;nbsp;&amp;nbsp;- Generated Random Value : 389034673&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;std::random_device는 Class이기에 선언을 통해 객체 rd를 초기화한다. rd.min() 함수와 rd.max() 함수를 통해 std::random_device가 생성하는 최소, 최대 값을 확인할 수 있는데, 최소 값은 &lt;b&gt;&lt;i&gt;0u&lt;/i&gt;&lt;/b&gt;와 같고, 최대 값은 &lt;i&gt;&lt;b&gt;std::numeric_limits&amp;lt;unsigned int&amp;gt;::max()&lt;/b&gt; &lt;/i&gt;와 같다.&lt;br&gt;&amp;nbsp;&lt;br&gt;opeator()를 이용하면 드디어 랜덤 숫자를 생성할 수 있다. operator() 실행 시, [min(), max()] 범위에서 균일한 분포를 가지도록 랜덤한 숫자들을 출력한다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://en.cppreference.com/w/cpp/numeric/random/rand&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://en.cppreference.com/w/cpp/numeric/random/rand&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;[2] &lt;a href=&quot;https://stackoverflow.com/questions/53040940/why-is-the-new-random-library-better-than-stdrand&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://stackoverflow.com/questions/53040940/why-is-the-new-random-library-better-than-stdrand&lt;/span&gt;&lt;/a&gt;&lt;br&gt;[3] &lt;a href=&quot;https://en.cppreference.com/w/cpp/numeric/random/random_device&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://en.cppreference.com/w/cpp/numeric/random/random_device&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programming/C++</category>
      <category>C++</category>
      <category>C++11</category>
      <category>Modern_C++</category>
      <category>random</category>
      <category>std::random_device</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/138</guid>
      <comments>https://computing-jhson.tistory.com/138#entry138comment</comments>
      <pubDate>Sun, 7 Apr 2024 14:15:35 +0900</pubDate>
    </item>
    <item>
      <title>Tensorflow2 기본 구조</title>
      <link>https://computing-jhson.tistory.com/137</link>
      <description>&lt;pre id=&quot;code_1697702499684&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import tensorflow as tf

############## Training hyper-parameters 정의
lr = 5e-4
batch_size = 4096
num_epoch = 1000
decay = 1e-5

############## Dataset 정의
all_df = pd.read_csv('./data/7th-data.csv', encoding='cp949', skiprows=1)

# Input data 추출
data = all_df.iloc[:, 7:].to_numpy()
# Label 추출
anomalyCategory = {
    'REAL':1,
    'FALSE':0,
}
label = all_df.iloc[:, 6:7]
label['FALSE'] = label['FALSE'].apply(lambda x: anomalyCategory[x])
label = label.to_numpy()
############## train_test_split
from sklearn.model_selection import train_test_split
dataTrain, dataTest, labelTrain, labelTest = train_test_split(data, label, test_size=0.2, random_state=0)
trainMean = dataTrain.mean()
trainStd = dataTrain.std()
## Data normalization
dataTrain = (dataTrain-trainMean)/trainStd
dataTest = (dataTest-trainMean)/trainStd
## label one-hot encoding
labelAnomalyOneHotTrain = tf.one_hot(labelTrain[:,0], depth=2)
labelAnomalyOneHotTest = tf.one_hot(labelTest[:,0], depth=2)
## Dataset 정의
datasetAnomalyTrain = tf.data.Dataset.from_tensor_slices((dataTrain, labelAnomalyOneHotTrain)).shuffle(10000).batch(batch_size)
datasetAnomalyTest = tf.data.Dataset.from_tensor_slices((dataTest, labelAnomalyOneHotTest)).shuffle(10000).batch(batch_size)

############## Model 정의

from tensorflow.keras.regularizers import l2
class FeatureExtractor(tf.keras.Model):
    def __init__(self):
        super(FeatureExtractor, self).__init__()
        self.extractor1 = tf.keras.Sequential([
            tf.keras.layers.Dense(64, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.Dense(512, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.Dropout(0.2),
            tf.keras.layers.Dense(256, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.Dropout(0.2),           
            tf.keras.layers.Dense(128, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.Dropout(0.2),
            tf.keras.layers.Dense(128, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.Dropout(0.2),
            tf.keras.layers.Dense(64, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.BatchNormalization(),
        ])
        
    def call(self, x):
        x1 = self.extractor1(x)
        return x1

class Classifier(tf.keras.Model):
    def __init__(self, featureExtractor, numCategories):
        super(Classifier, self).__init__()
        self.classfier = tf.keras.Sequential([
            featureExtractor,
            tf.keras.layers.Dense(64, activation='gelu', kernel_regularizer=l2(decay) if decay!=0 else None),
            tf.keras.layers.Dense(numCategories, activation='softmax'),
        ])
    def call(self, feature):
        return self.classfier(feature)

############## classifierAnomaly 정의
classifierAnomaly = Classifier(FeatureExtractor(), 2)
classifierAnomaly.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(learning_rate=lr), metrics=['accuracy'])

print(&quot;\t[Train] Anomaly&quot;)
anomalyTrainHistory = classifierAnomaly.fit(datasetAnomalyTrain, validation_data=datasetAnomalyTest, verbose=2, epochs=num_epoch)
print(&quot;\n[Test]&quot;)
print(&quot;\tAbnomaly accuracy: %.4f&quot; % classifierAnomaly.evaluate(datasetAnomalyTest, verbose=0, return_dict=True)[&quot;accuracy&quot;])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Deep Learning/개념</category>
      <author>jhson989</author>
      <guid isPermaLink="true">https://computing-jhson.tistory.com/137</guid>
      <comments>https://computing-jhson.tistory.com/137#entry137comment</comments>
      <pubDate>Thu, 28 Dec 2023 22:49:44 +0900</pubDate>
    </item>
  </channel>
</rss>