【紫光同创logos2 FPGA PCIe软件栈设计】

本文介绍了基于同创logos2系列FPGA自研的PCIe软件栈,覆盖驱动层、API层和APP层的设计。驱动层负责设备初始化、操作和卸载;API层提供配置空间访问、bar读写和DMA操作接口;APP层包含接口测试和性能测试。该软件栈已适配多种操作系统,并在国产服务器平台上展现出良好的读写性能。
摘要由CSDN通过智能技术生成


当前国际形势,美丽国对我们的制裁进一步加剧,高端FPGA“一票难求”,国产FPGA起步较晚,且生态落后,同创logos2芯片虽然硬件资源可达100K,但相关的软件栈及IP发展相对滞后,如高速PCIe接口仅有硬核IP。
基于此背景,自研基于同创logos2的标准pcie开发板,实现gen2*4 pcie接口并适配到国产服务器(海光、龙芯、飞腾);开发app对板卡的基本性能进行测试。

基于同创logos2系列FPGA自研PCIe软件栈

自研PCIe软件栈已适配RHEL,centos,ubuntu(包括中标麒麟、统信UOS、银河麒麟)等,采用标准linux设备模型及分层设计的思想,自下而上可分为驱动层,api层,app层。

  • 驱动层
    驱动层实现标准pcie字符设备注册、提供用户层交互接口;
  • API层
    api层为用户提供友好的调度接口;
  • APP层
    app层实现几个应用demo,进行板卡功能、性能测试。

整体框架如下图所示
logos2 FPGA软件栈架构图

驱动层

驱动层主要实现以下功能:设备初始化,设备operation,设备卸载。设备初始化包括pcie驱动注册,msi中断注册等等;设备operation包括bar读写、dma操作;设备卸载包括pcie设备注销、内核资源释放等。

设备初始化

列举设备初始化过程中使用到的几个接口:

  • pci_register_driver:注册pci设备驱动
  • alloc_chrdev_region:动态申请设备号
  • cdev_init(&device.cdev,&device_fops):初始化字符设备
  • cdev_add:添加字符设备
  • class_create:创建设备类
  • device_create:生成设备节点

pcie驱动注册probe中主要完成以下几点工作:

  • pci_enable_device:使能pcie设备
  • pci_set_master:pcie获取设备总线
  • pci_resource_start系列接口:bar地址映射系列接口
  • pci_alloc_consistent:申请dma一致性内存
  • pci_enable_msi:使能msi
  • request_irq:msi中断注册

Device operation

提供丰富的bar、dma操作接口

Bar相关操作接口:

  • char_open:打开设备操作
  • char_release:释放设备操作
  • char_read:bar读取操作
  • char_write:bar写入操作
  • char_llseek:移位操作
  • char_mmap:重映射操作
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值