12 User-Defined Primitives
๐Ÿ”ฎ

12 User-Defined Primitives

Description
Date
Nov 13, 2023
URL
์ƒํƒœ
Done
Tags
Digital Design

UDP(User-Defined Primitive) ์ •์˜์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • ์‚ฌ์šฉ์ž ์ •์˜ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(UDP) ์ •์˜๋Š” primitive ํ‚ค์›Œ๋“œ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • // UDP ์ด๋ฆ„ ๋ฐ ํ„ฐ๋ฏธ๋„ ๋ชฉ๋ก primitive <udp_name> (<output_terminal_name>, <input_terminal_names>); // ํ„ฐ๋ฏธ๋„ ์„ ์–ธ output <output_terminal_name>; input <input_terminal_names>; // ์ˆœ์ฐจ์  UDP์˜ ๊ฒฝ์šฐ ์„ ํƒ์ ์œผ๋กœ reg ์„ ์–ธ reg <output_terminal_name>; (optional; only for sequential UDP) // ์ˆœ์ฐจ์  UDP ์ดˆ๊ธฐํ™” (์„ ํƒ์ ) initial <output_terminal_name> = <value>; // UDP ์ƒํƒœ ํ…Œ์ด๋ธ” table <table_entries> endtable // UDP ์ •์˜ ์ข…๋ฃŒ endprimitive
ย 

UDP ๊ทœ์น™

  • UDP ์ •์˜๋Š” ํŠน์ • ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • UDP๋Š” ์Šค์นผ๋ผ ์ž…๋ ฅ(1-๋น„ํŠธ) ํ„ฐ๋ฏธ๋„๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค์ค‘ ์ž…๋ ฅ ํ„ฐ๋ฏธ๋„์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • UDP๋Š” ํ•˜๋‚˜์˜ ์Šค์นผ๋ผ ์ถœ๋ ฅ ํ„ฐ๋ฏธ๋„๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ ํ„ฐ๋ฏธ๋„์€ ํ„ฐ๋ฏธ๋„ ๋ชฉ๋ก์—์„œ ํ•ญ์ƒ ๋จผ์ € ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์ค‘ ์ถœ๋ ฅ ํ„ฐ๋ฏธ๋„์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ ํ„ฐ๋ฏธ๋„์€ output ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค.
    • ์ˆœ์ฐจ์  UDP๋Š” ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ ์ถœ๋ ฅ ํ„ฐ๋ฏธ๋„์€ reg๋กœ๋„ ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž…๋ ฅ์€ input ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค.
    • ์ˆœ์ฐจ์  UDP์—์„œ ์ƒํƒœ๋Š” initial ๋ฌธ์œผ๋กœ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์„ ํƒ์ ).
    • ์ถœ๋ ฅ์—๋Š” reg๋กœ ์„ ์–ธ๋œ 1-๋น„ํŠธ ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
    • ์ƒํƒœ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์€ 0, 1, x ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • UDP๋Š” z ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. z ๊ฐ’์€ x ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.
    • UDP๋Š” ๋ชจ๋“ˆ๊ณผ ๋™์ผํ•œ ์ˆ˜์ค€์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
    • UDP๋Š” ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ์ •์˜ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋งŒ ์ธ์Šคํ„ด์Šคํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • UDP๋Š” inout ํฌํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์กฐํ•ฉํ˜• UDP ์ •์˜

  • ์ƒํƒœ ํ…Œ์ด๋ธ”์€ UDP ์ •์˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
    • // UDP ์ด๋ฆ„ ๋ฐ ํ„ฐ๋ฏธ๋„ ๋ชฉ๋ก primitive udp_and (out, a, b); // ์„ ์–ธ output out; // ์กฐํ•ฉํ˜• UDP์˜ ๊ฒฝ์šฐ reg๋กœ ์„ ์–ธ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. input a, b; // ์ž…๋ ฅ ์„ ์–ธ // ์ƒํƒœ ํ…Œ์ด๋ธ” ์ •์˜; ํ‚ค์›Œ๋“œ table๋กœ ์‹œ์ž‘ // a b : out; 0 0 : 0; 0 1 : 0; 1 0 : 0; 1 1 : 1; endtable endprimitive

