EDN首页   博客首页

最新日志

发表于:2008-11-3 20:37:42
标签:基础  数字电路  

0

推挽输出与开漏输出的区别(zt)

推挽输出与开漏输出的区别(zt)  
    Push- Pull输出就是一般所说的推挽输出,在CMOS电路里面应该较CMOS输出更合适,因为在CMOS里面的push-pull输出能力不可能做得双极那么 大。输出能力看IC内部输出极N管P管的面积。和开漏输出相比,push-pull的高低电平由IC的电源低定,不能简单的做逻辑操作等。 push-pull是现在CMOS电路里面用得最多的输出级设计方式。  
 

一.什么是OC、OD

集电极开路门(集电极开路 OC 或源极开路OD)
open-drain是漏极开路输出的意思,相当于集电极开路(open-collector)输出,即ttl中的集电极开路(oc)输出。一般用于线或、线与,也有的用于电流驱动。
open-drain是对mos管而言,open-collector是对双极型管而言,在用法上没啥区别。
开漏形式的电路有以下几个特点:
1.利用外部电路的驱动能力,减少IC内部的驱动。 或驱动比芯片电源电压高的负载.
2. 可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总 线占用状态的原理。如果作为图腾输出必须接上拉电阻。接容性负载时,下降延是芯片内的晶体管,是有源驱动,速度较快;上升延是无源的外接电阻,速度慢。如 果要求速度高电阻选择要小,功耗会大。所以负载电阻的选择要兼顾功耗和速度。
3.可以利用改变上拉电源的电压,改变传输电平。例如加上上拉电阻就可以提供TTL/CMOS电平输出等。
4.开漏Pin不连接外部的上拉电阻,则只能输出低电平。一般来说,开漏是用来连接不同电平的器件,匹配电平用的。
5.正常的CMOS输出级是上、下两个管子,把上面的管子去掉就是OPEN-DRAIN了。这种输出的主要目的有两个:电平转换和线与。

6.由于漏级开路,所以后级电路必须接一上拉电阻,上拉电阻的电源电压就可以决定输出电平。这样你就可以进行任意电平的转换了。
7.线与功能主要用于有多个电路对同一信号进行拉低操作的场合,如果本电路不想拉低,就输出高电平,因为OPEN-DRAIN上面的管子被拿掉,高电平是靠外接的上拉电阻实现的。(而正常的CMOS输出级,如果出现一个输出为高另外一个为低时,等于电源短路。)

8.OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

二.什么是线或逻辑与线与逻辑?

   在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上.
因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS), 晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.

注:个人理解:线与,接上拉电阻至电源。(~A)&(~B)=~(A+B),由公式较容易理解线与此概念的由来 ;

如果用下拉电阻和 PNP 或 PMOS 管就可以构成与非 NAND 逻辑, 或用负逻辑关系转换与/或逻辑.

注:线或,接下拉电阻至地。(~A)+(~B)=~(AB);
这些晶体管常常是一些逻辑电路的集电极开路 OC 或源极开路 OD 输出端. 这种逻辑通常称为线与/线或逻辑, 当你看到一些芯片的 OC 或 OD 输出端连在一起, 而有一个上拉电阻时, 这就是线或/线与了, 但有时上拉电阻做在芯片的输入端内.
顺便提示如果不是 OC 或 OD 芯片的输出端是不可以连在一起的, 总线 BUS 上的双向输出端连在一起是有管理的, 同时只能有一个作输出, 而其他是高阻态只能输入.

三.什么是推挽结构
         一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止,要实现线与需要用OC(open collector)门电路 。如果输出级的有两个三极管,始终处于一个导通、一个截止的状态,也就是两个三级管推挽相连,这样的电路结构称为推拉式电路或图腾柱(Totem- pole)输出电路(可惜,图无法贴上)。当输出低电平时,也就是下级负载门输入低电平时,输出端的电流将是下级门灌入T4;当输出高电平时,也就是下级 负载门输入高电平时,输出端的电流将是下级门从本级电源经 T3、D1 拉出。这样一来,输出高低电平时,T3 一路和 T4 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级 既提高电路的负载能力,又提高开关速度。供你参考。
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小 效率高。输出既可以向负载灌电流,也可以从负载抽取电流。

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(95)
发表于:2008-10-29 21:33:07
标签:c语言  

0

学习心得:嵌入式c语言里一种常用的数据结构

以前做飞思卡尔的时候总是很想知道c语言里是怎么做到位寻址的PORTA_BIT0为什么就代表A口的最低位了呢?于是就看头文件。里面关于这方面的描述总有一些一个共用体里定义了一个成员和一个结构体这种形式。但是一直没看懂是什么意思。今天终于在看一个程序的时候领悟了。记录一下,见笑了!比如
union                                 
{
 uint8 port;
 struct
 {
  byte BIT0          :1;
  byte BIT1          :1;
  byte BIT2          :1;
  byte BIT3          :1;
  byte BIT4          :1;
  byte BIT5          :1;
  byte BIT6          :1;
  byte BIT7          :1;
 }Bits;
}PORTA;
定义了之后,就可以用PORTA.Bits.BIT0来表示最低位了。当然,结构体了各个位的顺序也是特定的,是由高位到低位的。冒号后面的数字表示当前成员占几位。这个数字不一定为1。比如
 union                                
{
 uint16 Word;
 struct
 {
  uint8 low          :8;
  uint8 high         :8;
 }bytes;
}angle;
这里皆可以引用angle.bytes.low和angle.bytes.high来分别访问angle的高低字节了。

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(510)
发表于:2008-10-17 18:21:11
标签:SMT  PCB  焊接  

0

贴片元器件焊接教程

贴片元器件(密引脚IC)焊接教程

作者:billowtust

