一种基于fpga的多通道i2c控制器的制作方法

文档序号:6372665阅读:269来源:国知局
专利名称:一种基于fpga的多通道i2c控制器的制作方法
技术领域
本发明涉及通信领域,具体涉及一种FPGA(Filed Programmable Gate Array)的多通道I2C (Inter-Integrated Circuit)控制器,特别是使用FPGA实现多个I2C控制器高效传输数据。
背景技术
I2C控制总线作为最成熟的总线标准之一,它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高的特点,在工业控制领域得到广泛的应用。现有技术中,在I2C控制总线上,每个连接在总线上的I2C控制器都可以发起数据传输,经过冲突检测和仲裁防止数据被破坏。当连接在总线上的器件过多时,出现冲突的概率就会升高,器件获取总线仲裁的延时就相应增加,不利于实时性要求较高的情况。

发明内容
本发明的目的在于针对高效低延时的数据传输需求,提供一种基于FPGA的多通道I2C控制器。一种基于FPGA的多通道I2C控制器,包括CPU接口、缓冲区间、仲裁器和I2C控制器,所述缓冲区间包括发送缓冲区间和接收缓冲区间,所述仲裁器包括写状态机和读状态机,所述仲裁器用于对I2C控制器的请求信号进行仲裁,所述缓冲区间用于对I2C控制器写入/读取和CPU写入/读取的数据进行缓冲,所述缓冲区间包括用于数据读取/写入计数的指针管理器。进一步的,还包括CPU总线,外部CPU通过所述CPU总线访问所述多通道I2C控制器的控制寄存器和状态寄存器。进一步的,所述开销字节为4个字节,所述多通道I2C控制器具有共用的发送缓冲区间和接收缓冲区间,所述发送缓冲区间和接收缓冲区间由双端口随机存取器实现,依靠端口仲裁器实现所述多个I2C控制器读写缓冲区间并行操作,缓冲区间的指针由特定的模块进行管理。进一步的,所述指针管理器包括指针寄存器,在外部CPU读取缓冲区间数据时,所述指针寄存器减I,在外部CPU写入数据时,所述指针寄存器加I。进一步的,所述I2C控制器接收到数据则向仲裁器发出写请求,所述仲裁器中的写状态机查询到写请求后则查询与发出请求的控制器对应的接收缓冲区间的状态寄存器,如果状态寄存器中标识区间非满,则将I2C控制器发出的数据写入对应缓冲区间间,并且发出一个脉冲指示要求接收缓冲区间的指针管理器将对应指针加;否则仲裁器的写状态机重新进入到轮询状态,指针不变,且I2C控制器中的数据将会丢失,当I2C向仲裁器发出读请求,仲裁器中的读状态机检测到读请求后则查询与发出请求的I2C控制器对应的发送缓冲区间的状态寄存器,如果状态寄存器中标识区间非空,则将指针当前指向的数据读出,并且发出一个脉冲信号要求接收缓冲区间的指针管理器将对应指针减I;否则仲裁器的读状态机重新进入到轮询状态,指针不变,I2C控制器读出数据将是上一次读出的结果。进一步的,当I2C控制器从总线上每接收到一个完整的数据就产生一个同步脉冲请求信号并输出到仲裁器中;在结束一次连续数据接收后,I2C控制器产生一个中断到CPU中,在I2C控制器发起传输到仲裁器进行仲裁后,所述I2C控制器读取对应区间的状态寄存器,判断区间有效数据的数目,并自动将这些有效数据连续读出并传输到I2C总线上。本发明相较于现有技术,能够实现以较高的资源利用率实现更大的传输带宽和更低延时的数据传输与处理。本发明比单通道 的I2C控制器提供更大的带宽,有效降低I2C总线出现仲裁冲突的次数,提高实时性。本发明使用FPGA单块Block RAM作为缓冲区间,能够最大化地利用FPGA的RAM资源,有效降低成本,具有较高的资源利用率,能够实现更大的传输带宽和更低延时的数据传输与处理。另外,本发明具有可调整的CPU总线,能够作为各种处理器外设,应用灵活


