-
[SystemVerilog] 데이터 타입 4 struct개발/SystemVerilog 2022. 1. 15. 22:20
구조체
c언어와 사용법이 같다.
typedef struct { bit id, bit parity, int addr; logic [7:0] data; } frame_t frame_t frame1, frame2 [1:0] logic [7:0] data_in; // 멤버변수 접근 frame1.id <= 1'b1; data_in <= frame1.data; // ordered assignment frame1 <= {1'b1, 1'b1, 15, 8'hFF}; // named assignment frame1 <= {id:1, parity:1, addr:15, data:8'hFF}; // nested ordered frame2 <= {{0, 0, 15, 0} , {1, 1, 1, 0}}; // using type frame1 <= {data:8'hFF, addr:12, bit:0}; // using default frame1 <= {data:8'hFF, int:12, default:0}
구조체 내부에 정의된 변수를 멤버변수라고 한다.
구조체타입의 변수를 선언하면 각각의 멤버변수에 접근할 수 있고, 값을 개별적으로 할당 할 수 있다.
멤버변수 접근은 .(dot) 연산자를 사용한다.
구조체에 값을 할당하려면 ordered , named 2가지 방법이 있다.
위의 예를 보면 이해하기 쉬울것이다.
named 방법은 키값으로 name 뿐만 아니라 데이터타입, default 를 혼용할 수 있다.
혼용시 값이 할당되는 우선순위는
1. name
2. type
3. default
User defined type으로 모듈포트를 선언할 수 있다. 다만 user defined type이 먼저 정의되있어야 한다.
typedef enum {start, done} mode_t; module test{ input mode_t mode, output logic [7:0] out };
'개발 > SystemVerilog' 카테고리의 다른 글
[SystemVerilog] 인터페이스 1 (0) 2022.01.16 [SystemVerilog] packed / unpacked array (0) 2022.01.15 [SystemVerilog] 데이터 타입 3 enum (0) 2022.01.15 [SystemVerilog] 연산자 (0) 2022.01.13 [SystemVerilog] 절차적 할당 2 (0) 2022.01.11