Credits : We gratefully acknowledge the COE in Integrated Circuits and Systems (ICAS) and Department of ECE. Our special thanks to Dr K S Geetha (Vice Principal) and, Dr. K N Subramanya (principal) for their constant support and encouragement to do TAPEOUT in Tiny Tapeout 8 .
The tt_um_mac module is a Multiply-Accumulate (MAC) unit designed for high-performance digital signal processing and embedded system applications. This module integrates a Dadda multiplier and a Kogge-Stone adder to achieve efficient and fast computations. The MAC unit performs a sequence of multiplication and accumulation operations, which are essential in various digital signal processing tasks, such as filtering and convolution. Functional Description Input and Output Ports • Inputs: o ui_in (8-bit): Dedicated input for the first operand. o uio_in (8-bit): Input/Output interface for the second operand. o clk (1-bit): Clock signal to synchronize all operations. o rst_n (1-bit): Active-low reset signal to initialize the internal state of the MAC unit. • Outputs: o uo_out (8-bit): Output that holds the final accumulated result. o uio_oe (8-bit): Output enable signal, set to 0 indicating the uio is used as input. o uio_out (8-bit): Unused output path in the current context. Internal Architecture
To verify the functionality of the tt_um_mac
module, a testbench (tt_um_mac_tb
) has been provided. The testbench simulates different input scenarios and observes the output behavior of the tt_um_mac
module to ensure that it works correctly.
tt_um_mac
module behaves as expected.Below is a summary of the test cases used in the tt_um_mac_tb
testbench, along with their expected results.
Time (ns) | ui_in (Input A) |
uio_in (Input B) |
Operation | Expected uo_out (Output) |
---|---|---|---|---|
0-10 | 00000000 (0) |
00000000 (0) |
Reset | 00000000 (0) |
10-30 | 00000011 (3) |
00000010 (2) |
Multiply, Accumulate | 00000110 (6) |
30-50 | 00000001 (1) |
00000100 (4) |
Multiply, Accumulate | 00001010 (10) |
50-70 | 00000101 (5) |
00000011 (3) |
Multiply, Accumulate | 00011001 (25) |
70-90 | 00000111 (7) |
00000010 (2) |
Multiply, Accumulate | 00100111 (39) |
90-110 | 00000000 (0) |
00000000 (0) |
No Operation (Idle) | 00100111 (39) |
110-130 | 00000001 (1) |
00000001 (1) |
Multiply, Accumulate | 00101000 (40) |
During the simulation, you can monitor the console or waveform outputs for detailed step-by-step results. The testbench uses $monitor
to display real-time updates of the inputs and the resulting output.
initial begin
$monitor("Time=%0d | ui_in=%b, uio_in=%b | uo_out=%b", $time, ui_in, uio_in, uo_out);
end
This will provide you with a detailed trace of how the tt_um_mac
module processes the inputs to generate the expected outputs.
# | Input | Output | Bidirectional |
---|---|---|---|
0 | ui_in[[0] | uo_out[0] | uio_in[0] |
1 | ui_in[[1] | uo_out[1] | uio_in[1] |
2 | ui_in[[2] | uo_out[2] | uio_in[2] |
3 | ui_in[[3] | uo_out[3] | uio_in[3] |
4 | uo_out[4] | ||
5 | uo_out[5] | ||
6 | uo_out[6] | ||
7 | uo_out[7] |