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
    /
    from Rev 31 to Rev 30
    Reverse comparison

Rev 31 → Rev 30

/srdydrdy_lib/trunk/examples/bridge/rtl/sd_rx_gigmac.v
20,9 → 20,7
output rxg_srdy,
input rxg_drdy,
output [1:0] rxg_code,
output [7:0] rxg_data,
 
input cfg_check_crc
output [7:0] rxg_data
);
 
reg rxdv1, rxdv2;
157,7 → 155,7
begin
ic_srdy =1;
ic_data = pkt_crc[31:24];
if ((pkt_crc == crc) | !cfg_check_crc)
if (pkt_crc == crc)
begin
ic_code = `PCC_EOP;
end
/srdydrdy_lib/trunk/examples/bridge/rtl/port_macro.v
1,53 → 1,31
module port_macro
#(parameter port_num = 0,
parameter lpsz = 12,
parameter lpdsz = 13)
#(parameter port_num = 0)
(input clk,
input reset,
 
input [`PRW_SZ-1:0] ri_data, // To ring_tap of port_ring_tap.v
output [`PRW_SZ-1:0] ro_data, // From ring_tap of port_ring_tap.v
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 drf_drdy, // To dealloc of deallocator.v
input [`LL_PG_ASZ-1:0] f2d_data, // To dealloc of deallocator.v
input f2d_srdy, // To dealloc of deallocator.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 lnp_drdy, // To alloc of allocator.v
input par_drdy, // To alloc of allocator.v
input [`LL_PG_ASZ-1:0] parr_page, // To alloc of allocator.v
input parr_srdy, // To alloc of allocator.v
input pbra_drdy, // To alloc of allocator.v
input pbrd_drdy, // To dealloc of deallocator.v
input [`PFW_SZ-1:0] pbrr_data, // To dealloc of deallocator.v
input pbrr_srdy, // To dealloc of deallocator.v
input pm2f_drdy, // To pm2f_join of sd_ajoin2.v
input rlp_drdy, // To dealloc of deallocator.v
input [`LL_PG_ASZ:0] rlpr_data, // To dealloc of deallocator.v
input rlpr_srdy, // To dealloc of deallocator.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 rarb_ack, // To ring_tap of port_ring_tap.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
/*AUTOOUTPUT*/
// Beginning of automatic outputs (from unused autoinst outputs)
output [`LL_PG_ASZ*2-1:0] drf_page_list, // From dealloc of deallocator.v
output drf_srdy, // From dealloc of deallocator.v
output f2d_drdy, // From dealloc of deallocator.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 [`LL_LNP_SZ-1:0] lnp_pnp, // From alloc of allocator.v
output lnp_srdy, // From alloc of allocator.v
output par_srdy, // From alloc of allocator.v
output parr_drdy, // From alloc of allocator.v
output [`PBR_SZ-1:0] pbra_data, // From alloc of allocator.v
output pbra_srdy, // From alloc of allocator.v
output [`PBR_SZ-1:0] pbrd_data, // From dealloc of deallocator.v
output pbrd_srdy, // From dealloc of deallocator.v
output pbrr_drdy, // From dealloc of deallocator.v
output [(`PAR_DATA_SZ)+(`LL_PG_ASZ*2)-1:0] pm2f_data,// From pm2f_join of sd_ajoin2.v
output pm2f_srdy, // From pm2f_join of sd_ajoin2.v
output [`LL_PG_ASZ-1:0] rlp_rd_page, // From dealloc of deallocator.v
output rlp_srdy, // From dealloc of deallocator.v
output rlpr_drdy // From dealloc of deallocator.v
// End of automatics
 
output rarb_req,
output fli_drdy, // From ring_tap of port_ring_tap.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
output ri_drdy, // From ring_tap of port_ring_tap.v
output ro_srdy // From ring_tap of port_ring_tap.v
);
 
wire [`RX_USG_SZ-1:0] rx_usage;
60,35 → 38,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 a2f_drdy; // From pm2f_join of sd_ajoin2.v
wire [`LL_PG_ASZ-1:0] a2f_end; // From alloc of allocator.v
wire a2f_srdy; // From alloc of allocator.v
wire [`LL_PG_ASZ-1:0] a2f_start; // From alloc of allocator.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 alloc of allocator.v
wire crx_srdy; // From con of concentrator.v
wire gmii_rx_reset; // From port_clocking of port_clocking.v
wire [`PAR_DATA_SZ-1:0] p2f_data; // From pkt_parse of pkt_parse.v
wire p2f_drdy; // From pm2f_join of sd_ajoin2.v
wire p2f_srdy; // From pkt_parse of pkt_parse.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 ptx_drdy; // From dst of distributor.v
wire ptx_srdy; // From dealloc of deallocator.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
 
 
95,11 → 74,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
(
109,19 → 88,17
);
*/
sd_rx_gigmac rx_gigmac
(
.cfg_check_crc (1'b0),
/*AUTOINST*/
(/*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
(
138,36 → 115,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 #(port_num) pkt_parse
(
/*AUTOINST*/
(/*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
(
178,102 → 154,120
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
 
/* allocator AUTO_TEMPLATE
(
);
*/
allocator alloc
/* sd_fifo_b AUTO_TEMPLATE "fifo_\(.*\)"
(
.p_abort (1'b0),
.p_commit (1'b0),
.c_usage (@_usage),
.p_usage (),
.c_\(.*\) (c@_\1),
.p_\(.*\) (p@_\1),
);
*/
sd_fifo_b #(`PFW_SZ, `RX_FIFO_DEPTH, 0, 1) fifo_rx
(/*AUTOINST*/
// Outputs
.crx_drdy (crx_drdy),
.par_srdy (par_srdy),
.parr_drdy (parr_drdy),
.lnp_srdy (lnp_srdy),
.lnp_pnp (lnp_pnp[`LL_LNP_SZ-1:0]),
.pbra_data (pbra_data[`PBR_SZ-1:0]),
.pbra_srdy (pbra_srdy),
.a2f_start (a2f_start[`LL_PG_ASZ-1:0]),
.a2f_end (a2f_end[`LL_PG_ASZ-1:0]),
.a2f_srdy (a2f_srdy),
.c_drdy (crx_drdy), // Templated
.p_srdy (prx_srdy), // Templated
.p_data (prx_data), // Templated
.p_usage (), // Templated
.c_usage (rx_usage), // Templated
// Inputs
.clk (clk),
.reset (reset),
.crx_abort (crx_abort),
.crx_commit (crx_commit),
.crx_data (crx_data[`PFW_SZ-1:0]),
.crx_srdy (crx_srdy),
.par_drdy (par_drdy),
.parr_srdy (parr_srdy),
.parr_page (parr_page[`LL_PG_ASZ-1:0]),
.lnp_drdy (lnp_drdy),
.pbra_drdy (pbra_drdy),
.a2f_drdy (a2f_drdy));
.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_ajoin2 AUTO_TEMPLATE
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
.p_usage (), // Templated
.c_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
 
/* port_ring_tap AUTO_TEMPLATE
(
.c2_data ({a2f_end,a2f_start}),
.c1_\(.*\) (p2f_\1[]),
.c2_\(.*\) (a2f_\1[]),
.p_\(.*\) (pm2f_\1[]),
);
.ro_data (ro_data[`PRW_SZ-1:0]),
.ri_data (ri_data[`PRW_SZ-1:0]),
.prx_\(.*\) (prx_\1),
.ptx_\(.*\) (rttx_\1),
);
*/
sd_ajoin2 #(.c1_width(`PAR_DATA_SZ), .c2_width(`LL_PG_ASZ*2)) pm2f_join
port_ring_tap #(port_num) ring_tap
(/*AUTOINST*/
// Outputs
.c1_drdy (p2f_drdy), // Templated
.c2_drdy (a2f_drdy), // Templated
.p_srdy (pm2f_srdy), // Templated
.p_data (pm2f_data[(`PAR_DATA_SZ)+(`LL_PG_ASZ*2)-1:0]), // Templated
.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),
.rarb_req (rarb_req),
// Inputs
.clk (clk),
.reset (reset),
.c1_srdy (p2f_srdy), // Templated
.c1_data (p2f_data[(`PAR_DATA_SZ)-1:0]), // Templated
.c2_srdy (a2f_srdy), // Templated
.c2_data ({a2f_end,a2f_start}), // Templated
.p_drdy (pm2f_drdy)); // Templated
.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]),
.rarb_ack (rarb_ack));
 
