《计算机组成原理实验:ABEL语言使用入门》由会员分享,可在线阅读,更多相关《计算机组成原理实验:ABEL语言使用入门(40页珍藏版)》请在金锄头文库上搜索。
1、 ABEL语言使用入门9.2ABEL简介简介一、一、ABEL语言的基本语法语言的基本语法二、二、ABEL源文件的基本结构源文件的基本结构三、三、ABEL语言的语句语言的语句四、四、ABEL语言电路设计举例语言电路设计举例ABEL语言简介语言简介ABEL语语言言是是一一种种硬硬件件描描述述语语言言(也也称称为为ABEL-HDL),是是开开发发PLD的的一一种种高高级级程程序序设设计计语语言言,由由美美国国DATA I/O公公司司于于19831988年推出。年推出。ABEL语语言言支支持持逻逻辑辑方方程程、真真值值表表和和状状态态图三种逻辑描述方式。图三种逻辑描述方式。具有简单易学的特点。具有简单
2、易学的特点。简四位二进制数的比较器四位二进制数的比较器DEMOABEL样本文件样本文件 ABEL程序moduleCOMP4declarationsA3,A2,A1,A0pin;B3,B2,B1,B0pin;G,L,Epinistypecom;A=A3.A0;B=B3.B0;equationsG=(AB);L=(AG,L,E)0,0-1,0,0;0,1-0,1,0;10,10-0,0,1;endCOMP4句尾分号句尾分号模块名模块名逻辑方程段逻辑方程段变量说明段变量说明段测试向量段测试向量段ABEL样本文件样本文件一、一、 ABEL语言的基本语法语言的基本语法标识符与关键字标识符与关键字专用常量
3、专用常量注释与数注释与数运算符和逻辑表达式运算符和逻辑表达式块块集合集合基 本 知 识标识符最长不得超过标识符最长不得超过31个字符;个字符;标标识识符符与与字字母母的的大大小小写写有有关关。如如En和和en是两个不同的标识符。是两个不同的标识符。1、标识符与关键字、标识符与关键字标标识识符符用用来来表表示示标标识识器器件件名名称称、器器件件引引脚脚名名称称、输输入入或或输输出出信信号号的的名名称称、状状态态名称、集合名称、常量及模块名称等。名称、集合名称、常量及模块名称等。标标识识符符必必须须以以英英文文字字母母或或下下划划线线“”开开始始,其其后后可可跟跟数数字字、英英文文字字母母、波波浪
4、浪线线“”和下划线和下划线“”,标识符与关键字标识符与关键字(续)关键字是一些具有特殊用途的保留标识符。关键字是一些具有特殊用途的保留标识符。关键字不得用来给器件、引脚、节点、常关键字不得用来给器件、引脚、节点、常量、集合、宏或信号命名。量、集合、宏或信号命名。关键字可以用大写、小写或大小写混合方关键字可以用大写、小写或大小写混合方式输入,它们表示的含义式输入,它们表示的含义相同相同。2、专用常量专用常量表示方法是在英文字母的左下方及右下方各加一个圆点。表示方法是在英文字母的左下方及右下方各加一个圆点。专用常量字母可以用大写或者小写字母输入,表示的含专用常量字母可以用大写或者小写字母输入,表示
5、的含义相同。义相同。3、注释、注释用户可用两种方式进行用户可用两种方式进行注释注释:DEMO(2) 用一双斜杠/开始,以行结束来结束。(1) 用一对双撇号 括起来或用双撇号开始,以行结束来结束。(1)b,o,d及及h(或或B,O,D及及H)表表示,示,d可以省略不写。可以省略不写。(2)可以用英文字母的字符串表示数可以用英文字母的字符串表示数,如:如:A=h41,AE=h4145。4、数、数5、运算符和逻辑表达式、运算符和逻辑表达式算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符赋值运算符赋值运算符DEMO算术运算符算术运算符优先级最高优先级最高逻辑运算符逻辑运算符关系运算符关系运
6、算符赋值运算符赋值运算符6、块、块块是括在大括号块是括在大括号“”内的一段内的一段ASCII码文本,码文本,括号内的文本可以是一行,也可以是多行。括号内的文本可以是一行,也可以是多行。块用于方程式、状态图、宏定义和指示字中,块块用于方程式、状态图、宏定义和指示字中,块可以嵌套使用,即块中包含块。可以嵌套使用,即块中包含块。DEMO例:例:WHEN(Mode=S_Data)THENOut_data:=S_in;S_Valid:=1;ELSEWHEN(Mode=T_Data)THENOut_data:=T_in;T_Valid:=1;7、集合、集合集合是作为一个整体参与运算的一组信号或常量。集合是
7、作为一个整体参与运算的一组信号或常量。它它采采用用一一个个标标识识符符,用用方方括括号号内内的的一一组组信信号号或或常常量量表表示示,其其中中的的每每一一个个信信号号或或常常量量称称为为集集合合的的元元素。素。DEMO例:例:Addr=A7,A6,A5,A4,A3,A2,A1,A0;为枚举法为枚举法Addr=A7.A0;为界限符法为界限符法Addr=A7.A2,A1,A0; 为两种方法的组合为两种方法的组合 8、ABEL语言的点后缀语言的点后缀9、ABEL语言对寄存器的描述语言对寄存器的描述Q1.q:=;Q1.clk=;Q1.ar=;Q1.ap=;用用Q1表示表示D寄存器寄存器寄存器的输出寄存
8、器的输出Q1.d=;Q1.clk=;Q1.ar=;Q1.ap=;激励信号激励信号二、二、ABEL源文件的基本结构源文件的基本结构信号属性的说明信号属性的说明例设计一个例设计一个4-2线编码器。线编码器。MODULECODER24TITLECODER24I3,I2,I1,I0 PIN;O1,O0 PINISTYPECOM;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语言组合型输出组合型输出模块语句模块语句标题语句标题语句定义段定义段三、三、
9、ABEL语言的语句语言的语句方程式语句方程式语句真值表语句真值表语句状态图语句状态图语句方程式中的赋值符为方程式中的赋值符为“”或或“:”。在方程中允许使用在方程中允许使用WHEN-THEN-ELSE语句。语句。但但不能使用不能使用IF-THEN-ELSEEQUATIONSWHEN条件条件THEN!变量名表达式;变量名表达式;ELSE方程式;方程式;或者或者WHEN条件条件THEN方程式;方程式;ELSE方程式;方程式;方程式语句方程式语句EQUATIONSx=! !(a&b);与非门与非门y=a#b;或门或门!z=a$b;异或门异或门例:例:例:例:设计一个设计一个4位左移移位寄存器。位左移
10、移位寄存器。 MODULESHIFT4TITLESHIFT4DIN,CLK,CLRPIN;Q3.Q0PINISTYPEREG;OUT=Q3.Q0;EQUATIONSOUT.CLK=CLK;OUT.AR=CLR;Q0:=DIN;Q1:=Q0;Q2:=Q1;Q3:=Q2;ENDABEL_HDLABEL_HDL语言语言属性说明属性说明逻辑逻辑方程段方程段变量变量说明段说明段输入输出输入输出信号定义信号定义例:例:设计一个设计一个4选选1数据选择器。数据选择器。MODULEMUX4S1TITLEMUX4S1S1,S0PIN;D3,D2,D1,D0PIN;YPINISTYPECOM;S=S1,S0;EQ
11、UATIONSWHEN (S=0) THEN Y=D0;WHEN (S=1) THEN Y=D1;WHEN (S=2) THEN Y=D2;WHEN (S=3) THEN Y=D3;ENDWHEN_THEN语句的使用语句的使用ABEL_HDLABEL_HDL语言语言例:例:设计一位十进制加法计数器设计一位十进制加法计数器。 MODULEcount10q3,q2,q1,q0PINISTYPEreg;clk,cdPIN;count=q3.q0;EQUATIONScount.clk=clk;count.ar=cd;WHEN(count=9)THENcount:=0;ELSEcount:=(count
12、.fb+1);END注意注意WHEN_THEN_ELSE语句、语句、fb点扩展的使用点扩展的使用q3.q0的时钟由的时钟由clk提供提供它用表格的形式将输出定义为输入的函数。它用表格的形式将输出定义为输入的函数。以关键字以关键字TRUTH_TABLE为开始,后面跟表头向量和表格。为开始,后面跟表头向量和表格。TRUTH_TABLE(输入输入输出输出)输入输入输出输出; 或或TRUTH_TABLE(输入输入:寄存器型输出寄存器型输出)输入输入:寄存器型输出寄存器型输出输出;输出;真值表语句真值表语句下一个状态2/4线译码器线译码器 MODULEdecoderDECLARATIONSa,bpin;
13、y0,y1,y2,y3pinistypecom;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例:例:属性说明属性说明例:例:设计一位十进制加法计数器及七段译码电路设计一位十进制加法计数器及七段译码电路。MODULEcountclkPIN;q3.q0PINISTYPEREG;a,b,c,d,e,f,gPINISTYPECOM;H,L=1,0;count=q3.q0;EQUATIONSq3.q0.clk=clk;输入输出输入输出信号定义信号定义 注意此
14、设计中注意此设计中集合、集合、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 状态寄存器状态寄存器 状态输出状态输出 ST
15、ATE 状态表达式:状态表达式:方程式方程式方程式方程式 状态转移描述状态转移描述ABEL语言提供三种语句来描述状态转移语言提供三种语句来描述状态转移 :无条件转移语句(无条件转移语句(GOTO语句)语句)条件转移语句(条件转移语句(IF-THEN-ELSE语句)语句)多路转移语句(多路转移语句(CASE-ENDCASE);此外,状态机在发生状态转移的同时可能有相应的数据输出,所以还有条件输出语句(WITH语句)。状态图语句状态图语句设计一个模为设计一个模为4的同步二进制递增计数器的同步二进制递增计数器MODULE cnt4DECLARATIONS cp pin; q1 , q0 pin is
16、type reg ; Co pin istype com ; s0=b00; s2=b10; s1=b01; s3=b11;EQUATIONS q1,q0.clk = cp ;STATE_DIAGRAM q1,q0 STATE s0: GOTO s1 WITH Co = 0 ; STATE s1: GOTO s2 WITH Co = 0; STATE s2: GOTO s3 WITH Co = 0; STATE s3: GOTO s0 WITH Co = 1;END例例1:句尾句尾分号分号状态图段状态图段逻辑逻辑方程段方程段变量变量说明段说明段q1、q0的时钟由的时钟由cp提供提供属性说明属性
17、说明变模计数器的设计变模计数器的设计例例2:设设计计一一个个变变模模计计数数器器,在在S和和T的的控控制制下下,实实现现同同步步模模5或模或模10或模或模12递增计数。递增计数。S T模模式式01模模5计数计数10模模10计数计数11模模12计数计数方法:采用状态机的方法进行设计moduleMACHINEtitleVARIABLE_MODULO_COUNTERdeclarationsCP,OE,S,Tpin;Q3,Q2,Q1,Q0pinistypereg,buffer;setdefinitionsQ=Q3,Q2,Q1,Q0;A=0,0,0,0;B=0,0,0,1;C=0,0,1,0; D=0,
18、0,1,1;E=0,1,0,0;F=0,1,0,1;G=0,1,1,0;H=0,1,1,1;I=1,0,0,0;J=1,0,0,1;K=1,0,1,0;L=1,0,1,1;M=1,1,0,0;N=1,1,0,1;O=1,1,1,0;P=1,1,1,1;输入输出输入输出信号定义信号定义计数器状态定义计数器状态定义输出使能,输出使能,低电平有效低电平有效逻辑方程段逻辑方程段equationsQ3,Q2,Q1,Q0.CLK=CP;Q3,Q2,Q1,Q0.OE=!OE;state_diagramQstateA:gotoB;stateB:gotoC;stateC:gotoD;stateD:gotoE;s
19、tateE:if(!S&T)thenAelseF; stateF:gotoG;stateG:gotoH;stateH:gotoI; state I: goto J; state J: if (S & !T) then A else K; state K: goto L; state L: goto A; state M: goto O; state O: goto P; state P: goto A;end状态图段状态图段四、四、ABEL-HDL语言电路设计举例语言电路设计举例例例1存储器地址译码器的设计存储器地址译码器的设计存储器段存储器段 地址范围地址范围(HEX)DRAMIOROM2R
20、OM10000DFFFE000E7FFF000F7FFF800FFFF地址译码器的设计是地址译码器的设计是PLD的典型应用之一。的典型应用之一。存储器地址译码器框图存储器地址译码器框图module decodetitle memory decodeA15,A14,A13,A12,A11,A10 pin;ROM1,IO,ROM2,DRAM pin istype com;H,L,X = 1,0,.X.;Address = A15,A14,A13,A12, A11,A10,X,X, X,X,X,X, X,X,X,X;equations!DRAM = (Address = hE000) & (Address = hF000) & (Address = hF800);test_vectors(Address - ROM1,ROM2,IO,DRAM)h0000 - H, H, H, L ;h4000 - H, H, H, L ;h8000 - H, H, H, L ;hC000 - H, H, H, L ;hE000 - H, H, L, H ;hE800 - H, H, H, H ;hF000 - H, L, H, H ;hF800 - L, H, H, H ;end