您的位置:首页 > 其它

(转)CycloneIII设计向导

2010-04-09 16:24 162 查看
全文地址:http://blog.ednchina.com/ishock/190136/message.aspx

CycloneIII设计向导-第一篇.芯片选型
公司开始用CycloneIII芯片,因此打算把Altera的官方文档,AN466:Cyclone III Design Guidelines详细的阅读一遍,并撰写一系列的博文。文章的组织框架按照altera的来,除了摘要原文档的内容,我也会加上自己的很多心得。
该笔记不会一次就完成,我会慢慢把它补充完整。

第一篇:芯片选型

1.考虑器件的资源,包括LE,ram资源,硬件乘法器,PLL,全局时钟网络等。
总体来说,对于FPGA设计,资源一定要留有余量,否则最后的时序收敛会比较困难。我认为使用80%左右是比较合适的。对于资源使用量在95%以上的设计,除了时序收敛,可能还会遇到一些你想不到的问题。

A. LE是5K到120K。要对设计需要的资源做一个估算,120K,对于大部分的应用,应该是一个很大的数字了。

B.ram资源为400K-3888Kbit.注意ram块的大小都是9Kbit,有些模块,比如fifo,实际上用不到9K的资源。但不管你用多少,都得占用一个ram(有些情况下占用0.5个ram)。所以ram的数量是否足够也得考虑。

C.乘法器的数量 23-288个。注意是18*18bit的乘法器。实际使用时,要看应用需要的乘法器精度是多少。

D.PLL的数量为2-4个。每个PLL可以输出5个时钟,一般的设计够用了。如果设计中的时钟很多,就得仔细考虑了。

E.全局时钟网络为10-20个。一般够用,如果设计中有很多时钟或者很多扇出(fan-out)很大的信号,比如复位信号,也得仔细考虑。

2.考虑引脚,封装和迁移

A.引脚数量。设计前,就要考虑需要多少普通IO(LVTTL),这个应该是比较好计算的。电平有几种,因为一个bank只能1个IO电平。需要多少LVDS管脚,一些小封装器件的LVDS管脚很少。

B.封装。封装影响到引脚数量。还影响到焊接的难度。EQFP和PQFP当然好焊接也好拆卸,如果是BGA的,一般需要找专人焊接(需要专门的工具),价格也贵。布线难度:用BGA,还得出注意ball pitch(焊接球的间距)。1.0mm的当然比0.8mm的好布线。F780比F484的外圈引脚数量多,当然也好布线一些。体积:也就是芯片的大小了,比如用于移动和手持应用,就得考虑大小了。不过体积小,布线就难,所以这时pcb的层数往往从6层起,上不封顶。

C.器件迁移。也就是相同封装,资源不同的器件可以直接替换使用。当然都得是CycloneIII的器件。这样的好处在于,初期设计时可以用大规模的器件,设计成功后,根据实际的资源使用情况,更换更经济的器件来量产。具体的型号替换,文档上说得很清楚,这里就不说了。如果考虑型号替换设计,要仔细核对每个芯片的引脚文档,最后决定出画原理图时芯片的引脚定义。这里说一个技巧,那就是规模最大的芯片的引脚定义,一般是最接近的,但也会有修改。

3.考虑器件速度

速度分为-6,-7,-8。-6是最快的,也是最贵的。每一档次速度相差20%,包括内部工作频率和IO速度。FPGA的实际最高工作频率和这些数字无关,和具体的设计相关。我的经验是,对于很多代码,-8的器件能跑到130MHz左右。以前用CycloneII的-8器件,只能跑到110MHz左右。说明CycloneIII比II还是有进步的。

额外说一点,器件还分商业级,工业级和汽车三种类型。我们一般采购的都是商业级器件。差别在于温度范围和稳定性。如果产品的工作温度在在0-70度之间,稳定性要求也不是太高,用商业级就可以了。要求高,那就多出钱吧。
官方文档的下载链接:http://www.altera.com.cn/literature/an/an466.pdf

以后的部分:
第二篇.早期系统规划
第三篇.板级设计考虑
第四篇.设计和编译
第五篇.验证
第6篇.调试
第7篇.测试
第8篇.其它考虑

CycloneIII设计向导-第二篇.早期系统规划

1.早期功耗估计

