位单片机与以太网控制器RTL8029接口的VHDL设计
读配置的过程:首先送地址,送命令(命令值为1010B)和字节使能,再读配置空间中的内容。
写配置的过程:首先送地址,送命令(命令值为101lB)和字节使能,再送配置数据。
读I/O的过程:首先送地址,送命令(命令值为0010B)和字节使能,再读I/O空间中的内容。
写I/O的过程:首先送地址,送命令(命令值为001lB)和字节使能,再送数据。
在I/O访问中,AD[1:O]两位有特殊要求,需要与C/BE[3:0]相配合。当C/BEO有效时,AD[1:O]必须为00,当C/BE3有效时,AD[1:0]必须为11。在具体访问中,每当一个设备地址译码选中后,便要检查字节使能信号是否与AD[1:0]相符。如果二者矛盾,则整个访问将无法完成。因此,写单片机软件需要参考PCI总线协议中关于这一部分的内容,才能正确操作以太网控制器。
总线命令/字节使能(C/BE)寄存器的地址有效后的一个时钟周期内,FRAME信号应该有效,表示地址期开始,C/BE[3:0]总线上为总线命令,地址期可以只持续一个周期,然后立即进入数据期。在单片机系统中可以不考虑去支持复杂的PCI数据连发,进入数据期后,FRAME信号应立即拉回高电平,此时C/BE[3:0]总线上为字节使能。因此FRAME信号可以用总线命令/字节使能寄存器的地址信号来产生。
IRDY信号在数据期才有效,因此IRDY也可以由总线命令/字节使能寄存器的地址信号来产生或由FRAME信号来产生。
IDSEL信号只与配置访问有关,因此可以通过总线命令的命令字来产生。在I/O访问时。命令字的最高位bit3为O;在配置访问时。命令字的最高位bit3为l。因此,可以用该位来产生IDSEL信号。
另外前面已说明,可将PCI接口当作外部存储器来访问,因此,要从8位数据转换成32位的数据。PCI接口中需要设计以下寄存器:
寄存器0,对应于32位数据/地址总线的AD[7:0],用于写;
寄存器1,对应于32位数据/地址总线的AD[15:8],用于写;
寄存器2,对应于32位数据/地址总线的AD[23:16],用于写;
寄存器3,对应于32位数据/地址总线的AD[31:24],用于写:
寄存器4,对应于32位数据/地址总线的AD[7:O],用于读;
寄存器5,对应于32位数据/地址总线的.AD[1 5:8],用于读;
寄存器6,对应于32位数据/地址总线的AD[23:16],用于读;
寄存器7,对应于32位数据/地址总线的AD[31:24],用于读;
总线命令/字节使能寄存器,对应于C/BE[3:0];
复位寄存器,用于对RTL8029AS的硬件复位操作。
根据以上分析,得PCI接口原理框图,如图3所示。
3 接口的VHDL实现
PCI接口的VHDL代码见本刊网站:www.dpj.com.cn。
以上代码在Qaartus II下编译并综合,占用149个宏单元的资源,可选用CPLD器件MAx7l60来完成。
4 结语
本文所阐述的设计方法,已成功应用在无线电监测系统的远程控制中,通过5l单片机系统接入以太网,实现了在网络上对远程机房设备的无人监控。
评论