Module hierarchy and file organization
Distribution code organization
Original ORPSoC Source code organization
Modifications to the ORPSoC source code
Distribution code organization
RTL 코드의 계층 구조는 아래와 같습니다.
기본 계층 구조는 ORPSOC에서 시작합니다. 테스트를 위한 패스는 ORPSOC_FPGA_TOP을 기준으로 시작합니다.
각각의 IP를 연결하는 BUS Connection은 tcop_top이고 나머지는 이름을 기준으로 유추하여 볼 수 있습니다.
testbench의 코드를 보면 탑레벨 module의 이름은 orpsoc 입니다.
그리고 앞서 설명한 l.nop명령어들의 동작을 반영하는 것이 or1200_monitor 모듈입니다.
Verilator model에서는 이러한 기능은 SystemC 모델로 제공됩니다.
이 강의에서 사용되는 모든 파일은 tar 파일로 제공됩니다만,
필요하면 opencore.org 에서 새로 받아서 사용할 수 있습니다. 이 경우에는 필요한 몇개 파일을 수정해야
합니다.
tar 파일은 아래 링크에서 다운 받을 수 있습니다.
http://www.embecosm.com/download/esp5.html
Distribution code organization
tar 파일을 풀면 몇개의 폴더가 보이게 됩니다.
그 구조는 아래와 같습니다.
Top level directory
- Makefile
main 프로젝트 파일입니다. verilator를 이용해서 프로젝트를 빌드 할 수 있도록 해 줍니다.
- Testbench file
orpsocmain.cpp , orpsocmain.h
verilator를 위한 테스트 벤치 파일입니다.
자세한 설명은 다음에 하기로 하고
여기서는 그냥 이런 파일들이 Top Folder에 있다는 것만 알고 있으면됩니다.
orp_soc
현재 ORPSoC 버전이 들어가 있습니다.
이것은 www.opencores.org에서 구할 수 있는것과 같습니다.
local
orp_soc의 shadow 폴더입니다. local로 수정할 파일을 이곳에 두게 됩니다.
그리고 PATH변수에 의해서 Search 순서를 지정하여 두었기 때문에 이곳에서 바꾸게 됩니다.
sim
icarus 시뮬레이터용 스크립트가 들어 있는 폴더입니다.
*.scr 파일이 이 폴더 입니다.
sysc_modules
systemc로 작성된 모듈들이 있으며, 이 모듈들은 테스트 벤치를 구성하는 일부 입니다.
or1200monitorSC와 ResetSC가 들어 있습니다.
verilator-model
이 폴더에는 verilator에서 사용하는 커맨드 파일과
verilator model 내부의 시그널을 볼 수 있는 OrpsocAccess 가 있습니다.
Original ORPSoC Source code organization
원래의 orpsoc의 소스 트리 구조는 orp_soc 폴더에서 찾아 볼 수 있습니다.
bench
테스트 벤치 코드입니다.
서브 디렉토리로 verilog를 가지고 있고 (사실 이것밖에 없습니다.) 이 폴더 내에 ORPSoC를 위한
Verilog Code를 가지고 있습니다.
일단 두개의 헤더 파일을 찾아 볼 수 있습니다.
bench_defines.v
`define 들이 들어 있습니다.
timescale.v
`timescale에 대한 정의가 있습니다.
doc
당연히 문서가 모여 있습니다.
rtl
ORPSoC의 verilog code가 있습니다.
sw
타겟 소프트웨어 입니다.
이 코드들은 컴파일 되어서 내부의 Flash memory에 올려져서 운용됩니다.
utils 폴더에 있는 파일들을 먼저 빌드해야 합니다.
이 후에 support 파일을 빌드합니다.
나머진 필요할 때 순서에 상관 없이 빌드하면 됩니다.
Modifications to the ORPSoC source code
local 폴더에는 앞서 설명하대로
원래의 코드를 수정하지 않고 이쪽에서 수정할 수 있도록 해주는 파일을 모아두었습니다.
그리고 PATH 순서를 바꾸어서 이쪽 파일들이 먼저 선택되도록 하였습니다.
(1)
bench/verilog/bench_defines.v
. half clock을 50nS로 정의해서 전체 동작을 10MHz로 되도록 만들어 두었습니다.
원래는 아래와 같이 되어 있지만 local 폴더에서 수정되어 있습니다.
........
//
// OR1200 clock mode
//
`ifdef OR1200_CLMODE_1TO2
`define CLK2_HALFPERIOD 25
`else
`ifdef OR1200_CLMODE_1TO4
Unsuppported
`else
`define CLK2_HALFPERIOD 50
`endif
`endif
..........
local 폴더의 bench_defines.v 파일은 아래와 같습니다.
.....
//
// Clock half period for simulation (10MHz)
//
`define BENCH_CLK_HALFPERIOD 50
....
(2) bench/verilog/or1200_monitor.v
여러차례 설명한 l.nop xxxx 명령어로 내부 정보를 얻어내는 기능을 넣어둔 파일입니다.
내부에 코드를 보면 쉽게 알 수 있습니다.
(3) bench/verilog/orpsoc_bench.v
원래의 코드는 bench/verilog/xess_top.v 입니다.
이 파일은 xilinx용 top 파일입니다.
이 코드를 wrapping 하여서 ORPSOC용으로 테스트 벤치를 구성한 것이 이 파일 입니다.
(4) rtl/verilog/orpsoc_fpga_top.v
Top 레벨의 FPGA 모델입니다.
ORPSoC의 FPGA Top 파일이됩니다.
(5) rtl/verilog/orpsoc_fpga_defines.v
rtl/verilog/xsv_fpga_defines.v를 다시 정의한 것입니다.
주요한 내용은 주로
`define TARGET_VIRTEX 을 제거하여서 자이링스용 라이브러리를 사용하지 않도록 막아둔 것입니다.
(6) rtl/verilog/or1200_defines.v
현재 사용하는 형태로 적합하도록 프로세서의 내용을 다시 설정하였습니다.
주로 캐쉬나 MMU의 사용 여부를 설정하는데 사용합니다.
그리고 나눗셈기등의 사용 여부를 결정합니다.
(7)
rtl/verilog/ssvga/ssvga_fifo.v
rtl/verilog/ssvga/ssvga_top.v
rtl/verilog/ssvga/ssvga_dpram_4x8x16.v
rtl/verilog/ssvga/ssvga_dpram_4x16x16.v
ORPSoC 내에서 사용되는 메모리 블럭등에 대한 정의를 합니다.
'ASIC SoC' 카테고리의 다른 글
Verilator로 SoC 플랫폼 시뮬레이션 하기 (4) - High Performance SoC Modeling with Verilator (1) | 2011.02.09 |
---|---|
새로운 보드 하나 완성 :: SoC ProtoType Board (0) | 2011.01.22 |
Verilator로 SoC 플랫폼 시뮬레이션 하기 (2) - High Performance SoC Modeling with Verilator (0) | 2010.12.02 |
Verilator로 SoC 플랫폼 시뮬레이션 하기 - High Performance SoC Modeling with Verilator (1) | 2010.12.02 |
맥에서 Verilog Simulation 하기 (3) (0) | 2010.11.13 |