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
반응형
'자습시간 > Verilog' 카테고리의 다른 글
UART 설계(2) - UART TX 설계 (0) | 2024.07.26 |
---|---|
UART 설계(1) - Baud Rate Generator 설계 (0) | 2024.07.22 |
Verilog HDL 모델링 방법 개요 (0) | 2024.06.30 |
Verilog HDL의 어휘 토큰과 규칙 (1) | 2024.06.30 |