2024/01/10

ZynqでOCMを使ってみる

XILINX   

Ruslan SikunovによるPixabayからの画像

結論

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

Prev:«

Next: »