1.总体介绍
该 DM9000 是一款完全集成的和符合成本效益单芯片快速以太网 MAC 控制器与一般处理 接口,一个 10/100M 自适应的 PHY 和 4K DWORD 值的 SRAM 。它的目的是在低功耗和高性能进程的 3.3V 与 5V 的支持宽容。 DM9000 还提供了介质无关的接口,来连接所有提供支持介质无关接口功能的家用电话线网络设备或其他收发器。该 DM9000 支持 8 位, 16 位和 32 -位接口访问内部存储器,以支持不同的处理器。DM9000 物理协议层接口完全支持使用 10MBps 下 3 类、4 类、5 类非屏蔽双绞线和 100MBps 下 5 类非屏蔽双绞线。这是完全符合 IEEE 802.3u 规格。它的自动协调功能将自动完成配置以最大限度地适合其线路带宽。还支持 IEEE 802.3x 全双工流量控制。这个工作里面 DM9000 是非常简单的,所以用户可以容易的移植任何系统下的端口驱动程序。
2.内部寄存器
DM9000(A)包含一系列可被访问的控制状态寄存器,这些寄存器是字节对齐的,他们在硬 件或软件复位时被设置成初始值。 以下为 DM9000 的寄存器功能详解:
NCR(00H):网络控制寄存器(Network Control Register )
7:EXT_PHY:1 选择外部 PHY,0 选择内部 PHY,不受软件复位影响。
6:WAKEEN:事件唤醒使能,1 使能,0 禁止并清除事件唤醒状态,不受软件复位影响。 5:保留。
4:FCOL:1 强制冲突模式,用于用户测试。
3:FDX:全双工模式。内部 PHY 模式下只读,外部 PHY 下可读写。
2-1:LBK:回环模式(Loopback)00 通常,01MAC 内部回环,10 内部 PHY 100M 模式数 字回环,11 保留。
0:RST:1 软件复位,10us 后自动清零。
NSR (01H):网络状态寄存器(Network Status Register )
7:SPEED:媒介速度,在内部 PHY 模式下,0 为 100Mbps,1 为 10Mbps。当 LINKST= 0 时,此位不用。
6:LINKST:连接状态,在内部 PHY 模式下,0 为连接失败,1 为已连接。 5:WAKEST:唤醒事件状态。读取或写 1 将清零该位。不受软件复位影响。 4:保留。
3:TX2END:TX(发送)数据包 2 完成标志,读取或写 1 将清零该位。数据包指针 2 传输完 成。
2:TX2END:TX(发送)数据包 1 完成标志,读取或写 1 将清零该位。数据包指针 1 传输完 成。 1:RXOV:RX(接收)FIFO(先进先出缓存)溢出标志。 0:保留。
TCR(02H):发送控制寄存器(TX Control Register) 7:保留。
6:TJDIS:Jabber 传输使能。1 使能 Jabber 传输定时器(2048 字节),0 禁止。
注释:Jabber 是一个有 CRC 错误的长帧(大于 1518byte 而小于 6000byte)或是数据包重 组错误。原因:它可能导致网络丢包。多是由于作站有硬件或软件错误。
5:EXCECM:额外冲突模式控制。0 当额外的冲突计数多于 15 则终止本次数据包,1 始 终尝试发发送本次数据包。
4:PAD_DIS2:禁止为数据包指针 2 添加 PAD。
3:CRC_DIS2:禁止为数据包指针 2 添加 CRC 校验。 2:PAD_DIS2:禁止为数据包指针 1 添加 PAD。
1:CRC_DIS2:禁止为数据包指针 1 添加 CRC 校验。 0:TXREQ:TX(发送)请求。发送完成后自动清零该位。
TSR_I(03H):数据包指针 1 的发送状态寄存器 1(TX Status Register I)
7:TJTO:Jabber 传输超时。该位置位表示由于多于 2048 字节数据被传输而导致数据帧 被截掉。
6:LC:载波信号丢失。该位置位表示在帧传输时发生红载波信号丢失。在内部回环模式下 该位无效。
5:NC:无载波信号。该位置位表示在帧传输时无载波信号。在内部回环模式下该位无效。 4:LC:冲突延迟。该位置位表示在 64 字节的冲突窗口后又发生冲突。 3:COL:数据包冲突。该位置位表示传输过程中发生冲突。
2:EC:额外冲突。该位置位表示由于发生了第 16 次冲突(即额外冲突)后,传送被终止。 1-0:保留。
TSR_II(04H):数据包指针 2 的发送状态寄存器 2(TX Status Register II) 同 TSR_I 略。
RCR(05H):接收控制寄存器(RX Control Register ) 7:保留。
6:WTDIS:看门狗定时器禁止。1 禁止,0 使能。
5:DIS_LONG:丢弃长数据包。1 为丢弃数据包长度超过 1522 字节的数据包。 4:DIS_CRC:丢弃 CRC 校验错误的数据包。 3:ALL:忽略所有多点传送。 2:RUNT:忽略不完整的数据包。
1:PRMSC:混杂模式(Promiscuous Mode) 0:RXEN:接收使能。
RSR(06H):接收状态寄存器(RX Status Register )
7:RF:不完整数据帧。该位置位表示接收到小于 64 字节的帧。 6:MF:多点传送帧。该位置位表示接收到帧包含多点传送地址。 5:LCS:冲突延迟。该位置位表示在帧接收过程中发生冲突延迟。
4:RWTO:接收看门狗定时溢出。该位置位表示接收到大于 2048 字节数据帧。 3:PLE:物理层错误。该位置位表示在帧接收过程中发生物理层错误。
2:AE:对齐错误(Alignment)。该位置位表示接收到的帧结尾处不是字节对齐,即不是以 字节为边界对齐。
1:CE:CRC 校验错误。该位置位表示接收到的帧 CRC 校验错误。
0:FOE:接收 FIFO 缓存溢出。该位置位表示在帧接收时发生 FIFO 溢出。 ROCR(07H):接收溢出计数寄存器(Receive Overflow Counter Register)
7:RXFU:接收溢出计数器溢出。该位置位表示 ROC(接收溢出计数器)发生溢出。
6-0:ROC:接收溢出计数器。该计数器为静态计数器,指示 FIFO 溢出后,当前接收溢出 包的个数。
BPTR(08H):背压门限寄存器(Back Pressure Threshold Register)
7-4:BPHW:背压门限最高值。当接收 SRAM 空闲空间低于该门限值,则 MAC 将产生一 个拥挤状态。1=1K 字节。默认值为 3H,即 3K 字节空闲空间。不要超过 SRAM 大小。 3-0:JPT:拥挤状态时间。默认为 200us。0000 为 5us,0001 为 10us,0010 为 15us,
0011 为 25us,0100 为 50us,0101 为 100us,0110 为 150us,0111 为 200us,1000 为 250 us,1001 为 300us,1010 为 350us,1011 为 400us,1100 为 450us,1101 为 500us, 111 0 为 550us,1111 为 600us。
FCTR(09H):溢出控制门限寄存器(Flow Control Threshold Register)
7-4:HWOT:接收 FIFO 缓存溢出门限最高值。当接收 SRAM 空闲空间小于该门限值,则 发送一个暂停时间(pause_time)为 FFFFH 的暂停包。若该值为 0,则无接收空闲空间。1=1K 字节。默认值为 3H,即 3K 字节空闲空间。不要超过 SRAM 大小。
3-0:LWOT:接收 FIFO 缓存溢出门限最低值。当接收 SRAM 空闲空间大于该门限值,则 发送一个暂停时间(pause_time)为 0000H 的暂停包。当溢出门限最高值的暂停包发送之后,溢
出门限最低值的暂停包才有效。默认值为 8K 字节。不要超过 SRAM 大小。 RTFCR(0AH):接收/发送溢出控制寄存器(RX/TX Flow Control Register) 7:TXP0:1 发送暂停包。发送完成后自动清零,并设置 TX 暂停包时间为 0000H。 6:TXPF:1 发送暂停包。发送完成后自动清零,并设置 TX 暂停包时间为 FFFFH。 5:TXPEN:强制发送暂停包使能。按溢出门限最高值使能发送暂停包。
4:BKPA:背压模式。该模式仅在半双工模式下有效。当接收 SRAM 超过 BPHW 并且接 收新数据包时,产生一个拥挤状态。
3:BKPM:背压模式。该模式仅在半双工模式下有效。当接收 SRAM 超过 BPHW 并数据 包 DA 匹配时,产生一个拥挤状态。
2:RXPS:接收暂停包状态。只读清零允许。 1:RXPCS:接收暂停包当前状态。
0:FLCE:溢出控制使能。1 设置使能溢出控制模式。
PAR(10H -- 15H):物理地址(MAC)寄存器(Physical Address Register)
7-0:PAD0 -- PAD5:物理地址字节 0 -- 字节 5(10H -- 15H)。用来保存 6 个字节的 MA C 地址。
MAR(16H -- 1DH):多点发送地址寄存器(Multicast Address Register ) 7-0:MAB0 -- MAB7:多点发送地址字节 0 -- 字节 7(16H --1DH)。 GPCR(1EH):GPIO 控制寄存器(General Purpose Control Register) 7-4:保留。
3-0:GEP_CNTL:GPIO 控制。定义 GPIO 的输入输出方向。1 为输出,0 为输入。GPIO 0 默认为输出做 POWER_DOWN 功能。其它默认为输入。因此默认值为 0001。 GPR(1FH):GPIO 寄存器(General Purpose Register) 7-4:保留。
3-1:GEPIO3-1:GPIO 为输出时,相关位控制对应 GPIO 端口状态,GPIO 为输入时,相 关位反映对应 GPIO 端口状态。(类似于单片机对 IO 端口的控制)。
0:GEPIO0:功能同上。该位默认为输出 1 到 POWER_DEWN 内部 PHY。若希望启用 P HY,则驱动程序需要通过写“0”将 PWER_DOWN 信号清零。该位默认值可通过 EEPROM 编程
得到。参考 EEPROM 相关描述。
TCR2(2DH):传输控制寄存器 2(TX Control Register 2)
7:LED:LED 模式。1 设置 LED 引脚为模式 1,0 设置 LED 引脚为模式 0 或根据 EEPRO M 的设定。
6:RLCP:1 重新发送有冲突延迟的数据包。
5:DTU:1 禁止重新发送“underruned”数据包。
4:ONEPM:单包模式。1 发送完成前发送一个数据包的命令能被执行,0 发送完成前发送 两个以上数据包的命令能被执行。
3-0:IFGS:帧间间隔设置。0XXX 为 96bit,1000 为 64bit,1001 为 72bit,1010 为 80bi t,1011 为 88bit,1100 为 96bit,1101 为 104bit,1110 为 112bit,1111 为 120bit。 TCSCR(31H):传输校验和控制寄存器(Transmit Check Sum Control Register) 7-3:保留。
2:UDPCSE:UDP 校验和产生使能。 1:TCPCSE:TCP 检验和产生使能。 0:IPCSE:IP 校验和产生使能。
RCSCSR(32H):接收校验和控制状态寄存器(Receive Check Sum Control Status Regist er )
7:UDPS:UDP 校验和状态。1 表示 UDP 数据包校验失败。 6:TCPS:TCP 校验和状态。1 表示 TCP 数据包校验失败。 5:IPS:IP 校验和状态。1 表示 IP 数据包校验失败。 4:UDPP:1 表示 UDP 数据包。 3:TCPP:1 表示 TCP 数据包。 2:IPP:1 表示 IP 数据包。
1:RCSEN:接收检验和检验使能。1 使能校验和校验,将校验和状态位(bit7-2)存储到数 据包的各自的报文头的第一个字节。
0:DCSE:丢弃校验和错误的数据包。1 使能丢弃校验和错误的数据包,若 IP/TCP/UDP 的校验和域错误,则丢弃该数据包。
MRCMDX(F0H): 存储器地址不变的读数据命令(Memory Data Pre-Fetch Read Command Without Address Increment Register)
7-0:MRCMDX:从接收 SRAM 中读数据,读取之后,指向内部 SRAM 的读指针不变。 MRCMD(F2H):存储器读地址自动增加的读数据命令(Memory Data Read Command With Address Increment Register)
7-0:MRCMD:从接收 SRAM 中读数据,读取之后,指向内部 SRAM 的读指针自动增加 1、 2 或 4,根据处理器的操作模式而定(8 位、16 位或 32 位)。
MWCMD(F8H):存储器读地址自动增加的读数据命令(Memory Data Write Command With Address Increment Register)
7-0:MWCMD:写数据到发送 SRAM 中,之后指向内部 SRAM 的读指针自动增加 1、2 或 4,根据处理器的操作模式而定(8 位、16 位或 32 位)。
TXPLL(FCH):发送数据包长度寄存器低半字节(TX Packet Length Low Byte Register) 7-0:TXPLL
TXPLH(FDH):发送数据包长度寄存器高半字节(TX Packet Length High Byte Register) 7-0:TXPLH
ISR(FEH):终端状态寄存器(Interrupt Status Register)
7-6:IOMODE:处理器模式。00 为 16 位模式,01 为 32 位模式,10 为 8 位模式,00 保 留。
5:LNKCHG:连接状态改变。 4:UDRUN:传输“Underrun” 3:ROOS:接收溢出计数器溢出。 2:ROS:接收溢出。
1:PTS:数据包传输。 0:PRS:数据包接收。
ISR 寄存器各状态写 1 清除
IMR(FFH):终端屏蔽寄存器(Interrupt Mask Register)
7:PAR:1 使能指针自动跳回。当 SRAM 的读、写指针超过 SRAM 的大小时,指针自动 跳回起始位置。需要驱动程序设置该位,若设置则 REG_F5(MDRAH)将自动位 0CH。 6:保留。
5:LNKCHGI:1 使能连接状态改变中断。 4:UDRUNI:1 使能传输“Underrun”中断。 3:ROOI:1 使能接收溢出计数器溢出中断。 2:ROI:1 使能接收溢出中断。 1:PTI:1 使能数据包传输终端。 0:PRI:1 使能数据包接收中断。
注释:表示在 DM9000 初始化中要用到的寄存器。
访问以上寄存器的方法是通过总线驱动的方式,即通过对 IOR、IOW、AEN、CMD 以及 S D0--SD15 等相关引脚的操作来实现。其中 CMD 引脚为高 电平时为写寄存器地址,为低电平时为写数据到指定地址的寄存器中。详细过程请参考数据手册中“读写时序”部分。 在 DM9000(A)中,还有一些 PHY 寄存器,也称之为介质无关接口 MII 寄存器,需要我们去访问。这些寄存器是字对齐的,即 16 位宽。下面列出三个常用的 PHY 寄存器。 BMCR(00H):基本模式控制寄存器(Basic Mode Control Register)
15:reset:1PHY 软件复位,0 正常操作。复位操作使 PHY 寄存器的值为默认值。复位操 作完成后,该位自动清零。
14:loopback:1Loop-back 使能,0 正常操作。
13:speed selection:1 为 100Mbps,0 为 10Mbps。连接速度即可以根据该位选择,也 可以根据第 12 位,即自动协商选择。当自动协商使能时,即第 12 位为 1,该位将会返回自动
协商后的速度值。
12:auto-negotiation enable:1 自动协商使能。使得第 13 位和第 8 位的值反应自动协商 后的状态。
11:power down:POWER_DOWN 模式。1 为 POWER_DOWN,0 为正常操作。在 PO WER_DOWN 状态下,PHY 应当响应操作处理。在转变到 POWER_DOWN 状态或已经运行在
POWER_DOWN 状态下时,PHY 不会在 MII 上产生虚假信号。
10:isolate:1 除了一些操作外,PHY 将从 MII 中隔离,0 为正常操作。当该位置位,PH Y 不会响应 TXD[3:0],TX_EN 和 TX_ER 输入,并且在 TX_CLK,RX_CLK,RX_DV,RX_ER, RXD[3:0], COL 和 CRS 输出上为高阻态。当 PHY 被隔离,则它将响应操作处理。
9:restart auto-aegotiation:1 重新初始化自动协商协议,0 为正常操作。当第 12 位禁止 该功能,则该位无效。初始化后该位自动清零。
8:duplex mode:1 为全双工操作,0 为正常操作。当第 12 位被禁止(置 0)时该位被置位, 若第 12 位被置位,则该位反应自动协商后的状态。 7:collision test:1 为冲突测试使能,0 为正常操作。若该位置位,声明 TX_EN 将引起 C OL 信号被声明。 6-0:保留。
ANAR(04H):自动协商广告寄存器(Auto-negotiation Advertisement Register)
15:NP:0 表示无有效的下一页,1 表示下一页有效。PHY 没有下一页,所以该位始终为 0。
14:ACK:1 表示连接对象数据接收认证,0 表示无认证。PHY 的自动协商状态机会自动 控制该位。
13:RF:1 表示本地设备处于错误状态,0 为无错误检验。 12-11:保留。
10:FCS:1 表示处理器支持溢出控制能力,0 表示不支持。
9:T4:1 表示本地设备支持 100BASE-T4,0 表示不支持。PHY 不支持 100BASE-T4,所 以该位永远是 0。
8:TX_FDX:1 为本地设备支持 100BASE-TX 全双工模式,0 为不支持。 7:TX_HDX:1 为本地设备支持 100BASE-TX,0 为不支持。
6:10_FDX:1 为本地设备支持 100BASE-T 全双工模式,0 为不支持。 5:10_HDX:1 为本地设备支持 100BASE-T,0 为不支持。
4-0:selecter:协议选择位,00001 为默认值,表示设备支持 IEEE802.3CSMA/CD,不用 修改。
DSCR(16H):DAVICOM 详细配置寄存器(DAVICOM Specified Configuration Register)
15:BP_4B5B:1 为绕过 4B5B 编码和 5B4B 解码功能,0 为正草 4B5B 和 5B4B 功能。 14:BP_SCR:1 为绕过扰频和解扰功能,0 为正常操作。
13:BP_ALIGN:1 为绕过接收时的解扰、符号队列、解码功能和发送时的符号编码、扰频 功能,0 正常操作。
12:BP_ADPOK:1 为强制信号探测功能使能,0 为正常操作。该位仅为调试使用 11:保留。
10:TX:1 表示 100BASE-TX 操作,0 保留。 9-8:保留。
7:F_LINK_100:0 为正常 100Mbps,1 为强制 100Mbps 良好连接状态。 6-5:保留,强制为 0.
4:RPDCTR-EN:1 为使能自动简化 POWER_DOWN,0 为禁止。
3:SMRST:1 为重新初始化 PHY 的状态机,初始化后该位自动清零。 2:MFPSC:1 表示 MII 帧引导抑制开启,0 表示关闭。
1:SLEEP:睡眠模式。该位置位将导致 PHY 进入睡眠模式,通过将该位清零唤醒睡眠模 式,其中配置将还原为睡眠模式之前的状态,但状态机将重新初始化。 0:RLOUT:该位置位将使接收到的数据放入发送通道中。 访问 PHY 寄存器的方法是:
(1)寄存器地址写到 EPAR/PHY_AR(0CH)寄存器中,注意将寄存器地址的第 6 位置 1(地址 与 0x40 或运算即可),以表明写的是 PHY 地址,而不是 EEPROM 地址。 (2)将数据高字节写到 PHY_DRH(0EH)寄存器中。 (3)将数据低字节写到 PHY_DRL(0DH)寄存器中。
(4)发送 PHY 命令(0x0a)到 EPCR/PHY_CR(0BH)寄存器中。
(5)延时 5us,发送命令 0x08 到 EPCR/PHY_CR(0BH)寄存器中,清除 PHY 写操作。
二 FPGA操作dm9000
与FPGA的数据接口和控制接口
DM9000A的外部总线符合ISA标准。可通过ISA总线直接与FPGA无缝连接。其硬件连接原理如图1所示。
DM9000A的FPGA控制
初始化模块
DM9000A正常工作需要在上电后对内部寄存器进行初始化,该过程通过FPGA对DM9000A外部控制总线和数据总线的读写操作完成。具体流程如下所示: >清除发送状态;
设置NSR(REG_01)bit[5]=1bit[3]=1 bit[2]=1; >激活PHY
设置GPR(REG_1F)CEPIO0bit[0]=0;
复位后,DM9000A恢复默认的休眠状态,以降低功耗,因此需要首先唤醒PHY。
>进行两次软复位,步骤如下:
设置NCR(REG_00)bit[2:0]=011,至少保持20μs; 清除NCR(REG_00)bit[2:0]=000;
设置NCR(REG_00)bit[2:0]=011,至少保持20μs; 清除NCR(REG_00)bit[2:0]=000;
>配置NCR寄存器;
设置NCR(REG_00)bit[2:1]=00;配置为正常模式。
通过改变该寄存器可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作。 >设置PHY寄存器 >设置mac地址 寄存器设置 FE 3F
01 2C 00 00 08 3F 09 3A 0A FF 0F 00 20 80 30 83 FF 81 05 43
通过以上步骤,可以通过LED指示灯观测到DM9000A是否已成功初始化。
发送模块
DM9000A中的发送缓冲区可以同时存储两帧数据,可以按照先后顺序命名为帧I和帧II。DM9000A上电初始化后,发送缓存区的起始地址是00H,当前数据帧编号为帧I。两帧数据的状态控制字分别记录在DM9000A的状态寄存器03H和04H中。发送过程如下:
首先,FPGA利用写操作寄存器MWCMD(REG_F8)向DM9000A的发送缓存区中写入发送数据帧,即需要先写入6字节的目的MAC地址,再写入6字节的源MAC地址,最后再写入发送数据。随后,FPGA利用写操作寄存器MWCMD(REG_F8)将数据帧长度写入寄存器FCH和FDH,数据长度为16位,将高8位写入寄存器FCH,低8位写入寄存器FDH。最后,FPGA将发送控制寄存器TCR(REG_02)的bit[1]置为高电平,向DM9000A发出发送数据指令。DM9000A会自动做一些处理才将数据发往以太网,这包括:插入报头和帧起始分隔符;插入来自上层协议的数据,如果数据量小于64字节,则自动补齐64字节;根据目标地址、源地址、长度/类型和数据产牛CRC校验序列,并插入校验序列位。这些处理都无需FPGA干预。处理完毕后,DM9000A即开始发送帧I,在帧I发送的同时,帧II的数据即可写入发送缓存区。在帧I发送完后,将帧II的数据长度写入寄存器FCH和FDH,最后将发送控制寄存器NSR(REG_01)的bit[1]置为高电平,即可开始帧II的发送。依此类推,下面发送的帧将会继续编号为帧I、帧II、帧I、帧II……按照同样的方式发送。这里存在一个发送状态的检测。第二次发要检查第一次发完没有。在发送过程中,FPGA可以查询寄存器标志位
寄存器NSR(REG_01)中的TX1END bit[2]或者TX2END bit[3],得到数据帧的发送状态。
接收模块
DM9000A中的接收缓存区是一个环形结构,初始化后的起始地址为0C00H,每帧数据都有4字节长的首部,然后是有效数据和CRC校验序列。首部4字节依次是01H、状态、长度低字节和长度高字节。 首部4字节含义如下:
第一个字节用来检测接收缓存区中是否有数据,如果这个字节是01H,表明接收到了数据;如果为00H,则说明没有数据。但是,如果第一个字节既不是01H,也不是00H,DM9000A就必须作一次软复位来从这种异常状态中恢复。
第二个字节存储着以太网帧状态,由此可判断所接收帧是否正确。
第三和第四字节存储着以太网帧长度。后续的字节就是有效数据。
接收过程如下:
FPGA不断进行f0地址寄存器的读取,如果第一字节是01H,则说明有数据,读寄存器F2地址不断的加读取模式,00H说明无数据,否则要进行复位; 根据获取的长度信息,判断读取次数,是否读完一帧,如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完。在读取过程中检测读到的数据,来判断是否是udp包,是否是发给dm9000的数据,根据判断情况来决定对不对数据进行存储以及对第几位进行储存。
三 代码注释
程序构架:
程序分为四层:top层:主要任务为上电完成初始化,之后进入等待读取数据模式,
然后根据需要来进入发送数据模式,以及发送完成后回到读取数据模式的工作。程序应该主要工作在读取数据模式,防止网卡上因为收到过多的广播数据而导致数据溢出。此外top层还完成了dm9000对外接口的一些工作,比如三态接口,输入输出寄存等等(Dm9000a_Io.v)。
模式层:主要分为初始化模块(Dm9000a_Init.v),读模块(Dm9000a_Read.v),写模块(Dm9000a_Write.v)。每个模块都有开始信号和结束信号,模块通过调用更下层的模块来对dm9000进行操作。主要操作通过一系列的读写寄存器完成。读模块可以完成对网卡接收到的数据进行读取并判断是否是发给本网卡的数据,是否是udp协议的数据,并根据读取到的数据长度来判断从哪位到哪位是数据。写模块能发送固定长度的udp包给上位机。这一层遇到的问题主要有读模块的读取速度有限制,还不能确定是上位机的限制还是fpga这边的限制,写模块只能每次发送固定长度的数据。读写模块用到的mac地址 要事先写入。
读写寄存器层:主要分为读寄存器模块(Dm9000a_Ior.v)写寄
存器模块(Dm9000a_Iow.v)phy寄存器写模块(phy_write.v) 这三个模块可以完成寄存器的值的读取,写入寄存器,以及phy寄存器读写的任务。这些功能都是通过调用更下层的isa总线模拟模块来完成的。
Isa总线读写层:主要有寄存器读行为模拟模块
(Dm9000a_IORD.v),写地址或数据到寄存器模块(Dm9000a_IOWR.v)
因篇幅问题不能全部显示,请点此查看更多更全内容