引 言
当时,高密度可编程逻辑器材CPLD,因为具有巨大的灵活性而广泛运用于状况机、同步、译码、解码、计数、总线接口、串并转化等许多方面,并且在信号处理范畴的运用也活泼起来。通用串行总线(USB,Universal Serial Bus)接口既是一种快速、双向、廉价、能够进行热插拔的串行接口技能,也是一种体系齐备的通信协议,已逐步成为计算机的干流接口。USB接口的收发模块用于进行数据编码和与外部相连。本文首要介绍运用CPLD完结通用串行总线(USB)接口收发模块。
1、USB收发模块的数据标准和通信协议
1.1 USB的数据编码办法
USB体系在进行串行数据传输时,运用一种NRZI(None Return Zero Invert ,即不归零反向码)的编码方案。在该编码方案中,“1”表明电平不变,“0”表明电平改动。图1
给出了一个数据流和它的NRZI编码。
假如直接运用这样的编码办法会遇到一个很严峻的问题:若重复相同的“1”信号继续进入时,就会使电平长期无法转化,逐步堆集然后导致读取数据发生严峻的脱节。为了保证信号发送的精确性,当在USB总线上发送一个数据包时,传输设备就要进行位刺进操作。所谓位刺进操作是指在数据被编码前,在数据流中每6个接连的“1”后边刺进一个“0”,然后逼迫NRZI码发生变化。
位刺进操作如图2所示。USB数据的传送是由低位到高位。每包数据的开端是一个同步格局,同步格局固定为80H。从同步格局开端,位刺进操作贯穿于整个数据传输进程,在同步格局后的数据“1”作为真实数据流的第一位。位刺进操作是由传输端强制履行的。
1.2 USB收发模块作业进程
USB收发模块的发送单元由串行化﹑位刺进﹑NRZI编码等几部分组成;接纳单元由NRZI解码﹑反位刺进﹑并行化等组成。整个收发单元的作业进程如下:发送端在数据发送前,首要要将并行数据串行化,然后进行位刺进,最终进行NRZI编码;接纳端在接纳数据前就必须先履行NRZI解码,然后进行反位刺进,最终进行串行数据并行化。
2、USB收发模块的规划流程
运用VHDL言语进行USB收发模块的规划选用自下而上的规划办法,即先规划其各部分功用单元,再编写顶层文件调用各功用单元以完结其全体功用。依据USB收发模块的作业进程能够确认其规划流程。下面以发送模块为例,介绍各模块的详细完结。
2.1 串行化部分的规划
USB收发模块传输的数据都是串行数据,一个串行数据由10位组成:1位发动位,8位数据位,1位中止位。因为体系内部处理的都是并行数据,所以在发送之前应该进行并行数据串行化处理。串行化的进程是将输入的并行数据按由低位到高位的次序存入一个有序数组中,并按串行数据格局进行编码。依据这一原理能够编写VHDL程序完结串行化功用。
2.2 位刺进部分的规划
在位刺进部分的规划中,最要害的进程是计数器的设置和运用。位刺进的进行与否由计数器的值决议,而计数器的值则由输入串行数据的状况直接决议。因为只需在接连输入6个“1”之后,即计数器的值为6时才进行一次位刺进,而在计满6个数之前,只需有一位输入的串行数据为“0”,则计数器当即清零。因而,在每读入一位数据之后,就要判别其是否为“1”,以决议计数器加一仍是清零。正是因为计数器状况极易发生改动,所以增加了编程的杂乱性。
2.3 NRZI编码部分的规划
NRZI编码的原理如前所述。
2.4 数据传输操控办法
为了能对数据位进行精确的操作,选取每位数据包括4个时钟周期(CLK)。例如低速1.5Mbit/s的作业时钟应选取为6MHz 。在串行数据发送操控器中设置了一个2位的时钟计数器,运用该计数器高位的状况来发生数据发送时钟(TXCLK),在每个发送时钟的上升沿发送一位数据。串行数据发送进程的波形如图3所示。
最终,在完结各功用单元规划的情况下,编写顶层文件调用各个功用单元,以完结USB收发模块的全体功用。在顶层文件中设置了外部输入和输出端口,作为信号和数据进出发送模块的端口;一起还界说了许多不同的中心变量和信号,用以将各个功用单元连接起来,然后完结数据和信号从输入到输出的接连作业进程。
3、USB收发模块的部分VHDL源代码
下面针对串行数据的NRZI编码,给出USB收发模块的部分VHDL程序源代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY NRZI IS
PORT (EN : IN STD_LOGIC;
IND1 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
OUT1 : OUT STD_LOGIC_VECTOR(8DOWNTO 0));
END NRZI;
ARCHITECTURE behav OF NRZI IS
BEGIN
PROCESS(EN)
BEGIN
IF EN =‘1’ THEN OUT1(0) 《= ‘1’;
IF IND1(0)=‘1’ THEN OUT1(1) 《=OUT1(0);
ELSIF IND1(0)=‘0’ THEN OUT1(1) 《= NOT(OUT1(0));
END IF;
END IF;
IF IND1(1)=‘1’ THEN OUT1(2) 《=OUT1(1);
ELSIF IND1(1)=‘0’ THEN OUT1(2) 《= NOT(OUT1(1));
END IF;
END IF;
… … …
IF IND1(7)=‘1’ THEN OUT1(8) 《=OUT1(7);
ELSIF IND1(7)=‘0’ THEN OUT1(8) 《= NOT(OUT1(7));
END IF;
END IF;
END IF;
END PROCESS;
END behav;
在能够表现模块功用的前提下,该程序中的输入与输出均设置为八位串行数据,但输出开端位设置为
“1”,实践输出为九位。在实践运用中输入与输出数据均有或许超出八位,但也仅仅增加了编程的杂乱性,其规划办法并不发生改动。
4、仿真成果
USB收发模块串行数据NRZI编码单元的VHDL源代码经过MAXPLUSⅡ软件仿真[4]后的波形如图4所示。
由图4所示的仿真波形,当使能端EN=‘1’时,电路才开端作业,输入数据和输出数据的开端位都为‘1’。将仿真波形中的输入数据IND1和输出波形OUT1与图1所示的NRZI编码原理波形比较,发现仿真波形契合NRZI编码原理,即阐明此VHDL源程序完全契合规划要求。其他各个功用单元的VHDL源代码也可用相同的办法进行仿真,将仿真所得成果与理论推导成果比较较可知各程序契合规划要求。
5、收发模块的硬件完结
在完结源程序的规划和仿真之后,能够选用可编程逻辑器材来详细完结USB收发模块的硬件功用。本规划选用Altera公司MAX3000A系列可编程逻辑器材中的EPM3032A芯片。EPM3032A的集成度为600可用门 ﹑32个宏单元﹑34个可用I/O引脚,外加电压为3.3V。这些根据EEPROM器材的组合传输推迟快至4.5ns。以上述发送模块为例,界说输入引脚为:时钟CLK,使能端EN,8位输入IN0~IN7。界说输出引脚为 :串行数据输出端口OUT。将程序下载至芯片中,即可完结该规划的硬件功用。
6、结束语
USB收发模块是USB接口的重要组成部分,传统的规划办法是运用现有的芯片组合为硬件电路。这种开发办法要遭到现有芯片可完结功用的限制,开发时间长,电路调试杂乱,规划修正困难,易发生资源糟蹋。
本文作者立异点:选用VHDL言语作为规划东西,结合相应的CPLD器材来完结USB收发模块的硬件功用,大大地缩短了规划周期,提高了规划的可靠性、灵活性,弥补了传统规划办法的缺乏。
责任编辑:gt