摘要:本文阐述了32位软核处理器NIOS II以太网接口的实现方法,结合SOPC可以灵活配置的特点,定制了硬件系统,给出了软件设计的主要流程及部分实现要点。在FPGA上构建SOPC系统,并在NIOS II上移植了操作系统uClinux,编写了软件驱动程序,通过PC向片上可编程系统发数据包,可以从以太网接口获得所有数据包的返回信息。实验表明,以NIOS II和DM9000A以太网控制器构成的网络化测控系统,结构简单、性能稳定可靠。
随着信息技术特别是网络技术的发展,如何将电子设备网络化,以便人们能够远程获取信息,远程控制设备的运行,已成为业界关注的焦点。因特网应用包括视频游戏控制台、机顶盒、智能家电,以及测量控制系统等。这类系统需要通过以太网进行通信和数据处理,以太网接口设计与实现是其中关键部分。
可编程片上系统SOPC是ALTERA公司针对复杂电子系统设计提供的一种解决方案。利用Quartus II及相关设计软件,工程师可以灵活定制硬件电路,开发专用软件程序,构建完整的嵌入式系统。NIOS II是ALTERA公司提供的一个软核精简指令处理器,它可以自定制指令,远程硬件升级,在网络化测试控制系统中最能体现它的优势。
本文首先介绍了采用NIOS II构建片上可编程片上系统SOPC的过程,接着给出了采用DM9000A的以太网接口的硬件框图,使用Verilog HDL设计了外设接口电路。最后分析软件设计中的技术要点。
本设计中采用了ALTERA公司的CYCLONE II系统中的器件EP2C35F672,定制了一个32位的RISC,外加SDRAM控制器、内部定时器以及用户自定义的以太网接口电路。硬件电路如图1所示。
通过SOPC Builder可以很快在FPGA上构建一个嵌入式系统。首先,定制软核NIOS II,高速CPU,提供分支预测,4 Kbyte指令缓冲器,4 Kbyte指令缓冲器,硬件乘法器,支持JTAG下载调试;8M SDRAM 用来存放用户数据和程序;设计用户接口电路与DM9000A 连接,采用Verilog HDL编写DM9000A和NIOS II系统连接逻辑电路,实现高速以太网通讯。运行SOPC Builder生成系统文件,创建在NIOS II硬件系统上运行软件系统所需的支撑文件,提供给软件开发程序NIOS II集成开发环境。同时,生成硬件描述语言文件,描述系统的硬件信息,Quartus II
软件使用这些文件来编译整个FPGA设计项目。
使用SOPC Builder中的组件编辑器可以把用户外设和系统连接起来。外设既可以放在N10S II系统里面,也可以放在系统外部,这里采用DM9000A以太网控制器,使用片外方式。根据DM9000A各个引脚不同的功能和类型,把它们和FPGA的引脚连接。设定DM9000A 为AVALON总线的从器件,通过AVALON总线与NIOS II系统相连。这里用到了AVALON总线模块的16位输入输出数据信号线,一位地址线,低电平有效的读写信号线,片选和复位信号线,以及中断请求信号线。编写Verilog HDL程序,把这些线和DM9000A对应的数据线,命令信号线、读写信号线等连接起来。
使用SOPC Builder定制硬件系统,把Quartus II软件生成的配置文件下载到FPGA以后,就可以开始编写以太网接口驱动程序。一个完整的驱动程序包括:以太网控制芯片的初始化,数据包的发送,数据包的接收。
2.1 芯片的初始化
网络控制器芯片的初始化为系统配置正确参数,包括NIOS II将适当的值加载到配置寄存器和地址寄存器中,并使网络控制器正常工作。通常需要配置的参数有:数据总线的宽度、物理地址、中断服务的类型、接收缓冲区的大小、FIFO门槛值、接收的数据包类型。设定DM9000A工作在16位数据总线模式,在进行以太网数据传输前,激活以太网芯片物理层,进入介质访问控制回环模式,软件复位DM9000A。设置物理层的工作模式,储存MAC地址。清理未处理的中断,设定工作寄存器,使芯片工作在标准模式。允许提前发送,打开接收中断允许,跳过CRC包和长包。完成以上工作,就可以进行正常的数据收发。
2.2 数据包的发送
在发送一个数据包之前,必须将数据存在FIFO静态RAM 中。同时,使索引端口指向RAM 的发送地址,在DM9000A中有3Kbyte的静态RAM存储空间作为发送缓冲区,地址范围是0~0xbff。下面是发送一个数据包的流程:首先,屏蔽所有中断,当指针地址超过静态RA M地址范围时,允许读写内部静态RAM 的指针自动回到初始地址。确定要发送数据包的长度,准备写数据到静态RAM,在16位模式下,写指针每次加2。把所有数据写入发送缓冲区,请求开始发数据,发完以后自动清零。等待发送结束,网络状态寄存器清零,打开接收中断。
2.3 数据包的接收
初始化结束或数据发送结束后,DM9000A都处于接收状态。NIOS II读取DM9000A接收缓冲区的数据有查询和中断2种方式。对于处理速度较慢的处理器,如果采用中断方式,可能会因为连续的中断而导致数据的丢失。而NIOS II处理速度较快,可以采用中断方式。中断方式能使接口程序成为完全独立的模块,能够方便地与上层TCP/IP协议模块接口。图2是NIOSII接收数据的程序流程图。
图2 数据包接收流程图
我们在ALTERA 公司的DE2板上移植了操作系统uClinux,通过PC执行PING命令,可以从DE2板得到以太网口返回的所有数据信息。软件驱动程序也能够与TCP/IP模块方便接口。实验证明,整个系统的结构简单灵活,工作可靠。硬件使用ALTERA公司提供的NIOS II以及外设控制IP核,同时编写硬件描述语言程序,加入用户器件。