毕业设计论文基于USB的LVDS数据传输

上传人:仙*** 文档编号:145431402 上传时间:2022-08-29 格式:DOC 页数:41 大小:2.94MB
收藏 版权申诉 举报 下载
毕业设计论文基于USB的LVDS数据传输_第1页
第1页 / 共41页
毕业设计论文基于USB的LVDS数据传输_第2页
第2页 / 共41页
毕业设计论文基于USB的LVDS数据传输_第3页
第3页 / 共41页
资源描述:

《毕业设计论文基于USB的LVDS数据传输》由会员分享,可在线阅读,更多相关《毕业设计论文基于USB的LVDS数据传输(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

39、 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 读地址产生模块读地址产生模块VHDL程序实现如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logi

40、c_arith.all;use ieee.std_logic_unsigned.all;entity rdaddr11 isport(fosc : in std_logic;rst : in std_logic;rdaddr: out std_logic_vector(11 downto 0);end rdaddr11;architecture behavior of rdaddr11 issignal cont10: std_logic_vector(11 downto 0);beginrdaddr=cont10; main :process(fosc,rst) begin if rst=0

41、 thencont10=000000000000;elsif fosc event and fosc =0 thenif cont10=111111111111 thencont10=000000000000;elsecont10=cont10+1;end if;end if;end process main;end behavior;4.3.4 usbfifo控制模块的软件实现 Usbfifo控制模块的原理图如图4-9所示。该模块根据读地址和写地址计算fifo4k中的数据量并置相应标志。图4-9 usbfifo控制模块Usbfifo控制模块的VHDL软件实现如下:library ieee;u

42、se ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity usbfifoctrl isport( fclk : in std_logic;wraddr : in std_logic_vector(11 downto 0); rdaddr : in std_logic_vector(11 downto 0);empty : out std_logic;full : out std_logic;full1 : out std_logic; halffull : out

43、 std_logic);end usbfifoctrl;architecture behavior of usbfifoctrl issignal offset: std_logic_vector(11 downto 0);begin offsetrdaddr) else (4095+wraddr-rdaddr);p0:process(fclk) begin if(fclk event and fclk=1)then if offset0 then empty=1 ; else empty=512then halffull=0 ; else halffull=3500 then full=0

44、; else full=4096 then full1=0 ; else full1=1 ; end if;end if;end process p0;end behavior;4.3.5 fifo4k的软件实现4.3.5.1 fifo4k的顶层结构Fifo4k模块的原理图如图4-10所示。该模块为usbfifo提供4k存储空间,写数据时db(7:0)上的数据将被送到adda(11:0)指定的存储位置。读数据时addb(11:0)地址处得数据被送到dq(7:0)端口上。图4-10 fifo4k模块 fifo4k模块内部结构如图4-11所示。从图中可以看到fifo4k模块由8个4k一位存储器组成

45、的4k字节存储空间和一个输入缓存和输出缓存构成。图4-11 fifo4k模块内部结构4.3.5.1 数据输入缓存模块的软件实现图4-12 数据输入缓存模块数据输入缓存模块的VHDL实现如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity data_split isport( di: in std_logic_vector(7 downto 0); wrdat0: out std_logic; wrdat1: out std_l

46、ogic; wrdat2: out std_logic; wrdat3: out std_logic; wrdat4: out std_logic; wrdat5: out std_logic; wrdat6: out std_logic; wrdat7: out std_logic);end data_split;architecture Behavioral of data_split isbeginwrdat0=di(0);wrdat1=di(1);wrdat2=di(2);wrdat3=di(3);wrdat4=di(4);wrdat5=di(5);wrdat6=di(6);wrdat

47、7=di(7);end Behavioral;4.3.5.2 数据输出缓存模块的软件实现图4-12 数据输出缓存模块数据输出缓存模块的VHDL实现如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity data_unite4 isport( rd0: in std_logic; rd1: in std_logic; rd2: in std_logic; rd3: in std_logic; rd4: in std_logic;

48、rd5: in std_logic; rd6: in std_logic; rd7: in std_logic; d: out std_logic_vector(7 downto 0);end data_unite4;architecture Behavioral of data_unite4 isbegind=rd7 & rd6 & rd5 & rd4 & rd3 & rd2 & rd1 & rd0;end Behavioral;4.4 消抖模块的软件实现 整个软件模块中有两个消抖模块Xiaodou1,xiaodou2,他们分别对rdclk和rclk进行消抖防止意外干扰。它的功能结构如图4-

49、13所示。图4-13 消抖模块消抖模块的VHDL软件实现如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-use UNISIM.VComponents.all;entity xiaodou1 isport( glrn: in std_logic; rclk : in std_logic;lclkout : out std_logic;clk : in std_logic );end xiaodou1;architecture Beha

50、vioral of xiaodou1 isbeginp :process(clk,glrn) variable count1 : std_logic_vector(1 downto 0); variable s_lclkout : std_logic; begin if glrn=0 then-对LVDS接收器串转并后的并行数据时钟信号rclk进行消抖count1:=00; s_lclkout:=1; elsif clk event and clk=1 then if rclk=0and count1(1)=0and s_lclkout=1 then count1:=count1+1; s_lclkout:=1;elsif rclk=0and count1(1)=1and s_lclkout=1then count1:=00;s_lclkout:=0;elsif (rclk=1and count1(1)=0and s_lclkout=0) then count1:=count1+1; s_lclkout:=0;elsif (rclk=1and count1(1)=1and s_lclkout=0) then count1:=00; s_lclkout:=1;elsecount1:=00;end if;lclkout=s_lclkout;End if;end process

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!