vivado, AND 게이트

2023. 6. 1. 10:35[Harman] 세미콘(semiconductor) 아카데미-반도체설계/Verilog를 이용한 RTL 시스템 반도체 설계

728x90
  • vivado 1

 

vivado를 활용하여 xilinx board(BASYS3)활용할 예정 

 

vivado = 디지털 회로를 하드웨어 기술 언어를 통해 설계하고 구현하는 소프트웨어

 

VHDL을 이용해서 디지털 회로를 설계하는 경우, 먼저 VHDL코드 작성 후 컴파일 -> 시뮬레이션으로 동작검증 -> 물리적으로 구현하는 단계로 구성

 

기본 설계 절차

  1. VIVADO WebPack 프로그램을 실행해서 프로젝트 생성
  2. VHDL 회로도/블록 다이어그램을 이용해 설계 후 컴파일
  3. 컴파일 과정에 의해 VHDL코드를 디지털회로로 합성
  4. 디바이스(FPGA)에서 동작할 수 있는 배치 및 배선 수행
  5. 특징) 타이밍 분석을 통해 실제로 회로를 동작 시키지 않고도 시뮬레이션으로 디바이스에서 실행했을 때의 신호의 시간 지연을 계산함으러써 그 결과물 확인

 

베릴로그 -> 시스템 베릴로그 -> HLS

 

HLS = C언어로 작성한 소스코드를 HDL로 변환해주는 컴파일러

vitis = FPGA의 PL영역에서 고급어와 보드간의 연결을 위한 컴파일러

vivado = 베릴로그 코드를 로직으로 변환시켜주는 프로그램

 

  • vivado 2

 

디지털 논리회로 구성요소

  1. 조합회로 = 입력이 변화되었을 때 처리회로를 거쳐 출력(전달지연시간 발생)으로 나타나는데, 이때 입력변화의 결과가 반드시 출력신호로 나타나는 회로
  2. 순차회로 = 레지스터가 존재 / clock이 발생하는 순간 입력의 상태에 따른 처리결과가 출력되는 회로로, 클럭이 발생하지 않은 위치에서는 입력의 변화가 출력에 영향을 미치지 못하는 회로
  3. 메모리= RAM, ROM, PROM, EPROM, EEPROM, Flash & HDD

 

  • AND게이트 시뮬레이션
module and_gate(
input x,
input y,
output z
    );
    
    assign z = x & y;
    
endmodule

코드 입력 후 

선택 시 

해당 Objects 창이 생성된다

 

해당 창에서 시뮬레이션에 사용될 x, y 의 값을 hex, oct, bin, bcd로 설정하여 입력가능

 

푸른색 = 입력 포트 / 붉은색 = 출력 포트

 

시뮬레이션을 통해 AND게이트가 정상 작동하는 것을 확인할 수 있다.

 

 

  • AND게이트 Schematic

RTL ANALYSIS - Schematic

 

SYNTHESIS - Schematic

  1. RTL ANALYSIS Schematic = 우리가 작성한 코드를 통해 생성된 게이트의 회로도
  2. SYNTHESIS Schematic = RTL ANALYSIS Schematic을 look up table라는 블록에서 나타냈을 때의 블록도 

 

쓰던 프로젝트에 Add Source를 할 때는 set as top을 선택하여 추가한 소스를 위로 배정해야 한다.

 

기계자체의 클럭 = 내부클럭

 

  • SW작동 시 LED 점등 
//Basys_3_Master.xdc

## This file is a general .xdc for the Basys3 rev B board
## To use it in a project:
## - uncomment the lines corresponding to used pins
## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project

## Clock signal
set_property -dict { PACKAGE_PIN W5   IOSTANDARD LVCMOS33 } [get_ports clk]  //clk
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports clk] //clk


## Switches
#set_property -dict { PACKAGE_PIN V17   IOSTANDARD LVCMOS33 } [get_ports {sw[0]}]
#set_property -dict { PACKAGE_PIN V16   IOSTANDARD LVCMOS33 } [get_ports {sw[1]}]
#set_property -dict { PACKAGE_PIN W16   IOSTANDARD LVCMOS33 } [get_ports {sw[2]}]
#set_property -dict { PACKAGE_PIN W17   IOSTANDARD LVCMOS33 } [get_ports {sw[3]}]
#set_property -dict { PACKAGE_PIN W15   IOSTANDARD LVCMOS33 } [get_ports {sw[4]}]
#set_property -dict { PACKAGE_PIN V15   IOSTANDARD LVCMOS33 } [get_ports {sw[5]}]
#set_property -dict { PACKAGE_PIN W14   IOSTANDARD LVCMOS33 } [get_ports {sw[6]}]
#set_property -dict { PACKAGE_PIN W13   IOSTANDARD LVCMOS33 } [get_ports {sw[7]}]
#set_property -dict { PACKAGE_PIN V2    IOSTANDARD LVCMOS33 } [get_ports {sw[8]}]
#set_property -dict { PACKAGE_PIN T3    IOSTANDARD LVCMOS33 } [get_ports {sw[9]}]
#set_property -dict { PACKAGE_PIN T2    IOSTANDARD LVCMOS33 } [get_ports {sw[10]}]
#set_property -dict { PACKAGE_PIN R3    IOSTANDARD LVCMOS33 } [get_ports {sw[11]}]
#set_property -dict { PACKAGE_PIN W2    IOSTANDARD LVCMOS33 } [get_ports {sw[12]}]
#set_property -dict { PACKAGE_PIN U1    IOSTANDARD LVCMOS33 } [get_ports {sw[13]}]
#set_property -dict { PACKAGE_PIN T1    IOSTANDARD LVCMOS33 } [get_ports {sw[14]}]
#set_property -dict { PACKAGE_PIN R2    IOSTANDARD LVCMOS33 } [get_ports {sw[15]}]


## LEDs
set_property -dict { PACKAGE_PIN U16   IOSTANDARD LVCMOS33 } [get_ports {led}] // 1번 SW ON

 

//실행 파일
module add(
    input clk,
    output led
    );
    
    reg[24:0] count = 0;
    always @ (posedge(clk)) count <= count +1;
    assign led = count[24];
    
endmodule

 

PROGRAM AND DEBUG - Generate Bitstream