본문 바로가기
VLSI/Verification

[SystemVerilog Assertion(SVA)] 1-2. Introduction

by 리미와감자 2024. 11. 14.
728x90
반응형

[SystemVerilog Assertion(SVA)] 1-2. Introduction

 

SVA Example

 

이번에는 SystemVerilog Assertion을 사용한 예제를 확인해보자.

 

  • 예제1 : grant 요청 후 4 clock 이내에 ack 수신 확인

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module grant_ack_check(
   input logic clk,
   input logic reset_n,
   input logic grant,
   input logic ack
);
   // 4 Clock 이내에 ack 신호가 들어와야 함을 검증하는 Assertion
   property grant_to_ack_within_4_cycles;
      @(posedge clk) disable iff (!reset_n)
         grant |-> ##[1:4] ack;
   endproperty
 
   // Assertion 적용
   assert property (grant_to_ack_within_4_cycles)
      else $error("Error: ack not received within 4 cycles after grant request.");
endmodule
 
cs

 

 

grant 요청 후 4 clock 이내에 ack가 수신되지 않았으므로 Assertion Error를 발생시킨다.

 

 

    • 예제2 : 프로세서가 메모리에서 읽어온 명령어를 디코딩할 때, 유효하지 않은 명령어가 발견되지 않도록 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module instruction_check(
   input logic clk,
   input logic reset_n,
   input logic [7:0] instruction
);
   // 유효한 명령어는 0x00 ~ 0x7F 사이에 있다고 가정
   logic valid_instruction;
   
   // 명령어가 유효한지 확인
   always_comb begin
      valid_instruction = (instruction <= 8h'7F);
   end
 
   // 유효하지 않은 명령어가 발견되지 않도록 assertion 작성
   property valid_instruction_check;
      @(posedge clk) disable iff (!reset_n)
         valid_instruction;
   endproperty
 
   // assertion 적용
   assert property (valid_instruction_check)
      else $fatal("Fatal Error: Unknown instruction encountered!");
endmodule
 
cs

 

 

 

instruction이 7F를 초과한 경우 Assertion Error를 발생시킨다.

728x90
반응형

댓글