EE/HDL and SoC Design

[Principles][1]Tools and Development Environment

esmJK 2023. 4. 27. 20:42

 

Directory Structure

RTL 폴더는 모든 Verilog 코드가 저장되어 있는 곳을 뜻합니다.

  • DMAC_CFG : RTL 파일
  • filelist.f : Compile, debug, synthesis 위한 Verilog 코드의 집합

SIM 폴더는 시뮬레이션 관련 데이터를 저장하는 폴더입니다. 안에 있는 TB 폴더에 테스트벤치 코드가 저장되어 있습니다.

 

 

원격서버의 Verilog Compile Tool과 Verdi 활용

컴파일을 위한 리눅스 서버가 있으며 이를 활용해 개발을 진행합니다.  아래의 경우, SSH 연결로 진행하였습니다.

 

./run.sim

./run.waveform

./run.verdi


WSL Ubuntu 와 iverilog 활용

iverilog는 Verilog 컴파일용 오픈소스 툴. 다음 명령어로 설치를 진행합니다.

sudo apt-get install iverilog

 

다음 명령어로 설계한 모듈과 테스트벤치를 iverilog로 컴파일 가능합니다.

 

 

 

Simulation 수행 및 결과 확인

우리가 또 사용할 수 있는 것은 clock 및 설계한 IP의 디지털 신호 (waveform)를 확인할 수 있는 open source software 인 gtkwave 입니다.

sudo apt-get install gtkwave

아래와 같은 테스트벤치를 작성했다고 가정합니다. 설명에 필요없는 로직은 주석으로만 설명하고 생략합니다. Compile을 끝내고 .vcd 확장자인 dumpfile 이 생성되지 않아 당황할 수 있는데, 이는 iverilog로 컴파일이 끝나고 만들어진 ELF를 한 번 더 실행시켜야 합니다.

`timescale 1ns/1ps     //`timescale timeunit/timeresolution
module test;

// 1. variable declaration

// 2. dumpfile generation
// for 'test_adder.vcd' to be saved as a file, a.out ELF must be executed
initial 
begin
    $dumpfile("./test_adder.vcd");
    // dump level 0 : all variables contained in modules of the designated module  
    // dump level 1 : variables for the designated module
    // dump level 2 : variables for the designated module and for the ones in a lower hierarchy
    $dumpvars(0, test);
end

// 3. some logic

// 4. instantiation and port mapping 
endmodule

따라서, Linux 터미널에서 다시 컴파일 후 ELF를 실행시켜줍니다.

iverilog <module> <test>
./a.out 

a.out 을 실행시키면 vcd 파일이 나올텐데요. gtkwave 실행 

하아……

gtkwave 라는 프로그램은 새로운 graphical Linux application 윈도우를 만들어 팝업시키는데, 이것을 어플리케이션 입장에서 어떻게 실행시킬지 모른다고 합니다. 지금 WSL(Windows Subsystem for Linux) 환경에서 실행시키고 있으므로 여기에서 새로운 윈도우를 어떻게 생성시켜 보여줄지에 대한 설정이 필요합니다. 해결책은 display server를 사용하는 것이죠.

reference : https://www.ctrl.blog/entry/how-to-x-on-wsl.html

 

Xming X Server for Windows를 다운로드 후 설치 및 한 번 실행 및 종료.

 

https://sourceforge.net/projects/xming/

 

Xming 의 .exe 파일인 Xming.exe를 C 드라이브에서 찾아들어가 이것에 대한 바로가기를 접근하기 편한 디렉토리, 예를 들면 바탕화면에 만들어주었습니다. 이후 속성으로 들어가 다음과 같이 실행 플래그를 걸어준다. 이렇게 플래그를 걸어주고는 해당 바로가기로 프로그램을 실행해야 합니다.

"C:\\Program Files (x86)\\Xming\\Xming.exe" :0 -clipboard -multiwindow -ac -dpi 108

이후 관리자 권한으로 Powershell을 열어 다음 명령을 실행해 방화벽 규칙을 수정합니다.

Set-NetFirewallRule -DisplayName "Xming X Server" -Enabled True -Profile Any

WSL2 Linux Bash에서 다음 명령을 실행.

echo 'export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '"'"'{print $2}'"'"'):0' >> ~/.bashrc

// 위 라인으로 해결되지 않으면 다음 실행
export DISPLAY="$(grep nameserver /etc/resolv.conf | sed 's/nameserver //'):0"

테스트할 목적으로 그래픽 어플리케이션을 한 번 실행시켜봅니다

sudo apt install x11-apps -y
xclock

ㅎㅎㅎ


다시 gtkwave를 실행시킨다. 이전에 a.out 을 실행시켜 만들어낸 test_adder.vcd 로 진행합니다.

윈도우가 정상적으로 보여집니다.