10 Timing and Delays
๐Ÿ”ฎ

10 Timing and Delays

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

๋ถ„์‚ฐ ์ง€์—ฐ (Distributed Delay)

  • ๋ถ„์‚ฐ ์ง€์—ฐ์€ ๊ฐœ๋ณ„ ์š”์†Œ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
    • ์ง€์—ฐ ๊ฐ’์€ ํšŒ๋กœ์˜ ๊ฐœ๋ณ„ ์š”์†Œ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
    • ์–ด๋–ค ๊ฒŒ์ดํŠธ์˜ ์ž…๋ ฅ์ด ๋ณ€๊ฒฝ๋  ๋•Œ, ์ถœ๋ ฅ์€ ์ง€์ •๋œ ์ง€์—ฐ ํ›„์— ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
      • notion image
        module M (out, a, b, c, d); output out; input a, b, c, d; wire e, f; // ๊ฐ ๊ฒŒ์ดํŠธ์— ์ง€์—ฐ์ด ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. and #5 a1(e, a, b); and #7 a2(f, c, d); and #4 a3(out, e, f); endmodule
ย 

์ง‘์  ์ง€์—ฐ (Lumped Delay)

  • ์ง‘์  ์ง€์—ฐ์€ ๋ชจ๋“ˆ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ ๊ฒŒ์ดํŠธ์— ๋‹จ์ผ ์ง€์—ฐ์œผ๋กœ ์ง€์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๊ฒฝ๋กœ์˜ ๋ˆ„์  ์ง€์—ฐ์ด ํ•˜๋‚˜์˜ ์œ„์น˜์—์„œ ์ง‘์ ๋ฉ๋‹ˆ๋‹ค.
    • ์ „์ฒด ์ง€์—ฐ์ด ์ถœ๋ ฅ ๊ฒŒ์ดํŠธ์— ์ง‘์ ๋ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“ˆ M์˜ ์–ด๋–ค ์ž…๋ ฅ์ด ๋ณ€๊ฒฝ๋œ ํ›„ ์ง€์—ฐ์„ ๊ฑฐ์ณ ๊ธฐ๋ณธ ์ถœ๋ ฅ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
      • notion image
        module M (out, a, b, c, d); output out; input a, b, c, d; wire e, f; and a1(e, a, b); and a2(f, c, d); and #11 a3(out, e, f); // ์ถœ๋ ฅ ๊ฒŒ์ดํŠธ์—๋งŒ ์ง€์—ฐ endmodule

ํ•€-ํˆฌ-ํ•€ ์ง€์—ฐ (Pin-to-Pin Delays)

  • ํ•€-ํˆฌ-ํ•€ ์ง€์—ฐ์€ ๊ฐ ์ž…๋ ฅ์—์„œ ๊ฐ ์ถœ๋ ฅ์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ฒฝ๋กœ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ์ž…๋ ฅ/์ถœ๋ ฅ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋ณ„๋„๋กœ ์ง€์—ฐ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋””์ง€ํ„ธ ํšŒ๋กœ์˜ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ํ•€-ํˆฌ-ํ•€ ์ง€์—ฐ์€ SPICE์™€ ๊ฐ™์€ ์ €์ˆ˜์ค€ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšŒ๋กœ ํŠน์„ฑํ™”๋ฅผ ํ†ตํ•ด ์–ป์–ด์ง‘๋‹ˆ๋‹ค.
    • ํ•€-ํˆฌ-ํ•€ ์ง€์—ฐ์€ ๊ฒฝ๋กœ ์ง€์—ฐ์œผ๋กœ๋„ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
      • notion image

