电子设计自动化chapter05课件_第1页
电子设计自动化chapter05课件_第2页
电子设计自动化chapter05课件_第3页
电子设计自动化chapter05课件_第4页
电子设计自动化chapter05课件_第5页
已阅读5页,还剩173页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子设计电子设计自动化自动化EDA–ElectronicDesignAutomation电子设计电子设计自动化自动化EDA–Electronic第5章ABEL硬件描述语言

5.1硬件描述语言概述

5.2ABEL硬件描述语言规则

5.3ABEL硬件描述语言元素

5.4ABEL语言常用语句

5.5ABEL真值表逻辑设计方法

5.6ABEL逻辑方程设计方法

5.7ABEL状态图逻辑设计方法版权所有侵权必究第5章ABEL硬件描述语言5.1硬件描述语言5.1ABEL硬件描述语言概述传统的逻辑设计非常繁琐复杂,需要专业设计人员掌握大量的器件特性和设计方法及设计技巧,但随着硬件描述语言的出现和使用,传统的设计方法有了根本性的变革。5.1.1硬件描述语言概述

5.1.2ABEL硬件描述语言源文件格式版权所有侵权必究5.1ABEL硬件描述语言概述传统的逻辑设5.1.1硬件描述语言概述电子设计自动化除采用电路原理图逻辑设计方法外,目前更推广的是硬件描述语言逻辑设计方法。各软件公司研制开发的硬件描述语言差异较大,目前较为流行的是VHDL、Verilog–HDL和ABEL–HDL硬件描述语言。ABLE语言是美国DATAI/O公司开发的一种逻辑设计软件,Abel–HDL是最早流行的硬件描述语言,它简单易学,并有多种EDA开发软件支持。5.1.1硬件描述语言概述电子设计自动化除采用电路原硬件描述语言与原理图逻辑设计相比有如下特点:5.1.1硬件描述语言概述以文本形式表示逻辑电路的结构和行为,并可直接将逻辑方程、真值表或状态图转换为硬件描述语言的形式。设计精确简练,便于阅读和分析。逻辑设计以文件方式保存,因此易于设计修改、调用、共享和更新。与原理图混合设计,构成“自顶而下”的层次化设计方法。硬件描述语言与原理图逻辑设计相比有如下特点:5.1.15.1.2ABEL硬件描述语言源文件格式Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0];B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

模块头部分表明ABEL硬件描述的开始。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

设计说明部分提供有关设计的说明信息,一般包括设计题目、输入/输出信号等名称分配及相应的器件引脚属性。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

设计描述部分用来描述数字电路的逻辑功能。基本设计描述采用的方法有:逻辑方程、真值表和状态图三种。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

设计仿真部分是建立一组仿真测试向量,以检查输出的响应是否满足逻辑设计要求。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

模块结束表明ABEL硬件描述的结束,它与Model相呼应,构成一个完整的ABEL硬件逻辑描述。5.1.2ABEL硬件描述语言源文件格式Moduleco5.2ABEL硬件描述语言规则ABEL源文件一般包括五个部分:模块头、设计说明部分、设计描述部分、设计仿真和模块结束部分。在每部分,ABEL源文件必须符合所规定的语法规则。

5.2.1基本语法

5.2.2合法的ASCII码

5.2.3标识符5.2.4关键字版权所有侵权必究5.2ABEL硬件描述语言规则ABEL5.2.1基本语法ABEL源文件的每一行必须符合下列语法规则:Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

关键字、标识符及数字之间必须用一个及一个以上空格隔开。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

关键字、标识符及数字之间必须用一个及一个以上空格隔开。

但一列标识符可用逗号分隔。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

关键字、标识符及数字之间必须用一个及一个以上空格隔开。

