-
[SystemVerilog] 절차적 할당 2개발/SystemVerilog 2022. 1. 11. 23:35
https://www.sutherland-hdl.com/papers/2005-SNUG-paper_SystemVerilog_unique_and_priority.pdf 참조
priority case, unique case 구문이 추가되었다.
그냥 case 구문을 사용하면 순차적으로 평가하여 제일 먼저 match되는 case item 문장이 실행된다.
case (sel) 0 : a = 0; 0, 1, 2 : a = 1; 3 : a = 2; 4 : a = 3; endcase
만약 sel = 0 이라면 처음 item 실행된다. 즉, 우선순위 인코더로 작동한다.
case item이 서로 중복되는것이 없다면, parallel 인코더로 작동할 것이다.
priority case는 full case와 같다.
priority case (sel) 0 : op = a; 1, 2 : op = b; 3 : op = c; endcase
이름 그대로 우선순위를 갖으며, case item은 중복 될 수 있다.
다만 case 변수에 대하여 가능한 모든 경우가 기술되어야 한다. 그렇지 않으면 경고가 뜬다.
unique case
unique case (sel) 0 : op = a; 1 : op = b; 2 : op = c; 3 : op = d; endcase
unique case도 마찬가지로 모든 경우가 기술되어야 한다.
그리고 모든 case item이 서로 중복이 없어야 한다.
unique case 의 item들은 순차가 아니라 동시에 문장이 평가되고 실행 된다.
priority, unique 는 casex, casez에도 적용 가능하다.
if 구문에도 unique, priority 키워드를 쓸 수 있다.
case 구문과 기능은 같다.
조건문 iif 는 if and only if 의 약자이다.
조건이 참일 경우에만 실행이 된다.
always @(posedge clk iff (en == 1), negedge resetn) begin if (~resetn) out <= 0; else out <= d; end // 동일한 코드 always @(posedge clk, negedge resetn) begin if (~resetn) out <= 0; else if (en) out <= 0; end
always 블록은 시스템베릴로그에서 3가지로 세분화 된다. (always_comb , always_latch, always_ff)
기존의 베릴로그는 always 블록 하나로 combinational, latch, flipflop 회로를 기술하였다.
코딩 스타일에 따라서 combinational 로직이 latch로 합성될 가능성이 있다.
시스템베릴로그에서는 용도를 명확히 나눠서 잘못된 로직으로 합성되는 것을 방지할 수 있다.
always_comb :
always_comb begin if (sel) op = a; else op = b end
combinational 로직을 기술하기 위한 블럭이다.
베릴로그에서는 always @(*) 으로 combinational 로직을 기술했다. always_comb와 차이점은 다음과 같다.
always_comb 블럭에서는 이벤트, 타이밍 요소는 들어갈 수 없다.
다른 블럭에서 assign된 변수를 always_comb 내부에서 assign 할 수 없다. (?)
always_comb 문장들은 전부 계산 완료된 뒤에 이벤트를 기다린다. (시뮬레이터의 time region 관련)
always_latch :
always_latch begin if (enable) out <= a; end
latch를 생성하기 위한 구문이다.
always_comb 처럼 내부에 이벤트, 타이밍 요소를 갖을 수 없다.
그리고 다른 곳에서 assign된 변수를 블럭 내부에서 assign 할 수 없다.
always_ff :
always_ff @(posedge clk, negedge rstn) begin if (~rstn) op <= 1'b0; else op <= a; end
flipflop 레지스터를 기술하는 구문
'개발 > SystemVerilog' 카테고리의 다른 글
[SystemVerilog] 데이터 타입 3 enum (0) 2022.01.15 [SystemVerilog] 연산자 (0) 2022.01.13 [SystemVerilog] 절차적 할당 1 (0) 2022.01.11 [SystemVerilog] 데이터 타입 2 (0) 2022.01.10 [SystemVerilog] 데이터 타입 1 (0) 2022.01.10