Compare commits

..
18 Commits
Author SHA1 Message Date
Benzi 1d6b45b324 Merge remote-tracking branch 'upstream/main' 2026-09-20 19:24:11 -04:00
Tran, Huy QuangandGitHub Enterprise aca0b2ca60 Merge pull request #5 from SiliconJackets/readme-zip
Submit the make submit zip
2026-09-17 14:30:32 -04:00
Wade Tranandwade-ai f1a8741911 submit the zip make submit writes, not the src folder
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 14:30:16 -04:00
Tran, Huy QuangandGitHub Enterprise 990408862d Merge pull request #4 from SiliconJackets/make-submit
In person checkoffs still send the zip
2026-09-17 14:28:46 -04:00
Wade Tranandwade-ai a14af4090b in person checkoffs still send the zip
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 14:27:57 -04:00
Tran, Huy QuangandGitHub Enterprise 7454586413 Merge pull request #3 from SiliconJackets/make-submit
make submit
2026-09-17 14:14:22 -04:00
Wade Tranandwade-ai b0d1314278 mention make submit in the readme
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 14:03:56 -04:00
Wade Tranandwade-ai c02b6708f1 stamp make submit with who ran it, when, and how long regress took
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 13:44:03 -04:00
Wade Tranandwade-ai 6d812677d4 join every part of the member name in the zip filename
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 13:17:25 -04:00
Wade Tranandwade-ai b558beb69f name the submission zip after the member and pack their tests and testbenches
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 11:57:27 -04:00
Wade Tranandwade-ai 0eace93dfd add make submit to run regress and zip src for checkoff
Co-Authored-By: wade-ai <[email protected]>
2026-09-17 11:45:08 -04:00
Nech, GabrielandGitHub Enterprise 62b1cbd48d Update README.md 2026-09-11 10:28:14 -07:00
Antony Selvin Raj, Alfi Misha 00ef7a32ed update readme with new tb files and cleaned up cadence instructions.
rewording readme a bit
2026-09-06 18:27:02 -04:00
plittlefield6 4f30a3ef6b updated smoke test include file 2026-09-05 22:37:14 -04:00
Tran, Huy QuangandGitHub Enterprise dcc53bba3c Merge pull request #2 from SiliconJackets/fetch-testbench
Standalone fetch testbench
2026-09-05 17:36:39 -04:00
Wade Tranandwade-ai a33802a191 add a standalone fetch testbench and note how to run it
Co-Authored-By: wade-ai <[email protected]>
2026-09-05 17:32:37 -04:00
plittlefield6 51a87a5dac make testbench visible so simvision works 2026-09-05 16:59:51 -04:00
Konstantin GaydevandCooper Shaw 49a639f69a Initial Commit 2026-09-04 11:40:42 -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,
+46 -46
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
if(rst_i) begin
pc_o <= '0;
end else if(en_i & !stall_core_i) begin
pc_o <= next_pc;
end
end
always_ff @(posedge clk_i) begin always_comb begin
if (rst_i) begin next_pc = '0;
pc_o <= '0; isram_en_o = '0;
end else if (en_i & !stall_core_i) begin isram_addr_o = '0;
pc_o <= next_pc; instr_o = '0;
end instr_vld_o = '0;
end if(en_i) begin
if (stall_core_i) begin
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
next_pc = {20'b0, branch_trgt_i, 2'b00};
end else begin
next_pc = pc_o + 4;
end
always_comb begin isram_en_o = 1'b1;
next_pc = '0; isram_addr_o = next_pc[11:2];
isram_en_o = '0; instr_o = isram_rdata_i;
isram_addr_o = '0; instr_vld_o = isram_rready_i;
instr_o = '0;
instr_vld_o = '0;
if (en_i) begin
if (stall_core_i) begin
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
next_pc = {20'b0, branch_trgt_i, 2'b00};
end else begin
next_pc = pc_o + 4;
end
isram_en_o = 1'b1; end
isram_addr_o = next_pc[11:2]; end
instr_o = isram_rdata_i;
instr_vld_o = isram_rready_i;
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
+32 -32
View File
@@ -4,46 +4,46 @@
//DO NOT MODIFY// //DO NOT MODIFY//
module sram_wrapper ( module sram_wrapper (
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 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
if(rst_i) begin
rdata_valid <= 1'b0;
end else begin
rdata_valid <= en_i;
end
end
always_ff @(posedge clk_i) begin assign rready_o = rdata_valid;
if (rst_i) begin
rdata_valid <= 1'b0;
end else begin
rdata_valid <= en_i;
end
end
assign rready_o = rdata_valid;
endmodule endmodule