§1 概 述
Max+plusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。Max+plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Max+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。
Max+plusⅡ开发系统的特点
1、开放的界面
Max+plusⅡ支持与Cadence,Exemplarlogic,Mentor Graphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。
2、与结构无关
Max+plusⅡ系统的核心Complier支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。
3、完全集成化
Max+plusⅡ的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。
4、丰富的设计库
Max+plusⅡ提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。
5、模块化工具
设计人员可以从各种设计输入、处理和较验选项中进行选择从而使设计环境用户化。
6、硬件描述语言(HDL)
Max+plusⅡ软件支持各种HDL设计输入选项,包括VHDL、Verilog HDL和Altera自己的硬件描述语言AHDL。
7、Opencore特征
Max+plusⅡ软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。
§2 Max+plusⅡ功能简介
1 、原理图输入(Graphic Editor)
MAX+PLUSII软件具有图形输入能力,用户可以方便的使用图形编辑器输入电路图,图中的元器件可以调用元件库中元器件,除调用库中的元件以外,还可以调用该软件中的符号功能形成的功能块.图形编辑器窗口见图(一)。
2、硬件描述语言输入(Text Editor)
MAX+PLUSII软件中有一个集成的文本编辑器,该编辑器支持VHDL,AHDL和Verilog硬件描述语言的输入,同时还有一个语言模板使输入程序语言更加方便,该软件可以对这些程序语言进行编译并形成可以下载配置数据,文本编辑器窗口见图(二)。

3、波形编辑器(Waveform Editor)
在进行逻辑电路的行为仿真时,需要在所设计电路的输入端加入一定的波形,波形编辑器可以生成和编辑仿真用的波形(*.SCF文件),使用该编辑器的工具条可以容易方便的生成波形和编辑波形。波形编辑器窗口如图(三)所示。使用时只要将欲输入波形的时间段用鼠标涂黑,然后选择工具条中的按钮,例如,如果要某一时间段为高电平,只需选择按钮 ”1”。
还可以使用输入的波形(*.WDF文件)经过编译生成逻辑功能块,相当于已知一个芯片的输入输出波形,但不知是何种芯片,使用该软件功能可以解决这个问题,设计出一个输入和输出波形相同CPLD电路。
4、管脚(底层)编辑窗口(Floorplan Editor)
该窗口用于将已设计好逻辑电路的输入输出节点赋予实际芯片的引脚,通过鼠标的拖拉,方便的定义管脚的功能。管脚(底层)编辑窗口见图(四)。

图三 波形编辑器窗口 图四 管脚(底层)编辑窗口
5、自动错误定位
在编译源文件的过程中,若源文件有错误,Max+Plus2软件可以自动指出错误类型和错误所在的位置。
6、逻辑综合与适配
该软件在编译过程中,通过逻辑综合 (Logic Synthesizer)和适配(Fitter) 模块,可以把最简单的逻辑表达式自动的吻合在合适的器件中。
7、设计规则检查
选取Compile\Processing\Design Doctor菜单,将调出规则检查医生,该医生可以按照三种规则中的一个规则检查各个设计文件,以保证设计的可靠性。一旦选择该菜单,在编译窗口将显示出医生,用鼠标点击医生,该医生可以告诉你程序文件的健康情况。见图(五)。

图五 规则检测医生
8、多器件划分(Partitioner)
如果设计不能完全装入一个器件,编译器中的多器件划分模块,可自动的将一个设计分成几个部分并分别装入几个器件中,并保证器件之间的连线最少。
9、编程文件的产生
编译器中的装配程序(Assembler)将编译好的程序创建一个或多个编程目标文件:
EPROM配置文件(*.POF)例如,MAX7000S系列
SRAM文件(*.SCF)例如,FLEX8000系列的配置芯片EPROM
JEDEC文件(*.JED)
十六进制文件(*.HEX)
文本文件(*.TTF)
串行BIT流文件(*.SBF)
10、仿真
当设计文件被编译好,并在波形编辑器中将输入波形编辑完毕后,就可以进行行为仿真了,通过仿真可以检验设计的逻辑关系是否准确.
11、分析时间(Analyze Timing)
该功能可以分析各个信号到输出端的时间延迟,可以给出延迟矩阵和最高工作频率.见图(六)和图(七)。

