Generative AI for Silicon Design - Article 5 (Analyse Logfiles)

Generative AI for Silicon Design - Article 5 (Analyse Logfiles)

The hardware design industry is no stranger to massive datasets and complex analyses. As designs become more sophisticated, so does the need for efficient and accurate methods of evaluating silicon regressions. Analysing hardware regressions often involves sifting through mountains of data, which can be both time-consuming and error-prone. Traditional methods rely on manual inspection and pattern recognition, often leading to bottlenecks in the design cycle. Generative AI, with its ability to learn and identify patterns in data, presents a promising approach to automate and speed up this process.

Experiment 5: GenAI Powered Regression Analysis

This article delves into an experiment that explores the utilisation of generative AI to analyse silicon design hardware regression results. The experiment aims to evaluate the effectiveness of generative AI in identifying patterns, anomalies, and correlations within the regression data.

In the experiment, we supplied OpenAI's GPT-4 Turbo model with a logfile obtained from regressing a FIFO design using the open-source formal verification tool Sysbiyosys (SBY). The formal verification tool and the verification environment were sourced from https://github.com/YosysHQ/sby.

Following is the log from a formal verification regression run. Can you please create a very brief summary of results (in tabular form) focussing on the final outcome of regression and suggest call to action?

<contents of the log file>
...
...
<available at the end of the article>        

Generated Tabular Regression Summary

Generated Summary

Findings and Insights

Our experiment yielded several key findings that highlight the transformative potential of generative AI for silicon design hardware regression analysis:

  1. Automated Pattern Recognition: Generative AI model shows remarkable ability to automatically extract patterns and correlations from complex regression data. This capability significantly reduces the manual effort required for data analysis.
  2. Anomaly Detection: The model's ability to learn the underlying distribution of regression data proved invaluable in detecting anomalies and outliers. This feature can help triage regression runs and help focus/stage debug efforts in efficient manner.

Challenges

Utilising generative AI for analysing regression runs presents distinct challenges.

  1. Data Complexity and Variety: Regression logs can be highly complex and varied, containing a mix of structured and unstructured data. Generative AI may struggle to accurately interpret and summarise this data if it hasn't been trained on similar datasets or if the data is inconsistent.
  2. Understanding Context: AI models might not fully grasp the nuanced context of regression tests. Misinterpretation of log file entries, such as differentiating between critical errors and minor warnings, can lead to inaccurate summaries or overlooked issues.
  3. Customisation and Flexibility: Different projects or organisations might have unique logging formats and conventions. A generative AI model might require extensive customisation or retraining to adapt to these variations, which can be time-consuming and resource-intensive.

In Conclusion

Our experiment demonstrates the immense potential of generative AI to revolutionise the hardware regression testing process. By leveraging the power of AI to analyse results with greater precision, we can significantly improve the efficiency, accuracy, and scalability of silicon design validation. As generative AI models continue to evolve, their impact on hardware design is poised to grow even further, paving the way for the creation of more reliable, high-performance integrated circuits that power the modern world.

