PIN/PAD Design in SoC - 5 (完)

本文探讨了设计者与封装厂之间的接口BondingMap,用于描述芯片封装要求。BondingMap包含封装类型、diesize、scribeline、sealring宽度、PADopening尺寸与坐标,以及wirebonding信息。此外,文章简述了设计自动化,涉及IOmux逻辑自动生成、IOcell自动例化等,旨在减少繁琐错误。总结指出,理解pin/pad设计对于芯片工程师至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5. Bonding Map
这个文档是designhouse和封装厂的接口。它描述了设计者对于芯片的封装要求。封装厂会根据这份文档完成封装设计,其结果需要designhouse的设计工程师确认。

Bonding Map中含有的信息包括,封装类型、die size、scribe line和seal ring宽度,还有PADopening的尺寸和坐标。这些坐标通常是后端工程师从版图中提取的,前端工程师需要计算一下是否合理。最后还有最重要的,就是wirebonding的信息。它指定了每一个PADopening需要bonding到哪一个finger,哪些PAD之间需要做bonding,哪些PAD需要bonding到substrate,哪些bonding是需要多根wire的。multi-wirebonding有助于减小电感,抑制SSN,当然其缺点是增加了成本。

这个文档一般是excel格式的,也有很多的技巧在里面,比较好玩。

6. 设计自动化
这部分很简略,因为其个人的色彩很浓厚。有些脚本自己觉得好用,换个人就不一定能看得懂、用的方便了。
基本上可以考虑从IO mux逻辑的自动生成、IO cell的自动例化、PADopening坐标和尺寸的自动check几个方面琢磨一下。这些都是比较规律的东西,同时又是繁琐,容易出错的。我个人偏好用tcl写一些脚本,可读性比perl强,且受到众多EDA工具的支持,不用重复学习。

总结到这里,可以告一段落了。希望将来自己还能看懂。
再来一句话总结:没有做过pin/pad设计的芯片工程师不是一个好厨子。
哈哈!
欢迎来电来函继续讨论!

icsoc@新浪微博

(完)

