Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

User/dev/michnorris/gc fixes merge pr #10

Merged
merged 18 commits into from
Oct 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflow_metadata/pr_hash
Original file line number Diff line number Diff line change
@@ -1 +1 @@
e1c3a640bed7d221861ce600605f02f91a377e64ed68038ab722ec4374da0850c303d389ea9b16ae48f49a5d27024726
ca1b6714a079ad5424137b2e30e1391022f9cf8dec8905103187dc9ae5d9def20a6d7d4cdb5ba414ddc67e3d3046f879
2 changes: 1 addition & 1 deletion .github/workflow_metadata/pr_timestamp
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1728509982
1729273705
4 changes: 4 additions & 0 deletions src/abr_libs/config/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ targets:
- $COMPILE_ROOT/rtl/abr_sva.svh
- $COMPILE_ROOT/rtl/abr_macros.svh
- $COMPILE_ROOT/rtl/abr_1r1w_ram.sv
- $COMPILE_ROOT/rtl/abr_1r1w_be_ram.sv
- $COMPILE_ROOT/rtl/abr_1r1w_512x4_ram.sv
- $COMPILE_ROOT/rtl/abr_ram_regout.sv
- $COMPILE_ROOT/rtl/abr_icg.sv
- $COMPILE_ROOT/rtl/abr_2ff_sync.sv
Expand All @@ -31,6 +33,8 @@ targets:
- $COMPILE_ROOT/rtl/abr_sva.svh
- $COMPILE_ROOT/rtl/abr_macros.svh
- $COMPILE_ROOT/rtl/abr_1r1w_ram.sv
- $COMPILE_ROOT/rtl/abr_1r1w_be_ram.sv
- $COMPILE_ROOT/rtl/abr_1r1w_512x4_ram.sv
- $COMPILE_ROOT/rtl/abr_ram_regout.sv
- $COMPILE_ROOT/rtl/abr_icg.sv
- $COMPILE_ROOT/rtl/abr_2ff_sync.sv
Expand Down
47 changes: 47 additions & 0 deletions src/abr_libs/rtl/abr_1r1w_512x4_ram.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

module abr_1r1w_512x4_ram #(
parameter DEPTH = 512
,parameter DATA_WIDTH = 4
,parameter ADDR_WIDTH = $clog2(DEPTH)

)
(
input logic clk_i,

input logic we_i,
input logic [ADDR_WIDTH-1:0] waddr_i,
input logic [DATA_WIDTH-1:0] wdata_i,
input logic re_i,
input logic [ADDR_WIDTH-1:0] raddr_i,
output logic [DATA_WIDTH-1:0] rdata_o
);

//storage element
logic [DEPTH-1:0][DATA_WIDTH-1:0] ram;

always @(posedge clk_i) begin
if (we_i) begin
ram[waddr_i] <= wdata_i;
end
end

always @(posedge clk_i) begin
if (re_i) begin
rdata_o <= ram[raddr_i];
end
end

endmodule
51 changes: 51 additions & 0 deletions src/abr_libs/rtl/abr_1r1w_be_ram.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

module abr_1r1w_be_ram #(
parameter DEPTH = 64
,parameter DATA_WIDTH = 32
,parameter STROBE_WIDTH = 8
,localparam ADDR_WIDTH = $clog2(DEPTH)
)
(
input logic clk_i,

input logic we_i,
input logic [(DATA_WIDTH/STROBE_WIDTH)-1:0] wstrobe_i,
input logic [ADDR_WIDTH-1:0] waddr_i,
input logic [(DATA_WIDTH/STROBE_WIDTH)-1:0][STROBE_WIDTH-1:0] wdata_i,
input logic re_i,
input logic [ADDR_WIDTH-1:0] raddr_i,
output logic [DATA_WIDTH-1:0] rdata_o
);

//storage element
logic [(DATA_WIDTH/STROBE_WIDTH)-1:0][STROBE_WIDTH-1:0] ram [DEPTH-1:0];

always @(posedge clk_i) begin
if (we_i) begin
for (int i = 0; i < (DATA_WIDTH/STROBE_WIDTH); i++) begin
if (wstrobe_i[i])
ram[waddr_i][i] <= wdata_i[i];
end
end
end

always @(posedge clk_i) begin
if (re_i) begin
rdata_o <= ram[raddr_i];
end
end

endmodule
61 changes: 39 additions & 22 deletions src/abr_libs/rtl/abr_piso.sv
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,31 @@
module abr_piso
// import ::*;
#(
parameter PISO_BUFFER_W = 1344
,parameter PISO_INPUT_RATE = 1088
,parameter PISO_OUTPUT_RATE = 80
parameter PISO_NUM_MODE = 1
,parameter PISO_BUFFER_W = 1344
,parameter integer PISO_INPUT_RATE[PISO_NUM_MODE-1:0] = {1088}
,parameter integer PISO_OUTPUT_RATE[PISO_NUM_MODE-1:0] = {80}
)
(
input logic clk,
input logic rst_b,
input logic zeroize,

//input data
input logic valid_i,
output logic hold_o,
input logic [PISO_INPUT_RATE-1:0] data_i,
input logic [$clog2(PISO_NUM_MODE)-1:0] mode,
input logic valid_i,
output logic hold_o,
input logic [PISO_INPUT_RATE[0]-1:0] data_i,

//Output data
output logic valid_o,
input logic hold_i,
output logic [PISO_OUTPUT_RATE-1:0] data_o
output logic valid_o,
input logic hold_i,
output logic [PISO_OUTPUT_RATE[0]-1:0] data_o

);