随着科技的发展,芯片集成度越来越高,封装也变得越来越小,这也造成了许多初学者“望贴片IC”兴叹了。拿着烙铁对着引脚间距不超过0.5mmIC,你是否觉得无从下手?本文将详解密引脚贴片IC、普通间距贴片IC、小封装(08050603甚至更小)的分立元件的焊接方法。

在正式开始之前,先说点题外话吧。自打EDN CHINA做赠USB PCB板的活动以来,我发现很多新手们都对D12感到很头疼,于是我就萌发了做一个视频教程的想法。而那段时间恰好我开始正备期末考试,就一直拖着没有做。昨天结束了最后一门考试,今天我花了一下午时间把视频教程做了,希望能对大家有所帮助。此外,还得感谢jameson11提供的摄像头^_^,感谢圈圈长期以来辛苦的灌水工作^_^

好了,费话说了这么多,也该进入主题了。本教程是以EDN CHINAhttp://www.ednchina.com/USB学习板赠送活动的器件为例进行焊接的,视频教程里包含了PDIUSBD12(引脚间距较小)、MAX232(引脚间距大)和0603封装的电容、0805封装的LED的焊接过程。

Are you ready? Let’s go!!!

一、密引脚ICD12)焊接

首先,用镊子夹着芯片,对准焊盘:

然后用拇指按住芯片:

在进行下一步之前,一定要确认芯片已经对准焊盘了,不然下一步做了以后再发现芯片没有对准就比较麻烦了。

接着,用镊子夹取一小块松香放在D12芯片引脚的旁边,注意这里用的是松香,而不是那种稠的助焊剂(这种助焊剂没法固定住芯片):

下一步就是用烙铁将松香化开了。松香在这里有两个作用:一是用来将芯片固定在PCB板上,另一个作用就是助焊了,呵呵。熔化松香的时候,要尽可能的将松香化开,均匀地分布在一排焊盘上。

然后同样用松香固定住D12另外一侧的引脚,做完这步D12就牢固的固定在了PCB上,所以之前要检查芯片是不是准确的对准了焊盘,不然等两边的松香都上好后就不是很好取了。

接下来剪一小截焊锡放在左边的焊盘上(如果你用左手使烙铁,就放右边了。本例均以右撇子为例,呵呵),图中的焊锡直径为0.5mm, 其实直径大小无所谓,重要的是选多少量。如果你拿不准放多少上去,建议先少放一些,如果不够再加焊锡。如果你不小心一下子放多了,也不是没有解决办法,如 果只是多一点儿,可以按照视频教程中的那样左右拖动来使多余的锡均分到每个焊盘上来解决;如果多很多,就需要用别的方法了,建议使用吸锡带将多余的焊锡弄 出来。

用烙铁将焊锡熔化开,紧接着就将烙铁沿着引脚与焊盘的接触点向右拖动,一直拖到最右边的那个引脚:

 

这样D12一个边上的引脚就都焊接好了,如下图。用同样的方法焊接D12另一边上的引脚。

下面一幅图是焊锡稍放多了的情况(看我多不容易,为了演示这种情况特地在焊D12的另一边引脚时多放了些锡,哈哈):

这时用烙铁将多出来的锡化开,向左或是向右或是左右拖动,将这些多出来的锡再均分到每个引脚上,一般情况下可以解决这个问题。实在放多了就要用到上面说的吸锡带了,给个图片吧,新手们也好知道它长嘛样:

好了,做完上面的那些,D12也就成功焊接上了,来个美图:

漂亮吧?什么,丑?边上黑呼呼的?

这就是多余的松香影响美观和实用性了,现在它也没有什么用了,所以,接下来的就是——处理它!可以使用洗板水(我没有用过)、高纯度工业酒精来洗掉这些剩下的松香,我是使用99.7%的工业酒精洗的,可以把这些松香洗的不见踪影,呵呵。洗板的步骤我没有录在视频里面,我想这个不用我教大家吧,呵呵。

洗完板以后你就见到了你亲手焊接的漂漂亮亮的密引脚IC芯片了。

二、稀引脚ICMAX232)焊接

上面的焊接感觉不错吧,或是相当好?但是千万别得意,不要把这种焊接方法用到所有的贴片IC上,上面那种焊接法感觉是引脚越密越好用,基本上引脚间距小于等于0.5mm的片子才这么焊,具体操作就看感觉了。

下面就来看看引脚间距稍大一些的IC怎么焊接,以USB板上的MAX232为例。

首先,在芯片焊盘边上的那个焊盘上化点儿焊锡:

然后用镊子把芯片对准焊盘,这时候焊盘上有锡的那个引脚就被顶起来一点儿了,找好感觉,把芯片对上去。

再用烙铁化开焊盘上的焊锡,压住芯片的手指稍稍使点力,让芯片能紧密的贴着PCB,这个引脚也就焊接好了。向下压的时候别太用力了,特别是别在焊锡完全化开之前太用力了,不然引脚用弯掉的。

接下来,焊接芯片对角线另一端的那个引脚,固定住芯片:

接下来要做的事情就是像视频教程里的那样,一个脚一个脚地焊接MAX232剩下的引脚。

这样MAX232也就焊完了,这次不用洗板了,因为我们没有用松香(其实焊锡丝里面含了一定量的助焊剂的,说不准就是松香,呵呵)。

三、小封装分立元件的焊接

小封装分立元件,也就是电阻电容什么的了。这里演示的是焊接0603封装的电容。

首先给要焊接元件的一个焊盘上化一点儿焊锡:

然后用镊子夹着电容,右手的烙铁将刚才点上的焊锡化开。这时用镊子将电容往焊盘上“送”上一点儿,就焊上了:

接下来的工作就是焊接另外一个引脚了:

这样,小封装的元件也就被我们漂亮地焊接在板子上了。

 

这里只是一个简介,因为做的视频教程没有声音,所以在这里多写了些文字,希望对大家有所帮助。视频里面也没有做DIP元件的焊接教程,因为我相信这个也用不着,呵呵。

