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,
오른쪽에 인덱싱이 들어가면 unpacked array라고 칭한다.
출처