File size: 1,479 Bytes
3951517
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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