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

Verilog 풀 가산기 설계 및 구현 가이드

가산기는 두 숫자의 덧셈을 수행하는 디지털 구성요소입니다. 프로세서의 ALU 내부 주요 구성요소이며 주소 증가, 테이블 인덱스, 버퍼 포인터 등 덧셈이 필요한 많은 곳에서 사용됩니다.

풀 가산기는 다른 입력 이진수들과 함께 캐리 입력을 더해 합(sum)과 캐리 출력(carry output)을 생성합니다.

진리표

A B Cin Cout Sum
00000
00101
01001
01110
10001
10110
11010
11111

설계

아래는 두 이진수를 신호 a와 b로 받아들이는 4비트 가산기 예제로, 둘 다 4비트 폭입니다. 가산기는 조합 회로이므로 Verilog에서 assign을 사용한 연속 할당이나 모든 입력을 포함하는 민감도 리스트를 가진 always 블록으로 모델링할 수 있습니다. 아래 코드는 전자의 접근 방식입니다.

module fulladd (
  input [3:0] a,
  input [3:0] b,
  input c_in,
  output c_out,
  output [3:0] sum
);
  assign {c_out, sum} = a + b + c_in;
endmodule

아래 코드는 입력 중 어느 것이든 값이 변경될 때마다 실행되는 always 블록을 사용합니다.

module fulladd (
  input [3:0] a,
  input [3:0] b,
  input c_in,
  output reg c_out,
  output reg [3:0] sum
);
  always @ (a or b or c_in) begin
    {c_out, sum} = a + b + c_in;
  end
endmodule

하드웨어 회로도

테스트벤치

module tb_fulladd;
  // 1. 테스트벤치 변수 선언
  reg [3:0] a;
  reg [3:0] b;
  reg c_in;
  wire [3:0] sum;
  integer i;
  
  // 2. 설계 인스턴스화 및 테스트벤치 변수와 연결
  fulladd fa0 (
    .a (a),
    .b (b),
    .c_in (c_in),
    .c_out (c_out),
    .sum (sum)
  );
  
  // 3. 설계 테스트를 위한 자극 제공
  initial begin
    a <= 0;
    b <= 0;
    c_in <= 0;
    $monitor ("a=0x%0h b=0x%0h c_in=0x%0h c_out=0x%0h sum=0x%0h", a, b, c_in, c_out, sum);
    
    // for 루프를 사용하여 입력에 랜덤 값 적용
    for (i = 0; i < 5; i = i + 1) begin
      #10 a <= $random;
      b <= $random;
      c_in <= $random;
    end
  end
endmodule

a와 b가 더해져 4비트보다 큰 숫자가 되면 합은 0으로 롤오버되고 c_out은 1이 됩니다. 예를 들어 노란색으로 하이라이트된 줄은 0x11이 되어 하위 4비트가 sum에 할당되고 비트#4가 c_out에 할당됩니다.

시뮬레이션 로그

ncsim> run
a=0x0 b=0x0 c_in=0x0 c_out=0x0 sum=0x0
a=0x4 b=0x1 c_in=0x1 c_out=0x0 sum=0x6
a=0x3 b=0xd c_in=0x1 c_out=0x1 sum=0x1
a=0x5 b=0x2 c_in=0x1 c_out=0x0 sum=0x8
a=0xd b=0x6 c_in=0x1 c_out=0x1 sum=0x4
a=0xd b=0xc c_in=0x1 c_out=0x1 sum=0xa
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 $timeformat 마스터하기: 정밀도 및 표시 제어
  10. 모든 범위에서 Verilog Timescale 이해 및 출력하기