APP下载

一种基于PMBus 协议的总线控制器的设计

2020-05-11叶琳娜贺雅娟张子骥甄少伟

微处理机 2020年2期
关键词:寄存器字节命令

叶琳娜,贺雅娟,张子骥,张 波,甄少伟

(电子科技大学电子科学与工程学院,成都610054)

1 引 言

随着电源管理技术的发展,现有的电源芯片已经难以满足高性能嵌入式系统的供电需求。嵌入式系统的自适应电源管理方案需要在系统的运行过程中根据系统的运行状况实时改变电源的输出电压和上电次序,然而这些功能在传统的DC/DC 电源管理方案中是很难实现的。在这种背景下,数字可编程电源成为了最佳的选择。而PMBus 的出现为电源芯片内各个关键模块之间的通信提供了一个标准。同时,PMBus 总线推动了数字电源技术的发展,通过PMBus 总线可以在工程中方便的对电源芯片进行在线编程和配置。故此对PMBus 总线控制器的设计原理和实现过程进行了介绍。

2 数字电源及相关原理

2.1 数字电源概述

“数字电源”定义为数字控制的电源产品,可提供配置和监控功能,甚至扩展到全数字环路控制。它包括两个不同的技术领域。其一为“数字控制”,即电源开关的实时、逐周期控制;另一个是“数字电源管理”。图1 显示了具有PMBus 协议的多POL 电源管理系统[1],该系统基于物理传输层SMBus 协议。在系统中,每个POL 都在其自己的数字环路下进行控制,系统主机通过SMBus 管理多个POL。数字电源管理可包括开关频率调整,电压裕度监测,电压、电流、温度监控和保护等功能。

图1 总线概念图

2.2 PMBus 总线概述

PMBus 总线是数字电源转换器的电源管理总线标准,于2004 年由电源和半导体公司联合开发,用于与DC / DC 转换器进行通信,之后扩展专用的自适应电压调节(AVS)总线,用于控制处理器电压。总线包括一组用于控制和监控连接到总线的电源转换器的命令。例如,可以配置变化的输出电压的上升和下降时间。这已经成为工业中用于配置功率转换器的标准总线。通过为系统实现PMBus,可以最小化组件数量和功耗,以及在正常操作期间调节功率,使得实现系统级省电方案变得容易[2-3]。

该协议基于由广泛使用的Inter-IC 总线(I2C总线)扩展而来的物理传输层系统管理总线(SMBus总线)[4-6],为了给功率控制提供更多功能,PMBus 成为电源管理系统中总线的绝佳选择。PMBus 具有双向数据线(SDA)和双向时钟线(SCL)。双向数据线使得在进行任何数据传输的情况下,从机都会确认数据,可以发送最大255 字节的较大数据块。

自适应电压调节总线(AVSBus)是PMBus 的补充,它提供负载点(POL)电压控制器和负载之间的点对点链路。其主要应用是静态或动态控制处理器电压,以提高能效。总线使用双线接口(TWI)和类似于PMBus 的协议。

3 PMBus 总线控制器设计

基于PMBus 协议,在此设计一种兼容I2C 总线的控制器,该控制器连接串行PMBus 总线,由状态机控制,满足PMBus 协议的时序要求,配置为从机模式,从PMBus 总线收发数据以及对主控制器做出相应的中断和响应。采用Verilog HDL 语言进行实现,以便将该控制器易于与基于AMBA 总线的CPU集成,拓展其应用范围[7]。

总线控制器整体系统框架如图2 所示。

图2 总线控制器系统图

3.1 设计框架

整个设计包含从机模式的时序模块、功能模块、控制模块、信号产生模块,以及相应的顶层互连模块。从机的时序模块用于完成与SMBus 相同的地址检测,从MSB 到LSB 接收命令和传输高低字节数据,以及SMBALERT 中断。从机的功能模块处理传输过程中可能发生的故障,如PMBus 从机太忙,无法接受并处理通过总线发送给它的命令,接收到的命令和高低字节无效,读或写太多字节或太少字节,过温、过压、过流的故障处理等。主机的控制模块状态机向从控制器发送起始帧、停止帧、地址、数据及相应的中断控制信号。主机的信号产生模块设计所需的时钟及数据。

