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
领英推荐
Findings and Insights
Our experiment yielded several key findings that highlight the transformative potential of generative AI for silicon design hardware regression analysis:
Challenges
Utilising generative AI for analysing regression runs presents distinct challenges.
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
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']
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
"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 ??