需要提早就估算好芯片的功耗是多少,才能做好供电设计和散热设计。
下面是Altera对于Cyclone III器件的功耗估计excel表格:
http://www.altera.com.cn/support/devices/estimator/cy3-estimator/cycloneiii_epe_72sp1.xls
如果设计已经基本完成,QuartusII软件也可以根据实际设计估算功耗。

2.I/O支持

A. 三类I/O标准,包括Single-ended(单端),Voltage-referenced(参考电压),Differential(差分)。三者各有优缺点。不过在实际应用中,使用哪种标准,往往由FPGA连接的芯片决定。

B.灵活的I/O bank。8个bank的I/O电压和Vref参考电压可以不一样,但在每个bank内部必须一致。在I/O电压确定的情况下,还可以有一定的兼容性。比如2.5V和3.3V的兼容性。

C.外部内存接口。支持ddr,ddr2,qdrII,需要专门的管脚。以前的sdram和sram当然也支持,不需要专门的管脚(把时钟脚小心处理更好)。使用top和bottom的bank速度更快,最快支持200MHz。这里简单介绍,做高速设计,得多查文档。

D.Pin-Out文件。QuartusII工程编译后会生成该文件,里面对引脚的描述就是该引脚最终确定的功能。对这个文件的检查,可以帮助我们明确问题。一些多功能引脚,需要小心处理。

3.选择FPGA配置方案

下面是原文中的配置方案的表格,说得很清楚。





配置方案很多,包括
Active serial (AS):
单芯片,使用Altera的EPCS系列芯片,配置速度第3。芯片价格较贵。
Active parallel (AP):
单芯片,使用特定型号的FLASH(INTEL P30,P33),配置速度第1。芯片价格便宜。但需要占用FPGA 40个管脚(16data+24addr)。
Passive serial (PS):
被动方式,需要额外的控制器参与。配置速度第4.
Fast passive parallel (FPP):
被动方式,需要额外的控制器和flash芯片。配置速度第2。flash芯片价格便宜。需要占用FPGA 8个管脚(8data)。
Joint Test Action Group (JTAG)——调试使用

配置方案的选择,由MSEL pin控制。
选择考虑:是否需要fast power-on reset (POR) time ,达到快速上电工作的目的。
封装不同,支持的配置方案也不同。
配置方案的选择,需要考虑配置时间的要求。
AS和AP模式,FPGA的DCLK为输出,最大速度40MHz。PS和FPP模式,FPGA的DCLK为输入,上升沿采样。最大速度为100MHz。

下载电缆包括:
USB-Blaster,目前最常用的。价格中等,下载配置文件到FPGA的速度快。不想购买的话,可以从网上下载pcb,采购器件自己做。
ByteBlaster II,常见,最便宜,但是下载速度慢。同样可以自己做。器件规模大了用这个会慢得很痛苦。
EthernetBlaster,不常见,价格贵,下载速度快。
目前,强烈建议使用USB-Blaster,除非对价格太敏感。

可以通过FPGA的JTAG接口,烧写EPCS配置芯片。需要用到Serial Flash Loader这个Altera提供的IP核。
使用MAX II芯片,PS或者FPP模式,也有MAX II Parallel Flash Loader这个IP核,来通过MAX II芯片JTAG烧写FLASH。
AP模式,有FPGA-Based Parallel Flash Loader这个IP核,通过FPGA的JTAG烧写FLASH。

4.配置特性

AS和PS模式,配置文件可以选择压缩模式,能减少配置文件的大小。
远程系统升级,不熟悉,待补充

5.PLL锁相环

强大的PLL功能,包括时钟倍频,分频,相移,可编程占空比,输入时钟切换,PLL级联,PLL动态重配,动态相移,扩展频谱时钟,外部时钟输出和控制信号。
相对于Cyclone和Cyclone II,现在Cyclone III增加了PLL的动态重配功能。
PLL的时钟输入,必须使用FPGA的专用时钟输入脚(dedicated clock
input pins)或者另一个PLL的时钟输出。也就是说,PLL可以级联。
输入时钟切换:可以给PLL输入双时钟,当使用的输入时钟失效时,可以自动或者手动切换使用另一个备用输入时钟。
PLL有5个输出。如果要输出到专用外部时钟输出脚,建议用C0输出,这样jitter最小。当然也是可以使用其它的输出的。
如果对输入时钟和PLL的输出时钟,有相位上的要求,就得了解PLL的相位补偿模式的设置。

