본문 바로가기

2-2/디지털 설계 및 실험

[디지털 설계 및 실험] Verilog 기본 vol.2 - Data types

저번 포스팅에서는 베릴로그의 구성 요소에 대해서 간략히 알아보았다.

이번 포스팅에서는 베릴로그 기본 데이타 타입에 대해서 알아 보도록 하겠다.

 

 

 

💻 Identifiers and Keywords

Keywords는 구조를 정의하기 위한 특수한 식별자다.

Identifiers는 객체에게 주어진 이름이라고 보면 된다.

 

reg value; // reg is keyword; value is an identifier
input clk; // input is keyword, clk is an identifier

reg, input 은 keyword 이고, value,clk는 identifier이다.

c언어와 구조가 똑같다.

 

 

💻 Nets

Nets는 하드웨어 구성요소 간의 물리적인 연결을 표현해준다.

주로, 키워드 wire로 선언된다.

 

wire a;
wire d = 1'b0;

 

 

💻 Registers

레지스터는 데이터 저장요소를 표현한다. 그리고 값을 가지고 있다.

레지스터들은 키워드 reg로 선언된다.

Verilog 안의 용어인 Register와 하드웨어 Register(FFs)들을 헷갈릴 수 있으니 유의해야 한다.

reg reset; // declare a variable reset that can hold its value
initial // this construct will be discussed later
begin
	reset = 1'bl; //initialize reset to 1 to reset the digital circuit
    #100 reset = 1'b0; // after 100 time units reset is deasserted.
end

 

 

 

💻 Vectors

Vector란 n비트 폭을 가진 하나의 원소를 말한다.

Nets 나 reg 데이타 타입들이 벡터로 선언될 수 있다.

Vectors는 [ high# : low# ] 나 [ low# : high# ]와 같이 선언될 수 있다.

여기서 high#는 높은 수, low#는 낮은 수를 의미한다.

 

항상 왼쪽에 있는 것이 MSB (최상위 비트) 를 나타낸다.

 

wire [31:0] wire_test; // 32비트 wire_test 선언
wire [7:0] wire_t1, wire_t2, wire_t3; // 3개의 wire_t1~3을 각각 8비트로 선언
reg [0:15] reg_test; // 16비트 폭을 가진 벡터 레지스터

 

 

 

💻 Arrays

배열은 reg,integer, time, real 등 데이타 타입을 가지는 여러 원소들을 모아 둔것이다.

 

<데이타 타입> <벡터 데이터 비트 폭> <배열 이름>으로 선언한다.

다차원 배열은 c에서는 됬겠지만, 여기선 안된다.

 

integer count[0:7]; // 8칸짜리 정수 배열
reg bool[31;0]; // 32칸짜리 1bit 레지스터 배열
time chk_point[1:100]; // 100칸짜리 time 배열
reg [4:0] port_id [0:7]; // 8칸짜리 배열인데 각각은 5bit다.

 

 

💻 Parameter

모듈 내에서 상수(constant)를 정의하는 키워드이다. c언어에서 #define과 비슷한 표현이다.

변수로는 사용이 안되며, 파라미터의 값들은 컴파일 할때 자동적으로 매칭시켜준다.

가독성이 높아지며 값 편집이 용이해진다는 장점이 있다.

 

parameter rebas = 7; // rebas를 7의 값을 가진 상수로 정의
parameter index_number = 10; // index_number를 10의 값을 가진 상수로 정의
reg[index_number:0] arr; // == reg[10:0] arr;