12、器件编程
当设计全部完成后,就可以将形成的目标文件下载到芯片中,实际验证设计的准确性.
§3 Max+plusⅡ设计过程
一、设计流程
使用Max+plusⅡ软件设计流程由以下几部分组成。如图(八)所示。
1、设计输入:可以采用原理图输入、HDL语言描述、EDIF网表输入及波形输入等几种方式。
2、编译:
先根据设计要求设定编译参数和编译策略,如器件的选择、逻辑综合方式的选择等。然后根据设定的参数和策略对设计项目进行网表提取、逻辑综合和器件适配,并产生报告文件、延时信息文件及编程文件,供分析仿真和编程使用。
3、仿真:仿真包括功能仿真、时序仿真和定时分析,可以利用软件的仿真功能来验证设计项目的逻辑功能是否正确。
4、编程与验证:用经过仿真确认后的编程文件通过编程器(Programmer)将设计下载到实际芯片中,最后测试芯片在系统中的实际运行性能。
在设计过程中,如果出现错误,则需重新回到设计输入阶段,改正错误或调整电路后重复上述过程。
图(九)是Max+plusⅡ编译设计主控界面,它显示了Max+plusⅡ自动设计的各主要处理环节和设计流程,包括设计输入编辑、编译网表提取、数据库建立、逻辑综合、逻辑分割、适配、延时网表提取、编程文件汇编(装配)以及编程下载9个步骤。
二、设计步骤
1)输入项目文件名(File/Project/Name)
2)输入源文件(图形、VHDL、AHDL、Verlog和波形输入方式)
(Max+plusⅡ/graphic Editor;Max+plusⅡ/Text Editor;Max+plusⅡ/Waveform Editor)
3)指定CPLD型号(Assign/Device)
4)设置管脚、下载方式和逻辑综合的方式
(Assign/Global Project Device Option,Assign/Global Logic Synthesis)
5)保存并检查源文件(File/project/Save & Check)
6)指定管脚(Max+plusⅡ/Floorplan Editor)
7)保存和编译源文件(File/project/Save & Compile)
8)生成波形文件(Max+plusⅡ/Waveform Editor)
9)仿真(Max+plusⅡ/Simulator)
10)下载配置(Max+plusⅡ/Programmer)
三、常用菜单简介
(1)MAX+PLUSⅡ菜单:
MAX+plusII:
Hierarchy Display___塔形显示;
Graphic Editor______图形编辑器;
Symbol Editor______符号编辑器;
Text Editor_________文本编辑器;
Waveform Editor____波形编辑器;
Floorplan Editor_____管脚编辑器;
Compiler___________编译器;
Simulator__________仿真器;
Timing Analyzer_____时间分析;
Programmer________程序下载;
Message Processor___信息处理;
(2)文件菜单,该文件菜单随所选功能的不同而不同。
File:
Project:
Name…_________________项目名称;
Set Project to Current File___将当前文件设置为项目;
Save&Check_____________保存并检查文件;
Save&Compile___________保存并编译文件;
Save&Simulator__________保存并仿真文件;
Save,Compile,Simulator____保存,编译,仿真;
New…_________新文件;
Open…_________打开文件;
Delete File…____删除文件;
Retrieve…______提取文件;
Close__________关闭文件;
Save___________保存文件;
Save As…______换名存文件;
Info…_________信息;
Size…_________图纸尺寸;
Create Default Symbol______创建当前模块图形符号;
Edit Symbol_______________编辑当前模块图形符号;
Create Default Include File___创建当前包括文件;
Print…___________________打印;
Print Setup…______________打印设置;
(3)模板菜单,该模板使编写VHDL和AHDL设计文件更容易和方便。
Templates:
AHDL Template…_____AHDL模板;
VHDL Template…_____VHDL模板;
Verilog Template…_____VERILOG模板;
(4)指定菜单
Assign:
Device…________________指定器件;
Pin/Location/Chip…_______管脚,放置,芯片;
Timing Requirements…____时间需要;
Clique…________________指定一个功能组;
Logic Options…__________逻辑选择;
Probe…_________________指定探头;
Connected Pins…_________连接管脚;
Global Project Device Options…______设定项目中器件的参数;
Global Project Parameters…_________设置项目参数;
Global Project Timing Requirements..___设置时间参数;
Global Project Logic Synthesis…______设置逻辑综合;
Ignore Project Assignments…_________忽略项目指定;
Clear Project Assignments…_________清除项目指定;
Back Annotate Project…_____________返回项目指定;
Convert Obsolete Assignment Format___转换指定格式。
(5)选择菜单
Options:
Font_____________字形;
Text Size________文本尺寸;
Line Style_______线型;
Rubberbanding_________橡皮筋;
Show Parameters_______显示参数;
Show Probe___________显示探头;
Show/Pins/Locations/Chips__________显示管脚,位置,芯片;
Show Cliques&Timing Requirements__显示功能组,时间需求;
Show Logic Options________________显示逻辑设置;
Show All_______________显示全部;
Show Guidelines…_______显示向导;
User Libraries…_________用户库;
Color Palette…__________调色板;
Preferences…___________设置。
该软件的菜单繁多,要想都学会有一定的难度,主要原因是资料问题。但是常用的菜单会使用还是可能的。
四、如何获得帮助
最直接的帮助来自于Max+plusⅡ的Help菜单。若需要某个特定项目的帮助信息,可以同时按<Shift>+<F1>键或者选用工具栏中的快速帮助按钮“
”。此时,鼠标变为带问号的箭头,点击“特定的项目”就可弹出相应的帮助信息。这里的“特定项目”,可以包含某个器件的图形、文本编辑中的单词,菜单选项,甚至可以是一个弹出的窗口。
◎详细的举例讲解Max+plusⅡ软件的操作过程请同学们参考实验四“组合逻辑3-8译码器的设计”。
§4 硬件描述语言AHDL
AHDL语言是ALTERA公司开发的高效、易学的硬件描述语言,在Max+plusⅡ软件中使用,它比VHDL语言更有效。
一、AHDL 简介
一个AHDL逻辑设计至少必须包含一个分设计段(Subdesign Section)和一个逻辑设计段(Logic Section),其它段和语句是可选择的,AHDL的设计文件是用Max+PlusⅡ软件的文本编辑器编写的源程序(*.tdf)
下面介绍AHDL的一些语句。
1、常数叙述语句
该语句可以用一个字符串代表数字、算数表达式
例:
CONSTANT UPPER_LIMIT = 130;
CONSTANT BAR = 1 + 2 DIV 3 + LOG2(256);
CONSTANT FOO = 1;
CONSTANT FOO_PLUS_ONE = FOO + 1;
2、定义函数语句
该语句可以定义一个在分设计中使用函数,
例:
DEFINE MAX(a,b) = (a > b) ? a : b;
SUBDESIGN
(
dataa[MAX(WIDTH,0)..0]: INPUT;
datab[MAX(WIDTH,0)..0]: OUTPUT;
)
BEGIN
datab[] = dataa[];
END;
此例中MAX函数保证最小的数据位宽度。
3、参数叙述语句
该语句可以声明参数化巨功能模块和宏功能模块的一个或几个参数
例:
PARAMETERS
(
FILENAME = "myfile.mif", -- optional default value follows "=" sign
WIDTH,
AD_WIDTH = 8,
NUMWORDS = 2^AD_WIDTH
);
4、函数描述语句
共有4种形式的逻辑函数可以供用户调用,它们是:
Megafunction—具有复杂逻辑功能的巨功能模块,放在mega_LPM库中,可以供用户调用
Primitive—一些基本逻辑功能函数,可以直接调用
Macrofunction—具有高水平的逻辑宏功能模块,共有300多种,放在max2lib子目录中
State Machine—一种具有多个状态的时序电路,可以形成符号图形,用户可以调用
以上几种逻辑功能函数都可以以逻辑函数名和符号图形的方式被调用,在AHDL源文件中调用时要首先进行声明,见如下例子。
(1)参数化函数:
FUNCTION lpm_add_sub(cin,dataa[LPM_WIDTH-1..0],datab[LPM_WIDTH-1..0], dd_sub)
WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE, ONE_INPUT_IS_CONSTANT)
RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
该函数名为lpm_add_sub,输入端口为 cin, dataa[LPM_WIDTH-1..0], and datab[LPM_WIDTH-1..0];
关键字WITH后是参数表,
关键字RETURN后是输出口result[LPM_WIDTH-1..0], cout, and overflow
(2)非参数化函数:
FUNCTION compare (a[3..0], b[3..0])
RETURNS (less, equal, greater);
该函数名为compare,输入端口为a3, a2, a1, a0, b3, b2, b1, and b0.
关键字RETURN后是输出口less, equal, greater
(3)状态机函数:
当输入和输出是状态机时,应该按照如下例子定义函数,在返回结果语句中加MACHINE关键字
FUNCTION ss_def (clock, reset, count)
RETURNS (MACHINE ss_out);
5、最小位数选择语句
定义一组数据中的最小数位是否是MSB(most significant bit)或LSB(least significant bit)
例:
OPTIONS BIT0 = MSB;
6、断言语句
该语句可以检验表达式、参数、数据、计算函数有效性和端口的使用情况。
例:
ASSERT (WIDTH > 0)
REPORT "Width (%) must be a positive integer" WIDTH
SEVERITY ERROR
HELP_ID INTVALUE; -- for internal Altera use only
在该例中,WIDTH>0是断言条件,若此条件不满足,将显示REPORT后的内容和SEVERITY后的错误等级。
7、分设计段
分设计段声明输入、输出和双向口
例:
SUBDESIGN top
(
foo, bar, clk1, clk2 : INPUT = VCC;
a0, a1, a2, a3, a4 : OUTPUT;
b[7..0] : BIDIR;
)
端口类型可以是:
INPUT, OUTPUT, BIDIR, MACHINE INPUT, 或 MACHINE OUTPU
其中MACHINE INPUT或MACHINE OUTPUT口不能用于TDF的顶层,在端口类型说明后可以加端口当前电平—VCC或者是GND。
8、变量段
该段是声明和产生逻辑段中使用的变量的地方,如下是变量段的例子。
VARIABLE
a, b, c : NODE;
temp : halfadd;
ts_node : TRI_STATE_NODE;
IF DEVICE_FAMILY == "FLEX8000" GENERATE
8kadder : flex_adder;
d,e : NODE;
ELSE GENERATE
7kadder : pterm_adder;
f,g : NODE;
END GENERATE;
(1)函数变量声明例:
VARIABLE
comp : compare;
adder : lpm_add_sub WITH (LPM_WIDTH = 8);
该变量段声明comp为函数compare的引用变量,声明adder为函数lpm_add_sub的引用变量,一旦声明完毕,就意味着:
变量comp就是如下端口的代表:
a[3..0], b[3..0] : INPUT; -- inputs to compare
less, equal, greater : OUTPUT; -- outputs of compare
而变量adder是如下端口的代表:
a[8..1], b[8..1] : INPUT; -- inputs of adder
sum[8..1] : OUTPUT; -- outputs of adder
也就是如下的引用变量可以使用在当前的设计文件中:
comp.a[], comp.b[], comp.less, comp.equal, comp.greater
adder.dataa[], adder.datab[], adder.result[]
(2)节点变量声明
AHDL 软件支持两种节点形式:NODE and TRI_STATE_NODE。
例:
SUBDESIGN node_ex
(
a, oe : INPUT;
b : OUTPUT;
c : BIDIR;
)
VARIABLE
b : NODE;
t : TRI_STATE_NODE;
BEGIN
b = a;
out = b % therefore out = a %
t = TRI(a, oe);
t = c; % t is bus of c and tri_stated a %
END;
如下的端口和功能模块能连接三态节点(TRI_STATE_NODE):
TRI 三态功能模块
输入端口(INPUT) 端口从高层向下
输出或双向口(OUTPUT, BIDIR)从低层向上
当前文件中的双向口(BIDIR)
当前文件中的三态节点TRI_STATE_NODE
(3)寄存器变量声明
该声明用于声明寄存器:
D型:DFF,DFFE,
T型:TFF,TFFE
JK型:JKFF,JKFFE,SRFF,SRFFE
琐存器:LATCH
例:
VARIABLE ff : TFF;
该变量一旦声明完毕,就可以使用如下变量:
ff.t, ff.clk,ff.clrn,ff.prn,ff.q
对于只有一个输出的功能模块,可以简化使用。
DFF的功能说明为:
FUNCTION DFF(d, clk, clrn, prn) RETURNS (q);.
则对于如下的变量段,逻辑段的意思是a.d = b.q;
VARIABLE
a, b : DFF;
BEGIN
a = b;
END;
(4)状态机变量声明
例:
VARIABLE
ss : MACHINE OF BITS (q1, q2, q3)
WITH STATES ( s1 = B"000",
s2 = B"010",
s3 = B"111" );
该例的意思是:
状态机的名字是ss,状态位q1, q2, 和 q3是该机寄存器的输出,状态机的状态是s1,s2,和s3, 并给出了当前状态值。
9、逻辑段
在逻辑段中,说明设计文件的逻辑操作。
(1)布尔方程
逻辑段中布尔方程用于表达节点之间的逻辑关系,该关系必须遵从逻辑规则。
例:
a[] = ((c[ ] & -B"001101") + e[6..1]) # (p, q, r, s, t, v);
表达式的左边可以是一个字符变量、端口和组,右边是布尔方程表达式。
(2)布尔控制方程
该控制方程用于建立状态机的时钟、复位和时钟使能信号,见下例:
ss.clk = clk1;
ss.reset = a & b;
ss.ena = clk1ena;
该控制方程的格式为<状态机名>.<端口名>,所以该例中状态机名是ss,三个端口:时钟、复位和使能。
(3)CASE语句
例:
CASE f[].q IS
WHEN H"00" =>
addr[] = 0;
s = a & b;
WHEN H"01" =>
count[].d = count[].q + 1;
WHEN H"02", H"03", H"04" =>
f[3..0].d = addr[4..1];
WHEN OTHERS =>
f[].d = f[].q;
END CASE;
(4)缺省叙述语句
该语句指定真值表中变量的缺省值,
例:
BEGIN
DEFAULTS
a = VCC;
END DEFAULTS;
IF y & z THEN
a = GND;
END IF;
END;
(5)IF THEN语句
例:
IF a[] == b[] THEN
c[8..1] = H "77";
addr[3..1] = f[3..1].q;
f[].d = addr[] + 1;
ELSIF g3 $ g4 THEN
f[].d = addr[];
ELSE
d = VCC;
END IF;
(6)FOR GENERATE 语句
例:
CONSTANT NUM_OF_ADDERS = 8;
SUBDESIGN 4gentst
(
a[NUM_OF_ADDERS..1], b[NUM_OF_ADDERS..1], cin : INPUT;
c[NUM_OF_ADDERS..1], cout : OUTPUT;
)
VARIABLE
carry_out[(NUM_OF_ADDERS+1)..1] : NODE;
BEGIN
carry_out[1] = cin;
FOR i IN 1 TO NUM_OF_ADDERS GENERATE
c[i] = a[i] $ b[i] $ carry_out[i]; % Full Adder %
carry_out[i+1] = a[i] & b[i] # carry_out[i] & (a[i] $ b[i]);
END GENERATE;
cout = carry_out[NUM_OF_ADDERS+1];
END;
(7)真值表语句
该语句用于指定组合逻辑和状态机的输入和输出行为。
例:
TABLE
a0, f[4..1].q => f[4..1].d, control;
0, B"0000" => B"0001", 1;
0, B"0100" => B"0010", 0;
1, B"0XXX" => B"0100", 0;
X, B"1111" => B"0101", 1;
END TABLE;
该例中,a0和f[4..1].q是输入,f[4..1].d和control是输出,
二、AHDL中的语言元素
1、AHDL中的保留关键字
AHDL语言建议用大写字母书写如下关键字:
AND FUNCTION OUTPUT
ASSERT GENERATE PARAMETERS
BEGIN GND REPORT
BIDIR HELP_ID RETURNS
BITS IF SEGMENTS
BURIED INCLUDE SEVERITY
CASE INPUT STATES
CLIQUE IS SUBDESIGN
CONNECTED_PINS LOG2 TABLE
CONSTANT MACHINE THEN
DEFAULTS MOD TITLE
DEFINE NAND TO
DESIGN NODE TRI_STATE_NODE
DEVICE NOR VARIABLE
DIVNOT VCC
ELSE OF WHEN
ELSIF OPTIONS WITH
END OR XNOR
FOR OTHERS XOR
2、 保留识别符
AHDL中的保留识别符:
CARRY JKFFE SRFFE
CASCADE JKFF SRFF
CEIL LATCH TFFE
DFFE LCELL TFF
DFFM CELL TRI
EXP MEMORY USED
FLOOR OPENDRN WIRE
GLOBAL SOFT X
3、AHDL中运算符
|
符号 |
功能 |
|
+ |
加号 |
|
- |
减 |
|
== |
数和串相等 |
|
! |
NOT |
|
!= |
不等于 |
|
> |
大于 |
|
>= |
大于等于 |
|
< |
小于 |
|
<= |
小于等于 |
|
& |
AND |
|
!& |
NAND |
|
$ |
XOR |
|
!$ |
XNOR |
|
# |
OR |
|
!# |
BOR |
4、AHDL中的组
具有相同类型的端口可以形成一个组,该组可以有256个成员“BIT”,
如下的组虽然表达方式不同,但实际是同一个组。
b[5..0] ;(b5, b4, b3, b2, b1, b0) ;b[]
5、AHDL中的数
二进制例: B"0110X1X10"
八进制例: Q"4671223"
十六进制例: H"123AECF"
6、AHDL中的算数表达式
|
运算符 |
说明 |
优先级别 |
|
+ |
(unary)+1 positive |
1 |
|
- |
(unary)-1 negative |
1 |
|
! |
!a NOT |
1 |
|
^ |
a ^ 2 exponent |
1 |
|
MOD |
4 MOD 2 modulus |
2 |
|
DIV |
4 DIV 2 division |
2 |
|
* |
a * 2 multiplication |
2 |
|
LOG2 |
LOG2(4-3) logarithm base2 |
2 |
|
+ |
1+1 addition |
3 |
|
- |
1-1 subtraction |
3 |
|
== |
(numeric) 5 == 5 numeric equality |
4 |
|
== |
(string) "a" == "b" string equality |
4 |
|
!= |
5 != 4 not equal to |
4 |
|
> |
5 > 4 greater than |
4 |
|
>= |
5 >= 5 greater than or equal to |
4 |
|
< |
a < b+2 less than |
4 |
|
<= |
a <= b+2 less than or equal to |
4 |
|
& |
a & b AND |
5 |
|
AND |
a AND b |
|
|
!& |
1 !& 0 NAND (AND inverter) |
5 |
|
NAND |
1 NAND 0 |
|
|
$ |
1 $ 1 XOR (exclusive OR) |
6 |
|
XOR |
1 XOR 1 |
|
|
!$ ) |
1 !$ 1 XNOR (exclusive NOR |
6 |
|
XNOR |
1 XNOR 1 |
|
|
# |
a # b OR |
7 |
|
OR |
a OR b |
|
|
!# |
a !# b NOR (OR inverter) |
7 |
|
NOR |
a NOR b |
|
|
? |
(5<4) ? 3:4 ternary |
8 |
7、巨功能模块(LPM功能)
Mega功能模块列表:
门类:
lpm_and ;lpm_inv ;lpm_bustri ;lpm_mux ;lpm_clshift ;lpm_or ;lpm_constant lpm_xor ;lpm_decode ; mux ; busmux
运算类:
lpm_abs ;lpm_counter ;lpm_add_sub ;lpm_mult ;lpm_compare
存储类:
csfifo ;lpm_ram_dq ;csdpram ;lpm_ram_io ;lpm_fflpm_rom
lpm_latch lpm_dff (for backward compatibility only)
lpm_shiftreg lpm_tff (for backward compatibility only)
其它类:
clklock pll ntsc
核心类:
a16450 a8255 a6402 ffta6850 rgb2ycrcb a8237 ycrcb2rg b a8251
具体的功能块输入输出信号见Max+plusⅡ软件帮助。
8、老逻辑功能块(Old-Style Macrofunctions)和宏功能块(Macrofunction)
功能模块:
|
Adders |
|
Latches |
|
Arithmetic Logic Units |
|
Multipliers |
|
Buffers |
|
Multiplexers |
|
Comparators |
|
Parity Generators/Checkers |
|
Converters |
|
Rate Multipliers |
|
Counters |
|
Registers |
|
Decoders |
|
Shift Registers |
|
Digital Filters |
|
Storage Registers |
|
EDAC |
|
SSI Functions |
|
Encoders |
|
True/Complement I/O Elements |
|
Frequency Dividers |
具体的功能块输入输出信号见Max+plusⅡ软件帮助。
9、基本逻辑功能块(Primitives)
缓冲器类:
|
CARRY |
|
OPNDRN |
|
CASCADE |
|
SOFT |
|
EXPTRI |
|
GLOBAL (SCLK) |
|
WIRE (GDFs only) |
|
LCELL (MCELL) |
触发器和琐存器类:
|
DFFSRFF |
|
DFFE |
|
SRFFE |
|
JKFF |
|
TFF |
|
JKFFE |
|
TFFE |
|
LATCH |
输入输出端口类:
|
BIDIR |
|
INOUT |
|
INPUT |
|
IN |
|
OUTPUT |
|
OUT |
|
BIDIRC (GDFs only) |
|
INPUTC (GDFs only) |
|
OUTPUTC (GDFs only) |
逻辑类:
|
AND |
|
NOR |
|
NOT |
|
OR |
|
XNOR |
|
XOR |
|
NAND |
|
VCC (GDFs only) |
|
BAND (GDFs only) |
|
BNAND (GDFs only) |
|
BNOR (GDFs only) |
|
BOR (GDFs only) |
|
GND (GDFs only) |
具体的功能块的功能和输入输出信号见Max+plusⅡ软件帮助。
三、AHDL语言设计步骤
第一步:选File/Project/Name菜单建立项目名。
第二步:选File/New菜单,并选text Editor条目,进入文本编辑窗,然后输入电路设计文件。
第三步:选File/Project/Save & Check 菜单将文件存盘并检查文件的正确性。
第四步:选Assign/Device菜单,在指定器件窗口指定MAX7000S系列,并选EPM7128SLC84-15器件。
第五步:选Assign/Global Project Logic Synthesis菜单,指定逻辑综合的类型为FAST。
第六步:选Max+plus2/Floorplan Editor 菜单,将设计文件的输入和输出引脚赋予实际器件。
第七步:选File/Project/Save & Compile 菜单,编译设计文件。
第八步:选Max+plus2/Time Analyzer 菜单,在Delay Matrix 查看时间特性。
第九步:若有下载硬件,就可以选Max+plus2/Programmer菜单进行配置下载,然后在硬件环境中观察设计的正确性,若无硬件环境就只能进行功能仿真,进行第十一步。
第十步:选Max+plus2/waveform Editor菜单,编辑输入信号波形(在波形编辑窗口,选Node/Enter Nodes from SNF菜单将输入和输出端口凋入,然后再编辑)。
第十一步:选Max+plus2/Simulator 菜单进行行为访真。
第十二步:观察仿真结果,研究设计的正确性。
说明:若使用已经编写完毕的文件,选File/Open打开文件后,一定用File/Project/Set Project to Current file菜单将当前打开的文件设置为当前项目。
注:分设计题目必须和文件名称相同。