3.2 PMBus 从机时序模块

PMBus 从机时序模块状态图如图3 所示。检查时钟和数据是否有表示相应上升沿和下降沿的电平、开始及停止条件,检测到开始帧时从机置于忙碌状态,时钟下降沿开始计数。从机产生中断时由于具有警报相应地址(ARA = 7'b0001100),中断保持至主机向其发送ARA 地址时响应清除。

图3 时序模块状态图

3.3 PMBus 从机功能模块

该模块根据PMBus 协议中指定的相关命令从主机中读取电压、电流、温度等参数,实现了从机忙碌状态响应,检查接收命令及高低字节的有效性,检查读写位数过多或过少的功能,对过压、过流和过温设置和清除警告位。所支持的PMBUS 命令如表1所示。

首先,如果数据传输正在进行中,则输出电压、输出电流、温度、输入电压值保持不变,否则更新数据。检查命令是否有效,如果收到开始或停止信号,则内部命令无效。如果收到地址非ARA 地址且收到命令非表2 中命令,则内部命令有效。检查高位数据字节是否有效。如果收到VOUT_COMMAND 命令且高位数据字节值大于VOUT_MAX,则内部高位数据字节有效,如果收到开始或结束信号,则内部高位数据字节有效寄存器无效。最后检查低位数据字节是否有效,如果收到SMBALERT_MASK 命令且收到的低位数据字节值不为STATUS_VOUT,STATUS0_IOUT,STATUS_ INPUT,STATUS_TEMPE RATURE,STATUS_CML 以及1'b1,则内部低位数据字节有效,如果收到开始或结束信号,则内部低位数据字节无效。

表1 支持的PMBUS 命令

如果收到主控制器写的数据字节过多,则表示太多字节被写,太多字节被读保持不变。如果主控制器读的字节过多,则太多字节被写保持不变,太多字节被读。如果收到开始或结束信号,则无太多字节被写或太多字节被读。检查被送的字节是否太少。如果在收到地址、命令、低位字节及高位字节的过程中停止或仲裁无效或无重复开始就写字节,则太少字节被写。

如果收到开始或结束信号,则太少字节被写无效。检查主控制器是否无重复开始就读字节,如果收到地址非ARA 地址后正在传输数据且无重复开始就读字节,则无重复开始就读字节有效。如果收到开始或结束信号,则无效,其他情况状态位保持不变。设置通信错误状态和清除输出电压过压状态。在以下两种情况清除输出电压过压状态,第一种,收到结束信号,且收到STATUS_VOUT 命令,低位字节的第7 位为1'b1,通信有效,地址的第0 位为1'b1。第二种,收到结束信号,且收到CLEAR_FAULTS 命令,收到地址非ARA 地址,且通信有效。其他情况不清除。

其次设置输出电压过压故障位,该位将进入STATUS_VOUT 的第7 位。如果输出电压过压且不清除,则故障位有效,如果清除位有效,则故障位无效。然后用断言SMBALERT 掩模输出电压过压。如果收到结束信号和SMBALERT_MASK 命令,低位数据字节为STATUS_VOUT,且通信有效,则设高位数据字节第7 位掩模输出电压过压。存储STATUS_VOUT 的掩码字节。如果收到SMBALERT_MASK 命令且收到低位字节数据为STATUS_VOUT,则将高位字节数据设为存储STATUS_VOUT 的掩码字节。接着清除输出电流过流状态。在以下两种情况清除输出电流过流状态,第一种,收到结束信号,且收到STATUS_IOUT 命令,低位字节的第7 位为1,通信有效,地址的第0 位不为1'b1。第二种,收到结束信号,且收到CLEAR_FAULTS 命令,收到地址非ARA 地址,且通信有效。输出电流过流故障位、输入电压欠压故障位、输入过温故障位与此定义方法类似。

设置命令有效信号状态寄存器。如果内部命令有效且清除内部命令无效,则命令有效。如果清除内部命令有效,则命令无效。其他情况状态保持不变。数据有效信号状态寄存器、其他错误信号状态寄存器的设置方法与此类似。设置命令有效警报掩模寄存器。如果收到结束信号,且收到SMBALERT_MASK 命令,且低位数据字节为STATUS_CML,则命令有效警报掩模寄存器设为高位数据字节的第7位。其他情况状态保持不变。数据有效警报掩模寄存器、其他错误警告掩模寄存器、存储STATUS_CML掩模字节的方法与此类似。

如果检测通信/数据错误位状态寄存器的上升沿/检测输出电压过压故障信号的上升沿/检测输出电流过流故障信号的上升沿/检测输入电压欠压故障信号的上升沿/检测输入过温故障信号的上升沿有效,且清除中断信号无效,则中断信号有效,若清除中断信号有效,则中断信号无效,其他情况中断信号保持不变。设置状态字节和STATUS_OTHER 位。判断如果收到停止信号且收到VOUT_COMMAND 命令且通信有效,若高位数据字节值小于VOUT_MAX,则将高位数据字节值赋于内部存储VID 码的寄存器,否则该寄存器保持原值。

最后,查看写到主机的命令。如果命令有效或无重复开始就读字节状态有效且其他错误信号以前的值有效,则写内部低位数据字节的寄存器为8'd255,写内部高位数据字节的寄存器为8'd255。否则,当处于读命令状态时,如果收到VOUT_COMMAND 命令,写内部低位数据字节的寄存器为8'd0,写内部高位数据字节的寄存器为内部存储VID 码的寄存器。如果收到READ_VOUT 命令,写内部低位数据字节的寄存器为8'd0,写内部高位数据字节的寄存器为输出电压值。输出电流值、温度值、输入电压值、状态字节的存储方法与此类似。 如果收到STATUS_VOUT 命令,写内部低位数据字节的寄存器为输出电压过压故障位,写内部高位数据字节的寄存器为8'd255。输出电流过流故障位、输入电压欠压故障位、输入过温故障位、命令有效信号状态,数据有效信号状态寄、其他错误信号状态、STATUS_OTHER 信号的存储方法类似。如果收到SMBALERT_MASK 命令,高位数据字节为STATUS_VOUT,则写内部低位数据字节的寄存器为8'd1,写内部高位数据字节的寄存器为存储STATUS_VOUT的掩码字节。其他命令如STATUS_IOUT、STATUS_IOUT、STATUS_INPUT、STATUS_VIN 等的存储方式与STATUS_VOUT 类似。

4 仿真测试平台及版图设计

为确保PMBus 总线控制器功能和时序的正确性,通过Synopsys 公司的EDA 仿真平台对从控制器的设计进行仿真验证和相关功能分析。在验证从控制器的功能时,设计搭建主控制器发送数据。一共有两次中断被触发,第一次读VOUT=16'hfc(252d),第二次读TEMP=16'h7f(127d),第三个触发中断,用ARA=00011000 的方式清除,如图4 所示。清除后读一组VIN=240d,应读出16'hf0,然后再触发一次中断,再用CLEAR_FAULTS 清除,cmd 对应8'h03,如图5 所示,即表示已清除。

图4 触发中断并用ARA 的方式清除中断

图5 再次触发中断、以CLEAR_FAULTS 命令清除中断

为验证是否已经清除,重读一组VOUT=16'hfc(252d),然后进入default,一直读VIN=16'hf0(240d)。

最终,采用SMIC 0.18μm 的工艺平台进行数字集成电路物理设计,完成6 层金属布局布线,大小为200μm×200μm,并通过后仿验证功能的正确性[8-9]。完成的版图如图6 所示。

图6 PMBus 总线控制器版图

5 结 束 语

基于PMBus 协议完成了一种从控制器的设计及验证。采用模块化设计,便于功能拓展与集成,编写的Verilog HDL 代码是可综合的,且与AMBA 总线兼容。控制器实现了PMBus 协议的基本功能,符合协议的时序要求,节省了硬件资源,为数字电源提供良好的拓展空间。

猜你喜欢

寄存器字节命令
只听主人的命令
No.8 字节跳动将推出独立出口电商APP
Lite寄存器模型的设计与实现
安装和启动Docker
No.10 “字节跳动手机”要来了?
二进制翻译中动静结合的寄存器分配优化方法
轻量级分组密码Midori64的积分攻击
移防命令下达后
移位寄存器及算术运算应用
解析Windows10的内部命令