AND/OR ๊ฒ์ดํธ
- Verilog๋ ๊ธฐ๋ณธ ๊ฒ์ดํธ๋ฅผ ์ฌ์ ์ ์๋ ์์์ฒด๋ก ์ง์ํจ
- ์ด๋ค์ ๋ชจ๋์ฒ๋ผ ์ธ์คํด์คํ๋๊ณ , ๋ชจ๋ ์ ์๊ฐ ํ์ํ์ง ์์
- AND/OR ๊ฒ์ดํธ๋ ํ๋์ ์ค์นผ๋ผ ์ถ๋ ฅ๊ณผ ์ฌ๋ฌ ์ค์นผ๋ผ ์ ๋ ฅ์ ๊ฐ์ง
- ํฐ๋ฏธ๋ ๋ชฉ๋ก์์ ์ฒซ ๋ฒ์งธ ํฐ๋ฏธ๋์ ์ถ๋ ฅ์ด๊ณ , ๋๋จธ์ง๋ ์ ๋ ฅ์
- ์ด๋ฌํ ๊ฒ์ดํธ๋ ๋ ผ๋ฆฌ ํ๋ก๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ์ธ์คํด์คํ๋จ
- ์์์ฒด์ ๋ํด ์ธ์คํด์ค ์ด๋ฆ์ ์ง์ ํ ํ์๋ ์์
- ๊ฒ์ดํธ ์ธ์คํด์คํ์์ ๋ ๊ฐ ์ด์์ ์ ๋ ฅ์ ์ง์ ํ ์ ์์
// OUT, IN1, IN2 ์ ํธ ์ ์ธ wire OUT, IN1, IN2; // ๊ธฐ๋ณธ ๊ฒ์ดํธ ์ธ์คํด์คํ ์์ and a1(OUT, IN1, IN2); // a1 ์ธ์คํด์ค์ AND ๊ฒ์ดํธ: OUT = IN1 AND IN2 nand na1(OUT, IN1, IN2); // na1 ์ธ์คํด์ค์ NAND ๊ฒ์ดํธ: OUT = NOT (IN1 AND IN2) or or1(OUT, IN1, IN2); // or1 ์ธ์คํด์ค์ OR ๊ฒ์ดํธ: OUT = IN1 OR IN2 nor nor1(OUT, IN1, IN2); // nor1 ์ธ์คํด์ค์ NOR ๊ฒ์ดํธ: OUT = NOT (IN1 OR IN2) xor x1(OUT, IN1, IN2); // x1 ์ธ์คํด์ค์ XOR ๊ฒ์ดํธ: OUT = IN1 XOR IN2 xnor nx1(OUT, IN1, IN2); // nx1 ์ธ์คํด์ค์ XNOR ๊ฒ์ดํธ: OUT = NOT (IN1 XOR IN2) // 3์ ๋ ฅ NAND ๊ฒ์ดํธ; ์ฌ๊ธฐ์ IN3๋ ์ ์ธ๋์ง ์์์ผ๋ฏ๋ก ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์ // ์ฝ๋์ 'wire IN3;'๋ฅผ ์ถ๊ฐํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ ์ ์์ nand na1_3in(OUT, IN1, IN2, IN3); // ์ธ์คํด์ค ์ด๋ฆ ์์ด ๊ฒ์ดํธ ์ธ์คํด์คํ and (OUT, IN1, IN2); // ์ด๊ฒ์ ์ ์ ํ ๊ฒ์ดํธ ์ธ์คํด์คํ์
- ๋ ๊ฐ์ ์ ๋ ฅ์ ๊ฐ์ ํ ์ง๋ฆฌํ
- ๋ ๊ฐ ์ด์์ ์ ๋ ฅ์ ๊ฐ์ง ๊ฒ์ดํธ์ ์ถ๋ ฅ์ ์ง๋ฆฌํ๋ฅผ ๋ฐ๋ณต ์ ์ฉํ์ฌ ๊ณ์ฐ๋จ
ย
BUF/NOT ๊ฒ์ดํธ
- BUF/NOT ๊ฒ์ดํธ๋ ํ๋์ ์ค์นผ๋ผ ์ ๋ ฅ๊ณผ ํ๋ ์ด์์ ์ค์นผ๋ผ ์ถ๋ ฅ์ ๊ฐ์ง
- ํฌํธ ๋ชฉ๋ก์์ ๋ง์ง๋ง ํฐ๋ฏธ๋์ ์ ๋ ฅ์ด๊ณ , ๋๋จธ์ง๋ ์ถ๋ ฅ
// ๊ธฐ๋ณธ ๊ฒ์ดํธ ์ธ์คํด์คํ. buf b1(OUT1, IN); not n1(OUT1, IN); // ๋ ๊ฐ ์ด์์ ์ถ๋ ฅ์ ๊ฐ์ง buf buf b1_2out(OUT1, OUT2, IN); // ์ธ์คํด์ค ์ด๋ฆ ์์ด ๊ฒ์ดํธ ์ธ์คํด์คํ not(OUT1, IN); // ์ ์ ํ ๊ฒ์ดํธ ์ธ์คํด์คํ
- BUF/NOT ๊ฒ์ดํธ์ ์ถ๊ฐ ์ ์ด ์ ํธ๊ฐ ์๋ ๊ฒ์ดํธ๋ ์ฌ์ฉ ๊ฐ๋ฅํจ
- ์ด๋ฌํ ๊ฒ์ดํธ๋ ์ ์ด ์ ํธ๊ฐ ์ด์คํธ๋ ๊ฒฝ์ฐ์๋ง ์ ํ๋จ
- ์ ์ด ์ ํธ๊ฐ ๋์ด์คํธ๋ ๊ฒฝ์ฐ z๋ฅผ ์ ํํจ
- BUFIF/NOTIF์ ๋ํ ์ง๋ฆฌ ํ
- ์ด๋ฌํ ๊ฒ์ดํธ๋ ์ ์ด ์ ํธ๊ฐ ์ด์คํธ๋ ๊ฒฝ์ฐ์๋ง ์ ํธ๊ฐ ๋๋ฆฌ๋ธ๋์ด์ผ ํ ๋ ์ฌ์ฉ๋จ (์: ์ฌ๋ฌ ๋๋ผ์ด๋ฒ๊ฐ ์ ํธ๋ฅผ ๋๋ผ์ด๋ธํ๋ ๊ฒฝ์ฐ)
// bufif ๊ฒ์ดํธ์ ์ธ์คํด์คํ bufif1 b1(out, in, ctrl); bufif0 b0(out, in, ctrl); // notif ๊ฒ์ดํธ์ ์ธ์คํด์คํ notif1 n1(out, in, ctrl); notif0 n0(out, in, ctrl);
bufif1
๊ณผ bufif0
๋ ๋ฒํผ ๊ฒ์ดํธ์bufif1
์ctrl
์ด 1(๋์ ์ํ)์ผ ๋in
์์out
์ผ๋ก ์ ํธ๋ฅผ ์ ๋ฌํ๊ณ , ์ด 0(๋ฎ์ ์ํ)์ผ ๋out
์ high-impedance ์ํ(Z)๋ก ๋ง๋ฌbufif0
๋ctrl
์ด 0์ผ ๋in
์์out
์ผ๋ก ์ ํธ๋ฅผ ์ ๋ฌํ๊ณ , ์ด 1์ผ ๋out
์ high-impedance ์ํ๋ก ๋ง๋ฌ- ๊ฐ๊ฐ์ ๊ฒ์ดํธ๋ ๋ค์ ์ธ ๊ฐ์ง ํฐ๋ฏธ๋์ ๊ฐ์ง๊ณ ์์
in
: ์ ๋ ฅ ์ ํธout
: ์ถ๋ ฅ ์ ํธctrl
: ์ ์ด ์ ํธ
notif1
๊ณผ notif0
๋ ๋ถ์ ๋ฒํผ ๊ฒ์ดํธ์
๋๋ค.notif1
์ctrl
์ด 1์ผ ๋in
์ ๋ถ์ ๊ฐ์out
์ผ๋ก ์ ๋ฌํ๊ณ ,ctrl
์ด 0์ผ ๋out
์ high-impedance ์ํ๋ก ๋ง๋ฌnotif0
์ctrl
์ด 0์ผ ๋in
์ ๋ถ์ ๊ฐ์out
์ผ๋ก ์ ๋ฌํ๊ณ ,ctrl
์ด 1์ผ ๋out
์ high-impedance ์ํ๋ก ๋ง๋ฌ- ์ด๋ค ๋ํ
in
,out
,ctrl
์ธ ํฐ๋ฏธ๋์ ๊ฐ์ง๋ฉฐ, ๊ฐ๊ฐ์ ํฐ๋ฏธ๋ ์ญํ ์bufif
๊ฒ์ดํธ์ ๋์ผํจ
ย
๊ฒ์ดํธ ๋ ๋ฒจ ๋ฉํฐํ๋ ์
- 4-to-1 ๋ฉํฐํ๋ ์ ์ค๊ณํ๊ธฐ
- ๋ฉํฐํ๋ ์๋ฅผ ์ํ I/O ๋ค์ด์ด๊ทธ๋จ, ์ง๋ฆฌํ, ๊ทธ๋ฆฌ๊ณ ๋ ผ๋ฆฌ ๋ค์ด์ด๊ทธ๋จ
- ๋ ผ๋ฆฌ ๋ค์ด์ด๊ทธ๋จ์ ์ผ๋์ผ ๋์ ๊ด๊ณ๋ฅผ ๊ฐ์ง
- ๋ฉํฐํ๋ ์๋ฅผ ์ํ Verilog ์ค๋ช ๊ณผ ์คํฐ๋ฎฌ๋ฌ์ค
// 4๋1 ๋ฉํฐํ๋ ์ ๋ชจ๋. ์ด ๋ชจ๋์ ์ฌ๋ฌ ์ ๋ ฅ ์ ํธ ์ค ํ๋๋ฅผ ์ ํํ์ฌ ๋จ์ผ ์ถ๋ ฅ์ผ๋ก ์ ๋ฌํฉ๋๋ค. module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); // ํฌํธ ์ ์ธ: ์ด๋ค์ ๋ชจ๋ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ฐ๊ฒฐ์ ์ ๋๋ค. output out; // ๋ฉํฐํ๋ ์์ ์ถ๋ ฅ input i0, i1, i2, i3; // 4๊ฐ์ ์ ํ ๊ฐ๋ฅํ ์ ๋ ฅ input s1, s0; // ์ ํ ์ ํธ(์ด๋ค ์ ๋ ฅ์ด ํ์ฑํ๋ ์ง ๊ฒฐ์ ) // ๋ด๋ถ ์์ด์ด ์ ์ธ: ์ด๋ค์ ๋ด๋ถ์ ์ผ๋ก ๊ฒ์ดํธ ๊ฐ์ ์ฐ๊ฒฐ์ ์ฌ์ฉ๋ฉ๋๋ค. wire s1n, s0n; // s1๊ณผ s0์ ๋ถ์ ์ ์ํ ์์ด์ด wire y0, y1, y2, y3; // ๊ฐ AND ๊ฒ์ดํธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ์์ด์ด // NOT ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ ํธ์ ๋ถ์ ์์ฑ not (s1n, s1); // s1์ ๋ถ์ ๊ฐ ๊ณ์ฐ not (s0n, s0); // s0์ ๋ถ์ ๊ฐ ๊ณ์ฐ // ๊ฐ ์ ๋ ฅ์ ๋ํ AND ๊ฒ์ดํธ. ๊ฐ ๊ฒ์ดํธ๋ ์ ํ ์ ํธ์ ํด๋น ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค. and (y0, i0, s1n, s0n); // ์กฐ๊ฑด: s1์ด 0์ด๊ณ , s0์ด 0์ผ ๋ i0 ์ ํ and (y1, i1, s1n, s0); // ์กฐ๊ฑด: s1์ด 0์ด๊ณ , s0์ด 1์ผ ๋ i1 ์ ํ and (y2, i2, s1, s0n); // ์กฐ๊ฑด: s1์ด 1์ด๊ณ , s0์ด 0์ผ ๋ i2 ์ ํ and (y3, i3, s1, s0); // ์กฐ๊ฑด: s1์ด 1์ด๊ณ , s0์ด 1์ผ ๋ i3 ์ ํ // OR ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ์ถ๋ ฅ ์์ฑ. ์ด์ ๋จ๊ณ์์ ์ด๋ ํ๋๋ผ๋ ์ฐธ์ด์๋ค๋ฉด, ํด๋น ์ ๋ ฅ์ ์ถ๋ ฅ์ผ๋ก ์ ๋ฌํฉ๋๋ค. or (out, y0, y1, y2, y3); // y0, y1, y2, y3 ์ค ์ฐธ์ธ ์ ํธ๋ฅผ ์ถ๋ ฅ์ผ๋ก ์ ๋ฌ endmodule
// ์คํฐ๋ฎฌ๋ฌ์ค ๋ชจ๋ ์ ์ (ํฌํธ ์์) module stimulus; // ์ ๋ ฅ์ ์ฐ๊ฒฐ๋ ๋ณ์ ์ ์ธ reg IN0, IN1, IN2, IN3; // ์ ๋ ฅ ์ ํธ reg S1, S0; // ์ ํ ์ ํธ // ์ถ๋ ฅ ์์ด์ด ์ ์ธ wire OUTPUT; // ๋ฉํฐํ๋ ์ ์ธ์คํด์คํ mux4_to_1 mymux (OUTPUT, IN0, IN1, IN2, IN3, S1, S0); // ์ ๋ ฅ์ ์คํฐ๋ฎฌ๋ฌ์ค ์ ๊ณต // ์คํฐ๋ฎฌ๋ฌ์ค ๋ชจ๋ ์ ์ (ํฌํธ ์์) initial begin // ์ ๋ ฅ ๋ผ์ธ ์ค์ IN0 = 1; IN1 = 0; IN2 = 1; IN3 = 0; // ํ์ฌ ์ ๋ ฅ ์ํ ๋์คํ๋ ์ด #1 $display("IN0=%b, IN1=%b, IN2=%b, IN3=%b\n", IN0, IN1, IN2, IN3); // IN0 ์ ํ S1 = 0; S0 = 0; // ์ ํ ๋ผ์ธ ์ค์ #1 $display("S1=%b, S0=%b, OUTPUT=%b\n", S1, S0, OUTPUT); // ํ์ฌ ์ ํ ๋ฐ ์ถ๋ ฅ ์ํ ์ถ๋ ฅ // IN1 ์ ํ S1 = 0; S0 = 1; #1 $display("S1=%b, S0=%b, OUTPUT=%b\n", S1, S0, OUTPUT); // IN2 ์ ํ S1 = 1; S0 = 0; #1 $display("S1=%b, S0=%b, OUTPUT=%b\n", S1, S0, OUTPUT); // IN3 ์ ํ S1 = 1; S0 = 1; #1 $display("S1=%b, S0=%b, OUTPUT=%b\n", S1, S0, OUTPUT); end endmodule
- 4๋นํธ ๋ฆฌํ ์บ๋ฆฌ ํ ์ ๋
// 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); // a์ b์ XOR ์ฐ์ฐ and (c1, a, b); // a์ b์ AND ์ฐ์ฐ xor (sum, s1, c_in); // ์ฒซ ๋ฒ์งธ XOR ๊ฒฐ๊ณผ์ ์บ๋ฆฌ์ธ์ XOR ์ฐ์ฐ์ผ๋ก ์ต์ข ํฉ๊ณ ์์ฑ and (c2, s1, c_in); // ์ฒซ ๋ฒ์งธ XOR ๊ฒฐ๊ณผ์ ์บ๋ฆฌ์ธ์ AND ์ฐ์ฐ or (c_out, c2, c1); // ๋ AND ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ OR ์ฐ์ฐํ์ฌ ์ต์ข ์บ๋ฆฌ์์ ์์ฑ endmodule
- 4๋นํธ ๋ฆฌํ ์บ๋ฆฌ ์ ๊ฐ์ฐ๊ธฐ๋ ๋ค ๊ฐ์ 1๋นํธ ์ ๊ฐ์ฐ๊ธฐ๋ก ๊ตฌ์ฑํ ์ ์์
// 4๋นํธ ์ ๊ฐ์ฐ๊ธฐ ์ ์ module fulladd4 (sum, c_out, a, b, c_in); // ์ /์ถ๋ ฅ ํฌํธ ์ ์ธ output [3:0] sum; // 4๋นํธ ํฉ๊ณ ์ถ๋ ฅ output c_out; // ์บ๋ฆฌ ์ถ๋ ฅ input [3:0] a, b; // 4๋นํธ A, B ์ ๋ ฅ input c_in; // ์บ๋ฆฌ ์ ๋ ฅ // ๋ด๋ถ ์ฐ๊ฒฐ์ ์ ์ธ wire c1, c2, c3; // ๊ฐ 1๋นํธ ์ ๊ฐ์ฐ๊ธฐ์ ์บ๋ฆฌ ์ถ๋ ฅ์ ์ํ ๋ด๋ถ ์ฐ๊ฒฐ์ // ๋ค ๊ฐ์ 1๋นํธ ์ ๊ฐ์ฐ๊ธฐ ์ธ์คํด์คํ. // ๊ฐ ์ ๊ฐ์ฐ๊ธฐ๋ ์ด์ ๋จ๊ณ์ ์บ๋ฆฌ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์, ๋ค์ ๋จ๊ณ๋ก ์บ๋ฆฌ๋ฅผ ์ ๋ฌํฉ๋๋ค. fulladd fa0 (sum[0], c1, a[0], b[0], c_in); // ์ฒซ ๋ฒ์งธ ๋นํธ์ ๋ํ ์ ๊ฐ์ฐ๊ธฐ fulladd fa1 (sum[1], c2, a[1], b[1], c1); // ๋ ๋ฒ์งธ ๋นํธ์ ๋ํ ์ ๊ฐ์ฐ๊ธฐ, ์ฒซ ๋ฒ์งธ ์บ๋ฆฌ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ fulladd fa2 (sum[2], c3, a[2], b[2], c2); // ์ธ ๋ฒ์งธ ๋นํธ์ ๋ํ ์ ๊ฐ์ฐ๊ธฐ, ๋ ๋ฒ์งธ ์บ๋ฆฌ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ fulladd fa3 (sum[3], c_out, a[3], b[3], c3); // ๋ค ๋ฒ์งธ ๋นํธ์ ๋ํ ์ ๊ฐ์ฐ๊ธฐ, ์ธ ๋ฒ์งธ ์บ๋ฆฌ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ต์ข ์บ๋ฆฌ๋ฅผ ์์ฑ endmodule // stimulus ๋ชจ๋(์ต์์ ๋ชจ๋) ์ ์ module stimulus; // ๋ณ์ ์ค์ reg [3:0] A, B; // 4๋นํธ ๋ ์ง์คํฐ A์ B reg C_IN; // ์บ๋ฆฌ ์ ๋ ฅ์ ์ํ ๋ ์ง์คํฐ wire [3:0] SUM; // 4๋นํธ ํฉ๊ณ๋ฅผ ์ํ ์์ด์ด wire C_OUT; // ์บ๋ฆฌ ์ถ๋ ฅ์ ์ํ ์์ด์ด // 4๋นํธ ์ ๊ฐ์ฐ๊ธฐ ์ธ์คํด์คํ. FA1_4๋ผ๊ณ ์ด๋ฆ ์ง์ fulladd4 FA1_4(SUM, C_OUT, A, B, C_IN); // ์ ํธ ๊ฐ๋ค์ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํ ์ค์ initial begin // ์๋ฎฌ๋ ์ด์ ์์ ์ ํธ์ ๊ฐ์ ํ์ $monitor($time, " A= %b, B=%b, C_IN= %b, -- C_OUT= %b, SUM= %b\n", A, B, C_IN, C_OUT, SUM); end // ์ ๋ ฅ๊ฐ์ ์กฐ์ํ์ฌ ์๋ฎฌ๋ ์ด์ initial begin A = 4'd0; B = 4'd0; C_IN = 1'b0; // ์ด๊ธฐ๊ฐ ์ค์ #5 A = 4'd3; B = 4'd4; // 5 time units ํ ๊ฐ ๋ณ๊ฒฝ #5 A = 4'd2; B = 4'd5; // ์ถ๊ฐ ์๊ฐ ์ดํ ๊ฐ ๋ณ๊ฒฝ #5 A = 4'd9; B = 4'd9; // ์ถ๊ฐ ์๊ฐ ์ดํ ๊ฐ ๋ณ๊ฒฝ #5 A = 4'd10; B = 4'd15; // ์ถ๊ฐ ์๊ฐ ์ดํ ๊ฐ ๋ณ๊ฒฝ #5 A = 4'd10; B = 4'd5; C_IN = 1'b1; // ์ถ๊ฐ ์๊ฐ ์ดํ ๊ฐ ๋ณ๊ฒฝ ๋ฐ ์บ๋ฆฌ ์ ๋ ฅ ์ค์ end endmodule
- ์ํ์ ๋ฐฉ์ ์, ๋ ผ๋ฆฌ ๋ค์ด์ด๊ทธ๋จ, ๊ทธ๋ฆฌ๊ณ Verilog ์ค๋ช
- 4๋นํธ ๋ฆฌํ ์บ๋ฆฌ ํ ์ ๋๋ ๋ค ๊ฐ์ 1๋นํธ ํ ์ ๋๋ก ๊ตฌ์ฑ๋ ์ ์์
ย
์์น, ํ๊ฐ, ๊ทธ๋ฆฌ๊ณ ํด์คํ ๋๋ ์ด
- ์์น ๋๋ ์ด
- ๊ฒ์ดํธ ์ถ๋ ฅ์ด ๋ค๋ฅธ ๊ฐ์์ 1๋ก ์ ํ๋๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์
- ํ๊ฐ ๋๋ ์ด
- ๊ฒ์ดํธ ์ถ๋ ฅ์ด ๋ค๋ฅธ ๊ฐ์์ 0์ผ๋ก ์ ํ๋๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์
- ํด์คํ ๋๋ ์ด
- ๊ฒ์ดํธ ์ถ๋ ฅ์ด ๋ค๋ฅธ ๊ฐ(์ฆ, 0, 1, x)์์ ๊ณ ์ํผ๋์ค ๊ฐ(z)์ผ๋ก ์ ํ๋๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์
- ๊ฐ์ด x๋ก ๋ณ๊ฒฝ๋๋ฉด, ์ธ ๋๋ ์ด ์ค ์ต์๊ฐ์ด ๊ณ ๋ ค๋จ
- ์ธ ๊ฐ์ง ํ์ ์ ๋๋ ์ด ์ฌ์์ด ํ์ฉ๋จ
- ๋ง์ฝ ํ๋์ ๋๋ ์ด๋ง ์ง์ ๋๋ฉด, ์ด ๊ฐ์ ๋ชจ๋ ์ ํ์ ์ฌ์ฉ๋จ
- ๋ง์ฝ ๋ ๊ฐ๊ฐ ์ง์ ๋๋ฉด, ๊ทธ๊ฒ๋ค์ ์์น๊ณผ ํ๊ฐ ๋๋ ์ด์ด๋ฉฐ, ํด์คํ ๋๋ ์ด๋ ๊ทธ ๋ ์ค ์ต์๊ฐ
- ๋ง์ฝ ๋๋ ์ด๊ฐ ์ง์ ๋์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ๊ฐ์ ์ ๋ก (์ฆ, ๋๋ ์ด ์์)
// ๋ชจ๋ ์ ํ์ ๋ํ delay_time์ ๋๋ ์ด and # (delay_time) a1(out, i1, i2); // ์์น ๋ฐ ํ๊ฐ ๋๋ ์ด ์คํ and # (rise_val, fall_val) a2(out, i1, i2); // ์์น, ํ๊ฐ ๋ฐ ํด์คํ ๋๋ ์ด ์คํ bufif0 # (rise_val, fall_val, turnoff_val) b1 (out, in, control); and #(5) a1(out, i1, i2); // ๋ชจ๋ ์ ํ์ ๋ํ 5์ ๋๋ ์ด and #(4,6) a2(out, i1, i2); // ์์น = 4, ํ๊ฐ = 6 bufif0 #(3,4,5) b1(out, in, control); // ์์น = 3, ํ๊ฐ = 4, ํด์คํ = 5
ย
Min/Typ/Max ๊ฐ
- Verilog๋ ๊ฐ ์ ํ์ ์ง์ฐ์ ๋ํด ์ถ๊ฐ์ ์ธ ์ ์ด ์์ค์ ์ ๊ณตํจ
- ๊ฐ ์ ํ์ ์ง์ฐ(์์น, ํ๊ฐ, ํด์คํ)์ ๋ํด ์ธ ๊ฐ์ง ๊ฐ(min/typ/max)์ ์ง์ ํ ์ ์์
- Min/Typ/Max ๊ฐ์ ๊ฐ๊ฐ ๋์์ด๋๊ฐ ๊ฒ์ดํธ๊ฐ ๊ฐ์ง ๊ฒ์ผ๋ก ์์ํ๋ ์ต์/์ผ๋ฐ/์ต๋ ์ง์ฐ ๊ฐ์
- ์ด๋ฌํ ๊ฐ์ Verilog ์คํ ์๊ฐ์ ์ ํํ ์ ์์(๊ธฐ๋ณธ๊ฐ์ typ)
// ํ๋์ ์ง์ฐ // ๋ง์ฝ +mindelays๊ฐ ์ง์ ๋๋ฉด, delay=4 // ๋ง์ฝ +typdelays๊ฐ ์ง์ ๋๋ฉด, delay=5 // ๋ง์ฝ +maxdelays๊ฐ ์ง์ ๋๋ฉด, delay=6 and # (4:5:6) a1(out, i1, i2); // ๋ ๊ฐ์ ์ง์ฐ // ๋ง์ฝ +mindelays๊ฐ ์ง์ ๋๋ฉด, rise=3, fail=5, turn-off=min(3,5) // ๋ง์ฝ +typdelays๊ฐ ์ง์ ๋๋ฉด, rise=4, fail=6, turn-off=min(4,6) // ๋ง์ฝ +maxdelays๊ฐ ์ง์ ๋๋ฉด, rise=5, fail=7, turn-off=min(5,7) and # (3:4:5, 5:6:7) a2(out, i1, i2); // ์ธ ๊ฐ์ ์ง์ฐ // ๋ง์ฝ +mindelays๊ฐ ์ง์ ๋๋ฉด, rise=2 fail=3 turn-off=4 // ๋ง์ฝ +typdelays๊ฐ ์ง์ ๋๋ฉด, rise=3 fail=4 turn-off=5 // ๋ง์ฝ +maxdelays๊ฐ ์ง์ ๋๋ฉด, rise=4 fail=5 turn-off=6 and # (2:3:4, 3:4:5, 4:5:6) a3(out, i1, i2); // ์ต๋ ์ง์ฐ์ผ๋ก ์๋ฎฌ๋ ์ด์ ํธ์ถ > verilog test.v +maxdelays // ์ต์ ์ง์ฐ์ผ๋ก ์๋ฎฌ๋ ์ด์ ํธ์ถ > verilog test.v +mindelays // ์ผ๋ฐ์ ์ธ ์ง์ฐ์ผ๋ก ์๋ฎฌ๋ ์ด์ ํธ์ถ > verilog test.v +typdelays
ย
์ง์ฐ ์์
- ๋ ๊ฐ์ ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ ์์
// ๋จ์ํ ์กฐํฉํ ๋ชจ๋ D๋ฅผ ์ ์ module D (out, a, b, c); // I/O ํฌํธ ์ ์ธ output out; input a,b,c; // ๋ด๋ถ์ ๋ท wire e; // ํ๋ก๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ๊ธฐ๋ณธ ๊ฒ์ดํธ ์ธ์คํด์คํ and #(5) a1(e, a, b); // ๊ฒ์ดํธ al์ ๋ํ 5 ๋จ์ ์๊ฐ์ ์ง์ฐ or #(4) o1(out, e, c); // ๊ฒ์ดํธ o1์ ๋ํ 4 ๋จ์ ์๊ฐ์ ์ง์ฐ endmodule // ์คํ์ ์ํ ์์ ๋ ๋ฒจ ๋ชจ๋ module stimulus; // ๋ณ์ ์ ์ธ reg A, B, C; wire OUT; // ๋ชจ๋ D์ ์ธ์คํด์คํ D d1 (OUT, A, B, C); // ์ ๋ ฅ์ stimulate initial begin A= 1'b0; B= 1'b0; C= 1'b0; // A, B, C๋ฅผ ๋ชจ๋ 0์ผ๋ก ์ค์ #10 A= 1'b1; B= 1'b1; C= 1'b1; // 10 ๋จ์ ์๊ฐ ํ A, B, C๋ฅผ ๋ชจ๋ 1๋ก ์ค์ #10 A= 1'b1; B= 1'b0; C= 1'b0; // ์ถ๊ฐ 10 ๋จ์ ์๊ฐ ํ A๋ 1, B์ C๋ 0์ผ๋ก ์ค์ #20 $finish; // ์ถ๊ฐ 20 ๋จ์ ์๊ฐ ํ ์๋ฎฌ๋ ์ด์ ์ข ๋ฃ end endmodule
D
๋ชจ๋์a
์b
์ AND ์ฐ์ฐ ๋ฐe
์c
์ OR ์ฐ์ฐ์ ์ํํ๋ฉฐ, ์ด๋ ๊ฐ๊ฐa1
๊ณผo1
๊ฒ์ดํธ๋ฅผ ํตํด ์ํ๋จ. ๊ฒ์ดํธa1
์ 5๋จ์ ์๊ฐ์ ์ง์ฐ์,o1
์ 4๋จ์ ์๊ฐ์ ์ง์ฐ์ ๊ฐ์ง
stimulus
๋ชจ๋์ ํ ์คํธ ํน์ ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ์ ์ ๊ณตํ๋ฉฐ, ์ด๋D
๋ชจ๋์ ์ธ์คํด์คd1
์ ํฌํจํ๊ณ ์์. ์ด ๋ชจ๋์์๋ ๋ณ์A
,B
,C
์ ๊ฐ์ด ์๋ฎฌ๋ ์ด์ ๋์ ์ด๋ป๊ฒ ๋ณํ๋์ง๋ฅผ ์ ์ํจ. ์ด๋ฌํ ๋ณํ๋initial
๋ธ๋ก ๋ด์์ ์๊ฐ ์ง์ฐ(#
)์ ์ฌ์ฉํ์ฌ ์ ์๋จ. ๋ง์ง๋ง์ผ๋ก,#20 $finish;
๋ผ์ธ์ ์๋ฎฌ๋ ์ด์ ์ 20 ๋จ์ ์๊ฐ ํ์ ์ข ๋ฃํจ
ย
ย
ย
ย
ย
ย
ย
ย
ย
ย