카테고리 없음

verilog 기초

reko_ 2022. 4. 23. 16:51

HDL(hardware description language)

 

- 회로를 설계하는 하드웨어 기술 언어

 

- 대표적으로 verilog, VHDL이 존재, verilog는 C와 비슷(IEEE standard 1364)

 

- 거의 verilog를 사용 - 삼성 lg

 

 

 


 

Verilog 

 

- 대소문자 구별

 

- 신호를 정의할 떄 키워드 wire 사용

ex) wire carryIn;

 

- 숫자표현 : [bit 단위 길이]'[진법][값]

ex) 8'd100(dec) = 8'h64(hex) = 8'b0110_0100(binary)

     668 = 10'b10_1001_1100 = 10'h29C

 

 

Module

 

특정 행동을 하기 위한 회로를 모아놓은 단위

- 범위 : module 키워드로 시작하여 endmodule로 끝

module decoder3to8(...);

...

endmodule

 

- 모듈 내에 다른 모듈 정의 불가능, 호출은 가능

- 모듈 이름 : 알파벳으로 시작하고 숫자 기호 시작은 불가능 (C와 동일)

 

 

입출력 신호

 

- 입력 신호 키워드 : input

- 출력 신호 키워드 : output

 

모듈 이름 뒤에 이름과 키워드를 나열

module decoder3to8 (input A2, input A1, input A0, output [7:0]D );
////
///
endmodule

 

또는 이름만 선언 하고 모듈안에 키워드와 이름을 다시 선언

module decoder3to8 (A2, A1, A0, D );
	input A2, A1, A0;
	ouput [7:0]D;
	//
	//
endmodule

 

 

Vector

 

- 한개의 변수명으로 여러 bit의 신호를 표현

 

- 표현식

   <type> [<left Index>:<right Index>] <name>

   ex) 4b 신호 foo -  wire [3:0]  foo = (bit);

 

 

left 인덱스 = MSB

MSB(Most Significant bit)는 비트 중 가장 큰값으로 가장 왼쪽에

 

right 인덱스 = LSB

LSB(Least Significant bit)는 비트 중 가장 작은값으로 가장 오른쪽에

 

초기화

 

 

논리 및 비트 연산자

 

 

 

assign 키워드로 신호에 값을 배정할 수 있다

wire a, b, c, d;

     assign d = (a && b) || c;

 

 

모듈 설계 예제

 

Half adder 예제

 

 

회로 설계도 설계 예제

 

 

3항 연산자 구현

 

 

제어문

 

if else문

module mux2to1 (s, d0, d1, z);
    input s, d0, d1;
    output z;
    reg z; // always 문에서 배정되는 겂은 항상 reg type

    always @(*) begin   // * = 알아서 인풋 설정
        if( s == 0 ) begin
            z = d0;
        end
        else begin
            z = d1;
        end
    end
endmodule

 

 

case 문

module mux2to1 (s, d0, d1, z);
    input [1:0] s;
    input d0, d1, d2, d3;
    output z;
    reg z; // always 문에서 배정되는 겂은 항상 reg type

    always @(*) begin   // * = 알아서 인풋 설정
        case( s )
            0 : z = d0;
            1 : z = d1;
            2 : z = d2;
            defalut : z = d3;
        endcase
    end
endmodule

 

입력이 많으면 if- else 보다는 case문이  보통 더 효율적으로 합성 됨

 

제어문을 사용하려면 reg + always으로 인풋 아웃풋을 설정하고 아니면 wire + assign

 

 

Test vench

- 설계한 회로(DUT)에 입력 신호를 인가하고 출력 신호가 맞는지 확인함.

- 디지털 회로로 쉽게 구현할 수 없는 다양한 문법 사용 가능