6.芯片内部调试方法
A.SignalProbe Incremental Routing 不改变目前的布线,引出内部信号到一个没使用的I/O上。
B.SignalTap II Embedded Logic Analyzer 嵌入式逻辑分析仪,可以捕捉实时的内部信号。是最常用的调试工具。需要消耗一定的LE和M9K资源。使用时,如果想减少对原设计的影响和编译时间,可以反标原设计,使用增量编译模式。
C.Logic Analyzer Interface 等效于多路选择器,把多个内部信号通过少量的管脚输出。可以切换输出哪些信号而不用重新编译。适合于把信号引出给外部的逻辑分析仪。
D.In-System Memory Content Editor 在线修改内存或者常量的值。
E.In-System Sources and Probes 能对内部节点给一个简单的激励信号,然后捕获输出。
F.Virtual JTAG Megafunction 能对内部节点给一个简单的激励信号,然后捕获输出。和上面的方式有不同的地方。


配置方案.jpg (189.39 KB)

2009-9-22 22:45

CycloneIII设计向导-第三篇.板级设计考虑

1.I/O方面的考虑

A.3.3/3.0/2.5V的普通I/O接口,如果接的外部信号是相同电压,就不用考虑太多。如果电压不同,就得仔细计算有没有问题。

B.引脚设置考虑。单端和差分信号的引脚必须保持一定的间隔。如果使用了参考电压的单端信号,也会有间隔上的要求。这是为了减少信号之间的干扰。QuartusII软件会检查引脚分配是否符合规则,如果不符合,设计是无法编译的。
如果实际信号是稳定的,没有翻转的(比如一直保持高或者低),可以通过assignments设置,避开规则检查。对某个单端引脚设置Toggle Rate assignments,可以去掉这个引脚和差分信号的间隔要求。Output Enable Group assignment这个设置,可以解决电压参考信号的间隔要求。

C.减少同时开关噪声(SSN)。方法:
1).把同时翻转的引脚分隔得远一些,放在2个不同的bank中更好
2)高速引脚,要远离VCC和GND,把静态和未使用的引脚靠近VCC和GND
3)对高速引脚设置slow slew rate和lower drive strength
4)做好匹配(termination,或者叫端接)
更详细的说明参考AN 508: Cyclone III Simultaneous Switching Noise (SSN) Design Guidelines.

D.未使用管脚的设置 。最好设置为输入。设置为输出,又接了外部电路,可能会导致芯片管脚损坏。

E.匹配方案。通常,信号的发送端使用串行匹配,接收端使用并行匹配。匹配电阻要符合传输阻抗。如果有可能,最好做板级的模拟来选择匹配电阻的大小。Cyclone III芯片有部分管脚可以设置片内串行匹配电阻OCT。

F.板级模拟。Altera提供芯片的IBIS和HSPICE模型,可以用来仿真。

2.供电考虑

A.供电电压包括
Vccint 内核电压,1.2V
Vccio I/O电压 ,每个bank可以不一样 。3.3V最常用。
Vcca PLL的模拟供电电压,2.5V 比Cyclone II芯片高
Vccd_pll PLL的数字供电电压,1.2V
Vref 电压参考信号的参考电压
建议使用linear regulator给Vcca供电,对其它数字电压,使用linear 或者 switching regulators。用linear regulator的噪声会好一些。
电源芯片和FPGA之间,需要串联磁珠(ferrite bead),电容一端接电源,一端接地。去耦的电路根据具体的设计要求决定。有钱就用钽电容(tantalumcapacitors)。
pcb设计,最好有专门的电源层。

B.PLL的供电。PLL包含模拟器件,因此有更严格的供电的要求。
1)到Vcca的电源走线要宽,20mil
2)Vccd的电源要干净
3)所有的pll供电脚都要连好,无论是否使用这个pll
4)使用独立的linear regulator对PLL供电
5)每个Vcca和Vccd都要去耦电路,Altera有参考设计
6)Gnda要连接到隔离的模拟地上。

3.器件上电

