본문 바로가기
verilog/이론

[verilog] 벡터(vector)와 배열(array)

by 씐 2023. 11. 13.
728x90

벡터와 배열

 

벡터

 

  • 자료형 선언에서 범위를 지정하지 않았을 경우, 해당 자료형은 1비트 벡터(vector)로 취급
  • 비트 수가 2이상인 논리 값 또는 신호 값의 사용을 위해서는 다중 비트 선언 필요
  • 다중 비트 선언을 하기 위해서는 자료형 선언 시 네트 또는 레지스터 이름 앞에 [msb : lsb]를 추가하여 범위를 지정

 

 

배열

 

  • 배열(array)은 벡터들의 묶음
  • 배열이 하나의 벡터로 구성되었다면 이 배열과 벡터는 동일
  • 2개 이상의 벡터들로 구성되는 배열을 사용하기 위해서는 네트 또는 레지스터 이름 뒤에 [first_index : last_index]를 추가
  • 다차원 배열을 구성하기 위해서는 네트 또는 레지스터 이름 뒤에 [first_index : last_index]를 원하는 차원 수만큼 추가

 

 

벡터와 배열

 

  • 벡터와 배열은 특정 자료형의 요소들을 묶어 하나의 객체(object)로 취급하기 위해 사용
  • 벡터는 각 비트의 값을 단일 할당문으로 한 번에 할당
  • 배열의 값은 배열 전체 또는 일부분을 단일 할당문을 통해 값을 할당하거나 수식을 사용할 수 없음
  • 5비트 벡터 = 1개의 5비트 레지스터 변수의 1차원 배열 : reg  [4:0] reg_a;

  • 256개의 5비트 레지스터 변수의 2차원 배열 : reg  [4:0] mem [0:255]

 

  • 256개의 5비트 레지스터 변수의 3차원 배열 : reg  [4:0] mem_2D [0:255][0:2]

 

 

 

벡터와 배열의 사용 예

 

  • 표현 형식
벡터 : 자료형_이름  [msb:lsb] 이름;
배열 : 자료형_이름  [msb:lsb] 이름 [first_index:last_index]...;

 

  • 사용 예
wire  [7:0] bus_a, bus_b; //8비트 bus_a와 bus_b(벡터)
reg   [15:0] address; // 16비트 address(벡터)
address [3] = 0; // 16비트 address의 4번째 요소 1비트에 0 할당
reg   [7:0] mem [0:255]; // 8비트 레지스터 256개로 구성된 메모리mem(배열)
mem [5] = 0; // mem 5번째 요소 8비트에 0000_0000을 할당
[7:0] mem [1:5] = 1; // 문법 오류, mem의 2~6번째 요소를 동시에 할당 불가
reg   w_array [0:7][0:15]; //1비트 레지스터가 8x16 크기로 구성된 다차원 배열
  • address [3] = 0;

  • mem [5] =0;


이 글은 "따라하면서 배우는 디지털 시스템 설계 및 응용 with Verilog HDL"을 기반으로 작성했음을 알립니다.