SBY 23:52:15 [fifo_basic] engine_0: smtbmc boolector
SBY 23:52:15 [fifo_cover] engine_0: smtbmc boolector
SBY 23:52:15 [fifo_basic] base: starting process "cd fifo_basic/src; yosys -ql ../model/design.log ../model/design.ys"
SBY 23:52:15 [fifo_cover] base: starting process "cd fifo_cover/src; yosys -ql ../model/design.log ../model/design.ys"
SBY 23:52:15 [fifo_basic] base: Warning: Resizing cell port fifo.fifo_reader.addr from 10 bits to 11 bits.
SBY 23:52:15 [fifo_basic] base: Warning: Resizing cell port fifo.fifo_writer.addr from 10 bits to 11 bits.
SBY 23:52:15 [fifo_cover] base: Warning: Resizing cell port fifo.fifo_reader.addr from 10 bits to 11 bits.
SBY 23:52:15 [fifo_cover] base: Warning: Resizing cell port fifo.fifo_writer.addr from 10 bits to 11 bits.
SBY 23:52:15 [fifo_basic] base: finished (returncode=0)
SBY 23:52:15 [fifo_cover] base: finished (returncode=0)
SBY 23:52:15 [fifo_basic] prep: starting process "cd fifo_basic/model; yosys -ql design_prep.log design_prep.ys"
SBY 23:52:15 [fifo_cover] prep: starting process "cd fifo_cover/model; yosys -ql design_prep.log design_prep.ys"
SBY 23:52:15 [fifo_basic] prep: finished (returncode=0)
SBY 23:52:15 [fifo_basic] smt2: starting process "cd fifo_basic/model; yosys -ql design_smt2.log design_smt2.ys"
SBY 23:52:15 [fifo_cover] prep: finished (returncode=0)
SBY 23:52:15 [fifo_cover] smt2: starting process "cd fifo_cover/model; yosys -ql design_smt2.log design_smt2.ys"
SBY 23:52:15 [fifo_basic] smt2: finished (returncode=0)
SBY 23:52:15 [fifo_basic] engine_0: starting process "cd fifo_basic; yosys-smtbmc -s boolector --presat --unroll --noprogress -t 20  --append 0 --dump-vcd engine_0/trace.vcd --dump-yw engine_0/trace.yw --dump-vlogtb engine_0/trace_tb.v --dump-smtc engine_0/trace.smtc model/design_smt2.smt2"
SBY 23:52:15 [fifo_cover] smt2: finished (returncode=0)
SBY 23:52:15 [fifo_cover] engine_0: starting process "cd fifo_cover; yosys-smtbmc -s boolector --presat --unroll -c --noprogress -t 20  --append 0 --dump-vcd engine_0/trace%.vcd --dump-yw engine_0/trace%.yw --dump-vlogtb engine_0/trace%_tb.v --dump-smtc engine_0/trace%.smtc model/design_smt2.smt2"
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Solver: boolector
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Solver: boolector
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 0..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 0..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 1..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 1..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 0..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 2..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 2..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 1..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Reached cover statement at w_nzero_read in step 1.
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 3..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to VCD file: engine_0/trace0.vcd
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 3..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 4..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Verilog testbench: engine_0/trace0_tb.v
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to constraints file: engine_0/trace0.smtc
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 4..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Yosys witness file: engine_0/trace0.yw
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 5..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 1..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Reached cover statement at w_nzero_write in step 1.
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 5..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to VCD file: engine_0/trace1.vcd
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Verilog testbench: engine_0/trace1_tb.v
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 6..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to constraints file: engine_0/trace1.smtc
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Yosys witness file: engine_0/trace1.yw
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 6..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 1..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Reached cover statement at w_reset in step 1.
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to VCD file: engine_0/trace2.vcd
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 7..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Verilog testbench: engine_0/trace2_tb.v
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to constraints file: engine_0/trace2.smtc
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 7..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Yosys witness file: engine_0/trace2.yw
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 1..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 8..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 2..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Reached cover statement at w_underfill in step 2.
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Reached cover statement at w_nreset in step 2.
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to VCD file: engine_0/trace3.vcd
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 8..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Verilog testbench: engine_0/trace3_tb.v
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to constraints file: engine_0/trace3.smtc
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Yosys witness file: engine_0/trace3.yw
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 9..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 2..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Reached cover statement at w_empty in step 2.
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to VCD file: engine_0/trace4.vcd
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 9..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Verilog testbench: engine_0/trace4_tb.v
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to constraints file: engine_0/trace4.smtc
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Writing trace to Yosys witness file: engine_0/trace4.yw
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 2..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 3..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 4..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 10..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 5..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 10..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 6..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 7..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 8..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 11..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 9..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 11..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 10..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 11..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 12..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 13..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 12..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 14..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 12..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 15..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 16..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 17..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 18..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Checking cover reachability in step 19..
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Unreached cover statement at w_overfill.
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Unreached cover statement at w_full.
SBY 23:52:15 [fifo_cover] engine_0: ##   0:00:00  Status: failed
SBY 23:52:15 [fifo_cover] engine_0: finished (returncode=1)
SBY 23:52:15 [fifo_cover] engine_0: Status returned by engine: FAIL
SBY 23:52:15 [fifo_cover] summary: Elapsed clock time [H:MM:SS (secs)]: 0:00:00 (0)
SBY 23:52:15 [fifo_cover] summary: Elapsed process time [H:MM:SS (secs)]: 0:00:00 (0)
SBY 23:52:15 [fifo_cover] summary: engine_0 (smtbmc boolector) returned FAIL
SBY 23:52:15 [fifo_cover] summary: cover trace: fifo_cover/engine_0/trace0.vcd
SBY 23:52:15 [fifo_cover] summary:   reached cover statement fifo.w_nzero_read at fifo.sv:131.13-131.48 in step 1
SBY 23:52:15 [fifo_cover] summary: cover trace: fifo_cover/engine_0/trace1.vcd
SBY 23:52:15 [fifo_cover] summary:   reached cover statement fifo.w_nzero_write at fifo.sv:130.13-130.48 in step 1
SBY 23:52:15 [fifo_cover] summary: cover trace: fifo_cover/engine_0/trace2.vcd
SBY 23:52:15 [fifo_cover] summary:   reached cover statement fifo.w_reset at fifo.sv:135.13-135.34 in step 1
SBY 23:52:15 [fifo_cover] summary: cover trace: fifo_cover/engine_0/trace3.vcd
SBY 23:52:15 [fifo_cover] summary:   reached cover statement fifo.w_nreset at fifo.sv:99.13-99.45 in step 2
SBY 23:52:15 [fifo_cover] summary:   reached cover statement fifo.w_underfill at fifo.sv:176.13-176.62 in step 2
SBY 23:52:15 [fifo_cover] summary: cover trace: fifo_cover/engine_0/trace4.vcd
SBY 23:52:15 [fifo_cover] summary:   reached cover statement fifo.w_empty at fifo.sv:127.13-127.56 in step 2
SBY 23:52:15 [fifo_cover] summary: unreached cover statements:
SBY 23:52:15 [fifo_cover] summary:   fifo.w_full at fifo.sv:125.13-125.65
SBY 23:52:15 [fifo_cover] summary:   fifo.w_overfill at fifo.sv:189.13-189.61
SBY 23:52:15 [fifo_cover] DONE (FAIL, rc=2)
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 13..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 13..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 14..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 14..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 15..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 15..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 16..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 16..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 17..
SBY 23:52:15 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 17..
SBY 23:52:16 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 18..
SBY 23:52:16 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 18..
SBY 23:52:16 [fifo_basic] engine_0: ##   0:00:00  Checking assumptions in step 19..
SBY 23:52:16 [fifo_basic] engine_0: ##   0:00:00  Checking assertions in step 19..
SBY 23:52:16 [fifo_basic] engine_0: ##   0:00:00  Status: passed
SBY 23:52:16 [fifo_basic] engine_0: finished (returncode=0)
SBY 23:52:16 [fifo_basic] engine_0: Status returned by engine: pass
SBY 23:52:16 [fifo_basic] summary: Elapsed clock time [H:MM:SS (secs)]: 0:00:00 (0)
SBY 23:52:16 [fifo_basic] summary: Elapsed process time [H:MM:SS (secs)]: 0:00:01 (1)
SBY 23:52:16 [fifo_basic] summary: engine_0 (smtbmc boolector) returned pass
SBY 23:52:16 [fifo_basic] summary: engine_0 did not produce any traces
SBY 23:52:16 [fifo_basic] DONE (PASS, rc=0)
SBY 23:52:16 The following tasks failed: ['cover']        
Shivam Katiyar

Senior Design Verification Engineer | M.tech | GenAI

1 年

Grateful for the article share! Delving into it, the complexity for GenAI within intricate subsystems/SOC seems like a fascinating challenge.

Great experiments and insightful results. Using GenAI models for Chip design could also mean Design houses risk exposing their data to outside world. Hopefully Developers of GenAI models are thinking something like public and private domains with secure boundaries which can partition data usage !! Exciting times ahead.

Real Usecase of #GenerativeAI Anshul Jain ?? Nice Sharing

Hardik Trivedi

"Passionate Pre Silicon Verification Engineer at Intel Corporation | Constantly Evolving | Unleashing Innovations in Complex Problem Solving in the World of Semiconductors"

1 年

Informative Anshul Jain ??

要查看或添加评论,请登录

Anshul Jain的更多文章

社区洞察

其他会员也浏览了