OpenCores
URL https://opencores.org/ocsvn/xge_mac/xge_mac/trunk

Subversion Repositories xge_mac

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /xge_mac/trunk/tbench/verilog
    from Rev 6 to Rev 7
    Reverse comparison

Rev 6 → Rev 7

/tb_xge_mac.v
0,0 → 1,394
//////////////////////////////////////////////////////////////////////
//// ////
//// File name "tb_xge_mac.v" ////
//// ////
//// This file is part of the "10GE MAC" project ////
//// http://www.opencores.org/cores/xge_mac/ ////
//// ////
//// Author(s): ////
//// - A. Tanguay (antanguay@opencores.org) ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2008 AUTHORS. All rights reserved. ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer. ////
//// ////
//// This source file is free software; you can redistribute it ////
//// and/or modify it under the terms of the GNU Lesser General ////
//// Public License as published by the Free Software Foundation; ////
//// either version 2.1 of the License, or (at your option) any ////
//// later version. ////
//// ////
//// This source is distributed in the hope that it will be ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
//// PURPOSE. See the GNU Lesser General Public License for more ////
//// details. ////
//// ////
//// You should have received a copy of the GNU Lesser General ////
//// Public License along with this source; if not, download it ////
//// from http://www.opencores.org/lgpl.shtml ////
//// ////
//////////////////////////////////////////////////////////////////////
 
 
`include "timescale.v"
`include "defines.v"
 
module tb;
 
 
/*AUTOREG*/
// Beginning of automatic regs (for this module's undeclared outputs)
// End of automatics
 
reg [7:0] tx_buffer[0:10000];
integer tx_length;
 
reg clk_156m25;
reg clk_xgmii_rx;
reg clk_xgmii_tx;
 
reg reset_156m25_n;
reg reset_xgmii_rx_n;
reg reset_xgmii_tx_n;
 
reg pkt_rx_ren;
 
reg [63:0] pkt_tx_data;
reg pkt_tx_val;
reg pkt_tx_sop;
reg pkt_tx_eop;
reg [2:0] pkt_tx_mod;
 
/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module outputs)
wire pkt_rx_avail; // From dut of xge_mac.v
wire [63:0] pkt_rx_data; // From dut of xge_mac.v
wire pkt_rx_eop; // From dut of xge_mac.v
wire pkt_rx_err; // From dut of xge_mac.v
wire [2:0] pkt_rx_mod; // From dut of xge_mac.v
wire pkt_rx_sop; // From dut of xge_mac.v
wire pkt_rx_val; // From dut of xge_mac.v
wire pkt_tx_full; // From dut of xge_mac.v
wire wb_ack_o; // From dut of xge_mac.v
wire [31:0] wb_dat_o; // From dut of xge_mac.v
wire wb_int_o; // From dut of xge_mac.v
wire [7:0] xgmii_txc; // From dut of xge_mac.v
wire [63:0] xgmii_txd; // From dut of xge_mac.v
// End of automatics
 
wire [7:0] wb_adr_i;
wire [31:0] wb_dat_i;
 
wire [7:0] xgmii_rxc;
wire [63:0] xgmii_rxd;
 
 
xge_mac dut(/*AUTOINST*/
// Outputs
.pkt_rx_avail (pkt_rx_avail),
.pkt_rx_data (pkt_rx_data[63:0]),
.pkt_rx_eop (pkt_rx_eop),
.pkt_rx_err (pkt_rx_err),
.pkt_rx_mod (pkt_rx_mod[2:0]),
.pkt_rx_sop (pkt_rx_sop),
.pkt_rx_val (pkt_rx_val),
.pkt_tx_full (pkt_tx_full),
.wb_ack_o (wb_ack_o),
.wb_dat_o (wb_dat_o[31:0]),
.wb_int_o (wb_int_o),
.xgmii_txc (xgmii_txc[7:0]),
.xgmii_txd (xgmii_txd[63:0]),
// Inputs
.clk_156m25 (clk_156m25),
.clk_xgmii_rx (clk_xgmii_rx),
.clk_xgmii_tx (clk_xgmii_tx),
.pkt_rx_ren (pkt_rx_ren),
.pkt_tx_data (pkt_tx_data[63:0]),
.pkt_tx_eop (pkt_tx_eop),
.pkt_tx_mod (pkt_tx_mod[2:0]),
.pkt_tx_sop (pkt_tx_sop),
.pkt_tx_val (pkt_tx_val),
.reset_156m25_n (reset_156m25_n),
.reset_xgmii_rx_n (reset_xgmii_rx_n),
.reset_xgmii_tx_n (reset_xgmii_tx_n),
.wb_adr_i (wb_adr_i[7:0]),
.wb_clk_i (wb_clk_i),
.wb_cyc_i (wb_cyc_i),
.wb_dat_i (wb_dat_i[31:0]),
.wb_rst_i (wb_rst_i),
.wb_stb_i (wb_stb_i),
.wb_we_i (wb_we_i),
.xgmii_rxc (xgmii_rxc[7:0]),
.xgmii_rxd (xgmii_rxd[63:0]));
 
 
//---
// Unused for this testbench
 
assign wb_adr_i = 8'b0;
assign wb_clk_i = 1'b0;
assign wb_cyc_i = 1'b0;
assign wb_dat_i = 32'b0;
assign wb_rst_i = 1'b1;
assign wb_stb_i = 1'b0;
assign wb_we_i = 1'b0;
 
 
//---
// XGMII Loopback
// This test is done with loopback on XGMII
 
assign xgmii_rxc = xgmii_txc;
assign xgmii_rxd = xgmii_txd;
 
 
//---
// Clock generation
 
