引言
顺序控制逻辑电路广泛应用于机器人、全自动家用电器、工业自动化设备及其它自动化装置中,它常采用CPLD" title="CPLD">CPLD器件进行设计与实现。
如果直接采用原理图输入工具或VHDL" title="VHDL">VHDL语言描述的方法来设计顺序控制逻辑电路,则设计效率不高。这是因为顺序控制逻辑电路中包含大量的I/O信号,控制逻辑就是这些I/O信号的逻辑组合,这些I/O信号在整个控制逻辑中会被大量引用,而原理图输入工具中的元件如逻辑门和触发器等的输入引脚数是固定的,逻辑引用不够灵活,同时,I/O信号的大量引用又会使连线过于复杂。VHDL是一种文本设计工具,不是顺序控制逻辑电路设计的专用工具,直接用它编写的顺序控制逻辑程序结构零乱,不够直观,编程及调试效率都不高。
梯形图" title="梯形图">梯形图的原理与特性
梯形图是可编程逻辑控制器(PLC)实现顺序控制逻辑的专用设计工具,用梯形图描述的控制逻辑非常直观易懂。梯形图工具使用简便,开发效率高,对电路设计者的要求很低,因此,电路设计者可以将更多精力用在顺序控制逻辑功能的实现与优化上。
图1 典型的顺序控制逻辑电路的梯形图
梯形图以两根平行的竖线分别表示电源线和地线,在这两根竖线之间,用横线表示电气连接线,将各种代表逻辑量(“ON”或“OFF”)的元件触点及输出执行元件的线圈用横线串接成一条电气回路。多条这样的回路并列在一起,形状如同阶梯,就构成了实现所需顺序控制逻辑的梯形图。
一个典型的顺序控制电路的梯形图如图1所示。在梯形图的每个回路中,当所有串联的触点全部都处于“ON”状态时,回路就处于导通状态,回路末端的输出执行元件线圈被接通。例如,当X0为“ON”,X1为“OFF”时,执行元件Y0就被接通,产生输出动作。执行元件不能多个串联,其触点所代表的逻辑量可以在梯形图中被多次反复引用。电路的各I/O信号也可以在梯形图中被多次反复引用。
梯形图-VHDL设计方法
如果将梯形图法应用于CPLD开发中,采用基于梯形图的VHDL设计方法,就可将两种设计工具的长处相结合,从而提高顺序逻辑电路设计开发的效率,简化设计难度。
梯形图-VHDL设计方法的总体思路是,将开发过程分为两个阶段:第一阶段先采用梯形图对顺序逻辑电路的逻辑进行描述和设计,第二阶段通过VHDL语言来实现梯形图的逻辑功能,并通过CPLD专用的开发软件对所设计的逻辑进行仿真调试。
在这里,梯形图的作用是作为顺序逻辑电路的逻辑原型,是VHDL语言编程的依据。用梯形图完成的是电路的逻辑功能设计,而VHDL语言程序用于实现其逻辑功能。二者分工协作,相得益彰。其中梯形图-VHDL设计方法的关键在于梯形图的VHDL语言描述。
梯形图的VHDL描述方法
梯形图由三种要素构成,即输入信号、输出执行元件和连接线。在VHDL程序中必须采用特殊方法对这三要素进行有效的描述。
(1)输入信号Xi(i=0,1,…,M)
M个输入信号必须在实体的端口说明语句(PORT语句)中予以说明。在PORT语句中,各输入信号可以单独说明,也可将一组或一类输入信号用一个标准位向量(STD_LOGIC_VECTOR)说明。
可以规定输入信号为逻辑“1”时,其状态为“ON”;而为逻辑“0”时,其状态为“OFF”。梯形图中对输入信号Xi的引用对应于VHDL程序中对Xi的直接引用,而梯形图中对的引用则对应于VHDL程序中对(NOT Xi)的引用。
(2)输出执行元件Yj(j=0,1,…,N)
N个输出执行元件(即输出信号)也必须在实体的端口说明语句(PORT语句)中予以说明。如果某输出信号在梯形图中的其它位置需要被引用,则在PORT语句中必须将其端口模式设置为“BUFFER(输出并向内部反馈)”。在PORT语句中,各输出信号可以单独说明,也可将一组或一类输出信号用一个标准位向量(STD_LOGIC_VECTOR)说明。
可以规定输出信号为逻辑“1”时,其状态为“ON”;而为逻辑“0”时,其状态为“OFF”。梯形图中对输出信号Yj的引用对应于VHDL程序中对Yj的直接引用,而梯形图中对的引用则对应于VHDL程序中对(NOT Yj)的引用。
(3)连接线
梯形图中的连接线有四种:回路最左侧的横线为回路起始线(母线);回路中部的横线为“与”逻辑连接线;回路中部的竖线为“或”逻辑连接线;回路右侧与输出执行元件相连的线为输出线。
在VHDL程序中,可用“与”逻辑运算符“AND”代替梯形图中的“与”逻辑连接线,用“或”逻辑运算符“OR” 替梯形图中的“或”逻辑连接线,用信号赋值运算符“<=” 代替梯形图中的输出线。
这样,梯形图中的每一个电气回路都可很方便地用一条对输出信号的赋值语句来描述。赋值语句的左边是输出信号,右边是一个由各输入/输出信号及与/或运算符构成的逻辑表达式。
虽然在VHDL程序中也可以用IF分支语句来描述梯形图各回路中信号的逻辑关系,但这样会使程序结构很杂乱,调试很困难,可读性也较差,因此不推荐用IF语句来描述梯形图回路中的逻辑,而建议采用逻辑表达式给输出信号赋值的描述方法。
对于梯形图中那些不向外输出信号的内部元件来说,如定时器、状态寄存器、移位寄存器等,可采用元件例化语句调用有关的库元件功能进行描述,并在结构体中为其输出声明一个中间信号。当这类元件有输出信号时,将其输出信号赋值给声明好的中间信号,电路中其它位置就可对该中间信号或者它的取反信号进行引用。
通过以上各描述方法,就可将用梯形图设计的电路逻辑原型方便地逐行转换为VHDL程序。在进行电路逻辑功能设计时,就不必为VHDL程序的语法和程序结构花费过多的时间,能更加专注于电路逻辑功能设计与优化,同时也使所编写的VHDL程序逻辑更加清晰,可读性更好。
应用实例
以下通过图1所示的典型的顺序控制电路的实例来说明梯形图的VHDL描述方法。
在图1中,X0、X2和X4分别是三个输出回路的启动信号,X1、X3和X5分别是三个输出回路的停止信号,Y0、Y1和Y2分别是三个输出回路的输出执行元件。只有当Y0启动输出后,才允许Y1启动;只有当Y1启动输出后,才允许Y2启动。reset为CPLD芯片的上电复位信号,低电平有效。
实现该电路控制的VHDL程序逻辑如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY sequence IS
PORT(X0, X1, X2, X3, X4, X5: IN STD_LOGIC;
RESET: IN STD_LOGIC;
Y0, Y1, Y2 : BUFFER STD_LOGIC);
END sequence;
ARCHITECTURE ladder OF sequence IS
BEGIN
PROCESS(RESET, X0,X1,X2,X3,X4,X5)
BEGIN
IF (RESET='0') THEN
Y0<
='0'; Y1<='0'; Y2<='0';
ELSE
Y0<=(X0 OR Y0)AND (NOT X1);
Y1<=(X2 OR Y1)AND (NOT X3)AND Y0;
Y2<=(X4 OR Y2)AND (NOT X5)AND Y1;
END IF;
END PROCESS;
END ladder;
利用MAX+PLUS II的定时仿真工具对上面的程序进行仿真,结果如图2所示。从时序仿真的结果可以看到,电路的输出逻辑与梯形图原型的逻辑完全一致。
结语
本文通过对一个典型顺序控制电路梯形图的VHDL程序设计与时序仿真,表明梯形图-VHDL设计方法是正确可行的。梯形图法的引入使VHDL程序的设计得到简化,所设计出的程序结构简练,输出逻辑表达清楚。梯形图与VHDL程序分工明确,电路逻辑功能设计的工作由梯形图来承担,而VHDL程序只需负责对梯形图的逻辑功能进行描述并生成CPLD的下载文件。这样,对两种设计工具各取所长,就使得用CPLD开发顺序逻辑控制电路和系统的效率得到提高。