Skip to content

Commit

Permalink
feat: update project tt_um_mandelbrot_accel from urish/tt07-mandelbro…
Browse files Browse the repository at this point in the history
…t-accelarator

Commit: e6465bb67ce0c0205f7c21be5a683f2ca857183e
Workflow: https://github.com/urish/tt07-mandelbrot-accelarator/actions/runs/9322512028
  • Loading branch information
TinyTapeoutBot authored and urish committed May 31, 2024
1 parent d66a907 commit c50b236
Show file tree
Hide file tree
Showing 9 changed files with 703,523 additions and 686,349 deletions.
4 changes: 2 additions & 2 deletions projects/tt_um_mandelbrot_accel/commit_id.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"app": "Tiny Tapeout tt07 11b2d371",
"repo": "https://github.com/urish/tt07-mandelbrot-accelarator",
"commit": "3c58c26c65a59dbf473322cdbbb713d4dba923d3",
"workflow_url": "https://github.com/urish/tt07-mandelbrot-accelarator/actions/runs/9309801379",
"commit": "e6465bb67ce0c0205f7c21be5a683f2ca857183e",
"workflow_url": "https://github.com/urish/tt07-mandelbrot-accelarator/actions/runs/9322512028",
"sort_id": 1717142603372,
"openlane_version": "OpenLane 337ffbf4749b8bc6e8d8742ed9a595934142198b",
"pdk_version": "open_pdks cd1748bb197f9b7af62a54507de6624e30363943"
Expand Down
24 changes: 23 additions & 1 deletion projects/tt_um_mandelbrot_accel/docs/info.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ You can also include images in this folder and reference them in the markdown. E
A mandelbrot set is a set of complex numbers that satisfy a certain mathematical property. The set is defined by iterating a function on a complex number, and checking if the result of the iteration is bounded. If the result is bounded, the complex number is part of the mandelbrot set. If the result is unbounded, the complex number is not part of the mandelbrot set.

This project calculates the function `z = z^2 + c` iteratively, where `z` and `c` are complex numbers. The function is iterated on
every clock cycle, and the result is checked to see if it is bounded (`|z| <= 2`). When the result is unbounded, the `unbounded` signal is set high.
every clock cycle, and the result is checked to see if it is bounded (`|z| <= 2`). When the result is unbounded, the `unbounded` signal is set high, and the `iter` signal is set to the number of iterations it took for the result to become unbounded.

