您的位置 首页 被动

根据Verilog的SMBus总线控制器的规划与完成

SMBus是一种高效的同步串行总线。通过分析SMBus总线协议,提出了一种运行于基于PCI-Express技术的桥接芯片上的SMBus控制器的设计方案,并且用Verilog语言描述,最后在Altera

SMBus是Intel公司于1995年发布的一种双向两线串行通讯总线标准,具有接口线少、通讯功率高级特色[1]。使用于多μC(microcontroller)通讯体系中,能够满意绝大多数状况下对传输速率、信号安稳性等功用的要求,且相对于并行总线节省了很多的硬件资源。因而多μC通讯体系选用SMBus总线来完成是一种很好的解决方案。

本文提出一种依据VerilogSMBus总线操控器的规划办法。该办法将总线操控器用有限状况机来完成,并将其使用于依据PCI-Express技能的桥接芯片中。经过仿真测验,证明该办法是安稳有用的。

1 SMBus标准剖析

1.1 SMBus总线结构

SMBus由两根总线即串行数据线(SDA)和串行时钟线(SCL)构成。首要使用于主从体系。主器材操控总线操作,包含开端/完毕传输、发送信息并发生SMBus总线体系时钟等。在整个传输过程中,全部的传送都经过主控的SCL来同步。为使总线有“线与”功用,全部器材的SMBus接口都有必要是漏极开路或集电极开路的,并且经过上拉电阻使总线在闲暇状况下为高电平状况。这种结构能使不同速度的器材同步运转。图1是典型的SMBus总线结构图。

1.2 SMBus通讯时序

总线上的全部器材都有一个仅有的地址,且都能够作业在传送或接纳办法。因而,有四种作业形式,即主发送、主接纳、从发送和从接纳。SMBus总线还具有总线裁定功用,确保在同一时刻只要一个主器材在操控总线。

图2是读/写一个字节的时序格局。图中白色块是主器材操控SDA线,灰色块是从器材操控SDA线,SCL线一向都由主器材操控。由图可见,传输由一个开端条件建议,并由一个完毕条件间断。SDA上的数据在SCL高电平时有必要保持安稳,不允许有电平跳变;SDA电平只要在SCL低电平时才干够改动。开端条件和完毕条件是特别的,能够在SCL高电平时改动SDA的电平,在SCL高电平时,开端条件是把SDA从高电平拉到低电平,而完毕条件则把SDA从低电平拉到高电平。开端条件和完毕条件的这种界说办法能够防止电平与传输的数据相混杂。

SMBus协议界说了十二种传输指令格局,其间以读/写一个字节指令格局最为重要。本文所规划的操控器首要用这两种指令格局,所以本文首要剖析这两种格局,其它的与之相似,能够很容易地加以扩展,在此略过。

下面剖析图2的时序:

(1)总线闲暇时,SCL和SDA确保为高电平,等候开端条件。
(2)主控发生开端条件,标明要建议传输。
(3)主控传送一个7位地址和一个写位,指定方针器材和写办法。
(4)方针器材应对。
(5)主控传送一个8位Command Code,指定本次操作类型。
(6)方针器材应对。
(7)假如是write byte,主控直接传送1byte数据;假如是read byte,则要发生restart条件,后跟方针地址和一个读位,然后开端接纳方针数据。
(8)由接纳方应对。
(9)主控宣布完毕条件,完毕整个传输。

在SMBus上传输的每一个数据包包含8个数据位和一个承认位,所以需求9个SCL时钟。主控承认位时开释总线,由从器材来驱动SDA。

1.3 SMBus的总线裁定

一个主控开端一个传输时并不知道是否还有其它主控也想进行传输。当CLK为高电平时将在SDA线上进行裁定。当一个主控发送高电平而有其它的主控发送低电平时,这个主控将失掉总线操控权。

假如一个主控一起具有检测方针器材的功用,那当它失掉总线操控权时,它仍将检测总线上实践传送的地址,以承认把握总线操控的主控进行操作的方针。

2 SMBus操控器规划

本文将SMBus操控器分为两个模块:与SMBus的接口模块和与μC的接口模块。与SMBus的接口模块输出SDA和SCL两个信号;与μC的接口模块输出ADDR[7:0]、DATA[7:0]及若干操控信号。

