《毕业设计(论文)基于USB的LVDS数据传输.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于USB的LVDS数据传输.doc(41页珍藏版)》请在三一办公上搜索。
1、1 引言1.1 课题研究背景如今,高速处理器、多媒体、虚拟现实以及网络技术所需传送的数据量越来越大,速度越来越快。目前存在的点对点物理层接口如RS-422,RS-485,SCSI 以及其它数据传输标准,由于其在速度、噪声/EMI、功耗、成本等方面所固有的限制越来越难以胜任此任务。因此,采用新的I/O 接口技术来解决数据传输这一瓶颈问显得日益突出,LVDS 这种高速低功耗接口标准为解决这一瓶颈问题提供了可能。 LVDS (Low Voltage Differential Signaling) 即低压差分信号是适应高速数据传输和低功耗的一种通用点对点物理接口技术。它使用一种低摆幅差分信号技术,使得
2、信号能在差分PCB线对或平衡电缆上以几百Mb/s的速度传输,其低摆幅和低电流驱动输出实现了低噪声和低功耗。本次设计拟将设备接入通用PC以方便控制和数据验证。然而与PC机连接的接口有多种,如串口,并口,USB接口等,鉴于如下原因本设计采用USB接口:USB具有传输速度快(USB1.1是12Mbps,USB2.0是480Mbps, USB3.0是5 Gbps),使用方便,支持热插拔,连接灵活,独立供电等优点,可以连接鼠标、键盘、打印机、扫描仪、摄像头、闪存盘、MP3机、手机、数码相机、移动硬盘、外置光软驱、USB网卡、ADSL Modem、Cable Modem等,几乎所有的外部设备。USB接口可
3、用于连接多达127个外设,如鼠标、调制解调器和键盘等。USB自从1996年推出后,已成功替代串口和并口,并成为当今个人电脑和大量智能设备的必配的接口之一。1.2 课题相关技术的发展与现状1995年11月,以美国国家半导体公司为主推出了ANSFTIAjEIA一644标准1996年3月,IEEE公布了IEEE1596.3标准。这两个标准注重于对LVDS接口的特性、互连与线路端接等方面的规范,对于生产工艺、传输介质和供电电压等没有明确。LVDS可采用CMoS、GaAs或其他技术实现,其供电电压可以从+5到+3.3v,甚至更低;其传输介质可以是PCB连线,也可以是特制的电缆。推荐的最高数据传输速率是6
4、55MbPs,而理论上,在一个无衰耗的传输线上,LVDS的最高传输速率可达1.923GbPs。近年来,现代高性能微处理器的速度已经突破了IGHz,芯片间的传输速率也达到儿百兆赫兹,在cMOs电路系统中进行600MbPs以上的信号传输已经不可避免。在众多用于高速数据传输的接口电平形式中,只有LvDS能够实现高速度、低功耗、低噪声以及低成本的结合而无需折衷。因此,国际上对LVDS及其相关产品的研究开发十分活跃,各大公司均推出了LVDS信号的ASICFO接口单元产品系列,如国家半导体公司的DS90、Ds92系列速度达到600MbPs,德州仪器公司的SN65LVDS和SN75LVDs系列速度达到400
5、Mbps600Mbps. FARADAY公司的IJVDST80HgOA和FXLVIX08ollAOA系列速度达到600Mbps左右,富士通公司的CE61、CE71系列的速度也达到了300MHz400MHz。这些产品在高性能计算机、电讯、通讯、显示及消费电子等领域得到广泛的应用。LVDS高速/O接口单元是高性能计算机和通讯电子设备中重要的构件,直接影响到系统性能。但是,国外把这些研究成果都作为核心机密。为了掌握高性能计算机中的这项重要技术,我们必须研究开发具有自主知识产权的 LvDS1/0接口单元。LVDS高速FO接口单元包括LVDS驱动器、LVDS接收器和LVDS偏置单元。1.3 本课题的研究
6、意义目前存在的点对点物理层接口如RS-422,RS-485,SCSI 以及其它数据传输标准由于其在速度、噪声/EMI、功耗、成本等方面所固有的不足。本次研究的LVDS和USB总线组成的高速数据传输装置拟在克服传统接口的不足,实现高速稳定的数据传输,并通过USB接口器件与计算机友好链接,通过计算机对数据进行时时控制与检测。因此本次研究具有很重要的应用意义。1.4 设计要求及工作内容 设计要求:利用FPGA来控制LVDS接口芯片来发送、接收数据,然后通过USB总线将数据传输给计算机进行验证。本次设计的主要工作内容如下: (1)查阅相关资料提出设计方案; (2)利用制图软件绘制硬件原理图和PCB版图
7、; (3)编写相应的FPGA程序; (4)焊接电路板调试程序; (5)翻译一篇与本设计相关的英文资料。2 系统总体设计方案及关键技术2.1 系统总体设计方案2.1.1 系统硬件框图 直流电源模块PC机DS92LV1023CLC001主控制器FPGAUSB模块 TX CLC014DS92LV1224 RX 图2-1 VDS和USB总线组成的高速数据传输系统框图2.1.2 系统组成及各模块功能整个系统包含这样几个模块:电源模块,USB模块,主控制器模块,串行数传输模块。电源模块为整个系统提供工作电源;USB模块实现PC机与高速传输装置的数据交换;主控制器模块控制外围电路有序工作,实现数据的中转,协
8、调数据的传输;串行数据传输模块包括串化器 DS92LV1023和解串器DS92LV1224,串化器 DS92LV1023将10位并行数据转换为差分串行数据,解串器DS92LV1224将差分串行数据转换为10位并行数据。2.1.3 系统功能的实现原理本系统将实现自己发送递增数自己接收然后送到PC机验证的功能。系统的主控芯片是FPGA,它将产生一组0到8f的递增数发送给串化器 DS92LV1023。解串器DS92LV1224将总线上的差分串行数据转换成并行数据传给FPGA。FPGA将接收到的并行数据送到内部FIFO缓存。PC机上的上位机软件通过USB接口读取FPGA内部FIFO中缓存的数据,然后验
9、证接收到的数据是否为0到8f的递增数。2.2 系统设计的关键技术(1)LVDS串行传输 LVDS 信号的传输是依靠串行器和解串器成对出现相互搭配来完成的,串行器和解串器都需要外部给它们一个工作时钟。只有这两个工作时钟频率相等,串行器和解串器之间才能正常通信。由于FPGA 管脚与内部逻辑的灵活性,完全可以解决时钟频率相等的问题。串行器DS92LV1023是将外部并行数据串化成串行数据,此时该串行器输出的差分压差是100mV左右,这种小压差只能传输不到十米的距离,但加上CLC006 这款电缆驱动芯片后,其输出压差可达到2V(压差可通过电阻R23调节),这样就可以驱动双绞线传输实现长距离传输。(1)
10、 速度匹配由于本系统USB 模块传输速度最快为20Mbps,不能将数据适时的传到计算机里,LVDS每次传输需要500us的同步时间,为了让LVDS一次同步然后进行不间断的数据传输,可以通过如下方式实现: 串行器DS92Lvl023和解串器DS92LVl224有lO个数据引脚,一般都是通过8位数据进行传输的,其余2个位就可以用来标识这个8位的数据是有效数据还是无效数据。比如说用“00“来表示有效数据,用”11“来表示无效数据。首先高速数据传输装置向设备发送一个命令,告诉设备发送有效数据,此时高速传输装置检测数据是否有效,并将有效数据存入高速FIFO中,当FIFO中数据达到一个限值时,然后高速传输
11、装置又发送命令叫设备发送无效数据,当高速传输装置检测到无效数据时就将这些无效数据抛弃,又当FIFO中的数据量下降到一个限值时,高速传输装置又发送命令让设备发送有效数据。这样就可以实现让LVDS一次同步然后进行不间断的数据传输,实现数度匹配。2.3 主要芯片工作原理简介2.3.1 主控芯片FPGA本次毕业设计选用了Xilinx公司的Spartan-II系列FPGA芯片XC2S30,该款FPGA具有丰富的逻辑单元和I/O接口资源,是一种高集成度芯片。它能够完成数据的接收、缓存、以及数据传输等功能,因此整个系统就可以由一块FPGA进行控制,进而使整个系统的体积实现了小型化,功耗也随之大大降低。XC2
12、S30的内部结构如图2-2所示:图2-2 XC2S30内部结构框图XC2S30 FPGA芯片有一个定期的、灵活的、可编程架构的可配置逻辑块(CLBs),在它的四周包围着可编程输入/输出模块(IOBs),在四个角落里分布着4个延时锁相环(DLLs),在CLBs和IOBs之间分布着两列块RAM,所有的功能模块通过强大的多功能互联通道相互连接。2.3.2 LVDS芯片DS92LV1023和DS92LV1224DS92LV1023和DS92LV1224是美国国家半导体公司推出的10位总线型低压差分信号的应用芯片组。其中DS92LV1023 是可将10 位并行CMOS或TTL数据转换为具有内嵌时钟的高速
13、串行差分数据流的串化器;而DS92LV1224 则是接收该差分数据流并将它们转换为并行数据的解串器,它同时又可以重建并行时钟。采用该器件组进行数据串化时采用的是内嵌时钟,这样可有效地解决由于时钟与数据的不严格同步而制约高速传输的瓶颈问题。 DS92LV1023和DS92LV1224芯片组的管脚分布如图2-3所示,各管脚功能见表2-1 所列。 图2-3 DS92LV1023和DS92LV1224的管脚分布图 表2-1 各管脚功能串化器DS92LV1023管脚功能表解串器DS92LV1224管脚功能表3.3.3 USB接口芯片CY7C68013 一般USB的接口芯片种类大致可分为:主控制器、根集线
14、器、接口芯片以及具有USB接口的微控制器。所谓的接口芯片,即是仅包含USB的串行接口引擎、FIFO内存、收发器以及电压调整器的芯片。Cypress公司的EZ-USB FX2系列芯片是世界上第一款集成了USB 2.0接口的微控制器,包括了USB接口和8051兼容的指令系统。EZ-USB FX2LP系列芯片为其低功耗的版本。本设计利用的是EZ-USB FX2LP系列的CY7C68013A-128PIN芯片。其内部结构如图2-4所示。CY7C68013A主要包括USB2.0收发器、串行引擎(SIE)、增强型8051内核、16KB的RAM、4KB的FIFO存储器、I/O接口、数据总线、地址总线和通用可
15、编程接口(GPIF)。 图2 -4 CY7C68013结构框图3 系统硬件设计3.1系统电源电路本系统中主控芯片FPGA内核工作电压为1.8V,输出电压源电压为3.3V。故本系统选用+5V作为电源输入电压,采用TPS767D325电源转换芯片将5V的电压转换为稳定的3.3V和1.8V,为FPGA提供工作电压,FPGA供电电路如图3-1所示: 图3-1 FPGA电源电路本系统中FPGA模块与CY7C68013模块分开供电,CY7C68013模块采用USB接口提供的+5V电压作为电源输入电压,采用TPS767D325电源转换芯片将5V的电压转换为稳定的3.3V,为CY7C68013提供工作电压,C
16、Y7C68013供电电路如图3-2所示: 图3-2 CY7C68013电源电路3.2 FPGA时钟电路晶振是为电路提供频率基准的元器件,本设计采用60MHz的有源贴片晶振作为芯片工作的时钟输入,它可以提供高精度的频率基准,信号质量较好。FPGA时钟电路如图3-3所示: 图3-3 FPGA时钟电路 3.3 FPGA配置电路FPGA的配置方式灵活多样,根据芯片是否能够自己主动加载配置数据,分为主模式、从模式及JTAG模式。典型的主模式都是加载片外非易失性存储器中的配置比特流,配置所需的时钟信号(称为CCLK)由FPGA内部产生,且FPGA控制整个配置过程。FPGA上电后,自动的将数据从相应的外存储
17、器读入到SRAM中,实现内部结构映射。根据比特流的位宽有可以分为串行模式和并行模式两大类。本设计利用主串模式进行配置FPGA,如图3-4。 图3-4 FPGA配置电路其中PROM选择官方推荐的XCF02S。CCLK为配置时钟。PROG为配置逻辑异步复位。DONE为启动控制。TMS、TCK、TDI、TDO分别为边界扫描模式选择、时钟、数据输入及数据输出。104电容为内部电源输入引脚的去耦电容。3.4 CY7C68013启动配置电路CY7C68013芯片的程序和数据存放在内部的RAM中,并从RAM中开始执行。但是,在掉电的时候,RAM中的程序和数据都将丢失。只有在USB上电的时候,USB主机将程序
18、和数据下载到RAM中执行。其上电的处理类型有以下几种。l 无EEPROM启动l 0xC0的EEPROM启动l 0xC2的EEPROM启动l 地址/数据总线的外存储器启动本设计采用0xC0的EEPROM启动方式。即在EEPROM中首字节写入0xC0,并将VID、PID、DID和配置字节写入EEPROM。芯片上电后,将这些数据复制到片内存储器,并将其发送给主机,由主机根据ID数据选择合适的固件程序下载到USB芯片内。本设计使用具有I2C总线接口的串行EEPROM芯片AT24C64。AT24C64具有8192 x 8位容量,可重复擦除100万次。其电路连接如图3-5所示。图中R40、R41为I2C总
19、线线路的上拉电阻,确保数据能够正常传输。 图3-5 CY7C68013启动配置电路3.5 CY7C68013时钟,USB插口,复位电路本系统中CY7C68013的工作频率为24MHZ,图3-6左及是为CY7C68013提供工作频率的电路,其中22P电容C171和C172帮助晶振起振。图3-6中为USB电缆连接口电路。CY7C68013是通过低电平复位,其上电复位电路如图3-6右所示。 图3-6 CY7C68013时钟,USB插口,复位电路3.6 串行器 DS92LV1023 连接电路串行器 DS92LV1023 是将外部并行数据串化成串行数据 此时该串行器输出的差分压差约 100mV 该差分压
20、差传输距离只有几米 加上 CLC001 电缆高速驱动器 其输出压差可达 2V 这样就可以驱动同轴电缆传输 300m 的距离 图 3-7 为 LVDS 发送电路。串行器 DS92LV1023与FPGA通过排阻RP10,RP11,RP12相连,排阻在这里起限流作用。 图3-7 串行器 DS92LV1023 连接电路3.7 解串器DS92LV1224连接电路解串器DS92LV1224是一款LVDS芯片,它将串行器 DS92LV1023 发送到总线上的差分串行数据转换为并行数据。芯片CLC014是自适应均衡器,它能够自动补偿信号损耗 使电缆传输的串行数字信号能够重新恢复其原有性能 利用这一特点 并采用
21、高速串行数字接口 SDI SerialDigitalInterface 自适应电缆均衡器及电缆驱动器构建系统可扩大LVDS 技术的数据传输范围 实现高速长距离数据传输因此 本系统采用 DS92LV1023 型 LVDS 器件 CLC006 型高速驱动器以及 CLC014 型自适应均衡器构建的系统设计。LED7为LVDS锁定指示灯,LVDS串化器端口连续发送由六位0及六位1组成的同步信号,然后由解串器锁相环试图锁定到内嵌时钟。一旦锁定成功,即可置LOCK 管脚为低,FPGA将LED7对应管脚值高即可点亮指示灯。 图3-8 解串器DS92LV1224连接电路4 系统软件设计4.1 系统软件顶层结构
22、 系统软件顶层模块如图4-1所示。该模块管脚说明如下:Rdclk:CY7C68013读取FPGA内部FIFO时的读数时钟管脚;Lvdsin(9:0):FPGA与解串器DS92LV1224的数据输出口ROUT09的链接管脚;Rclk:连接解串器DS92LV1224的重建时钟管脚RCLK;Clk60M:整个软件系统的60M外部时钟输入;Refclk:连接解串器DS92LV1224的参考时钟输入管脚;Half:FPGA内部FIFO的半满信号输出,连接外部LED指示灯;Empty:FPGA内部FIFO的空指示信号,连接外部LED指示灯;Fifodata(7:0):相连CY7C68013的GPIFD07
23、,通过他们读取FPGA 内部FIFO数据;Ren:连接解串器DS92LV1224的输出允许管脚REN;Rclk_rf:连接解串器DS92LV1224的RCLK-R/F管脚选择重建时钟的触发沿;Full1:FPGA内部FIFO溢出信号标志,连接外部LED指示灯;Full:FPGA内部FIFO数据满信号标志,连接外部LED指示灯;Tclk:连接串化器DS92LV1023的发送时钟输入端TCLK;Sync:连接串化器DS92LV1023的sync管脚,该脚置1时发送连续同步信号;Tclk_rf:连接串化器DS92LV1023的TCLK-R/F,选择发送时钟触发沿;Lvdsout(9:0):连接串化器
24、DS92LV1023的数据输入管脚din09; 图4-1 系统软件顶层模块 系统软件顶层结构图如图4-2所示,其中重要的模块有三个:usbfifo模块,缓存接收到的数据等待上位机的读取;send_lvds模块,发送0到8f的递增数给串化器DS92LV1023让其转换为差分串行数据发送出去;receive_lvds模块,接收解串器DS92LV1224送来的并行数据。锁相环模块CLKDLL将60M输入信号2倍频后作为软件系统的工作时钟。复位模块reset产生复位信号可实现系统的软件复位。Xiaodou1,xiaodou2分别对rdclk和rclk进行消抖防止意外干扰。 图4-2 系统软件顶层结构4
25、.2 数据接收模块的软件实现 接收解串器DS92LV1224送来的并行数据并对数据的有效性进行判断,如果是有效数据就将数据送往usbfifo并增加usbfifo的地址置写usbfifo的标志wrflag,如果是无效数据就抛弃。数据的有效与无效是通过rout(9 downto 8)来判断的,这两位如果是01则表示rout(7 downto 0)是一个有效数据,否者为无效数据。数据接收模块的原理图如图4-3所示: 图4-3 数据接收模块数据接收模块的VHDL程序实现如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARIT
26、H.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity receive_lvds is port( fosc:in std_logic;-120M时钟输入 rout: in std_logic_vector(9 downto 0); rst: in std_logic; rclk
27、_rf: out std_logic; refclk : out std_logic; -20M的参考时钟给1224 rclk: in std_logic; -重建时钟输入 wrflag:out std_logic; fifowr:out std_logic; ren : out std_logic; fifodata: out std_logic_vector(7 downto 0) -将数据写入FIFO);end receive_lvds;architecture Behavioral of receive_lvds issignal lvds_data_in: std_logic_vec
28、tor(9 downto 0);signal rclk_reg:std_logic;signal clk_counter : integer range 0 to 10:=0;signal clk : std_logic;signal ren1 : std_logic;beginrclk_rf=1;refclk=clk;lvds_data_in= rout;rclk_reg=rclk;fifowr=rclk_reg;fifodata=lvds_data_in(7 downto 0); ren=ren1;ren1=1;-产生20M时钟给解串器DS92LV1224作为参考时钟输入p1: proce
29、ss(rst, fosc) begin if rst=0 then clk_counter=0;clk=0; elsif fosc event and fosc=1 then if clk_counter=3 then clk= not clk;clk_counter=0; else clk_counter= clk_counter+1; end if; end if; end process p1;-对数据有效性进行判断,接收有效数据 p2: process(rst, rclk_reg)beginif rst=0 thenwrflag=0;elsif rclk_regevent and rc
30、lk_reg=1 thenif lvds_data_in(9 downto 8)=01 thenwrflag=1;elsewrflag=0;end if;end if;end process p2; end Behavioral;4.3 数据发送模块的软件实现 数据发送模块如图4-4所示。数据发送模块首先连续发送100次由五位1及五位0组成的同步信号,以便解串器锁相环锁定到内嵌时钟。如果usbfifo未满,则该模块产生0到8f的递增数并发送给串化器DS92LV1023让其转换为差分串行数据发送出去,并置有效数据标志din(9 downto 8)=01;。如果usbfifo已满则发送无效数据11
31、11100000。 图4-4 数据发送模块数据发送模块的VHDL程序实现如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity send_lvds is Port ( clk: in std_logic; -输入120M时钟, 发送一个字节的数据需要8个状态,及发送时钟为15MHZ rst: in std_logic; full : in std_logic; din : out std_logic_vector(9 downt
32、o 0); tclk : out std_logic; sync : out std_logic; tclk_rf : out std_logic );end send_lvds;architecture Behavioral of send_lvds issignal synctemp: std_logic;signal f_data1:std_logic_vector (7 downto 0);type femo is (yb0,yb1,yb2,yb3,yb4,yb5,yb6,yb7,state0,state1,state2,state3,state4,state5,state6,stat
33、e7,state8,state9,state10,state11,state12,state13,state14);signal fm_state : femo;signal yb_count : integer range 0 to 110:=0;begintclk_rf=1;sync=synctemp;synctemp=0; process(rst,clk)beginif rst=0 thentclk=0;f_data1=X00;fm_state=yb0;din=0000000000;yb_count tclk=0;fm_statefm_state din=1111100000;fm_st
34、ate fm_state tclk=1;fm_statefm_state fm_state if yb_count= 100 then fm_state=state0; else yb_count=yb_count+1;fm_statetclk=0;if full=1 thenfm_state=state1;elsefm_statefm_state if f_data1 = X8F then f_data1=X00; else f_data1= f_data1+1; end if; din(7 downto 0)=f_data1; din(9 downto 8)=01;fm_state fm_
35、state tclk=1; fm_statefm_state fm_state fm_statefm_state din(9 downto 0)=1111100000;fm_state fm_state tclk=1; fm_statefm_statefm_state fm_statefm_state=state0;end case;end if;end process;end Behavioral;4.3 usbfifo模块的软件实现4.3.1 usbfifo模块的顶层结构 Usbfifo功能模块如图4-5所示。数据接收模块receive_lvds将接收到的有效数据写入usbfifo缓存,上
36、位机通过USB接口经datain(7:0)读取缓存中的数据,usbfifo根据其内部的数据量置empty,full,halffull,full1标志,数据发送模块根据这些标志来决定发送有效数据还是无效数据。图4-5 usbfifo模块 usbfifo模块内部结构如图4-6所示。总共有四个模块:wraddr11,当wrflag置1即数据接收模块接收到有效数据时将有效数据写到fifo4k缓存中,该模块提供12位缓存地址;rdaddr11,当CY7C68013读取fifo中的数据时,该模块提供12位的缓存地址;usbfifoctrl,该模块根据读地址和写地址计算fifo4k中的数据量并置相应标志;f
37、ifo4k,该模块为usbfifo的4k存储空间。图4-6 usbfifo模块内部结构4.3.2 写地址产生模块的软件实现 写地址产生模块原理图如图4-7所示。当wrflag置1即数据接收模块接收到有效数据时将有效数据写到fifo4k缓存中,该模块提供12位缓存地址。 图4-7 写地址产生模块写地址产生模块的VHDL程序实现如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity wraddr11 isport(fosc : in
38、 std_logic;rst: in std_logic;wrflag : in std_logic;wraddr: out std_logic_vector(11 downto 0);end wraddr11 ;architecture behavior of wraddr11 issignal cont: std_logic_vector(11 downto 0);beginwraddr=cont; main :process(fosc,rst) begin if rst=0 thencont=000000000000;elsif fosc event and fosc=0 then if wrflag=1 thenif cont=111111111111 thencont=000000000000; elsecont=cont+1;end if; else cont=cont; end if;end if;end process main;end behavior;4.3.3 读地址产生模块的软件实现读地址产生模块原理图如图4-7所示。当CY7C68013读取fifo中的数据时该模块提供12位的缓存地址图4-8 读