阿须网摘
TTL和CMOS
阿须 发表于 2009-03-12 16:02:42
FPGA器件选型(转载)
阿须 发表于 2009-01-07 14:49:57
现场可编程门阵列FPGA有集成度高、体积小、灵活可重配置、实验风险小等优点,在复杂数字系统中得到了越来越广泛的应用。
随着FPGA技术的成熟和不断飞速发展,数字电路的设计只需一片FPGA器件、一些存储设备和一些电气接口匹配电路的解决方案已成为主流选择方案。根据多年的应用经验,相关数字系统中,FPGA器件的选型非常重要,不合理的选型会导致一系列的后续设计问题,有时甚至会使设计失败;合理的选型不光可以避免设计问题,而且可以提高系统的性价比,延长产品的生命周期,获得预想不到的经济效果。
经过深入研究,总结了以下选型问题:器件的供货渠道和开发工具的支持;器件的硬件资源;器件的电气接口标准;器件的速度等级;器件的温度等级;器件的封装;器件的价格。
2 FPGA器件选型应该考虑的问题
2.1 器件的供货渠道和开发工具的支持
目前,主要的FPGA供应商有Xllinx公司、Altera公司、Lattic公司和Actel公司[1],其中Xllinx公司和Altera公司的规模最大,能提供器件的种类非常丰富[2,3]。FPGA的发展速度非常快,很多型
号的FPGA器件已不是主流产品,为了提高产品的生命周期,最好在货源比较足的主流器件中选型。目前,Altera公司的主流器件有CycloneⅡ,CycloneⅢ,StatixⅡ,StatixⅡGX,StatixⅢ和StatixⅢGX等系列,其中CycloneⅡ和CycloneⅢ系列主要应用于逻辑设计和简单的数字信号处理,StatixⅡ和StatixⅢ系列主要应用于高速复杂数字信号处理和高速逻辑设计,StatixⅡGX和StatixⅢGX系列主要应用于通讯领域[1];Xllinx公司的主流器件有Spartan-3E,Spartan-3A,Virtex-4LX,Virtex-4 SX,Virtex-4 FX,Virtex-5 LX,Virtex-5SX和Virtex-5 FX等系列,其中Spartan-3E和Spartan-3A系列主要应用于逻辑设计和简单数字信号处理,Vir-tex-4 LX和Virtex-5 LX系列主要应用于高速逻辑设计,Virtex-4 SX和Virtex-5 SX系列主要应用于高速复杂数字信号处理,Virtex-4 FX和Virtex-5 FX系列主要应用于嵌入式系统[3]。
两家公司都提供了优秀的开发工具。Xllinx公司有集成开发环境ISE,Altera公司有集成开发环境QuartusⅡ,两个集成开发环境支持本公司所有器件的设计和开发[2,3]。该集成开发环境不仅功能强大、界面友好,而且有很多第三方合作伙伴提供相应的技术支持,能使器件获得更高的性能。因此,如果没有特殊应用要求,建议最好在这两家公司进行器件选型。
2.2器件的硬件资源
硬件资源是器件选型的重要标准。硬件资源包括逻辑资源、I/O资源、布线资源、DSP资源、存储器资源、锁相环资源、串行收发器资源和硬核微处理器资源等。
逻辑资源和I/O资源的需求是每位设计人员最关心的问题,一般都会考虑到,可是,过度消耗I/O资源和布线资源可能产生的问题却很容易被忽视。主流FPGA器件中,逻辑资源都比较丰富,一般可以满足应用需求。可是,在比较复杂的数字系统中,过度I/O资源的消耗可能会导致2个问题[2,3]:FPGA负荷过重,器件发热严重,严重影响器件的速度性能、工作稳定性和寿命,设计中要考虑器件的散热问题;局部布线资源不足,电路的运行速度明显降低,有时甚至使设计不能适配器件,设计失败。根据本人的应用经验:
(1)在做复杂数字信号处理时,位数比较高的乘法器和除法器对全局布线资源的消耗量比较大;
(2)在做逻辑设计时,双向I/O口对局部布线资源的消耗量比较大;
(3)在利用存储器资源设计滤波器的应用场合,局部布线资源的消耗量比较大;
(4)在电气接口标准比较多,而逻辑比较复杂的应用场合,局部布线资源的消耗量比较大。据Altera公司推荐,设计中最好能预留30%以上的逻辑资源、20%以上的I/O资源和30%以上的布线资源[1]。而且,从两家公司器件的结构看,Xllinx公司器件的可编程逻辑块相对于Al-tera公司要复杂一些,使用起来要灵活一些。在一些复杂的、控制信号比较多的设计中,适合选用Xllinx公司的产品。不过Xllinx公司器件布线资源是分段的,器件延时的可预测性要差一些。在这些应用场合,最好首先做设计仿真,对设计?肖耗的布线资源,尤其是很容易被忽视的局部布线资源,要有一个比较充分的了解,然后在考虑器件选型,是比较理想的。
在做乘法运算比较多而且对速度性能要求比较高的应用场合,最好能选用带DSP资源比较多的器件,例如,Altera公司的StatixⅡ和StatixⅢ系列[2],Xllinx公司的Virtex-4 SX和Virtex-5 SX系列等[3]。
器件中的存储器资源主要有2种用途[2,3]:作高性能滤波器;实现小容量高速数据缓存。这是一种比较宝贵的硬件资源,一般器件中的存储器资源都不太多,存储器资源较多的器件逻辑容量也非常大,用得也比较少,供货渠道也不多,器件价格也非常高。因此,在器件选型时,最好不要片面追求设计的集成度而选用这种器件,可以考虑选用低端器件+外扩存储器的设计方案。
为什么大学毕业生工作难找?(转载)
千枫寒云 发表于 2008-01-01 14:52:00
对照龙芯困境 谈日本CPU的发展道路(转载)
千枫寒云 发表于 2008-01-01 14:50:07
常用电容器
千枫寒云 发表于 2007-12-11 22:28:37
系统管理总线(SMBus)
千枫寒云 发表于 2007-12-10 20:10:10
Intel®制定了SMBus标准用于低速通信,SMBus 2线接口与I²C接口非常相似。SMBus也使用一条数据线(SMBDATA)和一条时钟线(SMBCLK)进行通信。SMBCLK和SMBDATA也需 要上拉电阻,3V供电时上拉电阻大于8.5kΩ,5V供电时上拉电阻大于14kΩ。SMBus工作电压范围在3V和5V之间,大于2.1V为高电平,低于 0.8V为低电平。
I²C接口和SMBus接口的最主要区别是最高/最低时钟速率,因为I²C总线为被动传输总线,不存在总线超时问题,速率可低至“静止”。SMBus接口 则存在总线超时问题。如果时钟信号拉低之后的时间大于超时周期(最长为35ms)时,从机复位接口,认为发生总线超时。SMBus的超时周期限制了时钟的 最小速率为19kHz。为了保证正常通信,SMBCLK的速率必须介于10kHz至100kHz之间,而I²C接口的主机或从机则可根据传输数据的需要将 时钟保持在低电平。
SPI、I2C、UART三种串行总线协议的区别
千枫寒云 发表于 2007-12-10 20:07:14
SPI(Serial Peripheral Interface:串行外设接口);
I2C(INTER IC BUS:意为IC之间总线)
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)
第二,区别在电气信号线上:
SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)
UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;
第四,看看牛人们的意见吧!
wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。
I2C总线
千枫寒云 发表于 2007-12-10 20:02:14
每一次I2C总线传输都由主设备产生一个起始信号,采用同步串行传送数据,数据接收方每接收一个字节数据后都回应一个应答信号。一次I2C总线传输传送的字节数不受限制,主设备通过产生停止信号来终结总线传输。数据从最高位开始传送,数据在时钟信号高电平时有效。通信双方都可以通过拉低时钟线来暂停该次通信。
传输数据的过程如下:
1)假设微控制器A 要发送信息到微控制器B
--微控制器A 主机寻址微控制器B 从机
--微控制器A 主机发送器发送数据到微控制器B 从机接收器
--微控制器A 终止传输
2)如果微控制器A 想从微控制器B 接收信息
--微控制器A 主机寻址微控制器B 从机
--微控制器A 主机接收器从微控制器B 从机发送器接收数据
--微控制器A 终止传输,甚至在这种情况下主机微控制器A 也产生定时而且终止传输
I²C接口定义了一个简单的主/从双向通信接口。在这个体系中,MCU决定自己为主机(写模式)或为从机(接收模式)。每个从机具备专有、唯一的地址,使主机可以和多个从机通过一条总线进行通信,而不需要为每一个从机提供单独的片选线。如图3所示,从机的数目只受限于最大线上电容(400pF),I²C接口的机制基于7位或10位地址,7位的地址更为常见。在7位地址的机制中,总线上可以接127个不同的外设。SCL和SDA线为漏极开路结构,所以闲置时必须为高。当电源电压为3V时,连接一个1kΩ或更大阻值的上拉电阻;当电源电压为5V时,连接一个1.6kΩ或更大阻值的上拉电阻。

