Peer Review: Gustav Merelius
Lab Evaluation Checklist
Repository Structure & Files
-
Repo structure matches original lab layout -
All required files are present
Unit Testing
-
All unit tests (asserts in test bench) pass
Part 1: Tables and Discussion
-
Tables contain correct values -
Discussion on correctness and error detection using V or Cout is present -
Discussion correctly explains detection for signed/unsigned
Full Adder
-
Full adder implemented correctly
4-bit Adder
-
4-bit adder implemented correctly -
4-bit adder uses 4 instances of FULL_ADDER
Arithmetic Unit
-
Arithmetic unit implemented correctly -
Arithmetic unit uses 4-bit adder (ADDER) component
Multiplexer
-
Multiplexer implemented correctly -
MUX only changes output based on OP code -
MUX contains no other logic (e.g., AND/OR gates)
Suggestions for Improvement (if no errors found)
Using case
Instead of if-else, it could make the code easier to read. Other than that, the code looks good
always_comb {
if op == 2'b00 {
r = a & b;
} else if op == 2'b01 {
r = a | b;
} else if op == 2'b10 {
r = a ^ b;
} else {
r = ~(a | b);
}
}
Becomes:
assign r = case op {
2'b00: a & b,
2'b01: a | b,
2'b10: a ^ b,
2'b11: ~(a | b),
default: 4'b0
};