하만(Harman) 세미콘 반도체 설계 과정/Verilog를 이용한 RTL 시스템 반도체 설계

하만(Harman) 세미콘 아카데미 8일차 - Verilog HDL 설계(논리게이트, 용어 정리, Vivado 설치)

semicon_circuitdesigner 2024. 3. 18. 11:56

[2024.03.18.월] 인천인력개발원 하만 세미콘 아카데미


Verilog를 이용한 RTL 시스템 반도체 설계


FPGA, Bit, 논리 게이트


 

  • FPGA(Field-Programabble Gate Arrays): 하드웨어 플랫폼
    • 재구성 가능: 사용자가 특정 작업을 수행하도록 구성할 수 있으며, 구성 변경도 가능
    • 병렬 처리 능력: 여러 작업을 동시에 수행할 수 있는 병렬 처리 능력을 갖춤. 고속 연산이 필요한 분야에서 유리
    • 낮은 지연시간: 프로세서 기반 시스템과 다르게 하드웨어 수준에서 직접 연산을 처리하므로 지연시간이 짧음
    • 고성능: FPGA는 고성능을 요구하는 애플리케이션에서 ASIC의 대안으로 사용 가능하며 ASIC대비 개발 비용&시간이 적음
  • 2bit <-> 8bit: 3bit씩 묶어 계산
    • ex1) 10010110(2) -> (010)(010)(110)(8) = 226(8)
    • ex2) 110011101(2) -> (110)(011)(101)(8) = 635(8)
  • 2bit <-> 16bit: 4bit씩 묶어 계산
    • ex1) 10010110(2) -> (1001)(0110)(16) = 96(16)
    • ex2) 110011101(2) -> (0001)(1001)(1101)(16) = 19D(16)
  • 논리 게이트
    • Buffer
      X OUTPUT
      0 0
      1 1
    • NOT: 입력 반전
      X OUTPUT
      0 1
      1 0
    • AND: OUT = X * Y
      X Y OUTPUT
      0 0 0
      0 1 0
      1 0 0
      1 1 1
    • OR : OUT = X + Y
      X Y OUTPUT
      0 0 0
      0 1 1
      1 0 1
      1 1 1
    • XOR: 입력이 다를 때 1 출력
      X Y OUTPUT
      0 0 0
      0 1 1
      1 0 1
      1 1 0

 


게이트 예시


  • SUM(S) = (A XOR B) XOR Ci     (Ci : C input)
  • CARRYOUT(Co) = (A AND B) OR (Ci AND (A XOR B))
    • Example 1) Full Adder

      A B Ci   S Co
      < Full Adder >

      0 0 0 0 0
      1 0 0 1 0
      0 1 0 1 0
      1 1 0 0 1
      0 0 1 1 0
      1 0 1 0 1
      0 1 1 0 1
      1 1 1 1 1

용어 정리


  • Flip-Flop(플립플롭) or Latch(래치): 1비트의 디지털 정보 저장에 사용. 주로 디지털 메로리 회로, 타이밍 회로, 상태 머신 등에서 활용됨.
  • Clock(클록): 일반적으로 주기적으로 변하는 파형(대개는 사각파)으로, 디지털 회로의 여러 구성 요소가 동기화되어 작동할 수 있게 하는 타이밍 신호. 마이크로 프로세서, 메모리 장치, 다양한 디지털 시스템에서 데이터의 처리와 전송을 조정하는 데 필수적임.
  • Event(이벤트)
    • Edge event:  디지털 신호에서는 신호가 하나의 논리 상태에서 다른 상태로 전환하는 순간, 즉 0에서 1로 또는 1에서 0으로 바뀌는 순간을 에지 이벤트라고 함. 이는 상승 에지(0에서 1로의 전환)와 하강 에지(1에서 0으로의 전환)로 나눌 수 있다.
    • 임계값 event: 아날로그 또는 디지털 신호에서, 신호의 크기가 미리 정의된 임계값을 초과하거나 미만일 때 발생. 이러한 이벤트는 센서 데이터 모니터링, 경보 시스템, 데이터 변환(예: 아날로그-디지털 변환기에서의 샘플링) 등에 사용됨.
  • 주파수: 1초동안 진동하는 횟수, 단위는 Hz
  • SI 단위 접두어

