FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

ZedBoard用coremarkソースを公開します

ZedBoard用Coremarkのソースで、ZedBoard用に書き換えたファイルのみ公開す。 具体的には、移植用のディレクトリ core_portme.c と core_portme.h だ。これらは、coremark_v1.0/linux をコピーして、coremark_v1.0/zynq として編集している。

core_portme.c for ZedBoard

具体的に変更したのは、本当にタイマーの部分だけだ。タイマー読み込み、書き込み、そして時間計算のための定数を変更しているだけなので、 オリジナルのソースと比較しても簡単に意味が分かると思う。ついでだが、オリジナルとの差分は以下だ。

  • core_portme.c
15,36d14
< #define TIMER_DEVICE_ID               XPAR_XSCUTIMER_0_DEVICE_ID
< #define TIMER_LOAD_VALUE      0xFFFFFFE
< #define START_COUNTER         0
< #define STOP_COUNTER          1
<
< #define NSECS_PER_SEC                 667000000/2
< #define CORETIMETYPE          ee_u32
< #define TIMER_RES_DIVIDER     40
< #define EE_TICKS_PER_SEC      (NSECS_PER_SEC / TIMER_RES_DIVIDER)
<
< typedef ee_u32 CORE_TICKS;
<
< #include "xil_printf.h"
< #include "xscutimer.h"
< #include "xscugic.h"
< #include "xparameters.h"
<
< ee_u32 GetTimerValue(ee_u32 TimerIntrId, ee_u16 Mode);
< static XScuTimer Timer;//timer
<
<
<
60d37
<
113,114c90
<       // #define CORETIMETYPE struct timespec
<       #define CORETIMETYPE ee_u32
---
>       #define CORETIMETYPE struct timespec
123,126c99
< //    #define CORETIMETYPE ee_u32
< //    #define GETMYTIME(_t) clock_gettime(CLOCK_REALTIME,_t)
<       #define SAMPLE_TIME_IMPLEMENTATION 1
< //    #define SAMPLE_TIME_IMPLEMENTATION 0
---
>       #define SAMPLE_TIME_IMPLEMENTATION 0
141,143c114
< //    GETMYTIME(&start_time_val );
<       start_time_val = GetTimerValue (TIMER_DEVICE_ID, START_COUNTER);
<
---
>       GETMYTIME(&start_time_val );
164,165c135
<       // GETMYTIME(&stop_time_val );
<       stop_time_val = GetTimerValue (TIMER_DEVICE_ID, STOP_COUNTER);
---
>       GETMYTIME(&stop_time_val );
177,178c147
<       // CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
<       CORE_TICKS elapsed = start_time_val - stop_time_val;
---
>       CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
359,394d327
<
<
< ee_u32 GetTimerValue(ee_u32 TimerIntrId,ee_u16 Mode)
<
< {
<
<     int                 Status;
<     XScuTimer_Config    *ConfigPtr;
<     volatile ee_u32     CntValue  = 0;
<     XScuTimer           *TimerInstancePtr = &Timer;
<
<     if (Mode == 0) {
<       // Initialize the Private Timer so that it is ready to use
<       ConfigPtr = XScuTimer_LookupConfig(TimerIntrId);
<       Status = XScuTimer_CfgInitialize (TimerInstancePtr, ConfigPtr,
<                 ConfigPtr->BaseAddr);
<       if (Status != XST_SUCCESS) {
<         print ("XST_FAILURE\n");
<           return XST_FAILURE;
<       }
<
<       // Load the timer prescaler register.
<       XScuTimer_SetPrescaler (TimerInstancePtr, TIMER_RES_DIVIDER);
<       // Load the timer counter register.
<       XScuTimer_LoadTimer (TimerInstancePtr, TIMER_LOAD_VALUE);
<       // Start the timer counter and read start value
<       XScuTimer_Start(TimerInstancePtr);
<       CntValue = XScuTimer_GetCounterValue (TimerInstancePtr);
<     } else {
<        //  Read stop value and stop the timer counter
<        CntValue = XScuTimer_GetCounterValue (TimerInstancePtr);
<        XScuTimer_Stop(TimerInstancePtr);
<     }
<
<     return CntValue;
< }
  • core_portme.h
10,12d9
<
< #include <stdio.h>
<
29c26
< #define HAS_TIME_H 0
---
> #define HAS_TIME_H 1
61c58
< // #error "Please define type of CORE_TICKS and implement start_time, end_time get_time and time_in_secs functions!"
---
> #error "Please define type of CORE_TICKS and implement start_time, end_time get_time and time_in_secs functions!"
96,97d92
< typedef ee_u32 CORE_TICKS;
<
111,115c106,108
< #define SEED_METHOD SEED_VOLATILE
<
< // #ifndef SEED_METHOD
< // #define SEED_METHOD SEED_ARG
< // #endif
---
> #ifndef SEED_METHOD
> #define SEED_METHOD SEED_ARG
> #endif
125,128c118,120
< #define MEM_METHOD MEM_STACK
< // #ifndef MEM_METHOD
< // #define MEM_METHOD MEM_MALLOC
< // #endif
---
> #ifndef MEM_METHOD
> #define MEM_METHOD MEM_MALLOC
> #endif
201,203c193,195
< // #ifndef MAIN_HAS_NOARGC
< // #define MAIN_HAS_NOARGC 0
< // #endif
---
> #ifndef MAIN_HAS_NOARGC
> #define MAIN_HAS_NOARGC 0
> #endif