SoC 설계 18

Glitch free selection in Clock Mux

Clock Mux의 sel 신호에 Glitch 발생 시 문제점 및 해결 방법Clock Mux(clk_mux)는 두 개 이상의 클럭 신호 중 하나를 선택하는 역할을 합니다. 그러나 sel 신호에 글리치(Glitch)가 발생하면 예기치 않은 클럭 전환, 메타스테빌리티, 타이밍 위반 등의 문제가 발생할 수 있습니다.문제점 (Issues)1. Glitch로 인한 짧은 Clock Pulse 발생sel 신호가 글리치로 인해 빠르게 변하면, Clock Mux의 출력이 순간적으로 잘못된 클럭을 선택할 수 있습니다.이로 인해 짧은 클럭 펄스(Glitch Clock Pulse)가 생성되어, 플립플롭(FF)이 비정상적인 동작을 하거나 타이밍 위반을 유발할 수 있습니다.2. Metastability (메타스테빌리티)sel 신..

Glitch free enable for clock gating

Clock Gating Cell의 Enable이 Glitch하면 발생하는 문제점Clock Gating Cell의 enable 신호에 글리치(Glitch)가 발생하면 심각한 타이밍 문제와 기능적 오류가 발생할 수 있습니다.주요 문제점1. Clock Glitch (잘못된 클럭 펄스)enable 신호가 글리치가 발생하면, 의도하지 않은 짧은 클럭 펄스가 생성될 수 있습니다.이러한 펄스가 플립플롭(FF)으로 전달되면, 데이터 손실 또는 타이밍 위반을 유발할 수 있습니다.2. Metastability & Setup/Hold Time Violationenable 신호가 비동기 신호이거나 클럭 엣지와 정확히 정렬되지 않으면, 클럭 게이팅 셀 내부의 래치가 메타스테이블(Metastable) 상태에 빠질 수 있습니다.결..

Verilog/Systemverilog에서 real 과 integer 간 형변환

Verilog에서 real과 integer 형 변환Verilog는 SystemVerilog와 달리 형 변환 연산자가 없기 때문에, Verilog에서 real 타입과 integer 타입 간 변환은 명시적 할당을 통해 수행됩니다.1. real to integer 변환real 값을 integer로 변환할 때 소수점 이하 값이 잘립니다(버림).module real_to_integer; real real_value; integer int_value; initial begin real_value = 1.23; int_value = real_value; // 암시적 변환 $display("Real to Integer: %f -> %d", real_value, in..

배열 시스템 함수들

Array system functions SystemVerilog는 배열의 크기를 직접 선언하지 않은 채, 배열을 쉽게 조작할 수 있는 여러 특수한 시스템 함수들을 제공합니다. 합성 가능한 배열 쿼리 함수들에는 $left(), $right(), $low(), $high(), $increment(), $size(), $dimensions(), 및 $unpacked_dimensions() 이 있습니다. 다음은 이러한 함수 중 일부를 사용하는 예입니다: typedef logic [31:0] d_array_t [0:4][0:4]; function d_array_t filter ( input d_array_t d ); for (int i = $low(d,1); i

SystemVerilog: Procedural blocks

SystemVerilog는 기존의 Verilog에 아주 많은 프로그래밍 능력을 추가했다. 이러한 향상을 의도한 목적은 다음 3가지로 볼 수 있다. 코드 간결화 설계시 기능적 결함 줄이기 시뮬레이션과 합성이 동일하게 동작하도록 만들기 Procedural blocks 기존의 Verilog에서는 always문을 사용하여, combinational, latch 와 sequential logic을 생성하였다. 여기서 문제는 합성 툴과 시뮬레이션 툴이 설계자의 어떤 종류의 logic을 표현할려고 헀는지 알 방법이 없다는 것이었다. 이러한 툴들은 procedural block안에 있는 코드를 해석할 수 있었고, 설계자의 의도를 nice한 방식으로 추측하는 것 뿐이었다. combinational logic에서 간단한 ..