Cyclone III芯片支持热切换和上电复位,不需要额外的复位芯片。
下面是上电过程:





Cyclone III对于Vccint,Vccio等电压的上电顺序没有要求,只要是单调上升的就可以了。对上电时间,如果是正常的POR,<50ms即可。如果设置为快速POR,那么上电时间<3ms。
如果需要支持热插拔,需要考虑更多。
芯片的POR电路,会检测Vccint和Vcca的电压,如果低于阀值,会复位芯片。但不会检测Vccio电压。
总结一句,Cyclone III芯片的电源管理很好,省了很多外部芯片。

4.配置管脚连接

具体的配置电路,有参考设计。注意和Cyclone II有所不同,最好不要沿用老电路(似乎用老电路也可以跑^_^)。





这是常用的配置方式。其它配置方式的参考电路也都有,注意任何方式都得要按照参考电路来,不能想当然的连接。

5.配置的相关细节

用AS配置模式,bank1的Vccio必须为3.3V。
Cyclone III的DCLK为40MHz,EPCS器件中,EPCS16和EPCS64都能支持。但EPCS4器件有0.18和0.15两种工艺批次。前者只能支持20MHz,因此不能配合Cyclone III使用。
使用AP模式,需要P30和P33的flash。同样的,flash需要支持40MHz的DCLK。注意TSOP封装不支持这个速度,FBGA封装支持。
下图为配置芯片的选择






上电过程.jpg (50.5 KB)

2009-9-22 22:48


配置电路.jpg (468.04 KB)

2009-9-22 22:48


配置芯片.jpg (180.5 KB)

2009-9-22 22:48

CycloneIII设计向导-第四篇.设计和编译 (上)

写这个系列的文章同时,可以让自己加深对设计各方面的理解。如果发现有不清楚的地方,我会查阅相关的文档,理解后,再写一些专门的文章。

一.设计入口

Quartus II支持原理图和HDL语言的输入。原理图更适合简单的设计,HDL语言适合复杂的设计。但要注意,如果想使用第三方的综合工具,就必须用HDL语言。
对于HDL语言,最好遵循一定的代码风格。在Quartus II的手册上,可以找到专门讲解这方面的章节。(我对这方面也不熟悉,将会好好看看)。Quartus II软件的文本编辑器,可以插入很多语言相关的模板,这个功能不错。不过还是习惯用UltraEdit写代码。
对于一些FPGA内部的资源模块,通常既可以直接调用Quartus II的ip核,也可以用HDL语言来描述,比如RAM资源。

选择综合工具:Altera支持很多第三方的综合工具,个人比较喜欢用SynplifyPro。这些工具生成.edf或者.vqm文件,然后QuartusII再进行布局布线。怎么在Quartus II中调用这些工具,最好的方法就是去看Quartus II Handbook,里面讲得非常清楚。如果你看得懂英文,Handbook写的东西是最适合你的。

SOPC生成:Altera的SOPC功能很强大。

IP:Altera和第三方合作伙伴提供了很多的IP,可以让设计变得更快捷。特别是Altera提供的,可以直接试用。

宏功能(Megafunction):ALtera封装了很多资源和模块,用Megafunction的形式给用户调用,只用设置一些参数,就可以正常使用这些模块了。

二.设计建议

Quartus II手册有专门的章节讲设计方面的一些建议。

同步设计:setup和hold time的充分保证,能减少毛刺等的干扰。使用Cyclone III I/O的输入寄存器(注意,不是普通的LE),这样芯片的输入信号能更好的滤除毛刺。需要设置”Fast Input Rgedister”,来使用该寄存器。

应该通过良好的同步设计,而不是使用LCELL这样的单元来控制特定路径的延迟。因为FPGA内部路径的延迟是不确定的,会在设计中因为每次布局布线不同而改变,会在使用中因为温度,电压等因素改变,还会因为工艺的差异而改变。为了增加设计的稳定性,尽量提高时序分析时路径的余量。虽然时序分析已经是按芯片在最差状况下的时序特性来分析,但多留一点余量还是有好处,在设计允许的情况下。

