概述

控制器对数据处理器的控制过程可以写成硬件程序,即硬件描述语言。把硬件程序作为从算法转换到状态转换表的一个中间步骤。通过对硬件编程语言的学习,也可加深对计算、检验步骤的理解。控制器处在一个状态,即一个计算步骤,向数据处理器发出命令信号,命令数据处理器完成相应的操作,并根据数据处理器返回的状态变量,决定控制器的下一个状态,即下一个计算步骤。既然控制器的工作可用硬件描述语言表示,那么控制器的状态转换表的内容应与语言的内容相一致。程序中的语句应适应控制器的状态。语句既包含控制器发出的命令信号,还包含根据状态变量决定的次态信息。1

硬件语句硬件程序像任何程序一样,是由语句序列组成的。为了编写这些语句,必须建立正式的词法规律和语句习惯。这些规律和习惯应尽可能地简单易懂,并与状态转换表密切相关。程序中可能有许多语句,通常必须访问其中的某个语句,为此应对语句做标记。标记是语句的一个成分。它由1~7个字母和数字组成,第一个符号是字母。泛指一个标记时,用角形括号将标记的元素括上,即“(标记)”。控制器的输入是外输入和状态变量。为了简便起见,今后把外输入看做是状态变量的元素,不再单独考虑。状态变量可能是多位变量、…、,它的取值为、…、,也可用助记符号表示它们。例如,状态变量S包含三个变量,其中:

时,时,时,。在编程中,是否使用助记符号由编程者自己决定。

控制器的输出信号T命令数据处理器执行特定的操作,通常用助记符号表示T,如NOP、CLR、ADD、SUB等。其目的是便于记忆或联想数据处理器执行的操作。

任何编程语言都在程序的适当点加入注释,对语句做附加说明。“(注释)”为文字说明,不起程序作用。它紧跟在符号“/*”之后,例如:

/*THIS A COMMENT

/*COMPUTE THE MAGNITUDE OF X

“”也可用中文书写,它只起解释和说明的作用,便于编程者记忆程序和语句的作用。

状态转换表规定控制器的次态和输出,所以一个语句应提供下列信息:实现这个语句应完成的操作;确定该实现的下一个语句。一个简单语句由下列成分构成:

语句的第一个部分是语句的符号名称。标记部分的定义是:

::= (标记> :| 空项

“::=”指明左侧的量由右侧的量定义。上式意味着,“”不是“:”就是空项(无标记)。符号“|”指明它两边的量中的任何一个都可表示“”。

语句的第二部分是操作部分,其定义为

=

这表明,操作部分是用助记符号表示的控制信号。

语句的第三部分是下一个语句。它提供的是控制器的次态信息,其定义为:

::= | 空项

这是语句的地址部分。如果“(下一个语句>”用“(标记)”表示,那么下一个要执行的是由“”命名的语句;如果是空项,那么下一个要执行的是语句序列中的下一个语句。

简单语句的最后一部分是注释部分,其定义为:

::= | 空项

任何一个语句都可能有一个附加的注释,用来表明程序中语句的目的或者设计者附加的说明。1

复合语句写硬件程序时,常把一个语句序列看做是一个单个语句,这样的语句序列称为复合语句,其定义为:

::={

...

}

定义指明,“(复合语句>”是由许多语句构成的,“{”表示复合语句的起点,“}”表示复合语句的终点。复合语句中的语句也可能是条件语句或是复合语句。它们是按次序执行的,只是最后一个语句在下一个语句位置写有语句标记。例如:

0UT:{DISP /*显示结果

{INC A /*复合语句中的复合语句

lNC B

INC C}

DEC

CLR NEW} /*下一个语句是NEW1

条件语句条件语句的定义为:

:: IF

{

[SA]

...

[SL]

DEFAULT

}

大括号内的所有语句都是条件语句主体内的语句。如状态变量取值SA,那么执行[SA]语句;如果状态变量的取值不在SA~SL之内,那么执行DEFAULT语句。如语句中无DEFAULT值,那么条件语句是不操作语句,下一个要执行的语句是跟随条件语句之后的语句。1