์ƒํƒœ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ

  • ์กฐํ•ฉํ˜• UDP์˜ ์ƒํƒœ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ•ญ๋ชฉ์€ <input1> <input2> ... <inputn> : <output>; ํ˜•์‹์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
      1. <input#>์€ ์ž…๋ ฅ ๋ชฉ๋ก์—์„œ์™€ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      1. ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์€ ":"์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
      1. ์ƒํƒœ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์€ ";"๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.
      1. ์ž…๋ ฅ์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์ด ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      1. ํŠน์ • ์กฐํ•ฉ์ด ๋ฐœ์ƒํ•˜๊ณ  ํ•ด๋‹น ํ•ญ๋ชฉ์ด ํ…Œ์ด๋ธ”์— ์—†๋Š” ๊ฒฝ์šฐ, ์ถœ๋ ฅ์€ x๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
      primitive udp_or(out, a, b); output out; input a, b; table // a b : out; 0 0 : 0; 0 1 : 1; 1 0 : 1; 1 1 : 1; endtable endprimitive

Don't Cares์— ๋Œ€ํ•œ ์ถ•์•ฝ ํ‘œํ˜„

  • Don't Care๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ? ๊ธฐํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ? ๊ธฐํ˜ธ๋Š” ์ž๋™์œผ๋กœ 0, 1, ๋˜๋Š” x๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.
primitive udp_or(out, a, b); output out; input a, b; table // a b : out; 0 0 : 0; 1 ? : 1; // ?๋Š” 0, 1, x๋กœ ํ™•์žฅ๋จ ? 1 : 1; // ?๋Š” 0, 1, x๋กœ ํ™•์žฅ๋จ ? ? : x; // ?๋Š” 0, 1, x๋กœ ํ™•์žฅ๋จ 0 x : x; x 0 : x; endtable endprimitive

UDP(User-Defined Primitive) ์›์‹œ์ฒด ์ธ์Šคํ„ด์Šคํ™”

  • UDP๋Š” Verilog ๊ฒŒ์ดํŠธ ์›์‹œ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ์Šคํ„ด์Šคํ™”๋ฉ๋‹ˆ๋‹ค.
// 1๋น„ํŠธ ์ „์ฒด ๋ง์…ˆ๊ธฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. module fulladd(sum, c_out, a, b, c_in); output sum, c_out; input a, b, c_in; // ๋‚ด๋ถ€ ๋„ท wire s1, c1, c2; // ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ ์›์‹œ์ฒด ์ธ์Šคํ„ด์Šคํ™” xor (s1, a, b); // Verilog ์›์‹œ์ฒด ์‚ฌ์šฉ xor (sum, s1, c_in); // Verilog ์›์‹œ์ฒด ์‚ฌ์šฉ udp_and (c1, a, b); // UDP ์‚ฌ์šฉ udp_and (c2, s1, c_in);// UDP ์‚ฌ์šฉ udp_or (c_out, c2, c1);// UDP ์‚ฌ์šฉ endmodule primitive udp_or(out, a, b); output out; input a, b; table // a b : out; 1 ? : 1; // ?๋Š” 0, 1, x๋กœ ํ™•์žฅ๋จ ? 1 : 1; // ?๋Š” 0, 1, x๋กœ ํ™•์žฅ๋จ ? ? : x; // ?๋Š” 0, 1, x๋กœ ํ™•์žฅ๋จ 0 x : x; x 0 : x; endtable endprimitive
ย 

์กฐํ•ฉํ˜• UDP ์˜ˆ์‹œ

notion image

4๋Œ€1 ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ

  • 4๋Œ€1 ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ๋ฅผ ์›์‹œ์ฒด๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