时钟:时钟在同步设计中是非常重要的。
A.
时钟当然得用专用时钟引脚输入,用普通I/O会导致更严重的时钟偏移。高时钟偏移会导致hold time违规。时钟在芯片内部会使用全局时钟网络,全局异步复位信号也可以使用全局时钟网络。全局时钟网络能保证信号1点到多点的相同延迟。也就是说,某个信号,从输入引脚,通过全局时钟网络,到内部的各个寄存器,虽然走的是不同路径,但这些路径的延迟是一样的。
B.
内部生成的时钟。组合逻辑不能处理毛刺,对组合逻辑的输入信号,用高频时钟过滤毛刺,对组合逻辑的输出信号,也可以用高频时钟过滤毛刺。
C.
时钟分频。使用PLL,可以对时钟分频。PLL还可以精确控制输出时钟的相位。
D.
时钟翻转。使用PLL对时钟相位改变,比使用非门效果更好。
E.
多时钟输入。对于一个PLL,可以设置一个主时钟和一个备用时钟。
F.
门控时钟。建议使用Altera提供的专门模块altclkcrtl来实现门控时钟。如果只是想控制输出的稳态,可以对输入加上ena信号,这样还是保持了同步设计。门控时钟和非门控时钟之间是非同步的。门控时钟的控制信号,必须滤除毛刺,否则会影响输出的时钟。对时钟进行门控的位置尽量靠近时钟源,可以减少时钟延迟。

三.芯片级的复位

Cyclone III芯片,支持芯片级的复位,包括清除M9K中的内容。需要开启DEV_CLRn引脚功能。该引脚默认为普通I/O。

四.寄存器上电电平

可以设置寄存器上电时是高电平还是低电平。当然默认是低电平。通过设置Power-Up Level参数实现。

五.设计约束

Quartus II提供了设计约束检查功能,通过该检查,能提高设计的可靠性。检查包括时钟,复位,异步设计等。该项功能默认没有开启。

六.分层和基于团队的设计

增量编译,可以减少设计迭代需要的时间,减少时序收敛需要的时间。

对设计分区(分割),是增量编译的基础。如果用第三方的综合工具,需要生成若干独立的.vqm或者.edf文件。顶层的各个模块之间,最好只有互连线,而没有任何逻辑,逻辑都应包含在各个模块内部。

时序预算和资源分配:模块内部的时序路径可以单独优化好。但如果是跨分区的时序路径,只能在集成后优化。这些时序路径可以通过加上约束来达到要求。资源的分配也要提前计算好,以免集成后出现冲突。除了常见的资源,注意全局时钟资源也是有限的。

计划从底向上和基于团队的流程:在进行底层设计前,必须要知道顶层的相关信息,包括引脚分配,物理约束和时序要求等。Quartus II提供了一些脚本(Generate bottom-up design partition scripts)来实现顶层信息向底层的传递。

可以通过LogicLock实现对设计在物理上分区。通常对时序要求很难达到的模块,才进行LogicLock。对一般模块进行LogicLock反而降低了布局的灵活性。Quartus II的Chip Planner功能,可以精确到对寄存器进行布局,估算物理延迟,观察模块间的连接。

下面为下篇的内容:
七.功耗优化
八.I/O考虑
九.PLL考虑
十.配置软件的设置
十一.
有效pin的布局

CycloneIII设计向导-第四篇.设计和编译 (下)

七、功耗优化

Quartus II软件支持功耗优化的综合和布局布线选项。不过,时序约束比功耗优化的优先级要高,得先满足前者再考虑后者。软件包含了功耗优化的向导,易于使用。DSE也是一个很好的优化工具。

下面是一些从设计角度进行功耗优化的方法:
1.
时钟功耗管理。Quartus II会自动对时钟网络的功耗进行优化。也可以自己使用门控时钟来减少功耗。
2.
内存功耗。减少内存功耗的方法是,使用内存的门控时钟信号。
3.
I/O功耗。决定I/O功耗的因素包括:负载电容,输出频率,输出电压摆幅。电压参考的I/O标准(比如SSTL)的电压摆幅比LVTTL和LVCMOS要低,因此动态功耗低一些。但静态功耗反而高一些。
4.
寄存器插入。在复杂的组合逻辑中插入寄存器,能减少毛刺带来的动态功耗,但也增加了寄存器功耗。
5.
结构优化。使用DSP模块进行数学计算,而不是使用LE。大的移位寄存器使用ram资源实现的FIFO,而不是使用LE。这样都能减少功耗。

