베릴로그 언어적 특성에 대해서 혼동을 하고 있었네..
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, W, W); 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]
'Programming > Verilog' 카테고리의 다른 글
verilog module instantiate (0) | 2018.01.26 |
---|---|
verliog module 선언 (0) | 2018.01.25 |
verilog Concatenation, Replication operator (0) | 2018.01.19 |
verilog unary reduction operator와 bitwise operator (0) | 2018.01.19 |
베릴로그 순차적 구조적 (2) | 2018.01.18 |