2020/1/278.3.4ispLSI器件的编程语言简介ispLSI的编程软件包有VHDL语言,Verilog语言,IspDesignExpert系统设计套件等。下面介绍一下该器件的编程软件包:IspDesignExpert系统设计套件。IspDesignExpert系统设计套件对逻辑设计结果有四种输入方式,从而使设计十分灵活。2020/1/272.ABEL-HDL硬件描述语言输入方式。3.VHDL硬件描述语言输入方式。4.混合式设计输入模式,允许在同一器件的设计中同时采用原理图、ABEL-HDL、VHDL语言输入方式,从而使设计十分灵活。下面对ABEL-HDL、VHDL语言的结构进行简单的介绍。1.该软件内部有一个基本元器件库,对于由该软件包中所含元件构成的逻辑电路,可直接用原理图输入,再编译成XX.JED文件,对器件进行下载。2020/1/278.3.4.1ABEL语言ABEL语言有很多版本,有十分严格的语法规定,它的语句十分丰富,不同语句的使用条件及附加参数也不同,本书只对ABEL语言作一个扼要的介绍,至于一些高级语言的应用和锁细的规定,读者可从有关资料或ABEL软件中寻求帮助。1.语言结构为使ABEL语言处理程序能将逻辑描述转换为编程器下载文件,必须用ASCII码源文件格式进行逻辑描述,你可以用任何一种能生成文本文件的编辑软件建立ABEL源文件。扩展名为.ABL。2020/1/27ABEL语言的模块语句MODULE模块名;定义模块名[FLAG语句];指定语言处理程序所用的命令参数(标志)[TITLE语句];定义模块的标题;定义段对模块中所用的管脚、节点、器件、属性及常量进行定义。[EQUATIONS];列出布尔逻辑方程[TRUTHTABLE];对真值表进行说明[STATEDIAGRAM];对状态机进行说明[FUSES];定义熔丝状态[TESTVECTORS];说明仿真用的测试向量END[模块名]2020/1/278-3-9ABEL语言流程图图8-3-9为ABEL语言处理流程图模块语句标志语句标题语句管脚定义语句常量定义语句真值表状态图方程语句结束语句2020/1/27说明:(a)模块语句MODULE模块名模块第一句必须是此句。其中:MODULE:为关键字;模块名为一个能表示模块名字的合法标示符。由用户自己定义。(b)若使用FLAG语句,则必须为MODULE后的第一条语句。(c)标题语句TITLE,必须为FLAG语句后的第一条语句,若没有FLAG语句,则它必须为MODULE语句后的第一条语句。(d)一个模块中至少有一个定义段,模块中可按需要以任意次序使用任意个数的定义段。常用的定义语句有:Pin管脚定义,Istype属性定义,常量定义。2020/1/27Pin管脚定义语句该语句为实际器件的管脚赋一个标志,并指定输出管脚的属性。!Clock,Rest,SiPin;管脚分别用Clock,Rest,Si来代表,!表示该管脚为低电平有效,在语言处理程序进行处理时,会自动将其取反。属性定义语句信号名[,信号名]…Istype属性[,属性]…信号名管脚或节点标识符属性POS:正极性neg:负极性reg:寄存器信号com:组合信号(d)结束段结束段只有一条语句“END”,但却是必不可少的。它标志着模块的结束,后面不加“;”。2020/1/272.ABEL3.0语言组成元素及语法规则常量说明.C.时钟输入(电平按低高低变化).K.时钟输入(电平按高低高变化).F.浮动输入或输出信号.X.任意态.Z.高阻态测试输入或输出(a)常用特殊常量值运算符说明=:=非时钟赋值,用于组合赋值时钟赋值,用于寄存器输出(c)赋值运算符运算符说明运算符说明!取反与或$!$异或同或(b)逻辑运算符2020/1/27运算符说明==!=〈=〉=等于不等于小于或等于大于小于或等于(d)关系运算符进制基数数据符号二进制2^b八进制8^o十进制10^d十六进制16^h(e)数据(f)集合集合是一组可作为整体进行运算的信号和常量。任何对集合的运算是对集合中的每个元素进行的。集合将一组信号用一个名字来表示。集合是用方括号括起的一列常量和信号来表示,常量或集合间须用逗号或排列运算符(..)隔开。例如:MULTOUT=[B0,B1,B2,B3,B4,B5,B6,B7]或MULTOUT=[B0..B7]2020/1/27(g)点后缀对于一个寄存器,除了输出方程外,还应有时钟方程、复位方程、预置方程等,须用一组方程才能完整地描述。通常对一个寄存器又只定义了一个标识符,所以这些时钟信号、复位信号和预置信号需要在该寄存器的标识符后面加点后缀表示,ABEL语言中常用的点后缀如表8.3.3所示,大、小写均可。点后缀含义点后缀含义.AP寄存器异步置1.LH锁存器的锁存使能输入(高电平).AR寄存器异步复位.OE输出使能.CE时钟导通触发器的时钟输入.PIN引脚反馈.CLK边沿触发器的时钟输入.Q寄存器输出.DD触发器的激励输入.RSR触发器的R激励输入.FB寄存器反馈信号.RE寄存器复位信号(同步或异步).JJK触发器的J激励输入.SSR触发器的S激励输入.KJK触发器的K激励输入.SP寄存器同步置1.LD寄存器并行置数输入.SR寄存器同步复位.LE锁存器的锁存使能输入.TT触发器的激励输入表8.3.3ABEL-HDL的点后缀2020/1/27(h)语句结束标志ABEL语言的语句结束标志为分号“;”,除段特征语句不加分号外,分号是一个合法语句的结束标志。另外,ABEL语言允许对一个变量多个语句描述,他们之间是或的关系A=表达式1;A=表达式2;相当于A=表达式1#表达式2;2020/1/27例如用ispLSI1016器件实现一个四位二进制加法计数器,并进行功能仿真。ABEL描述语句为:MODULECBU16标题段CAI,CLK,CDPIN;定义段,定义管脚名称、管脚号CAOPINISTYPE’COM’;管脚属性Q3..Q0PINISTYPE‘REG’;Count=[Q3..Q0];集合定义EQUATIONS逻辑描述段Count.CLK=CLK;Count.AR=CD;Count:=(count.fb)&!CAI;Count:=(coun.fb+1)&CAI;CAO=Q3.Q&Q2.Q&Q1.Q&Q0.Q&CAI;END结束段其中CAI为计数保持端,CLK为时钟端,CD为计数器异步清零端,CAO为16分频输出端,Q3Q2Q1Q0为计数器输出端。8.3.4.3原理图与HDL语言混合输入方式在设计实现较大系统时,往往选用单一输入方式很不方便,这时,经常采用混合输入方式。具体步骤:1.首先启动IspDesignExper设计套件,进入项目管理器窗口,鼠标选择File-NewProjet建立一个新项目。2.进入原理图编辑。过程为选择Source-New-Schematic。3.建立一些新的元器件,元器件库里没有的具有某些特殊功能的器件,这些器件的描述方式可以用原理图、ABEL-HDL语言、VHDL语言三种方式。。其步骤为选Add-NewBlockSymbol。4.调用这些器件以及一些库中存在的器件,完成系统的设计。例如:设计一个4位数字频率计,要求4位数字显示。采用8Hz的低频信号做门控信号。1)分析数字频率计的种类很多,基本原理多是将频率或时间实行A/D转换,然后把转换后的数字量脉冲的个数进行数字计数,最后把计数结果以单位时间内脉冲个数的量值,用数字显示器直接显示出来。频率是指单位时间内振动的次数。从测量的角度看,即在标准时间内,测得被测信号的脉冲数。下面以频率计为例,对这种设计方式进行说明。其测量的频率的方框图如图8-3-10所示。被测信号送入通道,经放大整形后,使每个周期形成一个脉冲,这些脉冲加到主门的A输入端,门控双稳输出的门控信号,加到主门的B输入端。在主门开启时间内,脉冲信号通过主门,进入计数器,则计数器记得的数,就是要测的频率值。如果主门的开启时间为T秒,计数器累积的数字为N,则被测的频率为,如图8-3-11所示。TNfx主门十六进制分频器门控信号晶振频率8Hz门控信号数字显示十进制计数器ABTN1s1sB8-3-10测量的频率的方框图8-3-11频率测量原理图2)设计数字式频率计的数字部分可用可编程逻辑器件来实现。采用自下向上的设计模式,首先设计频率计中分频器、计数器、译码器。(a)任务:设计一个分频器,要求输入信号的频率为8Hz,输出信号的频率为0.5Hz,占空比为50%。可用一个16分频的分频器。在此采用自下向上的设计模式。采用IspDesignExpert设计套件中原理图和ABEL语言混合输入模式。建立原理图。过程为选择Source-New-Schematic。设原理图名为FPQ,接着进入原理图编辑。首先启动IspDesignExpert设计套件,进入项目管理器窗口,鼠标选择File-NewProjet建立一个新项目,在此取名为FPQ.SYN。建立一个模为16的计数器新元件。按自然二进制码规律计数,就可实现16分频的分频器。其步骤为选Add-NewBlockSymbol。模块名可取名为CBU16,其输入有三个管脚,分别为CAI、CLK、CD。其中CAI为计数保持信号;CD为异步清零端。存盘退出原理图编辑窗后,在文件名CBU16前面有一个红色的问号。这要求我们为原理图中的元件写出它们的逻辑功能描述文本,双击该文件名选择ABEL语言描述方式。图8-3-12为16进制计数器的符号图。图8-3-12CBU16符号图CBU16的ABEL语言描述为:MODULECBU16CAI,CLK,CDPIN;CAOPINISTYPE‘COM’;Q3..Q0PINISTYPE‘REG’;COUNT=[Q3..Q0];EQUATIONSCOUNT.CLK=CLK;COUNT.AR=CD;COUNT:=(COUNT.FB)&!CAI;COUNT:=(COUNT.FB+1)&CAI;CAO=Q3.Q&Q2.Q&Q1.Q&Q0.Q&CAI;END3)设计一个模为10的计数器元件图8-3-13CDU10的符号图操作过程与分频器设计中建立模为16进制的计数器的步骤一样,即选Add菜单中的NewBlockSymbol选项,器件名设CDU10,输入管脚有七个,分别为CD,CLK,EN,LD,D3,D2,D1,D0;输出管脚有四个,分别为Q3,Q2,Q1,Q0。元件符号如图8-3-13所示。MODULECDU10CLK,CD,ENPIN;D3..D0,LDPIN;Q3..Q0PINISTYPE‘REG’;COUNT=[Q3..Q0];DATA=[D3..D0];EQUATIONSCOUNT.CLK=CLK;COUNT.AR=CD;WHEN(COUNT==^d9&!LD)THENCOUNT:=0;ELSEWHEN(!EN&!LD)THENCOUNT:=(COUNT.FB);ELSEWHEN(EN&!LD)THENCOUNT:=(COUNT.FB+1);ELSEWHEN(LD)THENCOUNT:=DATA;ENDCDU10功能表见表8.3.5所示。CDCLKENLDD3D2D1D0Q3Q2Q1Q00清零1CP00保持1CP10计数1CP1D3D2D1D0表8.3.510进制计数器功能表4)设计一个译码器电路的元器件,输入为BCD8421码,输出驱动共阴极数码管,显示0~9这十个数码。仍然采用原理图和ABEL语言混合输入方式,模块名BIN46,输入管脚有四个,分别为A3,A2,A1,A0,EN;输出管脚有七个,分别为A,B,C,D,E,F,G;用以驱动数码管。EN为使能端,当EN=1时译码器工作。BIN46元件符号如图8-3-14所示,模块的ABEL语言描述如下:MODULEBIN46A3,A2,A1,A0,ENPIN;A,B,C,D,E,F,GPINISTYPE‘COM’;X=.x.;TRUTH_TABEL([EN,A3,A2,A1,A0]-