原创作品,请引用保留链接。http://blog.csdn.net/HengZo/article/details/52052787
2016.7.28,开始着手分析这个IP核,分析功能和使用教程,并完成在板调试。分析这个主要用于光纤通信应用。
1)封装的IP核,,不使用输入引脚接地,不使用输出引脚不接。
unused inputs are tied low and unused outputs are disconnected.
2)CORE Generator GUI根据设置,对IP核进行了封装(wapper),总共进行了三层封装。
最底层:源程序文件:V5EMAC.v
例化了 Ethernet MAC,即TEMAC这个内核IP primitive。最底层文件为:V5EMAC.v,只是例化了TEMAC:
module V5EMAC(...);
...
...
// Instantiate the Virtex-5 Embedded Ethernet EMAC
TEMAC v5_emac(...); //例化TEMAC
...
...
endmodule
末尾的MAC地址设置如下:这两个地址如何理解?
// Set the Pause Address Default
//synthesis attribute EMAC0_PAUSEADDR of v5_emac is 48'hFFEEDDCCBBAA
defparam v5_emac.EMAC0_PAUSEADDR = 48'hFFEEDDCCBBAA;
//synthesis attribute EMAC0_UNICASTADDR of v5_emac is 48'h000000000000
defparam v5_emac.EMAC0_UNICASTADDR = 48'h000000000000;
V5EMAC只是实现了MAC层的控制,后级接物理层实现,
// Instantiate RocketIO tile for SGMII or 1000BASE-X PCS/PMA Physical I/F
GTP_dual_1000X GTP_DUAL_1000X_inst(...)
125M时钟输出则是由GTP_dual_1000X产生并输出
第二层:例化了V5EMAC和时钟、物理接口 文件:V5EMAC_block.v
module V5EMAC_block(...);
// The RocketIO transceivers are available in pairs with shared
// clock resources
// 125MHz clock is used for GTP user clocks and used
// to clock all Ethernet core logic.
assign usrclk2 = CLK125; //输入时钟
// Connect previously derived client clocks to example design output ports
// EMAC0 Clocking
// 125MHz clock output from transceiver
assign CLK125_OUT = refclkout; //输出时钟
// Instantiate RocketIO tile for SGMII or 1000BASE-X PCS/PMA Physical I/F
GTP_dual_1000X GTP_DUAL_1000X_inst(...);
// Instantiate the EMAC Wrapper (V5EMAC.v)
V5EMAC v5_emac_wrapper_inst(...);
endmodule
第三层:V5EMAC_locallink.v
例化了V5EMAC_block和收发FIFO
对接收FIFO例化了locallink接口
// The module declaration for the MAC with FIFO design.
module V5EMAC_locallink(...);
// Instantiate the EMAC Wrapper (V5EMAC_block.v)
V5EMAC_block v5_emac_block_inst(...);
// Instantiate the client side FIFO
eth_fifo_8 client_side_FIFO_emac0 (...);
endmodule
这三层已经完成了EMAC的封装工作。
软件继续进行了一个example的演示封装,对V5EMAC