39 lines
1011 B
Verilog
39 lines
1011 B
Verilog
`include "VX_cache_config.vh"
|
|
|
|
module VX_snp_fwd_arb
|
|
#(
|
|
parameter NUM_BANKS = 8
|
|
)
|
|
(
|
|
input wire[NUM_BANKS-1:0] per_bank_snp_fwd,
|
|
input wire[NUM_BANKS-1:0][31:0] per_bank_snp_fwd_addr,
|
|
output reg[NUM_BANKS-1:0] per_bank_snp_fwd_pop,
|
|
|
|
output wire snp_fwd,
|
|
output wire[31:0] snp_fwd_addr,
|
|
input wire snp_fwd_delay
|
|
|
|
);
|
|
|
|
wire[NUM_BANKS-1:0] qual_per_bank_snp_fwd = per_bank_snp_fwd & {NUM_BANKS{!snp_fwd_delay}};
|
|
|
|
wire[`LOG2UP(NUM_BANKS)-1:0] fsq_bank;
|
|
wire fsq_valid;
|
|
|
|
VX_generic_priority_encoder #(.N(NUM_BANKS)) VX_sel_ffsq(
|
|
.valids(qual_per_bank_snp_fwd),
|
|
.index (fsq_bank),
|
|
.found (fsq_valid)
|
|
);
|
|
|
|
assign snp_fwd = fsq_valid;
|
|
assign snp_fwd_addr = per_bank_snp_fwd_addr[fsq_bank];
|
|
|
|
always @(*) begin
|
|
per_bank_snp_fwd_pop = 0;
|
|
if (fsq_valid) begin
|
|
per_bank_snp_fwd_pop[fsq_bank] = 1;
|
|
end
|
|
end
|
|
|
|
endmodule |