98 lines
1.8 KiB
Systemverilog
98 lines
1.8 KiB
Systemverilog
`default_nettype none
|
|
`timescale 1ns/1ps
|
|
|
|
`define FPGA_MAC 48'h69_69_5A_06_54_91
|
|
`define HOST_MAC 48'h00_E0_4C_68_1E_0C
|
|
`define ETHERTYPE 16'h88_B5
|
|
|
|
module ethernet_rx_tb();
|
|
|
|
// https://www.youtube.com/watch?v=K35qOTQLNpA
|
|
logic clk;
|
|
|
|
always begin
|
|
#5;
|
|
clk = !clk;
|
|
end
|
|
|
|
logic crsdv;
|
|
logic [1:0] rxd;
|
|
|
|
logic txen;
|
|
logic [1:0] txd;
|
|
|
|
logic [39:0] mtx_payload;
|
|
logic mtx_start;
|
|
|
|
mac_tx #(
|
|
.SRC_MAC(`HOST_MAC),
|
|
.DST_MAC(`FPGA_MAC),
|
|
.ETHERTYPE(`ETHERTYPE),
|
|
.PAYLOAD_LENGTH_BYTES(5)
|
|
) mtx (
|
|
.clk(clk),
|
|
|
|
.payload(mtx_payload),
|
|
.start(mtx_start),
|
|
|
|
.txen(txen),
|
|
.txd(txd));
|
|
|
|
assign rxd = txd;
|
|
assign crsdv = txen;
|
|
|
|
logic [15:0] erx_addr;
|
|
logic [15:0] erx_data;
|
|
logic erx_rw;
|
|
logic erx_valid;
|
|
|
|
ethernet_rx #(
|
|
.FPGA_MAC(`FPGA_MAC),
|
|
.ETHERTYPE(`ETHERTYPE)
|
|
) erx (
|
|
.clk(clk),
|
|
|
|
.crsdv(crsdv),
|
|
.rxd(rxd),
|
|
|
|
.addr_o(erx_addr),
|
|
.data_o(erx_data),
|
|
.rw_o(erx_rw),
|
|
.valid_o(erx_valid));
|
|
|
|
initial begin
|
|
$dumpfile("ethernet_rx_tb.vcd");
|
|
$dumpvars(0, ethernet_rx_tb);
|
|
clk = 0;
|
|
mtx_payload = 0;
|
|
mtx_start = 0;
|
|
#50;
|
|
|
|
// try to send a read request to the bus:
|
|
mtx_payload = 40'h01_0002_0001;
|
|
mtx_start = 1;
|
|
#10;
|
|
mtx_start = 0;
|
|
#10000;
|
|
|
|
|
|
|
|
|
|
// for (int i=0; i<32; i=i+1) begin
|
|
// mtx_payload = i;
|
|
// mtx_start = 0;
|
|
// #10;
|
|
// mtx_start = 1;
|
|
// #10;
|
|
// mtx_start = 0;
|
|
// while(!mrx_valid) #10;
|
|
|
|
// #1000;
|
|
|
|
// assert(mrx_payload == i) else $fatal(0, "data mismatch!");
|
|
// end
|
|
$finish();
|
|
end
|
|
|
|
endmodule
|
|
`default_nettype wire |