primitive mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3, s1, s0; table // i0 i1 i2 i3 s1 s0 : out 1 ? ? ? 0 0 : 1; 0 ? ? ? 0 0 : 0; ? 1 ? ? 0 1 : 1; ? 0 ? ? 0 1 : 0; ? ? 1 ? 1 0 : 1; ? ? 0 ? 1 0 : 0; ? ? ? 1 1 1 : 1; ? ? ? 0 1 1 : 0; ? ? ? ? x ? : x; ? ? ? ? ? x : x; endtable endprimitive
  • ์ž…๋ ฅ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ƒํƒœ ํ…Œ์ด๋ธ”์ด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ˆœ์ฐจ์  UDP

  • ์ˆœ์ฐจ์  UDP๋Š” ์กฐํ•ฉํ˜• UDP์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
    • ์ˆœ์ฐจ์  UDP์˜ ์ถœ๋ ฅ์€ ํ•ญ์ƒ reg๋กœ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค.
    • ์ดˆ๊ธฐํ™”๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์ฐจ์  UDP์˜ ์ถœ๋ ฅ์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํฌ๋งท: <input1> <input2> ... <inputN> : <current_state> : <next_state>;
    • ์ƒํƒœ ํ…Œ์ด๋ธ”์˜ ์ž…๋ ฅ์€ ์ž…๋ ฅ ๋ ˆ๋ฒจ ๋˜๋Š” ์—์ง€ ์ „ํ™˜์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ˜„์žฌ ์ƒํƒœ๋Š” ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ ํ˜„์žฌ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • ๋‹ค์Œ ์ƒํƒœ๋Š” ์ž…๋ ฅ๊ณผ ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
      • ๋‹ค์Œ ์ƒํƒœ๋Š” ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ƒˆ ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค.
    • ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ถœ๋ ฅ ๊ฐ’์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ๋ ˆ๋ฒจ๊ณผ ์ž…๋ ฅ์˜ ์—์ง€ ์ „ํ™˜์— ๋ฏผ๊ฐํ•œ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๋ ˆ๋ฒจ-๋ฏผ๊ฐํ˜•(level-sensitive)๊ณผ ์—์ง€-๋ฏผ๊ฐํ˜•(edge-sensitive) ์ˆœ์ฐจ์  UDP๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ-๋ฏผ๊ฐํ˜• ์ˆœ์ฐจ์  UDP

  • ๋ ˆ๋ฒจ-๋ฏผ๊ฐํ˜• UDP๋Š” ์ž…๋ ฅ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
    • ๋ž˜์น˜๋Š” ๋ ˆ๋ฒจ-๋ฏผ๊ฐํ˜• UDP์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
    • notion image
// UDP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ๋ฒจ-๋ฏผ๊ฐํ˜• ๋ž˜์น˜ ์ •์˜ primitive latch(q, d, clock, clear); output q; reg q; // ๋‚ด๋ถ€ ์ €์žฅ์†Œ ์ƒ์„ฑ์„ ์œ„ํ•ด reg๋กœ ์„ ์–ธ input d, clock, clear; // ์ˆœ์ฐจ์  UDP ์ดˆ๊ธฐํ™” initial q = 0; // ์ถœ๋ ฅ์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™” // ์ƒํƒœ ํ…Œ์ด๋ธ” table // d clock clear : q : q+ ? ? 1 : ? : 0 ; // ํด๋ฆฌ์–ด ์กฐ๊ฑด ? 0 ? : ? : - ; // ํด๋ก์ด 0์ด๋ฉด ์›๋ž˜ ์ƒํƒœ ์œ ์ง€ 1 1 ? : ? : 1 ; // ๋ž˜์น˜ q = ๋ฐ์ดํ„ฐ = 1 0 1 ? : ? : 0 ; // ๋ž˜์น˜ q = ๋ฐ์ดํ„ฐ = 0 endtable endprimitive
ย 

์—์ง€-๋ฏผ๊ฐํ˜• ์ˆœ์ฐจ์  UDP

