__________

Designing the Future with Circuits

반도체 회로설계 취준기

자습시간/Verilog

Verilog 자료형

semicon_circuitdesigner 2024. 7. 13. 14:55
728x90
논리값
  • 0: 논리 '0', 거짓(false)
  • 1: 논리 '1', 참(true)
  • x: unknown 상태(논리 '0'과 논리 '1'의 충돌이 발생하여 값을 확정할 수 없는 경우)
  • z: 구동자가 없는 High-Impedence 상태

 

net 자료형
  • net 자료형: 논리 게이트나 모듈 등 하드웨어 요소 사이의 물리적 연결을 나타내는 자료형
  • net는 값을 저장하지 않으며, 연속 할당문 등의 구동자에 의해 net의 값을 연속적으로 유지한다.
  • net에 구동자가 없으면 상태는 z가 된다.
  • 주로 사용되는 net 자료형으로는 wire 자료형이 있다. wire 자료형은 단순 연결을 위해 사용되고, 논리적 동작 및 기능을 갖지 않는다. 자료형이 선언되지 않은 경우, net 자료형의 기본값으로 1비트의 wire가 사용된다.
  • 자료형 선언 방법:
    net_type [signed] [range] [#(delay)] net_name [array] {, net_name [array]};
    net_type [signed] [range] [#(delay)] net_name = 연속 할당문;
    • net_type: wire, tri, wand, wor, ...등 자료형의 종류를 설정
    • [range]는 비트 범위를, [array]는 배열 범위를 나타낸다.
    • net 자료형 선언 시 값을 할당할 수 있으며 이를 net 선언 할당문이라 한다.
  • 자료형 선언 예시
    wire w1, w2; //w1과 w2가 1비트의 wire로 선언되었다. wire는 verilog의 기본 자료형으로 선언을 생략할 수 있다.
    
    wire [7:0] bus; //bus가 8비트의 wire로 선언되었다.
    wire enable = 1'b0; //enable은 초기 값 0을 갖는 1비트의 wire로 선언되었다.
variable 자료형
  • variable 자료형: reg, integer, real, time 등의 자료형
  • variable 자료형의 변수는 절차형 할당문 실행에 의해 값이 바뀌며, 할당에서부터 다음 할당까지 값을 저장한다.
  • reg, time, integer 자료형의 기본 초기값은 x이며, real, realtime 자료형의 초기 값은 0.0이다.
  • net, parameter, variable 선언에 의해 선언된 이름을 다시 선언하는 것은 불가능하다.
  • 자료형 선언 방법:
    variable_type [signed] [range] variable_name [array], {, variable_name [array]};
    variable_type [signed] [range] variable_name = initial_value;
  • 주로 사용되는 variable 자료형으로는 reg 자료형이 있다. reg 자료형의 특징은 다음과 같다.
    • always나 initial 블록 내부의 절차형 할당문에 의해 값을 받는다.
    • reg 변수는 할당 사이의 값을 유지하며, 하드웨어를 모델링하기 위해 사용된다.
    • 플립플롭, 래치 등의 저장소자를 모델링하기 위해 사용될 수 있다.
    • reg 자료형 선언의 예시
reg a; //a는 1비트의 reg 자료형으로 선언되었다.
reg [3:0] b; //b는 4비트의 reg 자료형으로 선언되었다.
reg signed [3:0] signed_reg; //signed_reg는 4비트의 signed reg 자료형으로 선언되었으며, -8~7의 범위의 값을 갖는다.

reg [-1:4] c; //c는 6비트의 reg 자료형으로 선언되었다.
reg [4:0] x, y, z; //x, y, z는 5비트의 reg 자료형으로 선언되었다.

 

 

벡터와 배열

 

1. 벡터

  • net 또는 reg 자료형 선언에서 변수이름 앞에 범위지정 [msb:lsb]를 추가하여 벡터를 선언할 수 있다.
  • 벡터 선언 방법:
    data_type [msg:lsb] identifier;
    • msb(most significant bit)는 벡터의 제일 왼쪽 비트를, lsb(least significant bit)는 벡터의 제일 오른쪽 비트를 나타낸다.
    • 벡터로 선언된 변수는 단일 할당문으로 값을 받을 수 있다.
  • 벡터 선언 예시
    reg [7:0] rega //rega는 8비트 reg 자료형의 벡터이다.
    wire [15:0] d_out //d_out는 16비트 wire 자료형의 벡터이다.


2. 배열

  • 배열은 특정 자료형의 원소들을 다차원 변수로 묶기 위해 사용된다.
  • 배열 선언은 net 또는 reg 자료형 선언에서 변수 이름 뒤에 범위 지정을 추가하여 선언한다.
  • 배열 선언 방법:
    data_type identifier [Uaddr:Laddr];
    data_type idntifier [Uaddr:Laddr] [Uaddr2:Laddr2];
    data_type [msb:lsb] identifier [Uaddr:Laddr];
    data_type [msb:lsb] identifier [Uaddr:Laddr] [Uaddr2:Laddr2];
    • 2차원 배열에서 [Uaddr:Laddr]은 행(row), [Uaddr2:Laddr2]는 열(column)을 나타낸다.
  • 배열 선언 예시
    reg [7:0] mem_A [0:255]; //reg mem_A는 8비트 레지스터 256개로 구성되는 메모리에 대한 선언
    reg array_B [7:0][0:255]; //reg array_B는 1비트 레지스터가 8x256 크기로 구성된 2차원 배열의 선언
    wire w_array [7:0][5:0]; //wire w_array는 8x6 크기의 1비트 wire에 대한 2차원 배열의 선언
    integer int_A [1:64]; //정수형 값 64개로 구성되는 1차원 배열의 선언

 

parameter

 

  • parameter는 variable도, net도 아닌 상수 값이다.
  • 범위가 지정된 경우를 제외하고는 상수 값에 적합한 크기의 비트 폭을 default로 갖는다.
  • parameter 선언 방식
    localparam [signed] [range] parameter_name = value;
    localparam constant_type parameter_name = value;
    parameter [signed] [range] parameter_name = value;
    parameter constant_type parameter_name = value;
    • constant_type: integer, time, real, realtime 중 하나이다.
    • 하나의 parameter 문으로 다수의 parameter를 콤마로 분리하여 선언할 수 있다.
    • localparam은 defparam문에 의해 직접 변경될 수 없다.
  • parameter 선언 예시
    parameter msb = 7; //msb를 상수값 7로 선언한다.
    parameter e = 25, f = 9; //두 상수 e와 f를 선언한다.

 

728x90
반응형