Xilinx的RGMII 的PHY层逻辑设计

日期:2017-06-15 作者:佚名

今天讲解是RGMII的FPGA设计。因为这边文章主要是用XILINX的约束工具,所以标记为XILINX,其实你用altera平台也可以的。设计分为2部分,一部分讲解MDIO操作和IEE802.3寄存器要求。另外一部分主要讲解PHY层的软件设计。

RGMII是千兆网总线,但是比GMII差别在于数据发送和接受是4BIT,RGMII是双边得到数据,所以千万要注意约束双边沿的数据。观察RGMII是不是跟MII很像,所以兼容总线100,M/10M接口。

有人问我,是不是很蛋疼,为啥不用ALTERA和xilinx的 TRI-mode MAC ip核心设计。关键三模式MAC的IP只能挂在nios或者microblaze一类处理器,你还要学习这些处理器平台。而且很多工业以太网也不是基于TCP/IP协议的。所以这次有必要讲述PHY层的操作。

对于PHY模式和MAC模式,主要差别MAC没有前导码和4个字节的CRC32校验码。而PHY层是带这些。经常使用PC软件发送是MAC层发送。

可以看出前导码是固定,CRC我们下载已经搞好。已经上传了基本CRC的算法文件。CRC32_8_CONTROL.rar ,有人问我为啥要用CRC32校验,如果你不用CRC32,你发给PC,pc不会认你的以太网包的。   注意,CRC校验是不包括前导码还有CRC32的4个字节数据。

crc32_8 crc32_8_inst
(
.crc(crc) , // output [7:0] crc
.d(p_data) , // input [7:0] d_sig
.calc(calc) , // input calc_sig
.init(init) , // input init_sig
.d_valid(d_valid) ,// input d_valid_sig
.clk(clk_125mhz) ,// input clk_125mhz
.rst_n(rst_n) // input rst_n
);

if((p_data == 8'hd5) &&(cnt_pre >= 4'd7))
begin //开始CRC校验
calc <= 1'b1;
d_valid <= 1'b1;
init <= 1'b0;
end
else if(cnt_crc < 3>begin
d_valid <= 1'b1;
calc <= 1'b0;
init <= 1'b0;
cnt_crc <= cnt_crc + 1'b1;
cnt_pre <= 4'd0;
end
else
begin //数据无效,对校验程序设置初始化值
d_valid <= 1'b0;
calc <= 1'b0;
init <= 1'b1;
end

上述基本问题已经初步解决,关键怎么看待这个设计给用户怎么一个好的接口。初步设想使用两个读和写fifo来兼容三种不同的速度模式。在发送的fifo中提供发送fifo的空闲标示,标示可以发送数据。而接收的fifo上面提供完整帧指示,读缓冲满指示。



作者:FPGA菜鸟
出处:http://xilinx.eetrend.com/blog/11528


关于OpenHW  |  OpenHW使用说明  |  FAQ  |  相关法律  |  版权声明
联系邮件: lishen@eefocus.com   联系电话: 0512-80981663-8062     Fax:0512-80981279
Powered by eefocus.com