結論
ocmがDDRより3倍早い
目的
ZynqのOn Chip Memory OCMを使ってみる
仕様
Zynqのデータシートをみると、On−Chip Memoryとして256KBあることがわかる
https://docs.xilinx.com/v/u/en-US/ds891-zynq-ultrascale-plus-overview
やり方
VitisのGUIだと、Hello Worldのプログラムのlscript.ldを設定すれば、.bssにOCMを割当することができる。
変更前
変更後
これだけで、.bssの領域をomcに変更することができる。実際は、OCMのサイズは小さいので、このような使い方をすることはないですね。
プログラム
OCMとDDRで、処理時間を測定してみる
測定のプログラムだ。足し算を実行して、時間を測定する
#define NUM (16*1024)
u8 a[NUM];
u8 b[NUM];
u8 c[NUM];
void init_array(u8* array)
{
for (int i=0 ; i< NUM ;i++) {
array[i] = i;
}
}
void add_array(u8 *array_a, u8 *array_b)
{
for (int i = 0;i<NUM;i++) {
c[i] = array_a[i] + array_b[i];
}
}
int main(void)
{
init_array(a);
init_array(b);
//Counter initialize
u32 *ptr = (u32*)0xff11000c;
*ptr = 0x20;
ptr = (u32*)0xff110018;
u32 start_counter = *ptr;
xil_printf("100MHz counter value %d\r\n", start_counter );
for (int i=0;i<10000;i++) {
add_array(a,b);
}
u32 end_counter = *ptr;
xil_printf("100MHz counter value %d\r\n", end_counter );
xil_printf("time = %d msec\r\n", (end_counter - start_counter) / 100000 );
}
結果
結果は、DDRは、3.3secで、OCMは、1.2secで、OCMの方が3倍早かった
//DDRの場合
time = 3307 msec
//OCMの場合
time = 1248 msec