Verilog/기본모듈 및 이론

Day 1 기본 개념 및 Full Adder

onthejobtrain 2024. 6. 11. 13:59

 

ARTIX-7 (XC7A35T1CPG236C) XILINX Board

이제 앞으로 사용할 보드 (clk : 100M Hz)

Assign문을 사용하여 오른쪽 사진처럼 하드웨어를 설계하였다.

소프트웨어 언어와 달리 코딩에 따라 하드웨어 Schematic이 설계되는것을 볼 수있다.

Open Elaborated Design을 누르고 코드에 이상이없다면 Schematic을 확인할 수 있다.

이런식으로 미리 설계하려던 Schematic과 같은지 확인하면 오류를 줄 일 수있다.

BASYS3 Pin Mapping
Constrs파일에 XDC Constrait 조건 파일이 있다

constrs = XDC constrait 조건 파일

xdc 파일은 xilinux 툴에서 사용하는 design constrant 파일)

sources = deign 설계 파일

 

Verilog코드를 보드에 다운하는 과정

Verilog code → H/W Netlist회로 → FPGA 맞는 배치회로 → FPGA 회로 파일

→ FPGA Download

반도체 설계과정이다. 나는 이중에 전반부 설계에서 verification, PI, RTL설계를 하고싶다.

 

LUT(Look Up Table) : 조합회로를 모아서 간단하게 표시하는 것

탑모듈을 간단하게 표현할때 많이 사용된다.

 

구조적 모델

구조적 모델링

구조적 모델링이란 상위모듈과 하위모듈을 나누어 설계하는것을 뜻한다.

 

과제 (4bit-adder)

module halfAdder(
    input a,
    input b,
    output sum,
    output carry
);
    assign sum = a^b;
    assign carry = a&b;
endmodule

module fullAdder(
    input a,
    input b,
    input cin,
    output sum,
    output carry
);
    wire w_sum1 , w_carry1 , w_carry2;
    halfAdder u_HA1(
        .a(a),
        .b(b),
        .sum(w_sum1),
        .carry(w_carry1)
    );
    halfAdder u_HA2(
        .a(w_sum1),
        .b(cin),
        .sum(sum),
        .carry(w_carry2)
    );
    
    assign carry = w_carry1 | w_carry2;
endmodule

module FA_4bit(
    input a,
    input b,
    input c,
    input d,
    input e,
    input f,
    input g,
    input h,
    output sum0,
    output sum1,
    output sum2,
    output sum3,
    output carry
    );
    wire FA_carry0 , FA_carry1 , FA_carry2, FA_carry3;
    halfAdder HA1(
        .a(a),
        .b(b),
        .sum(sum0),
        .carry(FA_carry0)
    );
    fullAdder FA1(
        .a(c),
        .b(d),
        .cin(FA_carry0),
        .sum(sum1),
        .carry(FA_carry1)
    );
    fullAdder FA2(
        .a(e),
        .b(f),
        .cin(FA_carry1),
        .sum(sum2),
        .carry(FA_carry2)
    );
    fullAdder FA3(
        .a(g),
        .b(h),
        .cin(FA_carry2),
        .sum(sum3),
        .carry(FA_carry3)
    );
    
    assign carry = FA_carry3;
    
endmodule

4bit adder Simulate