컴실2 02

TonyHan·2020년 9월 15일
0

20) Verilog,HDL

목록 보기
1/4

Verilog 기초

Verilog 는 HDL 중 하나

회로도 방식 : AND/OR/NOT 등등(논리 회로를 설계 해야함
Verilog 방식 : 코드임

C언어와 달리 블록의 시작과 끝을 중괄호 기호로 사용하지 않음 대신에 Begin과 end로 구분함

머리 - 선언 - 몸체로 나뉘어짐

머리 : module로 시작해서 세미콜론으로 끝나며 중복이 불가능함
선언 : c언어를 짤때의 변수 선언 부
몸체 : 회로의 기능, 동작, 구조 등을 표현

Verilog 데이터 타입

INPUT/OUTPUT

Register : 추상적인 저장 장치

  • reg : 절차형 할당문
  • integer
  • time, realtime
  • real

Net : 디바이스의 물리적인 연결

  • wire : 선
  • tri : 3상태(tri-state) net에 사용된다.

상수 선언

  • 하드웨어서는 몇 비트를 사용할지를 정해주어야 함

    사이즈를 정하지 않은 값

  • 214; || 'd214 [ 정수 214 ]

  • 'h32; [ 16진수 34 ]

  • 'o324; [ 8진수 324 ]

  • 'b111[ 2진수 111 ]

    사이즈를 정한 값

  • 4'b111; [ 4bit의 2진수 1111 ]

  • 4'hf; [ 4bit의 16진수 f(=4'b1111)]

    부호가 있는 수의 처리

    -8'd6 : 8비트의 -6

연산자

기본연산자

shift 연산자

조건 연산자

conditional_expression = expression1 ? expression2 : expression3

결합 및 반복 연산자

  • Concatenation operators : {}
    // A = 1'b1, B=2'b00, C=2'b10
    Y={B,C} // Y=4'0010
    X = {A,B,3'b110} // X = 6'b100110
    Z = {A,B[0],C[1]} // Z=3'b101

    참고로 배열처럼 사용할 수 있지만 그 순서는 원래 사용하던 배열과는 역순이다.

  • Replication Operators : {{ }}
    // A = 1'b1, B=2'b01, C=2'b00
    Y={4{A}} // Y=4'b1111
    X={4{A},2{B}} // X=8'b11110101
    Z={4{A},{2{B},C}} // Z=10'b1111010100

Timescale

  • 시간단위를 보여주는 함수

  • 선언
    timescale <시간단위>/<정밀도>
    <시간단위> : 1ps, 1ns, 1ms ...
    <정밀도> : 소수점의 허용범위

    ex> timescale 10ns/1ns
    1.55a = b // 1.55 * 10ns = 15.5ns
    정밀도가 1ns이기 때문에 소숫점의 값은 반올림 되어서 16ns 가 된다.

    timescale 1ns/1ps
    1.0055a = b // 1.0055 * 1ns = 1.0055
    정밀도가 1ps이기 때문에 소숫점 3번째 자리까지 사용하여야 한다.
    따라서 1.0056ns

Verilog 연속 할당문

  • assign 구문은 net 변수에 특정 논리 값을 지정하는데 사용한다.

  • deassign 구문은 variable에 대한 assign 문의 영향을 제거시킬 때 사용한다.

    ex)
    assign wire1 = reg1; //선을 단순히 연결하는 것

  • alsways
    always문은 시뮬레이션이 실행되는 동안 반복적으로 실행되며, 따라서 타이밍 제어와 연관된 표현에 유용하게 사용.

  • initial
    initial 구문은 시뮬레이션이 실행되는 동안 한번만 실행 된다.

  • Blocking statement
    ** Line by Line으로 순차적으로 계산과 동시에 저장이 이루어짐

  • Non blocking statement
    ** 모든 게산을 수행한 후 한꺼번에 저장 작업이 수행

    Non blocking 과 blocking은 동일한 코드를 가지고 있음에도 결과는 크게 다르다.

profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)

0개의 댓글