์—์ง€-๋ฏผ๊ฐํ˜• ์ˆœ์ฐจ์  UDP๋Š” ์—์ง€ ์ „ํ™˜๊ณผ/๋˜๋Š” ์ž…๋ ฅ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
notion image
// ์—์ง€-๋ฏผ๊ฐํ˜• ์ˆœ์ฐจ์  UDP ์ •์˜ primitive edge_dff(q, d, clock, clear); output reg q; // ์ถœ๋ ฅ์„ reg๋กœ ์„ ์–ธ input d, clock, clear; table // clock clear : q : q+ ? 1 : ? : 0 ; // clear๊ฐ€ 1์ผ ๋•Œ ์ถœ๋ ฅ = 0 (10) : ? : - ; // clear์˜ ์Œ์˜ ์—์ง€ ๋ฌด์‹œ (10) 0 : ? : 1 ; // clock์˜ ์Œ์˜ ์—์ง€์—์„œ ๋ฐ์ดํ„ฐ ๋ž˜์น˜ (10) 0 : ? : 0 ; // clock์˜ ์Œ์˜ ์—์ง€์—์„œ ๋ฐ์ดํ„ฐ ๋ž˜์น˜ (1x) 0 : ? : - ; // clock์ด ๋ถˆํ™•์‹คํ•œ ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ q ์œ ์ง€ ... // ์ถ”๊ฐ€ ๊ทœ์น™ endtable endprimitive

์ˆœ์ฐจ์  UDP ์˜ˆ์‹œ

4๋น„ํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฆฌํ”Œ ์นด์šดํ„ฐ์™€ UDP T-ํ”Œ๋ฆฝํ”Œ๋กญ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
module counter(q, clock, clear); output [3:0] q; input clock, clear; // T-ํ”Œ๋ฆฝํ”Œ๋กญ ์ธ์Šคํ„ด์Šคํ™” t_ff tff0(q[0], clock, clear); t_ff tff1(q[1], q[0], clear); t_ff tff2(q[2], q[1], clear); t_ff tff3(q[3], q[2], clear); endmodule // ์—์ง€ ํŠธ๋ฆฌ๊ฑฐ T-ํ”Œ๋ฆฝํ”Œ๋กญ primitive t_ff(q, clk, clear); output reg q; input clk, clear; table // clk clear : q : q+ ? 1 : ? : 0; // ๋น„๋™๊ธฐ ํด๋ฆฌ์–ด ์กฐ๊ฑด ? (10) : ? : -; // clear์˜ ์Œ์˜ ์—์ง€ ๋ฌด์‹œ (10) 0 : ? : ~q; // clk์˜ ์Œ์˜ ์—์ง€์—์„œ ํ† ๊ธ€ ... // ์ถ”๊ฐ€ ๊ทœ์น™ endtable endprimitive

UDP ํ…Œ์ด๋ธ” ์ถ•์•ฝ ๊ธฐํ˜ธ