Specify ๋ธ”๋ก

  • Specify ๋ธ”๋ก์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌธ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:
      1. ๋ชจ๋“ˆ ๊ฒฝ๋กœ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ•€-ํˆฌ-ํ•€ ํƒ€์ด๋ฐ ์ง€์—ฐ ํ• ๋‹น,
      1. ํšŒ๋กœ ๋‚ด ํƒ€์ด๋ฐ ๊ฒ€์‚ฌ ์„ค์ •,
      1. specparam ์ƒ์ˆ˜ ์ •์˜.
      notion image
      module M (out, a, b, c, d); output out; input a, b, c, d; wire e, f; // ๊ฒฝ๋กœ ์ง€์—ฐ ๋ฌธ์„ ํฌํ•จํ•œ Specify ๋ธ”๋ก specify (a => out) = 9; (b => out) = 9; (c => out) = 11; (d => out) = 11; endspecify and a1(e, a, b); and a2(f, c, d); and a3(out, e, f); endmodule
  • ๋ชจ๋“ˆ ๊ฒฝ๋กœ ์ง€์—ฐ์€ ์†Œ์Šค(์ž…๋ ฅ) ํ•€์—์„œ ๋ชฉ์ ์ง€(์ถœ๋ ฅ) ํ•€๊นŒ์ง€์˜ ์ง€์—ฐ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ย 

      Specify ๋ธ”๋ก ๋‚ด๋ถ€ (1)

      ๋ณ‘๋ ฌ ์—ฐ๊ฒฐ

    • ์†Œ์Šค ํ•„๋“œ์˜ ๊ฐ ๋น„ํŠธ๋Š” ๋ชฉ์ ์ง€ ํ•„๋“œ์˜ ํ•ด๋‹น ๋น„ํŠธ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
    • ์†Œ์Šค์—์„œ ๋ชฉ์ ์ง€๋กœ์˜ ๊ฐ ๋น„ํŠธ์— ๋Œ€ํ•ด ์ง€์—ฐ์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
      • notion image
        // ๋น„ํŠธ-๋Œ€-๋น„ํŠธ ์—ฐ๊ฒฐ. a์™€ out ๋ชจ๋‘ ๋‹จ์ผ ๋น„ํŠธ์ž…๋‹ˆ๋‹ค. (a => out) = 9; // ๋ฒกํ„ฐ ์—ฐ๊ฒฐ. a์™€ out ๋ชจ๋‘ 4-๋น„ํŠธ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. (a[3:0] => out[3:0]) = 9; // ์ƒ๊ธฐ ๋ฌธ์€ ๋„ค ๊ฐœ์˜ ๋น„ํŠธ-๋Œ€-๋น„ํŠธ ์—ฐ๊ฒฐ ๋ฌธ์˜ ์ถ•์•ฝํ˜•์ž…๋‹ˆ๋‹ค. (a[0] => out[0]) = 9; (a[1] => out[1]) = 9; (a[2] => out[2]) = 9; (a[3] => out[3]) = 9; // ์ž˜๋ชป๋œ ์—ฐ๊ฒฐ. a[4:0]์€ 5-๋น„ํŠธ ๋ฒกํ„ฐ, out[3:0]์€ 4-๋น„ํŠธ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. (a => out) = 9; // ๋น„ํŠธ ๋„ˆ๋น„๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      ย 

      Specify ๋ธ”๋ก ๋‚ด๋ถ€ (2)

      ์ „์ฒด ์—ฐ๊ฒฐ

    • ์†Œ์Šค ํ•„๋“œ์˜ ๊ฐ ๋น„ํŠธ๋Š” ๋ชฉ์ ์ง€ ํ•„๋“œ์˜ ๋ชจ๋“  ๋น„ํŠธ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
    • ์ „์ฒด ์—ฐ๊ฒฐ์€ ์†Œ์Šค์˜ ๊ฐ ๋น„ํŠธ์™€ ๋ชฉ์ ์ง€์˜ ๋ชจ๋“  ๋น„ํŠธ ์‚ฌ์ด์˜ ์ง€์—ฐ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
      • notion image
        module M (out, a, b, c, d); output out; input a, b, c, d; wire e, f; // ์ „์ฒด ์—ฐ๊ฒฐ ์ง€์ • specify (a, b *> out) = 9; (c, a *> out) = 11; endspecify and a1(e, a, b); and a2(f, c, d); and a3(out, e, f); endmodule // a[31:0]์€ 32-๋น„ํŠธ ๋ฒกํ„ฐ, out[15:0]์€ 16-๋น„ํŠธ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. specify (a *> out) = 9; // ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด 32 X 16 = 512 ๋ณ‘๋ ฌ ์—ฐ๊ฒฐ ๋ฌธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค! endspecify

      Specify ๋ธ”๋ก ๋‚ด๋ถ€ (3)

      ์—์ง€-์„ผ์‹œํ‹ฐ๋ธŒ ๊ฒฝ๋กœ

    • ์—์ง€-์„ผ์‹œํ‹ฐ๋ธŒ ๊ฒฝ๋กœ ๊ตฌ์กฐ๋Š” ์†Œ์Šค ์‹ ํ˜ธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํŠน์ • ์—์ง€์—๋งŒ ๋ฐœ์ƒํ•˜๋Š” ์ž…๋ ฅ์—์„œ ์ถœ๋ ฅ์œผ๋กœ์˜ ์ง€์—ฐ์„ ๋ชจ๋ธ๋งํ•จ
    • specparam ๋ฌธ
      • specify ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
      • specparam ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น specify ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋จ

      Specify ๋ธ”๋ก ๋‚ด๋ถ€ (4)

      ์กฐ๊ฑด๋ถ€ ๊ฒฝ๋กœ ์ง€์—ฐ

    • Verilog๋Š” ํšŒ๋กœ ๋‚ด ์‹ ํ˜ธ ๊ฐ’์— ๋”ฐ๋ผ ์กฐ๊ฑด๋ถ€๋กœ ๊ฒฝ๋กœ ์ง€์—ฐ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์กฐ๊ฑด๋ถ€ ๊ฒฝ๋กœ ์ง€์—ฐ์€ if ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค (else๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ).
    • ์ƒํƒœ ์˜์กด ๊ฒฝ๋กœ ์ง€์—ฐ(State Dependent Path Delays, SDPD)์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Specify ๋ธ”๋ก ๋‚ด๋ถ€ (5)

      ์ƒ์Šน, ํ•˜๊ฐ•, ๋ฐ ๊บผ์ง ์ง€์—ฐ

    • ํ•€-ํˆฌ-ํ•€ ํƒ€์ด๋ฐ์€ ์ƒ์Šน, ํ•˜๊ฐ•, ๋ฐ ๊บผ์ง ์ง€์—ฐ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ๋” ์ƒ์„ธํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์–ด๋–ค ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ํ•˜๋‚˜, ๋‘˜, ์…‹, ์—ฌ์„ฏ, ์—ด๋‘˜์˜ ์ง€์—ฐ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋„ค, ๋‹ค์„ฏ, ์ผ๊ณฑ, ์—ฌ๋Ÿ, ์•„ํ™‰, ์—ด, ์—ดํ•œ ์ง€์—ฐ ๊ฐ’์€ ๋ถˆ๋ฒ•์ž…๋‹ˆ๋‹ค.
    • ์ง€์—ฐ์ด ์ง€์ •๋˜๋Š” ์ˆœ์„œ๋Š” ์—„๊ฒฉํžˆ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • // ๋‹จ์ผ ์ง€์—ฐ ์ง€์ •. ๋ชจ๋“  ์ „ํ™˜์— ๋Œ€ํ•ด ๋‹จ์ผ ์ง€์—ฐ(t_delay)์ด ์‚ฌ์šฉ๋จ specparam t_delay = 11; (clk => q) = t_delay; // ๋‘ ์ง€์—ฐ, ์ƒ์Šน ๋ฐ ํ•˜๊ฐ• ์ง€์—ฐ ์ง€์ • // - ์ƒ์Šน ์ง€์—ฐ(`t_rise`)์€ 0์—์„œ 1, Z์—์„œ 1๋กœ์˜ ์ „ํ™˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. // - ํ•˜๊ฐ• ์ง€์—ฐ(`t_fall`)์€ 1์—์„œ 0, Z์—์„œ 0์œผ๋กœ์˜ ์ „ํ™˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. specparam t_rise = 9, t_fall = 13; (clk => q) = (t_rise, t_fall); // ์„ธ ์ง€์—ฐ, ์ƒ์Šน, ํ•˜๊ฐ•, ๋ฐ ๊บผ์ง ์ง€์—ฐ ์ง€์ • // - ์ƒ์Šน ์ง€์—ฐ์€ 0์—์„œ 1, Z์—์„œ 1๋กœ์˜ ์ „ํ™˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. // - ํ•˜๊ฐ• ์ง€์—ฐ์€ 1์—์„œ 0, Z์—์„œ 0์œผ๋กœ์˜ ์ „ํ™˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. // - ๊บผ์ง ์ง€์—ฐ(`t_turnoff`)์€ 0์—์„œ Z, 1์—์„œ Z๋กœ์˜ ์ „ํ™˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. specparam t_rise = 9, t_fall = 13, t_turnoff = 11; (clk => q) = (t_rise, t_fall, t_turnoff); // ์—ฌ์„ฏ ๊ฐ€์ง€ ์ง€์—ฐ ์ง€์ • // 0์—์„œ 1, 1์—์„œ 0, 0์—์„œ Z, Z์—์„œ 1, 1์—์„œ Z, Z์—์„œ 0์œผ๋กœ์˜ ์ „ํ™˜์— ๋Œ€ํ•ด ์ง€์—ฐ์ด ์ˆœ์„œ๋Œ€๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. specparam t_01 = 9, t_10 = 13, t_0z = 11; specparam t_z1 = 9, t_1z = 11, t_z0 = 13; (clk => q) = (t_01, t_10, t_0z, t_z1, t_1z, t_z0); // ์—ด๋‘ ๊ฐ€์ง€ ์ง€์—ฐ ์ง€์ • // 0์—์„œ 1, 1์—์„œ 0, 0์—์„œ Z, Z์—์„œ 1, 1์—์„œ Z, Z์—์„œ 0, 0์—์„œ X, X์—์„œ 1, 1์—์„œ X, X์—์„œ 0, X์—์„œ Z, Z์—์„œ X๋กœ์˜ ์ „ํ™˜์— ๋Œ€ํ•ด ์ง€์—ฐ์ด ์ˆœ์„œ๋Œ€๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. specparam t_01 = 9, t_10 = 13, t_0z = 11; specparam t_z1 = 9, t_1z = 11, t_z0 = 13; specparam t_0x = 4, t_x1 = 13, t_1x = 5; specparam t_x0 = 9, t_xz = 11, t_zx = 7; (clk => q) = (t_01, t_10, t_0z, t_z1, t_1z, t_z0, t_0x, t_x1, t_1x, t_x0, t_xz, t_zx);
      ย 

      Specify ๋ธ”๋ก ๋‚ด๋ถ€ (6)

      ์ตœ์†Œ, ์ตœ๋Œ€, ์ผ๋ฐ˜ ์ง€์—ฐ

    • ์ตœ์†Œ, ์ตœ๋Œ€, ์ผ๋ฐ˜ ๊ฐ’๋„ ํ•€-ํˆฌ-ํ•€ ์ง€์—ฐ์— ๋Œ€ํ•ด ์ง€์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒ์Šน, ํ•˜๊ฐ•, ๋ฐ ๊บผ์ง ์ง€์—ฐ์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์ตœ์†Œ:์ผ๋ฐ˜:์ตœ๋Œ€ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • specparam t_rise = 8:9:10, t_fall = 12:13:14, t_turnoff = 10:11:12; (clk => q) = (t_rise, t_fall, t_turnoff);
      ย 

      x ์ „ํ™˜ ์ฒ˜๋ฆฌ

    • Verilog๋Š” x ์ƒํƒœ๋กœ์˜ ์ „ํ™˜์— ๋Œ€ํ•ด ๋น„๊ด€์  ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์—ฐ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
    • ์•Œ๋ ค์ง„ ์ƒํƒœ์—์„œ x๋กœ์˜ ์ „ํ™˜์€ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • x์—์„œ ์•Œ๋ ค์ง„ ์ƒํƒœ๋กœ์˜ ์ „ํ™˜์€ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • // ์—ฌ์„ฏ ์ง€์—ฐ์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค. // 0->1, 1->0, 0->z, z->1, 1->z, z->0๋กœ์˜ ์ „ํ™˜์— ๋Œ€ํ•ด specparam t_01 = 9, t_10 = 13, t_0z = 11; specparam t_z1 = 9, t_1z = 11, t_z0 = 13; (clk => q) = (t_01, t_10, t_0z, t_z1, t_1z, t_z0);
      notion image
      ย 

      ํƒ€์ด๋ฐ ๊ฒ€์‚ฌ (Timing Checks)

      Verilog๋Š” ํƒ€์ด๋ฐ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์‹œ์Šคํ…œ ์ž‘์—…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ํƒ€์ด๋ฐ ๊ฒ€์‚ฌ๋Š” specify ๋ธ”๋ก ์•ˆ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • $setup ๋ฐ $hold ์ž‘์—…์€ ์„ค๊ณ„์˜ ์ˆœ์ฐจ ์š”์†Œ์— ๋Œ€ํ•œ ์„ค์ •(setup) ๋ฐ ์œ ์ง€(hold) ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
      • ์„ค์ • ์‹œ๊ฐ„์€ ํ™œ์„ฑ ํด๋ก ์—์ง€ ์ด์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
      • ์œ ์ง€ ์‹œ๊ฐ„์€ ํ™œ์„ฑ ํด๋ก ์—์ง€ ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

      $setup ๋ฐ $hold ๊ฒ€์‚ฌ

      $setup ์ž‘์—…

    • ์‚ฌ์šฉ๋ฒ•: $setup(data_event, reference_event, limit);
      • data_event: ์œ„๋ฐ˜์„ ๊ฐ์‹œํ•˜๋Š” ์‹ ํ˜ธ
      • reference_event: data_event ์‹ ํ˜ธ๋ฅผ ๊ฐ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ฐธ์กฐ ์‹ ํ˜ธ
      • limit: data_event์˜ ์„ค์ •์— ํ•„์š”ํ•œ ์ตœ์†Œ ์‹œ๊ฐ„
      • ์œ„๋ฐ˜์€ (T_reference_event - T_data_event) < limit์ผ ๋•Œ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.
      // ์„ค์ • ๊ฒ€์‚ฌ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. // clock์€ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. // data๋Š” ์œ„๋ฐ˜์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. // ์œ„๋ฐ˜์€ (posedge_clk - data) < 3 ์ผ ๋•Œ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. specify $setup(data, posedge clock, 3); endspecify

      $hold ์ž‘์—…

    • ์‚ฌ์šฉ๋ฒ•: $hold(reference_event, data_event, limit);
      • reference_event: data_event ์‹ ํ˜ธ๋ฅผ ๊ฐ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ฐธ์กฐ ์‹ ํ˜ธ
      • data_event: ์œ„๋ฐ˜์„ ๊ฐ์‹œํ•˜๋Š” ์‹ ํ˜ธ
      • limit: data_event์˜ ์œ ์ง€์— ํ•„์š”ํ•œ ์ตœ์†Œ ์‹œ๊ฐ„
      • ์œ„๋ฐ˜์€ (T_data_event - T_reference_event) < limit์ผ ๋•Œ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.
      // ์œ ์ง€ ๊ฒ€์‚ฌ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. // clock์€ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. // data๋Š” ์œ„๋ฐ˜์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. // ์œ„๋ฐ˜์€ (data - posedge_clk) < 5 ์ผ ๋•Œ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. specify $hold(posedge clock, data, 5); endspecify
      ์ด ์ฝ”๋“œ๋Š” Verilog์˜ ํƒ€์ด๋ฐ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์ฐจ ํšŒ๋กœ ์š”์†Œ์˜ ์„ค์ • ๋ฐ ์œ ์ง€ ์‹œ๊ฐ„ ์ œ์•ฝ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. $setup๊ณผ $hold ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์‹ ํ˜ธ๊ฐ€ ํด๋ก ์‹ ํ˜ธ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์•ˆ์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
      ย 
      ย 

      $width ๊ฒ€์‚ฌ

      $width๋Š” ํŽ„์Šค์˜ ๋„ˆ๋น„๊ฐ€ ์ตœ์†Œ ๋„ˆ๋น„ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • $width์— ๋Œ€ํ•œ data_event๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์ง€ ์•Š์ง€๋งŒ reference_event ์‹ ํ˜ธ์˜ ๋‹ค์Œ ๋ฐ˜๋Œ€ ์—์ง€๋กœ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ๋ฒ•: $width(reference_event, limit);
      • reference_event: ์—์ง€ ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ(์‹ ํ˜ธ์˜ ์—์ง€ ์ „ํ™˜)
      • limit: ํŽ„์Šค์˜ ์ตœ์†Œ ๋„ˆ๋น„
        • notion image
          // ๋„ˆ๋น„ ๊ฒ€์‚ฌ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. // clear์˜ posedge๋Š” `reference_event`์ž…๋‹ˆ๋‹ค. // clear์˜ ๋‹ค์Œ negedge๋Š” `data_event`์ž…๋‹ˆ๋‹ค. // ์œ„๋ฐ˜์€ (Tdata_event - Treference_event) โ‰ค 6์ผ ๋•Œ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. specify $width(posedge clear, 6); endspecify
      ย 

      ์ง€์—ฐ ๋ฐฑ-์–ด๋…ธํ…Œ์ด์…˜ (Delay Back-Annotation)

      ์ง€์—ฐ ๋ฐฑ-์–ด๋…ธํ…Œ์ด์…˜์€ ํƒ€์ด๋ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ์ค‘์š”ํ•˜๊ณ  ๊ด‘๋ฒ”์œ„ํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.
      1. RTL ์ฝ”๋“œ โ†’ ๊ฒŒ์ดํŠธ-๋ ˆ๋ฒจ ๋„ท๋ฆฌ์ŠคํŠธ
      1. ๋ ˆ์ด์•„์›ƒ ์ „ ์ถ”์ • ์ง€์—ฐ โ†’ ํƒ€์ด๋ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜/์ •์  ํƒ€์ด๋ฐ ๋ถ„์„
      1. ๊ฒŒ์ดํŠธ-๋ ˆ๋ฒจ ๋„ท๋ฆฌ์ŠคํŠธ โ†’ ๋ ˆ์ด์•„์›ƒ
      1. ๋ ˆ์ด์•„์›ƒ ํ›„ ์ง€์—ฐ(R/C) โ†’ ๋ฐฑ-์–ด๋…ธํ…Œ์ด์…˜ โ†’ ํƒ€์ด๋ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜/์ •์  ํƒ€์ด๋ฐ ๋ถ„์„
        1. notion image
      ์ด ๊ณผ์ •์€ ์„ค๊ณ„์—์„œ ๊ฒŒ์ดํŠธ-๋ ˆ๋ฒจ์˜ ๋„ท๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ ˆ์ด์•„์›ƒ ์ „๊ณผ ํ›„์˜ ์ง€์—ฐ์„ ์ถ”์ •ํ•˜์—ฌ ์ด๋ฅผ ํƒ€์ด๋ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์ •์  ํƒ€์ด๋ฐ ๋ถ„์„์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํšŒ๋กœ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ํƒ€์ด๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.