APP下载

基于ZYNQ7000 Linux的数据发射系统设计和实现

2023-06-25冯祥虎肖世伟杨美娜杜军

现代信息科技 2023年4期
关键词:驱动程序总线波形

冯祥虎 肖世伟 杨美娜 杜军

摘  要:针对传统平台传输信号频率固定、开发过程复杂的情况,对信号发射系统进行了相关研究,设计一款基于ZYNQ-7000和AD(AD9767)架构的嵌入式信号发射系统。该系统以ZYNQ-7000为数字信号发射平台,搭配AD转换芯片,在Linux操作系统下通过AXI-DMA的方式实现信号的自定义发射。系统数据传输速率快,发射信号频率可灵活自定义,开发前景良好,且具有集成度高、小型化的特点,为后续更多的功能开发提供了无限的可能。

关键词:ZYNQ-7000;Linux操作系统;AD转换;AXI DMA传输

中图分类号:TN919.5  文献标识码:A  文章编号:2096-4706(2023)04-0072-03

Design and Implementation of Data Transmission System Based on ZYNQ7000 Linux

FENG Xianghu, XIAO Shiwei, YANG Meina, DU Jun

(School of Computer Science and Information Engineering, Harbin Normal University, Harbin  150025, China)

Abstract: Aiming at the conditions of fixed transmission signal frequency and complex development process of traditional platform, the signal transmission system is studied and an embedded signal transmission system based on ZYNQ-7000 and AD (AD9767) architecture is designed. The system uses ZYNQ-7000 as the digital signal transmission platform, with AD conversion chip, and achieves customized signal transmission through AXI-DMA under Linux operating system. The system has fast data transmission rate, flexible customization of transmission signal frequency, good development prospect, high integration and miniaturization, which provides unlimited possibilities for further function development.

Keywords: ZYNQ-7000; Linux operating system; AD conversion; AXI DMA transmission

0  引  言

隨着芯片行业的日渐壮大,芯片资源越来越丰富,能够搭载各种复杂的框架,从而能够灵活便捷地实现多种功能。软件无线电技术是一种基于软件定义的无线电广播通信技术,除了最基本的射频收发器和放大器、混频器以外,利用软件实现各种功能(如工作频段、调制解调类型、通信协议等),并使宽带模数转换器尽可能靠近天线。不同的功能对应着不同的软件模块,使用时只需调用相应的功能模块即可。不仅提高了系统的灵活性,还节约了时间成本。而Linux操作系统具有超强的灵活性,用户可以通过剪裁系统满足不同项目的需求。另外,它的开源性决定了它具有丰富的系统资源,硬件资源能够得到更加充分的利用。不仅如此,Linux操作系统还可在特定的硬件条件下进行安装,安装过程灵活便捷[1]。

本文采用Digilent开发的ZYBO板作为主控板,搭配由AD9767芯片构成的AD子板,借鉴软件无线电的原理,基于Linux操作系统在中频信号波段设计一款信号发射平台,实现能够自定义频率和波形的中频发射信号的功能,为后续的进一步开发奠定基础。

1  硬件模块设计方案

总体硬件设计图如图1所示。

1.1  ZYNQ-7000芯片

ZYNQ-7000是Xilinx公司率先推出的可扩展处理平台Zynq系列,它包含一个双核ARM Cortex-A9,而且它将PS与PL端集成在一起,以充分使用它的资源,发挥其优势。该芯片的设计以ARM处理器(PS端)为核心,以可编程逻辑电路(PL端)作为扩展。采用由Digilent开发的低成本ZYNQ开发板ZYBO作为核心板卡,该板卡使用的是Xilinx XC7Z010-CLG400芯片,含有两片512 M的DDR3内存(1 066 Mps带宽),具有外部的EEPROM和micro SD卡槽,还有1G以太网PHY和5个PMOD接口。ZYBO板卡支持三种默认编程模式,分别是JTAG编程模式、QSPI编程模式和SD卡编程模式[2]。

1.2  数模转换芯片AD9767

AD9767是一个双通道14位的CMOS DAC,芯片内含有两个高品质内核,另外还集成一个基准电压源和一些数字接口电路,采用48引脚小型LQFP封装。器件提供出色的交流和直流性能,可以实现高达125 M的模数转换率,输出电压的范围为5 V到-5 V[3]。

