ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SystemVerilog] packed / unpacked array
    개발/SystemVerilog 2022. 1. 15. 23:43

    베릴로그 / 시스템베릴로그에서 배열을 선언할 때 2가지 방법이 있다.

     

    1. unpacked array

    int a [2:0][0:1];
    int b [1:3][2:1];

    변수 이름 오른쪽으로 배열을 지정하면 unpacked array가 된다.

     

    인덱싱 순서는 왼쪽에서 오른쪽으로 순회한다.

    module test();
      
      int a [3:1][0:4];
      
      initial begin
        a[1] = '{default : 1};
        a[2] = '{default : 2};
        a[3] = '{default : 3};
        foreach (a[i, j])
          $display("a[%d][%d] = %d", i, j, a[i][j]);
      end
      
    endmodule

    코드 실행 결과

     

     

    2. packed array

     

    변수 이름 왼쪽에 배열을 지정하면 packed array 으로 선언된다.

    logic [1:0][7:0] array
    
    // equals to {array[1][7:0], array[0][7:0]}
    
    
    array = 16'b0;
    array <<= 1;
    
    
    logic [7:0] vec;
    vec <= array[13:6];
    
    
    // packed array
    typedef logic [1:0][7:0] array_t;
    array_t [3:0] new_array;	// packed array

    packed array는 하나의 벡터로 저장된다.

    따라서 벡터 인덱싱이 가능하다.

     

    packed array 선언을 위해서는 데이터 타입이 reg, wire, logic, bit 이어야 한다.

    또는 다른 packed array를 이용하여 새로운 packed array를 선언할 수 있다.

    루프에서 인덱싱 순서는 왼쪽에서 오른쪽이다.

    module test();
      
      bit [2:0][0:3] a;
      
      initial begin
        foreach (a[i, j])
          $display("a[%d][%d] = %d", i, j, a[i][j]);
      end
      
    endmodule

     

    구조체도 pack 선언 가능하다.

    typedef struct packed {
        logic id,
        logic parity,
        int addr,
        logic [7:0] data   
    } frame_t

    packed 키워드만 넣어주면 된다.

    다만 구조체의 모든 멤버변수가 packed로 선언 가능해야한다.

    즉 멤버변수는 1bit data 타입, 1차원 array, packed struct 타입이어야 한다.

    멤버변수에 2 state, 4 state 변수가 같이 있다면, 구조체 전체는 4 state로 저장된다.

    '개발 > SystemVerilog' 카테고리의 다른 글

    [SystemVerilog] 인터페이스 2  (0) 2022.01.16
    [SystemVerilog] 인터페이스 1  (0) 2022.01.16
    [SystemVerilog] 데이터 타입 4 struct  (0) 2022.01.15
    [SystemVerilog] 데이터 타입 3 enum  (0) 2022.01.15
    [SystemVerilog] 연산자  (0) 2022.01.13
Designed by Tistory.