版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第五章 AHDL语言及其应用,2,AHDL语言概述,AHDL(Altera Hardware Description Language) 语言是一种支持Altera公司器件的硬件描述语 言,它是一种模块化的高级语言,集成于 MAX+PLUS II系统中,适合描述复杂的组合逻 辑、状态机和真值表。用户可以使用AHDL语言 建立一个完整的层次结构,也可以在一个层次结 构的设计中混合使用AHDL文本设计和其他类型 的设计文件,但在存储、编译等环节其文件的扩 展名一定是TDF(*.tdf)。,3,5.1 AHDL设计的基本结构,一个简单的示例:,4,AHDL语言的规则及结构特点:,1)在ADHL语
2、言中字符不区分大小写,即大小写的含义相同。 2)同一类型多个输入、输出或变量之间可以用逗号(“,”)分隔,每一个完整的语句都以分号(“;”)结束。 3)AHDL语言中的语句不依赖描述的前后顺序。 4)AHDL设计文件通常是由段和一些语句组成。 5)AHDL程序段中,有两个段是每个AHDL文件所必须包含的,它们是子设计段和逻辑设计段。 6)关键字SUBDESIGN之后的TAND2是子设计段的名称,也是AHDL语言文本文件的文件名,在MAX+PLUS II系统中使用时,要求其扩展名为TDF(*.TDF)。,5,5.2 节点和数组,节点和数组的定义: (1)节点 节点就是电路的连接点,是在AHDL语
3、言中使用最广泛的一种类型。输入、输出端口、VCC、GND等内部没有记忆功能的变量都可以看成节点。 (2)数组 数组是节点或触发器等类型的组合。按照结构特点可分为十进制数组和序列数组两种。,6,十进制数组与序列数组,1)十进制数组。其名称为一个符号(或端口名)跟一个方括号(定义数组的长度)组成,例如a3.0,在这类数组名后跟一个域,符号名或端口名加上引导的域,域中最长的数字的总长度不能超过32个字符。 2)序列数组。其名称由一组符号名、端口名或数组组成,它们之间以逗号分隔,并被括在圆括号中如(a,b,c);十进制数组名也可以放在这个括号中,例如(a,b,c5.1)。,7,关于数组的注意事项,1)
4、如果要表示一个数组中的部分单元,只需写出起止单元序列号如A2.1。 2)如果一个数组等于VCC或GND,数组中的每一个成员都将被置成VCC或GND。 3)如果一个数组等于一个常数,则将常数扩展成与数组同等长度的二进制数后再赋值。 4)如果一个数组被连接到一个单节点,则该数组所有的节点都与单节点b相连。 5)一个数组最多包括256个变量。,8,AHDL中的数字,在AHDL中可以单独或组合方式使用十进制、二进制、八进制和十六进制,其中十进制是AHDL语言中的默认方式。,9,5.3 布尔等式,布尔等式在逻辑段中用来代表节点之间的连接以及输入及输出的逻辑关系。在布尔等式右边可以是数组、数据、节点之间逻
5、辑运算或算术运算。 下面请看一个具体的示例: 用AHDL语言描述下面的组合逻辑电路:,10,可用下面程序描述 :,SUBDESIGN boole1 - SUBDESIGN段,boole1标识程序名。 ( a0, a1, b : INPUT; -在()内定义输入、输出的引脚。 out1, out2 : OUTPUT; ) BEGIN -描述开始。 out1 = a1 -用END表示程序结束。,11,逻辑运算符,逻辑运算符基本规则是按位操作如:!a5.1被解释为(!a4,!a3,!a2,!a1);!B“1001”的结果是对每一位求反后为B“0110”;a3.1 CASE语句中不同的状态由状态变量的
6、值决定,状态的变化由变量控制,根据不同的变量值执行相应的操作。CASE语句没有优先级的问题,只要条件成立则相应的操作马上被执行。,19,IF THEN 和CASE比较,(1)相同点 IFTHEN和CASE语句有相似之处,在通常的情况下,可以用任意一种中结构达到相同的结果。 (2)不同点 1)IFTHEN 语句可以描述带优先级的算法,如优先编码器、优先译码器的描述等;而CASEWHEN语句的各个状态的优先级相同,因此不能进行优先编码器、优先译码器等含有优先级的描述。 2)在两者都能实现的描述中,CASEWHEN 语句层次清楚,使用简单,20,真值表TABLE的用法,AHDL中的TABLE引导的真
7、值表与数字电路中的功能是一致的,只是书写方式不同。在AHDL中真值表由表头和表体两部分组成。表头由关键字TABLE、一组由逗号分开的真值表输入项、一个箭头符号(=)以及一组由逗号分开的输出项组成。格式如下: TABLE 输入项 = 输出项; 表体部分是具体逻辑关系的描述,其的格式与表头相似,但应注意表体中的数据或状态与表头中输入项(或输出项)的一一对应关系。 注意:真值表各行中被逗号分开的项数一定要与表头中被逗号分开的项目数量相同。,21,FOR GENERATE 语句,FOR语句的语法规则如下: FOR ( 符号名 ) IN 循环变量 TO 循环次数范围 GENERATE ; END GEN
8、ERATE; For后的循环变量是一个临时变量而且是局部变量,不必事先定义。该变量不能在操作语句中赋值和修改。它由循环语句自动定义。使用时应当注意,在FORGENERATE语句范围内不能再有其它变量与此循环变量同名。 循环次数:每执行完一个循环后循环变量递增1,直至达到循环次数范围最大值。循环次数范围一般是常数,或常数表达式,22,CONSTANT语句,CONSTANT语句 利用CONSTANT语句可以定义一个字符常量,如:CONSTANT NUM_OF_ADDERS = 8;在其后的使用中,都可以用NUM_OF_ADDERS表示常量8,提高了程序的可读性,程序的修改也比较方便。注意CANST
9、ANT语句的描述应放在SUBDESIGN语句之前。,23,例题:,用FORGENERATE语句和CANSTANT语句配合实现任意长度的全加器。 程序如下: CONSTANT NUM_OF_ADDERS = 8;定义一个常量NUM_OF_ADDERS SUBDESIGN 4gentst ( aNUM_OF_ADDERS.1,bNUM_OF_ADDERS.1,cin : INPUT; cNUM_OF_ADDERS.1,cout: OUTPUT; ) VARIABLE carry_out(NUM_OF_ADDERS+1).1 : NODE; BEGIN carry_out1 = cin; FOR i
10、 IN 1 TO NUM_OF_ADDERS GENERATE ci = ai $ bi $ carry_outi;% Full Adder % carry_outi+1 = ai 当i从1到NUM_OF_ADDERS依次增加,对应的Ci、ai、 bi、 carry_outi也依次从C1、a1、b1、carry_out1变化并执行相应的操作,直到i=8。,24,DEFAULT语句,Default 语句在AHDL语言中可以指定输出或变量的初值,在ifthen、casewhen、table语句中,若变量所表达的范围没有全部指定,则变量没有指定部分的值即为default语句所指定的值。如果没有def
11、ault语句,一般默认为“0”或GND。Default语句是具体行为语句,应放在逻辑段中,其格式如下: DEFAULTS 具体行为语句; END DEFAULTS; Default语句还可以解决对同一变量多次赋值的仲裁(决断),对变量的多次赋值实际是将多个信号通过“线与”( wired-AND)或“线或” (wired-OR)的方式与变量连在一起。如果在default语句中指定为VCC,实现“线与”功能,指定为GND实现线或的功能。,25,FUNCTION 符号名() RETURN()的用法,前面已介绍了在MAX+PLUS下采用create default symbol创建一个符号,以便进行层
12、次电路设计的方法。在AHDL语言中也可以采用同样的方法设计。设计的步骤如下: 1)将设计通过仿真验证的电路形成符号(在MAX+PLUSS下通过create default symbol形成符号,如果是用AHDL语言描述的程序可以不用形成符号)。 2)在subdesign section之前,通过function符号名() return()方式引用。 3)在variable section 定义一个该符号的变量,则该变量即具有符号所有属性。 4)在logic section设置该变量的属性,并具体使用。,26,INCLUDE用法,Include 语句的用法与function return语句的用
13、法很相似,其四个步骤如下: 1)将设计通过仿真验证的电路形成include 文件(在MAX+PLUSS下通过create default include file)。 2)在subdesign section之前,通过include “fulladd5.inc”;方式引用。 3)在variable section 定义一个该符号的变量,则该变量即具有符号所有属性。 4)在logic section设置该变量的属性,并具体使用。,27,PARAMETERS语句的用法,使用Parameters语句可以定义一个或几个参数,以便实现参数化模块(符号SYMBOL)的设计,如存储器“ROM”设计中的数据宽
14、度、地址深度、字节个数等。Parameters语句的定义格式如下: PARAMETERS ( FILENAME = “myfile.mif”, - “=“ 后面的部分是默认值(可选项) WIDTH, AD_WIDTH = 8, NUMWORDS = 2AD_WIDTH );,28,Parameters的定义语句有如下特性:,1)以关键字PARAMETERS开始,后面是以”( )”括起来的参数列表,以及可选的默认值。 2)表中的参数以逗号“,”隔开,“=“后面是可选的默认值,但数据宽度WIDTH不能有默认值。 3)参数的名称可以是用户自己定义的符号,也可以是Altera预定义的参数。双引号括起来
15、的字符参数,作为字符串处理;否则按算术表达式处理,如果处理失败,仍按照字符串处理。 4)该定义以分号“;”结束。,29,参数的定义及使用中应注意的几个问题,1)参数表的定义应放在subdesign section之前。参数一旦定义就可以在整个TDF文件中使用,使用次数不受限制。 2)参数应先定义后使用,参数名称在整个文件中是唯一的。 3)参数名称中不能包含空格,但可以用“_”以提高程序的可读性。 4)参数的定义中引用了其它参数,则该参数必须是已经定义过的参数。切忌不要循环定义,,30,5.6 其他语句的用法,在AHDL语言中还有一些语句如ifgenerate语句、assert语句、report
16、语句、title语句、SEVERITY等。这些语句对具体电路的形成、电路的参数没有实质的影响,但用好这些语句对程序的调试、排错、器件的使用会有很大的帮助。,31,ifgenerate语句,ifgenerate的格式如下: If(表达式) generate 行为语句列表1; else generate 行为语句列表2; end generate; 如果表达式成立(不为0), 执行行为语句列表1;否则,执行行为语句列表2。 If Generate语句与If Then相比较有如下特点: 1)If Generate语句可以用在Variable 段和Logic段,而If Then语句只能用在Logic段
17、。 2)If Then语句的判断条件是布尔表达式,而If Generate语句的判断条件是算术表达式的超集,一般是预定义的参数或字符串组成的表达式。 3)If Generate语句与If Then 语句的另一个重要的区别是:If Then判断条件是在硬件电路中实现的,而If Generate的判断条件是在编译系统进行编译时根据该条件决定编译哪一部分程序,以便形成不同的电路。,32,Assert、Report、Severity语句,Assert、Report、Severity这三条语句一般情况下是一起使用的,使用顺序为 ASSERT (表达式) REPORT “Detected compilat
18、ion for % family” DEVICE_FAMILY SEVERITY error;,33,ASSERT(断言)语句,ASSERT语句根据括号的表达式决定后面的REPORT语句和SEVERITY语句是否激活。如果表达式成立,则跳过REPORT语句和SEVERITY语句,而执行后面的语句;表达式不成立将激活后面的REPORT语句和SEVERITY语句。如果ASSERT语句后面没有表达式,则ASSERT及其后的REPORT语句和SEVERITY语句总是处于激活状态。,34,REPORT语句,REPORT语句一般由关键字REPORT所引导的双引号括起来的字符串和信息参数(informati
19、on parameters)两个部分组成,以报告编译器的在不同条件下的编译信息。字符串中用“%”可以替代信息参数的具体内容。,35,SEVERITY语句,SEVERITY语句一般只跟三个参数:INFO、WARNING、ERROR。INFO参数将REPORT语句后面的字符串作为一般信息处理,不影响编译的继续处理。WARNING参数,在编译界面的MESSAGE框中将REPORT语句后面的字符串作为警告,也不影响编译的继续处理。ERROR参数,在编译界面的MESSAGE框中将REPORT语句后面的字符串作为错误信息处理,终止编译,等候错误处理。,36,5.7 时序逻辑电路,时序电路中所用的存储单元主
20、要有锁存器LATCH和触发器两种,其中触发器又有D触发器(DFF)、含使能端的D触发器(DFFE)、含使能端的JK触发器(JKFFE)、RS触发器(RSFF)、含有使能端的RS触发器(RSFFE)、T触发器(TFF)、含有使能端的T触发器(TFFE)等类型。 所有的边沿触发器均为上升沿触发,带使能控制端(ENA)的触发器,其ENA为高电平有效。,37,触发器和锁存器的各个信号名称,CLK触发器时钟CLOCK(输入),上升沿有效 CLRN清零端CLEAR(输入),低点平有效 D,J,K,R,S,T触发器信号输入端 ENA锁存或脉冲波输入使能端控制,高点平有效 PRN置”1”控制端,低点平有效 Q
21、输出信号端,38,VARIABLE段(variable section),它是时序电路中必不可少的部分,因为触发器、节点、锁存器等定义是在该段中进行的。Variable section 与subdesign section 结构很相似,都是由标识符、冒号(:)、变量类型组成;其中subdesign section的类型为INPUT、OUTPUT、BIDIR。而Variable section的变量类型为NODE、DFF、DFFE、SRFF等。 在Variable section中,NODE类型与其他触发器类型还有区别,NODE类型在电路中只相当于一个连接点,起到中间变量的作用。它没有存储功能,
22、其值瞬间变化。而触发器具有数据存储功能,一般情况下需要与时钟配合才能工作,39,计数器设计,异步计数器 异步计数器就是利用计数中的各触发器的时钟相对独立,下面以T触发器串联分频计数器为例介绍异步计数器的用法。 SUBDESIGN 4asycnt ( clk,en,rst:INPUT;-定义时钟、使能、复位输入端口 q3.0:OUTPUT; -数组q为数据输出 ) VARIABLE ff3.0:TFF;-定义变量ff3.0为T触发器 BEGIN q=ff.q;-触发器的q端接数据输出 ff.t=en; ff.clrn=rst;-触发器的清零端接rst端 ff0.clk=clk; ff1.clk=
23、ff0.q; ff2.clk=ff1.q; ff3.clk=ff2.q; END;,40,将程序输入存盘编译进行波形仿真,仿真波形如下,41,分频器的设计,在CPLD/FPGA的系统设计中往往多个频率相互配合工作,因此分频器的设计在时序电路设计中也是一个重要的环节。下面我们以一个例子说明分频器的设计方法。 例: 6分频的电路描述。 SUBDESIGN fp (inclk :INPUT; F:OUTPUT; ) VARIABLE count3.0,f:DFF; BEGIN count.clk=inclk; F.clk=inclk; IFcount=2THEN count=0;F=!F; ELSE
24、 count=count+1;F=F; END IF; END;,42,数字钟设计举例,12归1计数器程序设计。 subdesign twelveto1 (inclk :input; outa3.0 :output; outb3.0:output; ) variable va3.0:dff;vb3.0:dff; -计数器变量 begin va3.0.clk=inclk;vb3.0.clk=inclk; -设置时钟 if (va=2 and vb=1) then -如果为12 ,则低位置1,高位清0; -否则跳到elsif va=1; vb=0; elsif va=9 then -不为12,判断
25、低位是否为9,为9成立 va=0; -低位清0 vb=vb+1; -高位加1 else-不为12,低位也不等于9 va=va+1;-低位加1 vb=vb;-高位保持 end if; outa=va;outb=vb; end;,43,5.8 状态机的描述,状态机的结构 状态机就是一组触发器的输出状态随着时钟和输入信号按照一定的规律变化的一种过程。状态机一般情况可分为摩尔机和梅利机两种,以适用不同的设计和化简方法。但状态机在AHDL可以直接用ifthen 、casewhen、 table等结构描述,具体的化简可以由max+plus软件实现,因此这两种状态机在AHDL语言中的设计没有多大区别,在后续
26、的介绍中不在区分摩尔机和梅利机。状态机的定义在VARIABLE段由MACHINE WITH STATES引导,后面由括号组成的状态,如定义ss为状态机的状态变量,其格式如下: ss: MACHINE WITH STATES (s0, s1, s2, s3); ss定义为状态机的状态变量后,ss即具有时钟(CLK)、复位(RESET)和使能(ENA)信号输入端,CLK是状态机的同步时钟,RESET可以强迫状态机回到初时状态,44,状态机举例:,设计一个逻辑电路,其输入信号为:时钟信号CLK、复位信号RESET、输入Y;输出信号为Z。输入信号与输出信号之间的逻辑关系用图5-10所示的状态机来描述。
27、 输入信号与输出信号状态机的描述 图中的输出状态一共有S0、S1、S2、S3共4种状态,其不同的输入信号决定不同的状态,不同的状态又决定不同的输出信号。,45,对应的参考程序如下:,SUBDESIGN mealy ( clk : INPUT; reset : INPUT; y : INPUT; z : OUTPUT; ) VARIABLE ss: MACHINE WITH STATES (s0, s1, s2, s3); BEGIN ss.clk = clk; ss.reset = reset; TABLE % current current current next % % state in
28、put output state % ss, y = z, ss; s0, 0 = 0, s0; -当y=0时,S0S0 s0, 1 = 1, s1;-当y=1时,S0S1 s1, 0 = 1, s1; -当y=0时,S1S1 s1, 1 = 0, s2; -当y=1时,S1S2 s2, 0 = 0, s2; -当y=0时,S2S2 s2, 1 = 1, s3; -当y=1时,S2S3 s3, 0 = 0, s3; -当y=0时,S3S3 s3, 1 = 1, s0; -当y=1时,S3S0 END TABLE; END;,46,非同步状态输出的状态机,电路的设计输出,仅由状态机决定,但状态机
29、的状态并不作为电路的输出。设计者不用关心需要多少个触发器来定义状态机,只要在VARIABLE中定义状态机,在逻辑描述中只要描述状态机的转换关系即可。编译器能自动设定最小的触发器数量和合适的状态值,设计者不用为每个状态设定状态变量和状态值。 。,47,带同步状态输出的状态机,如果一个状态机的状态作为电路的输出,应在状态机的MACHINE OF BITS ()的括号中指定与输出引脚对应的状态变量,并在WITH STATES后的()中具体指定状态的数值,以形成状态与输出的对应关系。,48,单热点编码状态机,单热点编码状态机(one-hot encoding state machine)就是在每个状态
30、的编码中,只有一个状态变量为1,其余的都为0。 如状态变量为q3.0,状态为S0、S1、S2、S3,则编码S0=0001,S1=0010,S2=0100,S3=1000。 这种编码方式的优点是:有几个状态变量,就对应几个状态编码,没有冗余状态,不需要处理无效状态,因此设计和使用都相对简单。,49,无效状态的处理,如果状态机设计成非“单热点”(one-hot)编码的状态机,而且状态变量所能表达的状态总数多于实际使用的状态数,状态机中就有无效的状态(这种状态也称为非法状态)。由于状态机的各个变量建立时间(setup time)或保持时间(hold time)的不一至,有可能进入无效状态。状态机在进
31、入无效状态后,由于没有明确的指示下一个状态的值,因此结果很难预料。要从非法状态恢复到正常状态,必须在状态机中为所有的非法状态命名。如三个状态变量,共有8种状态,明确使用的有5种,还有三种没有使用,这三种即为无效状态,要想从三个无效状态返回,必须对这三个无效状态一一命名,并对其处理(在casewhen语句中可以用when others=对无效状态统一处理,但无效状态的命名是不能省略的)。,50,状态机的导入与导出,在Subdesign 段,可以定义输入、输出为MACHINE INPUT 或 MACHINE OUTPUT类型。在顶层文件中通过function return语句将底层的状态机导入或导出,但MACHINE INPUT 或 MACHINE OUTPUT类型的输入、输出必须在function return中具体指定,,51,在状态机的导入与导出的使用中注意事项如下:,1)在subdesign段中有MACHINE INPUT 和 MACHINE OUTPUT类型的输入、输出时,该文件在层次设计中只能作为底层文件使用,但仍然可以使用”Project Save 其中in为三态总线的输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《认识系统中的控制》同步练习及答案-2026-2027学年川教版(新版)小学信息科技六年级上册
- 2026年药品不良反应排查整改报告
- 2026年卫生监督协管业务模考试题(附答案)
- 2026年医疗器械监督管理条例三基年度培训方案
- 2026 江苏事业编医疗岗 易错题试卷 含解析
- 事业编医疗岗 河北事业编综合管理岗 历年真题试卷
- 2026年海通证券股份有限公司人员招聘考试参考试题及答案详解
- 2026年内蒙古能源建设投资集团有限公司人员招聘笔试参考试题及答案详解
- 2026年兵团直属人员招聘笔试参考试题及答案详解
- 2026年北京金隅集团股份有限公司人员招聘考试备考题库及答案详解
- 2025年城管协管员笔试考试试题(含答案)
- 医疗健康管理与慢病防控
- 2026年认证基础、管理体系认证基础主观题考试(附答案)解析
- 2026河北机关事业单位工人技能等级考试(汽车驾驶员·高级)历年参考题库含答案详解2卷
- 2026年急诊超声应用培训课件
- 正压送风口阀体损坏更换安装调试方案
- 新学期(2026年秋)小学二年级体育教学工作计划
- 跟腱断裂的术后护理
- 《光伏电站场区总平面布置技术要求》
- 物料预警管理办法
- 排球裁判员培训讲课课件
评论
0/150
提交评论