该笔记主要记录HPS端如何通过AXI Bridge控制FPGA端口的GPIO,主要是如何操作FPGA侧的Led
1、AXI Bridge
AXIB主要包括H2FB、F2HB、LWH2FB(Light Weight Bridge)
H2FB 的AXI地址位宽是30Bit,数据位宽32、64、128可配置,ID位宽为12Bit
F2HB 的AXI地址位宽是32Bit ,数据位宽32、64、128可配置,ID为8Bit
LWH2FB的地址位宽是21Bit,数据位宽是32bit,ID为8Bit,适用于做控制总线
2、HPS控制FPGA端的GPIO
(1) Hardware:在qsys下把GPIO Core连接到LWBridge Master下
1)下载sof文件
2)执行generate_hps_qsys_header.sh文件生成有关硬件信息的供软件使用的头文件,其实就是一个shell命令写在了文件里面,便于执行
sopc-create-header-files \
"./soc_system.sopcinfo" \
--single hps_0.h \
--module hps_0
(2) Software:
1)映射GPIO组件的物理地址到应用程序可以操作的虚拟地址
前面还有两步分别是打开内存设备和虚拟地址映射mmap得到 virtual_addr
LWAXI总线相对于其虚拟基地址的偏移量
(ALT_LWFPGASLVS_OFST & (unsigned long) HW_REGS_MASK)
FPGA外设相对于LWAXi的地址为PIO_LED_BASE
最终的虚拟地址入口地址为:
h2p_lw_led_addr = virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + PIO_LED_BASE) & (unsigned long)(HW_REGS_MASK)); 应用程序通过得到的虚拟地址入口控制FPGA端的Led
3、最后通过操作h2p_lw_led_addr就可以对FPGA端的GPIO操作