一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 6411|回复: 0
收起左侧

Magafunction的用法

[复制链接]
发表于 2009-1-18 11:37 | 显示全部楼层 |阅读模式
Magafunction的用法  o1 M! r& P9 p8 s/ C1 U7 z
    “Altera的Megafunction是重要的设计输入资源。由于Megafunction是基于Altera底层硬件结构最合理的成熟应用模块的表现,所以在代码中尽量使用Megafunction这类IP资源,不但能将设计者从繁琐的代码编写中解脱出来,更重要的是在大多数情况下Megafunction的综合和实现结果比用户编写的代码更优。
- l% u: b1 u8 }8 m! k) @    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的实现结果仍然有较大的差距。”
0 {8 d$ {7 |7 V! s+ ^    上面一段文字是从《Altera FPGA/CPLD设计(高级篇)》里摘抄的。这段文字比较全面地概括了采用Altera Megafunction进行设计的优势和Megafunction包含的IP类型。
& @" h2 ~: I* n+ v% q3 s/ j
3 v7 B) E% K. k  ?5 {+ u& g    一个好的IP Core要具备可靠、可重用、可配置、可测试的特性,详细准确的说明文档也是其重要组成部分。与这些优良特性相对应的往往就是高昂的授权费用——好货不便宜。说到这里,大家可能就知道我下面要说什么了:Altera的Megafunction是好货白送你。用好Altera的Megafunction只需要使用者认真阅读文档并执行必要的配置工作——花些时间、用点心思,就可以用上高质量的IP Core,何乐而不为呢?虽然只有Altera的LPM、部分器件专有的Megafunction模块是免费的,但是采用这些免费的模块也足够满足大多数设计的需要。毕竟,LPM库只有25个模块就号称可以完成所有的设计。 1 P7 A0 ~  b2 }! {8 ]
    7.1版的Quartus II软件中包含了60个Altera提供的可配置宏单元,26个LPM模块(包括由基本类型引申得来的常用形式)。分为Arithmetic、Gates、I\O、JTAG-accessible Extensions、Memory Compiler、Storage、Other Megafunctions七大类。 * C+ l, ^. x- G. `7 w
    Magafunction的用法
" N. R6 G( j' T    一、通过MegaWizard Plug-in Manager设计向导得到用户订制Megafunction
6 y% O3 N- A/ h, J    调用Megafunction最简单直观的方法是使用MegaWizard Plug-in Manager设计向导。从Windows开始菜单中的Altera快捷方式目录下或Quartus II菜单的Tools下都可以打开这一向导的GUI界面。     GUI界面的第一页有三个选项: 3 X/ m! k3 l1 r& F# l! M/ d- T- Q" e
    1. 创建一个新的用户订制Megafunction  
! ]& _, E+ J. t& O  _# L    2. 编辑一个已有的用户订制Megafunction* }1 N: e( d5 i, [2 v
    3. 复制一个已有的用户订制Megafunction$ a/ [0 L" B5 w& s0 m) J* o3 J, j
    1 K2 L/ ?: R; L" c  Y
    选择第一项后,GUI界面的第二页是Megafunction基本配置信息输入,可以指定Megafunction的类型和输出文件路径和类型、名称。接下来就可以配置指定Megafunction的各项参数了。  B! k6 z  w0 _! N( Y8 I2 r+ |) ?
    配置完毕后,MegaWizard Plug-in Manager生成四类文件:
6 ?3 w8 n, R: e3 ^    1. filename.v:例化和配置源Megafunction的文件,有些甚至是相应功能的HDL描述。设计者可以在代码中例化该文件。该文件的注释部分是MegaWizard Plug-in Manager可识别的配置信息,MegaWizard Plug-in Manager由这些配置信息区分普通设计文件和用户订制Megafunction文件。 riple / a+ l+ ]! p/ E4 x" ?% Y8 J* W
    2. filename_bb.v:用户订制Megafunction的黑盒(black-box)描述。主要用于不支持该Megafunction的第三方EDA工具例化和调用,避免出现找不到源文件的情况(当然,也就不能实现其功能)。 " @& C7 R+ h; ^. c: b) o' w
    3. filename.bsf:用户订制Megafunction的图形文件,与filename.v关联,在图形设计文件中可以例化该文件并通过双击启动MegaWizard Plug-in Manager。# q1 W( U8 d2 \8 T
    4. 包含仿真波形的html文件:根据用户的配置信息得到的仿真波形,可供设计者初步评估该订制Megafunction的参数配置是否符合需要。$ Y# F8 k4 R0 L& ^& d, B4 E3 i* o
    二、在HDL代码中直接例化和配置
( |, a) ?0 A3 ^- i$ z9 ?/ F    Altera的大部分Megafunction的源文件是用AHDL(Altera HDL)写成的,文件的扩展名是.tdf。在Verilog或VHDL代码中可以直接例化AHDL编写的模块和配置参数。
" ^, R9 y" V) N& K. J    例化代码分为两部分:端口映射和参数映射。以下面一个lpm_counter为例(Verilog例化代码,在VHDL中分别对应PORT MAP和GENERIC MAP):
3 d& k+ [; c! B2 X6 ^
0 U! [5 g0 b) S4 L. Y* C0 k
    端口映射部分:  
    lpm_counter lpm_counter_component (; {6 C' V/ k* z
        .clock (clock),
" P) S! e, _& z) p        .q (q),8 y8 o3 x! c  l& y; G5 a6 ]( G
        .aclr (1'b0),
5 x. n, m% e6 F        .aload (1'b0),
# E7 F5 j) s! ?4 [6 Q        .aset (1'b0),
8 Q  s/ D8 z7 C/ j' I5 {4 j        .cin (1'b1)," i1 h# d, G/ ^8 }: [
        .clk_en (1'b1),
' ?2 @1 c- m& M+ I# @4 \2 h0 Z' {) H        .cnt_en (1'b1),
# b& i, f* j( Z  E1 R8 p        .cout (),
. c" K2 @" L0 t! \" [7 P        .data ({8{1'b0}}),: t6 ~" _9 i" u+ \8 K
        .eq (),
6 g9 ?* g0 y) l; \# d        .sclr (1'b0),% D1 i8 i1 U0 p
        .sload (1'b0),0 P' h. G0 E2 r8 `
        .sset (1'b0),
% x1 H* l9 k, d4 G+ Z% Y( L        .updown (1'b1));
    参数映射部分:, u+ N- V8 j( P' t" l0 W
    defparam
. q% r, d' U) J6 k! k2 B% i2 i/ q        lpm_counter_component.lpm_direction = "UP",
  ~7 Z  M: F* |5 c* k$ G3 i        lpm_counter_component.lpm_port_updown = "PORT_UNUSED",
0 Q. N/ _* R' l, H3 `        lpm_counter_component.lpm_type = "LPM_COUNTER",
8 P! M4 P2 m$ C, n' W# [        lpm_counter_component.lpm_width = 8;

  l- R, f' m$ S! M1 o+ L& v    在HDL代码中直接例化Megafunction的好处有以下两点:    1. 可以在代码中直接修改配置参数和端口使用情况。不需要每次修改参数都启动MegaWizard Plug-in Manager。
7 s$ a+ q& H) Q    2. 由于在代码中直接例化源Megafunction模块,不需要在包含文件列表中包括MegaWizard Plug-in Manager生成的文件。工程文件列表简明清晰。
1 f) |$ Q5 a! n    从上面的代码可以看出,Megafunction的端口和参数都是很复杂的,很难全凭记忆完整的列出;对于一些比较特殊的参数内容(比如string类型的参数),如果不熟悉的话,很容易写错甚至不知道该写哪些内容。
4 g8 V; K1 \  ]8 q  H# f: d9 G# D/ B    解决这一问题的方法是,先采用MegaWizard Plug-in Manager生成用户订制Megafunction文件,然后参考该文件例化和配置Megafunction的方法,在自己的设计文件中直接例化Megafunction。6 n+ ?% S( S/ k" f1 @

- G7 D! Z; E9 U' n. \/ rhttp://www.altera.com.cn/products/ip/altera/mega.html) y  Z* `" I6 V' R% [
http://www.altera.com.cn/literature/an/an320.pdf# N$ E3 W# j/ i3 V. f
* |/ G* l7 C2 s- \
[ 本帖最后由 kenson 于 2009-1-18 11:46 编辑 ]

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-18 18:42 , Processed in 0.048889 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表