deallocator dealloc
/* egr_oflow AUTO_TEMPLATE
(
.c_\(.*\) (rttx_\1[]),
.p_\(.*\) (ctx_\1[]),
);
*/
egr_oflow oflow
(/*AUTOINST*/
// Outputs
.f2d_drdy (f2d_drdy),
.rlp_srdy (rlp_srdy),
.rlp_rd_page (rlp_rd_page[`LL_PG_ASZ-1:0]),
.rlpr_drdy (rlpr_drdy),
.drf_srdy (drf_srdy),
.drf_page_list (drf_page_list[`LL_PG_ASZ*2-1:0]),
.pbrd_data (pbrd_data[`PBR_SZ-1:0]),
.pbrd_srdy (pbrd_srdy),
.pbrr_drdy (pbrr_drdy),
.ptx_srdy (ptx_srdy),
.ptx_data (ptx_data[`PFW_SZ-1:0]),
.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),
.port_num (port_num[1:0]),
.f2d_srdy (f2d_srdy),
.f2d_data (f2d_data[`LL_PG_ASZ-1:0]),
.rlp_drdy (rlp_drdy),
.rlpr_srdy (rlpr_srdy),
.rlpr_data (rlpr_data[`LL_PG_ASZ:0]),
.drf_drdy (drf_drdy),
.pbrd_drdy (pbrd_drdy),
.pbrr_srdy (pbrr_srdy),
.pbrr_data (pbrr_data[`PFW_SZ-1:0]),
.ptx_drdy (ptx_drdy));
.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
(
283,29 → 277,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_en (gmii_tx_en),
.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/fib_lookup_fsm.v
1,15 → 1,15
module fib_lookup_fsm
(/*AUTOARG*/
// Outputs
lpp_drdy, ft_wdata, ft_rd_en, ft_wr_en, ft_addr, lout_start,
lout_srdy, lout_dst_vld, refup_srdy, refup_page, refup_count,
lpp_drdy, ft_wdata, ft_rd_en, ft_wr_en, ft_addr, lout_data,
lout_srdy, lout_dst_vld,
// Inputs
clk, reset, lpp_data, lpp_srdy, ft_rdata, lout_drdy, refup_drdy
clk, reset, lpp_data, lpp_srdy, ft_rdata, lout_drdy
);
 
input clk, reset;
input [`PM2F_SZ-1:0] lpp_data;
input [`PAR_DATA_SZ-1:0] lpp_data;
input lpp_srdy;
output reg lpp_drdy;
 
18,16 → 18,11
output reg ft_rd_en, ft_wr_en;
output reg [`FIB_ASZ-1:0] ft_addr;
output [`LL_PG_ASZ-1:0] lout_start;
output reg [`NUM_PORTS-1:0] lout_data;
output reg lout_srdy;
input lout_drdy;
output reg [`NUM_PORTS-1:0] lout_dst_vld;
output [`NUM_PORTS-1:0] lout_dst_vld;
output refup_srdy;
input refup_drdy;
output [`LL_PG_ASZ-1:0] refup_page;
output [`LL_REFSZ-1:0] refup_count;
 
wire [`FIB_ASZ-1:0] hf_out;
reg [47:0] hf_in;
 
34,36 → 29,10
wire [`NUM_PORTS-1:0] source_port_mask;
 
reg [`FIB_ASZ-1:0] init_ctr, nxt_init_ctr;
reg [5:0] state, nxt_state;
reg lrefup_srdy;
reg [`LL_REFSZ-1:0] lrefup_count;
 
reg [4:0] state, nxt_state;
assign source_port_mask = 1 << lpp_data[`PAR_SRCPORT];
 
//assign lrefup_count = count_bits (lout_dst_vld);
//assign refup_page = lpp_data[`A2F_STARTPG];
assign lout_start = lpp_data[`A2F_STARTPG];
function [`LL_REFSZ-1:0] count_bits;
input [`NUM_PORTS-1:0] dest;
integer i, count;
begin
count = 0;
for (i=0; i<4; i=i+1)
if (dest[i]) count = count + 1;
count_bits = count;
end
endfunction // for
 
sd_iohalf #(.width(`LL_PG_ASZ+`LL_REFSZ)) refup_buf
(.clk (clk), .reset (reset),
.c_srdy (lrefup_srdy),
.c_drdy (lrefup_drdy),
.c_data ({lrefup_count, lpp_data[`A2F_STARTPG]}),
.p_srdy (refup_srdy),
.p_drdy (refup_drdy),
.p_data ({refup_count, refup_page}));
basic_hashfunc #(48, `FIB_ENTRIES) hashfunc
(
// Outputs
72,10 → 41,13
.hf_in (hf_in));
 