Introduction


[ 칩 제작 순서 ]
1. Spec 만들기 -> 검증
2. 회로도 제작(OrCAD)
3. Artwork: 보드를 제작하기 위해 각각의 부품을 배치
4. PCB 제작
5. Assembly
6. Test
 

 

번호명칭번호명칭
1Power select jumper (Ext. supply / USB)11마이크로SD card 슬롯 (underside of board)
2Power jack (for optional ext. supply)12USB 호스트 포트
3Shared USB JTAG / UART port13FPGA programming DONE LED
4Unloaded expansion header14Processor subsystem reset button
5Pmod connectors15이더넷 포트
6SPI header (Arduino/ChipKIT compatible)16Power on reset button
7Arduino/ChipKIT shield connectors17Power good LED
8Programming mode jumper (JTAG / microSD)18Zynq-7000
9User tri-color LEDs19DDR3L 메모리
10User push buttons  

Designing with Verilog


  • Verilog의 역사
    • 1984년 - Gateway Design Automation에 의해 개발 / 회로 시뮬레이션 목적으로 사용
    • 1995년 - IEEE(미국 전기전자 기술자 협회)에서 Verilog HDL의 국제 표준을 채택
    • FPGA 및 ASIC 디자인에 적용
    • System Verilog의 등장
    • 현재 - Verilog와 SystemVerilog가 반도체 및 디지털 하드웨어 서례의 주요 언어로 사용
  • Verilog의 특징
    • 기본 구조
      input a, b;
      	output s, c;
          xor (a, b, s);
          and (a, b, c);​​
    • 모듈 단위 구성을 통해 input, output 제어 
    • 언어구조, 문법 등이 C언어와 유사
    • 하드웨어 모델링&시뮬레이션을 위해 개발
    • 대소문자 구분 - 키워드는 소문자로 사용
  • Verilog 표준: Verilog-95 -> Verilog-2001 -> Verilog-2005 -> SystemVerilog(2017)
  • Structural(구조적) Verilog vs. Behavior(동작적) Verilog
    • Structural code of a half adder
      • 디지털 회로의 물리적 구조 설명에 중점
      • 대규모, 복잡한 설계에 적합
    • Behavioral code of a half adder
      input a, b;
      	output s, c;
          always @ ( a or b )
          	begin
              	s <= a + b;
                  c <= a & b;
              end
      • 디지털 시스템의 동작 기술에 중점
      • 논리 연산자 및 제어 흐름 구조(조건문, 반복문) 등을 통해 시스템의 동작 정의
  • Verilog의 추상화 수준(Levels of Abstraction)
    • Verilog의 추상화:  디지털 회로 설계를 단순화하고 모델링하는 프로세스
    • Behavioral Level(동작 수준)
      • 가장 높은 추상화 수준, 디지털 시스템의 동작 기술
      • 시스템의 기능적에 측면에 집중하며 하드웨어 구현에 대한 세부 정보 무시
    • RTL(Register Transfer Level, 레지스터 전송 수준)
      • 시스템의 동작을 레지스터 전송의 기본적인 연산 단위로 기술
      • 레지스터, 레지스터 전송, 제어 신호 등을 사용하여 디지털 회로의 동작을 기술
      • 대부분의 FPGA 및 ASIC 설계가 이루어지는 수준
    • Gate level(게이트 수준)
      • 논리 게이트 및 회로 요소(AND, OR, NOT 등)의 연결로 디지털 회로의 동작 설명
      • 실제 하드웨어의 논리 게이트 레벨까지 내려가므로 매우 상세한 수준의 설계
      • 전력소모, 시간적 제약 등 하드웨어 구현의 물리적인 측면 고려에 사용
  • 계층적 설계(Hierarchical design):디지털 시스템을 작은 모듈로 나누어 각각을 독립적으로 설계하고 구현하는 방법
    • 모듈화
      • 시스템을 작은 모듈로 나누어 각 모듈을 개별적으로 설계 & 구현
      • 각 모듈은 특정 기능을 수행하며 상위 수준 모듈은 하위 수준 모듈을 조합하여 시스템 동작 정의
    • 계층적 구조
      • 상위 수준 모듈이 하위 수준 모듈 포함
      • 계층 구조를 통해 시스템의 복잡성을 단순화하고 모듈 간의 상호작용 관리
    • 유지 보수
      • 각 모듈은 독립적으로 테스트&디버깅이 가능하며 수정 및 업데이트가 가능
      • 시스템의 특정 부분을 수정할 때 다른 부분에 영향을 미치지 않아 유지 보수에 용이

