산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

실전 Verilog 게이트 레벨 설계: AND, OR, NOT 게이트와 2x1 멀티플렉서

이전 글에서 주요 내장 기본 요소들을 다루었고, 간단한 and, nor, not 게이트를 사용한 실전 예제를 보는 것이 좋겠습니다.

기본 요소의 출력 포트와 연결하기 위해 모듈 출력은 wire 타입이어야 합니다.

예제 #1: 2x1 멀티플렉서

module mux_2x1 (
  input a, b, sel,
  output out
);
  wire sel_n;
  wire out_0;
  not (sel_n, sel);
  and (out_0, a, sel);
  and (out_1, b, sel_n);
  or (out, out_0, out_1);
endmodule
module tb;
  reg a, b, sel;
  wire out;
  integer i;
  mux_2x1 u0 ( .a(a), .b(b), .sel(sel), .out(out));
  initial begin
    {a, b, sel} <= 0;
    $monitor ("T=%0t a=%0b b=%0b sel=%0b out=%0b", $time, a, b, sel, out);
    for (int i = 0; i < 10; i = i+1) begin
      #1 a <= $random; b <= $random; sel <= $random;
    end
  end
endmodule

시뮬레이션 로그

ncsim> run
T=0 a=0 b=0 sel=0 out=0
T=1 a=0 b=1 sel=1 out=0
T=2 a=1 b=1 sel=1 out=1
T=3 a=1 b=0 sel=1 out=1
T=6 a=0 b=1 sel=0 out=1
T=7 a=1 b=1 sel=0 out=1
T=8 a=1 b=0 sel=0 out=0
T=9 a=0 b=1 sel=0 out=1
T=10 a=1 b=1 sel=1 out=1
ncsim: *W,RNQUIE: Simulation is complete.

전가산기 (Full Adder)

module fa (
  input a, b, cin,
  output sum, cout
);
  wire s1, net1, net2;
  xor (s1, a, b);
  and (net1, a, b);
  xor (sum, s1, cin);
  and (net2, s1, cin);
  xor (cout, net1, net2);
endmodule
module tb;
  reg a, b, cin;
  wire sum, cout;
  integer i;
  fa u0 ( .a(a), .b(b), .cin(cin), .sum(sum), .cout(cout));
  initial begin
    {a, b, cin} <= 0;
    $monitor ("T=%0t a=%0b b=%0b cin=%0b cout=%0b sum=%0b", $time, a, b, cin, cout, sum);
    for (i = 0; i < 10; i = i+1) begin
      #1 a <= $random; b <= $random; cin <= $random;
    end
  end
endmodule

시뮬레이션 로그

ncsim> run
T=0 a=0 b=0 cin=0 cout=0 sum=0
T=1 a=0 b=1 cin=1 cout=1 sum=0
T=2 a=1 b=1 cin=1 cout=1 sum=1
T=3 a=1 b=0 cin=1 cout=1 sum=0
T=6 a=0 b=1 cin=0 cout=0 sum=1
T=7 a=1 b=1 cin=0 cout=1 sum=0
T=8 a=1 b=0 cin=0 cout=0 sum=1
T=9 a=0 b=1 cin=0 cout=0 sum=1
T=10 a=1 b=1 cin=1 cout=1 sum=1
ncsim: *W,RNQUIE: Simulation is complete.

2x4 디코더

module tb;
  reg x, y, en;
  wire a, b, c, d;
  integer i;
  dec_2x4 u0 ( .x(x), .y(y), .en(en), .a(a), .b(b), .c(c), .d(d));
  initial begin
    {x, y, en} <= 0;
    $monitor ("T=%0t x=%0b y=%0b en=%0b a=%0b b=%0b c=%0b d=%0b", $time, x, y, en, a, b, c, d);
    en <= 1;
    for (i = 0; i < 10; i = i+1) begin
      #1 x <= $random; y <= $random;
    end
  end
endmodule

시뮬레이션 로그

ncsim> run
T=0 x=0 y=0 en=1 a=0 b=0 c=0 d=1
T=1 x=0 y=1 en=1 a=0 b=0 c=1 d=0
T=2 x=1 y=1 en=1 a=1 b=0 c=0 d=0
T=4 x=1 y=0 en=1 a=0 b=1 c=0 d=0
T=5 x=1 y=1 en=1 a=1 b=0 c=0 d=0
T=6 x=0 y=1 en=1 a=0 b=0 c=1 d=0
T=7 x=1 y=0 en=1 a=0 b=1 c=0 d=0
T=10 x=1 y=1 en=1 a=1 b=0 c=0 d=0
ncsim: *W,RNQUIE: Simulation is complete.

4x2 인코더

module enc_4x2 (
  input a, b, c, d,
  output x, y
);
  or (x, b, d);
  or (y, c, d);
endmodule
module tb;
  reg a, b, c, d;
  wire x, y;
  integer i;
  enc_4x2 u0 ( .a(a), .b(b), .c(c), .d(d), .x(x), .y(y));
  initial begin
    {a, b, c, d} <= 0;
    $monitor("T=%0t a=%0b b=%0b c=%0b d=%0b x=%0b y=%0b", $time, a, b, c, d, x, y);
    for (i = 0; i <= 16; i = i+1) begin
      #1 {a, b, c, d} <= i;
    end
  end
endmodule

시뮬레이션 로그

ncsim> run
T=0 a=0 b=0 c=0 d=0 x=0 y=0
T=2 a=0 b=0 c=0 d=1 x=1 y=1
T=3 a=0 b=0 c=1 d=0 x=0 y=1
T=4 a=0 b=0 c=1 d=1 x=1 y=1
T=5 a=0 b=1 c=0 d=0 x=1 y=0
T=6 a=0 b=1 c=0 d=1 x=1 y=1
T=7 a=0 b=1 c=1 d=0 x=1 y=1
T=8 a=0 b=1 c=1 d=1 x=1 y=1
T=9 a=1 b=0 c=0 d=0 x=0 y=0
T=10 a=1 b=0 c=0 d=1 x=1 y=1
T=11 a=1 b=0 c=1 d=0 x=0 y=1
T=12 a=1 b=0 c=1 d=1 x=1 y=1
T=13 a=1 b=1 c=0 d=0 x=1 y=0
T=14 a=1 b=1 c=0 d=1 x=1 y=1
T=15 a=1 b=1 c=1 d=0 x=1 y=1
T=16 a=1 b=1 c=1 d=1 x=1 y=1
T=17 a=0 b=0 c=0 d=0 x=0 y=0
ncsim: *W,RNQUIE: Simulation is complete.

verilog

  1. 버릴로그(Verilog) 입문: 디지털 회로 설계를 위한 하드웨어 기술 언어
  2. Verilog 결합(Concatenation) & 복제(Replication) 연산자 실전 가이드
  3. Verilog 할당문 이해: 유형, 문법, 모범 사례
  4. Verilog 차단 vs 비차단 할당: 핵심 차이점 완벽 이해
  5. Verilog 함수 마스터하기: 효율적인 RTL 설계를 위한 활용법
  6. Verilog 태스크 이해: 함수와의 차이점, 문법, 활용법
  7. 게이트 레벨 모델링: 하드웨어 회로도에서 Verilog 코드로
  8. Verilog 게이트 지연 이해: 신뢰할 수 있는 디지털 설계를 위한 정확한 타이밍
  9. Verilog 클럭 생성기: 설계 및 구현 가이드
  10. Verilog 수학 함수 마스터하기: 효율적인 하드웨어 설계를 위한 활용