<think>嗯,用户在全志T113-i的U-Boot中配置PWM0时遇到了DTS语法错误。首先,我需要看看他提供的DTS代码和报错信息。错误提示是第128行13-19字符处的语法错误,导致解析失败。 首先,我应该检查DTS节点的语法是否正确。用户配置了pwm0_pin_a和pwm0_pin_b两个节点,然后在&pwm0中用了它们。可能的错误点包括节点命名、属性拼写以及属性值的格式。 注意到在pwm0_pin_a节点中,muxsel被设置为5,而pwm0_pin_b中muxsel是0。全志的DTS通常使用pinctrl的配置,可能需要检查正确的muxsel值是否符合硬件文档。不过,更常见的问题可能是节点名称中的“@”符号。在DTS中,节点名后的“@”通常用于带地址的节点,比如pwm0@0x0300a000,但在这里用户可能只是定义了两个不同的状态,所以使用“@0”和“@1”可能不合适,或者需要正确的地址。不过,这可能不是导致语法错误的原因,因为语法错误通常在解析阶段就会发生,可能是结构问题。 接下来,检查语法错误。比如,属性名是否正确,比如“bias-pull-up”是否正确,或者是否需要写成“bias-pull-up;”。用户写的是正确的,带有分号。另一个可能是使用了过时的属性名,例如“muxsel”是否应该替换为“function”或者其他属性?或者全志的DTS是否使用不同的配置方式,比如使用phandle来pinctrl配置? 另外,检查pinctrl-0和pinctrl-1的用是否正确。用户是否正确地用了两个pin配置节点?比如,是否需要用尖括号包裹phandle,比如pinctrl-0 = <&pwm0_pin_a>;,这里用户确实是这样写的,所以这部分可能没问题。 再考虑报错的具体位置,第128行13-19字符,可能是某个节点的定义部分有错误。比如,可能某个属性后面缺少分号,或者括号不匹配。例如,在pwm0_pin_a节点中,每个属性是否都以分号结尾?用户的代码中,每个属性都有分号,所以可能没问题。 另一个可能性是节点名称中的特殊字符,比如“@”符号是否需要转义,或者是否在DTS版本中有不同的要求。例如,某些情况下,节点名中的“@”后面需要跟地址,而用户这里用了数字,但可能地址不正确。或者,用户应该将节点名改为不带“@”的,例如pwm0_pin_a: pwm0_pins_a这样的命名方式。 也有可能是在全志的DTS中,pinctrl的配置需要遵循特定的格式,例如使用“sunxi,pins”属性而不是“pins”。例如,有些全志平台的DTS会这样写: pins = "PD16"; function = "pwm0"; allwinner,muxsel = <5>; 这可能是因为全志的pinctrl驱动使用特定的属性名,比如“allwinner,muxsel”而不是“muxsel”。用户可能错误地使用了“muxsel”,而正确的属性应该是“allwinner,muxsel”。这时候,将muxsel改为allwinner,muxsel可能解决问题。 另外,检查drive-strength的单位是否正确,是否应该写成<10 10>或者其他形式?不过如果是语法错误,可能数值格式不正确,比如应该用十六进制如<0xa>,但用户写的是十进制10,这可能没问题,但需要确认。 再看错误信息中的具体位置:arch/arm/dts/.board-uboot.dts:128.13-19,即第128行的第13到第19个字符。假设第128行是类似这样的内容: pinctrl-0 = <&pwm0_pin_a>; 那么可能错误出在用符号是否正确,或者节点名是否正确。或者,可能前面的某个节点定义缺少了闭合的括号,导致后续解析错误。 另外,用户是否在配置中重复定义了某个节点,或者节点名称冲突?比如,两个节点都命名为pwm0@0和pwm0@1,可能导致DTS解析错误,因为同一节点名可能重复。 或者,可能在全志的DTS中,PWM节点的pinctrl配置需要特定的格式,比如使用不同的pinctrl命名空间,或者需要将pin配置放在正确的父节点下,比如在pio节点下定义这些pin配置。 总结可能的错误点: 1. 使用了错误的属性名,比如muxsel应改为allwinner,muxsel。 2. 节点命名中的“@”符号使用不当,可能需要修改节点名。 3. 缺少必要的属性或格式错误,例如驱动强度或其他参数。 4. 括号或分号缺失导致结构错误。 用户提供的错误是语法错误,所以应该优先检查DTS的结构是否正确,比如括号是否匹配,属性是否正确,分号是否遗漏。例如,可能在pwm0_pin_a或pwm0_pin_b的定义中,某个属性缺少分号,或者括号没有正确闭合。或者,在muxsel的行中,写成muxsel = 5;而不是使用尖括号<muxsel = <5>;。但用户已经正确使用了尖括号,所以可能不是这个问题。 另一个可能性是,全志的uboot DTS对pinctrl配置的兼容性问题,可能需要使用不同的节点结构或者属性。例如,某些平台要求pin配置节点必须位于某个父节点下,比如&pio下的子节点。 因此,正确的步骤可能是: 1. 检查每个属性是否正确,特别是全志特定的属性名。 2. 确保节点位于正确的父节点下,比如在&pio节点内部定义pin配置。 3. 检查是否有语法错误,如缺少分号或括号不匹配。</think>在全志T113-i的Uboot设备树配置中遇到pwm0报错,主要问题出在**节点命名规范**和**pinctrl属性定义**。以下是分步解析和解决方案: --- ### 错误原因分析 1. **节点命名冲突**: `pwm0@0` 和 `pwm0@1` 的命名方式违反设备树规范,`@`符号后应接寄存器地址或唯一标识符,而非序号。 2. **缺少必要属性**: 全志平台需要明确指定`drive`模式和`pull`状态,`bias-pull-up`的语法需用`pull = <xx>`格式。 3. **pinctrl配置位置**: Pin配置节点应定义在`&pio`(GPIO控制器)节点内,而非直接写在根节点下。 --- ### 修正后的配置方案 ```dts // 将pin配置放在pio节点内 &pio { pwm0_pin_a: pwm0-pin-a { pins = "PD16"; function = "pwm0"; // 功能模式 allwinner,muxsel = <5>; // 全志专用属性名 drive-strength = <10>; // 驱动强度 pull = <1>; // 上拉配置(1=上拉) }; pwm0_pin_b: pwm0-pin-b { pins = "PD16"; allwinner,muxsel = <0>; // 恢复GPIO模式 function = "gpio"; pull = <0>; // 关闭上下拉 input-enable; // 输入模式 }; }; // 配置pwm0控制器 &pwm0 { pinctrl-names = "active", "sleep"; pinctrl-0 = <&pwm0_pin_a>; pinctrl-1 = <&pwm0_pin_b>; status = "okay"; }; ``` --- ### 关键修改说明 1. **规范节点命名**: - 将`pwm0@0`改为`pwm0-pin-a`,避免`@`符号误用。 - 使用全志官方命名风格(如`allwinner,muxsel`)。 2. **善GPIO属性**: - 使用`pull = <1>`代替`bias-pull-up`,`pull = <0>`表示关闭上下拉。 - 输入模式需明确添`input-enable`属性。 3. **pinctrl归属**: -Pin配置移动到`&pio`节点内,符合全志硬件设计。 --- ### 验证建议 1. 检查DTS语法: ```bash dtc -I dts -O dtb -o test.dtb board.dts # 手动编译测试 ``` 2. 确认硬件手册: - 核对`PD16`是否支持PWM0功能。 - 确认`muxsel`值是否匹配目标模式(通常`5`为PWM,`0`为GPIO)。 若仍报错,建议检查全志SDK中同类开发板的DTS参考实现,对比pinctrl配置差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值