2009年8月17日 星期一

ESL BUS Module -ruru

======2009/08/17======

總合目前要做的幾件事情

1. ocp-ip bus module

ocp 官方的規格書,在閱讀過後,接著trace Coware的simple ocp bus. coware所提供的並非完全符合標準規格的bus,其中有滿多的部份沒有實行.

於是在ocp官網發現有發佈完整的ocp systemC module 目前已經看了一些部份

2. ARMA bus

以上的兩樣都是以systemC TLM2.0 去建立module,所以首先的工作是熟悉TLM2.0的相關寫法,早先所使用的interface都是屬於TLM1.0的部份,TLM2.0則改用socket去實現,因此在這段時間內TLM的部份大致如下:

Tlm 2.0 主要統一process之間的溝通 如何去實做 function call

1.首先include tlm.h 官方有提供

2. simple_initiator_socket 只是簡單範例的socket 實際在使用則會使用
tlm_initiator_socket and tlm_target_socket

The simple initiator and target sockets are so-called because they are simple to use. They
are utility classes derived from two underlying socket types tlm_initiator_socket and
tlm_target_socket.

3. 簡易的兩個模組 是tlm傳輸最簡單的想法 Initiators, Targets, and Sockets(interface 1.0)

4. 在兩模組的溝通上soket會建立好雙向的管道 傳輸卻只需一次的function call

5. 在傳輸的使用上 要先 setting 一些參數 如address bits 之類的

6. 在傳輸後 target 可以 response status

7. DMI (Direct Memory Interface) 利用socket的第二種傳輸 使用一個直接指向的pointer用以增
快模擬的速度 使用方法 則多了一些 fuction call

8. Debug Transport Interface 是socket的一種傳輸 和DMI最大不同就是主要用於debug

9. 也另外提供 non blocking transfer interface

10. Base protocol checker 可於兩個模組中間 去做確認傳輸的準確性

TLM2.0部份大致OK 目前已經著手在寫code的部份


======前提======

一顆SoC裡可能會有一顆到多顆CPUs, 還有周邊, 記憶體,...,等什麼的. 靠什麼來把資料在這中間搬來搬去呢? 太特殊的東西不談, 大概就是屬Bus以及NoC (Network on Chip). OpenESL比不上CoWare的有幾點, 但是最主要的就是我們缺乏一些IP的ESL Models. 其中又以Bus與CPU為最重要.

CPU方面, Aaa的32-bit RISC拿來做研究可以, 但是想必沒人真正會拿來用在產品上, 所以品皓的8051與DSP16(實際上是AD2191的clone)會是我們的主角, 至於32-bit RISC就要靠電機系陳中和老師的研究了.

Bus方面, Gary按照TLM2.0做了一版堪用的Bus, 不過這不太切合實際, 同樣也是拿來做研究而已. 我們需要的是標準的Bus models. 所以ruru的重點是:

1. OCP

2. AMBA2 or even AMBA3

這是短時間我們要弄出來的. 再加上一些週邊介面所常用的Model如I2C, 以及利用PC的resources來做simulation的呈現也是方便在simulation時可以watch結果的好工具.

ruru的工作的定義很簡單, spec都在標準裡, 請加油!