Programming/Verilog

verilog 모델링 유형

구차니 2018. 1. 20. 14:20

베릴로그 언어적 특성에 대해서 혼동을 하고 있었네..


Gate Level Modeling

- primitives 를 이용한 게이트 레벨 설계방법

- and, or, nand, nor, xor, xnor

- buf, not

- bufif1, bufif0, notif1, notif0 (tri-state)

일종의 변수 처럼 사용하여 인스턴스를 생성, 변수들을 서로 엮어 회로 구성

module and_from_nand(X, Y, F);

input X, Y;

output F;

wire W;

// Two instantiations of the module NAND

nand U1(W, X, Y);

nand U2(F, WW);

endmodule 


Dataflow Modeling 

- assign 키워드 사용

- net에 특정 논리값을 지정함으로서 데이터의 흐름을 통해(routing?) 회로 구성

- 각종 연산자들 사용가능

아래와 같이 wire로 net 끼리 연결하거나, wire로 선언 후 assign을 통해서 연결

wire out = in1 & in2 ;


wire out;

assign out = in1 & in2 ; 


Behavioral Modeling 

- always 키워드 이용

- always 내부의 내용은 시퀀셜 하게 작동. always들 끼리는 병렬로 작동

- alwyas 는 항상 작동하므로, 절차적 언어의 무한반복문과 유사한 개념

- 절차적(always) 에서는 블러킹과 넌블러킹이 존재

(즉, dataflow나 gate level에서는 해당 개념이 존재하지 않음. 이녀석이 혼동의 원인)

- 블러킹 '=' 라인 순서대로 수행

- 넌블러킹 '<=' 넌블러킹 끼리는 동시 수행

- C언어 같은 느낌으로 if, switch-case등을 지원

- for 문은 합성툴에 따라 반복횟수 제한되거나, 지원하지 않음


블러킹과 넌블러킹으로 인해서 경쟁상태 발생이 가능함.

race condition 발생시에는 어떤 값이 있을지 알 수 없으므로 오작동 유발

- always들 끼리 같은 값에 쓰지 않도록 하며

- 써야 한다면 넌 블러킹으로 할당하면 값이 변동되지 않음

// illustration 1 : blocking

always @(posegde clk)

a = b ;

always @(posedge clk)

b = a;


// illustration 2 : nonblocking

always @(posegde clk)

a <= b ;

always @(posedge clk)

b <= a; 

자료 괜찮은거 같은데.. 이거 상위 페이지에서 한번에 받기는 못 찾음..

[링크 : https://cms3.koreatech.ac.kr/sites/yjjang/down/dsys07/01VerilogHDL.pdf]