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

하만(Harman) 세미콘 아카데미 9일차 - Verilog HDL 설계(CORA Z7 실습-AND, XOR, HalfAdder, FullAdd

semicon_circuitdesigner 2024. 3. 19. 10:56

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


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


CORA Z7 실습


1. Project Create(my_and.v)
2. Elaborated design
3. Synthesis
4. Implementation
5. Configuration
6. H/W manage
 

[DIGILENT - CORA Z7보드]

 

번호명칭번호명칭
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  

 
[ Cora Z7 Schematic ]

 


Vivado 실습: AND 프로그램 적용 및 XOR 프로그램 작성


1. open project "my_and.v"
2. 파일 확인

 
3. Navigator의 PROGRAM AND DEBUG - Open Hardward manager클릭

 
4. 상단의 Open target - Auto connect 클릭

 
5. 장치 인식

 
6. PROGRAM AND DEBUG - Open Hardware Manager- program device - Status에 Programmed 확인

 
7. 버튼 두 개 함께 누르면 LED 전원 동작 확인(AND 동작)

 
 
8. 프로젝트 파일

my_and.xpr
0.01MB

 
 


my_XOR.xpr 파일 생성


1. 8일차 과정을 참고하여 파일 생성 및 오픈

 
2. Add Sources - Design Source Create

 
3. Next - Create File - type(Verilog), name(my_XOR) 입력 - OK - Finish

 
4. Input으로 Port Name A와 B, Output으로 Port Name R로 지정 - OK

 
5. Sources - Design Sources의 my_XOR.v 파일 open

 
6. assign R = A^B; 코드 추가(^은 XOR 코드)

 
7. Ctrl+S를 눌러 저장 후 Message탭의 오류 확인

 
8. 좌측 Flow Navigator - RTL ANALYSIS - Open Elaborated Design 클릭 - OK

9. Schematic 실행 확인

 
10. 좌측 Flow Navigator - SYNTHESIS - Run Synthesis 클릭 - OK

우측 상단의 로딩중 확인

11. 다음 창이 뜨면 Open Synthesis Design 선택 - OK

12. Device 창 확인

 
13. my_XOR 우클릭 - Schematic open

 
14. Schematic 탭 우클릭 - New Vertical Group

 
15. 하단 I/O Ports 탭에서 A(D20), B(D19), R(G17) 포트 설정, I/O Std를 모두 LVCMOS33으로 설정

16. 좌측 Flow Navigator - IMPLEMENTATION -  Run Implemntation - Save 창이 뜨면 다음 내용 입력 후 OK
 

17. 저장 후 실행 - OK
 
18. Open Implementation Design - OK

 
19. Flow Navigation - Generate Bitstream - OK

 
20. 장치 연결 후 Open target - Auto Connect

 
21. Program Device 클릭 - Program

 
22. XOR programmed

 
23. 프로젝트 파일

my_XOR.xpr
0.01MB

 
 


Half Adder 설계


1. Create project - Name: my_hadder - Next - RTL Project( Do not specify sources at this time 체크 ) - Next

 
2. Parts는 동일하게 설정 

 
3. Summary 확인 - Finish

 

4. Half Adder(반가산기)

 
5. Add Source - Add or create design sources 선택 - Create File - OK - Finish

 
6. Define Module에서 input, output 이름 정의 - OK

 
7. Sources의 my_hadder.v 파일 Open

 
8. Half Adder 구현을 위한 코드 입력

 
9. Ctrl+S를 눌러 저장한 후, Message탭에서 오류 확인

 
10. 좌측 Open Elaborated Design 클릭

Schematic에서 회로 정상 표시 확인

 
11. Run Synthesis - OK - Synthesis Completed 창에서 Open Synthesized Design
 
12. 우측 상단의 Default Layout으로 변경

 
13. Device 창에서 Synthesis 결과 확인

 
14, 다시 상단의 목록을 열어 I/O Planning으로 변경 후 I/O Ports 확인

 
15. Schematic을 참조하여 input, output 포트, I/O std 편집

입력은 BTN0와 BTN1이므로 D19, D20 할당, 출력은 LED0_G과 LED1_G를 사용하기 위해 G17과 L14 할당

 
16. 우측 상단 X를 눌러 종료, 저장

 
 
17, Run Implementation 클릭 - open implemented design

 
18. Schematic과 Device 창을 vertical로 열어 각 부분 확인

 
19. Generate Bitstream 누르고, Open Hardware Manager
 
20. Open Target - Program Device - Program로 장치에 프로그램 적용

 
21. Programmed 확인

 
22. 작동 확인

버튼을 한 개만 누르면 왼쪽 LED 점등, 둘 다 누르면 오른쪽 LED 점등

 
23. 프로젝트 파일

my_hadder.xpr
0.01MB

 
 


Verilog 문법


  • 데이터값
    • '0': 논리값 0, False, Condition, Ground
    • '1': 논리값 1, True, Condition, Power
    • 'x' 또는 'X': Unknown, Un-initialized -> 하드웨어에서 구현 불가능
    • 'z' 또는 'Z': High Impedance, Floating ( High Impedance: 저항이 커서 신호가 끊어진 상태)
  • 수치 표현
    • 상수/숫자 표현을 위한 구문: <size><base format><number>
      • <size>: number의 길이(비트단위). 항상 정수
      • <base format> = <s><radix>: signed/unsigned + 자료형 표현
        <s>: 선택적 요소(생략 시 unsigned가 기본으로 설정됨)
        <radix>: 필수적 요소, b/B(Binary), o/O(Octal), d/D(Decimal), h/H(Hex)
      • <size>와 <base format>이 생략되면 32bit signed decimal이 기본값
      • <number>: 실제 값
    • [example]
      • 4'sb0010 =4bit의 signed binary 0010
      • 6'b110111: 6bit의 binary 값
      • 8'sh21: 8bit의 signed hex 값
    • 2진수로 음수 표현 방법: 2의 보수 사용
      • 2의 보수: 양수 비트를 반전시킨 후 1을 더한다
        ex) 7(10) = 0000 0111(2) -> 비트 반전: 1111 1000(2) -> +1-> -7(10) = 1111 1001(2)
               100(10) = 0110 0100(2) -> 비트 반전: 1001 1011(2) -> +1 -> -100(1) = 1001 1110(2)

