EE

    [Verilog] 사건 기반 타이밍 제어

    사건이란 레지스터, 혹은 넷의 값 변화를 의미한다. 사건 기반 타이밍 제어에는 정규 사건 제어(regular event control), 명명된 사건 제어(named event control), 사건 OR 제어(event OR control), 준위-구동 타이밍 제어(level-sensitive timing control) 4가지 형태가 존재한다. 엣지 트리거링으로 사건을 제어할 때에는 기호 @을 사용하며, 준위 트리거링으로 제어할 때는 키워드 wait을 사용한다. 정규 사건 제어 정규 사건 제어는 클럭의 상승, 하강 엣지를 지정할 수 있다. @(clock) q = d; //클럭이 변할 때(클럭의 엣지에서) 수행 @(posedge clock) q = d; //클럭의 상승 엣지에서 수행 @(negedge ..

    [Verilog] 지연 기반 타이밍 제어

    지연 기반 타이밍 제어는 기호 #을 사용한다. 정규 지연 제어(regular delay control), 내부 할당 지연 제어(intra-assignment delay control), 제로 지연 제어(zero delay control) 세 가지의 형태가 있다. 정규 지연 제어 정규 지연 제어는 절차적 할당의 왼쪽에 0이 아닌 지연을 지정하는 방식이다. 문장을 만나는 시점을 기준으로 지연을 수행하고, 문장을 뒤이어 수행한다. 내부 할당 지연 제어 내부 할당 지연 제어는 할당 연산자의 오른쪽에 지연을 지정한다. rvalue에 대한 값의 계산을 마친 후 지연을 수행한다. 즉 말 그대로 '할당'에 대해서만 지연을 수행하는 것이라고 할 수 있다. 제로 지연 제어 제로 지연 제어는 말 그대로 제로지연, #0이며,..

    [Verilog] 절차적 할당 - 블록킹과 논블록킹

    절차적 할당(procedural assignments)는 연속적 할당과는 다른 개념이다. [Verilog] 데이터 플로우 모델링, assign 연속 할당문 데이터 플로우 수준은 게이트 수준보다 한 단계 더 추상화된 수준의 모델링 기법이다. (근데 나는 아직 공부를 별로 안해서 그런지 게이트 수준이랑 엄청나게 큰 차이는 못느끼겠다.... 어쨌든 katteniiki.tistory.com 연속 할당문의 경우 lvalue가 넷이었던 반면, 절차적 할당에서는 레지스터가 온다. 절차적 할당은 한번 할당되면 다른 값으로 갱신하기 전까지 그 값을 유지한다. 절차적 할당에서 lvalue가 될 수 있는 것으로는 다음과 같은 것들이 있다. reg, integer, real, 시간 레지스터, 메모리 요소 이러한 변수들의 비트..

    [Verilog] initial과 always 구문

    모든 행위 수준 문장은 반드시 initial, always 블록 안에 있어야 한다. 각 initial, always 블록은 분리되어 수행되며, 서로 중첩될 수 없다. 여러 문장은 begin, end를 통해 묶어준다.(C에서의 중괄호와 같은 역할) initial initial 블록은 시간 0에서 시작되고, 시뮬레이션동안 단 한 번만 수행된다. 여러개의 initial 블록이 있다면 동시에 시간 0에서 시작되며 각각 독립적으로 실행을 마치게 된다. initial m = 1'b0; initial begin #5 a = 1'b1; // #은 문장을 만나고 수행되기까지의 지연시간 #25 b = 1'b0; end // 시간 0일 때 m = 1'b0 수행 // 시간 5일 때 a = 1'b1 수행 // 시간 30일 때 ..

    [Verilog] 연산자 정리

    C나 C++에 없거나 혹은 일반적인 SW 프로그래밍을 할 때 잘 쓰이지 않는 연산자들 위주로 정리함. 연산자 심볼 수행되는 연산 피연산자의 개수 ** 제곱 승 2 === 케이스 등가 연산자 2 !== 케이스 비등가 연산자 2 ^ 비트단위 xor 2 ^~ 또는 ~^ 비트단위 xnor 2 >> 오른쪽 자리 이동 2 > 수학적 오른쪽 자리 이동 2 > 1 // Y = 4'b0110 오른쪽으로 1비트 자리 이동 Y = X

    [Verilog] 데이터 플로우 모델링, assign 연속 할당문

    데이터 플로우 수준은 게이트 수준보다 한 단계 더 추상화된 수준의 모델링 기법이다. (근데 나는 아직 공부를 별로 안해서 그런지 게이트 수준이랑 엄청나게 큰 차이는 못느끼겠다.... 어쨌든 데이터 플로우 수준도 회로를 먼저 그려야 하는 건 똑같지 않나.... 내가 C나 C++에 더 익숙해서 그렇게 느끼는 듯..) +) 완전다름!! 이땐 왜 그렇게 생각했을까 연속 할당문은 어떤 값을 넷에 할당하기 위해 사용된다. wire out; assign out = in1 & in2; //또는 다음의 방식도 가능하다. wire out = in1 & in2; 연속 할당문의 특징은 다음과 같다. 연속 할당문의 왼쪽은 항상 넷이어야 한다.(스칼라, 벡터 모두 가능) 연속 할당문은 항상 능동적으로, 오른쪽 피연산자들의 값이 ..

    [Verilog] 게이트 지연

    이상적인 신호와 다르게 실제 신호는 abrupt하게 변할 수 없다. 따라서 게이트를 통과하여 신호의 출력이 변화되기까지 약간의 딜레이가 존재한다. (이러한 딜레이를 무시한 채 설계한 회로를 제로지연 회로라고 한다.) 딜레이는 세가지 형태가 있을 수 있는데, 상승 지연(Rise Delays)과, 하강 지연(Fall Delays) 턴-오프 지연(Turn-off Delays)가 있다. 상승 지연: 다른 값(0, x, z)에서 1로 출력이 변화하는 과정에서 생기는 딜레이 하강 지연: 다른 값(1, x, z)에서 0로 출력이 변화하는 과정에서 생기는 딜레이 턴-오프 지연: 다른 값에서 하이 임피던스(z)로 출력이 변화하는 과정에서 생기는 딜레이 만약 값이 x로 변화하는 경우 세 지연 중 가장 작은 값을 선택한다...

    [Verilog] 게이트 수준 모델링

    베릴로그로 모듈을 설계할 때 방법의 추상화 정도에 따라 네가지로 나뉠 수 있다. 추상화의 가장 상위 수준인 행위 또는 알고리즘 수준부터, 데이터플로우 수준, 게이트 수준, 마지막으로 가장 하위 수준인 스위치 수준이 있다. 게이트 수준의 설계는 논리 게이트와 논리 게이트 사이의 연결을 사용하여 모듈을 구현하는 방식이다. 사실상 논리회로를 그리는 것과 같다고 볼 수 있다. 베릴로그에서는 기본적인 논리 게이트를 프리미티브로 제공한다. 프리미티브를 인스턴스화 할 때는 인스턴스의 이름을 지정하지 않아도 관계없다. 베릴로그에서 제공하는 프리미티브로는 and/or(and, nand, or, nor, xor, xnor), buf/not(buf, not, bufif, notif)가 있다. and / or and / or..