但表达式中的数字与标识符间可由运算符分隔。Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(

A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

关键字、标识符及数字之间必须用一个及一个以上空格隔开。

但圆括号可起分隔号作用。5.2.1基本语法ABEL源文件的每一行必须符合下列语Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

5.2.1基本语法ABEL源文件的每一行必须符合下列语法规则:关键字、数字、运算符及标识符中不可嵌入空格。×Modulecomp45.2.1基本语法ABELModulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 PIN;A_NE_B,A_EQ_B Pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

5.2.1基本语法ABEL源文件的每一行必须符合下列语法规则:关键字可以用大写、小写或大小写混合字体输入,其代表的意义不变。Modulecomp45.2.1基本语法ABELModulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;

No,Yes=0,1;

A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End 5.2.1基本语法ABEL源文件的每一行必须符合下列语法规则:标识符可以用大写、小写或大小写混合字体输入,但其代表的意义不同。≠NO,YES=0,1;Modulecomp45.2.1基本语法ABEModulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

5.2.2合法的ASCII码所有大写、小写字母及一般键盘使用的大部分字符均为合法字符。

大小写字母a~zA~Z

数字0~9空格/进格键<space><tab>常用键! @ # $ ? *& ^ ( ) -_=+[ ] { } ; : ‘ “` \| , < >. / %Modulecomp45.2.2合法的ASCII码所Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

5.2.3标识符标识符用来标识输入引脚、输出引脚或节点、集合、常量等。所有标识符必须遵从如下规则:标识符必须以字母或下划线开头。除第一个字符外,标识符可由大小写字母、数字、波浪号~和下划线组成。标识符中不能使用空格,可用下划线或大写字母分隔标识符。除关键字外,标识符与输入字体有关,大写字母和小写字母被视为不同标识符。除用作点扩展外,在标识符中不能出现句号“.”。Modulecomp45.2.3标识符标识符用来标识Modulecomp4Title

‘四位二进制数值比较器’DeclarationsA3,A2,A1,A0 pin;B3,B2,B1,B0 pin;A_NE_B,A_EQ_B pinistype‘com’;A_GT_B,A_LT_B pinistype‘com’;No,Yes=0,1;A=[A3,A2,A1,A0]; B=[B3,B2,B1,B0];Equations

A_EQ_B=A==B;A_NE_B=!(A==B);A_GT_B=A>B;A_LT_B=!((A>B)#(A==B));Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])[0,0]->[Yes,No,No,No]; [1,0]->[No,Yes,No,Yes];

[3,9]->[No,No,Yes,Yes];

End

5.2.4关键字关键字也叫保留标识符,由于它已有明确的特殊含义,所以不能用来给引脚、节点、常量、集合或信号等命名。Modulecomp45.2.4关键字关键字也叫保5.3ABEL硬件描述语言元素

5.3.1注释

5.3.2块

5.3.3数据类型

5.3.4字符串

5.3.5集合

5.3.6逻辑运算符

5.3.7算术运算符

5.3.8关系运算符

5.3.9赋值运算符

5.3.10表达式

5.3.11点扩展符

5.3.12特殊常量

5.3.13指令字版权所有侵权必究5.3ABEL硬件描述语言元素5.3.1注释5.3.5.3.1注释注释不同于逻辑设计描述语句,注释主要用于说明源文件某些需要强调或说明的地方,它并不影响源文件的逻辑描述。适当使用注释,可改善较复杂的ABEL源文件可读性。可采用两种方法输入注释,即符号“"”和“//”。MODULEEXAMPLEA,B PIN; AND_OUTPINISTYPE'COM';OR_OUTPINISTYPE'COM';XOR_OUTPINISTYPE'COM';EQUATIONSAND_OUT=A&B;OR_OUT=A#B;XOR_OUT=A$B;End

"与逻辑定义"或逻辑定义"异或逻辑定义

//输入信号引脚定义//二输入“与”逻辑输出引脚定义//二输入“或”逻辑输出引脚定义//二输入“异或”逻辑输出引脚定义5.3.1注释注释不同于逻辑设计描述语句,注释主要用块是括在“{}”内的ASCII码文本段。使用块语句,可使一些较复杂功能的逻辑输出描述更为简洁,改善源程序的易读性。MODULEEXAMPLECP,UP_DOWNPIN; Q3,Q2,Q1 PINISTYPE'REG'; EQUATIONSQ3.CLK=CP;Q2.CLK=CP;Q1.CLK=CP;

WHEN(UP_DOWN==0)THEN{Q1:=!Q1;Q2:=(Q1&!Q2)#(!Q1&Q2);Q3:=(Q1&Q2&!Q3)#(!(Q1&Q2)&Q3);}

ELSE{Q1:=!Q1;Q2:=(!Q1&!Q2)#(Q1&Q2);Q3:=(!Q1&!Q2&!Q3)#(!(!Q1&!Q2)&Q3);}TEST_VECTORS([CP,UP_DOWN]->[Q3,Q2,Q1])@REPEAT10{[.C.,0]->[.X.,.X.,.X.];}@REPEAT10{[.C.,1]->[.X.,.X.,.X.];}ENDMODULEEXAMPLECP,UP_DOWNPIN; Q3,Q2,Q1 PINISTYPE'REG'; EQUATIONSQ3.CLK=CP;Q2.CLK=CP;Q1.CLK=CP;

WHEN(UP_DOWN==0)THEN

{Q1:=!Q1;Q2:=(Q1&!Q2)#(!Q1&Q2);Q3:=(Q1&Q2&!Q3)#(!(Q1&Q2)&Q3);}

ELSE{Q1:=!Q1;Q2:=(!Q1&!Q2)#(Q1&Q2);Q3:=(!Q1&!Q2&!Q3)#(!(!Q1&!Q2)&Q3);}TEST_VECTORS([CP,UP_DOWN]->[Q3,Q2,Q1])@REPEAT10{[.C.,0]->[.X.,.X.,.X.];}@REPEAT10{[.C.,1]->[.X.,.X.,.X.];}END

该块说明当UP_DOWN=0时,为正计数。MODULEEXAMPLECP,UP_DOWNPIN; Q3,Q2,Q1 PINISTYPE'REG'; EQUATIONSQ3.CLK=CP;Q2.CLK=CP;Q1.CLK=CP;

WHEN(UP_DOWN==0)THEN{Q1:=!Q1;Q2:=(Q1&!Q2)#(!Q1&Q2);Q3:=(Q1&Q2&!Q3)#(!(Q1&Q2)&Q3);}

ELSE

{Q1:=!Q1;Q2:=(!Q1&!Q2)#(Q1&Q2);Q3:=(!Q1&!Q2&!Q3)#(!(!Q1&!Q2)&Q3);}TEST_VECTORS([CP,UP_DOWN]->[Q3,Q2,Q1])@REPEAT10{[.C.,0]->[.X.,.X.,.X.];}@REPEAT10{[.C.,1]->[.X.,.X.,.X.];}END

该块说明当UP_DOWN=1时,为逆计数。MODULEEXAMPLECP,UP_DOWNPIN; Q3,Q2,Q1 PINISTYPE'REG'; EQUATIONSQ3.CLK=CP;Q2.CLK=CP;Q1.CLK=CP;

WHEN(UP_DOWN==0)THEN{Q1:=!Q1;Q2:=(Q1&!Q2)#(!Q1&Q2);Q3:=(Q1&Q2&!Q3)#(!(Q1&Q2)&Q3);}

ELSE

{Q1:=!Q1;Q2:=(!Q1&!Q2)#(Q1&Q2);Q3:=(!Q1&!Q2&!Q3)#(!(!Q1&!Q2)&Q3);}TEST_VECTORS([CP,UP_DOWN]->[Q3,Q2,Q1])@REPEAT10{[.C.,0]->[.X.,.X.,.X.];}

@REPEAT10{[.C.,1]->[.X.,.X.,.X.];}

END该块说明重复产生括号内语句。5.3.2块块是括在“{}”内的ASCII码文本段。MODULE进制基数数制符号二进制2^b或^B5.3.3数据类型适当使用数据类型,可使ABEL源程序简洁、易读。数制符号可用大写或小写输入。若一个数据前没有数制符号,则认为它使用的是隐含数制,一般隐含数制为十进制。进制基数数制符号二进制2^b或^B十进制10^d或^D进制基数数制符号二进制2^b或^B十进制10^d或^D八进制8^o或^O进制基数数制符号二进制2^b或^B十进制10^d或^D八进制8^o或^O十六进制16^h或^H进制基数数制符号二进制2^b或^B5.3.3数据5.3.3数据类型MODULEEXAMPLECP PIN; Q3,Q2,Q1,Q0 PINISTYPE'REG'; Q=[Q3,Q2,Q1,Q0]; EQUATIONSQ.CLK=CP; TRUTH_TABLE([Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0]) ^B0000:>^B0001;^B0001:>^B0010;^B0010:>^B0011;^B0011:>^B0100;^B0100:>^B0101;^B0101:>^B0110;^B0110:>^B0111;^B0111:>^B1000;^B1000:>^B1001;^B1001:>^B1010;^B1010:>^B1011;^B1011:>^B0000;TEST_VECTORS(CP->Q) @REPEAT15{.C.->.X.;}ENDMODULEEXAMPLECP PIN; Q3,Q2,Q1,Q0 PINISTYPE'REG'; Q=[Q3,Q2,Q1,Q0]; EQUATIONSQ.CLK=CP; TRUTH_TABLE([Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0])

^B0000:>^B0001;^B0001:>^B0010;^B0010:>^B0011;^B0011:>^B0100;^B0100:>^B0101;^B0101:>^B0110;^B0110:>^B0111;^B0111:>^B1000;^B1000:>^B1001;^B1001:>^B1010;^B1010:>^B1011;^B1011:>^B0000;TEST_VECTORS(CP->Q) @REPEAT15{.C.->.X.;}END数据用二进制数据类型表示MODULEEXAMPLECP PIN; Q3,Q2,Q1,Q0 PINISTYPE'REG'; Q=[Q3,Q2,Q1,Q0]; EQUATIONSQ.CLK=CP; TRUTH_TABLE([Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0])

^O0:>^O1;^O1:>^O2;^O2:>^O3;^O3:>^O4;^O4:>^O5;^O5:>^O6;^O6:>^O7;^O7:>^O10;^O10:>^O11;^O11:>^O12;^O12:>^O13;^O13:>^O0;TEST_VECTORS(CP->Q) @REPEAT15{.C.->.X.;}END数据用八进制数据类型表示MODULEEXAMPLECP PIN; Q3,Q2,Q1,Q0 PINISTYPE'REG'; Q=[Q3,Q2,Q1,Q0]; EQUATIONSQ.CLK=CP; TRUTH_TABLE([Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0])

0:>1;1:>2;2:>3;3:>4;4:>5;5:>6;6:>7;7:>8;8:>9;9:>10;10:>11;11:>0;TEST_VECTORS(CP->Q) @REPEAT15{.C.->.X.;}END数据用十进制数据类型表示MODULEEXAMPLECP PIN; Q3,Q2,Q1,Q0 PINISTYPE'REG'; Q=[Q3,Q2,Q1,Q0]; EQUATIONSQ.CLK=CP; TRUTH_TABLE([Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0])

^H0:>^H1;^H1:>^H2;^H2:>^H3;^H3:>^H4;^H4:>^H5;^H5:>^H6;^H6:>^H7;^H7:>^H8;^H8:>^H9;^H9:>^HA;^HA:>^HB;^HB:>^H0;TEST_VECTORS(CP->Q) @REPEAT15{.C.->.X.;}END数据用十六进制数据类型表示5.3.3数据类型MODULEEXAMPLEMO5.3.4字符串字符串是用单引号括起来的ASCII码字符序列。字符串主要用于以下场合:MODULEEXAMPLETITLE'Thisisanexample.' A,B,C,D PIN; Y PINISTYPE'COM,BUFFER';Y1,Y2 NODEISTYPE'COM';EQUATIONSY1=A&B;Y2=C&D;Y=!(Y1&Y2);TEST_VECTORS([A,B,C,D]->[Y]) [0,1,1,0]->[1];[1,1,1,1]->[0];ENDMODULEEXAMPLETITLE'Thisisanexample.'

A,B,C,D PIN; Y PINISTYPE'COM,BUFFER';Y1,Y2 NODEISTYPE'COM';EQUATIONSY1=A&B;Y2=C&D;Y=!(Y1&Y2);TEST_VECTORS([A,B,C,D]->[Y]) [0,1,1,0]->[1];[1,1,1,1]->[0];END标题语句TITLE,用字符串简要说明设计。MODULEEXAMPLETITLE'Thisisanexample.' A,B,C,D PIN;

Y PINISTYPE'COM,BUFFER';

Y1,Y2 NODEISTYPE'COM';EQUATIONSY1=A&B;Y2=C&D;Y=!(Y1&Y2);TEST_VECTORS([A,B,C,D]->[Y]) [0,1,1,0]->[1];[1,1,1,1]->[0];END引脚语句PIN,说明引脚输入或输出属性。MODULEEXAMPLETITLE'Thisisanexample.' A,B,C,D PIN; Y PINISTYPE'COM,BUFFER';Y1,Y2 NODEISTYPE'COM';

EQUATIONSY1=A&B;Y2=C&D;Y=!(Y1&Y2);TEST_VECTORS([A,B,C,D]->[Y]) [0,1,1,0]->[1];[1,1,1,1]->[0];END节点语句NODE,说明内部节点属性。5.3.4字符串字符串是用单引号括起来的ASCIIMODULEEXAMPLEA3,A2,A1,A0,B3,B2,B1,B0PIN;Y3,Y2,Y1,Y0PINISTYPE'COM';A=[A3,A2,A1,A0];B=[B3,B2,B1,B0];Y=[Y3,Y2,Y1,Y0]; EQUATIONS

WHEN(A<B) THENY=A+B;

WHEN(A>B) THENY=A-B;

WHEN(A==B)THENY=-A;TEST_VECTORS([A,B]->Y)[5,10]->.X.;[10,5]->.X.;[3,3]->.X.;END5.3.5集合集合是作为一个整体来进行运算的成批信号和常量,对集合的任何运算实际上是对集合中每一个元素进行的。MODULEEXAMPLEA3,A2,A1,A0,B3,B2,B1,B0PIN;Y3,Y2,Y1,Y0PINISTYPE'COM';A=[A3,A2,A1,A0];B=[B3,B2,B1,B0];Y=[Y3,Y2,Y1,Y0]; EQUATIONS

WHEN(A<B) THENY=A+B;

WHEN(A>B) THENY=A-B;

WHEN(A==B)THENY=-A;TEST_VECTORS([A,B]->Y)[5,10]->.X.;[10,5]->.X.;[3,3]->.X.;END集合A定义集合B定义集合Y定义利用已定义的集合

进行逻辑设计利用已定义的集合进行输出仿真MODULEEXAMPLE5.3.5集合集合是作MODULEEXAMPLEA,B,CIPIN; S,COPINISTYPE'COM'; EQUATIONSS=A$B$CI;CO=!(!((A$B)&CI)&

!(A&B)); END5.3.6逻辑运算符逻辑运算符用于逻辑方程中,多位逻辑运算是逐位进行的。运算符举例说明!!A取反运算符举例说明!!A取反&A&B与运算符举例说明!!A取反&A&B与#A#B或运算符举例说明!!A取反&A&B与#A#B或$A$B异或运算符举例说明!!A取反&A&B与#A#B或$A$B异或!$A!$B同或MODULEEXAMPLE5.3.6逻辑运算符逻5.3.7算术运算符算术运算符定义了表达式中各项间的算术关系。注意减号的用法不同,意义也不同。运算符举例说明--A取补运算符举例说明--A取补-A-B减法运算符举例说明--A取补-A-B减法+A+b加法运算符举例说明--A取补-A-B减法+A+b加法*A*B乘法运算符举例说明--A取补-A-B减法+A+b加法*A*B乘法/A/B无符号整数除法运算符举例说明--A取补-A-B减法+A+b加法*A*B乘法/A/B无符号整数除法%A%B取模运算符举例说明--A取补-A-B减法+A+b加法*A*B乘法/A/B无符号整数除法%A%B取模<<A<<BA左移B位运算符举例说明--A取补-A-B减法+A+b加法*A*B乘法/A/B无符号整数除法%A%B取模<<A<<BA左移B位>>A>>BA右移B位5.3.7算术运算符算术运算符定义了表达式中各项间的MODULEEXAMPLES2,S1,S0 PIN;Y3,Y2,Y1,Y0PINISTYPE'COM'; S=[S2,S1,S0];Y=[Y3,Y2,Y1,Y0]; EQUATIONS

WHEN(S==^B000)THEN

Y=4+5;

WHEN(S==^B001)THEN

Y=15-7;

WHEN(S==^B010)THEN

Y=5*3;

WHEN(S==^B011)THEN

Y=12/6;

WHEN(S==^B100)THEN

Y=^B1011<<1;

WHEN(S==^B101)THEN

Y=^B1011>>1;END5.3.7算术运算符当S=000时,实现加法。当S=001时,实现减法。当S=010时,实现乘法。当S=011时,实现除法。当S=100时,实现左移。当S=101时,实现右移。MODULEEXAMPLE5.3.7算术运算符当S5.3.8关系运算符关系运算符用于比较表达式中的左式和右式,比较结果为逻辑代数中的真值或假值。运算符举例说明==A==B等于运算符举例说明==A==B等于!=A!=B不等于运算符举例说明==A==B等于!=A!=B不等于<A<B小于运算符举例说明==A==B等于!=A!=B不等于<A<B小于<=A<=B小于等于运算符举例说明==A==B等于!=A!=B不等于<A<B小于<=A<=B小于等于>A>B大于运算符举例说明==A==B等于!=A!=B不等于<A<B小于<=A<=B小于等于>A>B大于>=A>=B大于等于在使用关系运算符时,最好使用括号以保证表达式按期望的次序进行计算。5.3.8关系运算符关系运算符用于比较表达式中的左式5.3.8关系运算符MODULEEXAMPLEA3,A2,A1,A0 PIN; B3,B2,B1,B0 PIN; Y5,Y4,Y3,Y2,Y1,Y0 PINISTYPE'COM';A=[A3,A2,A1,A0];B=[B3,B2,B1,B0];EQUATIONS

WHEN(A==B)THENY0=1;ELSEY0=0;

WHEN(A!=B)THENY1=1;ELSEY1=0;

WHEN(A<B)THENY2=1;ELSEY2=0;

WHEN(A<=B)THENY3=1;ELSEY3=0;

WHEN(A>B)THENY4=1;ELSEY4=0;

WHEN(A>=B)THENY5=1;ELSEY5=0;TEST_VECTORS([A,B]->[Y0,Y1,Y2,Y3,Y4,Y5])[8,8]->[1,0,0,1,0,1];[10,8]->[0,1,0,0,1,1];[3,12]->[0,1,1,1,0,0];END当A等于B,则输出Y0=1,否则Y0=0。当A不等于B,则输出Y1=1,否则Y1=0。当A小于B,则输出Y2=1,否则Y2=0。当A小于等于B,则输出Y3=1,否则Y3=0。当A大于B,则输出Y4=1,否则Y4=0。当A大于等于B,则输出Y5=1,否则Y5=0。5.3.8关系运算符MODULEEXAMPLE5.3.9赋值运算符赋值运算符通过等式将逻辑表达式的值赋给输出信号。运算符说明=立即赋值

立即赋值:逻辑方程一经求值,就立即赋值,没有延迟,在进行组合逻辑电路设计时可采用该赋值运算符。

时钟赋值:逻辑方程要等与输出有关的时钟脉冲到来后,才进行赋值,在进行时序逻辑电路设计时可采用该赋值运算符。运算符说明=立即赋值:=时钟赋值5.3.9赋值运算符赋值运算符通过等式将逻辑表达式的MODULEEXAMPLEA,B,C,D PIN;

F PINISTYPE'COM';EQUATIONSF=!((A&B)#(C&D));

TEST_VECTORS([A,B,C,D]->F)[0,1,1,0]->1;[1,1,0,1]->0; END5.3.9赋值运算符输出引脚F定义为组合输出类型。组合逻辑设计,当右式有结果时立即赋值给F。MODULEEXAMPLE5.3.9赋值运算符MODULEEXAMPLECP PIN; Q PINISTYPE'REG';

EQUATIONSQ.CLK=CP;

Q:=!Q;

TEST_VECTORS(CP->Q)@REPEAT6{.K.->.X.;};END5.3.9赋值运算符时钟赋值:当寄存器Q输入时钟沿为上升沿时赋值。输出引脚Q定义为时序输出类型。立即赋值:寄存器时钟输入端时刻跟随输入时钟CP变化。MODULEEXAMPLE5.3.9赋值运算符5.3.10表达式表达式是标识符和运算符的组合。表达式中运算符之间存在一定的优先级。优先级运算符说明优先级运算符说明1-取补1!取反1-取补1!取反2&与2/无符号除法2<<左移2*乘法2>>右移2%取模1-取补1!取反2&与2/无符号除法2<<左移2*乘法2>>右移2%取模3#或3+加法3$异或3-减法3!$同或1-取补1!取反2&与2/无符号除法2<<左移2*乘法2>>右移2%取模3#或3+加法3$异或3-减法3!$同或4==等于4<=小于等于4!=不等于4>大于4<小于4>=大于等于若同一表达式中有优先级相同的运算符,则按从左到右的顺序进行计算。圆括号可以改变运算次序,圆括号内的运算优先进行。5.3.10表达式表达式是标识符和运算符的组合。表达5.3.10表达式MODULEEXAMPLEA,B,CI PIN;S,CO PINISTYPE'COM';EQUATIONS

S=A$B$CI;CO=((A$B)&CI)#(A&B);TEST_VECTORS([CI,A,B]->[S,CO])[0,0,0]->[0,0];[0,0,1]->[1,0];[0,1,0]->[1,0];[0,1,1]->[0,1];[1,0,0]->[1,0];[1,0,1]->[0,1];[1,1,0]->[0,1];[1,1,1]->[1,1];ENDMODULEEXAMPLEA,B,CI PIN;S,CO PINISTYPE'COM';EQUATIONSS=A$B$CI;CO=((A$B)&CI)#(A&B);TEST_VECTORS([CI,A,B]->[S,CO])[0,0,0]->[0,0];[0,0,1]->[1,0];[0,1,0]->[1,0];[0,1,1]->[0,1];[1,0,0]->[1,0];[1,0,1]->[0,1];[1,1,0]->[0,1];[1,1,1]->[1,1];ENDMODULEEXAMPLEA,B,CI PIN;S,CO PINISTYPE'COM';EQUATIONSS=A$B$CI;

CO=((A$B)&CI)#(A&B);TEST_VECTORS([CI,A,B]->[S,CO])[0,0,0]->[0,0];[0,0,1]->[1,0];[0,1,0]->[1,0];[0,1,1]->[0,1];[1,0,0]->[1,0];[1,0,1]->[0,1];[1,1,0]->[0,1];[1,1,1]->[1,1];END5.3.10表达式MODULEEXAMPLEMOD5.3.11点扩展符需要精确其置“0”端或置“1”端操作,或控制一些器件特定输入端,可采用详细的点扩展方式加以描述。带缓冲寄存器反馈.Q异步清零.ACLR

同步清零.CLR寄存器反馈.FB边沿触发器

输入时钟.CLK异步置位.ASET

同步置位.SET带缓冲引脚反馈.CLK.OE

输出

使能5.3.11点扩展符需要精确其置“0”端或置“1”端操5.3.11点扩展符MODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONS

Q0.CLK=CP;Q1.CLK=Q0.Q;Q2.CLK=Q1.Q;Q0.ACLR=!RESET;Q1.ACLR=!RESET;Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[.X.,1]->[.X.,.X.,.X.];ENDMODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONS

Q0.CLK=CP;

Q1.CLK=Q0.Q;Q2.CLK=Q1.Q;Q0.ACLR=!RESET;Q1.ACLR=!RESET;Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[.X.,1]->[.X.,.X.,.X.];ENDMODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONSQ0.CLK=CP;Q1.CLK=Q0.Q;Q2.CLK=Q1.Q;Q0.ACLR=!RESET;Q1.ACLR=!RESET;Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[.X.,1]->[.X.,.X.,.X.];ENDMODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONSQ0.CLK=CP;Q1.CLK=Q0.Q;

Q2.CLK=Q1.Q;Q0.ACLR=!RESET;Q1.ACLR=!RESET;Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[.X.,1]->[.X.,.X.,.X.];ENDMODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONSQ0.CLK=CP;Q1.CLK=Q0.Q;

Q2.CLK=Q1.Q;

Q0.ACLR=!RESET;Q1.ACLR=!RESET;Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[.X.,1]->[.X.,.X.,.X.];ENDMODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONSQ0.CLK=CP;Q1.CLK=Q0.Q;

Q2.CLK=Q1.Q;

Q0.ACLR=!RESET;Q1.ACLR=!RESET;Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[.X.,1]->[.X.,.X.,.X.];ENDMODULEEXAMPLECP PIN;RESET PIN;Q2,Q1,Q0 PINISTYPE'REG,BUFFER';EQUATIONSQ0.CLK=CP;Q1.CLK=Q0.Q;

Q2.CLK=Q1.Q;

Q0.ACLR=!RESET;

Q1.ACLR=!RESET;

Q2.ACLR=!RESET;Q0.D=!Q0.Q;Q1.D=!Q1.Q;Q2.D=!Q2.Q;TEST_VECTORS([CP,RESET]->[Q2,Q1,Q0])//逻辑设计测试@REPEAT10{[.C.,0]->[.X.,.X.,.X.];};[

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论