《第3章 MAXPLUS软件的使用(第5节)58986.doc》由会员分享,可在线阅读,更多相关《第3章 MAXPLUS软件的使用(第5节)58986.doc(29页珍藏版)》请在金锄头文库上搜索。
1、3.5用AHDL语言设计数字系统 AHDL语言是ALTERA公司开发的高效、易学的硬件描述语言,在max+plus2软件中使用它比VHDL语言更有效。3.5.1 AHDL 简介 一个AHDL逻辑设计至少必须包含一个分设计段(Subdesign Section)和一个逻辑设计段(Logic Section),其它段和语句是可选择的,AHDL的设计文件是用Max+Plus软件的文本编辑器编写的源程序(*.tdf)下面介绍AHDL的一些语句。(1) 常数叙述语句该语句可以用一个字符串代表数字、算数表达式例:CONSTANT UPPER_LIMIT = 130;CONSTANT BAR = 1 + 2
2、 DIV 3 + LOG2(256);CONSTANT FOO = 1;CONSTANT FOO_PLUS_ONE = FOO + 1; (2) 定义函数语句该语句可以定义一个在分设计中使用函数,例:DEFINE MAX(a,b) = (a b) ? a : b;SUBDESIGN( dataaMAX(WIDTH,0).0: INPUT; databMAX(WIDTH,0).0: OUTPUT;)BEGIN datab = dataa;END;此例中MAX函数保证最小的数据位宽度。(3)参数叙述语句该语句可以声明参数化巨功能模块和宏功能模块的一个或几个参数例:PARAMETERS( FILEN
3、AME = myfile.mif, - optional default value follows = sign WIDTH, AD_WIDTH = 8, NUMWORDS = 2AD_WIDTH );(4)函数描述语句共有4种形式的逻辑函数可以供用户调用,它们是:Megafunction具有复杂逻辑功能的巨功能模块,放在mega_LPM库中,可以供用户调用Primitive一些基本逻辑功能函数,可以直接调用Macrofunction具有高水平的逻辑宏功能模块,共有300多种,放在max2lib子目录中State Machine一种具有多个状态的时序电路,可以形成符号图形,用户可以调用 以上
4、几种逻辑功能函数都可以以逻辑函数名和符号图形的方式被调用,在AHDL源文件中调用时要首先进行声明,见如下例子。1)参数化函数:FUNCTION lpm_add_sub (cin, dataaLPM_WIDTH-1.0, databLPM_WIDTH-1.0, add_sub) WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE, ONE_INPUT_IS_CONSTANT) RETURNS (resultLPM_WIDTH-1.0, cout, overflow);该函数名为lpm_add_sub,输入端口为 cin, d
5、ataaLPM_WIDTH-1.0, and databLPM_WIDTH-1.0;关键字WITH后是参数表,关键字RETURN后是输出口resultLPM_WIDTH-1.0, cout, and overflow2)非参数化函数:FUNCTION compare (a3.0, b3.0)RETURNS (less, equal, greater);该函数名为compare,输入端口为a3, a2, a1, a0, b3, b2, b1, and b0.关键字RETURN后是输出口less, equal, greater3)状态机函数:当输入和输出是状态机时,应该按照如下例子定义函数,在返回
6、结果语句中加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 WIDTHSEVERITYERROR
7、HELP_IDINTVALUE;- for internal Altera use only在该例中,WIDTH0是断言条件,若此条件不满足,将显示REPORT后的内容和SEVERITY后的错误等级。(7)分设计段分设计段声明输入、输出和双向口例:SUBDESIGN top(foo, bar, clk1, clk2: INPUT = VCC;a0, a1, a2, a3, a4: OUTPUT;b7.0: BIDIR; )端口类型可以是:INPUT, OUTPUT, BIDIR, MACHINE INPUT, 或 MACHINE OUTPU其中MACHINE INPUT或MACHINE OUT
8、PUT口不能用于TDF的顶层,在端口类型说明后可以加端口当前电平VCC或者是GND。(8)变量段该段是声明和产生逻辑段中使用的变量的地方,如下是变量段的例子。VARIABLEa, b, c: NODE;temp : halfadd;ts_node: TRI_STATE_NODE;IF DEVICE_FAMILY = FLEX8000 GENERATE8kadder: flex_adder;d,e: NODE;ELSE GENERATE7kadder: pterm_adder;f,g: NODE;END GENERATE;1)函数变量声明例:VARIABLE comp : compare;add
9、er : lpm_add_sub WITH (LPM_WIDTH = 8);该变量段声明comp为函数compare的引用变量,声明adder为函数lpm_add_sub的引用变量,一旦声明完毕,就意味着:变量comp就是如下端口的代表: a3.0, b3.0 : INPUT;- inputs to compare less, equal, greater : OUTPUT;- outputs of compare而变量adder是如下端口的代表: a8.1, b8.1: INPUT; - inputs of adder sum8.1: OUTPUT;- outputs of adder也就是
10、如下的引用变量可以使用在当前的设计文件中: comp.a, comp.b, comp.less, comp.equal, comp.greater adder.dataa, adder.datab, adder.result2)节点变量声明AHDL 软件支持两种节点形式:NODE and TRI_STATE_NODE。例:SUBDESIGN node_ex(a, oe : INPUT;b : OUTPUT;c : BIDIR;)VARIABLEb : NODE;t : TRI_STATE_NODE;BEGINb = a;out = b% therefore out = a %t = TRI(a
11、, 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,TFFEJK型:JKFF,JKFFE,SRFF,SRFFE琐存器:LATCH例:VARIABLE ff : TFF;该变量一旦声明完毕,就可以使用如下变量:ff
12、.t, ff.clk,ff.clrn,ff.prn,ff.q对于只有一个输出的功能模块,可以简化使用。DFF的功能说明为:FUNCTION DFF(d, clk, clrn, prn) RETURNS (q);. 则对于如下的变量段,逻辑段的意思是a.d = b.q;VARIABLEa, b : DFF;BEGINa = b;END;4)状态机变量声明例:VARIABLEss :MACHINE OF BITS (q1, q2, q3)WITH STATES ( s1 = B000,s2 = B010,s3 = B111);该例的意思是:状态机的名字是ss,状态位q1, q2, 和 q3是该机寄
13、存器的输出,状态机的状态是s1,s2,和s3, 并给出了当前状态值。(9)逻辑段在逻辑段中,说明设计文件的逻辑操作。1) 布尔方程逻辑段中布尔方程用于表达节点之间的逻辑关系,该关系必须遵从逻辑规则。例:a = (c & -B001101) + e6.1) # (p, q, r, s, t, v);表达式的左边可以是一个字符变量、端口和组,右边是布尔方程表达式。2) 布尔控制方程该控制方程用于建立状态机的时钟、复位和时钟使能信号,见下例:ss.clk = clk1;ss.reset = a & b;ss.ena = clk1ena;该控制方程的格式为.,所以该例中状态机名是ss,三个端口:时钟、复位和使能。3)CASE语句例:CASE f.q ISWHEN H00 =addr = 0;s = a & b;WHEN H01 =count.d = count.q + 1;WHEN H02, H03, H04 =f3.0.d = addr4.1;WHEN OTHERS =f.d = f.q;END CASE;3) 缺省叙述语句该语句指定真值表中变量的缺省值,例:BEGINDEFAULTSa = VCC;END DEFAULTS;IF y & z THENa = GND; END IF;END;4)IF THEN语句例:IF a = b THENc8.1 = H 77;addr3