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
/
- from Rev 10 to Rev 11
- ↔ Reverse comparison
Rev 10 → Rev 11
/srdydrdy_lib/trunk/rtl/verilog/buffers/sd_fifo_s.v
37,7 → 37,7
input p_reset, |
output p_srdy, |
input p_drdy, |
output [width-1:0] p_data |
output reg [width-1:0] p_data |
); |
|
localparam asz = $clog2(depth); |
48,7 → 48,6
wire [asz:0] rdptr_tail, rdptr_tail_sync; |
wire wr_en; |
wire [asz:0] wrptr_head, wrptr_head_sync; |
reg [width-1:0] p_data; |
reg dly_rd_en; |
wire [asz-1:0] rd_addr, wr_addr; |
|
/srdydrdy_lib/trunk/rtl/verilog/buffers/sd_fifo_tail_b.v
131,11 → 131,11
cur_rdptr <= `SDLIB_DELAY nxt_cur_rdptr; |
end |
|
reg [asz-1:0] rdaddr_s0, rdaddr_a, rdaddr_b; |
reg [asz-1:0] nxt_com_rdptr; |
generate |
if (commit == 1) |
begin : gen_s0 |
reg [asz-1:0] rdaddr_s0, rdaddr_a, rdaddr_b; |
reg [asz-1:0] nxt_com_rdptr; |
|
always @(posedge clk) |
begin |
173,7 → 173,7
|
generate |
if (commit == 1) |
begin |
begin : gen_s2 |
wire [asz-1:0] ip_rdaddr, p_rdaddr; |
|
sd_input #(asz+width) rbuf1 |
201,7 → 201,7
end |
end // if (commit == 1) |
else |
begin |
begin : gen_ns2 |
sd_input #(width) rbuf1 |
(.clk (clk), .reset (p_abort | reset), |
.c_srdy (prev_re), |
/srdydrdy_lib/trunk/examples/bridge/rtl/port_ring_tap_fsm.v
27,7 → 27,8
reg [4:0] state, nxt_state; |
|
wire [`NUM_PORTS-1:0] port_mask; |
reg [`NUM_PORTS-1:0] pe_vec, nxt_pe_vec; |
//reg [`NUM_PORTS-1:0] pe_vec, nxt_pe_vec; |
wire [`NUM_PORTS-1:0] nxt_pe_vec = lri_data[`PRW_DATA] & ~port_mask; |
|
assign port_mask = 1 << portnum; |
|
77,7 → 78,7
if (lri_data[`PRW_DATA] & port_mask) |
begin |
// packet is for our port |
nxt_pe_vec = lri_data[`PRW_DATA] & ~port_mask; |
//nxt_pe_vec = lri_data[`PRW_DATA] & ~port_mask; |
|
// if enable vector is not empty, send the |
// vector to the next port |
89,7 → 90,7
lri_drdy = 1; |
nxt_state = ns_rcopy; |
end |
else |
else if (nxt_pe_vec == 0) |
begin |
lri_drdy = 1; |
nxt_state = ns_rsink; |
157,7 → 158,7
|
// data on ring is for our port and we are the last port |
// copy ring data to our TX buffer but do not copy to ring |
state[s_rcopy] : |
state[s_rsink] : |
begin |
lptx_data = lri_data[`PFW_SZ-1:0]; |
if (lri_srdy & lptx_drdy) |
/srdydrdy_lib/trunk/examples/bridge/rtl/concentrator.v
13,9 → 13,6
// End of automatics |
); |
|
wire [`PFW_SZ-1:0] ic_data; // From body of template_body_1i1o.v |
wire ic_drdy; // From sdout of sd_output.v |
wire ic_srdy; // From body of template_body_1i1o.v |
wire [7:0] ip_data; // From sdin of sd_input.v |
wire [1:0] ip_code; |
reg ip_drdy; |
22,10 → 19,10
wire ip_srdy; // From sdin of sd_input.v |
|
reg [`PFW_SZ-1:0] nxt_p_data; |
reg [1:0] nxt_pkt_code, pkt_code; |
reg nxt_p_srdy; |
reg [2:0] count, nxt_count; |
reg nxt_p_abort, nxt_p_commit; |
wire [1:0] pkt_code = p_data[`PRW_PCC]; |
|
sd_input #(8+2) sdin |
( |
44,7 → 41,6
begin |
nxt_p_data = p_data; |
nxt_p_srdy = p_srdy; |
nxt_pkt_code = pkt_code; |
nxt_p_data = p_data; |
nxt_count = count; |
nxt_p_commit = p_commit; |
57,7 → 53,7
nxt_p_srdy = 0; |
nxt_p_commit = 0; |
ip_drdy = 1; |
nxt_pkt_code = `PCC_DATA; |
nxt_p_data[`PRW_PCC] = `PCC_DATA; |
nxt_count = 0; |
|
if (ip_srdy) |
64,7 → 60,7
begin |
nxt_count = 1; |
if (ip_code != `PCC_DATA) |
nxt_pkt_code = ip_code; |
nxt_p_data[`PRW_PCC] = ip_code; |
nxt_p_data[63:56] = ip_data; |
end |
end |
73,7 → 69,7
begin |
ip_drdy = 1; |
if (ip_code != `PCC_DATA) |
nxt_pkt_code = ip_code; |
nxt_p_data[`PRW_PCC] = ip_code; |
|
nxt_count = count + 1; |
case (count) |
92,6 → 88,7
begin |
nxt_p_commit = 1; |
nxt_p_srdy = 1; |
nxt_p_data[`PRW_VALID] = count + 1; |
end |
else if ((ip_code == `PCC_BADEOP) || (pkt_code == `PCC_BADEOP)) |
begin |
98,7 → 95,10
nxt_p_abort = 1; |
end |
else |
nxt_p_srdy = 1; |
begin |
nxt_p_srdy = 1; |
nxt_p_data[`PRW_VALID] = 0; |
end |
end |
end |
end // always @ * |
/srdydrdy_lib/trunk/examples/bridge/rtl/port_macro.v
1,4 → 1,5
module port_macro |
#(parameter port_num = 0) |
(input clk, |
input reset, |
|
7,17 → 8,17
input [`NUM_PORTS-1:0] fli_data, // To ring_tap of port_ring_tap.v |
/*AUTOINPUT*/ |
// Beginning of automatic inputs (from unused autoinst inputs) |
input fli_srdy, // To ring_tap of port_ring_tap.v |
input gmii_rx_clk, // To port_clocking of port_clocking.v, ... |
input gmii_rx_dv, // To rx_gigmac of sd_rx_gigmac.v |
input [7:0] gmii_rxd, // To rx_gigmac of sd_rx_gigmac.v |
input p2f_drdy, // To pkt_parse of pkt_parse.v |
input ri_srdy, // To ring_tap of port_ring_tap.v |
input ro_drdy, // To ring_tap of port_ring_tap.v |
input fli_srdy, // To ring_tap of port_ring_tap.v |
input gmii_rx_clk, // To port_clocking of port_clocking.v, ... |
input gmii_rx_dv, // To rx_gigmac of sd_rx_gigmac.v |
input [7:0] gmii_rxd, // To rx_gigmac of sd_rx_gigmac.v |
input p2f_drdy, // To pkt_parse of pkt_parse.v |
input ri_srdy, // To ring_tap of port_ring_tap.v |
input ro_drdy, // To ring_tap of port_ring_tap.v |
// End of automatics |
|
output fli_drdy, // From ring_tap of port_ring_tap.v |
output gmii_tx_dv, // From tx_gmii of sd_tx_gigmac.v |
output gmii_tx_en, // From tx_gmii of sd_tx_gigmac.v |
output [7:0] gmii_txd, // From tx_gmii of sd_tx_gigmac.v |
output [`PAR_DATA_SZ-1:0] p2f_data, // From pkt_parse of pkt_parse.v |
output p2f_srdy, // From pkt_parse of pkt_parse.v |
35,36 → 36,36
wire [`PFW_SZ-1:0] ctx_data; // From oflow of egr_oflow.v |
/*AUTOWIRE*/ |
// Beginning of automatic wires (for undeclared instantiated-module outputs) |
wire crx_abort; // From con of concentrator.v |
wire crx_commit; // From con of concentrator.v |
wire [`PFW_SZ-1:0] crx_data; // From con of concentrator.v |
wire crx_drdy; // From fifo_rx of sd_fifo_b.v |
wire crx_srdy; // From con of concentrator.v |
wire ctx_abort; // From oflow of egr_oflow.v |
wire ctx_commit; // From oflow of egr_oflow.v |
wire ctx_drdy; // From fifo_tx of sd_fifo_b.v |
wire ctx_srdy; // From oflow of egr_oflow.v |
wire gmii_rx_reset; // From port_clocking of port_clocking.v |
wire [1:0] pdo_code; // From pkt_parse of pkt_parse.v |
wire [7:0] pdo_data; // From pkt_parse of pkt_parse.v |
wire pdo_drdy; // From con of concentrator.v |
wire pdo_srdy; // From pkt_parse of pkt_parse.v |
wire prx_drdy; // From ring_tap of port_ring_tap.v |
wire prx_srdy; // From fifo_rx of sd_fifo_b.v |
wire ptx_drdy; // From dst of distributor.v |
wire ptx_srdy; // From fifo_tx of sd_fifo_b.v |
wire rttx_drdy; // From oflow of egr_oflow.v |
wire rttx_srdy; // From ring_tap of port_ring_tap.v |
wire [1:0] rxc_rxg_code; // From rx_gigmac of sd_rx_gigmac.v |
wire [7:0] rxc_rxg_data; // From rx_gigmac of sd_rx_gigmac.v |
wire rxc_rxg_drdy; // From rx_sync_fifo of sd_fifo_s.v |
wire rxc_rxg_srdy; // From rx_gigmac of sd_rx_gigmac.v |
wire rxg_drdy; // From pkt_parse of pkt_parse.v |
wire rxg_srdy; // From rx_sync_fifo of sd_fifo_s.v |
wire [1:0] txg_code; // From dst of distributor.v |
wire [7:0] txg_data; // From dst of distributor.v |
wire txg_drdy; // From tx_gmii of sd_tx_gigmac.v |
wire txg_srdy; // From dst of distributor.v |
wire crx_abort; // From con of concentrator.v |
wire crx_commit; // From con of concentrator.v |
wire [`PFW_SZ-1:0] crx_data; // From con of concentrator.v |
wire crx_drdy; // From fifo_rx of sd_fifo_b.v |
wire crx_srdy; // From con of concentrator.v |
wire ctx_abort; // From oflow of egr_oflow.v |
wire ctx_commit; // From oflow of egr_oflow.v |
wire ctx_drdy; // From fifo_tx of sd_fifo_b.v |
wire ctx_srdy; // From oflow of egr_oflow.v |
wire gmii_rx_reset; // From port_clocking of port_clocking.v |
wire [1:0] pdo_code; // From pkt_parse of pkt_parse.v |
wire [7:0] pdo_data; // From pkt_parse of pkt_parse.v |
wire pdo_drdy; // From con of concentrator.v |
wire pdo_srdy; // From pkt_parse of pkt_parse.v |
wire prx_drdy; // From ring_tap of port_ring_tap.v |
wire prx_srdy; // From fifo_rx of sd_fifo_b.v |
wire ptx_drdy; // From dst of distributor.v |
wire ptx_srdy; // From fifo_tx of sd_fifo_b.v |
wire rttx_drdy; // From oflow of egr_oflow.v |
wire rttx_srdy; // From ring_tap of port_ring_tap.v |
wire [1:0] rxc_rxg_code; // From rx_gigmac of sd_rx_gigmac.v |
wire [7:0] rxc_rxg_data; // From rx_gigmac of sd_rx_gigmac.v |
wire rxc_rxg_drdy; // From rx_sync_fifo of sd_fifo_s.v |
wire rxc_rxg_srdy; // From rx_gigmac of sd_rx_gigmac.v |
wire rxg_drdy; // From pkt_parse of pkt_parse.v |
wire rxg_srdy; // From rx_sync_fifo of sd_fifo_s.v |
wire [1:0] txg_code; // From dst of distributor.v |
wire [7:0] txg_data; // From dst of distributor.v |
wire txg_drdy; // From tx_gmii of sd_tx_gigmac.v |
wire txg_srdy; // From dst of distributor.v |
// End of automatics |
|
|
71,11 → 72,11
port_clocking port_clocking |
(/*AUTOINST*/ |
// Outputs |
.gmii_rx_reset (gmii_rx_reset), |
.gmii_rx_reset (gmii_rx_reset), |
// Inputs |
.clk (clk), |
.reset (reset), |
.gmii_rx_clk (gmii_rx_clk)); |
.clk (clk), |
.reset (reset), |
.gmii_rx_clk (gmii_rx_clk)); |
|
/* sd_rx_gigmac AUTO_TEMPLATE |
( |
87,15 → 88,15
sd_rx_gigmac rx_gigmac |
(/*AUTOINST*/ |
// Outputs |
.rxg_srdy (rxc_rxg_srdy), // Templated |
.rxg_code (rxc_rxg_code[1:0]), // Templated |
.rxg_data (rxc_rxg_data[7:0]), // Templated |
.rxg_srdy (rxc_rxg_srdy), // Templated |
.rxg_code (rxc_rxg_code[1:0]), // Templated |
.rxg_data (rxc_rxg_data[7:0]), // Templated |
// Inputs |
.clk (gmii_rx_clk), // Templated |
.reset (gmii_rx_reset), // Templated |
.gmii_rx_dv (gmii_rx_dv), |
.gmii_rxd (gmii_rxd[7:0]), |
.rxg_drdy (rxc_rxg_drdy)); // Templated |
.clk (gmii_rx_clk), // Templated |
.reset (gmii_rx_reset), // Templated |
.gmii_rx_dv (gmii_rx_dv), |
.gmii_rxd (gmii_rxd[7:0]), |
.rxg_drdy (rxc_rxg_drdy)); // Templated |
|
/* sd_fifo_s AUTO_TEMPLATE |
( |
112,35 → 113,35
sd_fifo_s #(8+2,16,1) rx_sync_fifo |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (rxc_rxg_drdy), // Templated |
.p_srdy (rxg_srdy), // Templated |
.p_data ({rxg_code,rxg_data}), // Templated |
.c_drdy (rxc_rxg_drdy), // Templated |
.p_srdy (rxg_srdy), // Templated |
.p_data ({rxg_code,rxg_data}), // Templated |
// Inputs |
.c_clk (gmii_rx_clk), // Templated |
.c_reset (gmii_rx_reset), // Templated |
.c_srdy (rxc_rxg_srdy), // Templated |
.c_data ({rxc_rxg_code,rxc_rxg_data}), // Templated |
.p_clk (clk), // Templated |
.p_reset (reset), // Templated |
.p_drdy (rxg_drdy)); // Templated |
.c_clk (gmii_rx_clk), // Templated |
.c_reset (gmii_rx_reset), // Templated |
.c_srdy (rxc_rxg_srdy), // Templated |
.c_data ({rxc_rxg_code,rxc_rxg_data}), // Templated |
.p_clk (clk), // Templated |
.p_reset (reset), // Templated |
.p_drdy (rxg_drdy)); // Templated |
|
pkt_parse pkt_parse |
pkt_parse #(port_num) pkt_parse |
(/*AUTOINST*/ |
// Outputs |
.rxg_drdy (rxg_drdy), |
.p2f_srdy (p2f_srdy), |
.p2f_data (p2f_data[`PAR_DATA_SZ-1:0]), |
.pdo_srdy (pdo_srdy), |
.pdo_code (pdo_code[1:0]), |
.pdo_data (pdo_data[7:0]), |
.rxg_drdy (rxg_drdy), |
.p2f_srdy (p2f_srdy), |
.p2f_data (p2f_data[`PAR_DATA_SZ-1:0]), |
.pdo_srdy (pdo_srdy), |
.pdo_code (pdo_code[1:0]), |
.pdo_data (pdo_data[7:0]), |
// Inputs |
.clk (clk), |
.reset (reset), |
.rxg_srdy (rxg_srdy), |
.rxg_code (rxg_code[1:0]), |
.rxg_data (rxg_data[7:0]), |
.p2f_drdy (p2f_drdy), |
.pdo_drdy (pdo_drdy)); |
.clk (clk), |
.reset (reset), |
.rxg_srdy (rxg_srdy), |
.rxg_code (rxg_code[1:0]), |
.rxg_data (rxg_data[7:0]), |
.p2f_drdy (p2f_drdy), |
.pdo_drdy (pdo_drdy)); |
|
/* concentrator AUTO_TEMPLATE |
( |
151,18 → 152,18
concentrator con |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (pdo_drdy), // Templated |
.p_data (crx_data[`PFW_SZ-1:0]), // Templated |
.p_srdy (crx_srdy), // Templated |
.p_commit (crx_commit), // Templated |
.p_abort (crx_abort), // Templated |
.c_drdy (pdo_drdy), // Templated |
.p_data (crx_data[`PFW_SZ-1:0]), // Templated |
.p_srdy (crx_srdy), // Templated |
.p_commit (crx_commit), // Templated |
.p_abort (crx_abort), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_data (pdo_data[7:0]), // Templated |
.c_code (pdo_code[1:0]), // Templated |
.c_srdy (pdo_srdy), // Templated |
.p_drdy (crx_drdy)); // Templated |
.clk (clk), |
.reset (reset), |
.c_data (pdo_data[7:0]), // Templated |
.c_code (pdo_code[1:0]), // Templated |
.c_srdy (pdo_srdy), // Templated |
.p_drdy (crx_drdy)); // Templated |
|
/* sd_fifo_b AUTO_TEMPLATE "fifo_\(.*\)" |
( |
176,38 → 177,38
sd_fifo_b #(`PFW_SZ, `RX_FIFO_DEPTH, 0, 1) fifo_rx |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (crx_drdy), // Templated |
.p_srdy (prx_srdy), // Templated |
.p_data (prx_data), // Templated |
.usage (rx_usage), // Templated |
.c_drdy (crx_drdy), // Templated |
.p_srdy (prx_srdy), // Templated |
.p_data (prx_data), // Templated |
.usage (rx_usage), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_srdy (crx_srdy), // Templated |
.c_commit (crx_commit), // Templated |
.c_abort (crx_abort), // Templated |
.c_data (crx_data), // Templated |
.p_drdy (prx_drdy), // Templated |
.p_commit (1'b0), // Templated |
.p_abort (1'b0)); // Templated |
.clk (clk), |
.reset (reset), |
.c_srdy (crx_srdy), // Templated |
.c_commit (crx_commit), // Templated |
.c_abort (crx_abort), // Templated |
.c_data (crx_data), // Templated |
.p_drdy (prx_drdy), // Templated |
.p_commit (1'b0), // Templated |
.p_abort (1'b0)); // Templated |
|
sd_fifo_b #(`PFW_SZ, `TX_FIFO_DEPTH, 0, 1) fifo_tx |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (ctx_drdy), // Templated |
.p_srdy (ptx_srdy), // Templated |
.p_data (ptx_data), // Templated |
.usage (tx_usage), // Templated |
.c_drdy (ctx_drdy), // Templated |
.p_srdy (ptx_srdy), // Templated |
.p_data (ptx_data), // Templated |
.usage (tx_usage), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_srdy (ctx_srdy), // Templated |
.c_commit (ctx_commit), // Templated |
.c_abort (ctx_abort), // Templated |
.c_data (ctx_data), // Templated |
.p_drdy (ptx_drdy), // Templated |
.p_commit (1'b0), // Templated |
.p_abort (1'b0)); // Templated |
.clk (clk), |
.reset (reset), |
.c_srdy (ctx_srdy), // Templated |
.c_commit (ctx_commit), // Templated |
.c_abort (ctx_abort), // Templated |
.c_data (ctx_data), // Templated |
.p_drdy (ptx_drdy), // Templated |
.p_commit (1'b0), // Templated |
.p_abort (1'b0)); // Templated |
|
/* port_ring_tap AUTO_TEMPLATE |
( |
217,27 → 218,27
.ptx_\(.*\) (rttx_\1), |
); |
*/ |
port_ring_tap ring_tap |
port_ring_tap #(port_num) ring_tap |
(/*AUTOINST*/ |
// Outputs |
.ri_drdy (ri_drdy), |
.prx_drdy (prx_drdy), // Templated |
.ro_srdy (ro_srdy), |
.ro_data (ro_data[`PRW_SZ-1:0]), // Templated |
.ptx_srdy (rttx_srdy), // Templated |
.ptx_data (rttx_data), // Templated |
.fli_drdy (fli_drdy), |
.ri_drdy (ri_drdy), |
.prx_drdy (prx_drdy), // Templated |
.ro_srdy (ro_srdy), |
.ro_data (ro_data[`PRW_SZ-1:0]), // Templated |
.ptx_srdy (rttx_srdy), // Templated |
.ptx_data (rttx_data), // Templated |
.fli_drdy (fli_drdy), |
// Inputs |
.clk (clk), |
.reset (reset), |
.ri_srdy (ri_srdy), |
.ri_data (ri_data[`PRW_SZ-1:0]), // Templated |
.prx_srdy (prx_srdy), // Templated |
.prx_data (prx_data), // Templated |
.ro_drdy (ro_drdy), |
.ptx_drdy (rttx_drdy), // Templated |
.fli_srdy (fli_srdy), |
.fli_data (fli_data[`NUM_PORTS-1:0])); |
.clk (clk), |
.reset (reset), |
.ri_srdy (ri_srdy), |
.ri_data (ri_data[`PRW_SZ-1:0]), // Templated |
.prx_srdy (prx_srdy), // Templated |
.prx_data (prx_data), // Templated |
.ro_drdy (ro_drdy), |
.ptx_drdy (rttx_drdy), // Templated |
.fli_srdy (fli_srdy), |
.fli_data (fli_data[`NUM_PORTS-1:0])); |
|
/* egr_oflow AUTO_TEMPLATE |
( |
248,18 → 249,18
egr_oflow oflow |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (rttx_drdy), // Templated |
.p_srdy (ctx_srdy), // Templated |
.p_data (ctx_data[`PFW_SZ-1:0]), // Templated |
.p_commit (ctx_commit), // Templated |
.p_abort (ctx_abort), // Templated |
.c_drdy (rttx_drdy), // Templated |
.p_srdy (ctx_srdy), // Templated |
.p_data (ctx_data[`PFW_SZ-1:0]), // Templated |
.p_commit (ctx_commit), // Templated |
.p_abort (ctx_abort), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_srdy (rttx_srdy), // Templated |
.c_data (rttx_data[`PFW_SZ-1:0]), // Templated |
.tx_usage (tx_usage[`TX_USG_SZ-1:0]), |
.p_drdy (ctx_drdy)); // Templated |
.clk (clk), |
.reset (reset), |
.c_srdy (rttx_srdy), // Templated |
.c_data (rttx_data[`PFW_SZ-1:0]), // Templated |
.tx_usage (tx_usage[`TX_USG_SZ-1:0]), |
.p_drdy (ctx_drdy)); // Templated |
|
/* distributor AUTO_TEMPLATE |
( |
269,29 → 270,29
distributor dst |
(/*AUTOINST*/ |
// Outputs |
.ptx_drdy (ptx_drdy), |
.p_srdy (txg_srdy), // Templated |
.p_code (txg_code[1:0]), // Templated |
.p_data (txg_data[7:0]), // Templated |
.ptx_drdy (ptx_drdy), |
.p_srdy (txg_srdy), // Templated |
.p_code (txg_code[1:0]), // Templated |
.p_data (txg_data[7:0]), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.ptx_srdy (ptx_srdy), |
.ptx_data (ptx_data[`PFW_SZ-1:0]), |
.p_drdy (txg_drdy)); // Templated |
.clk (clk), |
.reset (reset), |
.ptx_srdy (ptx_srdy), |
.ptx_data (ptx_data[`PFW_SZ-1:0]), |
.p_drdy (txg_drdy)); // Templated |
|
sd_tx_gigmac tx_gmii |
(/*AUTOINST*/ |
// Outputs |
.gmii_tx_dv (gmii_tx_dv), |
.gmii_txd (gmii_txd[7:0]), |
.txg_drdy (txg_drdy), |
.gmii_tx_en (gmii_tx_en), |
.gmii_txd (gmii_txd[7:0]), |
.txg_drdy (txg_drdy), |
// Inputs |
.clk (clk), |
.reset (reset), |
.txg_srdy (txg_srdy), |
.txg_code (txg_code[1:0]), |
.txg_data (txg_data[7:0])); |
.clk (clk), |
.reset (reset), |
.txg_srdy (txg_srdy), |
.txg_code (txg_code[1:0]), |
.txg_data (txg_data[7:0])); |
|
endmodule // port_macro |
// Local Variables: |
/srdydrdy_lib/trunk/examples/bridge/rtl/port_ring_tap.v
2,9 → 2,10
// fli (FIB lookup in), prx (port in/RX), and ptx (port out/TX) |
|
module port_ring_tap |
#(parameter rdp_sz = `PRW_SZ, |
parameter pdp_sz = `PFW_SZ, |
parameter portnum = 0) |
#(parameter portnum = 0, |
parameter rdp_sz = `PRW_SZ, |
parameter pdp_sz = `PFW_SZ |
) |
( |
input clk, |
input reset, |
/srdydrdy_lib/trunk/examples/bridge/rtl/pkt_parse.v
8,6 → 8,7
// a parse result to the FIB for lookup. Otherwise aborts the |
// packet so it is flushed from the packet FIFO. |
module pkt_parse |
#(parameter port_num=0) |
(input clk, |
input reset, |
|
74,7 → 75,10
0, 1, 2, 3, 4, 5 : |
begin |
if (count == 0) |
nxt_p2f_data = 0; |
begin |
nxt_p2f_data = 0; |
nxt_p2f_data[`PAR_SRCPORT] = port_num; |
end |
|
if ((lp_code == `PCC_EOP) || (lp_code == `PCC_BADEOP)) |
begin |
/srdydrdy_lib/trunk/examples/bridge/rtl/sd_tx_gigmac.v
10,7 → 10,7
( |
input clk, |
input reset, |
output reg gmii_tx_dv, |
output reg gmii_tx_en, |
output reg [7:0] gmii_txd, |
|
input txg_srdy, |
26,7 → 26,7
reg [3:0] count, nxt_count; |
|
reg [7:0] nxt_gmii_txd; |
reg nxt_gmii_tx_dv; |
reg nxt_gmii_tx_en; |
reg [3:0] state, nxt_state; |
|
localparam s_idle = 0, s_preamble = 1, s_payload = 2, s_ipg = 3; |
49,7 → 49,7
begin |
ip_drdy = 0; |
nxt_count = count; |
nxt_gmii_tx_dv = 0; |
nxt_gmii_tx_en = 0; |
nxt_gmii_txd = gmii_txd; |
|
case (1'b1) |
57,7 → 57,7
begin |
if (ip_srdy & (ip_code == `PCC_SOP)) |
begin |
nxt_gmii_tx_dv = 1; |
nxt_gmii_tx_en = 1; |
nxt_gmii_txd = `GMII_PRE; |
nxt_count = 1; |
nxt_state = ns_preamble; |
71,23 → 71,24
state[s_preamble] : |
begin |
nxt_count = count + 1; |
nxt_gmii_tx_dv = 1; |
nxt_gmii_tx_en = 1; |
if (count == 6) |
nxt_gmii_txd = `GMII_SFD; |
begin |
nxt_gmii_txd = `GMII_SFD; |
nxt_state = ns_payload; |
end |
else |
nxt_gmii_txd = `GMII_PRE; |
|
if (count == 7) |
nxt_state = ns_payload; |
end // case: state[s_preamble] |
|
state[s_payload] : |
begin |
ip_drdy = 1; |
|
nxt_gmii_tx_en = 1; |
nxt_gmii_txd = ip_data; |
|
if (!ip_srdy | ((ip_code == `PCC_EOP) | (ip_code == `PCC_BADEOP))) |
begin |
nxt_gmii_tx_dv = 0; |
nxt_count = 0; |
nxt_state = ns_ipg; |
end |
95,7 → 96,7
|
state[s_ipg] : |
begin |
nxt_gmii_tx_dv = 0; |
nxt_gmii_tx_en = 0; |
ip_drdy = 0; |
nxt_count = count + 1; |
if (count == 11) |
112,17 → 113,17
begin |
state <= #1 1; |
/*AUTORESET*/ |
// Beginning of autoreset for uninitialized flops |
count <= 4'h0; |
gmii_tx_dv <= 1'h0; |
gmii_txd <= 8'h0; |
// End of automatics |
// Beginning of autoreset for uninitialized flops |
count <= 4'h0; |
gmii_tx_en <= 1'h0; |
gmii_txd <= 8'h0; |
// End of automatics |
end |
else |
begin |
state <= #1 nxt_state; |
count <= #1 nxt_count; |
gmii_tx_dv <= #1 nxt_gmii_tx_dv; |
gmii_tx_en <= #1 nxt_gmii_tx_en; |
gmii_txd <= #1 nxt_gmii_txd; |
end // else: !if(reset) |
end // always @ (posedge clk) |
/srdydrdy_lib/trunk/examples/bridge/rtl/bridge_ex1.v
11,29 → 11,29
input reset, |
/*AUTOINPUT*/ |
// Beginning of automatic inputs (from unused autoinst inputs) |
input gmii_rx_clk_0, // To p0 of port_macro.v |
input gmii_rx_clk_1, // To p1 of port_macro.v |
input gmii_rx_clk_2, // To p2 of port_macro.v |
input gmii_rx_clk_3, // To p3 of port_macro.v |
input gmii_rx_dv_0, // To p0 of port_macro.v |
input gmii_rx_dv_1, // To p1 of port_macro.v |
input gmii_rx_dv_2, // To p2 of port_macro.v |
input gmii_rx_dv_3, // To p3 of port_macro.v |
input [7:0] gmii_rxd_0, // To p0 of port_macro.v |
input [7:0] gmii_rxd_1, // To p1 of port_macro.v |
input [7:0] gmii_rxd_2, // To p2 of port_macro.v |
input [7:0] gmii_rxd_3, // To p3 of port_macro.v |
input gmii_rx_clk_0, // To p0 of port_macro.v |
input gmii_rx_clk_1, // To p1 of port_macro.v |
input gmii_rx_clk_2, // To p2 of port_macro.v |
input gmii_rx_clk_3, // To p3 of port_macro.v |
input gmii_rx_dv_0, // To p0 of port_macro.v |
input gmii_rx_dv_1, // To p1 of port_macro.v |
input gmii_rx_dv_2, // To p2 of port_macro.v |
input gmii_rx_dv_3, // To p3 of port_macro.v |
input [7:0] gmii_rxd_0, // To p0 of port_macro.v |
input [7:0] gmii_rxd_1, // To p1 of port_macro.v |
input [7:0] gmii_rxd_2, // To p2 of port_macro.v |
input [7:0] gmii_rxd_3, // To p3 of port_macro.v |
// End of automatics |
/*AUTOOUTPUT*/ |
// Beginning of automatic outputs (from unused autoinst outputs) |
output gmii_tx_dv_0, // From p0 of port_macro.v |
output gmii_tx_dv_1, // From p1 of port_macro.v |
output gmii_tx_dv_2, // From p2 of port_macro.v |
output gmii_tx_dv_3, // From p3 of port_macro.v |
output [7:0] gmii_txd_0, // From p0 of port_macro.v |
output [7:0] gmii_txd_1, // From p1 of port_macro.v |
output [7:0] gmii_txd_2, // From p2 of port_macro.v |
output [7:0] gmii_txd_3 // From p3 of port_macro.v |
output gmii_tx_en_0, // From p0 of port_macro.v |
output gmii_tx_en_1, // From p1 of port_macro.v |
output gmii_tx_en_2, // From p2 of port_macro.v |
output gmii_tx_en_3, // From p3 of port_macro.v |
output [7:0] gmii_txd_0, // From p0 of port_macro.v |
output [7:0] gmii_txd_1, // From p1 of port_macro.v |
output [7:0] gmii_txd_2, // From p2 of port_macro.v |
output [7:0] gmii_txd_3 // From p3 of port_macro.v |
// End of automatics |
); |
|
43,26 → 43,26
wire [`PRW_SZ-1:0] ri_data_3; |
/*AUTOWIRE*/ |
// Beginning of automatic wires (for undeclared instantiated-module outputs) |
wire [`NUM_PORTS-1:0] flo_data; // From fib_lookup of fib_lookup.v |
wire [3:0] flo_drdy; // From p0 of port_macro.v, ... |
wire [`NUM_PORTS-1:0] flo_srdy; // From fib_lookup of fib_lookup.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_0; // From p0 of port_macro.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_1; // From p1 of port_macro.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_2; // From p2 of port_macro.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_3; // From p3 of port_macro.v |
wire [`NUM_PORTS-1:0] p2f_drdy; // From fib_arb of sd_rrslow.v |
wire [3:0] p2f_srdy; // From p0 of port_macro.v, ... |
wire [`PAR_DATA_SZ-1:0] ppi_data; // From fib_arb of sd_rrslow.v |
wire ppi_drdy; // From fib_lookup of fib_lookup.v |
wire ppi_srdy; // From fib_arb of sd_rrslow.v |
wire ri_drdy_0; // From p0 of port_macro.v |
wire ri_drdy_1; // From p1 of port_macro.v |
wire ri_drdy_2; // From p2 of port_macro.v |
wire ri_drdy_3; // From p3 of port_macro.v |
wire ri_srdy_0; // From p3 of port_macro.v |
wire ri_srdy_1; // From p0 of port_macro.v |
wire ri_srdy_2; // From p1 of port_macro.v |
wire ri_srdy_3; // From p2 of port_macro.v |
wire [`NUM_PORTS-1:0] flo_data; // From fib_lookup of fib_lookup.v |
wire [3:0] flo_drdy; // From p0 of port_macro.v, ... |
wire [`NUM_PORTS-1:0] flo_srdy; // From fib_lookup of fib_lookup.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_0; // From p0 of port_macro.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_1; // From p1 of port_macro.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_2; // From p2 of port_macro.v |
wire [`PAR_DATA_SZ-1:0] p2f_data_3; // From p3 of port_macro.v |
wire [`NUM_PORTS-1:0] p2f_drdy; // From fib_arb of sd_rrslow.v |
wire [3:0] p2f_srdy; // From p0 of port_macro.v, ... |
wire [`PAR_DATA_SZ-1:0] ppi_data; // From fib_arb of sd_rrslow.v |
wire ppi_drdy; // From fib_lookup of fib_lookup.v |
wire ppi_srdy; // From fib_arb of sd_rrslow.v |
wire ri_drdy_0; // From p0 of port_macro.v |
wire ri_drdy_1; // From p1 of port_macro.v |
wire ri_drdy_2; // From p2 of port_macro.v |
wire ri_drdy_3; // From p3 of port_macro.v |
wire ri_srdy_0; // From p3 of port_macro.v |
wire ri_srdy_1; // From p0 of port_macro.v |
wire ri_srdy_2; // From p1 of port_macro.v |
wire ri_srdy_3; // From p2 of port_macro.v |
// End of automatics |
|
/* port_macro AUTO_TEMPLATE |
79,101 → 79,101
.\(.*\) (\1_@[]), |
); |
*/ |
port_macro p0 |
port_macro #(0) p0 |
(/*AUTOINST*/ |
// Outputs |
.ro_data (ri_data_1), // Templated |
.fli_drdy (flo_drdy[0]), // Templated |
.gmii_tx_dv (gmii_tx_dv_0), // Templated |
.gmii_txd (gmii_txd_0[7:0]), // Templated |
.p2f_data (p2f_data_0[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[0]), // Templated |
.ri_drdy (ri_drdy_0), // Templated |
.ro_srdy (ri_srdy_1), // Templated |
.ro_data (ri_data_1), // Templated |
.fli_drdy (flo_drdy[0]), // Templated |
.gmii_tx_en (gmii_tx_en_0), // Templated |
.gmii_txd (gmii_txd_0[7:0]), // Templated |
.p2f_data (p2f_data_0[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[0]), // Templated |
.ri_drdy (ri_drdy_0), // Templated |
.ro_srdy (ri_srdy_1), // Templated |
// Inputs |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_0), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[0]), // Templated |
.gmii_rx_clk (gmii_rx_clk_0), // Templated |
.gmii_rx_dv (gmii_rx_dv_0), // Templated |
.gmii_rxd (gmii_rxd_0[7:0]), // Templated |
.p2f_drdy (p2f_drdy[0]), // Templated |
.ri_srdy (ri_srdy_0), // Templated |
.ro_drdy (ri_drdy_1)); // Templated |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_0), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[0]), // Templated |
.gmii_rx_clk (gmii_rx_clk_0), // Templated |
.gmii_rx_dv (gmii_rx_dv_0), // Templated |
.gmii_rxd (gmii_rxd_0[7:0]), // Templated |
.p2f_drdy (p2f_drdy[0]), // Templated |
.ri_srdy (ri_srdy_0), // Templated |
.ro_drdy (ri_drdy_1)); // Templated |
|
port_macro p1 |
port_macro #(1) p1 |
(/*AUTOINST*/ |
// Outputs |
.ro_data (ri_data_2), // Templated |
.fli_drdy (flo_drdy[1]), // Templated |
.gmii_tx_dv (gmii_tx_dv_1), // Templated |
.gmii_txd (gmii_txd_1[7:0]), // Templated |
.p2f_data (p2f_data_1[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[1]), // Templated |
.ri_drdy (ri_drdy_1), // Templated |
.ro_srdy (ri_srdy_2), // Templated |
.ro_data (ri_data_2), // Templated |
.fli_drdy (flo_drdy[1]), // Templated |
.gmii_tx_en (gmii_tx_en_1), // Templated |
.gmii_txd (gmii_txd_1[7:0]), // Templated |
.p2f_data (p2f_data_1[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[1]), // Templated |
.ri_drdy (ri_drdy_1), // Templated |
.ro_srdy (ri_srdy_2), // Templated |
// Inputs |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_1), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[1]), // Templated |
.gmii_rx_clk (gmii_rx_clk_1), // Templated |
.gmii_rx_dv (gmii_rx_dv_1), // Templated |
.gmii_rxd (gmii_rxd_1[7:0]), // Templated |
.p2f_drdy (p2f_drdy[1]), // Templated |
.ri_srdy (ri_srdy_1), // Templated |
.ro_drdy (ri_drdy_2)); // Templated |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_1), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[1]), // Templated |
.gmii_rx_clk (gmii_rx_clk_1), // Templated |
.gmii_rx_dv (gmii_rx_dv_1), // Templated |
.gmii_rxd (gmii_rxd_1[7:0]), // Templated |
.p2f_drdy (p2f_drdy[1]), // Templated |
.ri_srdy (ri_srdy_1), // Templated |
.ro_drdy (ri_drdy_2)); // Templated |
|
port_macro p2 |
port_macro #(2) p2 |
(/*AUTOINST*/ |
// Outputs |
.ro_data (ri_data_3), // Templated |
.fli_drdy (flo_drdy[2]), // Templated |
.gmii_tx_dv (gmii_tx_dv_2), // Templated |
.gmii_txd (gmii_txd_2[7:0]), // Templated |
.p2f_data (p2f_data_2[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[2]), // Templated |
.ri_drdy (ri_drdy_2), // Templated |
.ro_srdy (ri_srdy_3), // Templated |
.ro_data (ri_data_3), // Templated |
.fli_drdy (flo_drdy[2]), // Templated |
.gmii_tx_en (gmii_tx_en_2), // Templated |
.gmii_txd (gmii_txd_2[7:0]), // Templated |
.p2f_data (p2f_data_2[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[2]), // Templated |
.ri_drdy (ri_drdy_2), // Templated |
.ro_srdy (ri_srdy_3), // Templated |
// Inputs |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_2), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[2]), // Templated |
.gmii_rx_clk (gmii_rx_clk_2), // Templated |
.gmii_rx_dv (gmii_rx_dv_2), // Templated |
.gmii_rxd (gmii_rxd_2[7:0]), // Templated |
.p2f_drdy (p2f_drdy[2]), // Templated |
.ri_srdy (ri_srdy_2), // Templated |
.ro_drdy (ri_drdy_3)); // Templated |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_2), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[2]), // Templated |
.gmii_rx_clk (gmii_rx_clk_2), // Templated |
.gmii_rx_dv (gmii_rx_dv_2), // Templated |
.gmii_rxd (gmii_rxd_2[7:0]), // Templated |
.p2f_drdy (p2f_drdy[2]), // Templated |
.ri_srdy (ri_srdy_2), // Templated |
.ro_drdy (ri_drdy_3)); // Templated |
|
port_macro p3 |
port_macro #(3) p3 |
(/*AUTOINST*/ |
// Outputs |
.ro_data (ri_data_0), // Templated |
.fli_drdy (flo_drdy[3]), // Templated |
.gmii_tx_dv (gmii_tx_dv_3), // Templated |
.gmii_txd (gmii_txd_3[7:0]), // Templated |
.p2f_data (p2f_data_3[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[3]), // Templated |
.ri_drdy (ri_drdy_3), // Templated |
.ro_srdy (ri_srdy_0), // Templated |
.ro_data (ri_data_0), // Templated |
.fli_drdy (flo_drdy[3]), // Templated |
.gmii_tx_en (gmii_tx_en_3), // Templated |
.gmii_txd (gmii_txd_3[7:0]), // Templated |
.p2f_data (p2f_data_3[`PAR_DATA_SZ-1:0]), // Templated |
.p2f_srdy (p2f_srdy[3]), // Templated |
.ri_drdy (ri_drdy_3), // Templated |
.ro_srdy (ri_srdy_0), // Templated |
// Inputs |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_3), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[3]), // Templated |
.gmii_rx_clk (gmii_rx_clk_3), // Templated |
.gmii_rx_dv (gmii_rx_dv_3), // Templated |
.gmii_rxd (gmii_rxd_3[7:0]), // Templated |
.p2f_drdy (p2f_drdy[3]), // Templated |
.ri_srdy (ri_srdy_3), // Templated |
.ro_drdy (ri_drdy_0)); // Templated |
.clk (clk), // Templated |
.reset (reset), // Templated |
.ri_data (ri_data_3), // Templated |
.fli_data (flo_data), // Templated |
.fli_srdy (flo_srdy[3]), // Templated |
.gmii_rx_clk (gmii_rx_clk_3), // Templated |
.gmii_rx_dv (gmii_rx_dv_3), // Templated |
.gmii_rxd (gmii_rxd_3[7:0]), // Templated |
.p2f_drdy (p2f_drdy[3]), // Templated |
.ri_srdy (ri_srdy_3), // Templated |
.ro_drdy (ri_drdy_0)); // Templated |
|
/* sd_rrslow AUTO_TEMPLATE |
( |
188,28 → 188,28
sd_rrslow #(`PAR_DATA_SZ,`NUM_PORTS,0) fib_arb |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (p2f_drdy[`NUM_PORTS-1:0]), // Templated |
.p_data (ppi_data[`PAR_DATA_SZ-1:0]), // Templated |
.p_srdy (ppi_srdy), // Templated |
.c_drdy (p2f_drdy[`NUM_PORTS-1:0]), // Templated |
.p_data (ppi_data[`PAR_DATA_SZ-1:0]), // Templated |
.p_srdy (ppi_srdy), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_data ({p2f_data_3,p2f_data_2,p2f_data_1,p2f_data_0}), // Templated |
.c_srdy (p2f_srdy[`NUM_PORTS-1:0]), // Templated |
.p_drdy (ppi_drdy)); // Templated |
.clk (clk), |
.reset (reset), |
.c_data ({p2f_data_3,p2f_data_2,p2f_data_1,p2f_data_0}), // Templated |
.c_srdy (p2f_srdy[`NUM_PORTS-1:0]), // Templated |
.p_drdy (ppi_drdy)); // Templated |
|
fib_lookup fib_lookup |
(/*AUTOINST*/ |
// Outputs |
.flo_data (flo_data[`NUM_PORTS-1:0]), |
.flo_srdy (flo_srdy[`NUM_PORTS-1:0]), |
.ppi_drdy (ppi_drdy), |
.flo_data (flo_data[`NUM_PORTS-1:0]), |
.flo_srdy (flo_srdy[`NUM_PORTS-1:0]), |
.ppi_drdy (ppi_drdy), |
// Inputs |
.clk (clk), |
.reset (reset), |
.ppi_data (ppi_data[`PAR_DATA_SZ-1:0]), |
.flo_drdy (flo_drdy[`NUM_PORTS-1:0]), |
.ppi_srdy (ppi_srdy)); |
.clk (clk), |
.reset (reset), |
.ppi_data (ppi_data[`PAR_DATA_SZ-1:0]), |
.flo_drdy (flo_drdy[`NUM_PORTS-1:0]), |
.ppi_srdy (ppi_srdy)); |
|
endmodule // bridge_ex1 |
// Local Variables: |
/srdydrdy_lib/trunk/examples/bridge/rtl/distributor.v
1,5 → 1,4
module distributor |
#(parameter width=8) |
(input clk, |
input reset, |
|
13,84 → 12,106
output [7:0] p_data |
); |
|
wire [width-1:0] ic_data; // From body of template_body_1i1o.v |
wire ic_drdy; // From sdout of sd_output.v |
wire ic_srdy; // From body of template_body_1i1o.v |
wire [width-1:0] ip_data; // From sdin of sd_input.v |
wire ip_drdy; // From body of template_body_1i1o.v |
wire ip_srdy; // From sdin of sd_input.v |
// End of automatics |
reg [7:0] ic_data; |
reg [1:0] ic_code; |
wire ic_drdy; |
reg ic_srdy; |
wire [`PFW_SZ-1:0] ip_data; |
reg ip_drdy; |
wire ip_srdy; |
reg [7:0] remain, nxt_remain; |
|
sd_input #(width) sdin |
(/*AUTOINST*/ |
sd_input #(`PFW_SZ) sdin |
( |
// Outputs |
.c_drdy (c_drdy), |
.c_drdy (ptx_drdy), |
.ip_srdy (ip_srdy), |
.ip_data (ip_data[width-1:0]), |
.ip_data (ip_data), |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_srdy (c_srdy), |
.c_data (c_data[width-1:0]), |
.c_srdy (ptx_srdy), |
.c_data (ptx_data), |
.ip_drdy (ip_drdy)); |
|
template_body_1i1o #(width) body |
(/*AUTOINST*/ |
// Outputs |
.ic_data (ic_data[width-1:0]), |
.ic_srdy (ic_srdy), |
.ip_drdy (ip_drdy), |
// Inputs |
.clk (clk), |
.reset (reset), |
.ic_drdy (ic_drdy), |
.ip_data (ip_data[width-1:0]), |
.ip_srdy (ip_srdy)); |
always @* |
begin |
nxt_remain = remain; |
ic_srdy = 0; |
ip_drdy = 0; |
|
sd_output #(width) sdout |
(/*AUTOINST*/ |
case (remain) |
0 : ic_data = ip_data[63:56]; |
7 : ic_data = ip_data[55:48]; |
6 : ic_data = ip_data[47:40]; |
5 : ic_data = ip_data[39:32]; |
4 : ic_data = ip_data[31:24]; |
3 : ic_data = ip_data[23:16]; |
2 : ic_data = ip_data[15: 8]; |
1 : ic_data = ip_data[ 7: 0]; |
default : ic_data = ip_data[63:56]; |
endcase |
|
if (ip_srdy & ic_drdy) |
begin |
if (remain == 0) |
begin |
ic_srdy = 1; |
if (ip_data[`PRW_VALID] == 0) |
nxt_remain = 7; |
else |
nxt_remain = ip_data[`PRW_VALID]-1; |
|
if (nxt_remain == 0) |
ip_drdy = 1; |
|
if (ip_data[`PRW_PCC] == `PCC_SOP) |
ic_code = `PCC_SOP; |
else |
ic_code = `PCC_DATA; |
end // if (remain == 0) |
else |
begin |
ic_srdy = 1; |
nxt_remain = remain - 1; |
if (nxt_remain == 0) |
begin |
ip_drdy = 1; |
if ((ip_data[`PRW_PCC] == `PCC_EOP) | |
(ip_data[`PRW_PCC] == `PCC_BADEOP)) |
ic_code = ip_data[`PRW_PCC]; |
else |
ic_code = `PCC_DATA; |
end |
else |
ic_code = `PCC_DATA; |
end // else: !if(remain == 0) |
end |
end // always @ * |
|
always @(posedge clk) |
begin |
if (reset) |
remain <= #1 0; |
else |
remain <= #1 nxt_remain; |
end |
|
sd_output #(8+2) sdout |
( |
// Outputs |
.ic_drdy (ic_drdy), |
.p_srdy (p_srdy), |
.p_data (p_data[width-1:0]), |
.p_data ({p_code,p_data}), |
// Inputs |
.clk (clk), |
.reset (reset), |
.ic_srdy (ic_srdy), |
.ic_data (ic_data[width-1:0]), |
.ic_data ({ic_code,ic_data}), |
.p_drdy (p_drdy)); |
|
endmodule // template_1i1o |
|
module template_body_1i1o |
#(parameter width=8) |
(input clk, |
input reset, |
output reg [width-1:0] ic_data, |
output reg ic_srdy, |
output reg ip_drdy, |
input ic_drdy, |
input [width-1:0] ip_data, |
input ip_srdy |
); |
|
always @* |
begin |
ic_data = ip_data; |
if (ip_srdy & ip_drdy) |
begin |
ic_srdy = 1; |
ip_drdy = 1; |
end |
else |
begin |
ic_srdy = 0; |
ip_drdy = 0; |
end |
end |
|
endmodule // template_body_1i1o |
|
// Local Variables: |
// verilog-library-directories:("." "../../../rtl/verilog/closure" "../../../rtl/verilog/memory" "../../../rtl/verilog/forks") |
// End: |
/srdydrdy_lib/trunk/examples/bridge/env/gmii_monitor.v
0,0 → 1,90
module gmii_monitor |
(/*AUTOARG*/ |
// Inputs |
clk, gmii_tx_en, gmii_txd |
); |
|
input clk; |
input gmii_tx_en; |
input [7:0] gmii_txd; |
|
parameter depth = 2048; |
|
reg [7:0] rxbuf [0:depth-1]; |
integer rxptr; |
event pkt_rcvd; |
integer state,rxpkt_num; |
integer err_cnt; |
integer i; |
|
parameter st_idle = 4, st_norm = 0, st_pre = 1; |
|
initial |
begin |
rxptr = 0; |
state = st_idle; |
rxpkt_num = 0; |
err_cnt = 0; |
end |
|
always @(posedge clk) |
begin |
case (state) |
st_idle : |
begin |
if (gmii_tx_en) |
begin |
if (gmii_txd == `GMII_SFD) |
state = st_norm; |
else |
state = st_pre; |
end |
end |
|
st_pre : |
begin |
if (gmii_txd == `GMII_SFD) |
state = st_norm; |
else if (!gmii_tx_en) |
begin |
$display ("%t: ERROR %m: Detected packet with no SFD", $time); |
state = st_idle; |
end |
end |
|
st_norm : |
begin |
if (gmii_tx_en) |
begin |
rxbuf[rxptr ] <= #1 gmii_txd; |
rxptr = rxptr + 1; |
end |
else |
begin |
->pkt_rcvd; |
state = st_idle; |
end |
end // case: st_norm |
endcase |
end // always @ (posedge clk) |
|
always @(pkt_rcvd) |
begin |
#2; |
rxpkt_num = rxpkt_num + 1; |
//pid = {rxbuf[rxptr-2], rxbuf[rxptr-1]}; |
|
$display ("%t: INFO : %m: Received packet %0d length %0d", $time,rxpkt_num,rxptr); |
|
for (i=0; i<rxptr; i=i+1) |
begin |
if (i % 16 == 0) $write ("%x: ", i[15:0]); |
$write ("%x ", rxbuf[i]); |
if (i % 16 == 7) $write ("| "); |
if (i % 16 == 15) $write ("\n"); |
end |
if (i % 16 != 0) $write ("\n"); |
rxptr = 0; |
end |
|
endmodule // it_monitor |
/srdydrdy_lib/trunk/examples/bridge/env/gmii_driver.v
67,6 → 67,21
end |
endtask |
|
task print_packet; |
input [31:0] length; |
integer i; |
begin |
for (i=0; i<length; i=i+1) |
begin |
if (i % 16 == 0) $write ("%x: ", i[15:0]); |
$write ("%x ", rxbuf[i]); |
if (i % 16 == 7) $write ("| "); |
if (i % 16 == 15) $write ("\n"); |
end |
if (i % 16 != 0) $write ("\n"); |
end |
endtask |
|
task send_packet; |
input [47:0] da, sa; |
input [15:0] length; |
82,6 → 97,8
rxbuf[length-2], rxbuf[length-1] } = crc32_result; |
|
$display ("%m : Sending packet DA=%x SA=%x of length %0d", da, sa, length); |
print_packet (length); |
|
repeat (7) |
begin |
@(posedge rx_clk); |
/srdydrdy_lib/trunk/examples/bridge/env/run
1,5 → 1,11
#!/bin/bash |
|
which vcs &> /dev/null |
if [ "$?" == "-1" ]; then |
iverilog -f bridge.vf |
./a.out |
else |
vcs -full64 +v2k -R -I -f bridge.vf |
#vcd2vpd env_top.vcd env_top.vpd |
fi |
|
/srdydrdy_lib/trunk/examples/bridge/env/bridge.vf
2,6 → 2,7
|
env_top.v |
gmii_driver.v |
gmii_monitor.v |
|
../rtl/basic_hashfunc.v |
../rtl/bridge_ex1.v |
/srdydrdy_lib/trunk/examples/bridge/env/env_top.v
12,8 → 12,12
|
initial |
begin |
`ifdef VCS |
$vcdpluson; |
`else |
$dumpfile ("env_top.vcd"); |
$dumpvars; |
`endif |
reset = 1; |
#200; |
reset = 0; |
35,26 → 39,26
|
/*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 |
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_en_0; // From bridge of bridge_ex1.v |
wire gmii_tx_en_1; // From bridge of bridge_ex1.v |
wire gmii_tx_en_2; // From bridge of bridge_ex1.v |
wire gmii_tx_en_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 |
65,58 → 69,92
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 |
.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 |
.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 |
.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 |
.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]), |
.gmii_tx_en_0 (gmii_tx_en_0), |
.gmii_tx_en_1 (gmii_tx_en_1), |
.gmii_tx_en_2 (gmii_tx_en_2), |
.gmii_tx_en_3 (gmii_tx_en_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])); |
.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])); |
|
/* gmii_monitor AUTO_TEMPLATE |
( |
.clk (clk), |
.\(.*\) (\1_@[]), |
); |
*/ |
gmii_monitor mon0 |
(/*AUTOINST*/ |
// Inputs |
.clk (clk), // Templated |
.gmii_tx_en (gmii_tx_en_0), // Templated |
.gmii_txd (gmii_txd_0[7:0])); // Templated |
|
gmii_monitor mon1 |
(/*AUTOINST*/ |
// Inputs |
.clk (clk), // Templated |
.gmii_tx_en (gmii_tx_en_1), // Templated |
.gmii_txd (gmii_txd_1[7:0])); // Templated |
|
gmii_monitor mon2 |
(/*AUTOINST*/ |
// Inputs |
.clk (clk), // Templated |
.gmii_tx_en (gmii_tx_en_2), // Templated |
.gmii_txd (gmii_txd_2[7:0])); // Templated |
|
gmii_monitor mon3 |
(/*AUTOINST*/ |
// Inputs |
.clk (clk), // Templated |
.gmii_tx_en (gmii_tx_en_3), // Templated |
.gmii_txd (gmii_txd_3[7:0])); // Templated |
|
endmodule // env_top |
// Local Variables: |
// verilog-library-directories:("." "../rtl") |