Verilog의 키워드&식별자


  • 키워드(Keywords): 언어 구조를 위해 약속된 식별자 / 반드시 소문자로 작성해야 함 
    • example) module, endmodule, input, output
  • 식별자(Identifiers): 사용자가 붙이는 이름
    • 반드시 알파벳이나 언더바로 시작해야함
    • example) full_add, a, b, c_in, c_out
  • 주석: C언어와 동일하게 //, /*~*/를 사용
    • 단일행 주석: // 주석내용 입력
    • 여러 행 주석: /* ~~여러 줄에 걸쳐 주석 입력 */

Vivado 실습


1. Quick Start - Create Project - Next - 프로젝트 이름(my_and), 위치(C:/Verilog_lab) 설정
*이름, 위치는 반드시 영문으로 공백, 특수문자('_' 제외), 한글 없이 작성

Creat project subdirectory 박스 체크


2. RTL Project - Next

RTL Project 선택 후 체크박스는 체크해제

3. Next

추후 소스코드를 추가할 때 위 화면에서 추가 가능.

4. Next

 
5. [Device 선택 화면]

Category: General Purpose / Family: Zynq-7000 / Package: clg400 / speed: -1 선택 후 xc7z007sclg400-1 선택, Next

 
6. 최종 Summary 확인 - Finish

 
7. 실행 화면

 
8. Add Sources - Add or create design sources

 
9. Next - Create File - type(Verilog), name(my_and) 입력 - OK - Finish

 
10. Define Module창에서 Port Name과 Input/Output 설정 - OK

 
11. Sources - Design Sources에 my_and.v 형성 확인, open

 
12. my_and.v 파일을 열어 다음 코드 확인

Input과 Output이 정의한대로 선언되어 있음을 확인

 
13. [Code Example]
R = A AND B 만들 때:assign R = A&B; (assign은 키워드, 소문자로 입력) / assign 의미: 새로운 신호 생성

14. Ctrl+S(저장) 후 Message 탭을 통해 오류 확인
 
15. Flow Navigator- RTL Analysis - Open Elaborated Design을 통해 게이트 확인

 
16. Run Synthesis

FPGA내부 구조 표시

 
17. Schematic 구조 확인

Netlist - my_and - Schematic 선택

 
18. 진리표 확인

R_OBUF_inst_i_1 눌러서 Cell Properties에서 진리표 확인 가능

 
19. Device 탭에서 좌클릭-드래그 시 확대 가능

 
20. 우측 상단 Default Layout -> I/O Planning

  • 하단의 Package Pin: Pin 번호를 schematic을 참조하여 A는 BTN0, B는 BTN1, R은 LEDO_G -> 입력
    Schematic

 
21. LVCMOS 12 -> 1.2V, LVCMOS 15 -> 1.5V ... LVCMOS33으로 모두 설정

 
22. 우측 상단의 파란색 창의 X를 눌러 종료

 
23. 종료 후 Sources의 Constraints에 파일 생성 확인

 
24. 해당 파일을 열어 올바른 핀에 할당되었는지 확인(아래 창에서 핀 번호 수정 가능)

 
25. Navigator - Run Implemntation 클릭

 

open~~ -&gt; OK

 
26. 실행 후 Netlist의 my_and 우클릭-Schematic
 
27. Schematic 윈도우 탭 우클릭 - New Vertical Group

 
28. Schematic 창에서 라인 선택하면 화살표 생성

A와 B 위치 확인 가능

 
29. Navigator - Generate Bitsream - OK

 
30. 종료 후 프로젝트 명 폴더(my_and)에 my_and.runs, my_and.srcs확인

 
31. C:\Verilog_lab\my_and\my_and.runs\impl_1에 my_and.bit 확인