๋ชจ๋
- ๋ชจ๋์ ๋ช ํํ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ ๊ธฐ๋ณธ ๊ตฌ์ถ ๋ธ๋ก์
- ๋ชจ๋ ์ด๋ฆ, ํฌํธ ๋ชฉ๋ก, ํฌํธ ์ ์ธ, ์ ํ์ ๋งค๊ฐ๋ณ์
- ๋ณ์ ์ ์ธ, ๋ฐ์ดํฐ ํ๋ก์ฐ ๋ฌธ์ฅ, ํ์ ๋ชจ๋์ ์ธ์คํด์คํ, ํ๋ ๋ธ๋ก, ์์ , ๋ฐ ํจ์๋ค
- SR ๋์น ์์
ย
ํฌํธ ๋ชฉ๋ก
- ํฌํธ(ํฐ๋ฏธ๋๋ก ๋ถ๋ฆผ)๋ ๋ชจ๋์ด ๊ทธ ํ๊ฒฝ๊ณผ ์ํตํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ
- ๋ชจ๋์ ๋ด๋ถ๋ ํ๊ฒฝ์๊ฒ ๋ณด์ด์ง ์์
- ํ๊ฒฝ์ ํฌํธ๋ฅผ ํตํด์๋ง ๋ชจ๋๊ณผ ์ํธ ์์ฉํ ์ ์์
- 4-๋นํธ ํ ์ ๋ ์์
- Top: ์ต์์ ๋ชจ๋๋ก ํฌํธ๊ฐ ์์
- fulladd4: ํ ์ ๋ ๋ชจ๋์ด๋ฉฐ Top ์๋์์ ์ธ์คํด์คํ๋จ
- fulladd4๋ ํฌํธ a, b, c_in์ ์ ๋ ฅ์ ๋ฐ๊ณ ํฌํธ sum, c_out์์ ์ถ๋ ฅ์ ์์ฑํจ
ย
ํฌํธ ์ ์ธ
- ๋ชจ๋ ํฌํธ๋ ๋ชจ๋ ๋ด์ ํฌํธ ๋ชฉ๋ก์์ ์ ์ธ๋์ด์ผ ํจ
- ํฌํธ ๋ชฉ๋ก์ ๊ฐ ํฌํธ๋ ํฌํธ ์ ํธ์ ๋ฐฉํฅ์ ๊ธฐ๋ฐํ์ฌ ์ ๋ ฅ, ์ถ๋ ฅ, ๋๋ inout์ผ๋ก ์ ์๋จ
verilog ํค์๋ | ํฌํธ ํ์
|
input | ์
๋ ฅ ํฌํธ |
output | ์ถ๋ ฅ ํฌํธ |
inout | ์๋ฐฉํฅ ํฌํธ |
- 4-๋นํธ ํ ์ ๋ ์์
module fulladd4(sum, c_out, a, b, c_in); //ํฌํธ ์ ์ธ ๋ถ๋ถ ์์ output [3:0] sum; output c_cout; input [3:0] a, b; input c_in; //ํฌํธ ์ ์ธ ๋ถ๋ถ ๋ ... <๋ชจ๋ ๋ด๋ถ> ... endmodule module fulladd4(output reg [3:0] sum, output reg c_out, input [3:0] a, b, input c_in); ... โน๋ชจ๋ ๋ด๋ถ> ... endmodule
ย
ํฌํธ ์ฐ๊ฒฐ ๊ท์น
์ ๋ ฅ
- ๋ด๋ถ์ ์ผ๋ก, ์ ๋ ฅ ํฌํธ๋ ํญ์ net ํ์ ์ด์ด์ผ ํจ
- ์ธ๋ถ์ ์ผ๋ก, ์ ๋ ฅ์ reg ๋๋ net์ธ ๋ณ์์ ์ฐ๊ฒฐ๋ ์ ์์
ย
์ถ๋ ฅ
- ๋ด๋ถ์ ์ผ๋ก, ์ถ๋ ฅ ํฌํธ๋ reg ๋๋ net ํ์ ์ด ๋ ์ ์์
- ์ธ๋ถ์ ์ผ๋ก, ์ถ๋ ฅ์ ํญ์ net์ ์ฐ๊ฒฐ๋์ด์ผ ํจ (์ ๋ reg ํ์ ์ด ์๋!)
ย
์๋ฐฉํฅ
- Inout ํฌํธ๋ ํญ์ net ํ์ ์ด์ด์ผ ํจ
ย
๋๋น ์ผ์น
- ๋ชจ๋ ๊ฐ ํฌํธ ์ฐ๊ฒฐ์ ๋ง๋ค ๋ ๋ด๋ถ ๋ฐ ์ธ๋ถ ํฌํธ ๋นํธ ํญ์ด ์ผ์นํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํจ
ย
์ฐ๊ฒฐ๋์ง ์์ ํฌํธ
- Verilog๋ ํน์ ํ ์ด์ ๋ก ํฌํธ๊ฐ ์ฐ๊ฒฐ๋์ง ์๊ฒ ํ์ฉํจ
ย
๋ถ์ ์ ํ ํฌํธ ์ฐ๊ฒฐ์ ์์
module Top; // ์ฐ๊ฒฐ ๋ณ์ ์ ์ธ reg [3:0]A, B; reg C_IN; reg [3:0] SUM; // ์ด ๋ถ๋ถ์ net ํ์ ์ด์ด์ผ ํจ (์: wire) wire c_OUT; // fulladd4๋ฅผ ์ธ์คํด์คํํ๊ณ , ์ด๋ฅผ fa0์ด๋ผ ๋ถ๋ฆ fulladd4 fa0 (SUM, C_OUT, A, B, C_IN) ; // ๋ถ์ ์ ํ ์ฐ๊ฒฐ์ธ๋ฐ, ์ด๋ fulladd4 ๋ชจ๋์ ์ถ๋ ฅ ํฌํธ sum์ด Top ๋ชจ๋์ ๋ ์ง์คํฐ ๋ณ์ SUM์ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ // ์ผ๋ฐ์ ์ผ๋ก ์ถ๋ ฅ ํฌํธ๋ wire ํ์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ . . <stimulus> . . endmodule
module fulladd4 (sum, c_out, a, b, c_in); // ํฌํธ ์ ์ธ ๋ถ๋ถ ์์ output [3:0] sum; output c_cout; // input [3:0] a, b; input c_in; // ํฌํธ ์ ์ธ ๋ถ๋ถ ๋ ... <module internals> ... endmodule
ย
์ธ๋ถ ์ ํธ์ ํฌํธ ์ฐ๊ฒฐํ๊ธฐ
- ์ ๋ ฌ๋ ๋ชฉ๋ก์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ (์์น ๋งคํ)
- ์ฐ๊ฒฐ๋์ด์ผ ํ๋ ์ ํธ๋ค์ ๋ชจ๋ ์ ์์์ ํฌํธ ๋ชฉ๋ก๊ณผ ๋์ผํ ์์๋ก ๋ชจ๋ ์ธ์คํด์คํ์์ ๋ํ๋์ผ ํจ
- ์๋ ์ฝ๋์ ๊ฐ์ด argument์ ์์๊ฐ ๊ฐ์์ผ ํจ
... fulladd4 fa_ordered(SUM, C_OUT, A, B, C_IN); ...
... module fulladd4(sum, c_out, a, b, c_in); ...
- ์ด๋ฆ์ผ๋ก ํฌํธ ์ฐ๊ฒฐํ๊ธฐ (์ด๋ฆ ๋งคํ)
- ํฐ ๋์์ธ์ ํฌํธ ์์๋ฅผ ๊ธฐ์ตํ๋ ๊ฒ์ ์ค์ฉ์ ์ด์ง ์์
.c_out(C_OUT)
:fa_byname
์ธ์คํด์ค์c_out
ํฌํธ๋ฅผC_OUT
์ ํธ์ ์ฐ๊ฒฐํจ.sum(SUM)
:fa_byname
์ธ์คํด์ค์sum
ํฌํธ๋ฅผSUM
์ ํธ์ ์ฐ๊ฒฐํจ.b(B)
:fa_byname
์ธ์คํด์ค์b
ํฌํธ๋ฅผB
์ ํธ์ ์ฐ๊ฒฐํจ.c_in(C_IN)
:fa_byname
์ธ์คํด์ค์c_in
ํฌํธ๋ฅผC_IN
์ ํธ์ ์ฐ๊ฒฐํจ.a(A)
:fa_byname
์ธ์คํด์ค์a
ํฌํธ๋ฅผA
์ ํธ์ ์ฐ๊ฒฐํจ
// ๋ชจ๋ fa_byname์ ์ธ์คํด์คํํ๊ณ ์ ํธ๋ฅผ ์ด๋ฆ์ผ๋ก ํฌํธ์ ์ฐ๊ฒฐํจ fulladd4 fa_byname (.c_out(C_OUT), .sum(SUM), .b(B), .c_in(C_IN), .a(A));
// ๋ชจ๋ fa_byname์ ์ธ์คํด์คํํ๊ณ ์ ํธ๋ฅผ ์ด๋ฆ์ผ๋ก ํฌํธ์ ์ฐ๊ฒฐ fulladd4 fa_byname (.sum(SUM), .b(B), .c_in(C_IN), .a(A));
ย
๊ณ์ธต์ ์ด๋ฆ (Hierarchical Names)
- ๊ณ์ธต์ ์ด๋ฆ์ ๊ฐ ๊ณ์ธต ์์ค์ ๋ํด ์ (" . ")์ผ๋ก ๊ตฌ๋ถ๋ ์๋ณ์ ๋ชฉ๋ก์
- ์๋ฅผ ๋ค์ด,
top_module.sub_module.signal_name
์signal_name
์ ํธ๊ฐsub_module
์ ํ์ ๋ชจ๋ ๋ด์ ์๊ณ , ๊ทธ ๋ชจ๋์ดtop_module
์ ์์ ๋ชจ๋ ๋ด์ ์๋ค๋ ๊ฒ์ ๋ํ๋
- SR ๋์น ๋์์ธ ๊ณ์ธต ์์
- ์ต์์(๋ฃจํธ) ๋ชจ๋์ "stimulus"๋ก ๋ช ๋ช ๋ ์ ์์
- ์๋ฅผ ๋ค์ด, ์ ์ฒด ์ค๊ณ์์ "stimulus"๋ผ๋ ๋ชจ๋์ ๊ฐ์ฅ ์์ ๊ณ์ธต์ ์์นํ์ฌ ์ ์ฒด ์์คํ ์ ๊ตฌ๋ํ๊ฑฐ๋ ํ ์คํธ ์คํ๋ฌด๋ฆฌ์ค(stimulus)๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ์ํํ ์ ์์. ์ด๋ฐ ๊ฒฝ์ฐ "stimulus"๋ ๊ณ์ธต ๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์์ ์์นํจ