Line 88... |
Line 88... |
//
|
//
|
`define TC_IIN_W 1+1+1+`TC_AW+`TC_BSW+1+`TC_DW
|
`define TC_IIN_W 1+1+1+`TC_AW+`TC_BSW+1+`TC_DW
|
|
|
//
|
//
|
// Traffic Cop Top
|
// Traffic Cop Top
|
// There are two channels to tc_top. One channel
|
|
// is dedicated to connecting the initiators to target 0
|
|
// only. The second channel is is for connecting the initiators
|
|
// to targets 2-8. Additional comments are added below
|
|
//
|
//
|
module tc_top (
|
module tc_top (
|
wb_clk_i,
|
wb_clk_i,
|
wb_rst_i,
|
wb_rst_i,
|
|
|
Line 554... |
Line 550... |
// Internal wires & registers
|
// Internal wires & registers
|
//
|
//
|
|
|
//
|
//
|
// Outputs for initiators from both mi_to_st blocks
|
// Outputs for initiators from both mi_to_st blocks
|
//Wires prefixed with x refer to a channel that only contains
|
|
//target 0.
|
|
//Wires prefixed with y refers to a second channel that contains
|
|
//targets 1-8
|
|
//
|
//
|
wire [`TC_DW-1:0] xi0_wb_dat_o;
|
wire [`TC_DW-1:0] xi0_wb_dat_o;
|
wire xi0_wb_ack_o;
|
wire xi0_wb_ack_o;
|
wire xi0_wb_err_o;
|
wire xi0_wb_err_o;
|
wire [`TC_DW-1:0] xi1_wb_dat_o;
|
wire [`TC_DW-1:0] xi1_wb_dat_o;
|
Line 625... |
Line 617... |
wire z_wb_ack_t;
|
wire z_wb_ack_t;
|
wire z_wb_err_t;
|
wire z_wb_err_t;
|
|
|
//
|
//
|
// Outputs for initiators are ORed from both mi_to_st blocks
|
// Outputs for initiators are ORed from both mi_to_st blocks
|
//The two separate channels going back to the initiator are
|
|
//merged here
|
|
//Remember x is target 0 only. y is targets 2-8
|
|
//
|
|
//
|
//
|
assign i0_wb_dat_o = xi0_wb_dat_o | yi0_wb_dat_o;
|
assign i0_wb_dat_o = xi0_wb_dat_o | yi0_wb_dat_o;
|
assign i0_wb_ack_o = xi0_wb_ack_o | yi0_wb_ack_o;
|
assign i0_wb_ack_o = xi0_wb_ack_o | yi0_wb_ack_o;
|
assign i0_wb_err_o = xi0_wb_err_o | yi0_wb_err_o;
|
assign i0_wb_err_o = xi0_wb_err_o | yi0_wb_err_o;
|
assign i1_wb_dat_o = xi1_wb_dat_o | yi1_wb_dat_o;
|
assign i1_wb_dat_o = xi1_wb_dat_o | yi1_wb_dat_o;
|
Line 657... |
Line 645... |
assign i7_wb_ack_o = xi7_wb_ack_o | yi7_wb_ack_o;
|
assign i7_wb_ack_o = xi7_wb_ack_o | yi7_wb_ack_o;
|
assign i7_wb_err_o = xi7_wb_err_o | yi7_wb_err_o;
|
assign i7_wb_err_o = xi7_wb_err_o | yi7_wb_err_o;
|
|
|
//
|
//
|
// From initiators to target 0
|
// From initiators to target 0
|
//This defines a channel going only to target 0.
|
|
//This forms a multiplexing arbiter. The module gets used in two places.
|
|
//This instance is used to define a dedicated channel to target 0.
|
|
//
|
//
|
tc_mi_to_st #(t0_addr_w, t0_addr,
|
tc_mi_to_st #(t0_addr_w, t0_addr,
|
0, t0_addr_w, t0_addr) t0_ch(
|
0, t0_addr_w, t0_addr) t0_ch(
|
.wb_clk_i(wb_clk_i),
|
.wb_clk_i(wb_clk_i),
|
.wb_rst_i(wb_rst_i),
|
.wb_rst_i(wb_rst_i),
|
Line 769... |
Line 754... |
|
|
);
|
);
|
|
|
//
|
//
|
//From initiators to targets 1-8 (upper part)
|
//From initiators to targets 1-8 (upper part)
|
//This instance is used to define a second channel for accessing
|
|
//targets 1-8. Note the "z-wires" that connect
|
|
//this instance to the t18_ch_lower instance defined
|
|
//further down
|
|
//
|
//
|
tc_mi_to_st #(t1_addr_w, t1_addr,
|
tc_mi_to_st #(t1_addr_w, t1_addr,
|
1, t28c_addr_w, t28_addr) t18_ch_upper(
|
1, t28c_addr_w, t28_addr) t18_ch_upper(
|
.wb_clk_i(wb_clk_i),
|
.wb_clk_i(wb_clk_i),
|
.wb_rst_i(wb_rst_i),
|
.wb_rst_i(wb_rst_i),
|
Line 882... |
Line 863... |
|
|
);
|
);
|
|
|
//
|
//
|
// From initiators to targets 1-8 (lower part)
|
// From initiators to targets 1-8 (lower part)
|
//This instance is used to route the signals
|
|
//from tc18_ch_upper to the destination target.
|
|
//
|
//
|
tc_si_to_mt #(t1_addr_w, t1_addr, t28i_addr_w, t2_addr, t3_addr,
|
tc_si_to_mt #(t1_addr_w, t1_addr, t28i_addr_w, t2_addr, t3_addr,
|
t4_addr, t5_addr, t6_addr, t7_addr, t8_addr) t18_ch_lower(
|
t4_addr, t5_addr, t6_addr, t7_addr, t8_addr) t18_ch_lower(
|
|
|
.i0_wb_cyc_i(z_wb_cyc_i),
|
.i0_wb_cyc_i(z_wb_cyc_i),
|