Merge remote-tracking branch 'upstream/main'

This commit is contained in:
Benzi
2026-09-20 19:24:11 -04:00
8 changed files with 145 additions and 109 deletions
+5
View File
@@ -9,3 +9,8 @@ __pycache__/
# Cadence/Xcelium simulation output # Cadence/Xcelium simulation output
sim/behav/WORKSPACE/ sim/behav/WORKSPACE/
# Submission packaging
*-dd-fall26.zip
regress.log
submission.stamp
+28 -1
View File
@@ -1,3 +1,12 @@
# Fill these in before running make submit, for example:
# MEMBER_NAME = George Burdell
# GT_USERNAME = gburdell3
# DISCORD_NAME = gburdell67discord
MEMBER_NAME =
GT_USERNAME =
DISCORD_NAME =
export MEMBER_NAME
PYTHON ?= python3 PYTHON ?= python3
TEST ?= ebreak TEST ?= ebreak
TEST_DIR := tests/$(TEST) TEST_DIR := tests/$(TEST)
@@ -6,13 +15,14 @@ CROSSBAR_TIMEOUT ?= 20
TEST_NAMES := $(sort $(notdir $(patsubst %/,%,$(dir $(wildcard tests/*/program.asm))))) TEST_NAMES := $(sort $(notdir $(patsubst %/,%,$(dir $(wildcard tests/*/program.asm)))))
.PHONY: help generate smoke test regress clean clean-generated .PHONY: help generate smoke test regress submit clean clean-generated
help: help:
@echo "make generate TEST=<name> Assemble a test and generate golden files" @echo "make generate TEST=<name> Assemble a test and generate golden files"
@echo "make smoke Test build/TB wiring with a mock DUT" @echo "make smoke Test build/TB wiring with a mock DUT"
@echo "make test TEST=<name> Generate and run one RTL test" @echo "make test TEST=<name> Generate and run one RTL test"
@echo "make regress Run every test, print PASS/FAIL summary (logs in tests/<name>/sim.log)" @echo "make regress Run every test, print PASS/FAIL summary (logs in tests/<name>/sim.log)"
@echo "make submit Run regress and zip your sources, tests and log for checkoff"
@echo "make clean Remove generated test and simulator files" @echo "make clean Remove generated test and simulator files"
@echo "Available tests: $(TEST_NAMES)" @echo "Available tests: $(TEST_NAMES)"
@@ -54,6 +64,23 @@ regress:
exit 1; \ exit 1; \
fi fi
submit:
@if [ -z "$(strip $(MEMBER_NAME))" ] || [ -z "$(strip $(GT_USERNAME))" ] || [ -z "$(strip $(DISCORD_NAME))" ]; then \
echo "Fill in MEMBER_NAME, GT_USERNAME and DISCORD_NAME at the top of the Makefile first."; \
exit 2; \
fi
@submission="$$(printf '%s' "$$MEMBER_NAME" | tr -d "[:space:]'.,-")-$(strip $(GT_USERNAME))-$(strip $(DISCORD_NAME))-dd-fall26.zip"; \
rm -f "$$submission" regress.log submission.stamp; \
scripts/sjstamp submission.stamp regress.log src sim/behav/Include tests -- $(MAKE) --no-print-directory regress; \
status=$$?; \
if [ $$status -eq 125 ]; then echo "Could not stamp the submission, nothing was zipped."; exit 1; fi; \
zip -qr "$$submission" src sim/behav/Include tests regress.log submission.stamp \
-x '*.DS_Store' 'tests/*/program.o' 'tests/*/program.hex' 'tests/*/sim.log'; \
echo "----------------------------------------"; \
if [ $$status -ne 0 ]; then echo "WARNING: not all tests pass, see regress.log"; fi; \
echo "Wrote $$submission"
>>>>>>> upstream/main
clean: clean:
$(MAKE) -C sim/behav clean $(MAKE) -C sim/behav clean
$(MAKE) --no-print-directory clean-generated $(MAKE) --no-print-directory clean-generated
+3 -1
View File
@@ -273,10 +273,12 @@ Disclaimer: We will be running some back end AI and software similarity checkers
In Person Submissions: In Person Submissions:
- We will ask you to walk through the logic and answer a few random questions on must-know concepts. - We will ask you to walk through the logic and answer a few random questions on must-know concepts.
- You still need to run `make submit` and send the zip to the sjcheckoffs Discord Account, same as an online submission.
Additional Instructions For Online Submissions: Additional Instructions For Online Submissions:
- Include a screenshot of all your tests passing with your gt username somewhere in the terminal in the screenshot - Include a screenshot of all your tests passing with your gt username somewhere in the terminal in the screenshot
- **submit a zip of the src folder to the sjcheckoffs Discord Account​** <img width="417" height="422" alt="image" src="https://github.gatech.edu/user-attachments/assets/1c271294-ba6a-4314-beb2-e4c76c7e97db" /> - fill in your name, GT username and Discord username at the top of the `Makefile`, then run `make submit` to run every test and build the zip
- **submit the zip that `make submit` wrote to the sjcheckoffs Discord Account​** <img width="417" height="422" alt="image" src="https://github.gatech.edu/user-attachments/assets/1c271294-ba6a-4314-beb2-e4c76c7e97db" />
- Include any supporting documentation you may have used (diagrams, drawings, state machines) - Include any supporting documentation you may have used (diagrams, drawings, state machines)
BIN
View File
Binary file not shown.
+1
View File
@@ -5,6 +5,7 @@
// END SYSTEM HEADER // END SYSTEM HEADER
module cpu_top ( module cpu_top (
<<<<<<< HEAD
input logic clk_i, input logic clk_i,
input logic rst_i, input logic rst_i,
input logic en_i, input logic en_i,
+44 -44
View File
@@ -1,61 +1,61 @@
//DO NOT MODIFY THIS FILE! //DO NOT MODIFY THIS FILE!
//DO NOT MODIFY THIS FILE!! //DO NOT MODIFY THIS FILE!!
module fetch ( module fetch (
input logic clk_i, input logic clk_i,
input logic rst_i, input logic rst_i,
input logic en_i, input logic en_i,
input logic stall_core_i, input logic stall_core_i,
// === Instruction RAM Interface === // // === Instruction RAM Interface === //
output logic isram_en_o, output logic isram_en_o,
output logic [9:0] isram_addr_o, output logic [9:0] isram_addr_o,
input logic [31:0] isram_rdata_i, input logic [31:0] isram_rdata_i,
input logic isram_rready_i, input logic isram_rready_i,
// === Fetched Instruction === // // === Fetched Instruction === //
output logic [31:0] instr_o, output logic [31:0] instr_o,
output logic [31:0] pc_o, //current instruction output logic [31:0] pc_o, //current instruction
output logic instr_vld_o, output logic instr_vld_o,
input logic branch_vld_i, input logic branch_vld_i,
input logic [9:0] branch_trgt_i, input logic [9:0] branch_trgt_i,
input logic branch_taken_i input logic branch_taken_i
); );
logic [31:0] next_pc; //instruction to be run at the next cycle logic [31:0] next_pc; //instruction to be run at the next cycle
always_ff @(posedge clk_i) begin always_ff @(posedge clk_i) begin
if (rst_i) begin if(rst_i) begin
pc_o <= '0; pc_o <= '0;
end else if (en_i & !stall_core_i) begin end else if(en_i & !stall_core_i) begin
pc_o <= next_pc; pc_o <= next_pc;
end end
end end
always_comb begin always_comb begin
next_pc = '0; next_pc = '0;
isram_en_o = '0; isram_en_o = '0;
isram_addr_o = '0; isram_addr_o = '0;
instr_o = '0; instr_o = '0;
instr_vld_o = '0; instr_vld_o = '0;
if (en_i) begin if(en_i) begin
if (stall_core_i) begin if (stall_core_i) begin
next_pc = pc_o; //when we stall we stay at the same instruction at the next cycle next_pc = pc_o; //when we stall we stay at the same instruction at the next cycle
end else if (branch_vld_i && branch_taken_i) begin end else if (branch_vld_i && branch_taken_i) begin
next_pc = {20'b0, branch_trgt_i, 2'b00}; next_pc = {20'b0, branch_trgt_i, 2'b00};
end else begin end else begin
next_pc = pc_o + 4; next_pc = pc_o + 4;
end end
isram_en_o = 1'b1; isram_en_o = 1'b1;
isram_addr_o = next_pc[11:2]; isram_addr_o = next_pc[11:2];
instr_o = isram_rdata_i; instr_o = isram_rdata_i;
instr_vld_o = isram_rready_i; instr_vld_o = isram_rready_i;
end end
end end
endmodule endmodule
+30 -29
View File
@@ -1,45 +1,46 @@
// 32 x 32-bit RISC-V integer register file. // 32 x 32-bit RISC-V integer register file.
// Register x0 always reads as zero and ignores writes. // Register x0 always reads as zero and ignores writes.
module reg_file ( module reg_file (
input logic clk_i, input logic clk_i,
input logic rst_i, input logic rst_i,
input logic [ 4:0] rs1_addr_i, //Register Source 1 Address Input input logic [4:0] rs1_addr_i, //Register Source 1 Address Input
input logic [ 4:0] rs2_addr_i, input logic [4:0] rs2_addr_i,
output logic [31:0] rs1_data_o, output logic [31:0] rs1_data_o,
output logic [31:0] rs2_data_o, //Register Source 2 Data Output output logic [31:0] rs2_data_o, //Register Source 2 Data Output
input logic rd_write_en_i, //Register Destination Write Enable Input input logic rd_write_en_i, //Register Destination Write Enable Input
input logic [ 4:0] rd_addr_i, input logic [4:0] rd_addr_i,
input logic [31:0] rd_data_i, input logic [31:0] rd_data_i,
// Read-only architectural state exposed to the debug crossbar. // Read-only architectural state exposed to the debug crossbar.
output logic [31:0] reg_values_o[32] //Register Values Output output logic [31:0] reg_values_o [0:31] //Register Values Output
); );
logic [31:0] registers[32]; logic [31:0] registers [0:31];
integer i; //used for generate loops in systemverilog integer i; //used for generate loops in systemverilog
always_comb begin always_comb begin
rs1_data_o = (rs1_addr_i == 5'd0) ? 32'd0 : registers[rs1_addr_i]; rs1_data_o = (rs1_addr_i == 5'd0) ? 32'd0 : registers[rs1_addr_i];
rs2_data_o = (rs2_addr_i == 5'd0) ? 32'd0 : registers[rs2_addr_i]; rs2_data_o = (rs2_addr_i == 5'd0) ? 32'd0 : registers[rs2_addr_i];
end
assign reg_values_o[0] = 32'd0;
generate
for (
genvar register_index = 1; register_index < 32; register_index++
) begin : gen_debug_register_values
assign reg_values_o[register_index] = registers[register_index];
end end
endgenerate
always_ff @(posedge clk_i) begin assign reg_values_o[0] = 32'd0;
if (rst_i) begin generate
for (i = 0; i < 32; i = i + 1) registers[i] <= 32'd0; for (genvar register_index = 1;
end else if (rd_write_en_i && (rd_addr_i != 5'd0)) begin register_index < 32;
registers[rd_addr_i] <= rd_data_i; register_index++) begin : gen_debug_register_values
assign reg_values_o[register_index] = registers[register_index];
end
endgenerate
always_ff @(posedge clk_i) begin
if (rst_i) begin
for (i = 0; i < 32; i = i + 1)
registers[i] <= 32'd0;
end else if (rd_write_en_i && (rd_addr_i != 5'd0)) begin
registers[rd_addr_i] <= rd_data_i;
end
end end
end
endmodule endmodule
+30 -30
View File
@@ -7,43 +7,43 @@ module sram_wrapper (
input logic rst_i, input logic rst_i,
input logic en_i, input logic en_i,
input logic write_en_i, input logic write_en_i,
input logic [ 9:0] addr_i, input logic [9:0] addr_i,
input logic [31:0] wdata_i, input logic [31:0] wdata_i,
output logic [31:0] rdata_o, output logic [31:0] rdata_o,
output logic rready_o output logic rready_o
); );
CF_SRAM_1024x32_macro u_sram ( CF_SRAM_1024x32_macro u_sram (
.DO (rdata_o), .DO (rdata_o),
.DI (wdata_i), .DI (wdata_i),
.AD (addr_i), .AD (addr_i),
.CLKin (clk_i), .CLKin (clk_i),
.EN (en_i), .EN (en_i),
.R_WB (~write_en_i), .R_WB (~write_en_i),
.BEN (32'hFFFF_FFFF), .BEN (32'hFFFF_FFFF),
.TM (1'b0), .TM (1'b0),
.SM (1'b0), .SM (1'b0),
.WLBI (1'b0), .WLBI (1'b0),
.WLOFF (1'b0), .WLOFF (1'b0),
.ScanInCC (1'b0), .ScanInCC (1'b0),
.ScanInDL (1'b0), .ScanInDL (1'b0),
.ScanInDR (1'b0), .ScanInDR (1'b0),
.ScanOutCC(), .ScanOutCC (),
.vpwrac (1'b1), .vpwrac (1'b1),
.vpwrpc (1'b1) .vpwrpc (1'b1)
); );
logic rdata_valid; logic rdata_valid;
always_ff @(posedge clk_i) begin always_ff @(posedge clk_i) begin
if (rst_i) begin if(rst_i) begin
rdata_valid <= 1'b0; rdata_valid <= 1'b0;
end else begin end else begin
rdata_valid <= en_i; rdata_valid <= en_i;
end end
end end
assign rready_o = rdata_valid; assign rready_o = rdata_valid;
endmodule endmodule