1.3  AXI4总线介绍

AXI总线用于维系PS与PL之间的通信,大大提高了ZYNQ-7000的性能。AXI是一种面向高性能、高带宽、低延迟的片内总线协议,该协议是AMBA 3.0协议中最重要的部分。无需借助复杂的桥接,该协议就可以实现高频率的操作。它有三种总线类型,分别是AXI4、AXI4-Lite和AXI-Stream[4],本次用到的总线类型主要是AXI-Stream总线。它的核心思想是流式处理数据,由于在传输过程中没有地址接口,这样就不涉及读写数据的概念,只有简单的发送与接收,能够实现无限制的数据突发传输,减少了延时,所以它支持面向高速数据流的传输。

AXI-Stream只能在PL中实现,不能直接与PS相连,因此必须通过AXI-Lite或AXI4进行转换,PL部分也有相应的AXI总线接口,这样就能完成PS到PL的互联。AXI-DMA由Xilinx公司提供,为内存与AXI4-Stream外设之间提供高宽带的直接存储访问,scatter/gather功能可将CPU从数据搬移任务中解放出来。

1.4  AXI-DMA介绍

AXI DMA相比于AXI内存映射,它提供了更高带宽的直接内存访问通道[5]。在PL端添加AXI DMA IP核,ZYNQ芯片通过AXI_HP接口进行高速的数据传输,无需CPU接入,提高了数据的访问效率。在简单的DMA模式下,当需要进行数据的高速传输时,只需配置相应的DMA控制寄存器即可完成想要的功能。这种模式下,所占用的FPGA资源较少,节省了不必要的硬件开销。当外设发生请求时,DMA控制器会向CPU发出总线请求,CPU响应该信号后,释放总线控制权,DMA控制器接管,进行DMA操作。数据传输完成后,发出结束信号,释放总线,CPU恢复对总线的控制。因此,当PL的外设与存储器之间需要高速的数据传输并且数据传输量偏大时,就可以选择这种模式。

DMA工作流程图如图2所示。

1.5  硬件工程模块设计

根据硬件设计方案,基于Vivado 2018.3搭建工程。在Vivado工程中主要添加了Zynq-7000的IP核、AXI-DMA IP核和AD9767 IP核。首先配置ZYNQ的PS端时钟、复位、uart端口等,使PS部分能够搭载Linux操作系统正常工作。在AD9767的自定义IP核中增加一个深度为1 024的FIFO模块,用于DMA和ADC的时钟对齐。由于DMA有传输中断的现象,若ADC的发射速度过快,会导致ADC无数据可发,从而使得ADC输出不连续。因此增加一个FIFO模块,在DMA传输中断时,ADC能在下一次DMA传输之前有剩余的数据可供传输,保证输出模拟信号的连续性。AXI-DMA IP核负责通过AXI接口从主机的DDR中获取已经定义好的数字信号,然后将数据流搬运至AD9767 IP核的FIFO当中,这样AD模块就能源源不断地进行模数转换,产生连续的模拟信号。其中dac_data[13:0]用于发送FIFO中存储的14位数字信号。

AD9767 IP核引脚和RTL实现如图3、图4所示。

2  软件设计方案介绍

2.1  驱动程序开发

驱动程序是一种实现计算机与设备通信的特殊程序,相当于硬件的接口,操作系统只有通过这个接口才能控制硬件设备的工作。Linux中有三大类驱动:字符设备驱动、块设备驱动和网络设备驱动[6]。在设计AD9767的驱动程序时主要利用了AXI-DMA的循环发送功能,优势在于它能够在主程序运行的过程中不断地发送数据,并且不会干扰主程序的运行。这就让我们能够在主程序中预留出很大的处理空间去做别的事情,比如同时驱动别的设备进行信号接收与处理。

程序流程如图5所示。

部分代码如下:

DMA传输

调用dma_sync_single_for_cpu和dma_sync_single_for_device函数分别对设备和CPU缓存进行同步

dma_async_issue_pending(axi_adc_dev[minor]->tx_chan);操作硬件发起具体的DMA请求

