DIY编程器网

标题: 基于SOPC的调制解调器设计 [打印本页]

作者: admin    时间: 2015-4-27 17:31
标题: 基于SOPC的调制解调器设计
为解决“最后一公里”的接入问题,上世纪末出现了数字用户线环路DSL(Digital Subscriber Loop)宽带技术。DSL在2公里内不失为好的双绞线数据传输方案,但当随着距离的增加,DSL的数据传输能力会急剧下降,其原因在于:作为DSL核心的离散多音DMT(Discrete Multitone)技术,子通道内采用了与幅度有关的QAM调制,随着传输距离的加大,线路对信号的衰减使幅度的区分变得越来越困难。可见,DSL为实现高速率数据传输,降低了对有效传输距离的要求,所以对要求远距离传输的场合,就不得不采用其他技术方案了。SOPC(System On Programmable Chip)技术是以FPGA为载体的系统芯片设计技术,由于具有软硬件可裁减、现场可编程和开发周期短等特点,使该技术在通信领域及嵌入式系统设计中有着广泛的应用。考虑到传统的连续相位移频键控(2CPFSK)调制具有抗噪声性能好、相位连续、包络恒定、旁瓣收敛快等优点,故SOPC技术和2CPFSK调制方式的结合,就为远距离调制解调器的实现提供了可能。本文所介绍的即是基于SOPC技术,采用2CPFSK的调制解调器系统设计。
1 系统简介
本设计采用ALTERA公司的CYCLONEII芯片实现,使用以太网控制器DM9000A作为调制解调器与主机间的数据接口。主机发送数据由FPGA实现调制后,由线路驱动器放大经混合电路送上双绞线;同时由双绞线传来的接收信号经放大、滤波、解调等处理后,数据封装成以太网数据包送至主机。系统整体框图如图1所示。

  图1中,存储器模块包含有SDRAM、SRAM、Flash,进行各种程序的存储及堆栈保存等。LED显示当前系统工作状态,如正常工作显示、数据发送进行中显示、数据接收进行中显示等;按键用来实现系统的硬复位功能;发送方向上,FPGA读出DM9000A接收缓冲区数据、将调制后的数字已调信号送往D/A器件;接收方向上,FPGA将A/D输出的数字待解调信号解调后送至DM9000A的发送缓冲区;线路驱动器对输入的模拟差分信号放大,以适应长距离传输线的衰减;接收方向滤波模块滤除通带外信号,以降低干扰;混合电路将发射回路和接收回路连接在同一对双绞线上,并抑制发射和接收之间的相互干扰。
2 DM9000A简介
DM9000A是一低功耗、高集成的以太网控制器,可实现以太网媒体介质访问层(MAC)和物理层(PHY)的功能,包括MAC数据帧的组装/拆分与收发、地址识别、CRC编码/校验、MLT-3编码、接收噪声抑制、输出脉冲成形、超时重传、链路完整性测试、信号极性检测与纠正等。DM9000A最高可实现100Mb/s的传输速率,能够充分满足远距离调制解调器的传输速率需求。
2.1 DM9000A数据帧发送过程
DM9000A中3KB的发送缓冲区TX_SRAM可以同时存储两帧数据,按照先后顺序命名为帧I、帧II。DM9000A初始化后,发送缓存区的起始地址为00H,当前数据帧为帧I。数据发送过程如下:
(1)在待发数据前加入各6B的目的和源MAC地址,组成数据帧。
(2)利用写操作寄存器MWCMD(REG_F8)向TX_SRAM中写入发送数据帧。
(3)利用写操作寄存器MWCMD(REG_F8)将数据帧长度写入寄存器FCH和FDH。
(4)通过发送控制寄存器TCR(REG_02)设置发送请求TXREQ,向DM9000A发出发送数据指令。
发出发送数据指令后,DM9000A即开始发送帧I,在发送帧I的同时,帧Ⅱ的数据即可写入发送缓存区。在帧I发送完后,将帧Ⅱ的数据长度写入寄存器FCH和FDH,最后将发送控制寄存器TCR(REG_02)设置发送请求TXREQ,即可开始帧Ⅱ的发送。依此类推,可实现帧I、帧Ⅱ,帧I、帧Ⅱ……的连续发送。
2.2 DM9000A数据帧接收过程
DM9000A中的接收缓存区RX_SRAM是一个13KB的环形结构,初始化后的起始地址为0C00H,缓冲区内每帧数据都有4B长的首部。第一个字节用来检测接收缓存区中是否有数据,如果这个字节为01H,表明接收到了数据;如果为00H,则说明没有数据。但是,如果第一个字节既不是01H,也不是00H,DM9000A就必须做一次软复位来从这种异常状态中恢复。第二个字节存储了以太网帧状态,由此可判断所接收帧是否正确。第三和第四字节存储了以太网帧长度,后续字节为有效数据。数据接收过程如下:
(1) 查看中断状态寄存器ISR,如果接收到新数据,ISR的PR位将被置为0。
(2) 如果检测到PR=0,则清除PR。
(3) FPGA开始读接收缓存区数据。
如果第一字节是01H,则说明有数据,若是00H说明无数据,否则复位;根据获取的长度信息,判断是否读完一帧,如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完。FPGA可以重新查看中断状态寄存器,等待新的有效数据帧。
3 系统硬件设计
系统硬件设计包括ENET接口设计、调制解调单元的设计和硬件结构的生成三部分。硬件结构的生成主要使用QuartusII7.1的系统设计工具软件SOPC Builder 来完成。图2为FPGA内所实现的各功能模块示意图。

  3.1 ENET接口设计
