Compare commits

...
24 Commits
Author SHA1 Message Date
Benzi 55a0856b5f remove conflict scaffolding 2026-09-20 19:32:01 -04:00
Benzi 1d6b45b324 Merge remote-tracking branch 'upstream/main' 2026-09-20 19:24:11 -04:00
dylan 7094593bd4 fix load stall logic 2026-09-20 19:10:26 -04:00
dylan 4723f7ffaa update load stall condition 2026-09-20 18:45:42 -04:00
dylan 5856ab3d7c fix load stall declaration 2026-09-20 18:33:39 -04:00
dylan 9eb9bde62f add load stall signal 2026-09-20 18:32:22 -04:00
dylan f59d067abe add my logic notes 2026-09-20 18:28:52 -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
11 changed files with 249 additions and 118 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
+27 -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,22 @@ 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"
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)
+76
View File
@@ -0,0 +1,76 @@
instructions needed (R, I, S, B)
ops needed:
NOP (I) opcode: 001 0011, funct3: 000 note: same encoding as addi x0, x0, 0
ADD (R) opcode: 011 0011, funct3: 000, funct7: 000 0000
SUB (R) opcode: 011 0011, funct3: 000, funct7: 010 0000
SLL (R) opcode: 011 0011, funct3: 001, funct7: 000 0000
SRL (R) opcode: 011 0011, funct3: 101, funct7: 000 0000
ADDI (I) opcode: 001 0011, funct3: 000
LOAD (I) opcode: 000 0011, funct3: 010
STORE (S) opcode: 010 0011, funct3: 010
BEQ (B) opcode: 110 0011, funct3: 000
EBREAK (I) opcode: 111 0011, funct3: 000
- opcode [6:0]
- funct3 [14:12]
- rs1 [19:15]
R type
- opcode: 011 0011
- funct7 [31:25]
- rs2 [24:20]
- rs1 [19:15]
- funct3 [14:12]
- rd [11:7]
- opcode [6:0]
I type
- opcode: 001 0011 | 000 0011
- imm [31:20]
- rs1 [19:15]
- funct3 [14:12]
- rd [11:7]
- opcode [6:0]
S type
- opcode: 010 0011
- imm [31:25]
- rs2 [24:20]
- rs1 [19:15]
- funct3 [14:12]
- imm [11:7]
- opcode [6:0]
B type
- opcode: 110 0011
- imm [31:25]
- rs2 [24:20]
- rs1 [19:15]
- funct3 [14:12]
- imm [11:7]
- opcode [6:0]
main decoder truth table
instr opcode regwrite immsrc alusrc memwrite resultsrc branch aluop
add 0110011 1 xx 0 0 0 0 10
sub 0110011 1 xx 0 0 0 0 10
sll 0110011 1 xx 0 0 0 0 10
srl 0110011 1 xx 0 0 0 0 10
addi 0010011 1 00 1 0 0 0 10
lw 0000011 1 00 1 0 1 0 00
sw 0100011 0 01 1 1 x 0 00
beq 1100011 0 10 0 0 x 1 01
ebreak 1110011 x xx 0 0 0 1 01
alu decoder truth table
aluop funct3 {op[5], funct7[5]} alucontrol instruction
00 x x 00 (add) lw, sw
01 x x 01 (sub) beq
10 000 00, 01, 10 00 (add) add, addi
000 11 01 (sub) sub
001 x 10 (sll) sll
101 x 11 (srl) srl
BIN
View File
Binary file not shown.
+6 -1
View File
@@ -8,6 +8,7 @@ module main_decoder (
output logic [1:0] imm_src_o, // output logic [1:0] imm_src_o, //
output logic reg_write_o, // write to register or not output logic reg_write_o, // write to register or not
output logic [1:0] alu_op_o, // operation for alu to perform output logic [1:0] alu_op_o, // operation for alu to perform
output logic load_stall_o,
output logic instr_invld_o // invalid or unsupported instruction output logic instr_invld_o // invalid or unsupported instruction
); );
@@ -20,6 +21,7 @@ module main_decoder (
mem_write_o = 1'b0; mem_write_o = 1'b0;
alu_src_o = 1'b0; alu_src_o = 1'b0;
alu_op_o = 1'b00; alu_op_o = 1'b00;
load_stall_o = 1'b0;
case (opcode_i) case (opcode_i)
// lw // lw
@@ -31,6 +33,7 @@ module main_decoder (
result_src_o = 1'b1; result_src_o = 1'b1;
branch_o = 1'b0; branch_o = 1'b0;
alu_op_o = 2'b00; alu_op_o = 2'b00;
load_stall_o = 1'b1;
end end
// sw // sw
7'b0100011: begin 7'b0100011: begin
@@ -146,6 +149,7 @@ module control_unit (
output logic [1:0] imm_src_o, output logic [1:0] imm_src_o,
output logic reg_write_o, output logic reg_write_o,
output logic [1:0] alu_control_o, output logic [1:0] alu_control_o,
output logic load_stall_o,
output logic instr_invld_o, output logic instr_invld_o,
output logic ebreak_o output logic ebreak_o
); );
@@ -173,7 +177,8 @@ module control_unit (
.reg_write_o(reg_write_o), .reg_write_o(reg_write_o),
.mem_write_o(mem_write_o), .mem_write_o(mem_write_o),
.alu_op_o(alu_op), .alu_op_o(alu_op),
.instr_invld_o(instr_invld_md) .instr_invld_o(instr_invld_md),
.load_stall_o(load_stall_o)
); );
alu_decoder ad ( alu_decoder ad (
+20 -7
View File
@@ -58,8 +58,25 @@ module cpu_top (
assign result = result_src ? dsram_rdata_i : alu_result; assign result = result_src ? dsram_rdata_i : alu_result;
logic ebreak_latch; logic ebreak_latch;
logic load_stall;
logic load_stall_cycle;
logic load_stall_ff;
assign stall_core = ebreak_latch | halted_o | ~en_i; //when else would you stall? assign load_stall_ff = (load_stall & ~load_stall_cycle);
assign stall_core = ebreak_latch | halted_o | ~en_i | load_stall_ff;
always_ff @(posedge clk_i) begin
if (rst_i) begin
halted_o <= 1'b0;
load_stall_cycle <= 1'b0;
end else if (ebreak_latch) halted_o <= 1'b1;
else if (load_stall & ~load_stall_cycle) begin
load_stall_cycle <= 1'b1;
end else if (load_stall & load_stall_cycle) begin
load_stall_cycle <= 1'b0;
end
end
// === Instruction Fetch === // // === Instruction Fetch === //
// certain ports are tied off bc they depend on modulees you need to implement. // certain ports are tied off bc they depend on modulees you need to implement.
@@ -99,17 +116,13 @@ module cpu_top (
.imm_ext_o(imm_ext), .imm_ext_o(imm_ext),
.rs1_data_o(rs1_data), .rs1_data_o(rs1_data),
.rs2_data_o(rs2_data), .rs2_data_o(rs2_data),
.load_stall_o(load_stall),
.load_stall_ff_i(load_stall_ff),
.instr_invld_o(instr_invld_decode), .instr_invld_o(instr_invld_decode),
.reg_values_o(reg_crossbar_o), .reg_values_o(reg_crossbar_o),
.ebreak_o(ebreak_latch) .ebreak_o(ebreak_latch)
); );
always_ff @(posedge clk_i) begin
if (rst_i) halted_o <= 1'b0;
else if (ebreak_latch) halted_o <= 1'b1;
end
always_comb begin always_comb begin
if (pc_target[31:12] == '0) begin if (pc_target[31:12] == '0) begin
branch_vld = '1; branch_vld = '1;
+4 -1
View File
@@ -5,6 +5,7 @@ module decode (
input logic instr_vld_i, // is instruction passed valid input logic instr_vld_i, // is instruction passed valid
input logic alu_zero_i, input logic alu_zero_i,
input logic [31:0] rd_data_i, input logic [31:0] rd_data_i,
input logic load_stall_ff_i,
output logic pc_src_o, output logic pc_src_o,
output logic result_src_o, output logic result_src_o,
@@ -14,6 +15,7 @@ module decode (
output logic [31:0] imm_ext_o, output logic [31:0] imm_ext_o,
output logic [31:0] rs1_data_o, output logic [31:0] rs1_data_o,
output logic [31:0] rs2_data_o, output logic [31:0] rs2_data_o,
output logic load_stall_o,
output logic instr_invld_o, output logic instr_invld_o,
output logic ebreak_o, output logic ebreak_o,
output logic [31:0] reg_values_o[32] //Register Values Output output logic [31:0] reg_values_o[32] //Register Values Output
@@ -36,6 +38,7 @@ module decode (
.imm_src_o(imm_src), .imm_src_o(imm_src),
.reg_write_o(reg_write), .reg_write_o(reg_write),
.alu_control_o(alu_control_o), .alu_control_o(alu_control_o),
.load_stall_o(load_stall_o),
.instr_invld_o(cu_invld), .instr_invld_o(cu_invld),
.ebreak_o(ebreak_o) .ebreak_o(ebreak_o)
); );
@@ -47,7 +50,7 @@ module decode (
.rs2_addr_i(instr_i[24:20]), .rs2_addr_i(instr_i[24:20]),
.rs1_data_o(rs1_data_o), .rs1_data_o(rs1_data_o),
.rs2_data_o(rs2_data_o), .rs2_data_o(rs2_data_o),
.rd_write_en_i(reg_write), .rd_write_en_i(reg_write & ~load_stall_ff_i),
.rd_addr_i(instr_i[11:7]), .rd_addr_i(instr_i[11:7]),
.rd_data_i(rd_data_i), .rd_data_i(rd_data_i),
.reg_values_o(reg_values_o) .reg_values_o(reg_values_o)
+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