mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-24 05:47:35 -04:00
arbiter specialization
This commit is contained in:
parent
d7bce5ab45
commit
b8fd2308e1
3 changed files with 526 additions and 187 deletions
|
@ -1,71 +1,88 @@
|
|||
`include "VX_platform.vh"
|
||||
|
||||
// Fast encoder using parallel prefix computation
|
||||
// Adapter from BaseJump STL: http://bjump.org/index.html
|
||||
// Adapter from BaseJump STL: http://bjump.org/data_out.html
|
||||
|
||||
module VX_onehot_encoder #(
|
||||
parameter N = 1,
|
||||
parameter REVERSE = 0,
|
||||
parameter FAST = 1
|
||||
parameter N = 1,
|
||||
parameter LN = `LOG2UP(N)
|
||||
) (
|
||||
input wire [N-1:0] data_in,
|
||||
output wire [`LOG2UP(N)-1:0] data_out,
|
||||
output wire valid
|
||||
input wire [N-1:0] data_in,
|
||||
output wire [LN-1:0] data_out,
|
||||
output wire valid
|
||||
);
|
||||
if (FAST) begin
|
||||
`IGNORE_WARNINGS_BEGIN
|
||||
localparam levels_lp = $clog2(N);
|
||||
localparam aligned_width_lp = 1 << $clog2(N);
|
||||
|
||||
wire [levels_lp:0][aligned_width_lp-1:0] addr;
|
||||
wire [levels_lp:0][aligned_width_lp-1:0] v;
|
||||
|
||||
// base case, also handle padding for non-power of two inputs
|
||||
assign v[0] = REVERSE ? (data_in << (aligned_width_lp - N)) : ((aligned_width_lp)'(data_in));
|
||||
assign addr[0] = 'x;
|
||||
|
||||
for (genvar level = 1; level < levels_lp+1; level=level+1) begin
|
||||
localparam segments_lp = 2**(levels_lp-level);
|
||||
localparam segment_slot_lp = aligned_width_lp/segments_lp;
|
||||
localparam segment_width_lp = level; // how many bits are needed at each level
|
||||
|
||||
for (genvar segment = 0; segment < segments_lp; segment=segment+1) begin
|
||||
wire [1:0] vs = {
|
||||
v[level-1][segment*segment_slot_lp+(segment_slot_lp >> 1)],
|
||||
v[level-1][segment*segment_slot_lp]
|
||||
};
|
||||
|
||||
assign v[level][segment*segment_slot_lp] = (| vs);
|
||||
if (N == 1) begin
|
||||
|
||||
assign data_out = data_in;
|
||||
assign valid = data_in;
|
||||
|
||||
end else if (N == 2) begin
|
||||
|
||||
assign data_out = data_in[1];
|
||||
assign valid = (| data_in);
|
||||
|
||||
if (level == 1) begin
|
||||
assign addr[level][(segment*segment_slot_lp)+:segment_width_lp] = vs[!REVERSE];
|
||||
end else begin
|
||||
assign addr[level][(segment*segment_slot_lp)+:segment_width_lp] = {
|
||||
vs[!REVERSE],
|
||||
addr[level-1][segment*segment_slot_lp+:segment_width_lp-1] | addr[level-1][segment*segment_slot_lp+(segment_slot_lp >> 1)+:segment_width_lp-1]
|
||||
};
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign data_out = addr[levels_lp][`LOG2UP(N)-1:0];
|
||||
assign valid = v[levels_lp][0];
|
||||
`IGNORE_WARNINGS_END
|
||||
end else begin
|
||||
|
||||
reg [LN-1:0] index_r;
|
||||
|
||||
reg [`LOG2UP(N)-1:0] data_out_r;
|
||||
reg valid_r;
|
||||
|
||||
always @(*) begin
|
||||
data_out_r = 'x;
|
||||
for (integer i = 0; i < N; i++) begin
|
||||
if (data_in[i]) begin
|
||||
data_out_r = `LOG2UP(N)'(i);
|
||||
if (N == 4) begin
|
||||
always @(*) begin
|
||||
casez (data_in)
|
||||
4'b0001: index_r = LN'(0);
|
||||
4'b001?: index_r = LN'(1);
|
||||
4'b01??: index_r = LN'(2);
|
||||
4'b1???: index_r = LN'(3);
|
||||
default: index_r = 'x;
|
||||
endcase
|
||||
end
|
||||
end else if (N == 8) begin
|
||||
always @(*) begin
|
||||
casez (data_in)
|
||||
8'b00000001: index_r = LN'(0);
|
||||
8'b0000001?: index_r = LN'(1);
|
||||
8'b000001??: index_r = LN'(2);
|
||||
8'b00001???: index_r = LN'(3);
|
||||
8'b0001????: index_r = LN'(4);
|
||||
8'b001?????: index_r = LN'(5);
|
||||
8'b01??????: index_r = LN'(6);
|
||||
8'b1???????: index_r = LN'(7);
|
||||
default: index_r = 'x;
|
||||
endcase
|
||||
end
|
||||
end else if (N == 16) begin
|
||||
always @(*) begin
|
||||
casez (data_in)
|
||||
16'b0000000000000001: index_r = LN'(0);
|
||||
16'b000000000000001?: index_r = LN'(1);
|
||||
16'b00000000000001??: index_r = LN'(2);
|
||||
16'b0000000000001???: index_r = LN'(3);
|
||||
16'b000000000001????: index_r = LN'(4);
|
||||
16'b00000000001?????: index_r = LN'(5);
|
||||
16'b0000000001??????: index_r = LN'(6);
|
||||
16'b000000001???????: index_r = LN'(7);
|
||||
16'b00000001????????: index_r = LN'(8);
|
||||
16'b0000001?????????: index_r = LN'(9);
|
||||
16'b000001??????????: index_r = LN'(10);
|
||||
16'b00001???????????: index_r = LN'(11);
|
||||
16'b0001????????????: index_r = LN'(12);
|
||||
16'b001?????????????: index_r = LN'(13);
|
||||
16'b01??????????????: index_r = LN'(14);
|
||||
16'b1???????????????: index_r = LN'(15);
|
||||
default: index_r = 'x;
|
||||
endcase
|
||||
end
|
||||
end else begin
|
||||
always @(*) begin
|
||||
index_r = 'x;
|
||||
for (integer i = 0; i < N; i++) begin
|
||||
if (data_in[i]) begin
|
||||
index_r = `LOG2UP(N)'(i);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign data_out = data_out_r;
|
||||
assign data_out = index_r;
|
||||
assign valid = (| data_in);
|
||||
|
||||
end
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
`include "VX_platform.vh"
|
||||
|
||||
module VX_priority_encoder #(
|
||||
parameter N = 1,
|
||||
parameter REVERSE = 0,
|
||||
parameter FAST = 1,
|
||||
parameter LN = `LOG2UP(N)
|
||||
parameter N = 1,
|
||||
parameter FAST = 1,
|
||||
parameter LN = `LOG2UP(N)
|
||||
) (
|
||||
input wire [N-1:0] data_in,
|
||||
output wire [N-1:0] onehot,
|
||||
|
@ -20,71 +19,78 @@ module VX_priority_encoder #(
|
|||
|
||||
end else if (N == 2) begin
|
||||
|
||||
assign onehot = {!data_in[REVERSE], data_in[REVERSE]};
|
||||
assign index = !data_in[REVERSE];
|
||||
assign onehot = {~data_in[0], data_in[0]};
|
||||
assign index = ~data_in[0];
|
||||
assign valid_out = (| data_in);
|
||||
|
||||
end else if (FAST) begin
|
||||
|
||||
wire [N-1:0] scan_lo;
|
||||
|
||||
VX_scan #(
|
||||
.N (N),
|
||||
.OP (2),
|
||||
.REVERSE (REVERSE)
|
||||
) scan (
|
||||
.data_in (data_in),
|
||||
.data_out (scan_lo)
|
||||
);
|
||||
|
||||
if (REVERSE) begin
|
||||
assign onehot = scan_lo & {1'b1, (~scan_lo[N-1:1])};
|
||||
assign valid_out = scan_lo[0];
|
||||
end else begin
|
||||
assign onehot = scan_lo & {(~scan_lo[N-2:0]), 1'b1};
|
||||
assign valid_out = scan_lo[N-1];
|
||||
end
|
||||
|
||||
VX_onehot_encoder #(
|
||||
.N (N),
|
||||
.REVERSE (REVERSE)
|
||||
) onehot_encoder (
|
||||
.data_in (onehot),
|
||||
.data_out (index),
|
||||
`UNUSED_PIN (valid)
|
||||
);
|
||||
|
||||
end else begin
|
||||
|
||||
reg [N-1:0] onehot_r;
|
||||
|
||||
reg [LN-1:0] index_r;
|
||||
|
||||
always @(*) begin
|
||||
index_r = 'x;
|
||||
onehot_r = 0;
|
||||
if (REVERSE) begin
|
||||
for (integer i = N-1; i >= 0; i--) begin
|
||||
reg [N-1:0] onehot_r;
|
||||
|
||||
if (N == 4) begin
|
||||
always @(*) begin
|
||||
casez (data_in)
|
||||
4'b???1: begin onehot_r = 4'b0001; index_r = LN'(0); end
|
||||
4'b??10: begin onehot_r = 4'b0010; index_r = LN'(1); end
|
||||
4'b?100: begin onehot_r = 4'b0100; index_r = LN'(2); end
|
||||
4'b1000: begin onehot_r = 4'b1000; index_r = LN'(3); end
|
||||
default: begin onehot_r = 'x; index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else if (N == 8) begin
|
||||
always @(*) begin
|
||||
casez (data_in)
|
||||
8'b???????1: begin onehot_r = 8'b00000001; index_r = LN'(0); end
|
||||
8'b??????10: begin onehot_r = 8'b00000010; index_r = LN'(1); end
|
||||
8'b?????100: begin onehot_r = 8'b00000100; index_r = LN'(2); end
|
||||
8'b????1000: begin onehot_r = 8'b00001000; index_r = LN'(3); end
|
||||
8'b???10000: begin onehot_r = 8'b00010000; index_r = LN'(4); end
|
||||
8'b??100000: begin onehot_r = 8'b00100000; index_r = LN'(5); end
|
||||
8'b?1000000: begin onehot_r = 8'b01000000; index_r = LN'(6); end
|
||||
8'b10000000: begin onehot_r = 8'b10000000; index_r = LN'(7); end
|
||||
default: begin onehot_r = 'x; index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else if (N == 16) begin
|
||||
always @(*) begin
|
||||
casez (data_in)
|
||||
16'b???????????????1: begin onehot_r = 16'b0000000000000001; index_r = LN'(0); end
|
||||
16'b??????????????10: begin onehot_r = 16'b0000000000000010; index_r = LN'(1); end
|
||||
16'b?????????????100: begin onehot_r = 16'b0000000000000100; index_r = LN'(2); end
|
||||
16'b????????????1000: begin onehot_r = 16'b0000000000001000; index_r = LN'(3); end
|
||||
16'b???????????10000: begin onehot_r = 16'b0000000000010000; index_r = LN'(4); end
|
||||
16'b??????????100000: begin onehot_r = 16'b0000000000100000; index_r = LN'(5); end
|
||||
16'b?????????1000000: begin onehot_r = 16'b0000000001000000; index_r = LN'(6); end
|
||||
16'b????????10000000: begin onehot_r = 16'b0000000010000000; index_r = LN'(7); end
|
||||
16'b???????100000000: begin onehot_r = 16'b0000000100000000; index_r = LN'(8); end
|
||||
16'b??????1000000000: begin onehot_r = 16'b0000001000000000; index_r = LN'(9); end
|
||||
16'b?????10000000000: begin onehot_r = 16'b0000010000000000; index_r = LN'(10); end
|
||||
16'b????100000000000: begin onehot_r = 16'b0000100000000000; index_r = LN'(11); end
|
||||
16'b???1000000000000: begin onehot_r = 16'b0001000000000000; index_r = LN'(12); end
|
||||
16'b??10000000000000: begin onehot_r = 16'b0010000000000000; index_r = LN'(13); end
|
||||
16'b?100000000000000: begin onehot_r = 16'b0100000000000000; index_r = LN'(14); end
|
||||
16'b1000000000000000: begin onehot_r = 16'b1000000000000000; index_r = LN'(15); end
|
||||
default: begin onehot_r = 'x; index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else begin
|
||||
always @(*) begin
|
||||
index_r = 'x;
|
||||
onehot_r = 'x;
|
||||
for (integer i = N-1; i >= 0; --i) begin
|
||||
if (data_in[i]) begin
|
||||
index_r = LN'(i);
|
||||
onehot_r = 0;
|
||||
onehot_r[i] = 1'b1;
|
||||
break;
|
||||
end
|
||||
end
|
||||
end else begin
|
||||
for (integer i = 0; i < N; i++) begin
|
||||
if (data_in[i]) begin
|
||||
index_r = LN'(i);
|
||||
onehot_r[i] = 1'b1;
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign index = index_r;
|
||||
assign onehot = onehot_r;
|
||||
assign valid_out = (| data_in);
|
||||
|
||||
end
|
||||
assign index = index_r;
|
||||
assign onehot = onehot_r;
|
||||
assign valid_out = (| data_in);
|
||||
end
|
||||
|
||||
endmodule
|
|
@ -3,8 +3,7 @@
|
|||
module VX_rr_arbiter #(
|
||||
parameter NUM_REQS = 1,
|
||||
parameter LOCK_ENABLE = 0,
|
||||
parameter LOG_NUM_REQS = $clog2(NUM_REQS),
|
||||
parameter FAST = 1
|
||||
parameter LOG_NUM_REQS = $clog2(NUM_REQS)
|
||||
) (
|
||||
input wire clk,
|
||||
input wire reset,
|
||||
|
@ -15,6 +14,8 @@ module VX_rr_arbiter #(
|
|||
output wire grant_valid
|
||||
);
|
||||
|
||||
localparam NN = NUM_REQS * NUM_REQS;
|
||||
|
||||
if (NUM_REQS == 1) begin
|
||||
|
||||
`UNUSED_VAR (clk)
|
||||
|
@ -24,92 +25,407 @@ module VX_rr_arbiter #(
|
|||
assign grant_onehot = requests;
|
||||
assign grant_valid = requests[0];
|
||||
|
||||
end else if (FAST == 1) begin
|
||||
|
||||
wire [NUM_REQS-1:0] req_masked;
|
||||
wire [NUM_REQS-1:0] grant, grant_masked, grant_unmasked;
|
||||
/* verilator lint_off UNOPTFLAT */
|
||||
wire [NUM_REQS-1:0] mask_higher_pri_reqs;
|
||||
/* verilator lint_off UNOPTFLAT */
|
||||
wire [NUM_REQS-1:0] unmask_higher_pri_reqs;
|
||||
wire no_req_masked;
|
||||
reg [NUM_REQS-1:0] pointer_reg;
|
||||
|
||||
// Simple priority arbitration for masked portion
|
||||
assign req_masked = requests & pointer_reg;
|
||||
assign mask_higher_pri_reqs[NUM_REQS-1:1] = mask_higher_pri_reqs[NUM_REQS-2:0] | req_masked[NUM_REQS-2:0];
|
||||
assign mask_higher_pri_reqs[0] = 1'b0;
|
||||
assign grant_masked[NUM_REQS-1:0] = req_masked[NUM_REQS-1:0] & ~mask_higher_pri_reqs[NUM_REQS-1:0];
|
||||
|
||||
// Simple priority arbitration for unmasked portion
|
||||
assign unmask_higher_pri_reqs[NUM_REQS-1:1] = unmask_higher_pri_reqs[NUM_REQS-2:0] | requests[NUM_REQS-2:0];
|
||||
assign unmask_higher_pri_reqs[0] = 1'b0;
|
||||
assign grant_unmasked[NUM_REQS-1:0] = requests[NUM_REQS-1:0] & ~unmask_higher_pri_reqs[NUM_REQS-1:0];
|
||||
|
||||
// Use grant_masked if there is any there, otherwise use grant_unmasked.
|
||||
assign no_req_masked = ~(| req_masked);
|
||||
assign grant = ({NUM_REQS{no_req_masked}} & grant_unmasked) | grant_masked;
|
||||
|
||||
// Generate arbiter pointer update
|
||||
wire mask_ptr_sel = (| req_masked) & (!LOCK_ENABLE || enable);
|
||||
wire unmask_ptr_sel = (| requests) & (!LOCK_ENABLE || enable);
|
||||
|
||||
// Pointer update
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
pointer_reg <= {NUM_REQS{1'b1}};
|
||||
end else if (mask_ptr_sel) begin // select if masked arbiter used
|
||||
pointer_reg <= mask_higher_pri_reqs;
|
||||
end else if (unmask_ptr_sel) begin // select if unmasked arbiter used
|
||||
pointer_reg <= unmask_higher_pri_reqs;
|
||||
end
|
||||
end
|
||||
|
||||
VX_onehot_encoder #(
|
||||
.N (NUM_REQS)
|
||||
) onehot_encoder (
|
||||
.data_in (grant),
|
||||
.data_out (grant_index),
|
||||
`UNUSED_PIN (valid)
|
||||
);
|
||||
|
||||
assign grant_onehot = grant;
|
||||
assign grant_valid = (| requests);
|
||||
|
||||
end else begin
|
||||
|
||||
reg [LOG_NUM_REQS-1:0] grant_table [NUM_REQS-1:0];
|
||||
reg [LOG_NUM_REQS-1:0] state;
|
||||
|
||||
always @(*) begin
|
||||
for (integer i = 0; i < NUM_REQS; i++) begin
|
||||
grant_table[i] = LOG_NUM_REQS'(i);
|
||||
for (integer j = 0; j < NUM_REQS; j++) begin
|
||||
if (requests[(i+j) % NUM_REQS]) begin
|
||||
grant_table[i] = LOG_NUM_REQS'((i+j) % NUM_REQS);
|
||||
reg [LOG_NUM_REQS-1:0] grant_index_r;
|
||||
reg [NUM_REQS-1:0] grant_onehot_r;
|
||||
reg [LOG_NUM_REQS-1:0] state;
|
||||
|
||||
if (NUM_REQS == 2) begin
|
||||
always @(*) begin
|
||||
casez ({state, requests})
|
||||
3'b0_1?: begin grant_onehot_r = 2'b10; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
3'b0_01: begin grant_onehot_r = 2'b01; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
3'b1_?1: begin grant_onehot_r = 2'b01; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
3'b1_10: begin grant_onehot_r = 2'b10; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
default: begin grant_onehot_r = 'x; grant_index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else if (NUM_REQS == 4) begin
|
||||
always @(*) begin
|
||||
casez ({state, requests})
|
||||
6'b00_??1?: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
6'b00_?10?: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
6'b00_100?: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
6'b00_0001: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
6'b01_?1??: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
6'b01_10??: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
6'b01_00?1: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
6'b01_0010: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
6'b10_1???: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
6'b10_0??1: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
6'b10_0?10: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
6'b10_0100: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
6'b11_???1: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
6'b11_??10: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
6'b11_?100: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
6'b11_1000: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
default: begin grant_onehot_r = 'x; grant_index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else if (NUM_REQS == 8) begin
|
||||
always @(*) begin
|
||||
casez ({state, requests})
|
||||
11'b000_??????1?: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b000_?????10?: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b000_????100?: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b000_???1000?: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b000_??10000?: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b000_?100000?: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b000_1000000?: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b000_00000001: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b001_?????1??: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b001_????10??: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b001_???100??: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b001_??1000??: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b001_?10000??: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b001_100000??: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b001_000000?1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b001_00000010: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b010_????1???: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b010_???10???: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b010_??100???: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b010_?1000???: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b010_10000???: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b010_00000??1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b010_00000?10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b010_00000100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b011_???1????: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b011_??10????: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b011_?100????: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b011_1000????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b011_0000???1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b011_0000??10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b011_0000?100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b011_00001000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b100_??1?????: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b100_?10?????: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b100_100?????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b100_000????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b100_000???10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b100_000??100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b100_000?1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b100_00010000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b101_?1??????: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b101_10??????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b101_00?????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b101_00????10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b101_00???100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b101_00??1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b101_00?10000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b101_00100000: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b110_1???????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
11'b110_0??????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b110_0?????10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b110_0????100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b110_0???1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b110_0??10000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b110_0?100000: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b110_01000000: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b111_???????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
11'b111_??????10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
11'b111_?????100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
11'b111_????1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
11'b111_???10000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
11'b111_??100000: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
11'b111_?1000000: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
11'b111_10000000: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
default: begin grant_onehot_r = 'x; grant_index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else if (NUM_REQS == 16) begin
|
||||
always @(*) begin
|
||||
casez ({state, requests})
|
||||
20'b0000_??????????????1?: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0000_?????????????10?: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0000_????????????100?: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0000_???????????1000?: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0000_??????????10000?: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0000_?????????100000?: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0000_????????1000000?: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0000_???????10000000?: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0000_??????100000000?: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0000_?????1000000000?: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0000_????10000000000?: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0000_???100000000000?: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0000_??1000000000000?: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0000_?10000000000000?: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0000_100000000000000?: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0000_0000000000000001: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0001_?????????????1??: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0001_????????????10??: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0001_???????????100??: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0001_??????????1000??: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0001_?????????10000??: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0001_????????100000??: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0001_???????1000000??: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0001_??????10000000??: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0001_?????100000000??: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0001_????1000000000??: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0001_???10000000000??: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0001_??100000000000??: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0001_?1000000000000??: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0001_10000000000000??: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0001_00000000000000?1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0001_0000000000000010: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0010_????????????1???: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0010_???????????10???: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0010_??????????100???: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0010_?????????1000???: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0010_????????10000???: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0010_???????100000???: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0010_??????1000000???: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0010_?????10000000???: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0010_????100000000???: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0010_???1000000000???: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0010_??10000000000???: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0010_?100000000000???: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0010_1000000000000???: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0010_0000000000000??1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0010_0000000000000?10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0010_0000000000000100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0011_???????????1????: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0011_??????????10????: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0011_?????????100????: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0011_????????1000????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0011_???????10000????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0011_??????100000????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0011_?????1000000????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0011_????10000000????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0011_???100000000????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0011_??1000000000????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0011_?10000000000????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0011_100000000000????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0011_000000000000???1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0011_000000000000??10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0011_000000000000?100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0011_0000000000001000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0100_??????????1?????: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0100_?????????10?????: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0100_????????100?????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0100_???????1000?????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0100_??????10000?????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0100_?????100000?????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0100_????1000000?????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0100_???10000000?????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0100_??100000000?????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0100_?1000000000?????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0100_10000000000?????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0100_00000000000????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0100_00000000000???10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0100_00000000000??100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0100_00000000000?1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0100_0000000000010000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0101_?????????1??????: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0101_????????10??????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0101_???????100??????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0101_??????1000??????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0101_?????10000??????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0101_????100000??????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0101_???1000000??????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0101_??10000000??????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0101_?100000000??????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0101_1000000000??????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0101_0000000000?????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0101_0000000000????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0101_0000000000???100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0101_0000000000??1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0101_0000000000?10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0101_0000000000100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0110_????????1???????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b0110_???????10???????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0110_??????100???????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0110_?????1000???????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0110_????10000???????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0110_???100000???????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0110_??1000000???????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0110_?10000000???????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0110_100000000???????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0110_000000000??????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0110_000000000?????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0110_000000000????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0110_000000000???1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0110_000000000??10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0110_000000000?100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0110_0000000001000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0111_???????1????????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b0111_??????10????????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b0111_?????100????????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b0111_????1000????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b0111_???10000????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b0111_??100000????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b0111_?1000000????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b0111_10000000????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b0111_00000000???????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b0111_00000000??????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b0111_00000000?????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b0111_00000000????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b0111_00000000???10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b0111_00000000??100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b0111_00000000?1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b0111_0000000010000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1000_??????1?????????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1000_?????10?????????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1000_????100?????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1000_???1000?????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1000_??10000?????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1000_?100000?????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1000_1000000?????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1000_0000000????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1000_0000000???????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1000_0000000??????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1000_0000000?????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1000_0000000????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1000_0000000???100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1000_0000000??1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1000_0000000?10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1000_0000000100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1001_?????1??????????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1001_????10??????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1001_???100??????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1001_??1000??????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1001_?10000??????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1001_100000??????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1001_000000?????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1001_000000????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1001_000000???????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1001_000000??????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1001_000000?????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1001_000000????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1001_000000???1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1001_000000??10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1001_000000?100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1001_0000001000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1010_????1???????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1010_???10???????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1010_??100???????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1010_?1000???????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1010_10000???????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1010_00000??????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1010_00000?????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1010_00000????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1010_00000???????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1010_00000??????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1010_00000?????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1010_00000????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1010_00000???10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1010_00000??100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1010_00000?1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1010_0000010000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1011_???1????????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1011_??10????????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1011_?100????????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1011_1000????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1011_0000???????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1011_0000??????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1011_0000?????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1011_0000????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1011_0000???????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1011_0000??????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1011_0000?????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1011_0000????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1011_0000???100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1011_0000??1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1011_0000?10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1011_0000100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1100_??1?????????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1100_?10?????????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1100_100?????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1100_000????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1100_000???????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1100_000??????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1100_000?????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1100_000????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1100_000???????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1100_000??????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1100_000?????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1100_000????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1100_000???1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1100_000??10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1100_000?100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1100_0001000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1101_?1??????????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1101_10??????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1101_00?????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1101_00????????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1101_00???????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1101_00??????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1101_00?????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1101_00????????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1101_00???????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1101_00??????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1101_00?????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1101_00????1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1101_00???10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1101_00??100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1101_00?1000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1101_0010000000000000: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1110_1???????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
20'b1110_0??????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1110_0?????????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1110_0????????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1110_0???????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1110_0??????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1110_0?????????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1110_0????????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1110_0???????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1110_0??????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1110_0?????1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1110_0????10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1110_0???100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1110_0??1000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1110_0?10000000000000: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1110_0100000000000000: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1111_???????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end
|
||||
20'b1111_??????????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end
|
||||
20'b1111_?????????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end
|
||||
20'b1111_????????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end
|
||||
20'b1111_???????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end
|
||||
20'b1111_??????????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end
|
||||
20'b1111_?????????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end
|
||||
20'b1111_????????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end
|
||||
20'b1111_???????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end
|
||||
20'b1111_??????1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end
|
||||
20'b1111_?????10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end
|
||||
20'b1111_????100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end
|
||||
20'b1111_???1000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end
|
||||
20'b1111_??10000000000000: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end
|
||||
20'b1111_?100000000000000: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end
|
||||
20'b1111_1000000000000000: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end
|
||||
default: begin grant_onehot_r = 'x; grant_index_r = 'x; end
|
||||
endcase
|
||||
end
|
||||
end else begin
|
||||
always @(*) begin
|
||||
grant_index_r = 'x;
|
||||
grant_onehot_r = 'x;
|
||||
for (integer i = 0; i < NN; ++i) begin
|
||||
/* verilator lint_off UNUSED */
|
||||
integer src = i / NUM_REQS;
|
||||
integer dst = i % NUM_REQS;
|
||||
integer next = (dst + 1) % NUM_REQS;
|
||||
/* verilator lint_on UNUSED */
|
||||
if (state == LOG_NUM_REQS'(src )
|
||||
&& requests[next]) begin
|
||||
grant_index_r = LOG_NUM_REQS'(next);
|
||||
grant_onehot_r = '0;
|
||||
grant_onehot_r[next] = 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
state <= 0;
|
||||
end else if (!LOCK_ENABLE || enable) begin
|
||||
state <= grant_table[state];
|
||||
state <= grant_index;
|
||||
end
|
||||
end
|
||||
|
||||
reg [NUM_REQS-1:0] grant_onehot_r;
|
||||
always @(*) begin
|
||||
grant_onehot_r = NUM_REQS'(0);
|
||||
grant_onehot_r[grant_table[state]] = 1;
|
||||
end
|
||||
|
||||
assign grant_index = grant_table[state];
|
||||
assign grant_onehot = grant_onehot_r;
|
||||
assign grant_valid = (| requests);
|
||||
|
||||
assign grant_index = grant_index_r;
|
||||
assign grant_onehot = grant_onehot_r;
|
||||
assign grant_valid = (| requests);
|
||||
end
|
||||
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue