ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.