이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

14. 하드웨어 기술 언어와 Verilog HDL(Hardware Description Language: HDL)

  • 2020.05.22 17:45
  • 학부 수업/디지털시스템
반응형

하드웨어 기술 언어란 전자 회로를 정밀하게 기술하는 데 사용하는 컴퓨터 언어이다. 이는 회로를 설계하는 다른 방법인 Schematic Capture와 차이점이 있는데 아래와 같다.

  • Schematic Capture
    • 여러 데이터 플로우를 다루는데 유용함
    • 회로의 전체적 오버뷰 제공
    • 하드웨어와 직접적으로 연관이 있음
    • 프로그래밍 능력 필요 없음
    • 작은 사진에 많은 정보를 담을 수 있음
    • 아날로그/디지털 컴포넌트를 모두 다루기 편함
    • 알고리즘엔 좋지 않음
    • 데이터페스를 다루는게 불편함
    • 유지보수에 인터페이스가 좋지 않음
    • 재사용성 낮음
  • HDL
    • 유연하고 수정하기 좋음
    • 알고리즘을 다룰 수 있음
    • 데이터페스를 다루는데 좋음
    • 전자회로를 다루기 편함 (텍스트 파일을 수정하기만 하면 됨)
    • 전체 그림을 보기 어려울 수 있음
    • 프로그래밍 능력 필요함
    • 하드웨어와 거리가 조금 있음

Schematic Capture 예시(출처: 위키백과)

Verilog HDL

Verilog(베릴로그)는 HDL 언어로, 아래와 같은 특징이 있다.

  • C 언어랑 비슷함
  • 아래의 추상화레벨을 가짐
    • Behavioral Level: 블록도와 입출력 신호 연결도 그래픽, 진리표 등 입력. 한국어로 설계 입력이라 함.
    • Register-Transfer Level(RTL): 동작적 표현, 클럭 타이밍, 가산기, 디코더, ALU, 레지스터 등
    • Gate Level: 논리, 원시 게이트, 연결도 등
  • VHDL에 비해 배우기 쉽고 가벼움

모듈 구조

Velilog 디자인은 여러 상호접속된 모듈로 구성된다. 각 모듈은 여러 게이트와 다른 모듈로 구성된다. 아래는 2to1 mux 모듈을 나타낸 코드이다.

module mux2to1 (out, outbar, a, b, sel); // 모듈의 이름과 모듈이 가진 포트를 선언

	// 각 포트가 input인지 output인지를 정의
	output out, outbar;
    input a, b, sel; 
    
    // 모듈의 작동을 정의함. 각 구문은 동시에(parallel) 실행. 순서는 상관 없음
    assign out = sel ? a : b;
    assign outbar = ~out;

endmodule

Assign

Assign문은 (출력) = (처리)로 구성되는데, 처리의 경우는 진행형continuous으로 evaluate되어 입력에 대해 계속 변화한다.
출력은 스칼라나 넷(net), 벡터 넷 등으로 구성된다.

모든 assign은 평행성을 갖는다.

Verilog의 연산자들

Gate Level

module mux_gate (out, outbar, a, b, sel);

	output out, outbar;
    input a, b, sel;
    wire out1, out2, selbar;
    
    not i1 (selbar, sel);
    and a1 (out1, a, sel);
    and a2 (out2, b, selbar);
    or o1 (out, out1, out2);
    not i2 (outbar, out);
 
endmodule

Verilog에 내장된 게이트를 이용할 수 있다.
(and, nand, or, nor, xor, xnor, not, buf)
각 게이트에는 임의의 갯수의 입력을 넣을 수 있다.

절차형 할당문

always 혹은 initial 키워드를 이용하여 절차형 할당procedural assignment을 할 수 있다. 이를 활용하여 if, for, while, case등 C같은 프로그래밍을 할 수 있다.

module mux_2to1 (out, outbar, a, b, sel);

	output out, outbar;
    input a, b, sel;
    
    reg out, outbar;
    
    //always 블록은 sensitivity list 안의 값이 바뀌었을 때 한 번만 실행
    always @ (a or b or sel)
    begin	// always 블록 안의 코드는 순서대로 실행됨
    	if (sel) out = a;
        else out = b;
        
        outbar = ~out;
    end
endmodule

Register

일반적인 디지털 시스템의 레지스터는 값을 업데이트하기 위해 cloack이 필요하지만, verilog의 reg 키워드는 좀 다르다.

reg 키워드는 값을 저장하는 변수를 선언하기 위해서만 쓰인다.

reg 키워드로 선언된 변수의 값은 시뮬레이션 중 어느 때나 수정될 수 있고, 회로의 net으로 사용될 수 있다.

진행형 할당과 절차형 할당의 공존

always 키워드를 이용한 절차형 할당과 진행형 할당은 한 모듈안에서 공존할 수 있다.

case문 - if-else의 대안

always @ (a or b or sel)
begin
	case (sel)
    	1'b0: out = b;
        1'b1: out = a;
    endcase
end

case문의 구조는 <size>'<base><number>로 구성되는데, 예를 들어 2'b10은 2bit binary이며, value가 2일 경우이다.

2'b10 2bit, binary, v=2
'b10 unsized binary, v=2
31 unsized decimal, v=31
8'hAf 8-bit hex, v=175
-16'd47 16-bit negative decimal, v=-47

버스

Verilog는 여러 비트의 시그널을 처리하기 위한 버스 기능이 강력하다.

중괄호 ({})를 활용하여 신호를 합칠 수 있다.

assign {b[7:0], b[15:8]} = {a[15:8], a[7:0]};

위 코드는 바이트를 swap하는 기능을 한다.

아래와 같은 8비트 2to1 mux를 다음 코드로 나타낼 수 있다.

 

module mux_2to1 (a, b, out, outbar, sel);

	input[7:0] a, b;
    input sel;
    output[7:0] out, outbar;
    reg[7:0] out;
    
    always @ (a or b or sel)
    begin
    	if (sel) out = a;
        else out = b;
    end
    assign outbar = ~out;
endmodule
반응형

'학부 수업 > 디지털시스템' 카테고리의 다른 글

16. Verilog HDL의 산술 연산과 Incomplete Specification  (0) 2020.05.23
15. Verilog HDL을 이용한 7-seg display Decoder 구현  (0) 2020.05.23
13. 멀티플렉서와 디멀티플렉서 (Multiplexer and Demultiplexer)  (0) 2020.05.16
12. 인코더 (Encoder)  (0) 2020.05.15
11. 디코더 (Decoder)  (0) 2020.05.15

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 16. Verilog HDL의 산술 연산과 Incomplete Specification

    16. Verilog HDL의 산술 연산과 Incomplete Specification

    2020.05.23
  • 15. Verilog HDL을 이용한 7-seg display Decoder 구현

    15. Verilog HDL을 이용한 7-seg display Decoder 구현

    2020.05.23
  • 13. 멀티플렉서와 디멀티플렉서 (Multiplexer and Demultiplexer)

    13. 멀티플렉서와 디멀티플렉서 (Multiplexer and Demultiplexer)

    2020.05.16
  • 12. 인코더 (Encoder)

    12. 인코더 (Encoder)

    2020.05.15
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바