林盛鑫 王电令
(1.东莞理工学院 国际微电子学院,广东东莞 523808; 2.合肥真仁自动化科技有限公司,安徽合肥 230093)
《中国教育现代化2035》提出:提升一流人才培养与创新能力,加强创新人才特别是拔尖创新人才的培养,加大应用型、复合型、技术技能型人才培养比重。同时《加快推进教育现代化实施方案(2018-2022年)》提出:大力推进教育信息化。着力构建基于信息技术的新型教育教学模式,促进信息技术与教育教学深度融合,支持学校充分利用信息技术开展人才培养模式和教学方法改革,逐步实现信息化教与学应用师生全覆盖[1]。
高校为培养高素质应用型创新人才,不断增加实验室教学的重视程度,实验考核已成为提高学生实验实践能力、技术水平的重要考核环节。特别是电子与通信技术专业的一些重要专业基础课程,其实验考核环节涉及实验电路、信号发生器、示波器、万用表等实验仪器设备,实验设备多,价格昂贵,难以推广,同时实验考核过程中无法确保学生的实验步骤是否正确,实验数据结果容易被篡改,增加实验考核公平性和真实性的难度[2]。因此可通过嵌入式开发结合信号发生器、示波器、万用表等功能的一体化设备,通过软硬结合,记录实验过程数据中的关键数据,用实验过程数据与实验结果数据相结合的方式取得实验考核结果[3],通过信息化方式解决实验考核过程中繁重的工作量,对高校实验室实验教学管理有着得要的意义。
由于实验中所需要的设备种类多,如示波器、信号发生器、万用表等仪器设备,且实验考核需要考核每个学生的动手能力,需要一人一组仪器设备进行操作,而仪器设备数据多、成本高,占用实验室空间大,不利于实验考核的推广。基于FPGA的多功能一体化仪器设备的设计能解决以上问题。
实验考核系统装置由触摸显示屏、控制主模块、通信模块、信号发生器模块、外接电路板模块、示波器模块、万用表模块和电源模块组成,实验考核装置系统如图1所示。其中控制主模块由Raspberry Pi(树莓派)和FPGA(Field Programmable Gate Array)芯片组成。Raspberry Pi用于linux的开发,实现对功能模块的驱动和控制以及实验考核系统功能设计。FPGA模块主要实现数据采集以及多仪器设备功能集成;而外接电路板模块用于根据不同的实验内容,外接不同的实验电路板块,如高频小信号放大器电路模块、正弦波振动器电路模块和低电平振幅调制器及解调器电路模块等。
图1 实验考核装置系统图
PCI-e(Peripheral Component Interconnect express)是一种高速串行计算机扩展总线标准,简称“PCI-e”,其主要优势就是数据传输速率高。PCI Express设备间通过链路的逻辑连接进行通信,链路支持任何两个端点之间的全双工通信,每个通道由两个差分信号对组成,一对用于接收数据,另一对用于发送数据。其通信协议是一种分层协议,由事务层、数据链路层和物理层组成。该协议以一种串行的点对点的方式互联两个设备,可实现单通道或多通道的数据传输,被广泛应用于网络适配、图形加速器、网络存储、大数据传输以及嵌入式系统等领域[4-5]。
该系统的Raspberry Pi与FPGA采用这种基于数据包的高性能互连协议PCI-e进行连接。其中Raspberry Pi采用CM4核心板,目前该板只支持PCI-e x1接口。FPGA采用Artix-7的C7A100T开发板,该开发板支持PCI-e-2.0 x4接口,可以向下兼容x1模式。因此Raspberry Pi与FPGA两者采用基于PCI-e的x1模式进行通信,传输带宽最高可达500 MB/s。其中GTP为FPGA内部高速收发器,RX和TX代表数据收发,CLK为数据传输同步时钟,P/N代表采用差分方式传输信号,如图2所示。主要链接的引脚为PCIE_TX0_P/N、PCIE_RX0_P/N、PCIE_CLK_P/N、PCIE_nRST和PCIE_CLK_nREQ。
图2 系统引脚链接图
该软件系统主要由硬件驱动设计和考核系统界面设计。硬件驱动设计主要驱动触摸屏模块以及FPGA控制模块,其中功能模块间的数据传输采用PCI-e协议的DMA(Direct Memory Access)模式,该模式的数据传送由一个特殊的处理器DMA控制器来完成,不是由CPU负责处理,因此占用极少的CPU资源,适合嵌入式的开发[6]。而示波器模块、信号发生器模块和数字万用表模块主要由FPGA控制模块实现数据的采集与处理[7-8],linux作为操作系统实现Raspberry Pi系统开发,另外数据库作为用户数据、实验数据存储与管理,实验考核系统运行流程如图3所示。
图3 系统流程图
其中实验考核系统具体工作流程如下:
1)通过触摸屏输入学生账户与班级等信息进行系统登录;
2)同时显示实验考核倒计时;
3)插入实验考核要求的外接电路板;
4)系统检测接入模块,开始记录实验过程数据;
5)触摸显示屏显示可控制的仪器设备图标,如信号发生器、示波器、万用表、系统设置、实验考核报告;
6)通过信号连接线连接信号发生器输出端、示波器输入端、万用表输入端;
7)当用户选择信号发生器时,显示该仪器设备参数设置,如波型、频率、幅度等,同时当用户完成设置后弹出对话框询问是否记录该实验过程数据库;
8)当用户选择示波器时,显示该仪器设备参数设置,自动检测键、频率调节键、幅度调节键、波型显示区、光标控制键等;
9)同时当用户完成设置后弹出对话框询问是否记录该实验过程数据库。其中波型显示区有截图按钮,并把该截图记录到实验过程数据库;
10)当用户选择万用表时,显示该仪器设备参数设置,电压值显示区、量程设置等,同时当用户完成设置后弹出对话框询问是否记录该实验过程数据库;
11)当用户选择设置时,可设置上传服务器的IP地址、自身设备IP地址、实验考核时间等,该设置需要管理员权限才能进入;
12)当用户选择实验考核报告时,显示实验考核模版,所需填写的数据只能通过调用实验过程数据库进行选择,防止用户篡改数据等作弊行为,同理所需的波型图也需要通过调用实验过程数据库进行选择;
13)当用户点击提交键进行实验考核报告时,系统会把实验考核报告以及自行生成实验过程数据报告至服务器,并显示是否上传成功[9];
14)当用户未点击提交键时,而实验考核时间结束时同样会自动提交报告,同时在离实验考核时间结束前3分钟时会提醒用户时间将至。
Raspberry Picm CM4核心板支持PCIe 2.0 通信,彻底解决了树莓派跟FPGA之间的数据传输带宽和标准化外设驱动问题。采用神电测控专门开发的针对ARTIX7的通用型LabVIEW FPGA工具包,进行基于PCI-e DMA 的FPGA 与树莓派 Linux 之间的双向高速通信异构系统通信设计。
1)下位机FPGAPCIe Send上行程序设计(FPGA-->树莓派Linux)。
①选择100 MHz 的PCIe CLIP时钟作为时钟源。该同步时钟驱动的定时循环是专门用来处理用户创建的 FIFO 跟 PCIe IP 核内部的 FIFO 之间进行数据交互的,支持标准四线握手串联。
②将FPGA终端下的“pcie_lv_clip_ip_to_gpio_led”节点放在定时循环里面,利用“数值至布尔数组”转换 VI 将FXP<+4,4> 定点数转换成布尔数组,再利用数组索引将前3个状态赋给 AX7103 开发板上的前3个LED,通过LED_1(心跳 1Hz 闪烁)来判断FPGA里面的 PCIe IP核是否正常工作;LED_2状态来判断FPGA是否发送了上行数据;LED_3状态来判断FPGA是否接收到了PC下发的下行数据。最后一个LED_4指示灯信号判断FIFO是否溢出用的。
③FPGA传递数据给PCIe IP核然后发送给树莓派(Linux)。把FPGA终端下的 PCIE Data里面的通道0(64 位位宽)的3个信号端口pcie_lv_clip_fpga2host_in_64_tdata_ch0”、
“pcie_lv_clip_fpga2host_out_64_tready_ch0”、“pcie_lv_clip_fpga2host_in_64_tvalid_ch0”,拖拽到程序框图中,这3个信号端口符合标准的四线握手。
④把创建好的64位位宽的FIFO(FIFO_PCIe_Write_U64)也拖到程序框图里面,然后根据四线握手的方式,将PCIe CLIP通道0的3个握手信号接到 FIFO上面去,完整的 PCIe 数据上行发送程序框图如图4所示。
图4 FPGA-->树莓派Linux上行数据发送程序框图
当PCIe IP核内部的FIFO没有满时,这个“pcie_lv_clip_fpga2host_out_64_tready_ch0”信号会拉高,也就是通知 FPGA,可以将采集的数据发送给 PCIe IP 核内部的 FIFO。将这个信号接到FPGA里面用户创建的 FIFO(FIFO_PCIe_Write_U64)的“输出就绪”端口,然后把“元素”和“输出有效”两个端口分别接到PCIe IP核的“pcie_lv_clip_fpga2host_in_64_tdata_ch0”和“pcie_lv_clip_fpga2host_in_64_tvalid_ch0”两个信号端口上;当用户FIFO里面有数据输出时,就会直接通过PCIe总线传输给树莓派(Linux)端,完成上行通信。
2)下位机FPGA PCIe Receive下行程序设计(树莓派Linux -->FPGA)。
①使用FPGA终端下PCIe Data这个CLIP里面的后4个8 位位宽(ch4~ch7)的 host2fpga 通道来传输PC下发的字节数组。
②将FPGA终端下行通道4的3个握手信号(“pcie_lv_clip_host2fpga_out_8_tdata_ch4”、“pcie_lv_clip_host2fpga_in_8_tready_ch4”、“pcie_lv_clip_host2fpga_out_8_tvalid_ch4”)拖拽到FPGA程序框图里面。
③根据四线握手的方式,将PCI-e CLIP下行通道4的3个握手信号接到用户创建的Read FIFO(FIFO_PCIe_Read_U8),完整的FPGA PCIe 数据下行接收程序框图如图5所示。
3)上位机树莓派(Linux RT)PCIe通信程序设计。
程序框图由两个相互独立的线程组成,程序为两个while循环,分别是PCIe写线程(树莓派下发数据给FPGA)和PCIe读线程(树莓派读取FPGA上传的数据),如图6所示。为了让上位机树莓派(Linux RT)能够控制下位机FPGA里面的采样率和信号采集的启动和停止,将树莓派程序前面板上的 U32 类型的“分频系数(10ns)”控件通过“强制类型转换”函数变成字节数组;再把前面板上的布尔型“开始/停止采集”按钮转成 U8类型的0或者1;然后再把预留的一个参数“size_read_U32”控件通过“强制类型转换”变成字节数组;最后将这3个转换后的字节数组进行数组拼接(实际上就是字节数组),赋给“FPGA_FIFO_Write_Pipe_Send_DLW30_Linux.vi”写VI,将树莓派里面的数据通过PCIe总线下发给FPGA。
为了提高读取效率或者为了方便定长数据的解析,给定一个长度阈值,只有当上位机树莓派(Linux RT)端的PCIe DMA FIFO里面接收到了一定长度的字节数之后,才能把这些字节数组一次性读取出来。因为PCIe传输的数据都是以字节为单位,所以如果用户希望读取的数据位宽不是字节,下位机FPGA上传的数据是I32类型的Sine信号,正好就是4个字节,那么在判断之前,需要将I32点数×4,再做比较判断,这样读取出来的数据点数才是正确的。
图5 树莓派Linux -->FPGA下行数据接收程序框图
图6 树莓派(Linux RT)PCIe 上位机通信程序框图
根据图3的系统流程,需要设计三个表,分别是用户表、操作数据表、数据内容表。其中用户表用于保存用户登录信息,如学生ID、姓名、学号、班级、登录时间等;操作数据表用于保存设备通信数据,如读取示波器和信号发生器的波形、频率、幅度,数字万用表电压值、电流值等数据;数据内容表为实验考核内容。
图7 实验考核作答界面
实验考核作答界面如图7所示。其中学号、姓名、班级和实验考核内容等信息会从数据库用户表里自动读取,不用再次填写,考核倒计时开始计时。其中表格数据导入按键可以导入信号发生器和数字万用表数据,由数据库的操作数据表提供数据,该数据来源直接由仪器设备提供,防止用户手动输出,避免数据作假。波形数据导入可以导入示波器数据。联网状态显示与服务器是否链接,提交按键即把实验考核报告上传至服务器,作答完毕。实验证明实验数据能够通过考核系统进行实验数据信息化,并远程上传到服务器上。
该实验考核系统通过PCIe协议实现了Raspberry Pi和FPGA的异构系统互联,采用PCIe-DMA模式提高了数据采集与处理速度,分别对上位机树美派和下位机FPGA的进行上行和下行的通信设计,有效解决导构高速双向通信问题。通过嵌入式技术大大减低了设备成本,解决了实验室空间不足问题,同时基于物联网技术实现设备间的数据传输,实现了高校教育信息化在实验室中的应用。