为了便于μC对操控器的操作,与μC的接口模块中界说了四个8位寄存器,分别是数据寄存器(DR)、地址寄存器(AR)、状况寄存器(SR)和操控寄存器(CR)。DR寄存传送或接纳的数据;AR寄存操控器的本地地址;SR寄存当时操控器的状况;CR寄存操控器装备和操作指令。SR是只读的,其它寄存器都能够被μC进行读写。

与SMBus的接口模块又分红下列几个分模块:SCL看门狗、开端/完毕信号检测、裁定检测、开端/完毕信号生成、SCL生成状况机和主状况机等模块。

看门狗模块用来处理SMBus协议规则的正常SCL和SDA不能够呈现的两种状况:

(1)SCL低电平超越25ms。一旦超越,全部器材有必要重置。在本规划中,一旦检测到SCL下降沿就开端计时,25ms内呈现上升沿则计数器清零。在计数超越时限则把操控寄存器中的RESET方位位。

(2)SCL和SDA高电平超越50ms。一旦超越,全部器材都以为总线处于闲暇状况。这时会将状况寄存器中的BB(Bus Busy)位清零。

SCL生成状况机模块用来操控SCL线。当SMBus处于主控形式时,它就要在传输期间一向操控SCL线。SCL的频率能够从10kHz到100kHz不等,能够经过对体系时钟进行分频得到。程序中界说了一些常量,如HIGH_COUNT、LOW_COUNT、HOLD等,用来设定计数器的上界,这样不只使信号频率满意要求,并且也满意了SMBus对信号的一些电气要求,比方数据保持时刻、开端完毕信号保持时刻等。有了这些量,修正总线频率也十分便利。

从对图2时序的剖析能够看出,操控器只在有限的几个状况之间操控转化,所以在与SMBus接口的模块中选用有限状况机进行规划是适宜的[2]。图3为SMBus操控器的状况机图示及状况之间转化的条件。本示意图是读/写一个字节的状况机,是整个状况机的主体结构,其它指令格局只需在这个状况机上进行简略的修正即可。

下面以从器材为例剖析一下主状况机。处于闲暇状况时,若检测到开端信号,则进入接纳地址状况。收完8位后,前7位和内部地址寄存器前7位进行比较,若相同则承认(拉低SDA),不同则不呼应,由于主控找的不是自己。地址相同承认后开端接纳指令,收完8位后承认。然后对指令解码,依据指令进入相应状况。当数据传送完毕时,承认或被承认转到完毕状况,一个时钟后回来闲暇状况[3]。

其它模块处理一些简略的事情,在此从略。

3 仿真

(1)从器材地址为1110010,主器材写11001101,写一个字节,指令为00000110。
(2)从器材地址为1110010,内部数据为10001100,主器材读一个字节,指令为00000111。
用modelsim6.0进行前仿真,波形图如图4所示。
从仿真成果上看,总线波形满意SMBus总线的时序要求(契合图2的格局)。
用Altera公司的quartus II 4.0归纳后,下载到Altera ep1k30 FPGA芯片上进行测验,测验成果全部功用正常。

4 实践使用

本文规划的SMBus总线操控器使用于PCI-EXPRESS桥接芯片中,框图如图5所示。

在芯片初使化阶段,外围器材需求向桥接芯片的装备表内写入关于外围器材的一些特点(attribute),这样桥接芯片才干正常作业。由于这些信息比较特别,所以用SMBus总线传输比较适宜,而这正是在该芯片中使用SMBus操控器的原因。

5 注意事项

(1)SDA和SCL都界说为双向口,既要接纳数据也要发送数据。在双向口的使用上,要注意读数据时要将双向口置为高阻态。

(2)状况机选用两个always块规划,一个时序always块和一个组合always块。这样写不光易于归纳,并且清楚明晰,便于完成。

本文选用有限状况机的办法,将SMBus操控器分为与SMBus接口的模块和与μC接口的模块两个模块,然后完成SMBus总线操控器的规划。并将其使用于PCIPCI-EXPRESS桥接芯片中,经过软件及在altera公司的 ep1k-30 FPGA芯片上进行仿真测验,成果标明该办法是安稳有用的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/195969.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部