|
61 | 61 | - verilator |
62 | 62 | - icarus |
63 | 63 | - both |
| 64 | + test_chiplet_tools: |
| 65 | + description: 'Test chiplet development tools' |
| 66 | + required: false |
| 67 | + default: true |
| 68 | + type: boolean |
64 | 69 |
|
65 | 70 | # Disable automatic runs - this workflow only runs on manual trigger |
66 | 71 | # and when explicitly enabled by repository maintainers |
@@ -478,6 +483,62 @@ jobs: |
478 | 483 | echo "⚠️ GTKWave ${{ env.GTKWAVE_VERSION }} not found (optional for waveform viewing)" |
479 | 484 | fi |
480 | 485 | |
| 486 | + # Chiplet Development Tools Verification |
| 487 | + echo "🔍 Verifying Chiplet Development Tools..." |
| 488 | + |
| 489 | + # High Priority Tools |
| 490 | + if command -v tclsh &> /dev/null; then |
| 491 | + echo "✅ TCL: $(tclsh -c 'puts $tcl_version')" |
| 492 | + else |
| 493 | + echo "⚠️ TCL not found (required for OpenSTA scripting)" |
| 494 | + fi |
| 495 | + |
| 496 | + if command -v ngspice &> /dev/null; then |
| 497 | + echo "✅ ngspice: $(ngspice --version | head -1)" |
| 498 | + else |
| 499 | + echo "⚠️ ngspice not found (optional for signal integrity analysis)" |
| 500 | + fi |
| 501 | + |
| 502 | + if command -v julia &> /dev/null; then |
| 503 | + echo "✅ Julia: $(julia --version | head -1)" |
| 504 | + else |
| 505 | + echo "⚠️ Julia not found (optional for PowerModels.jl)" |
| 506 | + fi |
| 507 | + |
| 508 | + # Medium Priority Tools |
| 509 | + if command -v opentimer &> /dev/null; then |
| 510 | + echo "✅ OpenTimer: $(opentimer --version 2>/dev/null | head -1 || echo 'OpenTimer available')" |
| 511 | + else |
| 512 | + echo "⚠️ OpenTimer not found (optional for high-performance timing analysis)" |
| 513 | + fi |
| 514 | + |
| 515 | + if command -v sta &> /dev/null; then |
| 516 | + echo "✅ OpenSTA: $(sta --version 2>/dev/null | head -1 || echo 'OpenSTA available')" |
| 517 | + else |
| 518 | + echo "⚠️ OpenSTA not found (optional for static timing analysis)" |
| 519 | + fi |
| 520 | + |
| 521 | + # Low Priority Tools |
| 522 | + if command -v hwloc-ls &> /dev/null; then |
| 523 | + echo "✅ hwloc: $(hwloc-ls --version 2>/dev/null | head -1 || echo 'hwloc available')" |
| 524 | + else |
| 525 | + echo "⚠️ hwloc not found (optional for thermal analysis)" |
| 526 | + fi |
| 527 | + |
| 528 | + if command -v sensors &> /dev/null; then |
| 529 | + echo "✅ lm-sensors: $(sensors --version 2>/dev/null | head -1 || echo 'lm-sensors available')" |
| 530 | + else |
| 531 | + echo "⚠️ lm-sensors not found (optional for thermal monitoring)" |
| 532 | + fi |
| 533 | + |
| 534 | + # Python chiplet packages verification |
| 535 | + echo "🔍 Verifying Python chiplet packages..." |
| 536 | + $PYTHON_CMD -c "import yaml; print('✅ PyYAML available')" 2>/dev/null || echo "⚠️ PyYAML not found" |
| 537 | + $PYTHON_CMD -c "import networkx; print('✅ NetworkX available')" 2>/dev/null || echo "⚠️ NetworkX not found" |
| 538 | + $PYTHON_CMD -c "import matplotlib; print('✅ Matplotlib available')" 2>/dev/null || echo "⚠️ Matplotlib not found" |
| 539 | + $PYTHON_CMD -c "import numpy; print('✅ NumPy available')" 2>/dev/null || echo "⚠️ NumPy not found" |
| 540 | + $PYTHON_CMD -c "import scipy; print('✅ SciPy available')" 2>/dev/null || echo "⚠️ SciPy not found" |
| 541 | + |
481 | 542 | if command -v dot &> /dev/null; then |
482 | 543 | echo "✅ Graphviz: $(dot -V | head -1)" |
483 | 544 | else |
@@ -582,6 +643,123 @@ jobs: |
582 | 643 | |
583 | 644 | echo "🌊 Surfer web-based VCD viewer setup complete" |
584 | 645 |
|
| 646 | + - name: Install Chiplet Development Tools |
| 647 | + run: | |
| 648 | + echo "🔧 Installing Chiplet Development Tools..." |
| 649 | + |
| 650 | + # High Priority Tools (Essential for Chiplet Flow) |
| 651 | + echo "📦 Installing High Priority Chiplet Tools..." |
| 652 | + |
| 653 | + # 1. TCL for OpenSTA scripting |
| 654 | + echo "🔧 Installing TCL for OpenSTA scripting..." |
| 655 | + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ |
| 656 | + tcl \ |
| 657 | + tcl-dev \ |
| 658 | + || echo "⚠️ TCL installation failed" |
| 659 | + |
| 660 | + # 2. SPICE Simulators for Signal Integrity Analysis |
| 661 | + echo "🔧 Installing SPICE simulators for signal integrity..." |
| 662 | + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ |
| 663 | + ngspice \ |
| 664 | + || echo "⚠️ ngspice installation failed" |
| 665 | + |
| 666 | + # 3. Julia for PowerModels.jl |
| 667 | + echo "🔧 Installing Julia for PowerModels.jl..." |
| 668 | + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ |
| 669 | + julia \ |
| 670 | + || echo "⚠️ Julia installation failed" |
| 671 | + |
| 672 | + # Medium Priority Tools (Important for Advanced Features) |
| 673 | + echo "📦 Installing Medium Priority Chiplet Tools..." |
| 674 | + |
| 675 | + # 4. Additional build dependencies for chiplet tools |
| 676 | + echo "🔧 Installing additional build dependencies..." |
| 677 | + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ |
| 678 | + libreadline-dev \ |
| 679 | + libncurses5-dev \ |
| 680 | + libfftw3-dev \ |
| 681 | + libx11-dev \ |
| 682 | + libxpm-dev \ |
| 683 | + libxext-dev \ |
| 684 | + libxrandr-dev \ |
| 685 | + libxinerama-dev \ |
| 686 | + libxcursor-dev \ |
| 687 | + libxi-dev \ |
| 688 | + libxrender-dev \ |
| 689 | + libxss-dev \ |
| 690 | + libxtst-dev \ |
| 691 | + libxrandr-dev \ |
| 692 | + libasound2-dev \ |
| 693 | + libpulse-dev \ |
| 694 | + libdbus-1-dev \ |
| 695 | + libudev-dev \ |
| 696 | + libevdev-dev \ |
| 697 | + libmtdev-dev \ |
| 698 | + libts-dev \ |
| 699 | + libxcb1-dev \ |
| 700 | + libxcb-render0-dev \ |
| 701 | + libxcb-shape0-dev \ |
| 702 | + libxcb-xfixes0-dev \ |
| 703 | + || echo "⚠️ Some build dependencies failed" |
| 704 | + |
| 705 | + # 5. OpenTimer (High-performance static timing analysis) |
| 706 | + echo "🔧 Installing OpenTimer for timing analysis..." |
| 707 | + cd /tmp |
| 708 | + git clone https://github.com/OpenTimer/OpenTimer.git || echo "⚠️ OpenTimer clone failed" |
| 709 | + if [ -d "OpenTimer" ]; then |
| 710 | + cd OpenTimer |
| 711 | + mkdir build && cd build |
| 712 | + cmake .. || echo "⚠️ OpenTimer cmake failed" |
| 713 | + make -j$(nproc) || echo "⚠️ OpenTimer build failed" |
| 714 | + sudo make install || echo "⚠️ OpenTimer install failed" |
| 715 | + echo "✅ OpenTimer installation completed" |
| 716 | + fi |
| 717 | + cd $GITHUB_WORKSPACE |
| 718 | + |
| 719 | + # 6. OpenSTA (Open-source static timing analyzer) |
| 720 | + echo "🔧 Installing OpenSTA for static timing analysis..." |
| 721 | + cd /tmp |
| 722 | + git clone https://github.com/The-OpenROAD-Project/OpenSTA.git || echo "⚠️ OpenSTA clone failed" |
| 723 | + if [ -d "OpenSTA" ]; then |
| 724 | + cd OpenSTA |
| 725 | + mkdir build && cd build |
| 726 | + cmake .. || echo "⚠️ OpenSTA cmake failed" |
| 727 | + make -j$(nproc) || echo "⚠️ OpenSTA build failed" |
| 728 | + sudo make install || echo "⚠️ OpenSTA install failed" |
| 729 | + echo "✅ OpenSTA installation completed" |
| 730 | + fi |
| 731 | + cd $GITHUB_WORKSPACE |
| 732 | + |
| 733 | + # Low Priority Tools (Nice to Have) |
| 734 | + echo "📦 Installing Low Priority Chiplet Tools..." |
| 735 | + |
| 736 | + # 7. Additional Python packages for chiplet analysis |
| 737 | + echo "🔧 Installing Python chiplet analysis packages..." |
| 738 | + $PIP_CMD install \ |
| 739 | + power-models \ |
| 740 | + chiplet-validator \ |
| 741 | + pyyaml \ |
| 742 | + networkx \ |
| 743 | + matplotlib \ |
| 744 | + numpy \ |
| 745 | + scipy \ |
| 746 | + || echo "⚠️ Python chiplet packages installation failed" |
| 747 | + |
| 748 | + # 8. Thermal analysis tools (if available) |
| 749 | + echo "🔧 Installing thermal analysis tools..." |
| 750 | + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ |
| 751 | + hwloc \ |
| 752 | + lm-sensors \ |
| 753 | + || echo "⚠️ Thermal analysis tools installation failed" |
| 754 | + |
| 755 | + # 9. Additional verification tools |
| 756 | + echo "🔧 Installing additional verification tools..." |
| 757 | + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ |
| 758 | + yosys-abc \ |
| 759 | + || echo "⚠️ Yosys ABC installation failed" |
| 760 | + |
| 761 | + echo "✅ Chiplet Development Tools installation complete" |
| 762 | +
|
585 | 763 | # Manual FPGA tool installation (fallback for apt package issues) - DISABLED |
586 | 764 | # - name: Install FPGA tools manually |
587 | 765 | # run: | |
@@ -874,6 +1052,92 @@ jobs: |
874 | 1052 | |
875 | 1053 | echo "✅ cocotb test execution complete" |
876 | 1054 |
|
| 1055 | + # Test chiplet development tools |
| 1056 | + - name: Test chiplet development tools |
| 1057 | + if: (github.event.inputs.test_chiplet_tools == 'true' || github.event_name != 'workflow_dispatch') |
| 1058 | + run: | |
| 1059 | + echo "🔧 Testing Chiplet Development Tools..." |
| 1060 | + |
| 1061 | + # Test TCL for OpenSTA scripting |
| 1062 | + echo "🧪 Testing TCL for OpenSTA scripting..." |
| 1063 | + if command -v tclsh &> /dev/null; then |
| 1064 | + echo 'puts "TCL version: $tcl_version"' | tclsh || echo "⚠️ TCL test failed" |
| 1065 | + echo "✅ TCL test completed" |
| 1066 | + else |
| 1067 | + echo "⚠️ TCL not available for testing" |
| 1068 | + fi |
| 1069 | + |
| 1070 | + # Test ngspice for signal integrity analysis |
| 1071 | + echo "🧪 Testing ngspice for signal integrity analysis..." |
| 1072 | + if command -v ngspice &> /dev/null; then |
| 1073 | + # Create a simple SPICE test file |
| 1074 | + echo "* Simple RC circuit test" > /tmp/test_circuit.sp |
| 1075 | + echo "V1 1 0 DC 5" >> /tmp/test_circuit.sp |
| 1076 | + echo "R1 1 2 1k" >> /tmp/test_circuit.sp |
| 1077 | + echo "C1 2 0 1u" >> /tmp/test_circuit.sp |
| 1078 | + echo ".tran 0.1 1" >> /tmp/test_circuit.sp |
| 1079 | + echo ".end" >> /tmp/test_circuit.sp |
| 1080 | + ngspice -b /tmp/test_circuit.sp > /tmp/ngspice_test.log 2>&1 || echo "⚠️ ngspice test failed" |
| 1081 | + echo "✅ ngspice test completed" |
| 1082 | + else |
| 1083 | + echo "⚠️ ngspice not available for testing" |
| 1084 | + fi |
| 1085 | + |
| 1086 | + # Test Julia for PowerModels.jl |
| 1087 | + echo "🧪 Testing Julia for PowerModels.jl..." |
| 1088 | + if command -v julia &> /dev/null; then |
| 1089 | + julia -e 'println("Julia version: ", VERSION)' || echo "⚠️ Julia test failed" |
| 1090 | + echo "✅ Julia test completed" |
| 1091 | + else |
| 1092 | + echo "⚠️ Julia not available for testing" |
| 1093 | + fi |
| 1094 | + |
| 1095 | + # Test OpenTimer for timing analysis |
| 1096 | + echo "🧪 Testing OpenTimer for timing analysis..." |
| 1097 | + if command -v opentimer &> /dev/null; then |
| 1098 | + opentimer --help > /tmp/opentimer_test.log 2>&1 || echo "⚠️ OpenTimer test failed" |
| 1099 | + echo "✅ OpenTimer test completed" |
| 1100 | + else |
| 1101 | + echo "⚠️ OpenTimer not available for testing" |
| 1102 | + fi |
| 1103 | + |
| 1104 | + # Test OpenSTA for static timing analysis |
| 1105 | + echo "🧪 Testing OpenSTA for static timing analysis..." |
| 1106 | + if command -v sta &> /dev/null; then |
| 1107 | + sta --help > /tmp/opensta_test.log 2>&1 || echo "⚠️ OpenSTA test failed" |
| 1108 | + echo "✅ OpenSTA test completed" |
| 1109 | + else |
| 1110 | + echo "⚠️ OpenSTA not available for testing" |
| 1111 | + fi |
| 1112 | + |
| 1113 | + # Test Python chiplet packages |
| 1114 | + echo "🧪 Testing Python chiplet packages..." |
| 1115 | + $PYTHON_CMD -c "import sys; print('Testing Python chiplet packages...')" || echo "⚠️ Python test failed" |
| 1116 | + $PYTHON_CMD -c "import yaml; print('✅ PyYAML: OK')" 2>/dev/null || echo "⚠️ PyYAML: Not available" |
| 1117 | + $PYTHON_CMD -c "import networkx as nx; print('✅ NetworkX: OK')" 2>/dev/null || echo "⚠️ NetworkX: Not available" |
| 1118 | + $PYTHON_CMD -c "import matplotlib; print('✅ Matplotlib: OK')" 2>/dev/null || echo "⚠️ Matplotlib: Not available" |
| 1119 | + $PYTHON_CMD -c "import numpy as np; print('✅ NumPy: OK')" 2>/dev/null || echo "⚠️ NumPy: Not available" |
| 1120 | + $PYTHON_CMD -c "import scipy; print('✅ SciPy: OK')" 2>/dev/null || echo "⚠️ SciPy: Not available" |
| 1121 | + echo "Python chiplet packages test completed" |
| 1122 | + |
| 1123 | + # Test thermal analysis tools |
| 1124 | + echo "🧪 Testing thermal analysis tools..." |
| 1125 | + if command -v hwloc-ls &> /dev/null; then |
| 1126 | + hwloc-ls --version > /tmp/hwloc_test.log 2>&1 || echo "⚠️ hwloc test failed" |
| 1127 | + echo "✅ hwloc test completed" |
| 1128 | + else |
| 1129 | + echo "⚠️ hwloc not available for testing" |
| 1130 | + fi |
| 1131 | + |
| 1132 | + if command -v sensors &> /dev/null; then |
| 1133 | + sensors --version > /tmp/sensors_test.log 2>&1 || echo "⚠️ lm-sensors test failed" |
| 1134 | + echo "✅ lm-sensors test completed" |
| 1135 | + else |
| 1136 | + echo "⚠️ lm-sensors not available for testing" |
| 1137 | + fi |
| 1138 | + |
| 1139 | + echo "✅ Chiplet Development Tools testing complete" |
| 1140 | +
|
877 | 1141 | # Synthesis step (OpenLane disabled - using Yosys only) |
878 | 1142 | - name: Run ASIC synthesis |
879 | 1143 | if: (github.event.inputs.test_synthesis == 'true' || github.event_name != 'workflow_dispatch') && (github.event.inputs.target_platform == 'asic' || github.event.inputs.target_platform == 'both' || github.event_name != 'workflow_dispatch') |
|
0 commit comments