第3章 MAXPLUS软件的使用第5节.docx
- 文档编号:24641698
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:39
- 大小:26.67KB
第3章 MAXPLUS软件的使用第5节.docx
《第3章 MAXPLUS软件的使用第5节.docx》由会员分享,可在线阅读,更多相关《第3章 MAXPLUS软件的使用第5节.docx(39页珍藏版)》请在冰豆网上搜索。
第3章MAXPLUS软件的使用第5节
3.5用AHDL语言设计数字系统
AHDL语言是ALTERA公司开发的高效、易学的硬件描述语言,在max+plus2软件中使用它比VHDL语言更有效。
3.5.1AHDL简介
一个AHDL逻辑设计至少必须包含一个分设计段(SubdesignSection)和一个逻辑设计段(LogicSection),
其它段和语句是可选择的,AHDL的设计文件是用Max+PlusⅡ软件的文本编辑器编写的源程序(*.tdf)
下面介绍AHDL的一些语句。
(1)常数叙述语句
该语句可以用一个字符串代表数字、算数表达式
例:
CONSTANTUPPER_LIMIT=130;
CONSTANTBAR=1+2DIV3+LOG2(256);
CONSTANTFOO=1;
CONSTANTFOO_PLUS_ONE=FOO+1;
(2)定义函数语句
该语句可以定义一个在分设计中使用函数,
例:
DEFINEMAX(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",--optionaldefaultvaluefollows"="sign
WIDTH,
AD_WIDTH=8,
NUMWORDS=2^AD_WIDTH
);
(4)函数描述语句
共有4种形式的逻辑函数可以供用户调用,它们是:
Megafunction—具有复杂逻辑功能的巨功能模块,放在mega_LPM库中,可以供用户调用
Primitive—一些基本逻辑功能函数,可以直接调用
Macrofunction—具有高水平的逻辑宏功能模块,共有300多种,放在max2lib子目录中
StateMachine—一种具有多个状态的时序电路,可以形成符号图形,用户可以调用
以上几种逻辑功能函数都可以以逻辑函数名和符号图形的方式被调用,在AHDL源文件中调用时要首先进行声明,见如下例子。
1)参数化函数:
FUNCTIONlpm_add_sub(cin,dataa[LPM_WIDTH-1..0],datab[LPM_WIDTH-1..0],add_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],anddatab[LPM_WIDTH-1..0];
关键字WITH后是参数表,
关键字RETURN后是输出口result[LPM_WIDTH-1..0],cout,andoverflow
2)非参数化函数:
FUNCTIONcompare(a[3..0],b[3..0])
RETURNS(less,equal,greater);
该函数名为compare,输入端口为a3,a2,a1,a0,b3,b2,b1,andb0.
关键字RETURN后是输出口less,equal,greater
3)状态机函数:
当输入和输出是状态机时,应该按照如下例子定义函数,在返回结果语句中加MACHINE关键字
FUNCTIONss_def(clock,reset,count)
RETURNS(MACHINEss_out);
(5)最小位数选择语句
定义一组数据中的最小数位是否是MSB(mostsignificantbit)或LSB(leastsignificantbit)
例:
OPTIONSBIT0=MSB;
(6)断言语句
该语句可以检验表达式、参数、数据、计算函数有效性和端口的使用情况。
例:
ASSERT(WIDTH>0)
REPORT"Width(%)mustbeapositiveinteger"WIDTH
SEVERITYERROR
HELP_IDINTVALUE;--forinternalAlterauseonly
在该例中,WIDTH>0是断言条件,若此条件不满足,将显示REPORT后的内容和SEVERITY后的错误等级。
(7)分设计段
分设计段声明输入、输出和双向口
例:
SUBDESIGNtop
(
foo,bar,clk1,clk2:
INPUT=VCC;
a0,a1,a2,a3,a4:
OUTPUT;
b[7..0]:
BIDIR;
)
端口类型可以是:
INPUT,OUTPUT,BIDIR,MACHINEINPUT,或MACHINEOUTPU
其中MACHINEINPUT或MACHINEOUTPUT口不能用于TDF的顶层,在端口类型说明后可以加端口当前电平—VCC或者是GND。
(8)变量段
该段是声明和产生逻辑段中使用的变量的地方,如下是变量段的例子。
VARIABLE
a,b,c:
NODE;
temp:
halfadd;
ts_node:
TRI_STATE_NODE;
IFDEVICE_FAMILY=="FLEX8000"GENERATE
8kadder:
flex_adder;
d,e:
NODE;
ELSEGENERATE
7kadder:
pterm_adder;
f,g:
NODE;
ENDGENERATE;
1)函数变量声明例:
VARIABLE
comp:
compare;
adder:
lpm_add_subWITH(LPM_WIDTH=8);
该变量段声明comp为函数compare的引用变量,声明adder为函数lpm_add_sub的引用变量,一旦声明完毕,就意味着:
变量comp就是如下端口的代表:
a[3..0],b[3..0]:
INPUT;--inputstocompare
less,equal,greater:
OUTPUT;--outputsofcompare
而变量adder是如下端口的代表:
a[8..1],b[8..1]:
INPUT;--inputsofadder
sum[8..1]:
OUTPUT;--outputsofadder
也就是如下的引用变量可以使用在当前的设计文件中:
comp.a[],comp.b[],comp.less,comp.equal,comp.greater
adder.dataa[],adder.datab[],adder.result[]
2)节点变量声明
AHDL软件支持两种节点形式:
NODEandTRI_STATE_NODE。
例:
SUBDESIGNnode_ex
(
a,oe:
INPUT;
b:
OUTPUT;
c:
BIDIR;
)
VARIABLE
b:
NODE;
t:
TRI_STATE_NODE;
BEGIN
b=a;
out=b%thereforeout=a%
t=TRI(a,oe);
t=c;%tisbusofcandtri_stateda%
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
例:
VARIABLEff:
TFF;
该变量一旦声明完毕,就可以使用如下变量:
ff.t,ff.clk,ff.clrn,ff.prn,ff.q
对于只有一个输出的功能模块,可以简化使用。
DFF的功能说明为:
FUNCTIONDFF(d,clk,clrn,prn)RETURNS(q);.
则对于如下的变量段,逻辑段的意思是a.d=b.q;
VARIABLE
a,b:
DFF;
BEGIN
a=b;
END;
4)状态机变量声明
例:
VARIABLE
ss:
MACHINE
OFBITS(q1,q2,q3)
WITHSTATES(
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语句
例:
CASEf[].qIS
WHENH"00"=>
addr[]=0;
s=a&b;
WHENH"01"=>
count[].d=count[].q+1;
WHENH"02",H"03",H"04"=>
f[3..0].d=addr[4..1];
WHENOTHERS=>
f[].d=f[].q;
ENDCASE;
3)缺省叙述语句
该语句指定真值表中变量的缺省值,
例:
BEGIN
DEFAULTS
a=VCC;
ENDDEFAULTS;
IFy&zTHEN
a=GND;
ENDIF;
END;
4)IFTHEN语句
例:
IFa[]==b[]THEN
c[8..1]=H"77";
addr[3..1]=f[3..1].q;
f[].d=addr[]+1;
ELSIFg3$g4THEN
f[].d=addr[];
ELSE
d=VCC;
ENDIF;
4)FORGENERATE语句
例:
CONSTANTNUM_OF_ADDERS=8;
SUBDESIGN4gentst
(
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;
FORiIN1TONUM_OF_ADDERSGENERATE
c[i]=a[i]$b[i]$carry_out[i];%FullAdder%
carry_out[i+1]=a[i]&b[i]#carry_out[i]&(a[i]$b[i]);
ENDGENERATE;
cout=carry_out[NUM_OF_ADDERS+1];
END;
5)真值表语句
该语句用于指定组合逻辑和状态机的输入和输出行为。
例:
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;
ENDTABLE;
该例中,a0和f[4..1].q是输入,f[4..1].d和control是输出,
3.5.2AHDL中的语言元素
(1)AHDL中的保留关键字
AHDL语言建议用大写字母书写如下关键字:
ANDFUNCTIONOUTPUT
ASSERTGENERATEPARAMETERS
BEGINGNDREPORT
BIDIRHELP_IDRETURNS
BITSIFSEGMENTS
BURIEDINCLUDESEVERITY
CASEINPUTSTATES
CLIQUEISSUBDESIGN
CONNECTED_PINSLOG2TABLE
CONSTANTMACHINETHEN
DEFAULTSMODTITLE
DEFINENANDTO
DESIGNNODETRI_STATE_NODE
DEVICENORVARIABLE
DIVNOTVCC
ELSEOFWHEN
ELSIFOPTIONSWITH
ENDORXNOR
FOROTHERSXOR
(2)保留识别符
AHDL中的保留识别符:
CARRYJKFFESRFFE
CASCADEJKFFSRFF
CEILLATCHTFFE
DFFELCELLTFF
DFFMCELLTRI
EXPMEMORYUSED
FLOOROPENDRNWIRE
GLOBALSOFTX
(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)+1positive
1
-
(unary)-1negative
1
!
!
aNOT
1
^
a^2exponent
1
MOD
4MOD2modulus
2
DIV
4DIV2division
2
*
a*2multiplication
2
LOG2
LOG2(4-3)logarithmbase2
2
+
1+1addition
3
-
1-1subtraction
3
==
(numeric)5==5numericequality
4
==
(string)"a"=="b"stringequality
4
!
=
5!
=4notequalto
4
>
5>4greaterthan
4
>=
5>=5greaterthanorequalto
4
<
a
4
<=
a<=b+2lessthanorequalto
4
&
a&bAND
5
AND
aANDb
!
&
1!
&0NAND(ANDinverter)
5
NAND
1NAND0
$
1$1XOR(exclusiveOR)
6
XOR
1XOR1
!
$)
1!
$1XNOR(exclusiveNOR
6
XNOR
1XNOR1
#
a#bOR
7
OR
aORb
!
#
a!
#bNOR(ORinverter)
7
NOR
aNORb
?
(5<4)?
3:
4ternary
8
(7)巨功能模块(LPM功能)
Mega功能模块列表:
门类:
lpm_andlpm_inv
lpm_bustrilpm_mux
lpm_clshiftlpm_or
lpm_constantlpm_xor
lpm_decodemux
busmux
运算类:
lpm_abslpm_counter
lpm_add_sublpm_mult
lpm_compare
存储类:
csfifolpm_ram_dq
csdpramlpm_ram_io
lpm_fflpm_rom
lpm_latchlpm_dff(forbackwardcompatibilityonly)
lpm_shiftreglpm_tff(forbackwardcompatibilityonly)
其它类:
clklockpll
ntsc
核心类:
a16450a8255
a6402fft
a6850rgb2ycrcb
a8237ycrcb2rgb
a8251
具体的功能块输入输出信号见Max+plusⅡ软件帮助。
(8)老逻辑功能块(Old-StyleMacrofunctions)和宏功能块(Macrofunction)
分类列表:
功能模块
Adders
Latches
ArithmeticLogicUnits
Multipliers
Buffers
Multiplexers
Comparators
ParityGenerators/Checkers
Converters
RateMultipliers
Counters
Registers
Decoders
ShiftRegisters
DigitalFilters
StorageRegisters
EDAC
SSIFunctions
Encoders
True/ComplementI/OElements
FrequencyDividers
具体的功能块输入输出信号见Max+plusⅡ软件帮助。
(9)基本逻辑功能块(Primitives)
缓冲器类:
CARRY
OPNDRN
CASCADE
SOFT
EXPTRI
GLOBAL(SCLK)
WIRE(GDFsonly)
LCELL(MCELL)
触发器和琐存器类:
DFFSRFF
DFFE
SRFFE
JKFF
TFF
JKFFE
TFFE
LATCH
输入输出端口类:
BIDIR
INOUT
INPUT
IN
OUTPUT
OUT
BIDIRC(GDFsonly)
INPUTC(GDFsonly)
OUTPUTC(GDFsonly)
逻辑类:
AND
NOR
NOT
OR
XNOR
XOR
NAND
VCC(GDFsonly)
BAND(GDFsonly)
BNAND(GDFsonly)
BNOR(GDFsonly)
BOR(GDFsonly)
GND(GDFsonly)
具体的功能块的功能和输入输出信号见Max+plusⅡ软件帮助。
3.5.3AHDL的使用例子
(1)使用AHDL中的数
例1:
SUBDESIGNdecode1
(
address[15..0]:
INPUT;
chip_enable:
OUTPUT;
)
BEGIN
chip_enable=(address[15..0]==H"0370");
END;
在该例中当地址为十六进制数370时,输出端“chip_enable”输出高电平。
(2)常数和定义函数功能的使用
例1:
常数使用例。
CONSTANTIO_ADDRESS=H"0370";%常数%
SUBDESIGNdecode2
(
a[15..0]:
INPUT;
ce:
OUTPUT;
)
BEGIN
ce=(a[15..0]==IO_ADDRESS);
END;
例2:
定义函数使用例。
PARAMETERS(WIDTH);
DEFINEMAX(a,b)=(a>b)?
a:
b;%使用定义功能定义的函数,该函数保证端口位数的数量%
SUBDESIGNminport
(
dataA[MAX(WIDTH,0)..0]:
INPUT;
dataB[MAX(WIDTH,0)..0]:
OUTPUT;
)
BEGIN
dataB[]=dataA[];
END;
(3)布尔表达式的使用
例1:
SUBDESIGNboole1
(
a0,a1,b:
INPUT;
out1,out2:
OUTPUT;
)
BEGIN
out1=a1&!
a0;
out2=out1#b;
END;
例2:
具有一个声明的节点
SUBDESIGNboole2
(
a0,a1,b:
INPUT;
out:
OUTPUT;
)
VARIABLE
a_equals_2:
NODE;%被声明的节点%
BEGIN
a_equals_2=a1&!
a0;
out=a_equals_2#b;
END;
例3:
具有组的例。
OPTIONSBIT0=MSB;%指定BIT0是MSB%
CONSTANTMAX_WIDTH=1+2+3-3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 MAXPLUS软件的使用第5节 MAXPLUS 软件 使用