|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 G) ]3 a6 {% c1 \
' l# e5 J$ n" k9 K2 d FPGA是一个高级东西,并且现在越来越广泛的被硬件工程师所运用,FPGA——逻辑可编程器件。在硬件电路设计的时候可以使用一片FPGA完成加法器,选择器,存储器等许多数字芯片的功能,并且由于技术的发展,芯片成本的降低,使得越来越多的硬件工程师接触到这个器件,用于大型电路设计。
8 J0 q# c* R1 ~) h6 Q CYCLONEⅡ系列FPGA器件由美国Altera公司出品,属于中端产品。采用了90nm的工艺,增加了片内逻辑单元数。为了方便说明,在此仅选用EP2C5进行分析讲解。5 `8 Z3 ^+ y1 R1 c. P9 t6 F
先了解一下FPGA的命名规则,这样就可以从芯片名字的角度来看这是怎么样性能的一款芯片了。- A' W5 L: c2 y' N1 P6 f% o
例如EP2C20F484C6,含义:
' w8 Y# @9 \( n' o' \% t EP——工艺,' O* I/ |' I* s" J( D
2C——cyclone2,
9 M7 \- P$ C/ h0 J0 q 20——LE数量约为20K,
$ J8 K- Q! Y2 G2 E8 a' t( } F——封装形式,
* S" r6 D I/ H( }) z% [) S' O 484——管脚数,
' ^: i& `$ C0 C$ v3 O C——温度范围(确定其是工业级,军品级,还是商业级),: n6 y8 s: j5 d& e/ k7 d3 ~
6——速度(数字越小速度越快)。0 _- D. q% Q) }4 A6 } w6 [) w; ]
6 \& {+ ~2 b! K* t+ _. X 言归正传,了解一下CYCLONEⅡ系列FPGA的结构。先拿EP2C5为例进行分析学习。介绍一下EP2C5的逻辑资源。
$ J) Q9 V, U" x) p- h LE数——4608,- X6 Z; B- [/ [+ \ c; ?
M4K存储块数——26,
0 L5 m5 e$ u; E+ p 总计存储器容量/bits——119808,
+ U1 A: {' T. S+ w s 乘法器数——13,
5 \# X& w& J t 锁相环数——2。) {, E3 l; C( M' q+ G' e
: P0 P8 a6 s4 n, m, K) S8 c1 U 1、逻辑单元与逻辑阵列。+ [1 w: ^9 v% n h7 `$ E, x
逻辑单元(Logic Element,LE)在FPGA器件内部,用于完成用户逻辑的最小单元。一个逻辑阵列包含16个逻辑单元以及一些其他资源,在一个逻辑阵列内部的16个逻辑单元有更为紧密的联系,可以实现特有的功能。
+ o5 V+ B5 Q/ @$ H) X0 r 一个逻辑单元主要由以下部件组成:一个四输入的查询表(LookUp Table,LUT),一个可编程的寄存器,一条进位链,一条寄存器级连链。
- t N- H2 m! h2 ~ 查询表:用于完成用户需要的逻辑功能,CYCLONEⅡ系列的查询表示4输入1输出的,可以完成任意4输入1输出的组合逻辑。% a. I# H7 X- p
可编程寄存器:可以配置成D触发器,T触发器,JK触发器,SR触发器。每个寄存器包含4个输入信号,数据输入、时钟输入、时钟使能、复位输入。
9 b& _5 Z! Z9 T4 J# L2 ?4 D% _3 F
2 ?. W6 ^. q) `# V% b. B 一个逻辑单元包含3个输出,两个用于驱动行连接、列连接、直接连接,另外一个用于驱动本地互联。这三个输出是相互独立的。输出信号可以来自于查询表也可以来自于寄存器。. M2 [4 z" I$ |0 F& f( w7 d K
本地互连通路是逻辑阵列的重要组成部分,芯片级设计思路上的考虑与节省我们就不讨论,从实际运用出发,直接看看这个互连通路是干什么用的。本地互连通路提供了一种逻辑阵列内部的连接方式,问一句逻辑阵列内部是什么?不要忘了哈是16个逻辑单元。继续。逻辑阵列内部还包含一种对外的高速连接通路,称之为直接连接通路。. E5 j/ m0 l9 R: A4 P; C
直接连接通路连接的是相邻的逻辑阵列,或者与逻辑阵列相邻的M4K存储器块、乘法器、锁相环等。 a/ a$ [/ a: d2 K
: E* ^3 ?$ a3 \0 [6 e. M4 o! g) C
CYCLONEⅡ系列FPGA的逻辑单元有两种工作模式:普通模式和算数模式。6 L% J" C: r! l+ K l' u+ _
普通模式适合于一般的逻辑运算。算数模式适用于实现加法器、计数器、累加器、比较器等。3 I9 v; w$ N8 d
- L/ F+ |0 b: d3 s' R 逻辑阵列的主体是16个逻辑单元,另外还有一些逻辑阵列内部的控制信号以及互连通路。前面所讲的互联通路和直接连接通路就是逻辑阵列中的部分。9 y, `- B# w2 U8 Y6 U& q- @
逻辑阵列还包括一些控制信号:两个时钟信号,两个时钟使能信号,两个异步复位信号,一个同步复位信号,一个同步加载信号。这些信号的使用时有一定要求和规范的,在此就不详细叙述了,等到使用的时候再去查阅书籍《Altera可编程逻辑器件的应用与设计》。9 Z6 Q d& l; l# B; ~
! y( b% }, i9 s; ~: w
& n6 |$ | v6 f' J, N 2、内部连接通路( B% [' g$ K& P: f. R
在FPGA内部存在各种连接通路,连接不同的模块,比如逻辑单元之间、逻辑单元与存储器之间。FPGA内部资源是按照行列的形式排列的,所以连接通路也分为行列的。
; d) U8 P5 m9 f$ `+ ^, h 行连接又分为R4连接、R24连接和直接连接。R4连接就是连接4个逻辑阵列,或者3个逻辑阵列和1个存储块,或者3个逻辑阵列和1个乘法器。简单地说就是连接4个模块吧。R24就是24个模块。列连接是C4,C16,含义不用说了吧,是连接4个模块和16个模块。" ~: f: }1 U' O- [' C
5 |1 d9 S: A) p( F
由于不同型号的FPGA所拥有的连接通路不同,所以在我们选择使用的时候要注意了,我们写的程序能否用底层的硬件阵列来满足。虽然我们在编写程序的时候不用去考虑这些线路是怎么连接的,但是出现线路问题的时候,在编译过程中出现警告,这时候一定要注意一下,这个警告在讲什么,是什么原因引起的,对我们电路的生成有没有什么影响。当然如果确定没有影响了就可以忽略了,不过对于一个过高精尖技术的工程师来说,警告就是错误。
/ n! J. e- f: x6 R
s8 L( h6 X% C2 M/ b. U % p' G. z) {9 z' U8 C5 I
3、时钟资源
& r. w( X, s8 t5 @7 E% | R, m CYCLONEⅡ系列FPGA有关时钟资源部分主要包括全局时钟树和锁相环两部分。
; ^+ |, {) I+ t4 ]+ r( k 全局时钟树又称全局时钟网络,负责把时钟分配到器件内部的各个单元,控制器件内部所有资源。锁相环则可以完成分频、倍频、移项等相关时钟的基本操作。* M- J4 v& t! U( z
* v4 V4 i4 |; s) t8 }( K, y" K
全局时钟树是一种时钟网络结构,可以为FPGA内部的所有资源提供时钟信号,这些资源包括内部的寄存器、内部的存储器、输入输出管脚寄存器等。
" i" X y' F2 e' [+ I) k3 Q- ~8 X CYCLONEⅡ系列FPGA中每条全局时钟树都对应一个时钟控制模块,时钟控制模块的作用是从多个时钟源种选择一个连接到全局时钟树,进而提供给片内的各种资源。这些时钟源包括锁相环的输出,专用时钟引脚的输入,两用时钟引脚的输入或者内部逻辑。! [( v4 O8 c& h, y k6 q1 z
专用时钟引脚是为时钟输入专门设计的引脚,在有可能的情况下应该尽量将时钟信号连接到专用管脚上。EP2C5有8个专用时钟引脚(CLK),4个位于芯片左侧,4个位于芯片右侧。
6 s! }( w4 y- m+ Z/ v" r 两用时钟引脚(DPCLK)通常用于介入时钟或者异步控制信号,EP2C5有8个两用时钟引脚,芯片每一侧两个。CYCLONEⅡ系列FPGA允许对两用时钟引脚的输入延时进行设置,是我们更好地控制时序。
6 t+ s D% Q% x 置于CYCLONEⅡ系列FPGA对全局时钟树的使用方式和限制,在此也不一一罗列开来,也要注意的是,时钟的链接也会受到这样或者那样的限制,如果在实际电路的过程中出现了问题,自然也会在编译过程中提示出来的,所以切记不要将所有警告都忽略掉,因为这些警告可能是程序设计中的漏洞,当某种状态浮现的时候会导致程序运行的不稳定。
4 i$ E& x" t' }! M
* j4 q( n. ]! K* c; A8 m3 v; X: [ 锁相环在FPGA中除了分频、倍频操作外,还进场用于内部时钟和外部时钟保持沿同步,提供需要的外部时钟输出等。EP2C5包含两个锁相环(PLL1,PLL2)。
R& c1 n9 X/ W 锁相环支持单端时钟输入和差分时钟输入。当采用单端时钟输入的时候CLK0~3作为时钟源提供给锁相环,当采用差分时钟输入的时候,CLK0、CLK1提供给PLL1,CLK2、CLK3提供给PLL2。只有专用的时钟输入引脚的时钟信号才能驱动锁相环。
* M K! i% O- H/ q" [ 锁相环最主要的目的是产生一个和外部输入始终保持同步的时钟信号,包括频率同步和相位同步。将锁相环的特性和功能总结一下有:分频倍频、相移、设置占空比、片内外时钟输出、时钟切换、锁定指示、反馈模式、控制信号。
. A \& j3 f, F& Z 锁相环结构里有PFD,相频鉴别器(Phase Frequency Detector, PFD)。什么是PFD呢,科普一下,其作用是比较反馈时钟信号同参考时钟信号的相位关系,然后给出控制信号用于调节压控振荡器的产生的时钟频率。锁相环结构里还有两个预分频器和三个后分频器(又称后比例计数器)。
2 J8 Y# `& |5 F5 |! n 锁定检测部分用于检测当前锁相环的状态,当参考时钟和反馈回来的时钟子信号同步的时候,锁相环进入锁定状态。* ~$ q# \9 J0 H) ` `& T# [
' W/ w- @' W% \5 c 锁相环部分的内容比较多,讲着讲着就感觉到东西的繁多了,本来想着不讲了,但是又怕自己没有讲述清楚,或者遗漏了什么知识点,所以还是决定继续总结并介绍下去,尽量用最平实的话,最精简的语句来介绍这一部分的相关内容。2 k1 o, }" | R! y, }" L0 |8 [0 Z. L
0 J# M' u& a& V D. W
完成反馈是锁相环最核心部分,CYCLONEⅡ系列FPGA的锁相环有三种反馈模式。
8 r7 D, d/ g1 R- L1 h! P) \4 I 普通模式:将全局时钟树的时钟信号反馈给相频鉴别器,从而保证内部寄存器的输入时钟与外部输入始终保持相位同步。% s, J$ p2 |3 l$ _. U6 e
零延时模式:锁相环将专用的外部输出时钟引脚的输出时钟反馈给相频鉴别器,从而保证输出时钟引脚上的时钟信号和输入引脚上的时钟是沿对齐的。* z4 v. R' y7 R* }; T R$ Q: X8 }6 K; m
无补偿模式:锁相环竟不会对全局时钟树作补偿,也不对外部时钟输出引脚作补偿。这样做的好处是可以简化反馈电路,改善时钟性能。$ a: p J- q$ I* w
3 \: @1 j0 K5 o2 u6 v# h% F) i
& h, f/ G3 `' d+ \* ] 写到这里我已经写了好几个小时了,边看书边总结边写,希望能给各位看客提供一点点有用知识,也不枉费点开这一片博文,如果有遗漏、错误或者问题,也望各位能够提出来,共同讨论学习进步。
% J3 x }1 r# y( B6 v0 R. H5 x4 A 接下来我将继续总结有关CYCLONEⅡ系列FPGA的内部存储器、乘法器和输入输出引脚,有需要的继续查阅,为了节省您宝贵的时间没需要的可以叉掉了。/ u8 W9 W1 }( L( y6 h8 q @/ D: `' M
9 k4 J" E! G8 ^ N/ D# }6 d
0 O3 B6 i" c$ l5 }* _
4、内部存储器: @ w" X; H3 |9 I) U; C- s |
CYCLONEⅡ系列FPGA的内部存储器是以M4K存储器块的形式存在的,每一个存储器块的大小为4608bit。M4K块包括输入/输出寄存器,作用相信大家都知道。还拥有本地互联通路,作用前面讲过了哦。1 I" ^" ^! S" _7 j" v$ ~
好的。直接来看端口吧,从端口看作用,了解怎样去控制。
3 B/ c' n5 A# K: N u9 x clock——输入——时钟信号
) l; p' r# ^4 }8 @" C3 Z5 ~ clock_en——输入——时钟使能信号& i1 ^- ^2 Y4 ^ ~: s6 \$ s
aclr——输入——异步复位信号
$ E1 e- a- m9 K8 D renwe——输入——读写使能信号! n- a0 Z! |2 E/ t3 q+ h, U
byteena——输入——字节使能信号5 T. d% d% S! Y$ X
addressstall——输入——地址锁存信号
- N* I& a( O7 ]8 a address——输入——地址% G. E" W& Z9 o1 J
datain——输入——数据输入
0 r5 l! @3 \- J) _. ` dataout——输出——数据输出
1 F3 ^- O; K6 _) _& [ 看了这些端口以及端口说明,相信作用就不言而喻了吧,换而言之,当我们想使用内部存储模块的时候,控制好这些端口的数据流就能够使用好这部分的资源了,当然存储器的使用离不开时序的控制,如果没有得到自己想要的结果,极有可能是时序控制部分出了问题。
) \& d- q/ G/ U; j: u 4 [" S3 g, @) N: G
CYCLONEⅡ系列FPGA中的M4K存储器可以被配置成以下模式:6 Y% J( j, w& |6 F. V) F
单口模式:存储器不能同时进行读写操作。
* ~9 U |% n8 I' y0 `3 t/ }6 R 简单双口模式:支持同时对存储器进行读写操作,读端口和写端口可以位宽不同,如果对同一地址进行读写,则输出端数据为改地址更新前的数据。
% G7 A" U6 t/ _/ q" A$ ~( s 完全双口模式:两个端口可以任意组合,同时为写端口,同时为读端口,或者一个为写端口一个为读端口。存储器位宽不能为32或36。潜在威胁,如果两端口同时向一个地址写入数据的时候,会导致该地址中的数据出现不可预知的状况。
$ g5 z' H, w. ?2 H 移位寄存器模式:节约用逻辑单元中构建寄存器而消耗。利用时钟下降沿写入数据,时钟上升沿读出数据,配置好该模式后是自动完成的哦。/ U2 P# P" a" L( v! c3 I$ S
只读存储器模式:存储器的内容通过存储器初始化文件(.mif)指定。' k1 U2 E i* a4 @" e
FIFO模式:用于数据的缓冲、多路数据的对齐、变换时钟域等。
) z- M' m8 a# d- G$ E( w; `; D% } + S4 [: [' f: H4 H5 T/ q
; V, j7 |2 P! j; X6 A 5、乘法器$ t/ R1 @8 m! C% A& \% g& k6 y
在数字信号处理运算中,主要包括滤波、快速傅里叶变换、离散余弦变换等。在写运算常常会涉及到大量的乘法运算,所以在FPGA中设计了嵌入的乘法器,专门用也这方面的信号处理。如果使用逻辑单元来搭建乘法器,会消耗不少逻辑单元并且会抑制运算速度的提高。
6 V* k! u I& S8 u' @1 M) }3 o 嵌入的乘法器包含有可选的输入/输出寄存器。寄存器的使用会提高电路性能但是会产生延时。乘法模块还包括两个控制信号,signa和signb来控制乘数A和乘数B是否有符号。另外一个乘法器还可以拆开成两个并行的乘法器,例如EP2C5有1个18bit*18bit的乘法器,可以作为两个9bit*9bit的乘法器使用,但是需要注意的是,符号控制信号就一对,所以要求两个乘法器在相同位置的数据输入必须同时为符号数或者无符号数。 3 `$ y L6 u' m- o$ {
, m# W5 C( k5 U: H
! w+ t/ k6 k- i. S$ w% u 6、输入/输出引脚
: S3 P- k* o7 B9 Q9 `+ f7 n+ I/ t 在学习这一节之前我一直很迷惑,为什么FPGA会分成多个bank,每一个bank之间好像是独立的又好像有联系。看书之后才明白每一组bank都有单独的供电电源,所以我们在使用的时候可以根据要求,为不同的组提供不同的电压,从而实现在不同输入/输出组内使用不同的输入/输出标准。7 m- }6 v* ^" H
在输入/输出引脚和FPGA内部逻辑单元之间存在输入/输出单元(IOE),每隔输入输出单元包含1个输出缓冲和3个寄存器。3个寄存器分别用于锁存输入数据、输出数据、和输出数据使能信号。
. n% ~* O% U" l( ^2 C* Q' N# x) ` 由于FPGA常常会用于做信号的匹配,所以涉及到输入/输出单元的知识点也不少,在此也就简单罗列一下。) P7 S i: c. ^# A5 i4 v1 x
一个输入/输出组可以同时支持单端标准个差分标准,只要器需要的VCCIO相同。
; ~& K) p2 w+ k8 F- N* A$ Y 若干个输入/输出单元构成一个输入/输出模块位于芯片的外围。输入/输出模块可以提供两组输出信号,io_datain0和io_datain1。输入/输出模块的输入信号由两部分构成:一部分有行引脚时钟或列引脚时钟提供,另一部分由逻辑阵列提供。
( i+ D$ U7 I2 p: |; `; W% W: ~8 H/ l 一个输入/输出单元有8个输入信号,这些信号从逻辑阵列以及行引脚时钟传送来的信号中产生。输入/输出单元中的3个寄存器被分为两组,数据输入寄存器为一组,数据输出寄存器和输出使能寄存器为另一组,亮泽有各自的时钟和时钟使能信号。
% s$ J0 k& [- \5 C4 l% L% O$ \ 输入/输出单元中的输出缓冲支持调节引脚的驱动电流。可设置输出缓冲的电压转换速度。输出缓冲可设置为开漏输出模式。输入输出单元包含总线保持电路。包含一个可选的上拉电阻。/ _, R( ~( @' J
CYCLONEⅡ系列FPGA还有片内终端串接电阻,可以用来匹配传输线的特性阻抗。终端电阻的使用可以防止传输线上的信号反射,保持信号的完整性。在使用片内的终端串接电阻的时候,不能设置输入输出引脚的驱动电流。; j' o, D( D3 L0 Z
. p/ V9 J9 C0 R4 X( q# r3 F b3 [% M) M0 R
参考书目《Altera可编程逻辑器件的应用于设计》,粗略的将CYCLONEⅡ系列FPGA的结构做了一个简单的介绍,接下来,我将会在项目中使用这一系列的某款芯片,学习心得和中间遇到的困难将会继续记录下来,以此来督促自己学习总结。! ^: y4 ~ |. ]6 Y! H% F# r
: N, ~& j" X6 y9 e6 \. {, X9 z
|
|