八、I/O考虑

Cyclone III芯片的I/O特性比以前的更强大。I/O的设计流程包括:创建pin相关的配置,验证配置是否符合规则。

管脚分配工具(Pin Planner):
Package View(默认视图):提供了可视化的芯片封装,能更直观的分配管脚,避免拥挤。能用不同的方式显示芯片的封装,包括分bank,显示差分管脚,显示已分配管脚等。如果你分不清芯片的哪一边是TOP,可以使用Show Edges,然后你就知道了,bank12是LEFT,bank34是BOTTOM,bank56是RIGHT,bank78是TOP。
Pad View:提供了芯片核心(裸片)的引脚分布顺序。注意某些引脚分布规则,在芯片封装后(比如BGA封装)可能难以理解,但看看裸片的引脚分布就知道了。
Pin Migration View:如果你设计时要考虑器件迁移(兼容),那么用这个视图是最方便的,选择好要兼容的器件,直接就会生成每个引脚的最终选择。按照这个视图的结果做封装就可以了。

配置工具(Assignment Editor),管脚相关的配置:
1.
输出电流(Current Strength):每个I/O标准都可以配置输出电流大小。注意增大电流,会提高I/O性能,但也会提高噪声。电流过小也会有影响,特别是对输出的时钟信号。因此选择合适的电流大小很重要。
2.
摆动(变化)速率控制(slew rate control):对于高速的数据总线,Altera建议打开这项设置,用来降低SSO干扰。这项设置只支持单端的I/O标准,大于等于8mA以上的电流。这项设置的具体使用,会再补充。
3.
片内串行匹配(OCT):OCT有两种模式,校准和非校准。在非校准的情况下,默认选择25欧和50欧的电阻。校准模式下,RUP和RDN管脚需要连接25欧或者50欧的精密电阻,芯片会在FPGA的配置时期,进行校准,设置更准确的OCT值。
4.
专用差分输出缓冲单元:left和right的I/O bank有此单元,最大LVDS输出速率达840Mbps,且不需要外部的发送匹配电阻。这个单元还能对输出信号进行可选择的预加重。信号在线缆中传输时,高频成分的衰减,相对于低频成分要大。因此在输出时,对高频成分适当放大,这样能减少接收端的高频成分和低频成分的不平衡。注意配置选项的名称为(Programmable Pre-emphasis)。

九、PLL考虑

Cyclone III有4个独立的PLL单元(EP3C5和EP3C10只有2个)。PLL的输入时钟只能是专用时钟输入或者是另一个PLL的输出时钟。PLL的C0输出到专用时钟输出脚,可以达到最好的布线效果。
PLL模块可以进行功能仿真和时序仿真。

十、配置软件的设置

1.
可选的配置管脚。Enable user-supplied start-up clock (CLKUSR),这个选项用来控制,是否使用外部时钟来初始化FPGA。FPGA默认用10MHz的内部时钟来初始化。Enable INIT_DONE output,这个选项如果打开,当FPGA配置完成时,该管脚会由低变高。如果使用,需要外部10K欧的上拉。
2.
自动重配。打开auto-restart configuration after error option这个选项,当FPGA配置错误时,会自动重新配置。
3.
估算配置文件大小。rbf格式的文件大小,最接近原始的未压缩文件大小。
4.
转换配置文件的格式。可以把原始的sof文件转化为pof,hexout,rbf,ttf,rpd,jic这些格式。pof和jic是Quartus II烧写软件支持的格式,其它格式用于其它烧写软件。如果要做到多器件配置,可以把多个sof合在一起,转化为一个配置文件。合在一起的顺序需要注意,和配置的顺序是相关的。

十一、
有效pin的布局


1.
I/O配置检查。Start I/O Assignment Analysis命令,可以用来检查I/O配置有没有违规的地方。
2.
直流相关。输入或者输出电流过大都会损坏芯片。典型的例子是,输出高的引脚直接接地,输出低的引脚直接接Vcc。每个I/O引脚,最大输出40mA,输入25mA。引脚如果要拉高或者拉低,一定要串联外部电阻。还要注意,连续引脚的总输出电流是有限制的。因此,尽量分散管脚的使用,而且适当限制电流是有必要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: