您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > ABEL语言使用入门
电信系电子技术教研中心制作——ABEL语言使用入门9.2ABEL简介一、ABEL语言的基本语法二、ABEL源文件的基本结构三、ABEL语言的语句四、ABEL语言电路设计举例ABEL语言简介•ABEL语言是一种硬件描述语言(也称为ABEL-HDL),是开发PLD的一种高级程序设计语言,由美国DATAI/O公司于1983~1988年推出。•ABEL语言支持逻辑方程、真值表和状态图三种逻辑描述方式。•具有简单易学的特点。简四位二进制数的比较器DEMOCOMP4A3GABALABEA=BBA0…B3B0…ABEL样本文件ABEL程序moduleCOMP4declarationsA3,A2,A1,A0pin;B3,B2,B1,B0pin;G,L,Epinistype'com’;A=[A3..A0];B=[B3..B0];equationsG=(AB);L=(AB);E=(A=B);test_vectors([A,B]-[G,L,E])[0,0]-[1,0,0];[0,1]-[0,1,0];[15,10]-[0,0,1];endCOMP4句尾分号模块名逻辑方程段变量说明段测试向量段ABEL样本文件一、ABEL语言的基本语法•标识符与关键字•专用常量•注释与数•运算符和逻辑表达式•块•集合基本知识•标识符最长不得超过31个字符;•标识符与字母的大小写有关。如En和en是两个不同的标识符。1、标识符与关键字•标识符用来表示标识器件名称、器件引脚名称、输入或输出信号的名称、状态名称、集合名称、常量及模块名称等。•标识符必须以英文字母或下划线“”开始,其后可跟数字、英文字母、波浪线“~”和下划线“”,标识符与关键字(续)•关键字是一些具有特殊用途的保留标识符。•关键字不得用来给器件、引脚、节点、常量、集合、宏或信号命名。•关键字可以用大写、小写或大小写混合方式输入,它们表示的含义相同。2、专用常量常量说明.C.时钟脉冲输入(低电平—高电平—低电平转换).D.脉冲下降沿(高电平—低电平转换).F.悬浮的输入或输出信号.K.时钟输入(高电平—低电平—高电平转换).P.寄存器预加载.U.时钟脉冲上升沿(低电平—高电平转换).X.任意值.Z.三态值•表示方法是在英文字母的左下方及右下方各加一个圆点。•专用常量字母可以用大写或者小写字母输入,表示的含义相同。3、注释用户可用两种方式进行注释:DEMO(2)用一双斜杠//开始,以行结束来结束。(1)用一对双撇号括起来或用双撇号开始,以行结束来结束。(1)^b,^o,^d及^h(或^B,^O,^D及^H)表示,^d可以省略不写。(2)可以用英文字母的字符串表示数,如:'A'=^h41,'AE'=^h4145。4、数5、运算符和逻辑表达式•算术运算符•逻辑运算符•关系运算符•赋值运算符DEMO算术运算符运算符表达式举例说明运算优先级--A求二进制补码1-A-B减3+A+B加3*A*B乘2/A/B无符号整除2%A%B取模:无符号数整除的余数2ABA左移B位2ABA右移B位2优先级最高逻辑运算符!!A非1&A&B与2#A#B或3$A$B异或3!$A!$B异或非(同或)3关系运算符==A==B等于4!=A!=B不等于4AB小于4=A=B小于或等于4AB大于4=A=B大于或等于4赋值运算符=A=B组合逻辑赋值(把B的值立即赋给A,没有时延):=A:=B寄存器赋值(在下一个时钟脉冲有效沿来后,把B的值赋予A)6、块•块是括在大括号“{}”内的一段ASCII码文本,括号内的文本可以是一行,也可以是多行。•块用于方程式、状态图、宏定义和指示字中,块可以嵌套使用,即块中包含块。DEMO例:WHEN(Mode==S_Data)THEN{Out_data:=S_in;S_Valid:=1;}ELSEWHEN(Mode==T_Data)THEN{Out_data:=T_in;T_Valid:=1;}7、集合•集合是作为一个整体参与运算的一组信号或常量。•它采用一个标识符,用方括号内的一组信号或常量表示,其中的每一个信号或常量称为集合的元素。DEMO例:Addr=[A7,A6,A5,A4,A3,A2,A1,A0];为枚举法Addr=[A7..A0];为界限符法Addr=[A7..A2,A1,A0];为两种方法的组合8、ABEL语言对寄存器的描述Q1.q:=;Q1.clk=;Q1.ar=;Q1.ap=;用Q1表示D寄存器寄存器的输出Q1.d=;Q1.clk=;Q1.ar=;Q1.ap=;激励信号二、ABEL源文件的基本结构module模块名;模块开始[title'标题说明']Declarations[器件名device'器件的工业标号';]信号名,信号名pin[引脚号,引脚号][istype'属性'];信号名,信号名node[istype'属性'];[常量说明语句;][集合的定义;][宏定义语句;][equations逻辑方程;逻辑方程;][truth-table(输入变量-输出变量)真值表;][state-diagram(状态变量)状态图描述;][test-vectors(输入变量-输出变量)测试向量表;]end模块名;模块结束逻辑关系描述部分(三者取一或其任意组合)测试向量部分说明部分信号属性的说明属性字符串意义com组合型输出reg寄存器型输出invert目标器件中的反相器buffer目标器件中的缓冲器neg未规定的逻辑为‘1’pos未规定的逻辑为‘0’keep不将此信号从方程式中简化掉reg_dD型触发器reg_jkJK型触发器reg_srSR型触发器reg_tT型触发器例.设计一个4-2线编码器。MODULECODER24TITLE'CODER24'I3,I2,I1,I0PIN;O1,O0PINISTYPE'COM';TRUTH_TABLE([I3,I2,I1,I0]-[O1,O0])[0,0,0,1]-[0,0];[0,0,1,0]-[0,1];[0,1,0,0]-[1,0];[1,0,0,0]-[1,1];END用真值表实现ABEL_HDL语言组合型输出标题语句定义段三、ABEL语言的语句•方程式语句•真值表语句•状态图语句•方程式中的赋值符为“=”或“:=”。•在方程中允许使用WHEN-THEN-ELSE语句。但不能使用IF-THEN-ELSEEQUATIONS[WHEN条件THEN][!]变量名=表达式;[ELSE方程式;]或者[WHEN条件THEN]方程式;[ELSE方程式;]方程式语句EQUATIONSx=!(a&b);与非门y=a#b;或门!z=a$b;异或门例:例:设计一个4位左移移位寄存器。MODULESHIFT4TITLE'SHIFT4'DIN,CLK,CLRPIN;Q3..Q0PINISTYPE'REG';OUT=[Q3..Q0];EQUATIONSOUT.CLK=CLK;OUT.AR=CLR;Q0:=DIN;Q1:=Q0;Q2:=Q1;Q3:=Q2;ENDABEL_HDL语言属性说明逻辑方程段变量说明段输入输出信号定义例:设计一个4选1数据选择器。MODULEMUX4S1TITLE'MUX4S1'S1,S0PIN;D3,D2,D1,D0PIN;YPINISTYPE'COM';S=[S1,S0];EQUATIONSWHEN(S==0)THENY=D0;WHEN(S==1)THENY=D1;WHEN(S==2)THENY=D2;WHEN(S==3)THENY=D3;ENDABEL_HDL语言例:设计一位十进制加法计数器。MODULEcount10q3,q2,q1,q0PINISTYPE'reg';clk,cdPIN;count=[q3..q0];EQUATIONScount.clk=clk;count.ar=cd;WHEN(count==9)THENcount:=0;ELSEcount:=(count.fb+1);END注意WHEN_THEN_ELSE语句、fb点扩展的使用q3..q0的时钟由clk提供•它用表格的形式将输出定义为输入的函数。•以关键字TRUTH_TABLE为开始,后面跟表头向量和表格。TRUTH_TABLE(输入-输出)输入-输出;或TRUTH_TABLE(输入[:寄存器型输出]-输出;)输入[:寄存器型输出]-输出;真值表语句2/4线译码器MODULEdecoderDECLARATIONSa,bpin;y0,y1,y2,y3pinistype'com';TRUTH_TABLE([a,b]-[y0,y1,y2,y3])[0,0]-[1,0,0,0];[0,1]-[0,1,0,0];[1,0]-[0,0,1,0];[1,1]-[0,0,0,1];ENDdecoder例:输入输出aby0y1y2y3001000010100100010110001属性说明例:设计一位十进制加法计数器及七段译码电路。MODULEcountclkPIN;q3..q0PINISTYPE'REG';a,b,c,d,e,f,gPINISTYPE'COM';H,L=1,0;count=[q3..q0];EQUATIONS[q3..q0].clk=clk;输入输出信号定义注意此设计中集合、clk点扩展的使用TRUTH_TABLE([count]:[count]-[a,b,c,d,e,f,g])[0]:[1]-[1,1,1,1,1,1,0];[1]:[2]-[0,1,1,0,0,0,0];[2]:[3]-[1,1,0,1,1,0,1];[3]:[4]-[1,1,1,1,0,0,1];[4]:[5]-[0,1,1,0,0,1,1];[5]:[6]-[1,0,1,1,0,1,1];[6]:[7]-[0,0,1,1,1,1,1];[7]:[8]-[1,1,1,0,0,0,0];[8]:[9]-[1,1,1,1,1,1,1];[9]:[0]-[1,1,1,0,0,1,1];END用真值表实现STATE_DIAGRAM状态寄存器[-状态输出][STATE状态表达式:[方程式][方程式]状态转移描述]ABEL语言提供三种语句来描述状态转移:无条件转移语句(GOTO语句)条件转移语句(IF-THEN-ELSE语句)多路转移语句(CASE-ENDCASE);此外,状态机在发生状态转移的同时可能有相应的数据输出,所以还有条件输出语句(WITH语句)。状态图语句设计一个模为4的同步二进制递增计数器MODULEcnt4DECLARATIONScppin;q1,q0pinistype'reg';Copinistype'com';s0=^b00;s2=^b10;s1=^b01;s3=^b11;EQUATIONS[q1,q0].clk=cp;STATE_DIAGRAM[q1,q0]STATEs0:GOTOs1WITHCo=0;STATEs1:GOTOs2WITHCo=0;STATEs2:GOTOs3WITHCo=0;STATEs3:GOTOs0WITHCo=1;END例1:句尾分号状态图段逻辑方程段变量说明段q1、q0的时钟由cp提供属性说明步进电机三相六拍脉冲分配器电路例2:采用状态机的方法进行设计moduleMOTORdeclarationsCP,DIRpin;C,B,Apinistype'reg';CK,X,Z=.C.,.X.,.Z.;Q=[C,B,A];S0=^b000;S4=^b011;S1=^b100;S5=^b001;S2=^b110;S6=^b101;S3=^b010;S7=^b111;Mode=DIR;Up=1;Down=0;输入输出信号定义工作方式定义状态定义EQUATIONSQ.CLK=CP;STATE_DIAGRAMQStateS0:gotoS1;StateS1:case(Mode==Up):S2;(Mode==Down):S6
本文标题:ABEL语言使用入门
链接地址:https://www.777doc.com/doc-5865482 .html