Verilog 데이터 객체와 데이터 타입(Reg & Wire)


  • Net: 회로의 물리적 연결
    • wire: 가장 기본적인 net타입. 두 개 이상의 포트 연결에 사용
    • tri: wire과 유사하나 tri-state버스에서 사용될 수 있는 high impedance상태 가능
  • Variables(변수, 신호의 종류): 데이터를 저장하고 처리하는 데 사용
    • reg(레지스터 변수): 비동기 또는 동기식 회로 모델링에 사용
    • integer: 부동 소수점 값을 저장하는 데 사용
    • real, time, ...
  • 신호 정의 방법: signal_type size signal_name
    • signal_type: wire나 reg중 사용
    • always문 외부에서 선언 시 wire가 default
    • Verilog의 procedural block(always, initial 구문) 내부에 할당된 모든 객체는 reg데이터 타입으로 선언해야 함

실습 4: Full Adder 설계


[ Full Adder ]

 
1. 3개의 Input을 사용하기 위해 4 User Slide Switches를 JA1포트에 연결

4 User Slide Switches / Schematic

1.1 연결된 모습

스위치가 JA1포트의 윗부분에 연결

 
2. 스위치는 번호순으로 각각 JA1_P, JA1_N, JA2_P, JA2_N에 연결되므로 Schematic을 통해 핀 번호 확인

 
3. Vivado를 실행하여 my_fadder.v 파일을 생성한 후, Addsource를 통해 input에 A, B, Ci, Output에 S, Co를 설정
 
4. Open Elaborated Design을 통해 코드 작성

 
5, Ctrl+S로 저장 후 Warning 유무 확인

 
6, Run Synthesis - Open Synthesized Design

 
7. 우측 상단의 I/O Pannel 선택 후 각 Input에 맞는 포트 선택(상단의 Schematic 참조): A(Y18), B(Y19), Ci(Y16) / Output은 아까와 동일하게 초록색 LED로, Co(L14), S(G17) 선택

 
8. 저장 - Run Implmentation

 

9. Generate Bitstream - Open H/W Manager - ProgramDevice 후 실행 확인

A = 0 , B = 0 , Ci = 0 -> S = 0 , Co = 0A = 1 , B = 0 , Ci = 0 -> S = 1 , Co = 0

 

A = 0 , B = 1 , Ci = 0 -> S = 1 , Co = 0A = 1 , B = 1 , Ci = 0 -> S = 0 , Co = 1

 

A = 0 , B = 0 , Ci = 1 -> S = 1 , Co = 0A = 1 , B = 0 , Ci = 1 -> S = 0 , Co = 1

 

A = 0 , B = 1 , Ci = 1 -> S = 0 , Co = 1A = 1 , B = 1 , Ci = 1 -> S = 1 , Co = 1

 

10. 프로젝트 파일

my_fadder.xpr
0.01MB