BRAM用來傳輸命令很方便,不管是在linux系統下還是裸跑。
第一步:在PL端添加IP後,一般默認設置。
第二步:在addr中設置大小,這裏設置64k
這裏設置完後,再打開IP會發現大小並沒有改變,這是因爲沒有綜合。
第三步:添加io,把BRAM的輸出設置爲IO,並雙擊,設置爲READ WRITE.
第四步:綜合
綜合我們的IP,結束後,再打開,會發現深度變化了。
第五步:SDK設計
不管是裸跑中還是系統中讀寫BRAM都可以用下面函數:
Xil_Out32(((BaseAddr)+(u32)RegOffset),(u32)(Data))
Xil_In32((BaseAddr)+(u32)RegOffset)
需要注意的是這裏的地址大小爲8bit,所以當數據單位爲32bit時候需要將地址乘以4.
地址映射如下:
fd = open("/dev/mem", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd < 0)
{
printf("err open \r\n");
return ;
}
baseaddr = (int *)mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, DEBUG_REG_ADDR);
其中 MAP_SIZE爲大小,DEBUG_REG_ADDR爲PL中申請的物理地址。