本系统用到的基于DM9000A的ENET接口并非SOPC Builder所提供的标准组件,故必须进行自定义组件设计。经查阅参考文献[1]中图2.1(和处理器接口的信号连接图)可知:只需针对与处理器有关的管脚(SD0~15、CMD、INT、IOR#、IOW#、CS#、PWRST#)设计相应接口模块即可。图3为基于DM9000A的ENET接口设计示意图,图右侧表示接口与DM9000A管脚对应关系;NIOSII侧的写入数据IDATA只有在写入信号IWR_N有效时才会把数据传至DM9000A侧。根据图3所示的信号端口映射及逻辑关系,写出Verilog或VHDL文件,利用SOPC Builder中的Interface to User Logic导入即可创建基于DM9000A的ENET接口。

  3.2 调制与解调单元的设计
调制和解调单元的设计采用基于SOPC的DSP实现方案,根据不同的应用目标,其实现方案有两种选择:纯硬件方案和软硬件结合方案。纯硬件方案是指按照Matlab→DSP Builder→QuartusⅡ的流程直接实现。而软硬结合的方案是指利用前一种方案为NIOSⅡ处理器设计自定义指令的硬件加速器接口模块,生成能够完成DSP功能的NIOSⅡ处理器,最后DSP功能的实现则通过软件来完成。考虑到调制解调器的传输速率要求,如果用软硬结合的方案,200MIPS的处理速度可能满足不了要求,故采用纯硬件方案。本设计中调制单元包括了调制器和缓冲器1。为保证连续性发送,DM9000A接收缓冲区的数据要先经缓冲器1缓存后再进行调制。调制单元的电路模型图如图4所示。

  在图4中,调制器每调制完一字节的数据,要读入的下一字节地址Next_add会自动加1,将该地址送至缓冲器1的读出地址输入端Rd_add,即可开始下一字节的调制;当调制器从Next_add判断出已经读完一帧数据后,给出中断信号,此中断信号由DSP Builder的Interface库的AVALON_MM Slave 组件(选中Output IRQ,地址类型设为Write)提供的存储映射功能经由三态桥送至NIOSⅡ。处理器接到此信号后,向缓冲器1发送写使能信号,并传送要写入的数据,开始写入过程。缓冲器1采用Storage Library 库中的Dual-port RAM实现,双口RAM可随时输出缓存内部的剩余数据量,可实现读出、写入操作的灵活控制。
本设计采用2CPFSK调制方式,图5为用DSP Builder建立的调制器电路模型。图中,8位并行数据由输入端口DataIn输入,经并串转换后逐位送往多路器的数据输入端sel[0:0]。FWORD1和FWORD2是频率字设置端口,当数据输入端sel输入不同的值时,多路器会根据设置的频率字输出对应的相位值。将输出相位值的累加结果送入BusConversion1,抽取出相位值的高14位,将此相位信号通过查找表SinLUT后,在数据输出端即可得到2CPFSK已调信号。图中并串转换器的load输入端用来控制字节数据的输入,每当一字节调制完毕,load端口会输入数据载入信号进行下一字节数据的调制。

  同样,解调单元包括解调器和缓冲器2两部分。解调单元的设计与调制单元类似,所不同的是: AVALON_MM Slave 组件将地址类型设置为Read。
3.3 硬件结构的生成
3.3.1 用SOPC Builder生成软核
SOPC Builder提供了丰富多样的组件库,用户可以按需要自定义系统,同时可利用SOPC Builder的用户逻辑接口生成系统未提供的外部器件接口。本设计中加入了如下组件:cpu_0、三态桥、Flash控制器、SRAM控制器、SDRAM控制器、jtag_uart、led_pio、anjian_pio以及自定义组件ENET接口。值得注意的是:软核的生成过程必须在电路模型文件转换为RTL级的VHDL代码时生成的QuartusⅡ工程下进行,这样SOPC Builder在生成软核时会自动检测到调制解调单元的AVALON_MM Slave组件,会在三态桥下生成相应的信号线,把调制解调单元同NIOSII连接起来,其中包括数据线、地址线、读/写命令线和中断信号线等。
3.3.2 调制解调单元Sysmbol的生成
在Simulink中完成仿真验证后,就需要把设计转到硬件上加以实现,这是DSP Builder设计流程中最为关键的一步,转换后可以获得针对特定FPGA芯片的VHDL代码。Symbol的生成过程:对模型的分析、设置Signalcompiler、把MDL模型文件转换成VHDL、综合、适配。上述过程完成后,把调制、解调模型的VHDL文件在QuartusⅡ下各自生成相应的Symbol。该Symbol会自动加载到工程库中,可以如工程库中自带组件一样调用。
3.3.3 在QuartusⅡ下进行原理图编辑
在BDF文件的编辑状态下,加入NIOSⅡ软核、调制单元、解调单元;根据需要,DM9000A和SDRAM还需单独的时钟信号,可利用Mega Wizard Plug-Manager创建一个ALTPLL,即可为DM9000A和SDRAM提供合适的时钟信号。原理图文件编辑后,即可进行全编译,生成POF和SOF二进制格式的门级网表文件。
4 系统软件设计
系统主程序首先进行DM9000A的初始化,然后进行中断检测,依据优先级顺序依次响应。主要的中断响应程序有DM9000A接收缓冲区已有数据包时的发送中断响应程序和接收单元缓冲器2中已存有待发送数据时的接收中断响应。
4.1 发送中断响应程序的设计
当DM9000A的RX_SRAM接收到数据包后,会给出中断信号通知处理器读取数据包。此时,中断状态寄存器(ISR)的PR位会给出收到数据包的信号。在发送响应程序设计中,以ISR寄存器的PR位为0为中断触发条件,完成将RX_SRAM的相应数据写入缓冲器1和调制的过程,具体程序流程图如图6所示。

  4.2 接收中断响应程序设计
当接收缓冲器2已存入数据达到一定数量时,缓冲器2会通过AVALON_MM Slave 组件产生中断信号,可把此信号作为接收中断程序触发信号。中断信号产生后,响应程序主要完成两项工作:(1)将缓冲器2的数据按帧加入目的和源MAC地址后写入DM9000A的发送缓冲区TX_SRAM; (2)将DM9000A发送缓冲区的数据帧发送给主机。但应注意,当ISR寄存器的PT位为0时,表示数据帧发送完毕,要及时清除该标志位以便发送新的数据帧。接收中断响应程序的信号流程图如图7所示。

  实验表明,基于SOPC的调制解调器设计方案,在两相距近8km的主机之间,可靠地实现了双绞线数据传输,较DSL而言,其通信距离有大幅提高。该设计方案为系统设计带来了较大的灵活性和实用性,在实际应用中,可针对不同的环境条件以及需求侧重点的不同,更换调制解调模块,从而灵活地实现各种调制方式。本设计具有整体方案改动量小、开发周期短、资源利用率高等优点。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2