설명은 생략한다. c언어에서부터 이미 많이들 쓰고 있는 명령어라서 굳이 설명을 할 필요는 없어보인다.
파일 등록을 통해서만 모듈을 쓸 수 있는게 아니란걸 알았으면 좋겠다는 생각에 포스팅하게 됐다.
이게 왜 베릴로그 코딩에서도 필요한가를 설명해보려 한다.
3가지 이유가 존재한다.
1. 터미널 환경을 위해
모델심, 비바도를 제외한 다른 툴은 학부 강의 때 잘 사용하지 않는다.
그러나 실제로 칩 설계를 할때는 터미널 환경에서 코딩을 하게 된다.
GUI? 그런거 없다. 있는 GUI라고는 입출력 파형을 보여주는 뷰어뿐이다.
그럼 디버깅은 어떻게 하는가라고 물어볼 수도 있는데, 에러로그만 보면 되니까 문제없다.
제대로 설계됐는지의 확인은 출력 파형으로 확인한다.
터미널 환경에서는 스크립트를 사용해 터미널에서 설계가 제대로 됐는지 확인한다.
출력 파형은 자동으로 생성되는게 아니라 dump 파일을 생성해야 하며, probe까지 설정해야 하는 경우도 있다.
테스트벤치나 모듈 파일의 경로를 모두 적어서 스크립트에 넣으면 시뮬레이션이 된다.
근데 시뮬레이션을 하면서 매번 다른 파일의 경로를 스크립트에 넣기에는 너무 귀찮아진다.
이를 해결하기 위해 include를 쓴다.
2. 모듈들의 hierarchy를 쉽게 보기 위해
작은 회로라면 파일 하나에 모든 모듈을 선언해도 문제는 없겠지만, 회로가 커지면 가독성이 떨어지게 된다.
목적별로 모듈들을 분류하기 위해 여러 파일을 만들게 된다.
파일이 많아지면 많아질수록 이게 어디에 속한 모듈을 코딩한건지 헷갈리게 된다.
이걸 편리하게 만들어주는게 include다.
3. 협업을 위해
혼자서 모든 회로를 코딩하는 것은 VLSI(Very Large Scale IC)에서 불가능하다.
여러명이 각자 맡은 바를 만들어줘야한다.
아까 터미널 환경에서 회로설계를 한다고 했는데, 이러면 각자 유저 디렉토리에서 시뮬레이션을 돌리게 된다.
동료들이 만든 코드를 어떻게 활용할까? 파일들을 모아서 메인 모듈에 여러개의 Verilog IP를 결합한다.
이를 편리하게 하기 위해 include를 쓸 수 있다.
이외에도 여러 기능을 편리하게 사용할 수 있기 때문에, include를 쓰게 된다.
어떻게 쓸까를 예시로 확인해보자.
`timescale 1ns/1ps
`include "./main_module.v"
module tb();
//--------생략-------------
`include "./sub_module.v"
module main_module(
input clk, rst,
// -----------생략----------
);
module sub_module(
input clk, rst,
//------생략--------
);
각각 tb.v, main_module.v, sub_module.v 코드다.
` 는 탭 키의 위쪽에 있는 ~와 같이 쓰는 키다.
`define, `ifdef 등의 특수한 명령어도 있긴 한데, 이건 다루지 않겠다.
./ 는 작성중인 파일과 같은 폴더 경로를 뜻한다.
../ 는 작성중인 파일이 있는 폴더의 상위 폴더 경로를 뜻한다.
이외에도 "~/" 같은 것도 있으나 이건 알아서 검색해보길 바란다.
리눅스 터미널 환경에서 주로 쓰이는 방식이다. 윈도우는 \(백슬래시)를 사용한다.
윈도우도 터미널 환경이 존재하기는 하니 한번 알아보는것도 좋은 방법이다. 해당 포스팅에서는 다루지 않는다.
테스트벤치는 main_module 파일을, main_module은 sub_module을 include하고 있다.
스크립트에서 tb 파일 경로만 넣고 시뮬레이션을 돌리게 되면, tb는 main_module을 자동으로 가져오고, main_module은 sub_module을 자동으로 가져오게 된다.
vi에서는 해당 파일 경로를 통해 해당 파일을 수정할 수도 있다.
또한 터미널 환경에서 다른 파일의 모듈을 사용하기 위해서는 include가 필요하다.
학부생들은 보통 툴의 프로젝트에 파일을 추가하는데, 터미널에서는 이걸 include가 담당한다.
23.03.15 추가
Modelsim의 경우 파일을 추가할때 include로 포함된 파일은 추가하지 않아도 알아서 library에 저장된다. 그래서 테스트벤치와 메인 모듈만 넣어도 include를 통해 다른 하위 모듈들을 추가할 수 있다.
몇몇 모듈만 프로젝트에 추가해도 다른 모든 파일을 include를 통해 work 폴더에 추가할 수 있다.
따라서 팀원 간의 프로젝트를 합치는 과정에서도 include를 활용하면 쉽게 다른 프로젝트 파일에 접근할 수 있다.
'Verilog HDL 설계' 카테고리의 다른 글
Discrete Cosine Transform 구현 (2) | 2022.06.30 |
---|---|
덧셈과 뺄셈, 그리고 sign extension (0) | 2022.06.02 |
파라미터를 이용한 모듈 선언 (0) | 2022.04.07 |
Simple Finite State Machine implementation (0) | 2021.04.29 |
테스트벤치 작성 예시 (0) | 2021.04.25 |