基于XC2V1000 FPGA和DM9000A实现OQPSK全数字接收机的设计

作者:苏耀峰,王德刚,魏急波
1 引言
软件无线电(sdr)技术近年来发展迅速,在无线通信中的数字接收机领域应用尤为广泛。fpga(现场可编程门阵列)以其高集成度、高可靠性和灵活性,在软件无线电平台的设计中发挥着重要的核心作用。同时,sdr中的数据接口设计也是关键的环节。以太网是目前最通用的数据接口之一,但是中低端fpga通常不具备以太网接口,这为fpga在sdr中的应用造成了不便。如果为fpga配置以太网接口,与外部网络实现通信,将有利于sdr平台的功能延伸,方便数据传输和与现有系统接口。
dm9000a是davicom公司生产的一款功能强大的以太网控制器,支持10/100 m以太网速率,可与嵌入式微处理器(mpu)、单片机等以多种方式(如isa总线等)接口,具有体积小、功耗低、配置灵活、使用简单等特点。但在传统应用中,很少有将dm9000a和fpga直接结合应用的实例,为解决fpga的以太网接口问题,通常的解决方案是采用单片机或者mpu在fpga和以太网控制器之间进行数据转发,但弊端是成本提高和功耗增加。
本文在自行设计开发的oqpsk全数字接收机中,为实现高速解调数据的实时远程传输处理及接收机参数的远程配置,提出了采用fpga直接控制dm9000a进行以太网数据收发的设计思路。采用xilinx系列xc2v1000 fpga和dm9000a,实现低成本、低功耗和高速率的sdr平台的网络传输功能,其最高传输速率可达100 mb/s。
2 dm9000a工作原理
2.1 主要特性和总体结构
dm9000a的主要特性如下:
支持8/16位数据总线;
适用于10base-t和100base-t;
10/100 m自适应,适应不同的网络速率要求;
内置16 kb的sram,用于收发缓冲,降低对主处理器的速度要求;
与ieee 802.3u兼容,支持ieee802.3x全双工,可同时收发;
具有睡眠模式,可降低功耗;
采用48引脚lqfp封装,缩小pcb面积。
dm9000a功能结构框图如图1所示,dm9000a实现以太网媒体介质访问层(mac)和物理层(phy)的功能,包括mac数据帧的组装/拆分与收发、地址识别、crc编码/校验、mlt-3编码器、接收噪声抑制、输出脉冲成形、超时重传、链路完整性测试、信号极性检测与纠正等。
2.2 工作原理
dm9000a可与微处理器以8 bit或16 bit的总线方式连接,并可根据需要以单工或全双工等模式运行。在系统上电时,处理器通过总线配置dm9000a内部网络控制寄存器(ncr)、中断寄存器(isr)等,完成dm9000a的初始化。随后,dm9000a进入数据收发等待状态。
当处理器要向以太网发送数据帧时,先将数据打包成udp或ip数据包,并通过8 bit或16 bit总线逐字节发送到dm9000a的数据发送缓存中,然后将数据长度等信息填充到dm9000a的相应寄存器内,随后发送使能命令。dm9000a将缓存的数据和数据帧信息进行mac组帧,并发送出去。
当dm9000a接收到外部网络送来的以太网数据时,首先检测数据帧的合法性,如果帧头标志有误或存在crc校验错误,则将该帧数据丢弃。否则将数据帧缓存到内部ram,并通过中断标志位通知处理器,处理器收到中断后对dm9000a接收ram的数据进行处理。
dm9000a自动检测网络连接情况,根据网速设置内部的数据收发速率为10 mb/s或100 mb/s。同时,dm9000a还能根据rj45接口连接方式改变数据收发引脚的方向,因此无论外部网线是采用对等还是交叉方式,系统均能正常通信。
3 sdr接收机网络接口设计
在sdr接收机中,中频模拟信号经过a/d转换、数字下变频、抽取滤波等解调处理后,形成连续的解调数据流,其速率为10 mb/s。在fpga内部,解调输出的数据流和以太网接口部分通过fifo进行缓冲,当解调数据达到规定的数据帧长度时,fpga启动以太网发送程序,将解调数据发送到dm9000a,完成数据发送过程。在接收方向,网络工作站把控制指令按照一定的帧格式组帧发送到以太网,dm9000a接收到发给自身的以太网帧并通知fpga启动以太网接收程序。fpga将相应的数据从dm9000a的接收fifo读至fpga内部ram中,利用数据中的控制命令配置接收机参数,完成网络对sdr接收机的远程控制。
3.1 与fpga的数据接口和控制接口
dm9000a的外部总线符合isa标准。可通过isa总线直接与fpga无缝连接。其硬件连接原理如图2所示。
dm9000a内部集成了phy功能,因此与以太网接口可以无缝连接。如图3所示。
3.2 dm9000a的fpga控制
3.2.1 初始化模块
dm9000a正常工作需要在上电后对内部寄存器进行初始化。该过程是通过fpga对dm9000a外部控制总线和数据总线的读写操作完成的。具体流程如下:
1) 激活phy
设置gpr(reg_1f) cepi00 bit[0]=0;
由于复位后,dm9000a恢复默认的休眠状态以降低功耗,因此需要首先唤醒phy。
2) 进行两次软复位,步骤如下:
设置ncr(reg_00)bit[2:0]=011;至少保持20μs;
清除ncr(reg_00)bit[2:0]=000;
设置ncr(req_00)bit[2:0]=011;至少保持20μs;
清除ncr(reg_00)bit[2:0]=000;
3) 配置ncr寄存器
设置ncr(reg_00)bit[2:1]=00;配置为正常模式。
通过改变该寄存器可以选择设置内部或者外部phy、全双工或者半双工模式、使能唤醒事件等网络操作。
4) 清除发送状态
设置nsr(reg_01)bit[5]=1 bit[3]=l bit[2]=l;
5) 设置imr寄存器(reg_ff)par bit[7]=l;启用rx/tx fifo sram读/写地址指针自动返回功能。
6) 通过imr寄存器(reg_ff)prm bit[0]/ptm bit[1],对rx/tx中断使能。如果需要在一个数据帧发送完后产生一个中断,应将ptm bit[1]置为1,如果需要在接收到一帧新数据时产生一个中断,应将prm bit[1]置为1;
7) 设置rcr寄存器,使能数据接收功能。
以上步骤完成后.可以通过led指示灯观测dm9000a是否已成功完成初始化。
3.2.2 数据发送模块
dm9000a的发送缓冲区可同时存储两帧数据,按照先后顺序命名为帧i和帧ii,dm9000a上电初始化后,发送缓存区的起始地址是00h,当前数据帧编号为帧i。两帧数据的状态控制字分别记录在dm9000a的状态寄存器03h和04h中。发送过程如下:
首先,fpga利用写操作寄存器mwcmd(reg_f8)向dm9000a的发送缓存区中写入发送数据帧,写数据帧时需要先写入6字节的目的mac地址,再写入6字节的源mac地址,最后写入发送数据。
随后,fpga利用写操作寄存器mwcmd(reg_f8)将数据帧长度写入寄存器fch和fdh,数据长度为16位,将高8位写入寄存器fch,低8位写入寄存器fdh。
最后,fpga将发送控制寄存器tcr(reg_02)的bit[1]置为高电平,向dm9000a发出发送数据指令。dm9000a自动进行一些处理才将数据发送至以太网,包括:插入报头和帧起始分隔符;插入来自上层协议的数据,如果数据量小于64字节,则自动补齐64字节;根据目标地址、源地址、长度/类型和数据产生crc校验序列,并插入校验序列位。这些处理都无需fpga干预。处理完毕后,dm9000a即开始发送帧i。在帧i发送的同时,帧ii的数据即可写入发送缓存区。在帧i发送完后,将帧ii的数据长度写入寄存器fch和fdh,最后将发送控制寄存器nsr(reg_01)的bit[1]置为高电平,即可开始帧ii的发送。依此类推,下面发送的帧将会继续编号为帧i,帧ii,帧i,帧ii……按照同样的方式发送。
如果fpga将中断屏蔽寄存器imr(reg_ff)的bit[1]置为高电平,那么发送完毕后,dm9000a将会产生一个指示发送完成的中断信号。在发送过程中,fpga可以查询寄存器标志位寄存器nsr(reg_01)中的tx1end bit[2]或者tx2end bit[3]得到数据帧的发送状态。
发送流程如图4所示。寄存器isr中的pts标志位是发送中断标志位,当一帧数据发送完毕,pts=0,fpga检测到该标志后,应清除标志位以便发送新的数据帧。这里需要注意的是,向fc、fd所写的帧长度应该是包含目的mac地址段、源mac地址段和有效数据的总长度。
3.2.3 接收模块
dm9000a中的接收缓存区是一个环形结构,初始化后的起始地址为0c00h,每帧数据都有4字节长的首部,然后是有效数据和crc校验序列。首部4字节依次是01h、状态、长度低字节和长度高字节,帧结构如图5所示。
首部4字节含义如下:
第一个字节用于检测接收缓存区中是否有数据。如果这个字节是01 h,表明接收到了数据;如果为00h,则说明没有数据。但是如果第一个字节既不是01h,也不是00h,dm9000a就必须作一次软复位来从这种异常状态中恢复。
第二个字节存储以太网帧状态,由此可判断所接收帧是否正确。
第三和第四字节存储以太网帧长度。后续的字节就是有效数据。
接收过程如下:
查看中断状态寄存器。如果接收到新数据,寄存器isr的prs位将被置为0;
如果检测到prs=0,清除prs,fpga开始读取接收缓存区数据。如果第一个字节是01h,则说明有数据;如果是00h,则说明无数据,需要进行复位;
根据获取的长度信息,判断是否读完一帧。如果读完,接着读下一帧,直到遇到首字节是00h的帧,说明接收数据已读完。fpga可以重新查看中断状态寄存器,等待新的有效数据帧。接收流程如图6所示。
4 结束语
本文对以太网控制器dm9000a的原理和功能进行介绍,并结合自行开发的sdr接收机平台。基于fpga设计实现了100 m以太网接口。其设计思路新颖,硬件连接简单。整体系统具有功耗低、体积小、运行稳定可靠等优点。sdr平台的开发融入网络设计理念,在应用中有广泛的前景,大大拓宽了sdr的功能。扩展了sdr的应用领域。


vivoX20将推出黑金配色, 再没人敢说你丑了!
选AC-DC电源适配器还有这么多门道?看完才知道
RT-Thread BSP qemu-virt64-riscv的编译环境搭建步骤
富勒G900S机械键盘评测 值不值得买
从人工智能与数据分析的角度,能看到什么呢?
基于XC2V1000 FPGA和DM9000A实现OQPSK全数字接收机的设计
马来西亚封城后6吋硅晶圆产能紧张
光模块和光纤收发器有哪些连接要求?注意事项说明
全球制造业正从自动化向智能化方向迈进
骨传导耳机优缺点,骨传导耳机排行榜
采用路径成组分离技术优化FIR设计
镭拓科普透明塑料激光焊接机在塑料加工的优势
全英最便宜智能手机 4英寸“展讯芯”华为Y3开卖
高通即将推出加强版骁龙888 Plus
为使消费者重拾信心 三星Galaxy S8旗舰或有打算提前发布
示波器上的频域分析利器,Spectrum View测试分析(基础篇)
电池级碳酸锂市场紧缺的根本原因在哪
三金锂电“锚定”高镍三元前驱体
家用臭氧发生器的危害
机顶盒成为下一步国网整合的障碍,捆绑的广播电视媒体处于不利地位