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

Subversion Repositories srdydrdy_lib

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /srdydrdy_lib/trunk/examples/bridge/env
    from Rev 4 to Rev 8
    Reverse comparison

Rev 4 → Rev 8

/run
0,0 → 1,5
#!/bin/bash
 
iverilog -f bridge.vf
./a.out
 
/gmii_driver.v
0,0 → 1,114
// Send an ethernet packet over GMII
 
module gmii_driver
(output reg [7:0] rxd,
output reg rx_dv,
output reg rx_clk);
 
integer startup_skew;
 
reg [7:0] rxbuf [0:2048];
reg [31:0] crc32_result;
 
// begin start clock with random skew amount
initial
begin
startup_skew = {$random} % 200;
rx_clk = 0;
rx_dv = 0;
rxd = 0;
repeat (startup_skew) #0.1;
forever rx_clk = #4 ~rx_clk;
end
 
// Copied from: http://www.mindspring.com/~tcoonan/gencrc.v
//
// Generate a (DOCSIS) CRC32.
//
// Uses the GLOBAL variables:
//
// Globals referenced:
// parameter CRC32_POLY = 32'h04C11DB7;
// reg [ 7:0] crc32_packet[0:255];
// integer crc32_length;
//
// Globals modified:
// reg [31:0] crc32_result;
//
localparam CRC32_POLY = 32'h04C11DB7;
task gencrc32;
input [31:09] crc32_length;
integer cbyte, cbit;
reg msb;
reg [7:0] current_cbyte;
reg [31:0] temp;
begin
crc32_result = 32'hffffffff;
for (cbyte = 0; cbyte < crc32_length; cbyte = cbyte + 1) begin
current_cbyte = rxbuf[cbyte];
for (cbit = 0; cbit < 8; cbit = cbit + 1) begin
msb = crc32_result[31];
crc32_result = crc32_result << 1;
if (msb != current_cbyte[cbit]) begin
crc32_result = crc32_result ^ CRC32_POLY;
crc32_result[0] = 1;
end
end
end
// Last step is to "mirror" every bit, swap the 4 bytes, and then complement each bit.
//
// Mirror:
for (cbit = 0; cbit < 32; cbit = cbit + 1)
temp[31-cbit] = crc32_result[cbit];
// Swap and Complement:
crc32_result = ~{temp[7:0], temp[15:8], temp[23:16], temp[31:24]};
end
endtask
 
task send_packet;
input [47:0] da, sa;
input [15:0] length;
integer p;
begin
{ rxbuf[0],rxbuf[1],rxbuf[2],rxbuf[3],rxbuf[4],rxbuf[5] } = da;
{ rxbuf[6],rxbuf[7],rxbuf[8],rxbuf[9],rxbuf[10],rxbuf[11] } = sa;
for (p=12; p<length; p=p+1)
rxbuf[p] = $random;
 
gencrc32 (length);
{ rxbuf[length-4], rxbuf[length-3],
rxbuf[length-2], rxbuf[length-1] } = crc32_result;
 
$display ("%m : Sending packet DA=%x SA=%x of length %0d", da, sa, length);
repeat (7)
begin
@(posedge rx_clk);
rx_dv <= #1 1;
rxd <= #1 `GMII_PRE;
end
 
@(posedge rx_clk);
rxd <= #1 `GMII_SFD;
 
p = 0;
while (p < length)
begin
@(posedge rx_clk);
rxd <= #1 rxbuf[p];
p = p + 1;
end
 
// complete 12B inter frame gap
repeat (12)
begin
@(posedge rx_clk);
rx_dv <= #1 0;
rxd <= #1 0;
end
end
endtask // send_packet
 
endmodule // gmii_driver
/bridge.vf
0,0 → 1,25
../rtl/bridge.vh
 
env_top.v
gmii_driver.v
 
../rtl/basic_hashfunc.v
../rtl/bridge_ex1.v
../rtl/concentrator.v
../rtl/distributor.v
../rtl/egr_oflow.v
../rtl/fib_lookup_fsm.v
../rtl/fib_lookup.v
../rtl/pkt_parse.v
../rtl/port_clocking.v
../rtl/port_macro.v
../rtl/port_ring_tap_fsm.v
../rtl/port_ring_tap.v
../rtl/sd_rx_gigmac.v
../rtl/sd_tx_gigmac.v
+libext+.v
-y ../../../rtl/verilog/buffers
-y ../../../rtl/verilog/closure
-y ../../../rtl/verilog/forks
-y ../../../rtl/verilog/memory
 
