[Verilog/SystemVerilog] 베릴로그와 시스템베릴로그의 차이(1) | 문자 값 할당 | 데이터 타입, 오브젝트 타입

2024. 8. 11. 17:45(System)Verilog 시스템 베릴로그

반응형

 


문자값 할당

Verilog 언어는 Vector에 모두 0, X, Z를 넣는 것이 쉽다.

parameter SIZE = 64;
reg [SIZE -1 :0] data;

data = 0;   // 모든 비트를 0으로 채움
data = 'bz; // 모든 비트를 Z로 채움
data = 'bx; // 모든 비트를 X로 채움

 

위 코드예제는 확장/축소가 가능하며, SIZE 파라미터값이 128로 재정의 된다면 자동으로 data에 새로운 크기를 적용해 확장한다.

 

그러나 모든 비트에 1을 넣는 쉬운 방법이 제공되지 않는다.

모든 비트를 1로 채우기 위해서는 정해진 크기를 사용해야 한다.

data = 64'hffffffffffffffff;

위 코드는 확장/축소가 불가능하며 size를 128로 수정해도 그 크기에 맞게 수동으로 수정해주지 않으면 안 된다.

 

 

SystemVerilog는 두 가지 방식으로 이러한 문자값 할당을 개선한다.

  1. 2진, 8진, 16진 등 정하지 않고 간단히 값을 채우는 방법
  2. 채우는 값이 로직 1이 될 수 있음. 각 비트를 채우기 위해 ' <- 를 값 앞에 사용

여기서, ' (생략부호- tick이라 부름)와 ` (액센트 부호- back tick)를 구분해야 한다.

 

'0 // 왼쪽부터 모든 비트를 0으로 채움
'1 // 왼쪽부터 모든 비트를 1으로 채움
'z // 왼쪽부터 모든 비트를 z으로 채움
'x // 왼쪽부터 모든 비트를 x으로 채움

 


데이터 타입과 오브젝트 타입

type은 signal이 net 인지 variable인지를 나타낸다.

시스템 베릴로그는 reg, integer와 같은 모든 베릴로그 변수 타입에 byte, int 등의 데이터 타입을 추가했다.

 

data type은 net나  variable의 값 시스템(2 state/4 state)을 나타낸다.

 

 

  • Verilog / SystemVerilog
Verilog 사용 reg 4-state unsigned
wire
integer signed
real    
time    
realtime    
+ SystemVerilog에서 추가 logic 4-state unsigned
bit 2-state
byte signed
shortint
int
longint
shortreal  

 

  • 2-state (0,1) 와 4-state (0,1,x,z)
  • bit는 2 state, logic은 4 state 데이터 타입을 정의

 

1. 데이터 타입

 

베릴로그 (Verilog)

- 베릴로그의 기본 데이터 타입은 몇 가지로 제한되며, 주요 데이터 타입은 다음과 같다.

  • reg : 레지스터 타입, 변수에 값 저장 가능
  • wire : 네트 타입, 연산 결과나 다른 모듈로부터 값을 전달
  • integer : 정수 타입, 32비트 크기의 정수를 저장
  • real : 실수 타입, 부동 소수점 숫자를 저장

 

시스템베릴로그 (SystemVerilog)

- 베릴로그의 데이터 타입을 확장하여 더 많은 유연성과 강력함을 제공하며, 주요 데이터 타입은 다음과 같다.

  • logic : 모든 신호 (wire, reg) 타입을 대체할 수 있는 범용 데이터 타입
  • bit : 2진 데이터 타입, 0과 1만 가짐
  • byte :  8비트 정수 타입
  • shortint : 16비트 정수 타입
  • int :  32비트 정수 타입
  • longint : 64비트 정수 타입
  • shortreal : 32비트 부동 소수점 타입
  • real : 64비트 부동 소수점 타입

 

SystemVerilog는 일반적인 목적에 더 직관적이고 하드웨어 중심의 데이터 타입인 logic을 사용한다.

logic resetn;	// 1-bit 크기의 4 state 변수
logic [63:0] data;	// 64bit 크기의 변수
logic [0:7] array [0:255];	// 8bit 크기의 변수들의 배열

 

여기서 logic은 실제 변수타입이 아니라 데이터 타입으로 signal이 4 state 값을 갖는 것을 나타낸다.

그러나, logic 키워드가 혼자 사용되면 변수라는 의미를 내포한다.

 

아래처럼 한 쌍의 키워드를 사용하여 명확하게 정의할 수도 있다.

var logic [63:0] addr;	// 64bit 크기의 변수
wire logic [63:0] data;	// 64bit 크기의 네트

 

 

 

2. 오브젝트 타입

베릴로그 (Verilog)

- 베릴로그는 데이터 타입 외에 별도의 오브젝트 타입을 많이 제공하지 않는다. 

 

시스템베릴로그 (SystemVerilog)

- 시스템 베릴로그는 하드웨어 설계와 검증을 모두 지원하기 위해 베릴로그를 확장하였기에 다양한 오브젝트 타입을 추가했다.

대표적인 오브젝트 타입은 다음과 같다.

  • class :  객체 지향 프로그래밍을 지원하고 하드웨어 검증 환경을 모델링하는 데 유용
  • interface : 모듈 간의 복잡한 통신을 캡슐화하고 구조화 가능
  • enum :  열거형 타입으로 상수 값들의 집합을 정의
  • struct : 구조체 타입으로 여러 데이터를 하나의 그룹으로 묶음
  • union :  공용체 타입으로 하나의 메모리 위치를 여러 데이터 타입이 공유.

 

[참조] 디자인을 위한 SystemVerilog

 


 

반응형