第一部分CPLD器件及开发系统的使用
可以指定器件和管脚分配。重新编译后就可以进行仿真和下载试验。
5.3 MAX+PLUSⅡ中LPM宏单元库的使用
5.3.1 使用LPM宏单元库
LPM宏单元库是参数化的模块库,是为不同的设计者为了不同的电路设计要求而制定的,是优秀的版图设计和软件设计的结晶。采用LPM器件,只要修改其某些参数就可以达到设计要求。LPM宏单元库中,各种类型的器件比较丰富,目前该库中包含有25中器件,基本含盖不同设计的各种用途。用LPM宏单元进行设计和其它方式设计一样,都和具体器件无关。具体的LPM函数如下所示:
1、门单元函数:
lpm_and
参数化与门
lpm_bustri 参数化三态缓冲器 lpm_clshift 参数化逻辑移位器 lpm_constant 参数化常量产生器 lpm_decode lpm_inv lpm_mux busmux mux
lpm_or lpm_xor 2、算术运算函数
lpm_abs
参数化绝对值函数 参数化加减函数 参数化比较器 参数化计数器 参数化乘法器 参数化触发器 参数化锁存器
参数化RAM(输入、输出分开) 参数化单端口RAM 参数化ROM
lpm_add_sub lpm_compare lpm_counter lpm_mult lpm_ff
参数化译码器 参数化取反器 参数化选择器
参数化总线选择器 多路选择器 参数化或门 参数化异或门
3、具有存储功能的函数
lpm_latch lpm_ram_dq lpm_ram_io lpm_rom
lpm_shiftreg 参数化移位积存器
148
第一部分CPLD器件及开发系统的使用
4、用户定制函数
csfifo csdpram
参数化先进先出队列 参数化双口RAM
这些函数,在设计时使用方便,但需要花一点精力研究其内部参数。下面以lpm_mult为例介绍宏函数的使用。(lpm宏函数库所在的目录\\maxplus2\\max2lib\\mega_lpm)。如图4.8所示:打开图形编辑界面,双击空白处,在弹出的对话框中选择\\maxplus9.6\\max2lib\\mega_lpm\\*,打开lpm宏函数库选择lpm_mult宏函数,该图形分为两个部分,基本电路图形和参数化框,下面将分别介绍:参数化框的内容如下:
图5-7 LPM宏函数的使用
输入数据dataa[]是否为常数 输入数据datab[]是否为常数 流水线阶数 符号说明
输入数据 dataa[]的位数 输入数据 datab[]的位数
INPUT_A_IS_CONSTANT INPUT_B_IS_CONSTANT LPM_PIPELINE= LPM_WIDTHA= LPM_WIDTHB=
LPM_REPRESENTATION
LPM_WIDTHP=( LPM_WIDTHA +LPM_WIDTHB) 输出数据 result[]的位数 LPM_WIDTHS=(LPM_WIDTHA) 当有多个乘法器级联时低级乘法器向本
级乘法器的进位位的宽度,该宽度应和
149
第一部分CPLD器件及开发系统的使用
LPM_WIDTHA一致。该项为可选项,如果只有一个乘法器,本项可以不选。
MAXIMIZE _SPEED
编译时优化的等级,可以从0到10之间选择等级,设定后MAX+PLUSⅡ在编译时会在速度和面积之间平衡。
USE_EAB
=
是否使用EAB单元。
其它还有aclk异步时钟,clken时钟使能,clock同步时钟。这些也都是可选项,可以选也可以不选。
双击参数化框,在弹出的界面中将每一个参数设定为合适的值如图5-8
图5-8 LPM宏的参数化框设置
本例设定好的参数如下图所示:其中在编辑最后一项“USE_EAB=”时要注意,只能添入“ON”或“OFF”,而且要根据不同的器件进行选择,如器件为“MAX7000”、“MAX9000”、“FLEX6000/8000”等器件本身没有“EAB”宏单元,因此只能选择
150
第一部分CPLD器件及开发系统的使用
“OFF”,即使选择“10K10”系列,也要看器件所带的“EAB”是否放得下8X8的乘法器,如果不能,也只能选择“OFF”。具体参数的设置可以参照上面介绍的内容,设置后在添加输入、输出时,一定要注意输入、输出应与参数化框中设定的位宽一致。设置后的界面如图5-9所示:
图5-9 参数化乘法器的设计
5.3.2 参数化模块在文本编辑中的使用
在AHDL语言使用参数化模块时要先用 “include”语句将宏函数包含进文本编辑中,在variable 中用with语句进行参数设置。 include\subdesign multx
(a[7..0],b[7..0],c[7..0]:input; s[15..0]:output; ) variable
mmut:lpm_mult with(LPM_WIDTHA=8, LPM_WIDTHB=8, LPM_WIDTHP=16, LPM_WIDTHS=8,
lpm_result=15,eab=\begin
mmut.dataa[]=a[]; mmut.datab[]=b[]; mmut.sum[]=c[];
151
第一部分CPLD器件及开发系统的使用
s[]=mmut.result[]; end;
可见,只要作一些简单的设置就可以很好的使用宏函数。其实,不仅宏函数可以这样引用,mf库的所有模块都可以这样引用,因为不需要参数设置,所以使用起来更简单。下面的程序演示7400在文本编辑时的引用,这里只是起到抛砖引玉的作用,该库中其它模块可以采用同样的方法引用。 include\subdesign nad2 (a,b:input; c:output; ) variable m7400:7400; begin
m7400.2=a; m7400.3=b; c=m7400.1; end;
5.4 CPLD中内嵌RAM块EAB的使用
内嵌RAM块EAB是ALTERA公司CPLD产品中的精华部分,它可以实现CPLD其它部分无法文成的工作,由于其优越特性,所以倍受设计人员的青睐。模块化宏函数库中大部分函数都可以使用EAB,但最具典型的当属LPM_ROM和LPM_RAM的使用,这里将详细介绍ROM与RAM的使用。 1、LPM_ROM的使用
(1) LPM_ROM在图形编辑中的使用
打开图形编辑界面,双击编辑区的空白处,在弹出的对话框中选择\\maxplus10.0\\max2lib\\mega_lpm库,在库中选择LPM_ROM,点击OK,LPM_ROM的图形及参数框如图5-10所示。
图5-10 LPM-ROM的参数化模块
152