writel(1,axi_adc_dev[minor]->adc_virtaddr);//开始传输

DMA传输结束

dmaengine_terminate_all(axi_adc_dev[minor]->tx_chan);//停止DMA

2.2  应用程序开发

应用程序是为方便用户操作而提供的程序,对应驱动程序中的函数接口,操作硬件完成对应动作,实现对外部设备的应用。本系统的应用程序首先根据用户输入的参数,生成对应信号频率和波形的波形表,将数字信号波形表写入ROM中。通过驱动程序提供的ioctl接口函数,配置ADC数据的个数和长度,控制DMA进行初始化。最后控制DMA将数字信号波形表进行数据循环发送,从而实现模拟信号的不断发射。整体应用程序流程图如图6所示。

部分代码如下:

通过set_wave_point(uint freq,char* type)函数生成数字波形表

调用ioctl(*fd, AXI_ADC_SET_SAMPLE_NUM, adc_sample_num)来设置ADC数据大小

调用ioctl(*fd, AXI_ADC_SET_DMA_LEN_BYTES, dma_len_bytes)来设置ADC数据长度

调用ioctl(*fd, AXI_ADC_DMA_INIT)进行ADC_DMA初始化

调用ioctl(*fd, AXI_ADC_DMA_CYCLIC_SEND)开启DMA循环发送

调用ioctl(fd, AXI_ADC_DMA_CYCLIC_STOP)结束DMA循环发送

2.3  实验结果

启动应用程序时,首先输入三个参数,分别是ADC开始命令、自定义输出信号的频率和波形,以500 kHz的正弦波为例,应输入“ADCstart 500 sin”,系统将会输出500 kHz的正弦波信号。对该信号发射系统进行测试时,使用Tektronix MDO3104示波器进行数据采集,与示波器进行有线连接,选用五个频率点进行测试,实验结果如表1所示。

经过测试得知,在一定的频率范围内,信号输出的频率误差在2%以内。结果证明该系统的设计方案合理可行,具有一定的应用推广价值。

3  结  论

本文设计一种加载Linux操作系统的可自定义波形的信号发射系统,借鉴了软件无线电的原理,实现了软硬件协同的设计理念,完成了整体系统的模块设计和程序控制设计,实现了相关实验测试系统的可靠性。实验结果表明,带有AXI_DMA驱动的AD信号发射系统能够较为准确地发射不同频率的模拟信号。相较于传统的硬件平台,该系统对硬件的操作更加灵活便捷,实现了借鉴软件无线电原理的初衷。随着嵌入式系统功能的愈发复杂,加载Linux操作系统的ARM开发板可提供更多的系统资源和网络资源,为后续的应用开发提供更加广阔的空间。

参考文献:

[1] 孙国萃,杜军,冯祥虎,等.基于ZYNQ7000 Linux的数据采集系统设计和实现 [J].现代信息科技,2022,6(4):85-87+90.

[2] 高寒.基于ZYBO開发平台的智慧环保监测及数据采集系统设计 [J].电子设计工程,2018,26(5):174-178+183.

[3] 孙国萃.相位调制激光雷达信号处理系统研究 [D].哈尔滨:哈尔滨师范大学,2022.

[4] 庄琼.基于AXI总线的DMA高速通道及驱动的设计与实现 [D].成都:电子科技大学,2019.

[5] 李朗.基于Zynq-7000高清视频采集处理系统Linux移植与应用程序设计 [D].南京:南京邮电大学,2017.

[6] 刘健.基于ZYNQ与AD9361的微型频谱监测设备的设计与实现 [D].成都:电子科技大学,2018.

作者简介:冯祥虎(1997—),男,汉族,山东泰安人,硕士研究生在读,研究方向:嵌入式技术。

收稿日期:2022-10-26

猜你喜欢

驱动程序总线波形
对《压力容器波形膨胀节》2018版新标准的理解及分析
基于LFM波形的灵巧干扰效能分析
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
计算机硬件设备驱动程序分析
基于ARM的任意波形电源设计
大连台使用CTS-1记录波形特点
多通道ARINC429总线检查仪
基于EtherCAT总线的ROV控制系统设计
基于MPC8280的CPU单元与内部总线驱动程序设计