Magafunction的用法" A* `8 X$ ^ V1 [' ^1 B! T' f
“Altera的Megafunction是重要的设计输入资源。由于Megafunction是基于Altera底层硬件结构最合理的成熟应用模块的表现,所以在代码中尽量使用Megafunction这类IP资源,不但能将设计者从繁琐的代码编写中解脱出来,更重要的是在大多数情况下Megafunction的综合和实现结果比用户编写的代码更优。
( ^* f8 F8 X$ F6 w& `% D* i. S* u7 A& I Megafunction包括Altera的参数化模块库(LPM,library of parameterized modules),器件专有的Megafunction模块,用Altera MegaCore IP生成工具调用的IP Core,以及Altera Megafunction计划协作者(AMPP, Altera Megafunction Parterners Program)提供的第三方IP Core。 特别是针对一些与Altera器件底层结构相关的特性,必须通过Megafunction实现,例如一些存储器模块(DPRAM、SPRAM、FIFO、CAM等),DSP模块,LVDS驱动器,PLL,高速串行收发器(SERDERS),DDR输入/输出(DDIO)等。另外一些诸如乘法器、计数器、加法器、滤波器等电路虽然也可以直接用代码描述,然后用通用逻辑资源实现,但是这种描述方法不但费时费力,在速度和面积上与Megafunction的实现结果仍然有较大的差距。” ; `, g6 _& [# E$ G
上面一段文字是从《Altera FPGA/CPLD设计(高级篇)》里摘抄的。这段文字比较全面地概括了采用Altera Megafunction进行设计的优势和Megafunction包含的IP类型。
+ I" m* v7 f6 q! f' N1 b$ d8 ~8 A
8 n% g' z; W. y7 f; v+ e; t 一个好的IP Core要具备可靠、可重用、可配置、可测试的特性,详细准确的说明文档也是其重要组成部分。与这些优良特性相对应的往往就是高昂的授权费用——好货不便宜。说到这里,大家可能就知道我下面要说什么了:Altera的Megafunction是好货白送你。用好Altera的Megafunction只需要使用者认真阅读文档并执行必要的配置工作——花些时间、用点心思,就可以用上高质量的IP Core,何乐而不为呢?虽然只有Altera的LPM、部分器件专有的Megafunction模块是免费的,但是采用这些免费的模块也足够满足大多数设计的需要。毕竟,LPM库只有25个模块就号称可以完成所有的设计。
( Q z" r3 `2 g 7.1版的Quartus II软件中包含了60个Altera提供的可配置宏单元,26个LPM模块(包括由基本类型引申得来的常用形式)。分为Arithmetic、Gates、I\O、JTAG-accessible Extensions、Memory Compiler、Storage、Other Megafunctions七大类。 9 c) j* R3 x: \( q; @
Magafunction的用法
/ o+ w7 J6 _) k7 F3 D 一、通过MegaWizard Plug-in Manager设计向导得到用户订制Megafunction
9 T* @" y" D+ N2 P 调用Megafunction最简单直观的方法是使用MegaWizard Plug-in Manager设计向导。从Windows开始菜单中的Altera快捷方式目录下或Quartus II菜单的Tools下都可以打开这一向导的GUI界面。 GUI界面的第一页有三个选项: & i7 _7 u" ~3 V2 [' Q3 m' B3 |
1. 创建一个新的用户订制Megafunction
, L) z6 G) C) Q0 I; V 2. 编辑一个已有的用户订制Megafunction
" g* h' _7 d5 S) {: t 3. 复制一个已有的用户订制Megafunction1 o7 i3 I4 z, q& V' H7 u E! z
# E! K" v, P/ @+ }9 V6 \5 l
选择第一项后,GUI界面的第二页是Megafunction基本配置信息输入,可以指定Megafunction的类型和输出文件路径和类型、名称。接下来就可以配置指定Megafunction的各项参数了。
4 ~+ g. Y- E" Z. T' i) J+ n5 P! ~8 k 配置完毕后,MegaWizard Plug-in Manager生成四类文件: 5 p7 V$ m4 B1 K8 t, C# X
1. filename.v:例化和配置源Megafunction的文件,有些甚至是相应功能的HDL描述。设计者可以在代码中例化该文件。该文件的注释部分是MegaWizard Plug-in Manager可识别的配置信息,MegaWizard Plug-in Manager由这些配置信息区分普通设计文件和用户订制Megafunction文件。 riple 0 B( }+ ~1 U# V$ B
2. filename_bb.v:用户订制Megafunction的黑盒(black-box)描述。主要用于不支持该Megafunction的第三方EDA工具例化和调用,避免出现找不到源文件的情况(当然,也就不能实现其功能)。 ( h! |7 @/ f8 _' w
3. filename.bsf:用户订制Megafunction的图形文件,与filename.v关联,在图形设计文件中可以例化该文件并通过双击启动MegaWizard Plug-in Manager。
; Z, H* D' T- l/ d0 D1 ^- ] 4. 包含仿真波形的html文件:根据用户的配置信息得到的仿真波形,可供设计者初步评估该订制Megafunction的参数配置是否符合需要。 B7 v* N' j0 s; l+ j
二、在HDL代码中直接例化和配置 8 m9 k' X, \ s% ~' N6 b e
Altera的大部分Megafunction的源文件是用AHDL(Altera HDL)写成的,文件的扩展名是.tdf。在Verilog或VHDL代码中可以直接例化AHDL编写的模块和配置参数。
1 q. ?9 ^4 u* p 例化代码分为两部分:端口映射和参数映射。以下面一个lpm_counter为例(Verilog例化代码,在VHDL中分别对应PORT MAP和GENERIC MAP):
0 S% Y: X! X3 v1 ^3 q8 z' Y# h4 [) G C. H$ m2 Z; E
端口映射部分: lpm_counter lpm_counter_component () k: J0 T) P8 r
.clock (clock),
! E3 h. s! t0 ?* s0 D2 P/ e" i$ |/ y4 h( O .q (q),
( s. r$ F2 Y! k- S: J; K7 U( _ .aclr (1'b0)," w1 C* R: E, {3 k( g9 |- F, X/ K$ |9 n7 s
.aload (1'b0),' ]$ K+ R/ k' m1 B0 z4 C0 r( M
.aset (1'b0),
- l$ Q+ U. L/ r/ i6 I .cin (1'b1),* @$ N" h# z% G3 ]/ g+ Y
.clk_en (1'b1),* n+ `6 T$ v- a: S- h ~! X, ^0 B3 B
.cnt_en (1'b1),3 N# x" w4 J5 @& o* h& }
.cout (),4 e# @! ^# o: O6 `( E% _) }
.data ({8{1'b0}}),% F$ [3 n' F& p8 `# }* L
.eq (),* e) y2 E) `0 a& V/ { r( g: K$ [
.sclr (1'b0),
" ]0 w$ N! ^" \: O6 ^ .sload (1'b0),% b1 M( [8 O/ R% t9 \" T0 p
.sset (1'b0),
_3 [% n4 y& H- V1 @2 k .updown (1'b1)); 参数映射部分:
# n" `% @. `* Z }3 ?' X& U+ f( G defparam
* u, A( X& o% J: p lpm_counter_component.lpm_direction = "UP",' O1 r9 I5 u+ J( P) S
lpm_counter_component.lpm_port_updown = "PORT_UNUSED",
: g- Z' c& n( x' G* }; w; j lpm_counter_component.lpm_type = "LPM_COUNTER",
- q3 v1 V& b$ }; b* L; ]- E lpm_counter_component.lpm_width = 8; 9 w+ d' \3 p0 D `$ H( i
在HDL代码中直接例化Megafunction的好处有以下两点: 1. 可以在代码中直接修改配置参数和端口使用情况。不需要每次修改参数都启动MegaWizard Plug-in Manager。
. M U6 n8 A) f: @5 v9 Z 2. 由于在代码中直接例化源Megafunction模块,不需要在包含文件列表中包括MegaWizard Plug-in Manager生成的文件。工程文件列表简明清晰。
3 f. g0 Y% r, i0 Y2 h% R- \3 O, v 从上面的代码可以看出,Megafunction的端口和参数都是很复杂的,很难全凭记忆完整的列出;对于一些比较特殊的参数内容(比如string类型的参数),如果不熟悉的话,很容易写错甚至不知道该写哪些内容。+ b* [$ m k, r% g5 \+ A
解决这一问题的方法是,先采用MegaWizard Plug-in Manager生成用户订制Megafunction文件,然后参考该文件例化和配置Megafunction的方法,在自己的设计文件中直接例化Megafunction。% {2 I/ H" P9 r' ?
/ E) B6 R3 E' A' G- }" Z/ V$ f' V
http://www.altera.com.cn/products/ip/altera/mega.html& q/ m6 u' q2 z3 {" d0 G2 y0 w% B
http://www.altera.com.cn/literature/an/an320.pdf" u9 Q2 `+ s3 f" O( w! L+ ~
; g: ~/ q; C# p' y% U' _- c[ 本帖最后由 kenson 于 2009-1-18 11:46 编辑 ] |