[Python] 제너레이터 표현식 (Generator Expression)
·
Programming/Python
제너레이터(Generator)는 값을 한 번에 만들지 않고, 필요할 때마다 하나씩 만들어 내는 객체이다. 기본 구조(표현식 for 변수 in iterable if 조건)소괄호 ( )를 사용한다.결과물은 리스트나 세트가 아니라 제너레이터(Generator) 객체이다. 주요 특징Lazy Evaluation 제너레이터는 Lazy Evaluation을 한다. 즉, 값을 미리 만들어 놓지 않고, 누군가 "다음 값 줘!"라고 요청할 때 비로소 계산을 시작한다. 모든 값을 저장할 필요가 없는 경우, 제너레이터는 메모리 측면에서 매우 유리하다.gen = (x**2 for x in range(3))print(next(gen)) # 0print(next(gen)) # 1print(next(gen)) # 4# print(..
[OLED] ASBL(Auto Static Brightness Limiter), TPC(Temporal Peak-Luminance Control), GSR(Global Sticky Reduction)
·
Semiconductor/Display
ASBL (Auto Static Brightness Limiter) / TPC(Temporal Peak-Luminance Control) ASBL(Auto Static Brightness Limiter)은 화면에 정지된 이미지 또는 시간적 변화량이 매우 낮은 화면이 일정 시간 동안 노출될 때, 패널의 전체적인 밝기를 단계적으로 낮추는 알고리즘이다. OLED는 스스로 빛을 내는 자발광 소자를 사용하는데, 특정 영역이 동일한 밝기로 장시간 구동되면 해당 픽셀이 빠르게 열화되어 화면에 잔상이 남는 번인(Burn-in) 현상이 발생할 수 있다. ASBL은 이러한 위험을 줄이기 위해 사용된다. 종종 ASBL이나 TPC(Temporal Peak-Luminance Control)와 혼용해서 부르기도 한다. 엄밀히..
[Python] 세트 컴프리헨션 (Set Comprehension)
·
Programming/Python
세트 컴프리헨션(Set Comprehension)은 중복을 허용하지 않는 집합(set)을 만드는 가장 간결한 방법이다. 리스트 컴프리헨션과 거의 같지만, 결과가 set이라는 점이 핵심이다. 기본 구조{표현식 for 변수 in 반복가능객체 if 조건} 딕셔너리 컴프리헨션과 헷갈리기 쉬운데,{expr} → set{key: value} → dict{}를 사용하지만 key: value가 아닌 단일 표현식만 적는다. 결과물은 순서가 없고 중복이 없는 set 객체다. 일반적인 방식unique_numbers = set()for x in [1, 2, 2, 3, 3, 3]: unique_numbers.add(x)# 결과: {1, 2, 3} 세트 컴프리헨션unique_numbers = {x for x in [1, 2..
[Python] 딕셔너리 컴프리헨션 (Dictionary Comprehension)
·
Programming/Python
딕셔너리 컴프리헨션(Dictionary Comprehension)은 기존 데이터로부터 새로운 dict를 만드는 표현식이다.리스트 컴프리헨션과 거의 동일하지만, 결과가 dict라는 점이 핵심이다.기본 구조{key_expr: value_expr for 변수 in iterable if 조건}key_expr → key 생성value_expr → value 생성 일반적인 방식squares = {}for x in range(5): squares[x] = x * x 딕셔너리 컴프리헨션squares = {x: x * x for x in range(5)} “dict를 만든다”는 의도가 바로 보인다. 실제로 많이 쓰는 패턴들기존 dict 가공raw = {"A": 10, "B": -3, "C": 7}filtered ..
[Python] 리스트 컴프리헨션 (List Comprehension)
·
Programming/Python
리스트 컴프리헨션(List Comprehension)은 파이썬에서 새로운 리스트를 만들 때 사용하는 짧고 간결한 문법이다.보통 for 루프와 if 조건을 결합하여 한 줄로 작성하며, 리스트를 생성하는 목적에 한해서 일반적인 for + append() 방식보다 코드가 간결하고, 대부분의 경우 실행 속도도 더 빠르다.기본 구조[표현식 for 변수 in 반복가능객체 if 조건] 이 문법의 목적은 딱 하나다. “반복 + 조건 + 변환”을 한 줄로 표현하여, 리스트를 만든다는 의도를 명확히 드러내는 것이다. 일반적인 방식numbers = []for i in range(5): numbers.append(i)# 결과: [0, 1, 2, 3, 4] 리스트 컴프리헨션numbers = [i for i in range..
UVM 학습할 때 도움되는 사이트 정리
·
VLSI/UVM
공식 표준 및 가이드 IEEE Standard UVM 공식 표준 문서. UVM LRM(Language Reference Manual) 제공한다. 문법이나 동작의 정확한 의미를 확인할 때 참고해야함. https://ieeexplore.ieee.org/document/9195920 1800.2-2020 - IEEE Standard for Universal Verification Methodology Language Reference ManualThe Universal Verification Methodology (UVM) that can improve interoperability, reduce the cost of using intellectual property (IP) for new projects ..
[Architecture] GALS: Globally Asynchronous, Locally Synchronous
·
VLSI/Design
GALS: Globally Asynchronous, Locally Synchronous GALS란, 전역적으로는 비동기, 각 블록 내부는 동기식으로 동작하는 SoC 설계 방식이다. 쉽게 말하면 여러 개의 작은 동기 섬들이 비동기 방식으로 연결된 시스템이라고 보면 된다. 칩 내부의 각 부품은 자기만의 속도(Local Clock)로 작동하되, 부품끼리 데이터를 주고받을 때는 약속된 신호(Asynchronous)를 통해 소통하는 방식이다. GALS 등장 배경 과거 SoC는 칩 한 구석에 있는 단일 PLL이 거대한 H-tree/mesh로 전체 칩에 클럭을 전달하는 방식이었다. 그러나 현대 SoC 규모 증가, 칩렛, AI workload, 전력/성능/면적 복잡도 증가로 인해 단일 전역 클럭 방식이 더 이상 버..
[OLED] Pixel Shift: 번인 방지를 위한 화면 이동
·
Semiconductor/Display
Pixel Shift OLED의 픽셀 시프트(Pixel Shift)는 화면의 미세한 잔상이나 영구적인 번인(Burn-in) 현상을 방지하기 위해 개발된 보호 기술이다. OLED 패널은 각 픽셀이 스스로 빛을 내는 유기 화합물로 구성되어 있는데, 특정 위치에 고정된 이미지(예: 방송사 로고, 게임 HUD, 윈도우 작업표시줄, 애플리케이션 아이콘 등)를 장시간 띄워두면 해당 부분의 소자만 먼저 수명이 줄어들어 얼룩이 남게 된다. 이를 막기 위해 화면 전체를 아주 미세하게 계속 움직여주는 것이 바로 Pixel Shift이다. 작동 원리 미세한 이동: 화면 전체를 상, 하, 좌, 우 방향으로 약 1~4픽셀 정도 아주 조금씩 이동시킨다.주기적 반복: 수 분/수 초 단위로 위치를 변경한다.부담 분산: 고정된 로고..
[OLED] APL(Average Picture Level)과 ABL(Automatic Brightness Limiter)
·
Semiconductor/Display
OLED에서 자주 접하는 APL과 ABL에 대해서 정리한다. APL (Average Picture Level)APL은 화면 전체의 평균 밝기 수준을 나타내는 지표로, 디스플레이 콘텐츠가 얼마나 밝은 장면인지 정량적으로 표현한다. 흰색 Window 패턴을 사용하면 APL을 직관적으로 설정하고 측정할 수 있다. 흰색 Window가 전체 이미지 크기의 4분의 1일 때 25% APL을 나타내고, 절반일 때는 50% APL, 전체가 흰색일 때는 100% APL을 나타낸다. 이처럼 검정색 배경 위에 흰색 Window를 추가하는 패턴은 OLED 디스플레이 밝기 특성을 측정하기 위한 표준적인 방법이다. APL이 높다 = 많은 픽셀이 높은 밝기를 냄결과적으로,전력 소모 증가패널 발열 증가밝기 유지가 어려워짐즉, APL..
[CDC] 11_Shadow Register, Active Register
·
VLSI/Design
Shadow Register 외부 버스 클럭(APB, AXI 등)에서 쓰여지는 설정 값을 임시로 저장해 두는 레지스터이다. 그리고 그 값은 바로 하드웨어에 적용되지 않는다. Shadow Register는 설정 대기실이고, Active Register는 실제 연산에 쓰이는 레지스터이다.임베디드시스템 분야에서 주로 쓰이던 개념으로 상황마다 용어는 다를 수 있다. 핵심은 필요한 타이밍에 데이터를 업데이트 하기위해 여분의 레지스터를 두는 것이다. 예를 들어 Pixel Clock 도메인에서 이런 레지스터를 쓴다고 해보자.always_ff @(posedge pix_clk) gain CPU(APB)가 Runtime 중간에 write하면 어떻게 될까? 라인, 프레임 중간에 gain 값 변경 → 화면 깨짐 / 글..
[CDC] 10_Multi Bit CDC: Asynchronous FIFO (Code, Simulation)
·
VLSI/Design
Asynchronous FIFO의 SystemVerilog 코드와 시뮬레이션을 확인해보자. Codemodule async_fifo #( parameter int DEPTH = 8, parameter int DWIDTH = 16)( input logic wclk, input logic rclk, input logic rst_n, input logic wr_en, input logic rd_en, input logic [DWIDTH-1:0] din, output logic [DWIDTH-1:0] dout, output logic..
[CDC] 9_Multi Bit CDC: Asynchronous FIFO (Full 판단, Pointer Jump)
·
VLSI/Design
Gray CDC한 Pointer를 비교하여 Empty, Full 판단을 정확하게 하는 것이 중요하다. Empty 판단은 직관적으로 두 포인터가 같을 때이다. CDC 처리만 잘 되었다면 문제가 발생하지 않는다. 이해하기 어렵지 않다. 문제는 Full 판단이다. Full 판단은 Synchronous FIFO와 조금 다르다. Synchronous FIFO에서 Full 판단DEPTH = 8wr_ptr : 4비트 (MSB 포함)rd_ptr : 4비트 (MSB 포함) 조건 wr_ptr == rd_ptr만으로 판단하면 문제가 생김:wr_ptr == rd_ptr → Empty 또는 Full 중 어느 상태인지 구분 불가그래서 wrap bit / MSB를 추가해서 Full과 Empty를 구분함:Empty: 포인터 완전히..