Category: FPGA/ASIC
FPGA/ASIC 카테고리에 작성된 글 목록입니다.
FPGA/ASIC Roadmap
Verilog RTL을 작성하고 simulation과 synthesis 결과를 확인할 때 다시 찾는 기준을 순서대로 정리합니다.
문법을 길게 설명하지 않고, 코드가 어떤 시점에 값을 바꾸며 어떤 회로로 합성되는지 확인하는 글을 묶어둡니다.
UVM 기본 흐름
- UVM sequence와 driver 사이에서 response를 주고받는 방법
sequence, driver, virtual interface 사이의 transaction 흐름을 연결합니다.
Tcl 자동화
- Tcl 리스트에서 여러 값을 안전하게 제외하는 방법
Tcl list와 script를 안전하게 조작하는 짧은 예제를 다룹니다.
- Tcl 명령을 여러 줄로 나눠 작성하는 방법
Tcl list와 script를 안전하게 조작하는 짧은 예제를 다룹니다.
- Verilog와 SystemVerilog filelist를 find로 만드는 방법
RTL filelist 생성과 도구 실행 옵션을 재현 가능하게 정리합니다.
CDC와 reset
- 비동기 reset은 왜 해제할 때 동기화해야 할까
clock domain crossing과 reset 해제 시점을 안전하게 다룹니다.
AXI 프로토콜
- AXI4 burst에서 AxSIZE와 AxLEN 계산하기
AXI4 transaction의 burst 크기와 길이를 계산합니다.
RTL 작성과 검증
- SystemVerilog에서 rising edge를 한 clock pulse로 만들기
입력 이벤트를 동기화하고 RTL 동작을 검증합니다.
- Verilog testbench를 시작할 때 HDL과 cocotb 중 고르는 기준
입력 event를 다루고 testbench로 RTL 동작을 확인합니다.
- WaveDrom으로 clock과 bus timing diagram 그리기
입력 event를 다루고 testbench로 RTL 동작을 확인합니다.
- Emacs Verilog mode AUTO_TEMPLATE로 입력 tie-off하기
RTL 편집과 자동 port 연결에서 확인할 점을 다룹니다.
Vivado 보드 시작
- Windows에 AMD Vivado를 설치하는 방법
AMD 공식 installer에서 Vivado와 사용할 FPGA device family를 골라 Windows에 설치합니다.
- Vivado에서 Nexys A7 핀을 XDC로 할당하는 방법
Vivado 프로젝트에 XDC 파일을 추가하고 Nexys A7의 클럭과 입출력 핀을 연결합니다.
- Vivado에서 Nexys A7 bitstream을 생성하고 FPGA에 올리는 방법
Vivado에서 bitstream을 생성하고 Hardware Manager로 Nexys A7 FPGA를 program합니다.
- Windows에서 Nexys A7 UART를 Tera Term으로 확인하는 방법
Windows에서 Nexys A7의 USB-UART COM 포트를 찾고 Tera Term으로 수신을 확인합니다.
Verilog RTL 기본
- Verilog blocking과 non-blocking은 언제 나눠 써야 하나
조합회로와 순차회로에서 blocking과 non-blocking 할당을 나누는 기준입니다.
- Verilog case 문에서 default와 latch를 함께 확인하는 방법
조건문과 할당 규칙을 기준으로 합성 가능한 RTL을 작성합니다.
- Verilog 숫자 literal과 signed vector의 폭 확인하기
조건문과 할당 규칙을 기준으로 합성 가능한 RTL을 작성합니다.
- Verilog parameter는 named override로 지정하고 defparam은 피하기
조건문과 할당 규칙을 기준으로 합성 가능한 RTL을 작성합니다.
- SystemVerilog 배열을 flat bus로 묶고 byte slice 선택하기
조건문과 할당 규칙을 기준으로 합성 가능한 RTL을 작성합니다.
- Verilog 곱셈 연산자 *는 FPGA에서 어떻게 합성될까
조건문과 할당 규칙을 기준으로 합성 가능한 RTL을 작성합니다.
- SystemVerilog package를 공유할 때 compile order 확인하기
조건문과 할당 규칙을 기준으로 합성 가능한 RTL을 작성합니다.
Vivado 보드와 메모리
- Vivado에서 MCS 파일을 SPIx4로 만드는 방법
Vivado bitstream의 SPI bus width와 configuration clock을 설정하고 SPIx4 MCS 파일을 만듭니다.
- Vivado FPGA 내부 RAM 구성과 COE 초기화 방법
Vivado 내부 RAM 구현 방식을 고르고 IP 초기값과 동작을 확인합니다.
- Vivado FIFO Generator에서 8-bit, 1024-depth FIFO 설정하기
Vivado에서 메모리와 FIFO를 구성하고 보드 동작에 연결합니다.
최근 글
-
UVM sequence와 driver 사이에서 response를 주고받는 방법
UVM sequence의 body task에서 요청을 보내고 driver의 item_done(response)로 읽기 결과를 돌려받는 기본 흐름입니다.
- FPGA/ASICUpdated:
Emacs Verilog mode AUTO_TEMPLATE로 입력 tie-off하기
Verilog mode AUTO_TEMPLATE에서 SystemVerilog '0로 입력을 tie-off하고 미사용 출력은 구분된 net에 연결합니다.
- FPGA/ASICUpdated:
Verilog와 SystemVerilog filelist를 find로 만드는 방법
find로 HDL 파일을 모아 정렬하고, shell 옵션으로 선택한 filelist를 도구에 전달하는 기본 패턴입니다.
- FPGA/ASICUpdated:
Tcl 명령을 여러 줄로 나눠 작성하는 방법
Tcl에서 백슬래시 줄 연결과 중괄호로 묶은 script body의 차이를 구분해 여러 줄 명령을 작성합니다.
- FPGA/ASICUpdated:
Tcl 리스트에서 여러 값을 안전하게 제외하는 방법
제외할 값 목록을 순회하며 원본 Tcl 리스트의 일치 항목을 빼고 나머지 순서와 중복을 유지합니다.
- FPGA/ASICUpdated:
비동기 reset은 왜 해제할 때 동기화해야 할까
비동기 reset은 즉시 assert하고 각 clock domain에서 deassert를 동기화해 reset recovery/removal 문제를 줄입니다.
- FPGA/ASICUpdated:
AXI4 burst에서 AxSIZE와 AxLEN 계산하기
AxSIZE는 beat당 byte 수의 log2, AxLEN은 beat 수 minus one이며 bus width와 4KB boundary 제약도 확인해야 합니다.
- FPGA/ASICUpdated:
SystemVerilog에서 rising edge를 한 clock pulse로 만들기
동기화된 level 신호의 이전 값을 저장해 rising edge에 한 cycle 동안 유지되는 pulse를 만드는 방법입니다.
- FPGA/ASICUpdated:
SystemVerilog package를 공유할 때 compile order 확인하기
SystemVerilog package에 공통 type과 상수를 정의하고, scoped import와 compile order를 관리하는 기본 예제입니다.
- FPGA/ASICUpdated:
Verilog 곱셈 연산자 *는 FPGA에서 어떻게 합성될까
Verilog의 * 연산자는 합성 가능하지만 DSP 사용 여부와 결과 폭은 operand, FPGA 자원과 synthesis 설정을 확인해야 합니다.