FPGA学习分类专栏`

本文详细介绍了DDR3内存接口的基础知识,MIGIP核的用户接口控制,以及ARP协议的工作原理,包括数据包帧格式、PHY芯片与RGMII接口的时序管理。此外,还探讨了时钟域管理和Xilinx设计框架中的关键元素。
摘要由CSDN通过智能技术生成

(资料来源于网络以及自己的理解,再加上自己整理,只供学习参考,不用于商业用途,侵删)

目录

DDR3

基础知识

MIG IP核

ARP

概述

数据包帧格式

ARP协议

PHY芯片与RGMII接口

RGMII接口时序

时钟域和时钟树

Xilinx原语

设计框架


DDR3

基础知识

1.DDR3物理引脚可划分为4类:地址总线数据总线控制线电源与参考电压

1.数据线

  • DQ:数据线
  • DQS DQS#:数据选通
  • TDQS TDQS#:数据选通
  • DM:数据屏蔽

2.地址线

  • A:地址
  • BA:bank选通

3.控制线

  • CS#:片选
  • RAS#:行选
  • CAS#:列选
  • ZQ#:校准

MIG IP核

我们主要控制用户app接口就好,并且用户接口也不需要都用到,以下是常用的。

写命令(读写状态一般用状态机)

处于写数据状态时,当app_rdyapp_wdf_rdy变高时,我们拉高app_en,传输app_addr地址和app_cmd命令。

处于读数据状态时,当app_rdy变高时,也需要拉高app_en,自动读取数据。

写数据

app_rdyapp_wdf_rdy变高时,我们拉高app_wdf_wren,传输数据。

读数据

当读命令写入后,若检测到app_rd_data_valid变高,则说明此时接收到了数据。

PS:根据数据手册, 其实用户可以只判断 app_rdy 信号,当 app_rdy 信号为高, 就可以拉高使能 app_en,之所以同时判断 app_rdy 和 app_wdf_rdy 是因为本实验只考虑 DDR3 写状态命令发送和数据发送同拍的情形,这样的做法基本上不会对 DDR3 读写操作效率造成很大影响,但是却能大大简化代码编写难度。


ARP

概述

ARP Address Resolution Protocol ),即地址解析协议,是 根据 IP 地址 (逻辑地址)获取目标设备 MAC 地址的一种 TCP/IP 协议。
A广播发送数据包,等待对应IP地址的主机应答
B检测到A数据包中的目标IP地址是自己,所以对A进行应答

数据包帧格式

以太网数据包帧格式
前导码 Preamble ):固定的 0 1 交替 即(55-55-55-55-55-55-55 )实现数据的同步。
帧起始界定符 SFD Start Frame Delimiter ):  1 个字节的 固定值 0xd5 来表示一帧的开始。
目的 MAC 地址:即接收端物理 MAC 地址,占用 6 个字节。 MAC 地址从应用上可分为单播地址、组播地址和广播地址。
  • 单播地址:第一个字节的最低位为 0,比如 00-00-00-11-11-11,一般用于标志唯一的设 备;
  • 组播地址:第一个字节的最低位为 1,比如 01-00-00-11-11-11,一般用于标志同属一组的多个设备;
  • 广播地址:所有 48bit 全为 1,即 FF-FF-FF-FF-FF-FF,它用于标志同一网段中的所有设备。
MAC 地址:即发送端物理 MAC 地址,占用 6 个字节。
长度/ 类型 当这的值小于 1536 0x0600 )时, 代表该以太网中数据段的长度;当值大于 1536 ,则表示该以太网中的数据属于哪个上层协议,例如 0x0800 代表 IP 协议(网际协议)、 0x0806 代表 ARP 协议(地址解析协议)等。
数据:以太网中的数据段长度最小 46 个字节,最大 1500 个字节。最大值 1500 称为以太网的最
大传输 单元(MTU Maximum Transmission Unit ),一般没有特殊需要就前面28个字节是数据包,后面18个字节置0。
之所以限制最大传输单元是因为在多个计算机的数据帧排队 等待传输时,如果某个数据帧太大的话,那么其它数据帧等待的时间就会加长,导致体验变差,这就像一 个十字路口的红绿灯,你可以让绿灯持续亮一小时,但是等红灯的人一定不愿意的。另外还要考虑网络 I/O 控制器缓存区资源以及网络最大的承载能力等因素,因此最大传输单元是由各种综合因素决定的。为了避 免增加额外的配置,通常以太网的有效数据字段小于 1500 个字节。
帧检验序列 FCS Frame Check Sequence ): 应用最广泛的是 CRC-32 标准。
帧间隙 IFG Interpacket Gap):帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间。

ARP协议

ARP协议
硬件类型(Hardware type):硬件地址的类型, 1 表示以太网地址。
协议类型(Protocol type):要映射的协议地址类型,ARP 协议的上层协议为 IP 协议,因此该协议类 型为 IP 协议,其值为 0x0800
硬件地址长度(Hardware size):硬件地址(MAC 地址)的长度,以字节为单位。对于以太网上 IP 地 址的 ARP 请求或者应答来说,该值为 6
协议地址长度(Protocol size):IP 地址的长度,以字节为单位。对于以太网上 IP 地址的 ARP 请求或 者应答来说,该值为 4
OP(Opcode):操作码,用于表示该数据包为 ARP 请求或者 ARP 应答。 1 表示 ARP 请求,2 表示 ARP 应答。
源 MAC 地址:发送端的硬件地址。
源 IP 地址:发送端的协议(IP)地址,如 192.168.1.102。
目的 MAC 地址:接收端的硬件地址,在 ARP 请求时 由于不知道接收端 MAC 地址,因此该字段为广播地址,即 48’hff_ff_ff_ff_ff_ff
目的 IP 地址:接收端的协议( IP )地址,如 192.168.1.10
以太网数据包帧格式

PHY芯片与RGMII接口

以太网的通信离不开PHY芯片,PHY和MAC之间的接口用的比较多的有MII,RMII,GMII,RGMII。

MII Medium Independent Interface ,媒体独立接口): MII 支持 10Mbps 100Mbps 的操作,数据位宽 为 4 位,在 100Mbps 传输速率下,时钟频率为 25Mhz
RMII Reduced MII ): RMII MII 的简化版,数据位宽为 2 位,在 100Mbps 传输速率下,时钟频率为 50Mhz
重点看下面两个!!!!!!!!!
GMII Gigabit MII ): GMII 接口向下兼容 MII 接口,支持 10Mbps 100Mbps 1000Mbps 的操作,数据位宽为 8 ,在 1000Mbps 传输速率下,时钟频率为 125Mhz
RGMII Reduced GMII ): RGMII GMII 的简化版, 数据位宽为 4 位 ,在 1000Mbps 传输速率下, 时钟频率为 125Mhz ,在时钟的上下沿同时采样数据。在 100Mbps 10Mbps 通信速率下,为单个时钟沿采样
这里面 RXCTLTXCTL其实分别是GMII接口中的 RX_DVRX_ERR的异或,以及 TX_ENTX_ERR的异或。

RGMII接口时序

发送正常模式

发送延时模式因为PHY芯片会对TXC自动进行2ns延迟,所以优先选此模式。其模式由硬件上的特殊引脚外接上下拉电阻进行配置)

接收正常模式( FPGA还要将RXC延迟2ns才能采样数据,麻烦些

接收延时模式( FPGA可以直接用RXC来采样数据,优先选此模式 )

时钟域和时钟树

时钟域指的是在同步电路中,被相同时钟信号驱动的寄存器共同组成一个时钟域。

在理想的同步电路中,我们认为同时钟域中的所有寄存器的时钟边沿应同时到达。但是在实际的电路中,这是不可能实现的,因此就需要对时钟域中的时钟信号进行管理,也就是采用时钟树了,时钟树可以保证时钟域中的各个寄存器的时钟边沿时间差最小(而并不一定能让其到达时间相同),从而保证良好的时序特性。

基本原理:时钟树主要利用多级扇出的形式来达到最终的高扇出结果,而通过控制各级扇出后的布线长度尽量一致来保证时钟信号能够尽可能同时到达各个触发器。

基本时钟树:全局时钟树、区域时钟树、IO时钟树

其原理示意图如下

加时钟树前结构如下:

加时钟树后结构如下:

Xilinx原语

原语是 Xilinx 器件底层硬件中的功能模块,它使用专用的资源来实现一系列的功能。
BUFG:全局缓冲,直接把时钟信号路由到全局时钟树,全芯片可用,驱动能力强,但 时钟质量略差同时资源有限
BUFH:把时钟信号路由到本时钟域和 左右相邻两个时钟域,驱动能力仅次于BUFG,但 时钟质量会更好资源相对丰富(BUFG不够用时做补充使用,内部信号上树首选)
BUFIO:性能最佳,最适合高速信号,只能作用于本 IO BANK区域, 不能驱动 FPGA 的内部逻辑 适合做高速通信使用。
IDDR:7系列设备的有专门的registers来将输入的上下边沿 DDR 信号,转换成两位单边沿 SDR 信号。

三种工作模式

1.OPPOSITE_EDGE

2.SAME_EDGE

3.SAME_EDGE_PIPELINED(一般用这个模式)

ODDR通过 ODDR 把两路单端的数据合并到一路上输出,上下沿同时输出数据,上升沿输出 a 路, 下降沿输出 b 路。

工作模式:

1.OPPOSITE_EDGE(不咋用)

2.SAME_EDGE(一般用这个)

IDELAYE2:(要搭配IDELAYCTRL用)

IDELAYE2结构图
IDELAYE2端口说明
IDELAYE2 parameter属性说明
一般给IDELAYE2的时钟就200MHZ,对应的delay_resolution=78ps,那么
delay_time=600ps + tap * delay_resolution
工作模式不再详细论述。

设计框架

FPGA和上位机之间漏画了个PHY芯片

 RGMII_TO_GMII模块

IDELAYE2主要避免因为走线长度不一样导致rxd、ctl与rxc不同相,但感觉或许也没啥必要

 GMII_TO_RGMII模块(没用ODELAYE2是因为现在用的板子不支持\笑)

ARP模块(TX和RX)

用状态机就是了,没啥好说的 


基于IIC的EEPROM读写

I2C 总线由数据线 SDA 和时钟线 SCL 构成通信线路,既可用于发送数据,也可接收数据。在主控与被 控 IC 之间可进行双向数据传送,数据的传输速率在标准模式下可达 100kbit/s ,在快速模式下可达 400kbit/s , 在高速模式下可达 3.4Mbit/s ,各种被控器件均并联在总线上,通过器件地址( SLAVE ADDR ,具体可查器件手册)识别。

IIC的原理

I2C 总线物理拓扑结构图
I2C 总线物理拓扑结构图
I2C 具体时序图

上图为IIC的通信协议时序:

  1. 当SCL为高电平时,SDA拉低,代表开始信号
  2. 当SCL为时钟脉冲时,SCL低电平时SDA进行变化,当SCL为高电平时SDA需要保持稳定,此时代表传输了一个bit的数据,注意最先传输的是最高位。(因为如果SCL为高电平时若SDA变化则会被认为是开始或结束)
  3. 第8个时钟周期末,主机释放SDA(将其置为高阻),第9个周期从机通过SDA进行应答,若为低电平代表传输成功,相反则为失败。然后从机释放SDA,等待主机继续传输数据或结束。
  4. 当SCL为高电平时,SDA拉高,代表结束信号。

EEPROM通信协议

器件地址:1010是固定的,A2,A1,A0可通过EEPROM芯片引脚接高低电平来进行设置。

读写控制位:0表示写,1表示读。

当eeprom的存储单元容量小于等于258Byte时,字地址为8位,否则为16位(高3位不用)。

写数据(器件地址,字地址,写数据)

写数据分为单次写和连续写,区别在于写完一字节数据后,发送结束信号还是继续写数据。

单次写时序
连续写时序

 读数据

读数据分为当前地址读、随机地址读和顺序读。

当前地址读不咋用):由于IIC读或写一次后,其内部地址指针自动加1,故其读取的是上次读写操作的下一个地址的数据。

随机地址读:器件地址(写命令),字地址,起始信号!,器件地址(读命令),读数据。

前面第一次发送的器件地址(写命令),字地址是虚写,为了让地址指针指向这个地址。

PS:注意第一次发送完器件地址和字地址后还需要重新发送起始信号。还要注意从机发送完数据主机要进行非应答!

连续读:当前地址读的连续版本,没太多区别。

程序设计

写个状态机,分为IDLE,开始,发送器件地址,ACK1,ACK2,NACK,结束等等状态,本次SCL选择250K频率,通过时钟计数产生SCL_cnt,将一个bit分为四个cnt,0和3拉低,1和2拉高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值