ASIC SoC2010. 12. 23. 10:42
Module hierarchy and file organization

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 내에서 사용되는 메모리 블럭등에 대한 정의를 합니다.

Posted by GUNDAM_IM