实验报告 · 本节笔记
课程:中级 | FPGA工程师实战精进课程(送板卡+证书) · 第一部分 进阶接口设计篇
发布自课程云笔记 · FPGA 实验证据骨架
【本节要点】
如要使用自行添加按键消抖模块、CRC32校验模块
1、ARP与RGMII交互顶层连线
2、ARP控制模块
【疑问/坑点】
观察输出查看时序、解决时序不同步的问题
使用工具排查数据来源是否本身有问题、开发板的phy芯片是否有问题
【可复用的代码/思路】
TOP
`timescale 1ns / 1ps
module TOP(
input wire key ,
input wire rst_n ,
input wire ETH_RXC ,//PHY芯片
input wire ETH_RXV ,//PHY芯片
input wire [3:0] ETH_RXD ,//PHY芯片
output wire ETH_TXC ,//PHY芯片
output wire ETH_TXV ,//PHY芯片
output wire [3:0] ETH_TXD ,//PHY芯片
output wire ETH_rst //PHY芯片
);
assign ETH_rst = rst_n ;
//key
wire key_out ;
//arp_ctrl
wire arp_tx_en ;
wire arp_tx_op ;
//RGMII
wire MAC_TXC ;
wire MAC_RXC ;
wire MAC_RXV ;
wire [7:0] MAC_RXD ;
//ARP
wire [7:0] arp_txd ;
wire arp_txv ;
wire [47:0] pc_mac ;
wire [31:0] pc_ip ;
wire arp_rx_op ;
wire arp_rx_done ;
key key_u(
. clk (MAC_TXC),//i
. rst_n (rst_n ),//i
. key (key ),//i
. key_out (key_out)
);
ARP_CTRL ARP_CTRL_u(
. clk (MAC_TXC ),//i
. rst_n (rst_n ),//i
. key_out (key_out ),//i
. arp_rx_op (arp_rx_op ),//i
. arp_rx_done (arp_rx_done),//i
. arp_tx_en (arp_tx_en ),//0
. arp_tx_op (arp_tx_op ) //0
);
ARP ARP_u(
. rst_n (rst_n ),//i
. arp_txc (MAC_TXC ),//i
. arp_txd (arp_txd ),//o
. arp_txv (arp_txv ),//o
. arp_rxc (MAC_RXC ),//i
. arp_rxv (MAC_RXV ),//i
. arp_rxd (MAC_RXD ),//i
. arp_tx_en (arp_tx_en ),//i
. arp_tx_op (arp_tx_op ),//i
. pc_mac (pc_mac ),//o
. pc_ip (pc_ip ),//o
. arp_rx_op (arp_rx_op ),//o
. arp_rx_done (arp_rx_done)//o
);
RGMII RGMII_u(
. ETH_RXC (ETH_RXC),//网卡芯片 I
. ETH_RXV (ETH_RXV),//网卡芯片 I
. ETH_RXD (ETH_RXD),//网卡芯片 I
. ETH_TXC (ETH_TXC),//网卡芯片 O
. ETH_TXV (ETH_TXV),//网卡芯片 O
. ETH_TXD (ETH_TXD),//网卡芯片 O
. MAC_TXC (MAC_TXC),//O 代码
. MAC_TXV (arp_txv),//I 代码
. MAC_TXD (arp_txd),//I 代码
. MAC_RXC (MAC_RXC),//O 代码
. MAC_RXV (MAC_RXV),//O 代码
. MAC_RXD (MAC_RXD) //O 代码
);
endmodule
`timescale 1ns / 1ps
module ARP_CTRL(
input wire clk ,
input wire rst_n ,
input wire key_out ,
input wire arp_rx_op ,
input wire arp_rx_done ,
output reg arp_tx_en ,
output reg arp_tx_op
);
always @(posedge clk)
begin
if(!rst_n)
begin
arp_tx_en <= 0;
arp_tx_op <= 0;
end
else if(key_out)
begin
arp_tx_en <= 1;
arp_tx_op <= 1;
end
else if(arp_rx_done && arp_rx_op == 1)
begin//接收请求包,发送应答包
arp_tx_en <= 1;
arp_tx_op <= 0;
end
else if(arp_rx_done && arp_rx_op == 0)
begin//接收应答包,不发送
arp_tx_en <= 0;
arp_tx_op <= 0;
end
else
begin
arp_tx_en <= 0;
arp_tx_op <= arp_rx_op;
end
end
endmodule【FPGA·实验证据】
【实验目标】
本节要验证什么?预期现象是什么?
【波形/截图】
用工具栏插入波形图、仿真界面或示波器照片
【仿真 log】
粘贴关键仿真输出或报错原文
【上板现象】
板卡现象、按键/数码管/接口实测结果
【结论与待改】
结论、坑点与下一步修改
评论 0