• 2023. 8. 19.

    by. 도 현

    반응형
    Verilog HDL에서 사용하는 데이터형

    Verilog HDL에서 사용하는 데이터 형으로 네트, 레지스터, 파라미터가 있다.

    - 네트(nets) : 디바이스의 물리적인 연결

    - 레지스터(registers) : 추상적인 저장 장치

    - 파라미터(parameters) : 상수 선언

     

    벡터(vector)

    벡터는 부호 없는 정수로 취급된다. 벡터를 1비트 단위로 취급할 경우에는 [비트 번호]를 사용하여 취급한다. 비트 폭 지정은 한 개의 선언에 한번만 사용할 수 있다. 벡터의 크기보다 큰 값을 전달할 경우는 에러가 된다.

     

    wire

    wire 데이터 형은 회로에서 논리적인 기능이나 행동이 없이 단순히 선으로 연결하는 것을 나타내는 물리적인 선을 의미하며, 용도로는 게이트나 모듈의 출력을 wire를 이용하여 연결하기 위하여 사용된다. assign문에서 wire에 값을 할당하기 위해서 사용한다. 신호가 wire형으로 선언되는 3가지 규칙이 있다.

     

    - 규칙 1. assign 문에서 좌변 할당 신호는 wire로 선언된다. 좌변 할당 신호가 port 신호인 경우는 wire 선언을 생략가능하다. (port의 defalut형 : wire형)

    - 규칙 2. primitive gate의 출력신호는 wire로 선언된다. primitive gate 출력신호가 port 신호이거나 1비트 wire인 경우는 생략 가능하다.

    - 규칙 3. 정의된 모듈을 호출하는 경우, 출력신호는 wire로 선언된다. 해당신호가 port 신호이거나, 1비트 wire인 경우 wire선언 생략 가능하다.

     

    레지스터

    레지스터(registers) 데이터 형은 일종의 변수로 사용되며 네트와 달리, 그 신호에 새롱운 값이 할당될 때까지는 현재의 값을 그대로 유지하고 있으며, 순차 회로에서 주로 사용하며 표현 형식은 >레지스터형 [범위] 레지스터 이름; 이다.

    신호가 reg로 선언되는 3가지 규칙은 다음과 같다. 그러나 function의 경우 function_name, task의 경우 출력 변수인 경우 default로 reg이므로 reg 선언이 불필요하다.

     

    - 규칙 1. initial 문의 좌변 할당 신호인 경우 reg 선언

    - 규칙 2. always 문의 좌변 할당 신호인 경우 reg 선언

    - 규칙 3. function, task의 좌변 할당 신호인 reg 선언

     

    정수

    정수는 지역(local) 혹은 전역(global) 변수로 사용할 수 있으며, 부호 있는 숫자 값을 갖게 된다. 디폴트 크기는 32비트이다.

     

    상수

    상수는 "parameter" 예약어를 사용하여 정의한다. 모듈 내에 임의의 곳에 사용할 수 있지만, 상수를 사용하기 전에 먼저 "parameter"로 정의되어야 한다. 비트수를 정의하는데 사용할 수 없다.

     

    식별자(Identifier)

    사용자가 정의하는 변수, 모듈 이름, 포트 이름, 함수 이름, 인스턴스 이름으로 첫 번째 문자는 알파벳 혹은 under bar(_) 가능하고, 두 번째 문자부터는 영문자, 숫자, under bar, $ 사용가능하다. 중간에 공백을 사용할 수 없으며, 최대길이는 1024 문자까지 사용할 수 있다. 대문자와 소문자를 구분하며, 이스케이프가 있는 이름은 백슬래쉬(\)로 시작한다.

     

    순차 처리문

    보통 순차 처리문은 initial문과 always문을 사용하여 기술하며, initial문을 문장 블록을 처음부터 끝까지 한번만 순차적으로 실행하는 반면에, always문은 처음부터 끝까지 계속해서 순차적으로 실행된다. 순차 처리 블록의 문장들은 지정된 순서에 따라 처리된다. 이전 문장이 완전히 수행을 끝내면 그 다음 문장이 수행된다(내부-할당 타이밍 제어가 있는 논 블록킹 할당 제외). 만약 지연 또는 사건 제어가 지정되었으면, 블록 안에서 이전 목장이 완전히 수행을 끝내는 시뮬레이션 시간에 관계된다.

     

    병렬 처리문

    키워드 fork와 join으로 지정되는 병렬 처리 블록은 흥미로운 형태를 제공한다. 병렬 처리 블록의 문장들은 동시에 수행되며, 각 문장에 할당된 지연 기반 또는 사건 기반 제어에 의해서 문장의 순서가 조절된다. 만약 지연 기반 또는 사건 기반 제어가 지정되었다면, 그것은 블록 안으로 들어가는 시간과 관계있다.

     

    포트

    포트는 모듈의 외부 환경과 소통할 수 있는 인터페이스이다. 예를 들면, IC 칩의 input/output 핀은 IC 칩의 포트이다. 오직 이 포트를 통해서만 모듈과 외부환경이 상호 작용 할 수 있다. 외부 환경에서는 모듈의 내부를 볼 수 없다. 이것은 설계자에게 매우 강력한 유연성을 제공한다. 인터페이스가 변하지 않는 한 외부환경에 영향을 주지 않고 모듈의 내부를 수정할 수 있다. 또한 포트는 터미널로 인용될 수 있다.

     

    - 포트 나열 : 모듈 정의는 선택적인 포트 리스트를 포함한다. 만약 모듈이 외부 환경과 상호 작용하지 않는다면, 모듈은 포트를 가지지 않는다.

    - 포트 선언 : 포트 리스트의 모든 포트는 모듈 안에서 선언되어야 한다.

    Verilog HDL에서 모든 포트 선언은 wire로 선언된다. 그러므로 만약 모든 포트를 wire로 할 생각이면, 충분히 input, output 또는 inout으로 선언할 수 있다. input 또는 inout 포트는 일반적으로 wire로 선언된다. 그러나 만약 output 포트가 값을 유지해야 한다면, 반드시 reg로 선언되어야 한다. reg 변수는 값을 저장하는데, 입력 포트는 값을 저장하지 않고 단순히 그것에 연결된 외부 신호에 의해 변환 값을 그대로 전달만 하면 되기 때문에 input과 inout형의 포트는 ref로 선언될 수 없다.

    - 포트 연결 규칙 : 두 개의 유닛으로 된 하나의 가상 포트를 가정하였을 때, 한 개의 유닛은 모듈의 내부이고, 다른 한 개의 모듈은 외부이다. 이 두 유닛은 서로 연결되어 있다. 하나의 모듈이 다른 모듈에 파생될 때, 포트 연결을 관리하는 규칙이다. Verilog HDL의 시뮬레이터에서 만약 어떤 포트의 연결이 규칙에 어긋나면 에러가 발생한다.

    반응형