Skip to content
DevBJ
Go back

Verilog와 SystemVerilog filelist를 find로 만드는 방법

Updated:
Editor

find로 HDL 소스 경로를 모아 정렬하면 반복 가능한 filelist를 만들 수 있다. 다만 파일을 찾은 순서가 compile dependency를 보장하지는 않으므로 package, include path, macro 설정은 도구별 filelist에서 별도로 관리한다.

HDL 파일을 찾고 정렬하기

find RTL -type f \
  \( -name '*.v' -o -name '*.sv' -o -name '*.vh' -o -name '*.svh' \) \
  -print |
  LC_ALL=C sort > filelist.f

괄호를 shell에 전달하려면 \(와 \)로 escape한다. 이 패턴은 .v, .sv, .vh, .svh 파일을 찾고 정렬해 filelist.f에 기록한다. find -regex보다 -name 조건을 명시하는 편이 GNU/BSD 환경 차이를 줄인다.

ls | awk로 경로를 추출하지 않는다. 파일명에 공백 등이 들어가면 출력 열을 정확히 나누기 어렵고, ls 출력은 파일 처리용 인터페이스가 아니다. EDA 도구 filelist가 공백 경로를 어떻게 해석하는지는 도구 문서에서 확인한다.

실행 옵션으로 filelist 고르기

#!/usr/bin/env bash
set -euo pipefail

if (( $# > 1 )); then
  printf 'Usage: %s [sim|dft]\n' "$0" >&2
  exit 2
fi

mode="${1:-sim}"
case "$mode" in
  sim) filelist="sim_filelist.f" ;;
  dft) filelist="dft_filelist.f" ;;
  *)
    printf 'Unknown mode: %s\nUsage: %s [sim|dft]\n' "$mode" "$0" >&2
    exit 2
    ;;
esac

exec vcs -f "$filelist"

이 예제는 sim을 기본으로 선택하고 dft가 주어지면 다른 목록을 전달한다. vcs -f는 원문에서 사용한 실행 예제이며, 현재 설치된 VCS 버전의 옵션과 filelist 문법은 해당 버전의 공식 사용자 문서에서 확인한다. 다른 simulator라면 마지막 실행 명령만 해당 도구에 맞게 바꾼다.

filelist에서 따로 관리할 것

자동 생성 결과를 그대로 신뢰하지 말고 diff로 변경을 검토한다. find 목록은 source discovery를 돕는 시작점이지, 완성된 EDA project 설정은 아니다.

공식 자료

원문 기록

한 줄 요약

find는 HDL 파일 후보를 모으는 데 쓰고, compile order와 옵션은 도구별 filelist 및 실행 스크립트에서 명시한다.


Share this post on:

Previous Post
Emacs Verilog mode AUTO_TEMPLATE로 입력 tie-off하기
Next Post
SystemVerilog에서 rising edge를 한 clock pulse로 만들기