Home > On-Demand Archives > Q&A Sessions >

Live Q&A - Building the Future of HAL: Leveraging AI and Deterministic Code Generation

Michael Lazarenko - embedd.it - Watch Now - EOC 2025 - Duration: 30:58

Live Q&A - Building the Future of HAL: Leveraging AI and Deterministic Code Generation
Michael Lazarenko
Live Q&A with Michael Lazarenko for the theatre talk titled Building the Future of HAL: Leveraging AI and Deterministic Code Generation
M↓ MARKDOWN HELP
italicssurround text with
*asterisks*
boldsurround text with
**two asterisks**
hyperlink
[hyperlink](https://example.com)
or just a bare URL
code
surround text with
`backticks`
strikethroughsurround text with
~~two tilde characters~~
quote
prefix with
>

Otzen
Score: 1 | 3 days ago | 1 reply

Looks nice, if not for the generated code, it looks as if it could give a very improved way of reading the reference manuals.

Adam.Fraser-Kruck
Score: 0 | 2 days ago | no reply

I was thinking the same.

Maybe they could create a web tool where you could search for parts that meet needs like "2 uarts, 1 I2C, 3 SPI at the same time". It's sometimes hard to make sure you get all peripherals you need without them conflicting on pins or resources.

NiharikaJha
Score: 0 | 3 days ago | no reply

This session was a great introduction. How well would the code perform on coverity or other static analysis tools?

Rtoribio
Score: 0 | 3 days ago | no reply

I find the topic and the tool you presented very interesting. Accelerating the development process is becoming increasingly important, and with the use of AI, we can make rapid progress. However, what you’ve proposed with this tool is incredible—it’s like jumping straight to the finish line. One question that remains for me is how this applies to cases involving less advanced technologies or situations where the documentation is not very specific or clear—how does the tool extract valuable data in those scenarios? Thank you, and excellent contribution.

Otzen
Score: 0 | 3 days ago | no reply

How to tweak your generated driver?
Example: I have a UART, that has a stupid design, it set a flag (bit) when it detects errors on RX, in order to clear those flags, I have to trigger a function in the UART that not only clears those flags but resets the whole UART, including the TX part. this results in garbled data on TX, if sending is in progress when i clear those flags.
I had to tweak the UART driver so it will look into not only the TX state, but also the SW buffer wit TX data, to find a gap where I can reset the UART. (Yes. I did say stupid HW design).

How would you go on doing that with your tool?

SimonSmith
Score: 0 | 4 days ago | 1 reply

This is a game changer! The cost seems quite reasonable too. I can see it would also reduce bugs in writing the drivers by hand too. I presume the configuration can be in GitHub, so it's easy to review any changes that have been made that deviate from the datasheet? Does it report on errata automatically and offer to update to the latest issue?

Michael.LazarenkoSpeaker
Score: 1 | 4 days ago | no reply

Hi Simon,
Thanks a lot! At the moment, configuration is done via our UI, but we’re working on enabling everything to run through the user’s CI/CD pipeline.
We don’t currently report on errata automatically, but that’s a great suggestion—we’ll definitely look into it!

kevinz
Score: 0 | 4 days ago | 1 reply

Amazing! Am I to understand this can create drivers and or a BSP?

Michael.LazarenkoSpeaker
Score: 0 | 4 days ago | no reply

Hi! Thanks for the kind feedback.
We’re currently generating drivers for peripherals and actively working on MCU support, with plans to gradually roll out the capability to generate a full BSP.

zilvinas.nakutis
Score: 0 | 6 days ago | 1 reply

Hello, if sensor needs to be connected to the chosen board, how do I enter the information which pins it is connected to?

Michael.LazarenkoSpeaker
Score: 0 | 4 days ago | no reply

Hi Zilvinas,
The pinout of the selected board corresponds to the default peripheral layout. For SPI peripherals, the default NSS pin will be used. For boards with multiple I2C controllers, the system will scan each controller and look for the address of the specific part you’re testing.
For boards that do not have dedicated pins for the specified interfaces, you'll need to refer to Zephyr’s support page for the board. It will contain the selected pinout for each peripheral controller.

Thomas.Schaertel
Score: 0 | 6 days ago | 1 reply

Michael, thanks for your presentation. It was the first talk I watched at this year's EOC and it was impressive - in fact, I couldn't believe it works so well and easy. I'm looking forward to the Zoom discussion. I guess your VSC extension also works with Cursor. Thank you!
/Thomas

Michael.Lazarenko
Score: 0 | 5 days ago | no reply

Hi Thomas! Thanks a lot for the kind feedback! As always there are still many things to improve, but we are working hard on it :) Look forward to seeing you at the Q&A session.

12:02:56	 From Stefan Florian Palkovits : Great Presentation! Is there a way to handle datasheets that are accessed using an NDA, therefore not being possible to upload to a third party?
12:05:33	 From Mark : Is the DeviceTree paradigm (as used in Embedded Linux and Zephyr), and data formats, leveraged in constructing your data models.
12:08:01	 From Viktor : Hi,
4 questions from my side:

It is a pity to need to follow a generated narrative text in order to prepare the Initialization sequence as we saw in the Demo. Is it possible to generate the init sequence automatically with your tool?
We saw a demo example of driver generation for a peripheral device based on its datasheet (accelerometer). Do you have an example of the generation of HAL of a new MCU from the datasheet too ? Is there a way to add additional documents (reference manuals, reference designs etc) to the project?
Generally manufacturers already provide HAL for all of their MCU references, where does your tool positioned compared to these codes? Have you ever compared performances of both, your generated code and the vendor’s code
When your tool generates a driver of a particular IC, like in the example in the video, is there an abstraction layer between the MCU HAL and the driver of the IC so that one can easily change the MCU.
12:11:43	 From Rumman : For MCU code generation are you thinking of using SVD description like svd2rust in the Rust world?
12:12:54	 From Otzen  To  Stephane(privately) : It would be nice if these zoom meetings was open a few minuttes before start, so I don't have to hit connect excatly at start. 
I did miss 2 minuttes of the start, because i tried to connect 1 min before, was rejected, and in the wait time i silenced m calender a.s.o. Suddently 3 mins passed and I panically cliked connect again, entering 2 min late..
In other zoom meetrings i have participated in, the meeting is open aprox, 5 min before, just showing the title and sometimes some elevator music, so You have good time to connect get speakrs setup a.s.o.
12:14:40	 From garyb : How does the tool set handle mfr document addendums and corrections especially on complex processors?
12:16:15	 From Otzen : Adding to my question in the comments to the video, is the generated code human readable.
12:16:42	 From Viktor : How did you implement the current pool of supported MCU/DevBoards? Was it developed manually in one-by-one way?
12:21:43	 From Viktor : What is a business model of your solution? Do the client pay for every .hex generation? Is the monthly fee present?
12:25:53	 From Otzen : Talking eratas, I recently discovered a bug in a HW counter.
High speed 64 bit counter
Reads is in two 32 bit reads
HW should latch value of hhigh, when reading low, to get consistent values
Bug, latch not working if I read FFFFFFFF from low,
So driver had to discard thosae results and repeat the read.
How to handle such in the tool
12:28:33	 From Stefan Florian Palkovits : Can you elaborate about the license of the generated code? Especially if used by the free tier?
12:29:49	 From Otzen : [comment] Thanks for honest answer, and I agree in your rationale :-)
12:32:11	 From John.Singleton : Very cool. Thank you!

OUR SPONSORS & PARTNERS