AC620FPGA学习笔记——RTL8201+MAC+ARP
RTL8201+MAC+ARP
工程地址:https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FPGA/class12_RTL8201_MII_MAC
使用RTL8201 PHY芯片的MII接口方式在FPGA上实现MAC底层驱动,并构建ARP模块向指定IP发送ARP包
整体框架
这个图是test顶层,左边是一个定时器,定时去发送arp包
PHY芯片的底层驱动,包括了crc32的检验与ram缓存
Wireshark
代码部分
逻辑复杂更多详细内容在github
顶层代码
module arp_test(
clk,
rst,
ETH_TX_EN,
ETH_TX_CLK,
ETH_TX_DATA,
ETH_RST_N
);
input clk,rst,ETH_TX_CLK;
output [3:0]ETH_TX_DATA;
output ETH_TX_EN,ETH_RST_N;
wire [7:0]SEND_DATA;
wire SENT_BUSY,CLK,RST;
wire busy,SEND_EN;
reg start;
ARP ARP1(
.mac_addr(48'h12_34_56_78_90_ab),
.src_ip(32'hc0_a8_00_09),
.dst_ip(32'hc0_a8_00_03),
.start(start),
.busy(busy),
.clk(clk),
.rst(rst),
.SEND_DATA(SEND_DATA),
.SENT_BUSY(SENT_BUSY),
.SEND_EN(SEND_EN),
.CLK(CLK),
.RST(RST)
);
RTL8201_MII_MAC RTL8201_MII_MAC1(
//ETH_TX_ER,
.ETH_TX_EN(ETH_TX_EN),
.ETH_TX_CLK(ETH_TX_CLK),
.ETH_TX_DATA(ETH_TX_DATA),
//ETH_MDC,
//ETH_MDIO,
.ETH_RST_N(ETH_RST_N),
.ETH_RX_DV(),
.ETH_RX_ER(),
.ETH_RX_CLK(),
.ETH_RX_DATA(),
//ETH_COL,
.ETH_CRS(),
.SEND_DATA(SEND_DATA),
.SENT_BUSY(SENT_BUSY),
.SEND_EN(SEND_EN),
.CLK(CLK),
.RST(RST)
);
reg [31:0]cnt;
always@(posedge clk,negedge rst) begin
if(!rst) begin
cnt <= 0;
start <= 0;
end
else if(cnt == 32'd80_000_000) begin
start <= 1;
cnt <= 0;
end
else begin
start <= 0;
cnt <= cnt + 1;
end
end
endmodule