图I是本发明一种基于FPGA的多通道I2C控制器一个实施方式示意图;图2是图I所示缓冲区划分示意图;图3是仲裁器轮询状态机示意图;图4是指针管理器的组成示意图。
具体实施例方式下面结合附图和具体实施方式
对本发明做进一步详细说明。要提高在I2C控制总线上数据传输的实时性主要有两种方法,第一种是提高I2C控制总线的传输速率,但一般I2C控制器的工作速率在出厂后就设定了上限。第二种是将彼此不需要通信的控制器连接到不同的I2C总线上,不同的I2C总线由同一处理器进行管理。然而上述第二种方法中的处理器对多I2C总线管理的需求较高,要求较高的I2C并发操作和数据读写效率。本发明基于FPGA的多通道I2C控制器具有I2C控制器读写端口仲裁和缓冲区间指针管理。请同时参考图1-4,本发明一个实施方式包括CPU接口 11、缓冲区间12、仲裁器13和I2C控制器14。所述缓冲区间包括发送缓冲区间121和接收缓冲区间122。所述仲裁器13包括写状态机和读状态机。所述仲裁器13用于对I2C控制器14的请求信号进行仲裁。所述缓冲区间12用于对I2C控制器写入/读取和CPU写入/读取的数据进行缓冲。所述缓冲区间12包括用于数据读取/写入计数的指针管理器,所述指针管理器包括指针寄存器,在外部CPU读取缓冲区间12数据时,所述指针寄存器减I,在外部CPU写入数据时,所述指针寄存器加I。如图I所示,所述I2C控制器14与仲裁器13直接连接。当所述I2C控制器14接收到数据则向仲裁器13发出写请求,所述仲裁器13中的写状态机查询到写请求后则查询与发出请求的控制器对应的接收缓冲区间的状态寄存器,如果状态寄存器中标识区间非满,则将I2C控制器14发出的数据写入对应缓冲区间间,并且发出一个脉冲指示要求接收缓冲区间的指针管理器将对应指针加I ;否则仲裁器13的写状态机重新进入到轮询状态,指针不变,且I2C控制器14中的数据将会丢失。同样,当I2C向仲裁器发出读请求,仲裁器13中的读状态机检测到读请求后则查询与发出请求的I2C控制器14对应的发送缓冲区间的状态寄存器,如果状态寄存器中标识区间非空,则将指针当前指向的数据读出,并且发出一个脉冲信号要求接收缓冲区间的指针管理器I将对应指针减I ;否则仲裁器的读状态机重新进入到轮询状态,指针不变,I2C控制器读出数据将是上一次读出的结果。需要说明的是,FPGA中有两种RAM资源,第一种称为分布式RAM,其分布在整块FPGA中,数量相对较少,适用于构造容量小的FIFO(先进先出)或其他存储器;第二种称为Block RAM,是连续分布的RAM资源,适用于构造大容量的FIFO或其他存储器。本发明为了最大效率地利用RAM资源,采用Block RAM构造大容量双端口 RAM的方法。将Block RAM构造成双口 RAM后,对双口 RAM进行划分,如将参考图2,将1024字节的双口 RAM等分为16个区间,每个区间的大小为64字节,在双端口 RAM外部定义16个寄存器,用于缓冲区间12的指针,当在系统初始化时,需要将各个指针寄存器的值指向对应区间起始地址,如第一个指针寄存器初始化后的值为0x000,第二个指针初始化为0x040,如此类推。事实上,本发明并不限定双口 RAM的容量和区间大小,上述实施方式的RAM大小和区间大小只是一个应用 举例。指针管理器完成对指针的自加或自减操作,还需要保证指针不能越界,就是指针不能指向不属于相应区间外的地址,每当指针已经指向上界(下界)时,则指针再次自加1(自减I)后,指针指向下界(上界)。同时指针管理器读取区间状态寄存器的值,判断区间是否已写满或读空,从而决定指针是否加I或减I。参考图3,端口仲裁器中使用两个状态机分别轮询写请求与读请求信号。在本发明基于FPGA的多通道I2C控制器的其他实施方式中,所述I2C控制器的工作状态由CPU直接控制。所述I2C控制器实现标准的I2C总线时序,包括实现主端口和从端口功能。当I2C控制器从总线上每接收到一个完整的数据就产生一个同步脉冲请求信号,输出到仲裁器中;在结束一次连续数据接收后,I2C控制产生一个中断到CPU中。在I2C控制器发起传输到仲裁器进行仲裁后,其可以读取对应区间的状态寄存器,判断区间有效数据的数目,并自动将这些有效数据连续读出并传输到I2C总线上。在上述实施方式中,所述I2C控制器收发数据的工作过程如下外部CPU通过CPU总线将数据写入缓冲某一个缓冲区间12,所述缓冲区间12的指针寄存器随着每个数据写入都自加1,所述状态寄存器记录写入的个数;完成数据写入后,(PU发出指令启动I2C控制器14传输,I2C控制器14依据I2C总线协议向仲裁器进行仲裁,获取仲裁后则开始读取区间状态寄存器,依据状态寄存器的值连续读取缓冲区间中的缓存数据,每读取一个数据,区间的指针寄存器自减1,直至全部数据读取完毕,这时区间状态寄存器的值为O ;—个I2C控制器14在传输数据的过程中,CPU可以操作另一个I2C控制器14,不需要等待;所述I2C控制器14从总线上收取到数据后,则向对应缓冲区间发送请求脉冲信号,端口仲裁器查询到请求脉冲后将控制器收取到的数据写入对应区间,区间指针自加1,同时区间状态寄存器记录存入数据的个数;所述I2C控制器14完成一次连续的数据接收后,向CPU发出中断,要求CPU读取缓冲区间的数据。在本发明其他实施方式中,还包括CPU总线,外部CPU通过CPU总线可以访问多通道I2C控制器的控制寄存器和状态寄存器,以达到控制和查询状态的目的。外部CPU向I2C总线发起数据传输或者从I2C总线接收数据时,通过CPU总线模块转换后通过RAM总线读/写接收缓冲区间或发送缓冲区间的数据。所述缓冲区间包括双端口 RAM,其具有两个读写端口,每个端口都可以独立操作,其中CPU占用一个读写端口,端口仲裁器占用另外一个读写端口。双口 RAM读写地址由专门的指针寄存器来管理,双口 RAM划分的区间数与指针寄存器数目相对应,同时每个区间具有一个状态寄存器,记录相应区间的存储状况。当CPU向缓冲区间某一个缓冲区间12写入一个数据时,则相应的指针寄存器自加1,区间状态寄存器也相应加1,当区间状态寄存器达到最大值时,发送缓冲区间121满指示信号,不允许CPU继续写入数据。当CPU向缓冲区间12读取一个数据时,则相应的指针寄存器自减1,区间状态寄存器也相应减1,当区间状态寄存器达到O时,输出区间空指示信号,不允许CPU继续读取数据。为了实现多个I2C控制器14可以同时访问缓冲区间,所述仲裁器13以大于N倍 (N为控制器的数目)I2C数据总线速率的速率轮询各个I2C控制器的请求信号,如有扫描到请求信号则立刻进行读或写操作,完成后则继续进行轮询。相较于现有技术,本发明基于FPGA的多通道I2C控制器比单通道的I2C控制器提供更大的带宽,有效降低I2C总线出现仲裁冲突的次数,提高实时性。本发明使用FPGA单块Block RAM作为缓冲区间,能够最大化地利用FPGA的RAM资源,有效降低成本,具有较高的资源利用率,能够实现更大的传输带宽和更低延时的数据传输与处理。另外,本发明具有可调整的CPU总线,能够作为各种处理器外设,应用灵活。以上实施方式仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施方式对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施方式技术方案的精神和范围。
权利要求
1.一种基于FPGA的多通道I2C控制器,其特征在于,包括CPU接口、缓冲区间、仲裁器和I2C控制器,所述缓冲区间包括发送缓冲区间和接收缓冲区间,所述仲裁器包括写状态机和读状态机,所述仲裁器用于对I2C控制器的请求信号进行仲裁,所述缓冲区间用于对I2C控制器写入/读取和CPU写入/读取的数据进行缓冲,所述缓冲区间包括用于数据读取/写入计数的指针管理器。
2.根据权利要求I所述的基于FPGA的多通道I2C控制器,其特征在于,还包括CPU总线,外部CPU通过所述CPU总线访问所述多通道I2C控制器的控制寄存器和状态寄存器。
3.根据权利要求2所述的基于FPGA的多通道I2C控制器,其特征在于,所述多通道I2C控制器具有共用的发送缓冲区间和接收缓冲区间,所述发送缓冲区间和接收缓冲区间由双端口随机存取器实现,依靠端口仲裁器实现所述多个I2C控制器读写缓冲区间并行操作,缓冲区间的指针由特定的模块进行管理。
4.根据权利要求3所述的基于FPGA的多通道I2C控制器,其特征在于,所述指针管理器包括指针寄存器,在外部CPU读取缓冲区间数据时,所述指针寄存器减I,在外部CPU写入数据时,所述指针寄存器加I。
5.根据权利要求4所述的基于FPGA的多通道I2C控制器,其特征在于,所述I2C控制器接收到数据则向仲裁器发出写请求,所述仲裁器中的写状态机查询到写请求后则查询与发出请求的控制器对应的接收缓冲区间的状态寄存器,如果状态寄存器中标识区间非满,则将I2C控制器发出的数据写入对应缓冲区间间,并且发出一个脉冲指示要求接收缓冲区间的指针管理器将对应指针加;否则仲裁器的写状态机重新进入到轮询状态,指针不变,且I2C控制器中的数据将会丢失,当I2C向仲裁器发出读请求,仲裁器中的读状态机检测到读请求后则查询与发出请求的I2C控制器对应的发送缓冲区间的状态寄存器,如果状态寄存器中标识区间非空,则将指针当前指向的数据读出,并且发出一个脉冲信号要求接收缓冲区间的指针管理器将对应指针减I ;否则仲裁器的读状态机重新进入到轮询状态,指针不变,I2C控制器读出数据将是上一次读出的结果。
6.根据权利要求5所述的基于FPGA的多通道I2C控制器,其特征在于,当I2C控制器从总线上每接收到一个完整的数据就产生一个同步脉冲请求信号并输出到仲裁器中;在结束一次连续数据接收后,I2C控制器产生一个中断到CPU中,在I2C控制器发起传输到仲裁器进行仲裁后,所述I2C控制器读取对应区间的状态寄存器,判断区间有效数据的数目,并自动将这些有效数据连续读出并传输到I2C总线上。
全文摘要
本发明公开了一种基于FPGA的多通道I2C控制器,包括CPU接口、缓冲区间、仲裁器和I2C控制器,所述缓冲区间包括发送缓冲区间和接收缓冲区间,所述仲裁器包括写状态机和读状态机,所述仲裁器用于对I2C控制器的请求信号进行仲裁,所述缓冲区间用于对I2C控制器写入/读取和CPU写入/读取的数据进行缓冲,所述缓冲区间包括用于数据读取/写入计数的指针管理器。
文档编号G06F13/26GK102841869SQ20121022767
公开日2012年12月26日 申请日期2012年7月3日 优先权日2012年7月3日
发明者高胜, 刘增华 申请人:深圳市邦彦信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1