parameter PISO_PTR_W = $clog2(PISO_BUFFER_W);
parameter BUFFER_W_DELTA = PISO_BUFFER_W - PISO_INPUT_RATE;
parameter BUFFER_W_DELTA = PISO_BUFFER_W - PISO_INPUT_RATE[0];

logic [PISO_BUFFER_W-1:0] buffer, buffer_d;
logic [PISO_PTR_W-1:0] buffer_wr_ptr, buffer_wr_ptr_d;
Expand All @@ -47,10 +49,10 @@ module abr_piso
logic update_buffer;

//hold when not enough room for full input data
always_comb hold_o = buffer_wr_ptr > (PISO_BUFFER_W - PISO_INPUT_RATE);
always_comb hold_o = buffer_wr_ptr > (PISO_BUFFER_W[PISO_PTR_W-1:0] - PISO_INPUT_RATE[mode][PISO_PTR_W-1:0]);

always_comb data_o = buffer[PISO_OUTPUT_RATE-1:0];
always_comb valid_o = buffer_wr_ptr >= PISO_OUTPUT_RATE;
always_comb data_o = buffer[PISO_OUTPUT_RATE[0]-1:0];
always_comb valid_o = buffer_wr_ptr >= PISO_OUTPUT_RATE[mode][PISO_PTR_W-1:0];

always_comb buffer_wr = valid_i & ~hold_o;
always_comb buffer_rd = valid_o & ~hold_i;
Expand All @@ -74,23 +76,38 @@ module abr_piso
always_comb begin
unique case ({buffer_rd, buffer_wr})
2'b00 : buffer_wr_ptr_d = buffer_wr_ptr;
2'b01 : buffer_wr_ptr_d = buffer_wr_ptr + PISO_INPUT_RATE;
2'b10 : buffer_wr_ptr_d = buffer_wr_ptr - PISO_OUTPUT_RATE;
2'b11 : buffer_wr_ptr_d = buffer_wr_ptr + (PISO_INPUT_RATE - PISO_OUTPUT_RATE);
2'b01 : buffer_wr_ptr_d = buffer_wr_ptr + PISO_INPUT_RATE[mode][PISO_PTR_W-1:0];
2'b10 : buffer_wr_ptr_d = buffer_wr_ptr - PISO_OUTPUT_RATE[mode][PISO_PTR_W-1:0];
2'b11 : buffer_wr_ptr_d = buffer_wr_ptr + (PISO_INPUT_RATE[mode][PISO_PTR_W-1:0] - PISO_OUTPUT_RATE[mode][PISO_PTR_W-1:0]);
default : buffer_wr_ptr_d = buffer_wr_ptr;
endcase
end

logic [PISO_BUFFER_W-1:0] buffer_wdata;
logic [PISO_BUFFER_W-1:0] buffer_wdata_mask;

always_comb begin
buffer_wdata = '0;
buffer_wdata_mask = '1;
for (int i = 0; i < PISO_NUM_MODE; i++) begin
if (i == mode) begin
buffer_wdata_mask = PISO_BUFFER_W'(buffer_wdata_mask >> (PISO_BUFFER_W[PISO_PTR_W-1:0] - PISO_INPUT_RATE[mode][PISO_PTR_W-1:0]));
end
end
buffer_wdata = {{BUFFER_W_DELTA{1'b0}},data_i} & buffer_wdata_mask;
end

//buffer next logic
always_comb begin
unique case ({buffer_rd, buffer_wr})
unique case ({buffer_rd, buffer_wr})
2'b00 : buffer_d = buffer;
2'b01 : buffer_d = PISO_BUFFER_W'({{BUFFER_W_DELTA{1'b0}},data_i} << buffer_wr_ptr) | buffer;
2'b10 : buffer_d = PISO_BUFFER_W'(buffer >> PISO_OUTPUT_RATE);
2'b11 : buffer_d = PISO_BUFFER_W'({{BUFFER_W_DELTA{1'b0}},data_i} << (buffer_wr_ptr - PISO_OUTPUT_RATE)) | PISO_BUFFER_W'(buffer >> PISO_OUTPUT_RATE);
2'b10 : buffer_d = PISO_BUFFER_W'(buffer >> PISO_OUTPUT_RATE[mode]);
2'b01 : buffer_d = PISO_BUFFER_W'(buffer_wdata << buffer_wr_ptr) | buffer;
2'b11 : buffer_d = PISO_BUFFER_W'(buffer_wdata << (buffer_wr_ptr - PISO_OUTPUT_RATE[mode][PISO_PTR_W-1:0])) | PISO_BUFFER_W'(buffer >> PISO_OUTPUT_RATE[mode]);

default : buffer_d = buffer;
endcase
end
// {{PISO_BUFFER_W - PISO_INPUT_RATE[mode]{1'b0}},


endmodule
endmodule
Loading