initial begin
clk_156m25 = 1'b0;
clk_xgmii_rx = 1'b0;
clk_xgmii_tx = 1'b0;
forever begin
WaitPS(3200);
clk_156m25 = ~clk_156m25;
clk_xgmii_rx = ~clk_xgmii_rx;
clk_xgmii_tx = ~clk_xgmii_tx;
end
end
 
 
//---
// Reset Generation
 
initial begin
reset_156m25_n = 1'b0;
reset_xgmii_rx_n = 1'b0;
reset_xgmii_tx_n = 1'b0;
WaitNS(20);
reset_156m25_n = 1'b1;
reset_xgmii_rx_n = 1'b1;
reset_xgmii_tx_n = 1'b1;
end
 
 
//---
// Init signals
 
initial begin
 
for (tx_length = 0; tx_length <= 1000; tx_length = tx_length + 1) begin
tx_buffer[tx_length] = 0;
end
 
pkt_rx_ren = 1'b0;
 
pkt_tx_data = 64'b0;
pkt_tx_val = 1'b0;
pkt_tx_sop = 1'b0;
pkt_tx_eop = 1'b0;
pkt_tx_mod = 3'b0;
 
end
 
task WaitNS;
input [31:0] delay;
begin
#(1000*delay);
end
endtask
 
task WaitPS;
input [31:0] delay;
begin
#(delay);
end
endtask
 
 
//---
// Task to send a single packet
 
task TxPacket;
integer i;
begin
 
$display("Transmit packet with length: %d", tx_length);
 
@(posedge clk_156m25);
WaitNS(1);
pkt_tx_val = 1'b1;
 
for (i = 0; i < tx_length; i = i + 8) begin
 
pkt_tx_sop = 1'b0;
pkt_tx_eop = 1'b0;
pkt_tx_mod = 2'b0;
 
if (i == 0) pkt_tx_sop = 1'b1;
 
if (i + 8 >= tx_length) begin
pkt_tx_eop = 1'b1;
pkt_tx_mod = tx_length % 8;
end
 
pkt_tx_data[`LANE0] = tx_buffer[i];
pkt_tx_data[`LANE1] = tx_buffer[i+1];
pkt_tx_data[`LANE2] = tx_buffer[i+2];
pkt_tx_data[`LANE3] = tx_buffer[i+3];
pkt_tx_data[`LANE4] = tx_buffer[i+4];
pkt_tx_data[`LANE5] = tx_buffer[i+5];
pkt_tx_data[`LANE6] = tx_buffer[i+6];
pkt_tx_data[`LANE7] = tx_buffer[i+7];
 
@(posedge clk_156m25);
WaitNS(1);
 
end
 
pkt_tx_val = 1'b0;
pkt_tx_eop = 1'b0;
pkt_tx_mod = 3'b0;
 
end
 
endtask
 
 
//---
// Task to read a single packet from command file and transmit
 
task CmdTxPacket;
input [31:0] file;
integer count;
integer data;
integer i;
begin
 
count = $fscanf(file, "%2d", tx_length);
 
if (count == 1) begin
 
for (i = 0; i < tx_length; i = i + 1) begin
count = $fscanf(file, "%2X", data);
if (count) begin
tx_buffer[i] = data;
end
 
end
 
TxPacket();
 
end
end
 
endtask
 
 
//---
// Task to read commands from file and stop when complete
 
task ProcessCmdFile;
integer file_cmd;
integer count;
reg [8*8-1:0] str;
begin
 
file_cmd = $fopen("../../tbench/verilog/packets_tx.txt", "r");
if (!file_cmd) $stop;
 
while (!$feof(file_cmd)) begin
 
count = $fscanf(file_cmd, "%s", str);
if (count != 1) $stop;
 
$display("CMD %s", str);
 
case (str)
 
"SEND_PKT":
begin
CmdTxPacket(file_cmd);
end
 
endcase
 
end
 
$fclose(file_cmd);
 
WaitNS(2000);
$stop;
 
end
endtask
 
initial begin
WaitNS(2000);
ProcessCmdFile();
end
 
 
//---
// Task to read a single packet from receive interface and display
 
task RxPacket;
reg done;
begin
 
done = 0;
 
pkt_rx_ren <= 1'b1;
@(posedge clk_156m25);
 
while (!done) begin
 
if (pkt_rx_val) begin
 
if (pkt_rx_sop) begin
$display("\n\n------------------------");
end
 
$display("%x", pkt_rx_data);
 
if (pkt_rx_eop) begin
done <= 1;
pkt_rx_ren <= 1'b0;
end
 
if (pkt_rx_eop) begin
$display("------------------------\n\n");
end
 
end
 
@(posedge clk_156m25);
 
end
 
end
endtask
 
initial begin
forever begin
 
if (pkt_rx_avail) begin
RxPacket();
end
 
@(posedge clk_156m25);
 
end
 
end
 
endmodule
 
tb_xge_mac.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: packets_tx.txt =================================================================== --- packets_tx.txt (nonexistent) +++ packets_tx.txt (revision 7) @@ -0,0 +1,73 @@ +SEND_PKT +59 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c + +SEND_PKT +60 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d + +SEND_PKT +61 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e + +SEND_PKT +62 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + +SEND_PKT +63 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 + +SEND_PKT +64 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 + +SEND_PKT +65 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 +32 + +SEND_PKT +66 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 +32 33 + +SEND_PKT +67 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 +32 33 34 + +SEND_PKT +68 +00 00 01 00 00 01 00 10 94 00 00 02 88 b5 00 01 +02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 +12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 +22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 +32 33 34 35 \ No newline at end of file
packets_tx.txt Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.