๐ SystemVerilog ํ ์คํธ๋ฒค์น ์๋ฒฝ ๊ฐ์ด๋
๐ SystemVerilog ํ ์คํธ๋ฒค์น ์๋ฒฝ ๊ฐ์ด๋
Verilog๋ฅผ ๋์ด์ — ํ๋์ ๊ฒ์ฆ ํ๊ฒฝ ๊ตฌ์ถ์ ์ํ ํ์ ๊ธฐ๋ฅ ์ด์ ๋ฆฌ
Verilog๋ง์ผ๋ก ํ ์คํธ๋ฒค์น๋ฅผ ์์ฑํ๊ณ ๊ณ์ ๊ฐ์? SystemVerilog๋ OOP, ๋ณ๋ ฌ ์ฒ๋ฆฌ, ๋๋ค ๊ฒ์ฆ, Assertion ๋ฑ ํ๋์ ๊ฒ์ฆ์ ํ์์ ์ธ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ ๋ถํฐ ์ค์ ์ฝ๋ ์์ ๊น์ง, ํ ์คํธ๋ฒค์น ์์ฑ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ์ ๋ฆฌํฉ๋๋ค.
⚡ 1. Verilog vs SystemVerilog
๋จผ์ Verilog์ SystemVerilog์ ์ฃผ์ ์ฐจ์ด์ ์ ๋น๊ตํฉ๋๋ค.
| ๊ธฐ๋ฅ | Verilog | SystemVerilog |
|---|---|---|
| ๋ณ๋ ฌ ์คํ | ์ ํ์ (always๋ง) | fork-join, join_any, join_none |
| OOP | ❌ ์์ | ✅ class, ์์, ๋คํ์ฑ |
| ๋๋คํ | $random๋ง | rand, constraint, randomize() |
| ๋ฐ์ดํฐ ํ์ | reg, wire, integer | logic, bit, enum, struct, queue |
| Assertion | ❌ ์์ | ✅ SVA (property, assert) |
| Coverage | ❌ ์์ | ✅ covergroup, coverpoint |
| IPC | ❌ ์์ | ✅ mailbox, semaphore |
| Interface | ❌ ์์ | ✅ interface, modport |
๐ 2. fork-join ๋ณ๋ ฌ ์คํ
fork-join์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํํ๊ณ ๋๊ธฐํํ๋ ๊ตฌ๋ฌธ์ ๋๋ค.
์ธ ๊ฐ์ง ๋ณํ
| ๊ตฌ๋ฌธ | ๋์ | ์ฌ์ฉ ์์ |
|---|---|---|
| join | ๋ชจ๋ ํ๋ก์ธ์ค ์๋ฃ ๋๊ธฐ | ๋ชจ๋ ์์ ์๋ฃ ํ์ |
| join_any | ํ๋๋ผ๋ ์๋ฃ๋๋ฉด ์งํ | ํ์์์, ๊ฒฝ์ ์กฐ๊ฑด |
| join_none | ๋๊ธฐ ์์ด ์ฆ์ ์งํ | ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ชจ๋ํฐ๋ง |
disable fork๋ ํ์ฌ ์ค์ฝํ์ ๋ชจ๋ ์์ ์ค๋ ๋๋ฅผ ์ข
๋ฃํฉ๋๋ค.
์๋์น ์์ ์ข
๋ฃ๋ฅผ ํผํ๋ ค๋ฉด fork...join์ ๋ณ๋ task๋ก ๊ฐ์ธ์ธ์.
๐ฏ 3. OOP (ํด๋์ค์ ๊ฐ์ฒด)
SystemVerilog์ ํด๋์ค๋ ๊ฒ์ฆ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์กฐํํ๋ ํต์ฌ์ ๋๋ค.
• ์บก์ํ: ๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ํ๋์ ๋จ์๋ก ๋ฌถ์
• ์์: ๊ธฐ์กด ํด๋์ค๋ฅผ ํ์ฅํ์ฌ ์ ํด๋์ค ์์ฑ
• ๋คํ์ฑ: virtual ํจ์๋ก ๋ฐํ์ ๋์ ๊ฒฐ์
• ์ฌ์ฌ์ฉ: ํ๋ฒ ์์ฑํ ํด๋์ค๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ
์์ ์์
๐ 4. ๊ณ ๊ธ ๋ฐ์ดํฐ ํ์
์ฃผ์ ๋ฐ์ดํฐ ํ์
| ํ์ | ์ค๋ช | ์์ |
|---|---|---|
| logic | 4-state (0,1,X,Z), reg/wire ๋์ฒด | logic [7:0] data; |
| bit | 2-state (0,1), ์๋ฎฌ๋ ์ด์ ๋น ๋ฆ | bit [31:0] addr; |
| enum | ์ด๊ฑฐํ, ๊ฐ๋ ์ฑ ํฅ์ | enum {IDLE, RUN} state; |
| struct | ๊ตฌ์กฐ์ฒด, ๊ด๋ จ ๋ฐ์ดํฐ ๊ทธ๋ฃนํ | struct {bit[7:0] a,b;} pkt; |
| queue [$] | ๋์ ๋ฐฐ์ด, FIFO ์ฉ๋ | int q[$]; |
| [key] | ์ฐ๊ด ๋ฐฐ์ด, ํด์๋งต | int mem[string]; |
๐ฒ 5. ๋๋คํ์ ์ ์ฝ์กฐ๊ฑด
CRV(Constrained Random Verification)๋ ํ๋ ๊ฒ์ฆ์ ํต์ฌ์ ๋๋ค. ์๋ ํ ์คํธ ๋์ ์ ์ฝ์กฐ๊ฑด ๋ด์์ ๋๋ค ์๋๋ฆฌ์ค๋ฅผ ์๋ ์์ฑํฉ๋๋ค.
rand vs randc: rand๋ ๋งค๋ฒ ๋
๋ฆฝ์ , randc๋ ๋ชจ๋ ๊ฐ์ ํ๋ฒ์ฉ ์ํ
soft constraint: soft ํค์๋๋ก ์ฐ์ ์์ ๋ฎ์ ์ ์ฝ ์ค์
constraint mode: constraint_name.constraint_mode(0)์ผ๋ก ๋นํ์ฑํ
๐ฌ 6. ํ๋ก์ธ์ค ๊ฐ ํต์
๋ณ๋ ฌ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ํ Mailbox์ Semaphore๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ฌ Mailbox
FIFO ํ ๊ธฐ๋ฐ ๋ฉ์์ง ์ ๋ฌ
• put(): ๋ฐ์ดํฐ ์ฝ์
• get(): ๋ฐ์ดํฐ ์ถ์ถ (๋ธ๋กํน)
• try_get(): ๋
ผ๋ธ๋กํน
๐ Semaphore
๊ณต์ ์์ ์ ๊ทผ ์ ์ด
• get(): ํค ํ๋ (๋ธ๋กํน)
• put(): ํค ๋ฐํ
• try_get(): ๋
ผ๋ธ๋กํน
๐ 7. Interface
Interface๋ ๊ด๋ จ ์๊ทธ๋๋ค์ ํ๋๋ก ๋ฌถ์ด ์ฐ๊ฒฐ์ ๋จ์ํํฉ๋๋ค.
⏱️ 8. Clocking Block
Clocking Block์ ํ ์คํธ๋ฒค์น์ DUT ๊ฐ ํ์ด๋ฐ ๊ฒฝ์ ์กฐ๊ฑด์ ๋ฐฉ์งํฉ๋๋ค.
• Race Condition ๋ฐฉ์ง: ์
๋ ฅ ์ํ๊ณผ ์ถ๋ ฅ ๋๋ผ์ด๋ธ ํ์ด๋ฐ ๋ถ๋ฆฌ
• ์ฝ๋ ๊ฐ๋
์ฑ: ํ์ด๋ฐ ์๋๊ฐ ๋ช
ํํ ๋๋ฌ๋จ
• ์ฌ์ฌ์ฉ์ฑ: ์ธํฐํ์ด์ค์ ์ ์ํ๋ฉด ๋ชจ๋ ์ปดํฌ๋ํธ์์ ๊ณต์
✅ 9. SystemVerilog Assertions (SVA)
SVA๋ ์ค๊ณ ์์ฑ์ ์ ์ธ์ ์ผ๋ก ๊ฒ์ฆํฉ๋๋ค. ํ๋กํ ์ฝ ์๋ฐ์ ์๋ ๊ฐ์งํฉ๋๋ค.
##N: N ์ฌ์ดํด ํ
##[M:N]: M~N ์ฌ์ดํด ์ฌ์ด
|->: Overlapping implication (๊ฐ์ ์ฌ์ดํด)
|=>: Non-overlapping implication (๋ค์ ์ฌ์ดํด)
[*N]: N๋ฒ ์ฐ์ ๋ฐ๋ณต
[*M:N]: M~N๋ฒ ๋ฐ๋ณต
๐ 10. Functional Coverage
Covergroup์ ํ ์คํธ๊ฐ ์ผ๋ง๋ ๋ง์ ์๋๋ฆฌ์ค๋ฅผ ์ปค๋ฒํ๋์ง ์ธก์ ํฉ๋๋ค.
๐ฆ 11. Program Block
program ๋ธ๋ก์ ํ ์คํธ๋ฒค์น์ DUT๋ฅผ ํ์ด๋ฐ์ ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
Module: ํ๋์จ์ด ๋ชจ๋ธ๋ง, Delta Cycle์์ ๋จผ์ ์คํ
Program: ํ
์คํธ๋ฒค์น ์ ์ฉ, Reactive Region์์ ์คํ
๐ก Program ๋ด ์๊ทธ๋ ๋ณ๊ฒฝ์ ํด๋น ํ์์คํ
์์ DUT์ ์ํฅ ์์
→ Race Condition ๋ฐฉ์ง
๐ฏ 12. ์ค์ ํ
1. ๊ณ์ธต์ ๊ตฌ์กฐ: Generator → Driver → Monitor → Scoreboard
2. Interface ์ฌ์ฉ: ํฌํธ ์ฐ๊ฒฐ ๋จ์ํ, ์ฌ์ฌ์ฉ์ฑ ํฅ์
3. Clocking Block: ํ์ด๋ฐ ๋ฌธ์ ์ฌ์ ๋ฐฉ์ง
4. Constrained Random: ์๋ ํ
์คํธ → CRV ์ ํ
5. Coverage Driven: ์ปค๋ฒ๋ฆฌ์ง ๋ชฉํ ์ค์ ํ ํ
์คํธ
6. Assertion: ํ๋กํ ์ฝ ๊ฒ์ฆ์ SVA๋ก
1. #delay ๋จ๋ฐ: ์ ๋ ์๊ฐ ๋์ ํด๋ญ ์ด๋ฒคํธ ์ฌ์ฉ
2. ๊ธ๋ก๋ฒ ๋ณ์: ํด๋์ค๋ก ์บก์ํ
3. ํ๋์ฝ๋ฉ: ํ๋ผ๋ฏธํฐ/๋๋คํ ํ์ฉ
4. fork ํ release ๋๋ฝ: disable fork ํ์
5. Coverage ์์ด ์งํ: ๋ชฉํ ์๋ ํ
์คํธ
๐ ํต์ฌ ์์ฝ
| ๊ธฐ๋ฅ | ํค์๋ | ์ฉ๋ |
|---|---|---|
| ๋ณ๋ ฌ ์คํ | fork-join | Driver, Monitor ๋์ ์คํ |
| OOP | class | Transaction, Component ๊ตฌ์กฐํ |
| ๋๋คํ | rand, constraint | CRV ํ ์คํธ ์๋ํ |
| IPC | mailbox | ์ปดํฌ๋ํธ ๊ฐ ํต์ |
| Assertion | property, assert | ํ๋กํ ์ฝ ์๋ ๊ฒ์ฆ |
| Coverage | covergroup | ํ ์คํธ ์๋ฃ๋ ์ธก์ |
๋ค์ ๋จ๊ณ: ์ด ๊ธฐ๋ฅ๋ค์ ์ฒด๊ณํํ ๊ฒ์ด UVM (Universal Verification Methodology)์ ๋๋ค. SystemVerilog ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ตํ ํ UVM์ผ๋ก ๋ฐ์ ์ํค์ธ์!
• SystemVerilog LRM: IEEE 1800-2017
• ์ถ์ฒ ์์ : "SystemVerilog for Verification" - Chris Spear
• ์จ๋ผ์ธ: Verification Academy, ASIC World
๋๊ธ
๋๊ธ ์ฐ๊ธฐ