table ? ? 1 : ? : 0 ; // clear๊ฐ€ 1์ผ ๊ฒฝ์šฐ, ์ถœ๋ ฅ q = 0 ? ? (10) : ? : - ; // clock์˜ ํ•˜๊ฐ• ์—์ง€์—์„œ q ์œ ์ง€ 1 (10) 0 : ? : 1 ; // d๊ฐ€ 1์ด๊ณ , clock์˜ ํ•˜๊ฐ• ์—์ง€์—์„œ clear๊ฐ€ 0์ผ ๋•Œ, ์ถœ๋ ฅ q = 1 0 (10) 0 : ? : 0 ; // d๊ฐ€ 0์ด๊ณ , clock์˜ ํ•˜๊ฐ• ์—์ง€์—์„œ clear๊ฐ€ 0์ผ ๋•Œ, ์ถœ๋ ฅ q = 0 ? (1x) 0 : ? : - ; // clock์ด ๋ถˆํ™•์‹ค ์ƒํƒœ์—์„œ clear๊ฐ€ 0์ผ ๋•Œ q ์œ ์ง€ ? (0?) 0 : ? : - ; // clock์ด 0์—์„œ ๋ถˆํ™•์‹ค ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ q ์œ ์ง€ ? (x1) 0 : ? : - ; // clock์ด ๋ถˆํ™•์‹ค ์ƒํƒœ์—์„œ 1๋กœ ์ „ํ™˜๋  ๋•Œ q ์œ ์ง€ (??) ? 0 : ? : - ; // clock์ด ์–ด๋–ค ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๋ณด์—ฌ๋„ clear๊ฐ€ 0์ผ ๋•Œ q ์œ ์ง€ endtable
  • ? ๊ธฐํ˜ธ๋Š” ๋ฌด๊ด€์‹ฌ(Don't care) ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์–ด๋–ค ๊ฐ’์ด๋“  ๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • (10)์€ clock ์‹ ํ˜ธ๊ฐ€ 1์—์„œ 0์œผ๋กœ ๋ณ€ํ•˜๋Š” ํ•˜๊ฐ• ์—์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • (1x), (0?), (x1)์€ clock ์‹ ํ˜ธ๊ฐ€ ๋ถˆํ™•์‹คํ•œ ์ƒํƒœ(์˜ˆ: 1์—์„œ ๋ถˆํ™•์‹ค(x) ๋˜๋Š” ๋ถˆํ™•์‹ค(x)์—์„œ 1)๋กœ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • (??)๋Š” clock ์‹ ํ˜ธ๊ฐ€ ์–ด๋–ค ๊ฐ’์œผ๋กœ๋“  ๋ณ€ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • -๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ˜„์žฌ ์ƒํƒœ q๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
ย 
table // d clock clear : q : q+ ? ? 1 : ? : 0 ; // clear๊ฐ€ 1์ด๋ฉด ์ถœ๋ ฅ q = 0 ? ? f : ? : - ; // clear์˜ ์Œ์˜ ์—์ง€ ๋ฌด์‹œ 1 f 0 : ? : 1 ; // clock์˜ ์Œ์˜ ์—์ง€์—์„œ ๋ฐ์ดํ„ฐ ๋ž˜์น˜ 0 f 0 : ? : 0 ; // clock์˜ ์Œ์˜ ์—์ง€์—์„œ ๋ฐ์ดํ„ฐ ๋ž˜์น˜ ? (1x) 0 : ? : - ; // clock์ด ๋ถˆํ™•์‹ค ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ q ์œ ์ง€ ? p 0 : ? : - ; // clock์˜ ์–‘์˜ ์—์ง€ ๋ฌด์‹œ * ? 0 : ? : - ; // d๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ clock์ด ์•ˆ์ •์ ์ด๋ฉด q ์œ ์ง€ endtable
  • ์ด ํ…Œ์ด๋ธ”์€ ์ž…๋ ฅ d, clock, clear์— ๋”ฐ๋ผ ์ถœ๋ ฅ q๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • (1x)๋Š” clock์ด ๋ถˆํ™•์‹คํ•œ ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ๋„ ๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ย 
๊ธฐํ˜ธ
์˜๋ฏธ
์„ค๋ช…
?
0, 1, x
์ถœ๋ ฅ ํ•„๋“œ์—์„œ ๋ช…์‹œํ•  ์ˆ˜ ์—†์Œ
b
0, 1
์ถœ๋ ฅ ํ•„๋“œ์—์„œ ๋ช…์‹œํ•  ์ˆ˜ ์—†์Œ
-
์ƒํƒœ ๊ฐ’ ๋ณ€ํ™” ์—†์Œ
์ˆœ์ฐจ์  UDP์˜ ์ถœ๋ ฅ ํ•„๋“œ์—์„œ๋งŒ ๋ช…์‹œ ๊ฐ€๋Šฅ
r
(01)
์‹ ํ˜ธ์˜ ์ƒ์Šน ์—์ง€
f
(10)
์‹ ํ˜ธ์˜ ํ•˜๊ฐ• ์—์ง€
p
(01), (0x) ๋˜๋Š” (x1)
์‹ ํ˜ธ์˜ ์ž ์žฌ์  ์ƒ์Šน ์—์ง€
n
(10), (1x) ๋˜๋Š” (x0)
์‹ ํ˜ธ์˜ ์ž ์žฌ์  ํ•˜๊ฐ• ์—์ง€
*
(??)
์‹ ํ˜ธ์˜ ์–ด๋–ค ๊ฐ’ ๋ณ€๊ฒฝ๋„ ๊ฐ€๋Šฅ