正在加载视频...

视频加载失败

On many high-speed designs it is necessary to have a ground-plane void underneath large pads to minimize the local impedance dip. I´ve used GPT-6 to create a script that reads the layerstack information through the Altium PCB API, isolate the target net- and pad class, creates an openEMS simulation,...

38,867 次观看 • 8 天前 •via X (Twitter)

21 条评论

Cornelius Robinson 的头像
Cornelius Robinson8 天前

Altium looks really nice to use. Maybe one day I’ll get to try it

Lukas Henkel 的头像
Lukas Henkel8 天前

I like it :) I just wish they would take KiCAD as an example and increase the new features output. And fix long standing bugs...

Cornelius Robinson 的头像
Cornelius Robinson8 天前

I would imagine stability is extremely important, especially for large companies that use it. New features would therefore be quite slow

王德发 的头像
王德发7 天前

可以分享下脚本吗,想学习下思路

Josh 的头像
Josh8 天前

you should really make something from all these workflows you developed over the years. they are unique and would be very useful. "Lukas Toolbox for Altium" or something...

Jorge De Castro | EA1FWI 的头像
Jorge De Castro | EA1FWI8 天前

Quite useful for scripting the process.

Christophe Donzelot 的头像
Christophe Donzelot6 天前

What is the bandwidth?

Agent J 的头像
Agent J8 天前

It would be interesting to know your entire pipeline

sean murray 的头像
sean murray8 天前

Uh, that is pretty trick.

Nate Slager 的头像
Nate Slager8 天前

🔥

Nathan 的头像
Nathan8 天前

FINALLY we’re done with gpt6 pcb slop, now THIS is very fucking cool

AI Quanting 的头像
AI Quanting8 天前

one thing to watch when you parallelise. the target comes from whatever trace is attached, not the pad, so the same pad on two different traces wants two different voids. the sweep is pad shape times trace, not pad shape on its own

Lukas Henkel 的头像
Lukas Henkel8 天前

That is true but would be handled through the user defined input net classes which are usually impedance grouped

AI Quanting 的头像
AI Quanting8 天前

fair, net class covers it as long as the width is constant along the net. the one that bites is necking down for a bga escape, same net, two widths, and the pad sees the narrow one. probably a small enough set to special case

Lukas Henkel 的头像
Lukas Henkel8 天前

I´m not taking the geometry 1:1 from the design. I´m reconstructing it programmatically to in order to be able to make the FDTD mesh as small as possible. The script is only searching for trace segments so neck-down regions or polygons are not taken into account

Josh Pipe 的头像
Josh Pipe8 天前

@MrChallinger could this be of interest to you? (I'm not very technical, so it goes over my head!)

Pablo Pablo 的头像
Pablo Pablo8 天前

Solid workflow, but are you sure about the openEMS baseline? A wrong port setup shifts the impedance reference, and it seems to me you'd be tuning the void size against a wrong number.

Lukas Henkel 的头像
Lukas Henkel8 天前

It runs a transient TDR in openEMS and looks at the trace impedance 5mm in front of the pad. The open end is terminated into a PML boundary so I don´t see any reflections from this side. Therefore I would´t expect an influence from the port impedance as long as it´s a known value (which it is)

Phil 🇨🇭🇪🇺 的头像
Phil 🇨🇭🇪🇺8 天前

How high-speed does it need to be to require this? I don‘t think I have ever seen this in ~10Gbit/s lanes. Or could it be that it is more required in certain less-common stackups?

birilerindenbiri 的头像
birilerindenbiri8 天前

How can use altium like this ? Can u help me

John Rood 的头像
John Rood8 天前

the missing piece is attaching the solver inputs and version to each applied void. when the stackup changes, the agent should know which geometry is stale instead of silently preserving yesterday’s optimum.

相关视频

It is with deep gratitude that I welcome you all to Local Void Records. I remember talking about wanting to start a label 10 years ago.. I thought of it as a far out dream at the time, so to be here now is both invigorating and humbling. Manifesting a platform that provides opportunities for other artists to have a chance of getting their music heard is something I’m extremely passionate about. I understand the struggle of how hard it is to get your music out there and this feels like a way I can give back. Releasing music is just the beginning.. we have a team of passionate individuals who are excited to grow this entity into something bigger with the mission of uplifting and inspiring others. The name Local Void is inspired by the concept of a void in space.. a vast, open space that’s waiting to be filled. In the context of our label, it represents the idea that there is room for all kinds of music and artists, no matter their style or genre. The void is not empty.. it's a place of infinite possibility. Just like that cosmic void, Local Void is a space where artists can push boundaries and explore new dimensions of sound without limitation. It's a home for anyone who feels their music has something unique to offer, and it’s a space that will continually evolve, welcoming new voices and fresh ideas. Truly.. thank you to everyone who has supported me. I recognize that you all are the reason I’m in the position to be able to do something like this. Luv you all 🫶🏼 ~ Mike

⧩ INZO ⧩

27,983 次观看 • 1 年前

CSS Trick 🧲 You can create magnetic links with the power of custom properties and some JavaScript 💪 a { translate: calc(clamp(-1, var(--x), 1) * var(--pad-x)) ...; transition: translate var(--s, 1s) var(--ease, var(--elastic)); } a:hover { --s: 0s; } The trick here is to pad out the list items wrapping your links and use that as a translation limit 🛑 Start by using some JavaScript to calculate a value between -1 and 1 for both the x/y axis on pointermove for each list item, not the link! 🔗 If your pointer was at the center of the item, you'd get [0,0]. If it was in the top right, you'd get [1,-1] ☝️ It's worth checking out the JavaScript snippet to see how the mapping function works. Essentially, you create a function that when given a value between two bounds, will give you a mapped value back 🤙 const mapX = mapRange( item.offsetWidth * -0.5, item.offsetWidth * 0.5, 1, -1 ) Then, on pointermove, you plug the pointer position in to get the value back out and pass that into your CSS const x = mapX(item.centerX - event.x) document​.documentElement​.style.setProperty(--x, x) When the pointer leaves the list item, you make sure to reset these values back to 0 ✨ Once CSS has your values, it's the trick of updating the translation of each part You know that in each axis, you only want to translate the link by the padding amount li a { translate: calc(clamp(-1, var(--x), 1) * var(--pad-x)) calc(clamp(-1, var(--y), 1) * var(--pad-y)); transition: translate var(--speed, 1s) var(--ease, var(--elastic)); } This will translate the link within the list item by the desired amount. The cool part here is that you can set an offset for the text inside the link and have that move at a different rate ⭐️ By only updating the --pad-x/y custom properties for the inside the link, you can control how much it moves nav a span { --pad-x: 0.25rem; --pad-y: 0.25rem; } And the last piece, how do you update the behavior for transition speeds? And so it springs back like that? Again, use custom properties ✨ a:hover { --s: 0s; } a { transition: translate var(--s, 1s) var(--ease, var(--elastic)); } By default, a link will use --elastic easing via linear() and have a transition-duration of 1s. When a link is hovered that speed becomes 0s because you want the link to magnetise to your pointer. How about that little gap between when your pointer enters the item but hasn't hovered the link? Set a different transition so it transitions to being hovered 🫶 nav li:hover a { --ease: ease-out; --speed: 0.1s; } That's kinda it! 🙌 Use JavaScript (~40 loc) to get the information and then let CSS do all the lifting for you 💪 Any questions or suggestions, let me know 🙏 If you want a walkthrough video, also let me know please 🙏 CodePen.IO link below 👇

jhey ʕ•ᴥ•ʔ

164,863 次观看 • 2 年前