Spaces:
Running
Running
| # Task 1: Pipelined MAC Unit (Easy) | |
| ## Objective | |
| Design a pipelined multiply-accumulate unit in synthesizable Verilog. | |
| ## Interface | |
| ```verilog | |
| module mac_unit ( | |
| input wire clk, | |
| input wire rst, // synchronous reset, active high | |
| input wire en, // enable — when low, hold accumulator | |
| input wire clear, // synchronous clear of accumulator (takes effect after pipeline delay) | |
| input wire signed [7:0] a, // signed 8-bit input | |
| input wire signed [7:0] b, // signed 8-bit input | |
| output reg signed [31:0] acc_out // accumulated result | |
| ); | |
| ``` | |
| ## Specification | |
| - The pipeline must have **exactly 2 stages**: multiply in stage 1, accumulate in stage 2 | |
| - Output `acc_out` is valid **2 clock cycles** after inputs `a` and `b` are presented | |
| - When `en` is low, the accumulator holds its value (no new accumulation) | |
| - When `clear` is high, the accumulator resets to 0 (synchronous, respects pipeline latency) | |
| - `rst` resets all pipeline registers and accumulator to 0 | |
| ## Scoring | |
| - Correct compilation: 10% | |
| - Passing simulation test vectors: 60% | |
| - Correct 2-stage pipeline structure (verified by synthesis register count): 20% | |
| - Area efficiency vs reference: 10% | |
| ## Notes | |
| - Use signed arithmetic throughout — `a` and `b` are signed | |
| - The accumulator is 32-bit to prevent overflow across many accumulations | |
| - Back-to-back inputs are valid — your pipeline must handle consecutive accumulations correctly | |