배열
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 10번째.
배열을 사용하면 하나의 변수에 여러 값을 저장할 수 있습니다. 배열의 각 요소는 인덱스를 통해 접근할 수 있습니다.
참고: 배열은 별도의 데이터 타입이 아닙니다. 이것은 wire, reg, integer 또는 real 타입의 집합입니다.
배열 선언하기
구문: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256바이트 메모리 (각 8비트)
reg data [0:7]; // 8개의 단일 비트 레지스터
wire [3:0] bus [0:3]; // 4개의 버스, 각각 4비트 너비
integer counters [0:9]; // 10개의 정수대괄호 [ ] 안의 숫자는 비트 너비가 아니라 배열 크기입니다.
배열 요소 접근하기
reg [7:0] memory [0:3];
memory[0] = 165; // 10진수 165
memory[1] = 90; // 10진수 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // 출력: 255배열은 테스트 데이터를 저장하는 데 있어 테스트벤치에서 매우 유용합니다.
다차원 배열
여러 차원을 가진 배열을 생성할 수 있습니다:
reg [7:0] matrix [0:3][0:3]; // 8비트 값의 4x4 배열
matrix[0][0] = 255; // 8'hFF = 10진수 255
matrix[2][1] = 85; // 8'h55 = 10진수 85Array vs Vector
| Vector | Array | |
|---|---|---|
| 정의 | 멀티 비트 wire 또는 reg | 여러 값의 집합 |
| 구문 | [MSB:LSB] | [size] |
| 예시 | reg [7:0] data; | reg [7:0] mem [0:255]; |
| 접근 | data[3] (비트 3) | mem[3] (요소 3) |
벡터는 여러 비트로 구성된 하나의 값입니다.
배열은 여러 개의 값이며, 각 값은 고유한 비트를 가집니다.
중요 참고 사항
- 배열은 큰 크기로 사용될 때 많은 도구에서 합성 가능하지 않습니다
- 배열은 주로 테스트벤치에서 사용됩니다
- 하드웨어 메모리의 경우, 특수 메모리 프리미티브를 사용하십시오
챌린지
4개의 테스트 값을 저장하는 배열을 생성하도록 아래 코드를 완성하세요.
수행할 작업:
test_data라는 이름의 배열을 선언하세요.reg데이터 타입을 사용하세요 (테스트벤치에서 값을 저장하기 때문입니다)- 각 요소는 8비트 너비여야 합니다 (
[7:0]) - 배열은 4개의 요소를 가져야 합니다 (
[0:3])
치트 시트
배열은 인덱스를 통해 접근하며, 하나의 변수에 여러 값을 저장합니다. 배열은 wire, reg, integer, 또는 real 타입의 집합입니다.
선언 구문: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256개의 요소, 각각 8비트 너비
wire [3:0] bus [0:3]; // 4개의 요소, 각각 4비트 너비
integer counters [0:9]; // 10개의 정수요소 접근:
memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);다차원 배열:
reg [7:0] matrix [0:3][0:3]; // 8비트 값의 4x4 배열
matrix[0][0] = 255;배열 vs 벡터:
- 벡터(Vector) — 여러 비트를 가진 하나의 값:
reg [7:0] data;—data[3]은 3번 비트에 접근합니다 - 배열(Array) — 각각 고유한 비트를 가진 여러 값:
reg [7:0] mem [0:255];—mem[3]은 3번 요소에 접근합니다
배열은 주로 테스트벤치(testbenches)에서 사용됩니다. 하드웨어 메모리의 경우 특수한 메모리 프리미티브를 사용하십시오.
직접 해보기
module arrays;
// test_data라는 이름의 배열을 선언합니다
// 각각 8비트 크기인 4개의 요소를 가져야 합니다
// reg 데이터 타입을 사용합니다 (테스트벤치에서 값을 저장하기 때문입니다)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.