All the calculations are done in 32-bit IEEE 754 floating point format. The floating point addition code is taken from [Caravel FPU](https://github.dev/Lampro-Mellon/Caravel_FPU/blob/main/verilog/rtl/add_sub.sv), and the floating point multiplication code was generated by GPT-4o.

Expand All @@ -35,6 +35,28 @@ Strobe the `start` signal to begin the calculation. The design will iterate the

The values of `Cr` and `Ci` are buffered, so you can load new values into the registers while the design is calculating the mandelbrot set for the previous values. When you strobe the `start` signal, the design will begin calculating the mandelbrot set for the new values of `c`.

The following example illustrates how to load the value `c = 1.2 + 1.4i` into the registers and start the calculation:

| Clock | `data_in` | `load_Cr` | `load_Ci` | `start` | `unbounded` |
|-------|-----------|-----------|-----------|---------|-------------|
| 1 | 0x9A | 0 | 0 | 0 | 0 |
| 2 | 0x99 | 0 | 0 | 0 | 0 |
| 3 | 0x99 | 0 | 0 | 0 | 0 |
| 4 | 0x3F | 1 | 0 | 0 | 0 |
| 5 | 0x33 | 0 | 0 | 0 | 0 |
| 6 | 0x33 | 0 | 0 | 0 | 0 |
| 7 | 0xB3 | 0 | 0 | 0 | 0 |
| 8 | 0x3F | 0 | 1 | 1 | 0 |
| 9 | 0x00 | 0 | 0 | 0 | 0 |
| 10 | 0x00 | 0 | 0 | 0 | 1 |

Where:
- 0x3F99999A is the IEEE 754 floating point representation of the real part of `c` (1.2)
- 0x3FB33333 is the IEEE 754 floating point representation of the imaginary part of `c` (1.4)
- Unbounded goes high two clock cycles after the start signal is strobed, indicating that the result is unbounded.

When the calculation concludes, the `iter` signal will hold the number of iterations it took for the result to become unbounded. The `iter` signal is valid when the `unbounded` signal is set high.

## External hardware

None
14 changes: 7 additions & 7 deletions projects/tt_um_mandelbrot_accel/info.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ pinout:

# Outputs
uo[0]: "unbounded"
uo[1]: ""
uo[2]: ""
uo[3]: ""
uo[4]: ""
uo[5]: ""
uo[6]: ""
uo[7]: ""
uo[1]: "iter[0]"
uo[2]: "iter[1]"
uo[3]: "iter[2]"
uo[4]: "iter[3]"
uo[5]: "iter[4]"
uo[6]: "iter[5]"
uo[7]: "iter[6]"

# Bidirectional pins
uio[0]: "data_in[0]"
Expand Down
2 changes: 1 addition & 1 deletion projects/tt_um_mandelbrot_accel/stats/metrics.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Final_Util,Peak_Memory_Usage_MB,synth_cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,pin_antenna_violations,net_antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,DecapCells,WelltapCells,DiodeCells,FillCells,NonPhysCells,TotalCells,CoreArea_um^2,power_slowest_internal_uW,power_slowest_switching_uW,power_slowest_leakage_uW,power_typical_internal_uW,power_typical_switching_uW,power_typical_leakage_uW,power_fastest_internal_uW,power_fastest_switching_uW,power_fastest_leakage_uW,critical_path_ns,suggested_clock_period,suggested_clock_frequency,CLOCK_PERIOD,FP_ASPECT_RATIO,FP_CORE_UTIL,FP_PDN_HPITCH,FP_PDN_VPITCH,GRT_ADJUSTMENT,GRT_REPAIR_ANTENNAS,MAX_FANOUT_CONSTRAINT,PL_TARGET_DENSITY,RUN_HEURISTIC_DIODE_INSERTION,STD_CELL_LIBRARY,SYNTH_STRATEGY
/work/src,tt_um_mandelbrot_accel,wokwi,flow completed,0h23m15s0ms,0h18m55s0ms,124080.53844900976,0.23262310400000002,62040.26922450488,59.91,52.6005,1074.25,14206,0,0,0,0,0,0,0,33,22,0,-1,-1,511230,114652,-3.14,-1,-1,-1,-1,-90.93,-1,-1,-1,-1,403750231.0,0.0,65.1,52.97,39.89,10.69,-1,22001,25842,324,4041,0,0,0,22019,1419,128,599,1638,4305,2641,1665,1485,228,217,161,9848,3278,151,5425,14432,33134,225801.56160000002,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,51.0,19.607843137254903,50,1,50,153.18,153.6,0.3,1,10,0.6,0,sky130_fd_sc_hd,AREA 0
/work/src,tt_um_mandelbrot_accel,wokwi,flow completed,0h24m37s0ms,0h20m17s0ms,123865.59849188496,0.23262310400000002,61932.79924594248,59.94,53.1413,1083.71,14257,0,0,0,0,0,0,0,29,17,0,-1,-1,538617,116900,-1.13,-1,-1,-1,-1,-32.82,-1,-1,-1,-1,428505097.0,0.0,67.9,53.59,45.2,11.11,-1,22018,25871,323,4046,0,0,0,22049,1392,128,623,1564,4457,2625,1671,1548,235,224,164,9752,3278,521,5679,14407,33637,225801.56160000002,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,51.0,19.607843137254903,50,1,50,153.18,153.6,0.3,1,10,0.6,0,sky130_fd_sc_hd,AREA 0
156 changes: 77 additions & 79 deletions projects/tt_um_mandelbrot_accel/stats/synthesis-stats.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,94 +3,92 @@

=== tt_um_mandelbrot_accel ===

Number of wires: 14190
Number of wire bits: 14225
Number of wires: 14241
Number of wire bits: 14276
Number of public wires: 225
Number of public wire bits: 260
Number of memories: 0
Number of memory bits: 0
Number of processes: 0
Number of cells: 14206
sky130_fd_sc_hd__a2111o_2 32
sky130_fd_sc_hd__a2111oi_2 7
sky130_fd_sc_hd__a211o_2 165
sky130_fd_sc_hd__a211oi_2 138
Number of cells: 14257
sky130_fd_sc_hd__a2111o_2 50
sky130_fd_sc_hd__a2111oi_2 11
sky130_fd_sc_hd__a211o_2 208
sky130_fd_sc_hd__a211oi_2 133
sky130_fd_sc_hd__a21bo_2 167
sky130_fd_sc_hd__a21boi_2 43
sky130_fd_sc_hd__a21o_2 643
sky130_fd_sc_hd__a21oi_2 595
sky130_fd_sc_hd__a221o_2 236
sky130_fd_sc_hd__a221oi_2 14
sky130_fd_sc_hd__a22o_2 586
sky130_fd_sc_hd__a22oi_2 128
sky130_fd_sc_hd__a2bb2o_2 35
sky130_fd_sc_hd__a2bb2oi_2 3
sky130_fd_sc_hd__a311o_2 11
sky130_fd_sc_hd__a21boi_2 41
sky130_fd_sc_hd__a21o_2 745
sky130_fd_sc_hd__a21oi_2 598
sky130_fd_sc_hd__a221o_2 168
sky130_fd_sc_hd__a221oi_2 8
sky130_fd_sc_hd__a22o_2 594
sky130_fd_sc_hd__a22oi_2 73
sky130_fd_sc_hd__a2bb2o_2 54
sky130_fd_sc_hd__a2bb2oi_2 2
sky130_fd_sc_hd__a311o_2 12
sky130_fd_sc_hd__a311oi_2 3
sky130_fd_sc_hd__a31o_2 168
sky130_fd_sc_hd__a31oi_2 27
sky130_fd_sc_hd__a32o_2 113
sky130_fd_sc_hd__a32oi_2 8
sky130_fd_sc_hd__a31o_2 206
sky130_fd_sc_hd__a31oi_2 16
sky130_fd_sc_hd__a32o_2 154
sky130_fd_sc_hd__a32oi_2 9
sky130_fd_sc_hd__a41o_2 13
sky130_fd_sc_hd__a41oi_2 1
sky130_fd_sc_hd__and2_2 558
sky130_fd_sc_hd__and2b_2 277
sky130_fd_sc_hd__and3_2 531
sky130_fd_sc_hd__and3b_2 41
sky130_fd_sc_hd__and4_2 255
sky130_fd_sc_hd__and4b_2 51
sky130_fd_sc_hd__and4bb_2 44
sky130_fd_sc_hd__buf_1 1001
sky130_fd_sc_hd__buf_2 17
sky130_fd_sc_hd__conb_1 23
sky130_fd_sc_hd__dfrtp_2 217
sky130_fd_sc_hd__inv_2 458
sky130_fd_sc_hd__mux2_1 2
sky130_fd_sc_hd__mux2_2 567
sky130_fd_sc_hd__mux4_2 27
sky130_fd_sc_hd__nand2_2 1211
sky130_fd_sc_hd__nand2b_2 8
sky130_fd_sc_hd__nand3_2 352
sky130_fd_sc_hd__nand3b_2 17
sky130_fd_sc_hd__nand4_2 118
sky130_fd_sc_hd__and2_2 512
sky130_fd_sc_hd__and2b_2 243
sky130_fd_sc_hd__and3_2 536
sky130_fd_sc_hd__and3b_2 33
sky130_fd_sc_hd__and4_2 177
sky130_fd_sc_hd__and4b_2 25
sky130_fd_sc_hd__and4bb_2 29
sky130_fd_sc_hd__buf_1 1009
sky130_fd_sc_hd__buf_2 2
sky130_fd_sc_hd__conb_1 16
sky130_fd_sc_hd__dfrtp_2 224
sky130_fd_sc_hd__inv_2 481
sky130_fd_sc_hd__mux2_1 5
sky130_fd_sc_hd__mux2_2 552
sky130_fd_sc_hd__mux4_2 23
sky130_fd_sc_hd__nand2_2 1204
sky130_fd_sc_hd__nand2b_2 15
sky130_fd_sc_hd__nand3_2 436
sky130_fd_sc_hd__nand3b_2 31
sky130_fd_sc_hd__nand4_2 129
sky130_fd_sc_hd__nand4b_2 2
sky130_fd_sc_hd__nor2_2 885
sky130_fd_sc_hd__nor2b_2 2
sky130_fd_sc_hd__nor3_2 134
sky130_fd_sc_hd__nor3b_2 16
sky130_fd_sc_hd__nor4_2 34
sky130_fd_sc_hd__nor4b_2 7
sky130_fd_sc_hd__o2111a_2 18
sky130_fd_sc_hd__o2111ai_2 6
sky130_fd_sc_hd__o211a_2 170
sky130_fd_sc_hd__o211ai_2 93
sky130_fd_sc_hd__o21a_2 313
sky130_fd_sc_hd__o21ai_2 336
sky130_fd_sc_hd__o21ba_2 117
sky130_fd_sc_hd__o21bai_2 56
sky130_fd_sc_hd__o221a_2 27
sky130_fd_sc_hd__o221ai_2 5
sky130_fd_sc_hd__o22a_2 64
sky130_fd_sc_hd__o22ai_2 13
sky130_fd_sc_hd__o2bb2a_2 70
sky130_fd_sc_hd__o2bb2ai_2 1
sky130_fd_sc_hd__o311a_2 7
sky130_fd_sc_hd__o311ai_2 2
sky130_fd_sc_hd__o31a_2 41
sky130_fd_sc_hd__o31ai_2 8
sky130_fd_sc_hd__o32a_2 8
sky130_fd_sc_hd__o32ai_2 1
sky130_fd_sc_hd__o41a_2 5
sky130_fd_sc_hd__o41ai_2 1
sky130_fd_sc_hd__or2_2 586
sky130_fd_sc_hd__or2b_2 250
sky130_fd_sc_hd__or3_2 294
sky130_fd_sc_hd__or3b_2 80
sky130_fd_sc_hd__or4_2 134
sky130_fd_sc_hd__or4b_2 34
sky130_fd_sc_hd__or4bb_2 8
sky130_fd_sc_hd__xnor2_2 983
sky130_fd_sc_hd__xor2_2 484
sky130_fd_sc_hd__nor2_2 870
sky130_fd_sc_hd__nor2b_2 3
sky130_fd_sc_hd__nor3_2 141
sky130_fd_sc_hd__nor3b_2 15
sky130_fd_sc_hd__nor4_2 22
sky130_fd_sc_hd__nor4b_2 2
sky130_fd_sc_hd__o2111a_2 31
sky130_fd_sc_hd__o2111ai_2 5
sky130_fd_sc_hd__o211a_2 199
sky130_fd_sc_hd__o211ai_2 122
sky130_fd_sc_hd__o21a_2 360
sky130_fd_sc_hd__o21ai_2 318
sky130_fd_sc_hd__o21ba_2 92
sky130_fd_sc_hd__o21bai_2 57
sky130_fd_sc_hd__o221a_2 77
sky130_fd_sc_hd__o221ai_2 7
sky130_fd_sc_hd__o22a_2 111
sky130_fd_sc_hd__o22ai_2 20
sky130_fd_sc_hd__o2bb2a_2 74
sky130_fd_sc_hd__o311a_2 6
sky130_fd_sc_hd__o311ai_2 1
sky130_fd_sc_hd__o31a_2 21
sky130_fd_sc_hd__o31ai_2 14
sky130_fd_sc_hd__o32a_2 14
sky130_fd_sc_hd__o32ai_2 5
sky130_fd_sc_hd__o41a_2 11
sky130_fd_sc_hd__or2_2 593
sky130_fd_sc_hd__or2b_2 195
sky130_fd_sc_hd__or3_2 285
sky130_fd_sc_hd__or3b_2 75
sky130_fd_sc_hd__or4_2 129
sky130_fd_sc_hd__or4b_2 33
sky130_fd_sc_hd__or4bb_2 11
sky130_fd_sc_hd__xnor2_2 947
sky130_fd_sc_hd__xor2_2 441

Chip area for module '\tt_um_mandelbrot_accel': 132445.776000
Chip area for module '\tt_um_mandelbrot_accel': 132528.355200

Binary file modified projects/tt_um_mandelbrot_accel/tt_um_mandelbrot_accel.gds
Binary file not shown.
Loading

0 comments on commit c50b236

Please sign in to comment.