IT/파이썬 2024. 6. 11.
python-docx - 테이블 셀에 단락 서식 적용하기
python-docx 라이브러리에서 테이블 내의 모든 셀에 대해 일관된 단락 서식(예: 줄 간격, 들여쓰기 등)을 적용하는 것은 각 셀의 문단에 개별적으로 설정해야 합니다. python-docx는 테이블의 셀에 대해 공통적으로 서식을 적용할 수 있는 직접적인 방법을 제공하지 않으므로, 모든 셀을 순회하면서 필요한 서식을 설정하는 코드를 작성해야 합니다.아래는 테이블의 모든 셀에 대해 특정 단락 서식을 적용하는 예시입니다. 이 예제에서는 줄 간격과 들여쓰기를 설정합니다.예제: 테이블의 모든 셀에 단락 서식 적용from docx import Documentfrom docx.shared import Ptfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTdef apply_p..
IT/파이썬 2024. 6. 11.
python-docx - 특정 문단 이후에 문단, 테이블 추가하기
문서에 새로운 요소를 추가하고 참조 문단의 위치를 기억하는 과정을 처리하는 데 있어서, 여러 요소를 일관되게 다룰 수 있도록 코드를 개선하는 것은 중요합니다. 여기에서는 문단과 테이블을 효과적으로 관리하면서 마지막으로 추가된 요소의 위치를 추적하는 방법을 제시하겠습니다.코드 개선 방향insert_paragraph_after 함수는 그 이름과 달리 테이블도 처리할 수 있도록 일반화되어야 합니다. 함수 이름을 insert_element_after로 변경하고, 다양한 요소들을 처리할 수 있도록 수정합니다.함수 내에서 마지막으로 추가된 요소의 타입(문단 또는 테이블)에 따라 상태를 관리할 수 있도록 코드를 수정합니다.개선된 함수def insert_element_after(self, new_element, ref..
IT/Software 2024. 6. 4.
Makefile 의 대입 연산자 - ?= vs =
Makefile에서 ?= 연산자와 = 연산자는 다르게 동작합니다.= 연산자단순 할당 연산자로, 변수를 정의하고 값을 할당합니다. 예를 들어:SIM = icarus이 코드는 항상 SIM 변수를 icarus로 설정합니다.?= 연산자조건부 할당 연산자로, 변수가 이미 정의되지 않았을 때만 값을 할당합니다. 예를 들어:SIM ?= icarus이 코드는 SIM 변수가 아직 정의되지 않았을 때에만 icarus 값을 할당합니다. 만약 SIM 변수가 이미 다른 값으로 설정되어 있다면, ?= 연산자는 아무런 동작도 하지 않습니다.예시다음 예시를 통해 =와 ?=의 차이를 명확히 이해할 수 있습니다:# 예시 Makefile# SIM이 이미 정의되어 있다면, ?=는 아무 동작도 하지 않습니다.SIM ?= icarusall: ..
IT/ASIC | FPGA 2024. 5. 31.
표준 RTL 코드 스타일 - 기본에서 출발하자
아래 코드를 기본으로 해서 머든 출발해보자. 기본을 지키는게 중요하다!복합 조건에서의 if와 case 혼용 예제 (SystemVerilog 사용, always_ff 블록 내에서)복합 조건이 3가지 이상일 경우, if와 case 문을 혼용하여 가독성을 높이고, 효율적으로 코드를 작성할 수 있습니다. 아래는 always_ff 블록을 사용하여 복합 조건을 처리하는 예제입니다. 이 예제에서는 상태 전이와 출력 로직을 하나의 always_ff 블록에 통합하여 구성합니다.예제: 상태 기계 (State Machine) 구현이 예제는 상태 기계를 구현하면서 입력 신호에 따라 다른 동작을 수행하는 복잡한 조건을 처리합니다. if 문과 case 문을 혼용하여 각 상태에서의 동작을 명확하게 정의합니다.module state..
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..
카테고리 없음 2024. 5. 29.
seq_item_port.put_response() vs uvm_analysis_port.write()
seq_item_port.put_response()와 uvm_analysis_port.write()는 UVM에서 서로 다른 목적으로 사용됩니다. 이 두 메서드는 UVM의 통신 메커니즘에 있어서 각기 다른 역할을 수행합니다. 간단하게 비교해 보겠습니다.seq_item_port.put_response()용도: 이 메서드는 UVM의 sequencer-driver 인터페이스에서 사용됩니다. put_response()는 드라이버가 처리한 트랜잭션의 응답을 시퀀서에게 반환할 때 사용됩니다. 주로 요청(REQ)과 응답(RSP) 패턴을 사용하는 드라이버에서 응답을 시퀀서로 전송할 때 사용됩니다.적용 예: 드라이버가 복잡한 처리를 거친 후, 그 결과를 시퀀서에게 알려줘야 할 경우 사용됩니다. 시퀀서는 이 응답을 사용해 ..
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 언어를 좀 아신다면 문법이 낯설지 않을 거예요. 하지만 복잡한 스크립트를 작성할 때는 다소 제한적일 수 있습..