[Verilog] register 의 2nd array 선언

YumeIroVillain·2021년 12월 17일
0

6.5학기

목록 보기
3/20

Verilog 는

reg [7:0] b [0:3] [0:3];

꼴로 선언이 가능해 어디가 1차원, 2차원, 3차원인지 간혹 곤혹스러울 때가 있다.
이 때, 첫 [7:0] 의 의미는 자료형의 크기로 보면 되며
둘째 및 셋째 인덱스의 의미는 기존 C의 것과 동일하게 해석하면 된다.
만일, reg [7:0] a[0:3] 가 있다면 이는 1바이트짜리 크기의 a가 4개 있는 1차원 배열을 의미하는데
a배열의 2nd 원소(==1)의 3번째 비트(==2)를 확인하고 싶다면
a[1][2] 를 하면 되며 이는 C와 동일하다.

System Verilog 에서만 가능하다고 되어있긴 하나, 아래와 같은 예시가 이해에 도움이 될 것이다.

reg [7:0] a [0:3];
reg [7:0] b [0:3] [0:3];

reg [7:0] c;
reg d;

initial begin

   for (int i=0; i<=3; i++) begin
      a[i] = i[7:0];
   end

   c = a[0];
   d = a[1][2]; 


   // using 2D
   for (int i=0; i<=3; i++)
      for (int j=0; j<=3; j++)
          b[i][j] = i*j;  // watch this if you're building hardware

end

출처


2023.05.08 추가

Packed Array, Unpacked Array란?

변수명 왼쪽에 인덱싱이 들어가면 packed,
오른쪽에 인덱싱이 들어가면 unpacked array라고 칭한다.
출처

profile
HW SW 둘다 공부하는 혼종의 넋두리 블로그 / SKKU SSE 17 / SWM 11th

0개의 댓글