/env_top.v
0,0 → 1,120
`timescale 1ns/1ps
 
module env_top;
 
reg clk, reset;
 
initial
begin
clk = 0;
forever clk = #4 ~clk;
end
 
initial
begin
$dumpfile ("env_top.vcd");
$dumpvars;
reset = 1;
#200;
reset = 0;
#200;
 
fork
driver0.send_packet (1, 2, 20);
driver1.send_packet (2, 3, 64);
driver2.send_packet (3, 4, 64);
driver3.send_packet (4, 1, 64);
join
 
#500;
$finish;
end
 
/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module outputs)
wire gmii_rx_clk_0; // From driver0 of gmii_driver.v
wire gmii_rx_clk_1; // From driver1 of gmii_driver.v
wire gmii_rx_clk_2; // From driver2 of gmii_driver.v
wire gmii_rx_clk_3; // From driver3 of gmii_driver.v
wire gmii_rx_dv_0; // From driver0 of gmii_driver.v
wire gmii_rx_dv_1; // From driver1 of gmii_driver.v
wire gmii_rx_dv_2; // From driver2 of gmii_driver.v
wire gmii_rx_dv_3; // From driver3 of gmii_driver.v
wire [7:0] gmii_rxd_0; // From driver0 of gmii_driver.v
wire [7:0] gmii_rxd_1; // From driver1 of gmii_driver.v
wire [7:0] gmii_rxd_2; // From driver2 of gmii_driver.v
wire [7:0] gmii_rxd_3; // From driver3 of gmii_driver.v
wire gmii_tx_dv_0; // From bridge of bridge_ex1.v
wire gmii_tx_dv_1; // From bridge of bridge_ex1.v
wire gmii_tx_dv_2; // From bridge of bridge_ex1.v
wire gmii_tx_dv_3; // From bridge of bridge_ex1.v
wire [7:0] gmii_txd_0; // From bridge of bridge_ex1.v
wire [7:0] gmii_txd_1; // From bridge of bridge_ex1.v
wire [7:0] gmii_txd_2; // From bridge of bridge_ex1.v
wire [7:0] gmii_txd_3; // From bridge of bridge_ex1.v
// End of automatics
 
/* gmii_driver AUTO_TEMPLATE
(
.\(.*\) (gmii_\1_@[]),
);
*/
gmii_driver driver0
(/*AUTOINST*/
// Outputs
.rxd (gmii_rxd_0[7:0]), // Templated
.rx_dv (gmii_rx_dv_0), // Templated
.rx_clk (gmii_rx_clk_0)); // Templated
 
gmii_driver driver1
(/*AUTOINST*/
// Outputs
.rxd (gmii_rxd_1[7:0]), // Templated
.rx_dv (gmii_rx_dv_1), // Templated
.rx_clk (gmii_rx_clk_1)); // Templated
 
gmii_driver driver2
(/*AUTOINST*/
// Outputs
.rxd (gmii_rxd_2[7:0]), // Templated
.rx_dv (gmii_rx_dv_2), // Templated
.rx_clk (gmii_rx_clk_2)); // Templated
 
gmii_driver driver3
(/*AUTOINST*/
// Outputs
.rxd (gmii_rxd_3[7:0]), // Templated
.rx_dv (gmii_rx_dv_3), // Templated
.rx_clk (gmii_rx_clk_3)); // Templated
 
bridge_ex1 bridge
(/*AUTOINST*/
// Outputs
.gmii_tx_dv_0 (gmii_tx_dv_0),
.gmii_tx_dv_1 (gmii_tx_dv_1),
.gmii_tx_dv_2 (gmii_tx_dv_2),
.gmii_tx_dv_3 (gmii_tx_dv_3),
.gmii_txd_0 (gmii_txd_0[7:0]),
.gmii_txd_1 (gmii_txd_1[7:0]),
.gmii_txd_2 (gmii_txd_2[7:0]),
.gmii_txd_3 (gmii_txd_3[7:0]),
// Inputs
.clk (clk),
.reset (reset),
.gmii_rx_clk_0 (gmii_rx_clk_0),
.gmii_rx_clk_1 (gmii_rx_clk_1),
.gmii_rx_clk_2 (gmii_rx_clk_2),
.gmii_rx_clk_3 (gmii_rx_clk_3),
.gmii_rx_dv_0 (gmii_rx_dv_0),
.gmii_rx_dv_1 (gmii_rx_dv_1),
.gmii_rx_dv_2 (gmii_rx_dv_2),
.gmii_rx_dv_3 (gmii_rx_dv_3),
.gmii_rxd_0 (gmii_rxd_0[7:0]),
.gmii_rxd_1 (gmii_rxd_1[7:0]),
.gmii_rxd_2 (gmii_rxd_2[7:0]),
.gmii_rxd_3 (gmii_rxd_3[7:0]));
 
endmodule // env_top
// Local Variables:
// verilog-library-directories:("." "../rtl")
// End:

powered by: WebSVN 2.1.0

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