You are on page 1of 17

Verilog HDL 기초실습

목차
INDEX

1. Verilog 기본 문법

2. Test bench
1 단계 2 단계 3 단계 4 단계 5 단계
STEP1 STEP2 STEP3 STEP4 STEP5
1. Verilog 기본 문법
(1) module 기본 구조

1 단계 2 단계 3 단계 4 단계 5 단계
STEP1 STEP2 STEP3 STEP4 STEP5
1. Verilog 기본 문법
(2) module - port

⦁모듈과 모듈 사이에 데이터를 주고 받을 수 있게 해줌


⦁Mode : input / output / inout

- 위의 경우 {M[3], M[2], M[1], M[0]}, {Q[3], Q[2], Q[1], Q[0]} 의 input 과


{P[7], ........ , P[0]} 의 8bit output 으로 구성됨
1. Verilog 기본 문법
(3) module - 모듈선언부

⦁wire
- 컴퍼넌트 간의 구조적 연결
1. Verilog 기본 문법
(3) module - 모듈선언부

⦁reg
- 데이터를 저장하는 데 사용되는 변수
- 주로 behavioral-level 의 modeling 에서 사용된다 .

- always 문에서 left-value 는 항상 reg 로 선언되어야 한다 .

※ assign 문에서는 left-value 는 wire 로 선언되어야 한다 .


1. Verilog 기본 문법
(4) module - body(Modeling 방법 )

⦁Data-flow
- 출력 신호를 assign 문을 사용하여
boolean equation 으로 작성

⦁Bitwise Operator : 각 벡터상의 분할된 비트끼리 연산을 수행한다 .


ex) a = 4'b1100 , b = 4'b1010 일 때 ,
~a = 4'b0011
a&b = 4'b1000
a|b = 4'b1110

⦁Logical Operator : 1 비트의 값 (true/false) 를 반환한다 .


ex) a = 1’b1(True), b = 1’b0(False) 일 때 ,
!a = !(true) = false = 1'b0
a&&b = (true AND false) = 1’b0
a||b = (true OR false) = 1’b1
1. Verilog 기본 문법
(4) module - body(Modeling 방법 )

⦁Gate-level

- 미리 정의되어 있는 logic gate 들을 활용

- 사용되는 신호들은 wire, input, output 으로 정의하여 사용


1. Verilog 기본 문법
(4) module - body(Modeling 방법 )

⦁Behavior-level

- 다양한 조건 , 반복적인 기술을 활용하여 절차 순으로 기술

- Always 문 /Initial 문이 사용된다 .

※ always : 특정 기능 동작을 무한히 반복동작 시키는 역할

※ initial : 특정 동작을 시뮬레이션 시작시에 한번만


동작시키는 역할
2. Test bench
(1) 목적

⦁Simulation 및 동작검증을 위해
modeling 한 시스템에 신호를
구동시키고 출력을 monitoring 하는
과정이 필요

⦁Test bench 는 simulation 만을 목적으로


기술하며 설계를 목표로 하는 hardware
부분에 포함되지 않는다 .
2. Test bench
(2) Submodulation

⦁Testbench( 상위모듈에서 ) multiplexer( 하위모듈 ) 을 모듈의 이름과 선언해주고 저장하면 ,

자동으로 Xilinx 상에서 multiplexer 모듈은 Testbench 모듈의 submodule 이 된다 .


2. Test bench
(3) Timing Control

- 500ns ( 시간단위 * 5) 마다 값이 바뀌는 것을


확인 할 수 있다 .
- initial 은 처음 한번만 실행된 것을 확인 할 수 있다 .
- always 는 주기적으로 실행이 반복되는 것을 확인
할 수 있다 .
2. Test bench
(4) Syntax

하위 모듈 종류

하위 모듈 이름 하위 모듈 변수 변수에 해당하는 입력 값
2. Test bench
(4) Syntax

코드 시뮬레이션 결과

- 하위 모듈 변수의 입력 순서가 바뀌어도 변수에 대한


입력 값이 같으면 같은 결과가 나온다 .
2. Test bench
(4) Syntax

코드 시뮬레이션 결과

- 하위 모듈 변수 생략가능

- 단 , 처음 하위 모듈을 선언할 때 입력했던 변수의 순서와


변수의 입력 값의 순서가 같아야 함
2. Test bench
(4) Syntax

- IN4, IN3 가 모두 실행된 후


always 가 다시 실행
- 즉 , 5+10 = 15ns 마다 always 실행

- IN4, IN3 가 따로따로 실행


- 5ns 마다 IN4 반전
- 10ns 마다 IN3 반전
2. Test bench
(5) Practice

앞의 multiplexer 코드를 응용하여

초기값을
IN1 = 0, IN2 = 0, IN3 = 1
In4 = 1, IN5 = 1, IN6 = 0

5 초 후에 IN1 = 1,
5 초 후에 IN4 = 0,
10 초 후에 IN1 = 0,
10 초 후에 IN4 = 1
으로 설정한후

5 초마다 IN3 이 반전 ,
10 초마다 IN5 이 반전 ,
15 초마다 IN6 이 반전
하도록 Test bench 를 구상하기

You might also like