[SystemVerilog] 변수 타입, 데이터 타입 | 2state, 4state

2024. 5. 11. 21:18(System)Verilog 시스템 베릴로그

반응형

2024.05.11 - [SystemVerilog] - [Verilog/SystemVerilog] 베릴로그와 시스템베릴로그의 차이 | 오브젝트 타입과 데이터 타입

 

[Verilog/SystemVerilog] 베릴로그와 시스템베릴로그의 차이 | 오브젝트 타입과 데이터 타입

type은 signal이 net 인지 variable인지를 나타낸다.시스템 베릴로그는 reg, integer와 같은 모든 베릴로그 변수 타입을 사용하고 추가로, byte, int 등의 타입을 더 사용한다. data type은 net나  variable의 값

wolleyneerg.tistory.com

<베릴로그와의 차이>


 

0 0 값
1 1 값 
x or X X - 0인지 1인지 알 수 없음 (unkown)
z or Z Z - 연결되지않음 (high impedence)

 

시스템 베릴로그는 RTL 보다 더 추상 레벨인 시스템 레벨이나 트랜잭션 레벨에서의 모델링에 적합한 2 state 타입을 추가했다.

 

4-state (0,1,X,Z)

module tb;
	logic [3:0]  my_data; 		// logic 타입의 4bit 크기 my_data 변수 선언
    
	initial begin
    	$display ("my_data=0x%0h", my_data);	// logic의 초깃값 X 출력
	my_data = 4'hB; 			// my_data에 4bit 크기의 B값 할당
      	$display ("my_data=0x%0h", my_data);
	end
endmodule
my_data=0xx
my_data=0xb

 

 

2-state (0,1)

bit 1 bit  
byte 8 bit C의 int
shortint 16 bit C의 short
int 32 bit C의 int
longint 64 bit C의 longlong
  • 모든 2 state 데이터 타입은 0 값으로 시뮬레이션이 시작됨
    • 4 state -> 2 state
4 state 2 state
0 0
1 1
X 0
Z 0
  • bit 
    상위 추상 레벨에서 하드웨어를 모델링하는 데 유용
    실제로 변수타입은 아니며, 2 state를 갖는 데이터 타입이지만 단독으로 사용하면 변수를 의미한다.
module tb;
  bit       var_a;       // bit 타입의 1bit 크기 변수 var_a 선언
  bit [3:0] var_b;       // bit 타입의 4bit 크기 변수 var_a 선언
  logic [3:0] x_val;     // logic 타입의 4 bit 크기 변수 x_val 선언

  initial begin
    $display ("Initial value var_a=%0b var_b=0x%0h", var_a, var_b);

    // 새로운 값을 할당
    var_a = 1;
    var_b = 4'hF;
    $display ("New values    var_a=%0b var_b=0x%0h", var_a, var_b);

    // 선언한 크기보다 더 큰 값을 할당
    var_b = 16'h481a;
    $display ("Truncated value: var_b=0x%0h", var_b);

    // bit 타입(2state-0,1)에 zx 값을 할당
    var_b = 4'b01zx;
    $display ("var_b = %b", var_b);
  end
endmodule

 

Initial value var_a=0 var_b=0x0
New values    var_a=1 var_b=0xf
Truncated value: var_b=0xa
var_b = 0100

 

해당 코드에 대한 결과 설명

1. 초기값 출력 : var_a, var_b 변수 선언만 했기 때문에 초깃값인 0이 출력.

2. 새로운 값 : 각각 1, 4'hf 값을 할당 -> 그대로 var_a는 1 var_b는 f 값 출력.

3. 선언된 크기보다 큰 값 할당 : var_b는 선언된 크기는 4bit이지만 12bit 크기의 481f 가 할당 -> 가장 왼쪽 bit들이 잘리게 되고 남은 4bit의 f 값만 할당되어 출력.

4. 사용하지 않는 상태 값 할당 : 2 state의 bit 타입으로 선언한 var_b에 01zx 값을 할당 -> 4 state의 값이 2 state 0 값으로 바뀌어 0100이 출력.

 

반응형