图3. 利用数据输入/输出和时钟信号进行通信的2线接口
当SCL为高,SDA从高变为低,即发出了一个开始命令,启动I²C通信。图4a所示,每个SCL时钟传输一个数据位,传输一个字节至少需要9个数据位。一个写周期包括8个数据位和一个应答位(ACK)或者非应答位(NACK)。如图4b所示,当数据在I²C总线上传输时,在SLK的上升沿写入从机,在SLK的下降沿从机输出。在SCL时钟周期为高电平的时间内,SDA线的数据不可以改变。一次传输的完成必须跟随着一个中止或重新开始的命令,既SCL为高时,SDA由低变为高。当总线空闲时,SDA和SCL都为高。

图4a. 开始条件和停止条件,2线接口采用开始、重复开始和停止命令在主机和从机之间传输数据

图4b. I²C应答位,应答数据时,2线接口将SDA拉低
I²C的写周期起始于开始命令,随后是7位从机地址和第8位用于标识读、写操作。将第8位置低,表示写操作;将第8位置高,表示读操作。主机在第8个时钟周期后释放总线。如果从机应答数据传输,则在第9个时钟周期将SDA拉低。如果从机不应答写命令,则释放SDA (该数据线通过上拉电阻置于高电平)。
随后,主机写入8位命令字节,然后是第二个ACK/NACK位。接下来,主机写入8位数据字节并跟随第三个ACK/NACK位。数据字节和最后的应答位完成一个读/写周期,更新外设输出,图5a是一个写周期的详细例子。
I²C读周期起始于开始命令,随后是需要写入数据的从机地址、第8位置高,表示读操作。在ACK/NACK之后,主机写入命令字节访问从机寄存器。在第二个ACK/NACK位后,主机重新写入从机地址。在第三个ACK/NACK位后,从机控制总线,一次输出8位数据到总线上。如图5b所示,当从与上次读操作相同的从机寄存器读取数据时,主机只需要在读取从机数据之前写入从机地址。

