mirror of
https://github.com/fpganinja/taxi.git
synced 2026-05-17 21:10:55 -07:00
zircon: Clean up parametrization
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -52,8 +52,8 @@ localparam USER_W = s_axis_pkt.USER_W;
|
||||
localparam USER_EN = s_axis_pkt.USER_EN && m_axis_pkt.USER_EN;
|
||||
localparam META_USER_EN = s_axis_pkt.USER_EN && m_axis_meta.USER_EN;
|
||||
|
||||
parameter LEVELS = $clog2(DATA_W/8);
|
||||
parameter OFFSET_W = START_OFFSET/KEEP_W > 1 ? $clog2(START_OFFSET/KEEP_W) : 1;
|
||||
parameter LEVELS = $clog2(BYTE_LANES);
|
||||
parameter OFFSET_W = START_OFFSET/BYTE_LANES > 1 ? $clog2(START_OFFSET/BYTE_LANES) : 1;
|
||||
|
||||
// check configuration
|
||||
if (KEEP_W * 8 != DATA_W)
|
||||
@@ -65,11 +65,11 @@ if (META_W != 32)
|
||||
if (m_axis_meta.KEEP_W * 8 != META_W)
|
||||
$fatal(0, "Error: Interface requires byte (8-bit) granularity (instance %m)");
|
||||
|
||||
logic [OFFSET_W-1:0] offset_reg = OFFSET_W'(START_OFFSET/KEEP_W);
|
||||
logic [KEEP_W-1:0] mask_reg = {KEEP_W{1'b1}} << START_OFFSET;
|
||||
logic [OFFSET_W-1:0] offset_reg = OFFSET_W'(START_OFFSET/BYTE_LANES);
|
||||
logic [BYTE_LANES-1:0] mask_reg = {BYTE_LANES{1'b1}} << START_OFFSET;
|
||||
|
||||
logic [DATA_W-1:0] sum_reg[LEVELS-2:0];
|
||||
logic [(LEVELS-1)*4-1:0] len_reg[LEVELS-2:0];
|
||||
logic [(BYTE_LANES/4)*17-1:0] sum_reg[LEVELS-2:0];
|
||||
logic [(BYTE_LANES/4)*3-1:0] len_reg[LEVELS-2:0];
|
||||
logic [ID_W-1:0] id_reg[LEVELS-2:0];
|
||||
logic [DEST_W-1:0] dest_reg[LEVELS-2:0];
|
||||
logic [USER_W-1:0] user_reg[LEVELS-2:0];
|
||||
@@ -117,7 +117,7 @@ assign m_axis_meta.tvalid = m_axis_meta_valid_reg;
|
||||
// Mask input data
|
||||
wire [BYTE_LANES-1:0][BYTE_W-1:0] pkt_data_masked;
|
||||
|
||||
for (genvar j = 0; j < KEEP_W; j = j + 1) begin
|
||||
for (genvar j = 0; j < BYTE_LANES; j = j + 1) begin
|
||||
assign pkt_data_masked[j] = (s_axis_pkt.tkeep[j] && mask_reg[j]) ? s_axis_pkt.tdata[j*8 +: 8] : 8'd0;
|
||||
end
|
||||
|
||||
@@ -125,7 +125,7 @@ always_ff @(posedge clk) begin
|
||||
sum_valid_reg[0] <= 1'b0;
|
||||
|
||||
if (s_axis_pkt.tvalid && s_axis_pkt.tready) begin
|
||||
for (integer i = 0; i < DATA_W/8/4; i = i + 1) begin
|
||||
for (integer i = 0; i < BYTE_LANES/4; i = i + 1) begin
|
||||
sum_reg[0][i*17 +: 17] <= {pkt_data_masked[4*i+0], pkt_data_masked[4*i+1]} + {pkt_data_masked[4*i+2], pkt_data_masked[4*i+3]};
|
||||
len_reg[0][i*3 +: 3] <= 3'(s_axis_pkt.tkeep[4*i+0]) + 3'(s_axis_pkt.tkeep[4*i+1]) + 3'(s_axis_pkt.tkeep[4*i+2]) + 3'(s_axis_pkt.tkeep[4*i+3]);
|
||||
end
|
||||
@@ -136,23 +136,23 @@ always_ff @(posedge clk) begin
|
||||
user_reg[0] <= s_axis_pkt.tuser;
|
||||
|
||||
if (s_axis_pkt.tlast) begin
|
||||
offset_reg <= OFFSET_W'(START_OFFSET/KEEP_W);
|
||||
mask_reg <= {KEEP_W{1'b1}} << START_OFFSET;
|
||||
end else if (START_OFFSET < KEEP_W || offset_reg == 0) begin
|
||||
mask_reg <= {KEEP_W{1'b1}};
|
||||
offset_reg <= OFFSET_W'(START_OFFSET/BYTE_LANES);
|
||||
mask_reg <= {BYTE_LANES{1'b1}} << START_OFFSET;
|
||||
end else if (START_OFFSET < BYTE_LANES || offset_reg == 0) begin
|
||||
mask_reg <= {BYTE_LANES{1'b1}};
|
||||
end else begin
|
||||
offset_reg <= offset_reg - 1;
|
||||
if (offset_reg == 1) begin
|
||||
mask_reg <= {KEEP_W{1'b1}} << (START_OFFSET%KEEP_W);
|
||||
mask_reg <= {BYTE_LANES{1'b1}} << (START_OFFSET%BYTE_LANES);
|
||||
end else begin
|
||||
mask_reg <= {KEEP_W{1'b0}};
|
||||
mask_reg <= {BYTE_LANES{1'b0}};
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (rst) begin
|
||||
offset_reg <= OFFSET_W'(START_OFFSET/KEEP_W);
|
||||
mask_reg <= {KEEP_W{1'b1}} << START_OFFSET;
|
||||
offset_reg <= OFFSET_W'(START_OFFSET/BYTE_LANES);
|
||||
mask_reg <= {BYTE_LANES{1'b1}} << START_OFFSET;
|
||||
sum_valid_reg[0] <= 1'b0;
|
||||
end
|
||||
end
|
||||
@@ -163,7 +163,7 @@ for (genvar l = 1; l < LEVELS-1; l = l + 1) begin
|
||||
sum_valid_reg[l] <= 1'b0;
|
||||
|
||||
if (sum_valid_reg[l-1]) begin
|
||||
for (integer i = 0; i < DATA_W/8/4/2**l; i = i + 1) begin
|
||||
for (integer i = 0; i < BYTE_LANES/4/2**l; i = i + 1) begin
|
||||
sum_reg[l][i*(17+l) +: (17+l)] <= sum_reg[l-1][(i*2+0)*(17+l-1) +: (17+l-1)] + sum_reg[l-1][(i*2+1)*(17+l-1) +: (17+l-1)];
|
||||
len_reg[l][i*(3+l) +: (3+l)] <= len_reg[l-1][(i*2+0)*(3+l-1) +: (3+l-1)] + len_reg[l-1][(i*2+1)*(3+l-1) +: (3+l-1)];
|
||||
end
|
||||
@@ -188,7 +188,7 @@ always_ff @(posedge clk) begin
|
||||
sum_acc_temp = (16+LEVELS)'(sum_acc_temp[15:0] + 16'(sum_acc_temp >> 16));
|
||||
sum_acc_temp = (16+LEVELS)'(sum_acc_temp[15:0] + 16'(sum_acc_temp[16]));
|
||||
|
||||
m_axis_meta_len_reg <= len_acc_reg + 16'(len_reg[LEVELS-2][3+LEVELS-1-1:0]);
|
||||
m_axis_meta_len_reg <= len_acc_reg + 16'(len_reg[LEVELS-2][3+LEVELS-2-1:0]);
|
||||
m_axis_meta_csum_reg <= sum_acc_temp[15:0];
|
||||
m_axis_meta_id_reg <= id_reg[LEVELS-2];
|
||||
m_axis_meta_dest_reg <= dest_reg[LEVELS-2];
|
||||
@@ -201,7 +201,7 @@ always_ff @(posedge clk) begin
|
||||
len_acc_reg <= '0;
|
||||
end else begin
|
||||
sum_acc_reg <= sum_acc_temp[15:0];
|
||||
len_acc_reg <= len_acc_reg + 16'(len_reg[LEVELS-2][3+LEVELS-1-1:0]);
|
||||
len_acc_reg <= len_acc_reg + 16'(len_reg[LEVELS-2][3+LEVELS-2-1:0]);
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user