localparam s_idle = 0, s_da_lookup = 1, s_sa_lookup = 2,
s_init0 = 3, s_init1 = 4, s_wait_refup = 5;
s_init0 = 3, s_init1 = 4;
localparam ns_idle = 1, ns_da_lookup = 2, ns_sa_lookup = 4,
ns_init0 = 8, ns_init1 = 16, ns_wait_refup = 1 << s_wait_refup;
ns_init0 = 8, ns_init1 = 16;
 
// send all results back to their originating port
assign lout_dst_vld = source_port_mask;
 
reg amux;
 
always @*
93,11 → 65,10
ft_rd_en = 0;
ft_wr_en = 0;
amux = 0;
lout_dst_vld = 0;
lout_data = 0;
lout_srdy = 0;
lpp_drdy = 0;
nxt_init_ctr = init_ctr;
lrefup_srdy = 0;
case (1'b1)
state[s_idle] :
108,7 → 79,7
if (lpp_data[`PAR_MACDA] & `MULTICAST)
begin
// flood the packet, don't bother to do DA lookup
lout_dst_vld = ~source_port_mask;
lout_data = ~source_port_mask;
lout_srdy = 1;
if (lout_drdy)
nxt_state = ns_sa_lookup;
130,11 → 101,11
// no match, flood packet
if (ft_rdata[`FIB_AGE] == 0)
begin
lout_dst_vld = ~source_port_mask;
lout_data = ~source_port_mask;
end
else
begin
lout_dst_vld = (1 << ft_rdata[`FIB_PORT]) & ~source_port_mask;
lout_data = (1 << ft_rdata[`FIB_PORT]) & ~source_port_mask;
end
lout_srdy = 1;
152,25 → 123,7
ft_wdata[`FIB_AGE] = `FIB_MAX_AGE;
ft_wdata[`FIB_PORT] = lpp_data[`PAR_SRCPORT];
nxt_state = ns_idle;
 
lrefup_srdy = 1;
if (lrefup_drdy)
begin
nxt_state = ns_idle;
lpp_drdy = 1;
end
else
nxt_state = ns_wait_refup;
end // case: state[s_sa_lookup]
 
state[s_wait_refup] :
begin
lrefup_srdy = 1;
if (lrefup_drdy)
begin
nxt_state = ns_idle;
lpp_drdy = 1;
end
lpp_drdy = 1;
end
 
state[s_init0] :
200,14 → 153,11
begin
init_ctr <= #1 0;
state <= #1 ns_init0;
lrefup_count <= #1 0;
end
else
begin
init_ctr <= #1 nxt_init_ctr;
state <= #1 nxt_state;
if (lout_srdy)
lrefup_count <= #1 count_bits (lout_dst_vld);
end
end
 
/srdydrdy_lib/trunk/examples/bridge/rtl/bridge.vh
6,7 → 6,7
// We will have only 4 ports in our sample design
`define NUM_PORTS 4
 
// Data structure from parser to Allocator/FIB. Contains MAC DA,
// Data structure from parser to FIB. Contains MAC DA,
// MAC SA, and source port
`define PAR_DATA_SZ (48+48+4)
`define PAR_MACDA 47:0
13,13 → 13,6
`define PAR_MACSA 95:48
`define PAR_SRCPORT 99:96
 
// additional information from allocator to FIB
`define A2F_STARTPG 111:100
`define A2F_ENDPG 123:112
 
// total size of parser+allocator structure to FIB
`define PM2F_SZ 124
 
// number of entries in FIB table
`define FIB_ENTRIES 256
`define FIB_ASZ $clog2(`FIB_ENTRIES)
40,13 → 33,9
`define PCC_EOP 2'b10 // End of packet
`define PCC_BADEOP 2'b11 // End of packet w/ error
 
`define ANY_EOP(x) (( (x) == `PCC_EOP) || ( (x) == `PCC_BADEOP))
 
// Packet FIFO Word
`define PRW_DATA 63:0 // 64 bits of packet data
`define PRW_PCC 65:64 // packet control code
`define PRW_VALID 68:66 // # of valid bytes modulo 8
`define PFW_SZ 69
// uses same field definitions as Packet Ring Word, but no PVEC bit
`define PFW_SZ 69
 
// Port FIFO sizes
`define RX_FIFO_DEPTH 256
55,30 → 44,14
`define RX_USG_SZ $clog2(`RX_FIFO_DEPTH)+1
`define TX_USG_SZ $clog2(`TX_FIFO_DEPTH)+1
 
// Linked List Definitions
`define LL_PAGES 4096
`define LL_PG_ASZ $clog2(`LL_PAGES)
// Packet Ring Word
 
`define LL_ENDPAGE { 1'b1, {`LL_PG_ASZ{1'b0}} }
`define PRW_SZ 70
`define PRW_DATA 63:0 // 64 bits of packet data
`define PRW_PCC 65:64 // packet control code
`define PRW_VALID 68:66 // # of valid bytes modulo 8
`define PRW_PVEC 69 // indicates this is port vector word
 
`define LL_MAX_REF 16
`define LL_REFSZ 4
 
`define LL_LNP_SZ (`LL_PG_ASZ*2+1)
 
 
// Packet buffer size
`define PB_LINES_PER_PAGE 4
`define PB_DEPTH (`LL_PAGES*`PB_LINES_PER_PAGE)
`define PB_ASZ $clog2(`PB_DEPTH)
 
// Packet buffer request structure
`define PBR_DATA 68:0 // only valid for writes
`define PBR_ADDR 82:69
`define PBR_WRITE 83
`define PBR_PORT 87:84 // only valid for reads
`define PBR_SZ 88
 
// GMII definitions
`define GMII_PRE 8'h55
`define GMII_SFD 8'hD5
/srdydrdy_lib/trunk/examples/bridge/rtl/fib_lookup.v
4,33 → 4,29
module fib_lookup
(/*AUTOARG*/
// Outputs
refup_srdy, refup_page, refup_count, ppi_drdy, flo_data, flo_srdy,
ppi_drdy, flo_data, flo_srdy,
// Inputs
refup_drdy, ppi_srdy, clk, reset, ppi_data, flo_drdy
ppi_srdy, clk, reset, ppi_data, flo_drdy
);
 
input clk;
input reset;
 
input [`PM2F_SZ-1:0] ppi_data;
output [`LL_PG_ASZ-1:0] flo_data;
input [`PAR_DATA_SZ-1:0] ppi_data;
output [`NUM_PORTS-1:0] flo_data;
output [`NUM_PORTS-1:0] flo_srdy;
input [`NUM_PORTS-1:0] flo_drdy;
/*AUTOINPUT*/
// Beginning of automatic inputs (from unused autoinst inputs)
input ppi_srdy; // To port_parse_in of sd_input.v
input refup_drdy; // To fsm0 of fib_lookup_fsm.v
// End of automatics
/*AUTOOUTPUT*/
// Beginning of automatic outputs (from unused autoinst outputs)
output ppi_drdy; // From port_parse_in of sd_input.v
output [`LL_REFSZ-1:0] refup_count; // From fsm0 of fib_lookup_fsm.v
output [`LL_PG_ASZ-1:0] refup_page; // From fsm0 of fib_lookup_fsm.v
output refup_srdy; // From fsm0 of fib_lookup_fsm.v
// End of automatics
 
wire [`FIB_ENTRY_SZ-1:0] ft_rdata;
wire [`PM2F_SZ-1:0] lpp_data;
wire [`PAR_DATA_SZ-1:0] lpp_data;
/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module outputs)
wire [`FIB_ASZ-1:0] ft_addr; // From fsm0 of fib_lookup_fsm.v
37,10 → 33,10
wire ft_rd_en; // From fsm0 of fib_lookup_fsm.v
wire [`FIB_ENTRY_SZ-1:0] ft_wdata; // From fsm0 of fib_lookup_fsm.v
wire ft_wr_en; // From fsm0 of fib_lookup_fsm.v
wire [`NUM_PORTS-1:0] lout_data; // From fsm0 of fib_lookup_fsm.v
wire lout_drdy; // From fib_res_out of sd_mirror.v
wire [`NUM_PORTS-1:0] lout_dst_vld; // From fsm0 of fib_lookup_fsm.v
wire lout_srdy; // From fsm0 of fib_lookup_fsm.v
wire [`LL_PG_ASZ-1:0] lout_start; // From fsm0 of fib_lookup_fsm.v
wire lpp_drdy; // From fsm0 of fib_lookup_fsm.v
wire lpp_srdy; // From port_parse_in of sd_input.v
// End of automatics
51,7 → 47,7
.ip_\(.*\) (lpp_\1),
);
*/
sd_input #(`PM2F_SZ) port_parse_in
sd_input #(`PAR_DATA_SZ) port_parse_in
(/*AUTOINST*/
// Outputs
.c_drdy (ppi_drdy), // Templated
91,31 → 87,24
.ft_rd_en (ft_rd_en),
.ft_wr_en (ft_wr_en),
.ft_addr (ft_addr[`FIB_ASZ-1:0]),
.lout_start (lout_start[`LL_PG_ASZ-1:0]),
.lout_data (lout_data[`NUM_PORTS-1:0]),
.lout_srdy (lout_srdy),
.lout_dst_vld (lout_dst_vld[`NUM_PORTS-1:0]),
.refup_srdy (refup_srdy),
.refup_page (refup_page[`LL_PG_ASZ-1:0]),
.refup_count (refup_count[`LL_REFSZ-1:0]),
// Inputs
.clk (clk),
.reset (reset),
.lpp_data (lpp_data[`PM2F_SZ-1:0]),
.lpp_data (lpp_data[`PAR_DATA_SZ-1:0]),
.lpp_srdy (lpp_srdy),
.ft_rdata (ft_rdata[`FIB_ENTRY_SZ-1:0]),
.lout_drdy (lout_drdy),
.refup_drdy (refup_drdy));
.lout_drdy (lout_drdy));
 
/* sd_mirror AUTO_TEMPLATE
(
.c_data (lout_start[`LL_PG_ASZ-1:0]),
.c_\(.*\) (lout_\1),
.p_\(.*\) (flo_\1),
)
*/
sd_mirror #(// Parameters
.mirror (`NUM_PORTS),
.width (`LL_PG_ASZ)) fib_res_out
sd_mirror #(`NUM_PORTS, `NUM_PORTS) fib_res_out
(/*AUTOINST*/
// Outputs
.c_drdy (lout_drdy), // Templated
125,7 → 114,7
.clk (clk),
.reset (reset),
.c_srdy (lout_srdy), // Templated
.c_data (lout_start[`LL_PG_ASZ-1:0]), // Templated
.c_data (lout_data), // Templated
.c_dst_vld (lout_dst_vld), // Templated
.p_drdy (flo_drdy)); // Templated
 

powered by: WebSVN 2.1.0

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