[SVA] 2-2. SystemVerilog Assertions(SVA)
Assertion 기본 구조
1
2
3
4
5
6
7
8
9
10
11
12
|
// Simple assert statement
assert(<expression>);
// Assert statement with statements to be executed for pass/fail conditions
assert(<expression>) begin
// If condition is true, execute these statements
end else begin
// If condition is false, execute these statements
end
// Optionally give name for the assertion
[assert_name] : assert(<expression>);
|
cs |
assert는 조건이 pass인 경우 실행되고, else는 조건이 fail인 경우 실행된다.
assertion에 대해 이름을 부여할 수 있다.
Immediate Assertion
설명
Immediate Assertion은 말 그대로 코드가 실행되는 시점에 즉시 수행된다. 즉, 변수의 값이 계산된 순간, 그 값을 기반으로 평가되며, 시간적 지연이 발생하지 않는다.
Procedural Block 내에서 사용되며, 일반적으로 if문 조건처럼 평가된다. SW에서 사용하는 Assertion과 유사하다.
조합 논리에서만 사용 가능하여 시간을 소모하는 동작을 하지 않는다. 즉, 시뮬레이션 시간 틱 내에서 평가된다.
시간적인 연속성을 다루지 않는다. next 또는 ##와 같은 연속적인 시간 관련 연산자는 사용할 수 없다.
동작 조건으로 level-sensitive와 edge-sensitive 둘 다 사용 가능하다.
문법적으로 assert만 키워드로 사용한다. 반면에, Concurrent Assertion은 assert property를 요구한다.
예제
1
2
3
4
5
6
7
|
module immediate_assertion_1(input wire clk, a, b);
wire result;
// 조건 검사
assert (a == b); // a와 b가 동일하면 어서션 통과, 아니면 실패
assign result = (a == b) ? 1'b1 : 1'b0;
endmodule
|
cs |
assert (a == b)는 a와 b가 동일한지 검사하며, 실패하면 즉시 assertion fail을 발생시킨다.
또한 result는 a와 b가 동일하면 1, 그렇지 않으면 0으로 설정된다.
1
2
3
4
5
6
7
8
9
10
11
12
|
module immediate_assertion_2(input wire clk, a, b);
wire result;
// assert 문은 조건 검증을 담당
always @ (posedge clk) begin
assert (a && b); // a와 b가 모두 참일 때만 통과
end
// result는 a와 b의 AND 결과로 할당
assign result = a && b; // a와 b가 모두 참이면 result는 1, 아니면 0
endmodule
|
cs |
동작 조건으로 edge-sensitive(posedge clk)를 사용할 수 있다.
assert (a && b)는 조건 검사만 수행하고, pass/fail을 출력한다.
result는 a && b의 논리 연산 결과로 할당된다.
'VLSI > Verification' 카테고리의 다른 글
[SVA] 2-1. SystemVerilog Assertions(SVA) (0) | 2024.11.18 |
---|---|
[SVA] 1-4. Introduction (0) | 2024.11.17 |
[SVA] 1-3. Introduction (0) | 2024.11.15 |
[SVA] 1-2. Introduction (1) | 2024.11.14 |
[SVA] 1-1. Introduction (0) | 2024.11.13 |
댓글