벡터
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 9번째.
vector는 multi-bit wire 또는 reg입니다. single bit 대신 vector를 사용하면 data의 bus를 다룰 수 있습니다. 이것은 함께 그룹화된 bits의 집합입니다.
참고: 백터(vector)는 별도의 데이터 타입이 아닙니다. 이것은 단지 wire 또는 reg의 멀티 비트(multi-bit) 버전일 뿐입니다.
wire single; // 단일 비트
wire [7:0] bus; // 8비트 벡터 (비트 7부터 0까지)vector를 선언하기 위해, MSB가 최상위 비트(most significant bit)이고 LSB가 최하위 비트(least significant bit)인 [MSB:LSB] 구문을 사용합니다.
wire [3:0] a; // 4비트 wire 벡터
reg [7:0] data; // 8비트 reg 벡터
wire [15:0] addr; // 16비트 wire 벡터비트에 접근하기
벡터의 개별 비트나 슬라이스에 접근할 때, 비트 위치(인덱스)에는 십진수를 사용하고 할당에는 이진수 값(0 또는 1)을 사용합니다.
이는 bit 위치가 위치(주소와 같음)에 해당하여 자연스럽게 10진수로 표현되는 반면, 해당 bit에 저장된 값은 0 또는 1이라는 binary 선택만 가능하기 때문입니다.
예를 들어, data[0]은 "0번 bit"를 의미하고, = 1은 "이를 high로 설정"하는 것을 의미합니다. 75와 같은 십진수를 single bit에 assign해도 75가 저장되지 않으며 — Verilog는 자동으로 최하위 bit만 유지합니다 — 따라서 항상 0 또는 1을 명시적으로 작성하세요.
reg [7:0] data;
data = 170;
data[0] = 1; // LSB를 1로 설정
data[7] = 0; // MSB를 0으로 설정
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Bit 순서
bits의 순서는 중요합니다:
wire [3:0] a; // a[3]은 MSB, a[0]은 LSB
wire [0:3] b; // b[0]은 MSB, b[3]은 LSB (덜 일반적)대부분의 설계자는 왼쪽에 MSB가 있는 [MSB:LSB] 형식을 사용합니다.
값 할당하기
reg [3:0] a;
a = 10;
a = 5;
a = 3; Vector Slices
비트 범위를 참조할 수 있습니다:
reg [15:0] word;
word[15:8] = 255; // 상위 바이트 할당 (8'hFF = 255)
word[7:0] = 0; // 하위 바이트 할당 (8'h00 = 0)
word[3:1] = 3'b101; // Assign a slice 챌린지
아래 module에 vector 선언이 필요합니다.
해야 할 일:
- 각 input 및 output을 8-bit vector로 변경하세요.
직접 해보기
module vector_example(
input a, // 8비트 벡터 [7:0]으로 변경
input b, // 8비트 벡터 [7:0]으로 변경
output c // 8비트 벡터 [7:0]으로 변경
);
assign c = a & b;
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.