图5. 2线接口一次传输8位数据,图5a是I²C写周期的一个例子;图5b是I²C读周期的一个例子
I²C接口支持低速(大于100kHz)、快速(大于400kHz)和高速(大于3.4MHz)三种数据速率。I²C接口的高低电平为CMOS逻辑电平 (低电平为0.3x电源电压以下,高电平为0.7x电源电压以上)。
3线接口 VS 2线接口
千枫寒云 发表于 2007-12-10 19:57:17
SPI总线
千枫寒云 发表于 2007-12-10 19:41:18
通常的应用是作为主机的单片机来操作做为从机的多个SPI设备,如SPI接口的A/D,EEPROM等。当一个主机要控制多个从设备时,如多片EEPROM,主机需要多根片选线,分别来选择不同的从设备,这种应用是基于单主多从结构。
主设备通过产生移位时钟来发起通讯,通讯时,数据由SDO 输出,SDI 输入,数据在时钟的上升或下降沿由SDO 输出,在紧接着的下降或上升沿由SDI 读入,这样经过8/16 次时钟的改变,完成8/16 位数据的传输。
SPI是一个环形总线结构由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。
例子:
假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据
脉冲 主机sbuff 从机sbuff sdi sdo
0 10101010 01010101 0 0
1上 0101010x 1010101x 0 1
1下 01010100 10101011 0 1
2上 1010100x 0101011x 1 0
2下 10101001 01010110 1 0
3上 0101001x 1010110x 0 1
3下 01010010 10101101 0 1
4上 1010010x 0101101x 1 0
4下 10100101 01011010 1 0
5上 0100101x 1011010x 0 1
5下 01001010 10110101 0 1
6上 1001010x 0110101x 1 0
6下 10010101 01101010 1 0
7上 0010101x 1101010x 0 1
7下 00101010 11010101 0 1
8上 0101010x 1010101x 1 0
8下 01010101 10101010 1 0
这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。
SCLK:同步时钟信号线,
SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。
串行数据线:
SPI接口数据线是单向的,共有两根数据线,分别承担Master到Slave、Slave到Master的数据传输;但是不同厂家的数据线命名有差别。
Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。
MOSI:When master, out line; when slave, in line
MISO:When master, in line; when slave, out line
比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,Master的MOSI引脚应与Slave的MOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO。
不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。
SDI:串行数据输入
SDO:串行数据输出
这种情况下,当Master与Slave连接时,就应该用一方的SDO连接另一个方的SDI。
由于SPI接口数据线是单向的,故电路设计时,数据线连接一定要正确,必然是一方的输出连接另一方的输入。
其实这个问题本来很简单的,但由于不同厂家产品的命名习惯可能不同,因此还需小心,以免低级出错。
数据传输的时序模式
为了适用不同产品接口应用需要,SPI接口定义了多种时序传输模式,并可通过设置接口单元寄存器中的相关控制位来选择。在Motorola的产品中,时序即是由两个控制位(极性控制、相位控制)来控制的。
时钟极性选择位CPOL:
在设备被使能激活后,还未进行数据传输时或两个字节数据传输间歇期间(见图3中的○1与○2处),SCLK处于空闲(Idle)电平,通过"CPOL空闲状态极性控制位"可以选择此空闲电平电平是0还是1。
时钟相位选择位CPHA:
该控制位用来选择数据接收端设备的采样时刻。可能在Idle to Active的跳变沿(见图3中的红色圈处),也可能在Active to Idle的跳变沿(见图3中的蓝色圈处)。在该采样时刻,线上数据必须已经稳定可靠,因此数据发送端设备应提前将数据移出到数据线上。为了降低设计难度,大部分接口电路都是用同一时钟周期中前一个时钟沿(即相反时钟变化方向)将数据移出。
SPI线上的Master,Slave设备必须根据具体情况设置匹配的传输时序模式,时序只有匹配,数据传输才能正常进行。如果设置的不匹配,可能导致数据接收方和发送方在同一时钟沿作用,导致数据传输失败。