好了,该收尾了,不然大伙都腻了我的这些废话了。最后祝大家焊的愉快,玩得愉快!

系统分类: PCB   |    用户分类: 无分类    |    来源: 转贴

评论(2) | 阅读(251)
发表于:2008-10-14 19:18:54
标签:ps/2键盘  嵌入式  

1

PS2键盘编程详细资料

(转载收藏)

一.电气特性

1

DATA

Key Data

2

n/c

Not connected

3

GND

Gnd

4

VCC

Power , +5 VDC

5

CLK

Clock

6

n/c

Not connected

 

二.数据格式

1个起始位 总是逻辑0
8个数据位 (LSB)低位在前
1个奇偶校验位 奇校验
1个停止位 总是逻辑1
1个应答位 仅用在主机对设备的通讯中

表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

 

三.PS/2 发送数据到PC的时序

键盘接口时序(a) 键盘发送时序;(b) 键盘接收时序

注:在时钟的下降沿读取数据.以下可做具体写程序参考

从PS/2向PC机发送一个字节可按照下面的步骤进行:

(1)检测时钟线电平,如果时钟线为低,则延时50μs;
          (2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);
          (3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向 PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);
          (4)延时20μs(如果此时正在发送起始位,则应延时40μs);
         (5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;
          (6)输出8个数据位到数据线上;
          (7)输出校验位;
          (8)输出停止位(1);
          (9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);


通过以下步骤可发送单个位:
          (1)准备数据位(将需要发送的数据位放到数据线上);
          (2)延时20μs;
          (3)把时钟线拉低;
          (4)延时40μs;
          (5)释放时钟线;
          (6)延时20μs。

PS/2设备从PC机接收一个字节

由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100μs 来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和 一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而PS/2设备则要配合PC机才能读到准确的数据。具体连接步骤如下:

(1)等待时钟线为高电平。
          (2)判断数据线是否为低,为高则错误退出,否则继续执行。
          (3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。
          (4)读地址线上的校验位内容,1个bit。
          (5)读停止位。
          (6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。          
          (7 输出应答位。
          (8) 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。
          (9)延时45 μs,以便PC机进行下一次传输。

读数据线的步骤如下:

(1)延时20μs;
          (2)把时钟线拉低
          (3)延时40μs
          (4)释放时钟线
          (5)延时20μs
          (6)读数据线。

下面的步骤可用于发出应答位;

(1)延时15μs;
          (2)把数据线拉低;
          (3)延时5μs;
          (4)把时钟线拉低;
          (5)延时40μs;
          (6)释放时钟线;
          (7)延时5μs;
          (8)释放数据线。

四.键盘返回值介绍:

注意:键盘的返回值并不是和一般ASCII码相对应!

键盘的处理器如果发现有键被按下释放或按住键盘将发送扫描码的信息包到计算机扫描码有两种 不同的类型通码和断码当一个键被按下或按住就发送通码当一个键被释放就发送断码每个按键被分配了唯一的通码和断码这样主机通过查找唯一的扫描码就可以测定 是哪个按键每个键一整套的通断码组成了扫描码集有三套标准的扫描码集分别是第一套第二套和第三套所有现代的键盘默认使用第二套扫描码
       虽然多数第二套通码都只有一个字节宽但也有少数扩展按键的通码是两字节或四字节宽这类的通码第一个字节总是为E0h
       正如键按下通码就被发往计算机一样只要键一释放断码就会被发送每个键都有它自己唯一的通码它们也都有唯一的断码幸运的是你不用总是通过查表来找出按键的断 码在通码和断码之间存在着必然的联系多数第二套断码有两字节长它们的第一个字节是F0h 第二个字节是这个键的通码扩展按键的断码通常有三个字节它们前两个字节是E0h,F0h 最后一个字节是这个按键通码的最后一个字节作为一个例子我在下面列出了几个按键的第二套通码和断码

No.

KEY

通码(第二套)

断码(第二套)

1

"A"

1C

F0 1C

2

"5"

2E

F0 2E

3

"F10"

09

F0 09

4

Right Arrow

E0 74

E0 F0 74

5

Right "Ctrl"

E0 14

E0 F0 14

一个键盘发送值的例子:
      通码和断码是以什么样的序列发送到你的计算机从而使得字符G 出现在你的字处理软件里的呢因为这是一个大写字母需要发生这样的事件次序按下Shift 键按下G键释放G 键释放Shift 键与这些时间相关的扫描码如下Shift 键的通码12hG 键的通码34h G 键的断码F0h 34h Shift 键的断码F0h 12h 因此发送到你的计算机的数据应该是

12h 34h F0h 34h F0h 12h



五:第二套扫描码:

101 102 和104 键的键盘:

KEY

通码

断码

   KEY  通码  断码    KEY  通码 断码 

A

1C

F0 1C

    9 46 F0 46     [ 54  F0 54 

B

32

F0 32

  ` 0E F0 0E    INSERT E0 70  E0 F0 70

C

21

F0 21

  - 4E  F0 4E    HOME E0 6C  E0 F0 6C

D

23

F0 23

  = 55  F0 55    PG UP E0 7D  E0 F0 7D

E

24

F0 24

  \ 5D  F0 5D    DELETE E0 71  E0 F0 71 
F 2B F0 2B   BKSP 66  F0 66    END E0 69  E0 F0 69 
G 34  F0 34    SPACE 29  F0 29    PG DN E0 7A  E0 F0 7A 
33  F0 33    TAB 0D  F0 0D    U ARROW E0 75  E0 F0 75 
I 43  F0 43    CAPS 58  F0 58    L ARROW E0 6B  E0 F0 6B 
J 3B  F0 3B    L SHFT  12  F0 12    D ARROW E0 72 E0 F0 72 
42  F0 42    L CTRL 14  F0 14    R ARROW E0 74 E0 F0 74 
4B F0 4B    L GUI E0 1F  E0 F0 1F   NUM 77  F0  77
3A  F0 3A    L ALT 11  F0 11    KP / E0 4A  E0 F0 4A 
31  F0 31    R SHFT  59  F0 59    KP * 7C F0  7C
44  F0 44    R CTRL  E0 14  E0 F0 14    KP - 7B F0 7B 
4D  F0 4D   R GUI E0 27  E0 F0 27    KP + 79 F0 79 
15  F0 15    R ALT E0 11  E0 F0 11    KP EN E0 5A E0 F0 5A 
2D F0 2D    APPS E0 2F  E0 F0 2F    KP  71 F0 71 
1B  F0 1B    ENTER 5A F0 5A    KP 0 70 F0 70 
2C  F0 2C    ESC 76  F0 76    KP 1 69 F0 69 
3C F0 3C    F1 05  F0 05    KP 2  72 F0 72 
2A F0 2A    F2  06 F0 06    KP 3  7A F0 7A 
1D F0 1D    F3  04  F0 04    KP 4  6B F0 6B 
22 F0 22    F4  0C  F0 0C    KP 5  73 F0 73 
35  F0 35    F5  03  F0 03    KP 6  74 F0 74 
1A  F0 1A    F6  0B  F0 0B    KP 7  6C  F0 6C 
0 45  F0 45    F7  83  F0 83    KP 8  75 F0 75 
16  F0 16    F8  0A  F0 0A    KP 9  7D F0 7D 
1E  F0 1E    F9  01  F0 01    ] 58 F0 58 
26  F0 26    F10  09  F0 09    ; 4C F0 4C 
25  F0 25    F11  78  F0 78    ' 52 F0 52 
2E  F0 2E    F12  07  F0 07    , 41 F0 41 
36 F0 36    PRNT
SCRN
E0 12
E0 7C
E0 F0
7C E0
F0 12 
  . 49 F0 49 
3D  F0 3D    SCROLL 7E F0,7E    / 4A F0 4A 
3E  F0 3E    PAUSE E1 14 77
E1 F0 14
F0 77
 -NONE-        

ACPI 扫描码:

KEY

通码

断码

Power

E0, 37

E0, F0, 37

Sleep

E0, 3F

E0, F0, 3F

Wake

E0, 5E

E0, F0, 5E

Windows 多媒体扫描码:

KEY

通码

断码

Next Track

E0, 4D

E0, F0, 4D

Previous Track

E0, 15

E0, F0, 15

Stop

E0, 3B

E0, F0, 3B

Play/Pause E0, 34 E0, F0, 34 
Mute E0, 23  E0, F0, 23 
Volume Up  E0, 32 E0, F0, 32 
Volume Down  E0, 21  E0, F0, 21 
Media Select  E0, 50  E0, F0, 50 
E-Mail E0, 48  E0, F0, 48 
Calculator E0, 2B  E0, F0, 2b 
My Computer E0, 40  E0, F0, 40 
WWW Search  E0, 10  E0, F0, 10 
WWW Home  E0, 3A  E0, F0, 3a 
WWW Back E0, 38  E0, F0, 38 
WWW Forward E0, 30  E0, F0, 20 
WWW Stop E0, 28  E0, F0, 28 
WWW Refresh E0, 20 E0, F0, 20 
WWW Favorites  E0, 18  E0, F0, 18 

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(128)
发表于:2008-7-18 21:52:01
标签:无标签

1

大型设计中FPGA的多时钟设计策略

利用FPGA实现大型设计时,可能需要FPGA具有以多个时钟运行的多重数据通路,这种多时钟FPGA设计必须特别小心,需要注意最大时钟速率、抖动、最 大时钟数、异步时钟设计和时钟/数据关系。设计过程中最重要的一步是确定要用多少个不同的时钟,以及如何进行布线,本文将对这些设计策略深入阐述。

FPGA设计的第一步是决定需要什么样的时钟速率,设计中最快的时钟将确定FPGA必须能处理的时钟速率。最快时钟速率由设计中两个触 发器之间一个信号的传输时间P来决定,如果P大于时钟周期T,则当信号在一个触发器上改变后,在下一个逻辑级上将不会改变,直到两个时钟周期以后才改变, 如图1所示。

传输时间为信号在第一个触发器输出处所需的保持时间加上两级之间的任何组合逻辑的延迟,再加两级之间的布线延迟以及信号进入第二级触发器的设置时 间。无论时钟速率为多少,每一个FPGA设计所用的时钟必须具有低抖动特性。抖动S是触发器的一个时钟输入到另一个触发器的时钟输入之间的最大延迟。为使 电路正常工作,抖动必须小于两个触发器之间的传输时间。

图2显示了如果抖动大于传输时间(S>P)将出现的情况,该电路用时钟的两个上升沿来延迟信号1。然而,信号1上的一个改变会在相同的时钟周期上传输到的信号3上,从而引起信号2的改变。因为S>P,电路将不能不正常。

须注意的是,时钟速率与传输延时并没有什么关系,甚至普通的100bps时钟也会出现抖动问题。这意味着虽然FPGA供应商宣称他们的芯片具有较短的传输时间和很高的时钟速率,但抖动问题可能会严重,甚至那些没有运行在最高速率上的设计也是如此。

好在FPGA供应商已经认识到时钟抖动的影响,并在他们的芯片中提供低抖动的布线资源。这些特殊的布线能够在芯片中一个给定范围内的任何两个触发器 之间提供一个确定的最大抖动。部分产品的低抖动资源覆盖了整个芯片,而其它的则可能只覆盖了FPGA逻辑块中的一个特定的行或列。对于一个需要很多不同时 钟源的设计,这些低抖动FPGA是比较理想的选择。

多时钟设计的最严重问题之一是用异步时钟将两级逻辑结合在一起。由于异步时钟会产生亚稳态,从而严重降低设计性能,或完全破坏设计所能实现的功能。 在触发器的时序要求产生冲突时(设置时间和保持时间)将产生亚稳态,触发器的最终输出是未知的,并使整个设计处于不确定状态。如果有一级逻辑要将数据异步 地发送到另一级,图3所示的情形将不能满足触发器的设置和保持时间要求。确切地说,如果设计中含有异步逻辑将有可能会产生亚稳态。在处置异步资源时必需非 常小心,因为这可能产生一些很严重的问题。

多时钟设计

本文以电信应用中的E3多路复用/解复用设计为例。如图4所示,多路复用器接收来自一组独立线路接口芯片的16个独立E1信道,每一个信道都工作于 2.048MHz;经复用后,这些E1流组合成4个E2流,分别工作在8.0448MHz;4个E2流最后组合成一个E3流,以34.368Mbps的速 率串行发送出去。在接收端执行相反的操作:解复用器从E3流提取4个E2数据流,然后从E2流提取16个E1流,最终将E1流发送到接收端的线路接口芯 片。

这些E1线路接口在发送和接收时都独立工作,因此2.048MHz的时钟速率可以有+/- 20ppm的偏差。同样,因为大多数系统同时发送和接收数据,分立的多路复用器和多路解复用器将提供2个独立的E3流(发送和接收)。因此,两个 34.368MHz的时钟可以存在细微的差异。

由于E2流是在芯片上产生的,这些E2多路复用器可以共享同一个8.448MHz时钟。然而,由于接收的数据速率与我们所设计的板无关(且不能假定所有E2多路复用器使用相同时钟),所以E2解复用器时钟必须能工作在略为不同的速率下。

此外,假定设计中需要一个由工作频率为1MHz的处理器控制的独立SPI(串行外围接口)总线接口,该接口用于状态和控制。这样一来,设计中总共用 了32个2.048MHz时钟,5个8.448MHz时钟,2个34.368MHz时钟和一个1MHz时钟,总共多达40个时钟。

本设计中最快时钟是34.368MHz E3时钟。FPGA的最大时钟速率的确定很重要,因为设计的差异将影响到该最大值。然而,在芯片商的资料手册中常常可以看到“全局时钟设置及保持时间”和 “至CLB输出的时钟”两个参数,将这两个参数的最大值相加,再增加25%就能可以得到最小时钟周期的初略值,在最大时钟速率条件下允许10%的余量,以 保证过热条件下能正常工作。因此,我们设置的最小速率为40MHz,很多较新的FPGA都能够很容易地支持该频率。事实上,FPGA供应商已经推出了超过 300MHz的器件。

在确定了能满足最大频率要求的FPGA后,就需要保证有足够的空间来实现你的设计。如果所选的FPGA没有足够的余量,就不能提供足够的布线资源来 满足设计的时序约束。通常芯片供应商宣称的速率是最佳条件下的速率,FPGA供应商一般建议FPGA逻辑在布线功能开始明显变差以前可以用到80%。在选 择FPGA器件时,建议在新的设计时最好使FPGA逻辑用到50%左右,这样就允许计算起始设计大小出现超差,以及为在设计起动后产生不可避免的设计变更 留出空间。如果最终的设计只占用低于50%的资源,则可以使用同一系列中较小的FPGA以降低成本。

通过时序约束来规定慢时钟速率,从而可以改进设计中最快时钟的布线。在多路复用器例子中,如果设置FPGA布线工具SPI总线时钟为1MHz,而 E3时钟为40MHz,布线工具将尽量使E3时钟的逻辑电路模块相邻布局。如果由于空间的限制而不能将全部电路布局在一起,则首先应将SPI逻辑另外布 局,因为SPI逻辑可以处理更长传输延迟。所有FPGA供应商的布线工具都能规定这些较慢时钟速率。

减少时钟数量

根据市场调查,目前还没有哪个FPGA器件能够支持这种多路复用器/解复用器设计所需的40个时钟。所以,我们必须减少所需要的时钟数。

首先了解E2和E3多路复用器的时钟。前面已经分析了4个E2多路复用器工作在相同时钟下的可接受度,E3多路复用器运行于比E2时钟高得多的速 率,必需使用一个不同的时钟。但是,如果我们从E3时钟中引出E2时钟是否可行呢?因为E3多路复用器要从每个E2支路得到数据,我们可以在需要E2多路 复用器给我们数据时,简单地将脉冲送给每个多路复用器。我们没有去掉任何时钟,但E2时钟现在是基于E3时钟。

如果在所有的多路复用器中也使用同样的时钟,并且只使用一个使能信号来告诉E2多路复用器什么时候工作,这时会产生什么问题呢?如果E3多路复用器 用34.368MHz时钟产生使能信号,在这些使能信号上的抖动不会比用在FPGA中任何其它同步逻辑更大。所以,使能信号可以使用正常(高抖动)布线资 源,这样就不需要单独的8.448MHz多路复用器时钟,读取E1数据缓冲器的数据时也是一样。换言之,如果E2多路复用器需要数据,它可以激活到特定缓 冲器的使能信号。到缓冲器的时钟本身能够保持E3多路复用器所用的34.368MHz时钟,如图5所示。

最后,我们检查16个从线路接口芯片输入到FPGA的E1时钟。这些时钟有会产生下面几个问题:首先,16个时钟将占用太多可用芯片时钟布线资源; 其次,在同一个FPGA中使用16个异步时钟来驱动相互邻近的触发器,由于地弹、串扰和其它效应将产生噪声问题。例如,由于噪声的原因,一个正边沿触发器 会在下降边沿时改变输出状态,此类问题将难以处理。

作为一种可能的解决方案,我们推荐使用一个最快的时钟来对16个E1时钟采样。16个输入时钟都接近2.048MHz,并且还有一个 34.368MHz的系统时钟。这样,我们可以用34.368MHz时钟来对16个E1时钟分别进行采样,并将结果存储在一个16位存储器中(每个E1时 钟一个位)。然后,我们可以使用一个算法来检测在E1时钟上由低至高的转换,为每一个E1数据信号产生一个使能信号,并在下一个周期 (34.368MHz)中存储数据。

要成功实现这种方案,还必需了解时钟-数据关系以避免在数据变化时对数据采样,参见图6。请注意在时钟采样电路的第一级中使用了两个触发器以确保在亚稳态下正常工作。另外需要注意的是,数据和时钟必须具有相同时钟周期数的延迟。

我们已经成功地将多路复用器的时钟减少到一个时钟,同样的方法可否用在解复用器呢?E3解复用器必须采用一个外部输入时钟,这是因为驱动E3输入数 据的同一个片外器件利用到该时钟。由于E3解复用器知道在什么时候发送数据到E2解复用器,并能对每个E2解复用器产生使能信号,而四个E2解复用器能工 作在与E3多路复用器相同的主时钟下。同样,E2多路复用器能够为每个E1流产生使能信号。

如果我们假设线路接口芯片能够接受有间隙的时钟(gapped clock),一旦确定发出E1使能信号,我们只需要发送一个时钟脉冲至线路接口。然而,只需要简单地发送使能信号本身至接口芯片而不必产生一个新的时 钟。因为送至接口的数据将在使能信号的下降沿产生改变(参见图5),我们需要确认接口在时钟的上升沿进行采样。因为使能信号仅在线路接口芯片上而不是在 FPGA内用作一个时钟,就没有必要在一个低抖动源中进行布线。注意这是在知道将再也不会用主时钟的连续脉冲送数据到相同的从属器件中时才这样做。

1MHz SPI时钟并不能简单去掉,但我们现在通过使用使能信号和时钟过采样技术,将原先40个时钟减少到3个,这样我们就有了更大的器件选择范围。

异步时钟

在用异步时钟产生任何逻辑前应该尽量先考虑采用其它替代方法,用异步时钟的组合逻辑是产生亚稳态问题的主要原因。同样,当违反触发器的设置和保持时间约束时,在一个短时间内输出将具有不确定性,并且将最终设定在“1”或“0”上,确切的状态不可预知。

幸运的是对于亚稳态性问题已经有一些解决方案。图6说明了这一方案,这是一种双寄存器方法:进入第一级触发器的数据与时钟异步,所以第一级触发器几 乎肯定是亚稳态;然而,只要亚稳态的长度小于时钟的周期,第二级触发器就不会进入亚稳态。但是,FPGA供应商很少提供亚稳态时间,尽管该时间一般小于触 发器的设置和保持时间之和。

如果时钟不是太快而且能满足时序约束的话,像图6所示的电路将可能不会产生亚稳态。只要所有输出到触发器的通路由相同时钟驱动,即使第一级触发器的 输出可用,通常还是需要用像图6中电路来将亚稳态隔离到一条短线。采用这种方法后,将不太可能出现由于电路的改变而无意地在无时钟驱动的逻辑中用到该亚稳 太线。

如果读数据的是一个计数器,像从一个异步FIFO读或写地址,你应该考虑下列情况:一个传统的3位计数器在状态之间有一个、两个或三个位的变化,例 如读数发生在计数器从“011”到“100”变化的瞬间,则所有三个位的值将不确定,读的值会是八种可能状态中的任一种。如果计数器是使用格雷码,如表所 示,则每次仅有一位发生状态改变,如果读数发生在计数器变化的瞬间,则只有一个位会有问题,所以在读操作中只有两种可能结果,而且这两种可能结果是计数器 正好在读以前的值和正好在读以后的值时。因为读正好发生在计数器产生变化的瞬间,你不可能确切地说哪个值是正确的,即两者都应该认为是有效的。

另一个避免异步时钟问题的方法是忽略较慢的时钟,并用较快的时钟来采样。这需要数据有特殊的成帧特性(例如,具有一个前导码)来定义数据边界。这是 一个常用的方法,在差不多每一个具有UART形式的嵌入式系统都有应用。该方法是:采用一个非常快的时钟,比如数据符号率的16倍,在连续发现15个起始 字符后开始采样,则下一个16(左右)位相当于送的第一个位,再下一个16(左右)位对应下一个位,并以次类推。

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(147)
发表于:2008-7-18 21:50:15
标签:无标签

1

四种常用FPGA/CPLD设计思想与技巧

本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作种取得事半功倍的效果。

 

FPGA/CPLD的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线操 作和数据接口的同步方法。希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导日后的设计工作,将取得事半功倍的效果!

 

乒乓操作

 

“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图1所示。

 

乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单 元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期, 通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输入数据选择单元”的选 择,送到“数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“ 数据缓冲模块2”缓存的第2个周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。如此循环。

图1

 

乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理 模块”进行运算与处理。把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数 据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。

 

乒乓操作的第二个优点是可以节约缓冲区空间。比如在WCDMA基带应用中,1个帧是由15个时隙组成的,有时需要将1整帧的数据延时一个时隙后处 理,比较直接的办法是将这帧数据缓存起来,然后延时1个时隙进行处理。这时缓冲区的长度是1整帧数据长,假设数据速率是3.84Mbps,1帧长 10ms,则此时需要缓冲区长度是38400位。如果采用乒乓操作,只需定义两个能缓冲1个时隙数据的RAM(单口RAM即可)。


 
 
1 ? 2 ? 3 ? 4 下一页 末页

当向一块RAM写数据的时候,从另一块RAM读数据,然后送到处理单元处理,此时每块RAM的容量仅需2560位即可,2块RAM加起来也只有5120位的容量。图2

 

另外,巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。如图2所示,数据缓冲模块采用了双口RAM,并在DPRAM后引入了一级数据预 处理模块,这个数据预处理可以根据需要的各种数据运算,比如在WCDMA设计中,对输入数据流的解扩、解扰、去旋转等。假设端口A的输入数据流的速率为 100Mbps,乒乓操作的缓冲周期是10ms。以下分析各个节点端口的数据速率。

 

A端口处输入数据流速率为100Mbps,在第1个缓冲周期10ms内,通过“输入数据选择单元”,从B1到达DPRAM1。B1的数据速率也是 100Mbps,DPRAM1要在10ms内写入1Mb数据。同理,在第2个10ms,数据流被切换到DPRAM2,端口B2的数据速率也是 100Mbps,DPRAM2在第2个10ms被写入1Mb数据。在第3个10ms,数据流又切换到DPRAM1,DPRAM1被写入1Mb数据。

 

仔细分析就会发现到第3个缓冲周期时,留给DPRAM1读取数据并送到“数据预处理模块1”的时间一共是20ms。有的工程师困惑于DPRAM1的 读数时间为什么是20ms,这个时间是这样得来的:首先,在在第2个缓冲周期向DPRAM2写数据的10ms内,DPRAM1可以进行读操作;另外,在第 1个缓冲周期的第5ms起(绝对时间为5ms时刻),DPRAM1就可以一边向500K以后的地址写数据,一边从地址0读数,到达10ms 时,DPRAM1刚好写完了1Mb数据,并且读了500K数据,这个缓冲时间内DPRAM1读了5ms;在第3个缓冲周期的第5ms起(绝对时间为 35ms时刻),同理可以一边向500K以后的地址写数据一边从地址0读数,又读取了5个ms,所以截止DPRAM1第一个周期存入的数据被完全覆盖以 前,DPRAM1最多可以读取20ms时间,而所需读取的数据为1Mb,所以端口C1的数据速率为:1Mb/20ms=50Mbps。因此,“数据预处理 模块1”的最低数据吞吐能力也仅仅要求为50Mbps。同理,“数据预处理模块2”的最低数据吞吐能力也仅仅要求为50Mbps。换言之,通过乒乓操 作,“数据预处理模块”的时序压力减轻了,所要求的数据处理速率仅仅为输入数据速率的1/2。

 

通过乒乓操作实现低速模块处理高速数据的实质是:通过DPRAM这种缓存单元实现了数据流的串并转换,并行用“数据预处理模块1”和“数据预处理模块2”处理分流的数据,是面积与速度互换原则的体现!

 

串并转换设计技巧

 

串并转换是FPGA设计的一个重要技巧,它是数据流处理的常用手段,也是面积与速度互换思想的直接体现。

串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用寄存器、RAM等实现。前面在乒乓操作的图例中,就是通过DPRAM实现了数据 流的串并转换,而且由于使用了DPRAM,数据的缓冲区可以开得很大,对于数量比较小的设计可以采用寄存器完成串并转换。如无特殊需求,应该用同步时序设 计完成串并之间的转换。比如数据从串行到并行,数据排列顺序是高位在前,可以用下面的编码实现:图3


prl_temp<={prl_temp,srl_in};

 

其中,prl_temp是并行输出缓存寄存器,srl_in是串行数据输入。

对于排列顺序有规定的串并转换,可以用case语句判断实现。对于复杂的串并转换,还可以用状态机实现。串并转换的方法比较简单,在此不必赘述。

 

流水线操作设计思想

 

首先需要声明的是,这里所讲述的流水线是指一种处理流程和顺序操作的设计思想,并非FPGA、ASIC设计中优化时序所用的“Pipelining”。

 

流水线处理是高速设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。

 

流水线设计的结构示意图如图3所示。其基本结构为:将适当划分的n个操作步骤单流向串联起来。流水线操作的最大特点和要求是,数据流在各个步骤的处 理从时间上看是连续的,如果将每个操作步骤简化假设为通过一个D触发器(就是用寄存器打一个节拍),那么流水线操作就类似一个移位寄存器组,数据流依次流 经D触发器,完成每个步骤的操作。流水线设计时序如图4所示。

 

流水线设计的一个关键在于整个设计时序的合理安排,要求每个操作步骤的划分合理。如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级的输 出直接汇入后级的输入即可;如果前级操作时间大于后级的操作时间,则需要对前级的输出数据适当缓存才能汇入到后级输入端;如果前级操作时间恰好小于后级的 操作时间,则必须通过复制逻辑,将数据流分流,或者在前级对数据采用存储、后处理方式,否则会造成后级数据溢出。

 

在WCDMA设计中经常使用到流水线处理的方法,如RAKE接收机、搜索器、前导捕获等。流水线处理方式之所以频率较高,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。

 

数据接口的同步方法

 

数据接口的同步是FPGA/CPLD设计的一个常见问题,也是一个重点和难点,很多设计不稳定都是源于数据接口的同步有问题。

 

在电路图设计阶段,一些工程师手工加入BUFT或者非门调整数据延迟,从而保证本级模块的时钟对上级模块数据的建立、保持时间要求。还有一些工程师 为了有稳定的采样,生成了很多相差90度的时钟信号,时而用正沿打一下数据,时而用负沿打一下数据,用以调整数据的采样位置。这两种做法都十分不可取,因 为一旦芯片更新换代或者移植到其它芯片组的芯片上,采样实现必须从新设计。而且,这两种做法造成电路实现的余量不够,一旦外界条件变换(比如温度升高), 采样时序就有可能完全紊乱,造成电路瘫痪。

 

下面简单介绍几种不同情况下数据接口的同步方法:

1. 输入、输出的延时(芯片间、PCB布线、一些驱动接口元件的延时等)不可测,或者有可能变动的条件下,如何完成数据同步?

 

对于数据的延迟不可测或变动,就需要建立同步机制,可以用一个同步使能或同步指示信号。另外,使数据通过RAM或者FIFO的存取,也可以达到数据同步目的。图4

 

把数据存放在RAM或FIFO的方法如下:将上级芯片提供的数据随路时钟作为写信号,将数据写入RAM或者FIFO,然后使用本级的采样时钟(一般 是数据处理的主时钟)将数据读出来即可。这种做法的关键是数据写入RAM或者FIFO要可靠,如果使用同步RAM或者FIFO,就要求应该有一个与数据相 对延迟关系固定的随路指示信号,这个信号可以是数据的有效指示,也可以是上级模块将数据打出来的时钟。对于慢速数据,也可以采样异步RAM或者FIFO, 但是不推荐这种做法。

 

数据是有固定格式安排的,很多重要信息在数据的起始位置,这种情况在通信系统中非常普遍。通讯系统中,很多数据是按照“帧”组织的。而由于整个系统 对时钟要求很高,常常专门设计一块时钟板完成高精度时钟的产生与驱动。而数据又是有起始位置的,如何完成数据的同步,并发现数据的“头”呢?

 

数据的同步方法完全可以采用上面的方法,采用同步指示信号,或者使用RAM、FIFO缓存一下。

找到数据头的方法有两种,第一种很简单,随路传输一个数据起始位置的指示信号即可,对于有些系统,特别是异步系统,则常常在数据中插入一段同步码(比如训练序列),接收端通过状态机检测到同步码后就能发现数据的“头”了,这种做法叫做“盲检测”。

 

上级数据和本级时钟是异步的,也就是说上级芯片或模块和本级芯片或模块的时钟是异步时钟域的。

 

前面在输入数据同步化中已经简单介绍了一个原则:如果输入数据的节拍和本级芯片的处理时钟同频,可以直接用本级芯片的主时钟对输入数据寄存器采样, 完成输入数据的同步化;如果输入数据和本级芯片的处理时钟是异步的,特别是频率不匹配的时候,则只有用处理时钟对输入数据做两次寄存器采样,才能完成输入 数据的同步化。需要说明的是,用寄存器对异步时钟域的数据进行两次采样,其作用是有效防止亚稳态(数据状态不稳定)的传播,使后级电路处理的数据都是有效 电平。但是这种做法并不能保证两级寄存器采样后的数据是正确的电平,这种方式处理一般都会产生一定数量的错误电平数据。所以仅仅适用于对少量错误不敏感的 功能单元。

 

为了避免异步时钟域产生错误的采样电平,一般使用RAM、FIFO缓存的方法完成异步时钟域的数据转换。最常用的缓存单元是DPRAM,在输入端口使用上级时钟写数据,在输出端口使用本级时钟读数据,这样就非常方便的完成了异步时钟域之间的数据交换。

 

2. 设计数据接口同步是否需要添加约束?

 

建议最好添加适当的约束,特别是对于高速设计,一定要对周期、建立、保持时间等添加相应的约束。

 

这里附加约束的作用有两点:

 

a. 提高设计的工作频率,满足接口数据同步要求。通过附加周期、建立时间、保持时间等约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率,满足接口数据同步要求。

 

b. 获得正确的时序分析报告。几乎所有的FPGA设计平台都包含静态时序分析工具,利用这类工具可以获得映射或布局布线后的时序分析报告,从而对设计的性能做 出评估。静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具输出正确的时序分析报告。

 

Xilinx和数据接口相关的常用约束有Period、OFFSET_IN_BEFORE、OFFSET_IN_AFTER、 OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER等;Altera与数据接口相关的常用约束有Period、tsu、tH、tco 等。

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(148)
发表于:2008-7-18 21:45:50
标签:无标签

0

基于NIOS II处理器的面阵CCD采集系统设计

SOPC (片上可编程系统)是Altera公司提出的一种灵活、高效的SOC解决方案,能将处理器、存储器、I/O 口等系统设计需要的功能模块集成到一个PLD器件上,构建一个可编程的片上系统。本文介绍的面阵CCD采集系统,利用Altera的SOPC Builder定制的NIOS II软核处理器及与采集相关功能的“软” 硬件模块来实现信号的采集。它与目前具有同样功能的CCD采集系统相比,具有灵活、稳定、易升级、易维护等优点。本系统的实验在现有的数码相机平台上进 行。

1 系统设计
    系统原理框图如图1所示。目标物经光学镜头成像于在RJ21P3AH0PT的光敏面上,产生电荷包强度分布的图像,RJ21P3AH0PT为隔列转移面阵 CCD,在四相垂直驱动脉冲和两相水平驱动脉冲来驱动下,通过CCD内部将光信号转化为电信号。当LR38642的时序发生器对其施加特定时序脉冲时,每 个像素的电荷信号将被依次移出CCD,并经放大变成电压幅度不等的模拟视频信号OS。OS视频信号送到LR38642的模拟前端电路并转换为数字信号,在 NIOS II处理器的控制下通过自定制的CCD采集控制接口以及NIOS II处理器的Avalon总线,将图像数据高速地存储到外部存储器SDRAM中。
 

2 系统硬件及功能模块
2.1 CCD芯片及专用控制芯片LR38642
    本系统面阵CCD采用夏普公司的RJ21P3AH0PT 图像传感器,如图2所示,它为1/1.8英寸,330万象素(2096*1560),有效象素为321万(2080*1544)。它具有高感广度,暗电流 非常小,要求的水平驱动脉冲频率为18MHz,需要4相垂直驱动脉冲和两相水平驱动脉冲来驱动。对其驱动控制选用专用集成控制芯片LR38642,它集成 了时序发生器(LR38617)、垂直驱动器电路(LR36685)以及模拟前端模块(IR3Y48A1)等功能,如图3所示。
 
LR38642功能框图 
2.2 NIOS II处理器
    本系统中FPGA选用Altera Cyclone EP1C6Q240,在实现对NIOS II处理器硬件开发时,使用嵌入在QuartuslI中的SOPC Builder来创建相应“软” 硬件,通过NIOS II Development Kit来实现相应模块之间的开发,为实现面阵CCD的采集所选用的相应外设自己定制,其中CCD采集控制IP 自定制。具体外设架构及内核结构框图如图4所示。