VHDL设计双向总线缓冲器最后的仿真图解释
需要看看你的仿真图的初始设置,可能是你设置的双端总线为未知状态,或者设置的双端总线的状态与程序中的输出不一致。
双向总线缓冲器程序
数据缓冲器):当数据在具有不同传输能力的元件之间通过时,用来暂存这些数据的存储器。例如,电话线、计算机和串口、计算机的数据总线等,其传输速度均不相同,缓冲器在每种部件之间平衡数据流,而允许它们以一最合适的速率发送和接收数据。缓冲器多用在总线上,起延缓作用,或来提高驱动能力,隔离前后级电路。缓冲期的常见型号有四总线缓冲器74f125和八总线缓冲期(通常74f244)
为什么要在i2c总线电路设计中使用总线缓冲器
你说的加总线缓冲器,是个别的,并不是一定要加的。通常是不加的。你是从哪里听说的要加的? 一个不确定的答案,是没有为什么的。 假如,在总线上挂有许多个从器件,为了提高总线的驱动能力,才需要加缓冲器的。可是一般情况下,总线也不可能挂许多的器件的。
这段时间学习了i2c总线(at24c02)、spi(hd7279)还有正在学习的spi的时钟芯片ds130,感觉有几点认识: 1,spi总线就是三根。 片选cs一根,这个由各自芯片决定,有高平或者低平的。这个其实是必须的,因为只有片选到了才能找到。和我用的总线74hc573(或者74ls373)锁存器一个道理。如果片选成功,就上第二根线scl,这个上面就是时钟,这个时钟完全可以模拟,当然时钟上面是有时序的,用程序延时把时序调整好,模拟就没问题。最后就是i/o口,如果是三线的spi,那么这根线就是数据双向传输的,如果是四根的spi,这个我现在还没用过,就是一方入一方出,不过我觉得完全没必要,一根线数据来去就挺好。由于是一根或者两根线,那么数据就靠串行来去。 2,i2c总线就是两根。 就是一根scl时钟,另一个根sda传数据,就两根,没有了i2c的那个片选cs端。因此在这个上面传输数据,必须靠i2c这两根唯二的的线表示启动、传输和停止等。电平就只有高低了,那么还能利用什么呢,就是上升沿和下降沿,总之,在这么两个线上其实好好多组合。 第一类,电平组合类scl和sda的配合四种:高平+高平、高平+低平、低平+高平、低平+低平; 第二类,电平sckl和边沿sda组合类:高平+上升沿、高平+下降沿、地平+上升沿、低平+下降沿。可以看出就这么两根线上可以利用的东西也不少,用这些组合就可以表示起动、停止等等,甚至根本就用不了这么多。退一万步讲,即使全部都用了,还可以串行继续组合么,还可以先sda再scl么,总之两根线都能被挖掘这么深,我不得不佩服那些飞利浦工程师们的创造力。 从上面就明白了,如何表示所选择的芯片的启动,就靠这些组合。例如:scl上高平上sda上的上升沿或者下降沿,证明主机发送了芯片的启动要求。还有一个问题就是,如果i2c上挂了多个i2c器件,那么怎么知道启动那一个呢,因为它们又没有spi的片选cs那个管脚,这个管脚可以通过类似三八译码器那样找到类型相同但是不同的芯片,i2c上又没有怎么办呢?i2c的器件上有几个管脚接地或者挂高(at24c02就是,叫可编程管脚)就是地址,还有就是器件厂商也规定了i2c上发送的第一个字节就是芯片地址,前四个位0000~11111,这个最多可以表示16个不同类型的i2c器件(实际i2c器件根本没有这么多,而且0000和1111不能用,所以只剩下14个了。这个国际统一的规定,就是i2c的协议,《全国大学生电子设计竞赛——单片机应用技能》p171有说明,“i2c总线委员会”的规定)。 剩下的3个位就是器件的地址,这个地址和i2c上发的地址对上了,就找到了,剩下最后一位是读写。然后在i2c上的两根线上写数据,先写芯片地址,再写找到的芯片内部的地址,最后是读或者是写这个地址,而且每发送一个字节必须从机给个应答,也就是链接的i2c器件给主机(一般是单片机或者是i2c接口)发送回来一个应答,而且应答是必须是收一个字节接一个应答那么交替。因此从这点上看来,i2c协议实现起来其实挺复杂的,就为了少一根线,做了多种协议,还有就是程序比spi变得复杂。更重要的一点是,i2c总线上所接的器件,一种i2c最多可以接8个(因为控制字前四位是种类,最后一位是读写,只有三位留给地址了),如果不同种类的i2c都算进去,总共i2c上接的器件就是14*8=112个,尽管已经很多了,但至少说明了i2c总线上能挂的器件是有限的。 3、但是和spi比较一下就会发现,尽管i2c复杂一点,器件有限,但是优点还是非常多的,因为三线spi总线上只有sck和i/o才是真正的总线,可以公用,但是cs片选信号可是一对一的,如果spi总线上接112个spi器件,sck和i/o总线可以共用,但是112的cs片选如何处理,难道用cpld扩展逻辑门门么,显然是不现实的。而且各个器件的cs片选有的是高有的是低,也是个麻烦。这点看来,spi编程比i2c尽管简单,但是硬件麻烦,i2c软件复杂,但是硬件会简单。总体来说还是i2c有更多好处,因为软件总比硬件问题好处理。 4、共同的问题,如果在一些简单的单片机例如at89s51上模拟i2c或者spi总线的时候,时序中高低电平长短和晶振有关,因此当换用不同的晶振或者单片机时候,要改变时序中控制高低电平的延时因子。
