IT/ASIC | FPGA 2024. 5. 30.
SDC clock group 이해: asynchronous vs exclusive 차이점
SDC는 전자설계자동화(EDA) 도구에서 디지털 회로 설계의 제약 조건을 지정하는 데 널리 사용되는 형식입니다. 클럭 그룹은 서로 다른 클럭 도메인 간의 적절한 타이밍 분석을 보장하기 위해 중요한 역할을 합니다.set_clock_groupsset_clock_groups 명령어set_clock_groups 명령어는 서로 다른 클럭 도메인 간의 관계를 정의하는 데 사용됩니다. 이 명령어는 타이밍 분석 목적으로 클럭 간의 상호 작용을 지정하는 데 사용되며, 관계는 동기(synchronous), 비동기(asynchronous), 또는 배타적(exclusive)일 수 있습니다.명령어 형식set_clock_groups -asynchronous -group {클럭1 클럭2} -group {클럭3 클럭4}주요 옵션-a..
IT/ASIC | FPGA 2024. 5. 29.
UVM Configuration Database (uvm_config_db) 사용 예제
Universal Verification Methodology(UVM)는 다양한 컴포넌트 간의 설정 매개변수를 설정하고 가져오는 유연하고 강력한 구성 메커니즘을 제공합니다. 이 가이드에서는 uvm_config_db를 사용하여 설정 매개변수를 설정하고 가져오는 방법을 예제와 함께 설명합니다.uvm_config_db란 무엇인가?uvm_config_db는 UVM에서 설정 정보를 중앙 집중식으로 관리할 수 있도록 하는 클래스입니다. 이를 통해 테스트벤치의 다양한 부분이 직접 연결 없이 설정 정보를 공유할 수 있어 모듈화와 재사용성을 높일 수 있습니다.uvm_config_db 사용 방법uvm_config_db를 사용하여 설정 매개변수를 설정(set)하고 가져오는(get) 방법을 알아보겠습니다.설정 매개변수 설정 ..
IT/ASIC | FPGA 2024. 5. 29.
UVM Error 메시지 출력 - report_phase() in uvm_test
UVM Error 메시지 출력해보기가 너무 어렵다. 실제 에러 내용을 출력하도록 예제 코드를 생성해 봤다.uvm_report_cb::add 메소드는 uvm_report_catcher 타입의 객체를 콜백으로 요구합니다.리포트 클래스 생성클래스 생성: my_custom_reporter가 uvm_report_catcher를 상속받도록 클래스를 생성합니다. uvm_report_catcher는 uvm_report_object의 특수한 서브클래스로, 에러 메시지를 잡아내고 수정할 수 있는 메소드를 제공합니다.콜백 등록 수정: uvm_report_cb::add 메소드 사용을 올바르게 수정하여 적합한 타입을 전달합니다.클래스 정의 및 사용 예시아래는 my_custom_reporter를 uvm_report_catcher..
IT/ASIC | FPGA 2024. 5. 29.
UVM sequence - 메인함수는 body task
그냥 간단한 노트 겸 저장, 기본적으로는 run_phase 에서 메인 코드가 도는데 희안하게 uvm_sequence 에서는 task body();여기서 메인 코드가 수행됨https://www.eunchan.kim/research/uvm/uvm-flow.htmlrun_phase 는 실제 동작이 구현되는 부분이니 이 코드가 들어갈만한 곳은 uvm_driver나 uvm_monitor, uvm_sequence정도 일것 같습니다. 각 블럭은 다음 글에서 설명드릴텐데, uvm_driver 나 uvm_monitor 는 run_phase에서 실행되는 게 맞으나, uvm_sequence는 bodytask에서 메인 코드가 실행됩니다. 예제를 보면, /* "body()" is a task that is invoked..
IT/ASIC | FPGA 2024. 5. 29.
UVM Factory Pattern - 무슨 디자인 패턴까지..
UVM Factory Pattern - 무슨 디자인 패턴까지 나오냐? 그냥 케이스별로 테스트 벤치를 왠만하면 짤텐데...아래 글을 열심히 읽어보자. 핵심은 source code의 수정 없이 서로 다른 type의 object를 생성하는 방법. string argument를 받아 run-time동안 dynamic 하게 object를 return 하는 방법을 제공하기 위해서는 factory design pattern 을 활용하라는 뜻 테스트 벤치가 Runtime 에 입력파일으로 부터 클래스 명을 입력 받아 테스트 하도록 돌려면, 유용한 방법인듯...머 귀찮으면 그냥 따로 시나리오별로 짜면 된다. ㅋㅋㅋ :) https://floatandflow.tistory.com/4 [SystemVerilog/UVM] Fa..
IT/ASIC | FPGA 2024. 5. 28.
UVM - Interface 에서 Drive로 Sequence item으로 데이터 받기
보통 쓰기 동작은 예제가 너무 많아서 쉽게 되는데, 되려 read 즉 DUT Interface 에서 데이터를 받아서 Driver 이런 곳에서 확인하는 것에 대한 예제가 잘 안보이네.우리 AI를 이용해서 열심히 답을 내보니, 좋은 결과를 보여주네. 핵심은seq_item_port.put_response(item);예로 살펴보자. AXI 인터페이스를 사용하는 경우, 읽기 트랜잭션에서 데이터를 받아 sequence_item의 데이터 필드에 넘겨주는 기능을 구현하고자 할 때, 몇 가지 추가적인 단계가 필요합니다. 이 과정은 드라이버가 데이터를 받고 해당 데이터를 관련 sequence_item에 저장하여, 이후의 검증 단계 또는 점수 계산(scoreboarding)에서 사용할 수 있도록 하는 것을 포함합니다.읽기 ..
IT/ASIC | FPGA 2024. 5. 24.
Tessent shell - 이건 머지? SIEMENS DFT
Tessent Shell은 반도체 설계 및 검증 과정에서 사용되는 Tessent 소프트웨어 제품군의 일부입니다. 이 소프트웨어는 주로 DFT(Design for Testability) 솔루션을 제공하는데 사용되며, 반도체 칩의 테스트 가능성을 높이고 제조 결함을 검출하는 데 필요한 기능들을 포함하고 있습니다. Tessent 제품군은 Mentor Graphics에서 개발하였으며, 현재는 Siemens의 일부입니다.Tessent Shell의 기능과 역할사용자 인터페이스 제공:Tessent Shell은 명령 줄 인터페이스(CLI)를 제공하여 사용자가 Tessent 도구들을 실행하고 관리할 수 있게 합니다. 사용자는 이 쉘을 통해 다양한 명령어를 입력하고 Tessent 도구와의 상호 작용을 수행할 수 있습니다...
IT/리눅스 2024. 5. 24.
Bash 쉘 vs C 쉘 스크립트 간단 차이점
바쉬 쉘 스크립트와 C 쉘 스크립트, 헷갈리시죠? 오늘은 이 두 쉘 스크립트의 차이점을 친절하고 캐주얼하게 풀어보도록 하겠습니다. 예제도 함께 보여드릴 테니 재미있게 따라와 주세요!1. 문법의 차이가장 먼저 눈에 띄는 건 바로 문법의 차이입니다.Bash Shell은 Bourne-Again SHell의 약자로, Unix의 전통적인 sh 쉘을 확장한 것입니다. 프로그래밍에 있어서 상당히 유연하며, 변수를 다루거나 함수를 작성하는 방식이 직관적이죠.# Bash 예제: 변수 사용my_var="Hello Bash!"echo $my_varC Shell은 C 프로그래밍 언어에서 영감을 받아 만들어졌습니다. C 언어를 좀 아신다면 문법이 낯설지 않을 거예요. 하지만 복잡한 스크립트를 작성할 때는 다소 제한적일 수 있습..
IT/ASIC | FPGA 2024. 5. 23.
UVM DPI (Direct Programming Interface) 기능 기초 예제
UVM DPI (Direct Programming Interface) 라이브러리는 UVM 환경에서 C 함수 호출 등을 가능하게 하는 라이브러리입니다. 이를 통해 SystemVerilog 테스트벤치와 외부 C 코드를 연동할 수 있습니다. 구체적인 예를 들어보겠습니다.예제: 외부 C 함수 호출아래는 SystemVerilog 코드에서 외부 C 함수를 호출하는 예제입니다. 이 예제에서는 UVM DPI 라이브러리를 사용하여 외부 C 함수를 호출하여 데이터를 처리합니다.C 함수 정의먼저, 외부 C 함수가 정의되어 있습니다. 이 함수는 두 개의 정수를 더하는 간단한 함수입니다.// add.c#include int add(int a, int b) { return a + b;}DPI 임포트SystemVerilog ..
IT/리눅스 2024. 5. 23.
리눅스에서 큰 폴더 찾기: du 명령어 활용법
서버 공간이 꽉 차서 어디서부터 청소를 시작해야 할지 모르시겠다고요? 'du' 명령어와 몇 가지 유용한 옵션을 활용하면, 가장 많은 공간을 차지하는 파일과 폴더를 빠르게 찾아낼 수 있습니다. 이제 du 명령어를 좀 더 빠르게 실행해 보는 방법을 소개합니다!참고글은 아래와 같습니다.리눅스 폴더별 용량 확인(du 명령어) (tistory.com)빠른 'du' 명령어로 리눅스에서 대형 폴더 식별하기빠르게 큰 폴더 찾기du -ah --max-depth=1 | sort -rh | head -n 5이 명령어는 다음과 같은 기능을 수행합니다:-ah: 파일과 폴더의 용량을 사람이 읽기 쉽게 표시합니다.--max-depth=1: 현재 디렉토리 바로 아래에 있는 항목들만 조사하여 속도를 향상시킵니다.sort -rh: 결과..
IT/ASIC | FPGA 2024. 5. 22.
SystemVerilog에서 패키지를 사용하는 장점
SystemVerilog에서 패키지를 사용하는 것은 매우 중요한 설계 및 조직 전략이며, 패키지를 사용하지 않을 때와 비교해 여러 장점이 있습니다. 아래에서는 패키지를 사용하는 것과 사용하지 않는 것의 차이점 및 패키지 사용의 주요 이점을 설명합니다.패키지를 사용하는 것과 사용하지 않는 것의 차이네임스페이스 관리: 패키지 사용: 패키지는 데이터 타입, 서브루틴, 파라미터 등을 포함할 수 있는 컨테이너 역할을 하며, 네임스페이스를 제공합니다. 이를 통해 다른 패키지나 모듈에서 동일한 이름을 사용하더라도 충돌 없이 관리할 수 있습니다.패키지 미사용: 이름 충돌의 가능성이 높아지고, 글로벌 스코프에서 모든 정의를 관리해야 하므로 복잡성이 증가할 수 있습니다.코드의 재사용성 및 모듈화: 패키지 사용: 관련된 기..
IT/파이썬 2024. 5. 21.
'\n'.join(str_buffer) 구문 설명 - join 자동 루프
'\n'.join(str_buffer) 구문은 Python에서 리스트를 돌면서 지정한 문자열을 붙여서 리턴하는 구문입니다.아래 코드를 보고 이해해 봅시다.result_script: 이 변수는 문자열들의 리스트를 담고 있습니다. 각 문자열은 스크립트의 한 줄을 나타냅니다.'\n'.join(result_script): 이 부분은 리스트에 있는 모든 문자열을 하나의 문자열로 결합합니다. 문자열들 사이에는 줄바꿈 문자(\n)가 들어갑니다. 결과적으로, 리스트의 각 요소(문자열)가 하나의 큰 문자열로 연결되고 각 요소는 새로운 줄에서 시작합니다.return '\n'.join(result_script): 이 코드는 결합된 문자열을 함수의 결과로 반환합니다. 이는 함수가 호출된 곳에서 해당 문자열을 사용할 수 있게 ..
IT/파이썬 2024. 5. 20.
파이썬 패턴 처리 기능 - 멀티라인 처리 예제
tcl 스크립트를 보다 보면 맨 마지막 "\" 를 입력하여 한줄짜리 명령을 다중 라인으로 처리하는 경우가 있다. 그리고 문법상으로 {, [, ( 이런 오픈 브레이스 이후의 멀티라인도 한 줄로 처리할 수 있도록 하는 것이 필요하다.이런 찾아내서 한줄로 만드는 코드 샘플을 보자.이 코드는 괄호 { } 사이에 있는 단어를 추출하는 기능을 포함하며, 줄 끝에 있는 \는 단순한 줄바꿈으로 처리하여 해당 줄을 다음 줄과 결합하지만, 공백 없이 연결합니다.import redef join_lines(lines): combined_lines = [] open_brackets = {'{': '}'} stack = [] current_line = "" for line in lines: ..