我们以手机设计中非常流行的触摸屏控制器TSC2046为例,介绍SPI接口的实际应用。
由于TSC2046采样触摸屏信息并量化出最高位需要一定时间,而SPI总线没有握手机制,为避免Master过早的启动传输,接收无效数据,TSC2046引入了BUSY信号作为TSC2046向Master的指示。
TSC2046是在时钟的第一个Idle to Active沿采集数据(下图1处),而在第一个(下一字节)Active to Idle 沿开始移出数据(下图2处),这导致Master只能在第二个dle to Active沿采集到的数据才是有效的(下图3处),而在第一个Idle to Active沿(下图1处)采集的数据是无效的,因此在软件中需要将该Bit丢弃。
可见,必须根据Master与Slave的实际时序进行匹配,软件也需要进行对应的调整,才能保证数据传输的正常进行。

多Slave的应用
SPI也支持多Slave应用。多个Slave共享时钟线、数据线,可以直接并接在一起;而各Slave的片选线SS则单独与Master连接,受Master控制。在一段时间内,Master只能通过某根SS线激活一个Slave,进行数据传输,而此时其他Slave的时钟线和数据线端口则都应保持高阻状态,以免影响当前数据传输的进行。

SPI Vs I
SPI协议没有定义寻址机制,需通过外部SS信号线选择设备,当出现多slave应用时,需要多根SS信号线,实施起来较I
SPI 协议相对I
而I
比如TSC2046只有一个控制寄存器(一个8bit的命令字),使用SPI接口即可控制,因为无需寻址。而OV的Cmos Sensor内有多个控制寄存器,此时就必须使用I
SPI接口属于一种非常基本的外设接口,但是应用却很广泛。SPI也有所发展,比兔NS推出的SPI的精简接口Microwire,满足通常外设的扩展需求。Motorola还推出了扩展功能的QSPI(Queued SPI)接口,应用更为广泛。
