CN1080906C - 一种数据处理系统及其方法 - Google Patents

一种数据处理系统及其方法 Download PDF

Info

Publication number
CN1080906C
CN1080906C CN94103297A CN94103297A CN1080906C CN 1080906 C CN1080906 C CN 1080906C CN 94103297 A CN94103297 A CN 94103297A CN 94103297 A CN94103297 A CN 94103297A CN 1080906 C CN1080906 C CN 1080906C
Authority
CN
China
Prior art keywords
instruction
register
data
vector
combination machine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN94103297A
Other languages
English (en)
Other versions
CN1107983A (zh
Inventor
迈克尔·G·盖拉普
罗德尼·L·高克
小罗伯特·W·西顿
特瑞·G·拉威尔
斯蒂芬·G·奥斯勃恩
托马斯·J·托马金
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
Motorola Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Motorola Inc filed Critical Motorola Inc
Publication of CN1107983A publication Critical patent/CN1107983A/zh
Application granted granted Critical
Publication of CN1080906C publication Critical patent/CN1080906C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17381Two dimensional, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8092Array of vector units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30083Power or thermal control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30116Shadow registers, e.g. coupled registers, not forming part of the register space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value

Abstract

一种包括一个或多个数据处理机(10)的数据处理系统(55)及其方法。数据处理机能够完成矢量运算以及标量运算。数据处理机(10)利用一个单独微定序器(22),既执行矢量指令也执行标量指令。数据处理机(10)还具有能够存储矢量操作码和标量操作码的存储器电路(14)。

Description

一种数据处理系统及其方法
本发明一般涉及数据处理,更具体地涉及一种数据处理系统及其方法。
在数据处理中模糊逻辑、神经网络和其它并行、阵列导向的应用渐渐变得非常普遍和重要。当今的大部分数字数据处理系统并没有特意考虑按模糊逻辑、神经网络和其它并行、阵列导向的应用来设计。因此,数字数据处理系统可以得到明显的性能和价格好处假使其设计能特别地满足模糊逻辑、神经网络和其它并行、阵列的应用要求。
饱和保护
某些算术运算,如加法和减法,可能在正方向或负方向中的一个上产生溢出。“溢出”指的是一种状况,即算术运算得出的结果值超出了目的地寄存器所能存储的最大值(如试图在一个8位寄存器里存储一个%100000001的结果)。“饱和”或“饱和保护”指的是一种处理溢出状况的方法,在这种方法里寄存器中的值用一个上限值或下限值来代替,例如以$FF作为一个8位的无符号上限值。一般地,有两种常用的处理溢出的方法。第一种,该结果可允许被卷转进位,即$01可被存入到目的地寄存器里(非饱和法)。第二种,该结果可用一个上限值或一个下限值来替代(饱和法)。
数据处理机中的一个常见问题是需要进行更宽的数据值的算术计算,即其具有的位数要比可得到的寄存器和可得到的算术逻辑部件(ALU)电路所能容纳的位数更多。例如,对一个数据处理机要求其能用一个16位的ALU进行两个32位数据的相加并非不常见。需要一种方法以有效地支持扩充长度运算的饱和保护。
数据处理机间的通信
对于模糊逻辑、神经网络和其它并行、阵列导向的应用,使用一个多维的集成电路阵列是值得采用的。这样,在模糊逻辑、神经网络和其它并行、阵列导向的应用中集成电路之间的通信往往非常重要。
在一些现有技术的数据处理系统中,比如以超算机(transputer)为例,集成电路间的通信是通过集成电路内指令的执行来交互控制的。从而,为把数据传送给其它集成电路需要一条或更多的指令,而从其它集成电路接收数据也需要一条或更多的指令。在一些其它的现有技术的数据处理系统中,诸如电话交换网络和某些计算机网络,被传送的数据本身包含有关哪些集成电路是该数据的指定接受器的路由选择信息。
模糊逻辑、神经网络和其它并行、阵列导向的应用的目标是开发一种集成电路通信技术和开发一种允许集成电路间通用数据传送能力的集成电路管脚结构,此外这种管脚结构还包括:(1)不再在集成电路阵列之外需要大量的电路;(2)不再为数据传送能力需要大量的软件开销;和(2)不再需要大量的软件开销用于数据传送能力;和(3)只需要尽可能少的专用集成电路管脚。
数据处理机中的扩充长度运算
数据处理机中的一个常见问题是需要进行更宽的数据值的算术计算,即数据值具有的位数要比可以得到的算术逻辑部件(ALU)电路在一个ALU周期内所能容纳的位数更多。例如,对一个数据处理机要求其使用一个16位的ALU进行两个32位数据的相加并非不常见。现有技术的数据处理机通常通过提供一个单“进位”位或“扩充”位和通过提供两种类型的计算指令来确定该进位位是否被用来作为该指令的一个输入(如,“加法”和“带进位的加法”、“减法”和“带借位的减法”、“右移”和“带扩充的右移”等)来支持这种扩充算术运算的。这种传统的方法对于有限的运算指令系统是足够的,但是不能有效支持其它的扩充长度运算。因此提供一种方法来有效支持一套广博的扩充长度运算指令系统是有必要的。
数据处理机中的数据位移运算
采用矢量的数据处理机的一个常见的问题是需要计算一个矢量的各元素之和或总和。在一些应用中,仅需要一个标量结果(即所有矢量元素的总和)。在其它应用中,必须计算一个累加和矢量。把矢量元素合并成单个总集合值或合并成一个累加的部分集合矢量的要求不只限于加法。某些应用也要求其它的聚合运算,如最小值和最大值。所以,提供一种更有效的把矢量元素合并成单个总集合值的技术和机制是有必要的。
指令的多级条件执行
在所有类型的数据处理机里指令的条件执行是一个非常有用的特性。在许多数据处理机中,条件转移指令已被用来实现指令的条件执行。但是,在SIMD(单指令多数据)处理机中,仅使用允许位或屏蔽位对复杂的判定树是不适合的,这些复杂的判定树要求使用一系列的复杂逻辑运算来计算允许位或屏蔽位的下一个状态。所以提供一种允许以一种更直截了当的方式来实现指令的条件执行的方案是有必要的。
数据处理机体系结构
SISD(单指令单数据)处理机对完成某些类型的数据处理任务是最有用的。SIMD(单指令多数据)处理机对完成另外一些类型的数据处理任务是最有用的。某些应用,诸如模糊逻辑、神经网络和其它并行、阵列导向的应用,趋向于利用一些最好由SISD处理机完成的数据处理任务,以及一些最好由SIMD处理机完成的数据处理任务。
把输入数据装入到数据处理机中
模糊逻辑、神经网络和其它并行、阵列导向的应用最好采用多维的集成电路阵列,这种阵列要求传送相当大量的数据。因此,集成电路使用的选择和存储输入数据的技术在模糊逻辑、神经网络和其它并行、阵列导向的应用中是相当重要的。集成电路使用的选择和存储输入数据的技术必须是灵活的,以便允许根据数据处理系统的特定要求以多种模式选择与存储输入数据。
在有关现有技术中,DMA(直接存储器存取)是这样一种技术,即一个输入/输出装置通过一个地址和数据总线直接去访问存储器,因此该输入/输出装置不需要依靠处理机去访问存储器。同时,在有关现有技术中,不同类型的处理机根据采用不同编址方式的指令内部地生成地址。
数据处理机的拖延(stalling)技术和机制
应用于模糊逻辑、神经网络和其它并行、阵列导向的应用的一块集成电路可能在该集成电路正从外部源接收数据的同时执行指令。这就产生了数据连贯性问题。集成电路必须具有一种机制来确定在执行一条指令时所使用数据的有效性。使用无效数据通常是一个灾难性问题,在大多数数据处理系统中是不能接受的。
在有关的现有技术中,采用了多种技术来确保数据的连贯性。存在许多软件数据传送或同步技术,如信号标志(semaphores)。此外,还有许多硬件数据传送技术,如数据界面中的状态位。不幸的是,对于硬件状态位,可能需要一个轮询或中断软件例程,或者可能需要一种排队方案。
对模糊逻辑、神经网络和其它并行、阵列导向的应用,需要一种数据连贯性技术和机制,它能够保证矢量和标量两种指令的数据相关性,并且只需要最少的软件开销,而且只用最少的电路就能实现。
最大值和最小值的确定
模糊逻辑、神经网络和其它并行、阵列导向的应用所需要的一种常见的运算是用以确定在包括两个或两个以上的一组数据值中那个或那些数据值等于最大值的比较运算。类似地,模糊逻辑、神经网络和其它面向并行、阵列导向的应用所需要的一种常见的运算是用以确定在包括两个或两个以上的一组数据值中那个或那些数据值等于最小值的比较运算。
希望能够支持带符号的(2的补码)和无符号的两种数。还希望能够支持扩充长度(多字节)操作数。因为在模糊逻辑、神经网络和其它并行、阵列导向的应用中需要使用一个多维的集成电路阵列,这就附加地要求能够越过集成电路的边界进行这种最大和最小的比较。
利用现有技术的软件指令也可以实现一种能完成确定最大值或最小值的软件例程。但是,这种软件例程将包含一长串指令并且执行起来可能需要长的时间。另外,把软件实现方法进行扩展以穿过运行不同软件程序的集成电路的边界也是困难的。
上述要求可由本发明实现。相应地,以一种格式提供了一种集成电路及其方法。该集成电路包括一种可执行矢量指令的矢量机。该集成电路还包括一种可执行标量指令的标量机。一个定序器控制矢量机中的矢量指令和标量机中标量指令两者的执行。该定序器和矢量机相连用以传送矢量控制信息。该定序器和标量机相连用以传送标量控制信息。该集成电路还包括用来存储一个矢量操作数和一个标量操作数的一个共享存储器电路。该共享存储器电路和矢量机相连用以传递矢量操作数。该共享存储器和标量机相连用以传递标量操作数。
通过下面参照附图的详细描述可对这些和其它特性、及优点得到更清晰的了解。
附图的简要描述
图2-1-1给出42×35前馈网络的传统表示。
图2-1-2给出42×35前馈网络的逻辑表示。
图2-1-3给出42×35前馈网络的实体表示。
图2-2-1给出102×35前馈网络的传统表示。
图2-2-2给出102×35前馈网络的逻辑表示。
图2-2-3给出102×35前馈网络的实体表示。
图2-3-1给出42×69前馈网络的传统表示。
图2-3-2给出42×69前馈网络的逻辑表示。
图2-3-3给出42×69前馈网络的实体表示。
图2-4-1给出73×69前馈网络的传统表示。
图2-4-2给出73×69前馈网络的逻辑表示。
图2-4-3给出73×69前馈网络的实体表示。
图2-5-1给出63×20×8前馈网络的传统表示。
图2-5-2给出63×20×8前馈网络的逻辑表示。
图2-5-3给出63×20×8前馈网络的实体表示。
图2-6示出联合机子系统。
图2-7示出联合机如何地分配输入数据矢量。
图2-8示出多个联合机功能信号组。
图2-9示出运用ECO和WCI控制信号的一个流写入操作。
图2-10示出联合机的引脚分配。
图2-11示出联合机的标识寄存器。
图2-12示出算术控制寄存器。
图2-13示出异常状态寄存器。
图2-14示出异常屏蔽寄存器。
图2-15示出处理部件选择寄存器。
图2-16示出端口控制寄存器。
图2-17示出Run(运行)方式输入变址(FM=0)。
图2-18示出Run方式输入标记(FM=1)。
图2-19示出联合机端口监视寄存器。
图2-20表示一批端口错误例子。
图2-21示出通用端口寄存器。
图2-22示出处理部件选择寄存器。
图2-23示出IDR指针寄存器。
图2-24示出IDR计数寄存器。
图2-25示出IDR位置屏蔽寄存器。
图2-26示出IDR初始偏移寄存器。
图2-27示出主机流选择寄存器。
图2-28示出主机流偏移寄存器。
图2-29为例1:流写入期间的简单数据分布。
图2-30为例2:数据的再排序和重叠分布。
图2-31表示一个北-南保持寄存器。
图2-32表示一个北-南保持寄存器。
图2-33表示1号偏移地址寄存器。
图2-34表示1号深度控制寄存器。
图2-35表示2号偏移地址寄存器。
图2-36表示2号深度控制寄存器。
图2-37表示1号中断状态寄存器。
图2-38表示1号中断屏蔽寄存器。
图2-39表示2号中断状态寄存器。
图2-40表示2号中断屏蔽寄存器。
图2-41表示一微定序器控制寄存器。
图2-42表示FLS,栈,FSLE和STKF。
图2-43表示一微定序器状态寄存器。
图2-44表示一标量进程控制寄存器。
图2-45表示一指令寄存器。
图2-46表示一多个指令超高速缓冲存储器线路有效寄存器。
图2-47表示程序计数器。
图2-48表示程序计数器界限寄存器。
图2-49表示指令高速缓冲存储器标记#0。
图2-50表示一指令高速缓冲存储器标记#1。
图2-51表示一指令高速缓冲存储器标记#2。
图2-52表示一指令高速缓冲存储器标记#3。
图2-53表示一个栈指针。
图2-54表示一一级栈。
图2-55表示一重复开始寄存器。
图2-56表示一重复结束寄存器。
图2-57表示一重复计数寄存器。
图2-58表示多个全局数据寄存器。
图2-59表示多个全局指针寄存器。
图2-60为一异常指针表。
图2-61为异常处理流程图。
图2-62表示多个输入数据寄存器。
图2-63表示多个矢量数据寄存器(V0-V7)。
图2-64表示一矢量进程控制寄存器。
图2-65表示多个输入标记寄存器。
图2-65-1表示一指令高速缓冲存储器。
图2-66表示一系数存储器阵列。
图2-67表示一微代码编程器的模型。
图2-68表示多个矢量机寄存器。
图2-68-1表示多个矢量机寄存器。
图2-69表示多个微定序器寄存器。
图2-70表示多个标量机寄存器。
图2-71表示多个联合机控制寄存器。
图2-72表示IDR的概念性实现。
图2-73为drotmov操作的一个例子。
图2-74表示一vmin和vmax指令。
图2-75为VPCR VT和VH位状态变换图。
图2-76表示一repeat循环结束时的bra/jmpri/jmpmi。
图2-77表示一repeat循环结束时的bsr/jsrri/jsrmi。
图2-78说明一个repeate循环本体。
图2-79说明一个repeate循环结束时的一个矢量条件。
图2-80说明一个repeate循环结束时的一个矢量条件。
图3-1表示一典型的神经网络布局。
图3-2表示一图3-1中用于隐层(h)的联合机实现。
图3-3表示一输入层到隐层的映象。
图3-4为微定序器的简化图。
图3-5表示一单周期指令流水线定时。
图3-6说明双周期指令定时图。
图3-7为第二级拖延的实例。
图3-8说明CMA和MMA等效存储器映象。
图3-9为直接和反相的CMA存取的图象表示。
图3-10说明例2的CMA布局。
图3-11表示IC、CMA和页面。
图3-12表示程序计数器和高速缓冲存储器标记。
图3-13说明例3的CMA布局。
图3-14说明例4的CMA布局。
图3-15说明例5的CMA布局。
图3-16说明例6的CMA布局。
图3-17说明例7的CMA布局。
图3-18说明例8的CMA布局。
图3-19说明4个端口的主机访问功能。
图3-20说明一维流运算。
图3-21说明2维流运算。
图3-22为输入数据流的一个例子。
图3-23为运用输入标记的一个例子。
图3-24说明主机存储器映象。
图3-25说明联合机的内部构造。
图3-26说明联合机的宏流程。
图3-27说明输入数据寄存器和相关的有效位。
图3-28为联合机独立填充然后计算的流程图。
图3-29为联合机在填充时独立计算的流程图。
图3-30表示一个主机、联合机和联合机′的交互作用。
图3-31说明微代码指令流。
图3-32说明例1中的数据移动。
图3-33说明例2中的数据移动。
图3-34说明例3中的数据移动。
图3-35说明例4中的数据移动。
图3-36说明例5中的数据移动。
图3-37为积之和传播例程。
图3-38说明多循环例程。
图3-39为多联合机信号标志传送的示例性联合机例程。
图3-40表示联合机的端口开关和抽头结构。
图3-41表示联合机的环形配置。
图3-42为联合机环形配置的例子。
图3-43示出一个联合机组的二维阵列。
图4-1示出一个联合机组的二维阵列。
图4-2说明主机随机存取读写定时。
图4-3说明主机随机存取地址传送定时。
图4-4说明主机随机存取地址/数据传送定时。
图4-5表示了带有早期终止的主机随机存取地址/数据传送。
图4-6说明主机流式存取读定时。
图4-7说明主机流式写访问。
图4-8说明从2号设备进行的Run方式写操作。
图4-9说明从具有待用的PE的设备#2进行的Run方式写操作。
图4-10说明联合机的写操作碰撞定时图。
图4-11说明联合机done到 BUSY的输出定时图。
图4-12说明联合机R/S到 BUSY的输出定时图。
图4-13说明联合机的带有Run/Stop干预的写定时图。
图4-14说明中断定时图。
图4-15说明复位定时。
图4-16说明IEEE 1149.1端口定时图。
图5-1-1表示代表一个利用一饱和指令的例子。
图5-1-2是饱和指令的流程图。
图5-2-1和图5-2-2一起表示4个数据处理机的方框图。
图5-3为Stop操作方式下的数据处理机的方框图。
图5-4为Run操作方式下的数据处理机的方框图。
图5-5为Stop操作方式下的和在随机存取方式下的数据处理机的方框图。
图5-6为Stop操作方式下和在流存取方式下的数据处理机的方块图。
图5-7为在Run操作方式下数据处理机的方框图。
图5-8是表示一个执行一系列加法指令例子的示意图。
图5-9为移位指令的流程图。
图5-10为比较指令的流程图。
图5-11为算术运算指令的流程图。
图5-12为表示现有技术中矢量聚集方法的原理图。
图5-13为按照本发明的一个实施例的聚集方法的示意图。
图5-14为几个处理部件中的一部分的方框图。
图5-15为几个处理部件中的一部分的方框图。
图5-16为几个处理部件中的一部分的方框图。
图5-17为跳越指令的流程图。
图5-18-1和图5-18-2为重复指令的流程图。
图5-19为代表一个变址填充方式例子的图。
图5-20为代表一个标记填充方式例子的图。
图5-21为数据处理机的部分方框图。
图5-22-1和图5-22-2是包含有拖延的数据连贯性技术的流程图。
图5-23为一个采用包含有拖延的数据连贯性的技术的例子的方框图。
图5-24为一个采用包含拖延顿的数据连贯性的技术的例子的方框图。
图5-25为一个采用含有拖延的数据连贯性的技术的例子的方框图。
图5-26为数据处理机的部分方框图。
图5-27和图5-28以表格形式给出极大值确定的一个例子。
图5-29为数据处理系统的部分方框图。
图5-30-1和图5-30-2为比较指令的流程图。
图5-31为一个采用一系列比较指令的例子的图。
图5-23为一个采用一系列比较指令的例子的图。
图5-33为数据处理系统一部分的方框图。
最佳实施例的详细说明
                        目录第一节前言
1.1    关键特征
1.2    联合机体系结构的目标
1.3    约定第二节功能说明
2.1    联合机系统概述
2.1.1  总论
2.1.2  映象
2.1.3  一般的数据流
2.1.4  数据流
2.1.5  初始化
2.1.6  输入数据
2.1.7  部分神经腱结果计算
2.1.8    输出数据2.2    联合机信号说明
2.2.1    联合机引出脚
2.2.2    联合机Run/Stop(运行/停止)操作方式
2.2.3
端口信号
北数据端口(ND〔7∶0〕)
北控制输出( NCO)
北控制输入( NCI)
南数据端口(SD〔7∶0〕)
南控制输出( SCO)
南控制输入( SCI)
东数据端口(ED〔7∶0〕)
东控制输出( ECO)
东控制输入( ECI)
西数据端口(WD〔7∶0〕)
西控制输出( WCO)
西控制输入( WCI)
2.2.4
主机存取控制线
读/写控制(R/ W)
允许数据( EN)
存取类型(OP)
2.2.5
系统配合线
Run/stop(R/ S)
忙( BUSY)
2.2.6
行和列信号
行信号( ROW)
列信号( COL)
2.2.7
其它信号
系统总线时钟(CLK)
系统复位( RESET)
中断( INTR)
通用端口I/O(PA〔1∶0〕
处理机状态(PSTAT〔2∶0〕)
2.2.8
测试信号
测试时钟(TCK)
测试数据输入(TDI)
测试数据输出(TDO)
测试方式选择(TMS)
测试复位( TRST)
2.2.9    直流电气特征
2.2.10   联合机引出脚2.3    联合机主机可访问寄存器
2.3.1    联合机标识寄存器(AIR)
2.3.2    算术控制寄存器(ACR)
2.3.3    异常状态寄存器(ESR)
2.3.4    异常屏蔽寄存器(EMR)
2.3.5    处理部件选择寄存器(PESR)
2.3.6    端口控制寄存器(PCR)
2.3.7    联合机端口监视寄存器(APMR)
2.3.8    通用端口寄存器(GPPR)
2.3.9    通用方向寄存器(GPOR)
2.3.10   IDR指针寄存器(IPR)
2.3.11   IDR计数寄存器(ICR)
2.3.12   IDR位置屏蔽寄存器(ILMR)
2.3.13   IDR初始偏移寄存器(IOR)
2.3.14    主机流选择寄存器(HSSR)
2.3.15    主机流偏移寄存器(HSOR)
2.3.16    北-南保持寄存器(NSHR)
2.3.17    西-东保持寄存器(EWHR)
2.3.18    1号偏移地址寄存器(OAR1)
2.3.19    1号深度控制寄存器(DCR1)
2.3.20    2号偏移地址寄存器(OAR2)
2.3.21    2号深度控制存器(DCR2)
2.3.22    1号中断状态寄存器(ISR1)
2.3.23    1号中断屏蔽寄存器(IMR1)
2.3.24    2号中断状态寄存器(IMR2)
2.3.25    2号中断屏蔽寄存器(IMR2)
2.3.26    微定序器控制寄存器(MCR)
2.3.27    微定序器状态寄存器(MSR)
2.3.28    标量进程控制寄存器(SPCR)
2.3.29    指令寄存器(IR)
2.3.30    指令高速缓冲存储器线路有效寄存器(ICVR)
2.3.31    程序计数器(PC)
2.3.32    程序计数器限寄存器(PBR)
2.3.33    指令高缓冲存储器标记#0(ICTO)
2.3.34    指令高速缓存储器标记#1(ICT1)
2.3.35    指令高速缓冲存器标记#2(ICT2)
2.3.36    指令高速缓冲存储器标记#3(ICT3)
2.3.37    栈指针(SP)
2.3.38    一级栈(FLS)
2.3.39    重复开始寄存器(RBR)
2.3.40    重复结束寄存器(RER)
2.3.41    重复计数寄存器(RCR)
2.3.42    全局数据寄存器(G〔0〕-G〔7〕)
2.3.43    全局指针寄存器(P〔0〕-P〔7〕)
2.3.44    异常指针表
2.3.45    输入数据寄存器(IDR)
2.3.46    矢量数据寄存器(从V〔0〕到V〔7〕)
2.3.47    矢量进程控制寄存器(VPCR)
2.3.48    输入标记寄存器(ITR)
2.3.49    指令高速缓冲存储器(IC)
2.3.50    系数存储器阵列(CMA)2.4    联合机可用微代码存取的寄存器
2.4.1     输入数据寄存器(IDR)
2.4.2
矢量机寄存器
系数存储器阵列(CMA)
矢量数据寄存器(V〔0〕-V〔7〕)
矢量进程控制寄存器(VPCR)
2.4.3
微定序器控制寄存器
指令寄存器(IR)
程序计数器(PC)
栈指针(SP)
一级栈(FLS)
重复开始寄存器(RBR)
重复结束寄存器(RER)
重复计数寄存器(RCR)
2.4.4
标量机寄存器
全局指针寄存器(P〔0〕-P〔7〕)
全局数据寄存器(G〔0〕-G〔7〕)
标量进程控制寄存器(SPCR)
2.4.5
联合机控制寄存器
联合机标识寄存器(AIR)
算术运算控制寄存器(ACR)
异常状态寄存器(ESR)
异常屏蔽寄存器(EMR)
处理部件选择寄存器(PESR)
端口控制寄存器(PCR)
联合机端口监视寄存器(APMR)
通用端口寄存器(GPPR)
通用方向寄存器(GPDR)
IDR指针寄存器(IPR)
IDR计数寄存器(ICR)
IDR位置屏蔽寄存器(ILMR)
IDR初始偏移寄存器(ODR)2.5    联合机微代码指令集概述
2.5.1    指令类型
2.5.2    使用记号
2.5.3
微代码指令格式
数据格式
寄存器选择
2.5.4    栈指针约定
2.5.5    存取IDR
2.5.6    矢量进程控制寄存器
2.5.7    标量进程控制寄存器
2.5.8    带符号与不带符号运算比较
2.5.9    饱和与非饱和运算比较
2.5.10   联合机系统控制操作
2.5.11
矢量机数据传送
对drotmov指令的说明
对dsrot指令的说明
2.5.12
矢量机数据运算
循环右移指令和左移指令的概述
向下移位操作的K得w
vmin/vmax指令的说明
2.5.13
矢量机条件操作
条件指令对VT和VH位的作用
循环右移和左移指令概述
2.5.14    标量机数据移动
2.5.15    标量机数据运算
2.5.16    标量机程序流程控制操作
2.5.17
repeat和repeate指令的说明
repeat循环终点处的流程变化
repeat循环终点处的矢量条件
2.5.18    扩充位和多字节运算的执行
2.5.19
多字节运算的说明
多字节加法
多字节减法
多字节比较
”VIF”对xX0和xX1的依赖
多字节最大值
多字节最小值
多字节算术左移位
多字节算术右移位
多字节求反
多字节指针增量
多字节指针减量
2.5.20    进程计算控制
2.5.21    VPCR的VH位和VT位对PE处理的作用
2.5.22    指令执行时间
2.5.23    联合机的缺失指令第三节联合机的操作原理3.1    信息流程和结构3.2    指令流线
3.2.1    指令流线中的拖延
3.2.2    指令流线里的拖延优先级3.3    指令和数据存储器
3.3.1    指令高速缓存
3.3.2    CMA和MMA映象
3.3.3    对CMA的直接和反向存取
3.3.4
分配CMA空间
例1:仅用于数据存储的CMA
例2:指令高速缓存器、PC和CMA页面
例3:用于程序和数据的CMA
例4:程序移位
例5:对例4增加跳转表
例6:对例4增加CMA栈
例7:对例4增加矢量和标量存储
例8:把所有部分汇集到一起3.4    联合机初始化3.5    端口操作
3.5.1
主机传送方式
随机存取方式
主机流式存取方式
3.5.2
联合机传送方式
输入变址
使用ILMR的例子
输入标记
3.5.3    对联合机的主机存储器映象3.6    联合机操作
3.6.1    联合机的宏观
3.6.2
主机和联合机交互作用的详细说明
输入有效位
先填充后计算
边填充边计算
联合机和联合机′的交互作用
3.6.3    联合机指令流程的微观
3.6.4
联合机的异常模型
复位异常
标量异常
矢量异常
端口错误异常
多个端口错误异常的解释
3.6.5
微代码程序结构
初始化和循环
多重循环
两个联合机之间的信号传送
条件执行3.7    微代码启动的端口写操作3.8    联合机总线布置
3.8.1    联合机端口开关和抽头
3.8.2
总线端口冲突及出错
联合机冲突条件
联合机争用条件
联合机交错
联合机开关争用
3.8.3    联合机环形结构
3.8.4    二维联合机结构第四节联合机总线操作4.1    联合机端口定时4.1.1  主机随机存取4.1.2  主机随机地址西到东传送4.1.3  主机随机地址和数据北和南传送4.1.4
带有早期结束的主机随机
地址/数据北/南传送4.1.5  主机流式读4.1.6  主机流式写存取4.2    联合机主控机操作4.2.1  联合机全部有效数据的写操作4.2.2  联合机部分有效数据的写操作4.2.3  联合机写冲突定时4.3  其它定时4.3.1  联合机 BUSY输出定时4.3.2  联合机带有Run/Stop干预的写定时4.3.3  中断定时4.3.4  复位定时4.3.5  IEEE 1149.1测试存取端口(TAP)定时第五节对选定专题的概述5.1  饱和保护5.2  数据处理机间的通信:开关和抽头5.3  多端口数据处理机5.4  数据处理机中的扩充长度操作5.5  数据处理机中的数据传送操作5.5.1
“dadd”、“daddp”、“dmin”、
“dminp”、“dmax”和“dmaxp”指令5.5.2  “dsrot”指令5.6  指令的多级条件执行5.6.1  “vif”、“velse”和“vendif”指令5.6.1  “dskip”和“dskipe”指令5.6.3  “repeat”和“repeate”指令5.7  数据处理机体系结构5.8  把输入数据装入数据处理机5.9  数据处理机的拖延技术和机制5.10  最大值和最小值的确定5.10.1
“colmax”、“rowmax”、“locmax”、“colmin”、
“rowmin”和“locmin”指令5.10.2
“vmaxp”、“vmax”、“vminp”以及
“vmin”、“maxp”、“max”、“minp”和“min”指令5.11  对系数存储器阵列(CMA)14的反向访问
                        词汇表联合机:联合机联合机′:
包括多于一个联合机的系统中,有可能各个不同的联合机含有不同的微代码。该撇号用作指明这种微代码的不同。联合机组:
联合机的复数形式。多于一个联合机。联合机链:
用 xCO/ xCI菊链控制信号链接起来的一群联合机。簇(bank):
处理一个输入矢量的一群联合机。增加簇的数量增加了输出神经细胞的数量。如果想象联合机组按x-y矩阵排列,那么一簇就类似于矩阵中的一行。可以比较这种簇和片的定义。广播:
该术语和Run(运行)方式流式写运算同义。即数据以流的形式(无外部发送地址)从一单信号源(联合机或某外部数据源)被传送给多联合机组。请注意该术语仅用于Run方式流式写入,不用于Run方式流式读出。这是因为在Run方式下,数据只能被写进或写出联合机,但数据不能从联合机中被读出。为了联合机读出数据,该设备必须置为Stop(停止)方式(R/ S=0)。
在Run方式操作(R/ S=1)下,广播操作的目的地是接收设备的输入数据寄存器(IDR)。在Stop方式操作下(当信号R/ S=0时),广播操作的目的地由主机流选择寄存器(HHSR)的LS〔3∶0〕位标志所指明。冲突:
当一外部端口访问和write微代码指令碰撞时出现联合机冲突(仅在Run方式下)。该条件取决于含有该冲突的端口的抽头设定。write微代码指令总是被取消掉。当检测出冲突时出现端口错误异常处理。边填充边计算:
这是一种方法,在把输入数据填充给输入数据寄存器(IDR)的同时允许微定序器对该输入数据进行重叠计算。争用:
当两个或更多的源试图同时访问IDR(输入数据寄存器)时出现联合机争用。目前不同的源包括:1)一个或多个端口;2)vstorei、vwritel或writel指令。这种情况主要在Run方式中是有意义的并取决于抽头设置。当争用被检测出时将出现端口错误异常处理。异常:
联合机异常(仅在Run方式下)是可能出现在正常系统中的数种系统事件中的一种。联合机所响应的异常类型为溢出、被零除和端口错误。在指令存储器的第一部分里含有一个异常矢量表。主机:
在联合机外部的负责联合机内务功能的任何控制机制。这些功能可包括联合机初始化、数据的输入,联合机产生的中断的处理等等。输入帧:
输入数据的一个完整集。在生成一个输出前所必需的数据量。通过适当使用流线技术,输入帧可被重叠以获得更大的吞吐率。输入变址:
允许邻接的输入采样序列被装入到输入数据寄存器(IDR)的输入捕捉机制。输入标记:
允许不邻接的输入采样序列被装入到输入数据寄存器(IDR)的输入捕捉机制。输入矢量:
联合机子系统为生成一个结果而所需的输入采样总数。输出功能
作用到前馈神经网络中各神经细胞输出上的功能。该功能通常用采用S形压挤功能形式。当所有其它联合机组的部分神经腱结果已被收集之后,该功能可由单个联合机完成。关于该功能如何由单个联合机完成的详细描述,请参见3.6.2.4节“联合机和联合机′的交互作用”。部分神经腱结果:
把传播函数作用在部分输入帧上所获得的结果。如果进入网络的输入采样总数小于64(单一联合机能够处理的最大数量),单个联合机可对整个输入帧进行操作(如同它作用在单个神经细胞上)并能因此计算出全部神经腱结果。
如果输入采样的总数大于64,联合机只能把传播函数作用在输入帧的一部分上,从而对各个神经细胞只计算出部分神经腱结果。单个联合机的责任是将所有的部分神经腱结果收集到一起,以便为各个神经细胞生成一个总神经腱结果。端口:
联合机上4个可能的外部总线端口中的一个。其可能为北、南、东和西。传播函数:
用来计算一个网络输出的函数。最简单的例子是各输入与连接权的乘积之和,即∑Ii×Wij
在联合机系统中,联合机完成部分传播函数(因为每个联合机只能得到部分输入)。某个单个联合机的责任是收集所有这些部分传播函数的结果(也称之为部分神经腱结果)并把它们总计起来形成完整的传播函数。关于这个函数的详细描述参见3.6.2.4节“联合机和联合机′的交互作用”。饱和:
联合机上的许多算术指令,由于与那些允许结果卷转进位的指令相反,将会引起结果饱和,具有这两种不同方式运算的优点之一是,在多字节操作中,在那里较低有效字节采用其将不饱和的指令(即较低有效字节完成引起结果卷转进位的运算),而最高有效位字节的运算会引起结果饱和。
考虑下述不带符号操作:
饱和:$FF+$02==>$FF(溢出被设置)
非饱和:$FF+$$02==>01(溢出被设置)
请注意在带符号方式中这种饱和运算不同。请详见2.5.9节“饱和和非饱和运算”。影子寄存器:
少数联合机寄存器被用于规定初始值。这些寄存器装备了周期地含有初始值的隐式(或影子)寄存器。这些带有影子寄存器配对物的联合机寄存器为:IPR、ICR、OAR1、DCR1、OAR2、DCR2。IPR和ICR是Run方式流操作中使用的主要寄存器。OAR1、DCR1、OAR2和DCR2是Stop方式流操作中使用的主要寄存器。影子寄存器的概念允许对流操作中使用的寄存器迅速地重新初始化。层(shelf):
单个SIMD机和其关联系数值的广义化名称。当联合机被用于神经网络应用时,层可看作为一个神经细胞。当联合机被用于模糊逻辑应用时,层可看作为一个模糊隶属函数。SIMD:
单指令多数据。这个词用作为描述联合机的状态控制机制的一个形容词。该词意味有一个协调联合机所有ALU(运算逻辑部件)部分的动作的单一指令流。SIMD矢量机:
联合机的ALU部分。在联合机中有64个计算块,它们对置放在输入数据寄存器(IDR)和系数存储器阵列(CMA)内的数据进行运算。这些运算得到的结果可存储在矢量寄存器(V0-V7)里。SIMD标量机:
联合机的状态控制部分。SIMD标量机从指令高速缓冲存储器(IC)中读指令,并用这些指令控制在SIMD标量机里和SIMD矢量机中进行的操作。片(slice):
在具有一个以上簇的联合机子系统中,一“片”是在同一时间接受输入矢量的相同部分的一群联合机组。增加片的数量便增加了输入的数量。如果想象联合机组按x-y矩阵排列,一片将类似矩阵中的一列。可以比较片和簇的定义。流式传输:
一种存取方式,允许信息可被“倾注到”或“虹吸出”联合机子系统而不需要在地址总线上提供显式寻址。地址信息代之以来自OAR、DCR和HSOR寄存器。从软件的观点来看,这样允许联合机子系统的更加透明的生长。开关:
把两个相对端口连接起来的内部电路。当数据通过开关时为其数据的传输加上一个时钟周期的延迟。抽头:
允许当前读周期式写周期(在一个端口)去访问IDR寄存器单元的一种内部电路。这种机制还允许联合机窥探由于端口开关连接而可能通过联合机的数据传送。
                   前言(第一节)
联合机(Association Engine)(简称AE)是由Motorola公司研制的一种单芯片装置,它将成为解决神经网络、模糊逻辑和各种并行计算应用的一种完整的总体方法。本文件将论述作为一个独立器件和作为由多联合机组构成的一个系统的成员的两种情况下联合机的功能描述及其操作。作为一个微编码SIMD(单指令、多数据)机而实施的联合机,将足够灵活地在最少主机CPU干预下支持许多现有的神经网络范例、模糊逻辑应用和并行计算算法。在初期研制阶段,这种芯片正被开发成为可被用户用于特定的神经网络和模糊逻辑应用的一种构件。远期目标是,把特定的一些应用集成到使用供单片连接的模块间总线(IMB)上联合机的全部或部分的适当一些MCU中。(1.1)关键特征
·单层应用的规模可变性:该体系结构在输入帧宽度和输出数量两方面都是规模可变的。
多层应用的规模可变性:联合机组群可以无缝(最少外部连接逻辑)地级连起来,并在最少CPU干预下传送层间数据。
·各个联合机向另一个联合机馈给的同时可直接和CPU/MCU通信。
·独特的总线开关和抽头结构用于高效的数据传送。
·支持多达64个8位输入×64个输出。
·模块设计可允许用户按自己应用要求安装。
·支持单片学习。
·支持模糊逻辑算法。
·通用的CPU接口。
·为通用性由一个微编码SIMD机供电。
·用户可编程微代码。
·支持标准接口协议以允许和CPU或MCU的直接连接。
·支持对所有内部单元的单时钟读和写周期(流方式)
·支持对所有内部单元的三时钟读和写周期(随机方式)
·联合机可链接以支持最大达216-18位采样的输入数据帧宽度。
·每个处理部件具有专用的ALU硬件以支持同时对全部数据的并行计算。
·支持IEEE 1144.1边界扫描体系结构(JTAG)。(1.2)联合机体系结构的目标
·最小时钟频率:DC(直流)
·最大时钟频率:20MHz(兆赫)
·最大功率消耗:400mw a5v
·3.3v操作
·包装类型:84引脚无引线芯片载件(LCC)
·包装尺寸:28mm×28mm(1.3)约定
本文件采用的约定如下:
·字节排序——当描述一个寄存器组(该组中含有多于一个的寄存器)时,该寄存器组将按数组符号写出,最高有效位寄存器为第一,最低有效位寄存器为最后,例如写作:IDR〔63∶0〕。64个输入数据寄存器的整个组一般称为IDR。
·位排序——当描述信号引脚组成寄存器位组时,最高有效位将具有最大号码而最低有效位将具有最小号码。因此,诸如PSTAT〔2∶0〕的符号表示有3根PSTAT信号引线,其中最高有效位为PSTAT〔2〕。
·命名约定:
信号名以黑体大写字母出现。
位名以斜体大写字出现。
寄存器以斜黑体大写字母出现。
微代码指令名以黑体小写字母出现。
·端口命名约定
有四个标明为北(N)、南(S)、东(E)和西(W)的端口。
作为一个端口的一部分的信号在其前面冠以x。这样,诸如xCI的符号代表所有的xCI信号(NCI、SCI、ECI和WCI)
                   功能说明(第二节)(2.1)联合机系统概述(2.1.1)总论
本节给出联合机操作的高级概述。本节还描述隐藏在该芯片所支持的数据流和流水线后面的概念。编写本文件时假设读者对所使用的该芯片组的应用类型具有一般的了解。联合机设计为一种通用的计算机,它有效地用于并行算法、模糊逻辑和神经网络的处理。尽管如此,在本节中将描述神经网络体系结构和联合机体系结构之间的联系,因为基本神经网络结构相对而言是简单的。而且神经网络本质上是尺寸可变的,这使得联合机的规模可变性更容易得到理解。
对模糊逻辑和神经网络的了解和实施趋向于提出某些有趣的和挑战性的问题。这些问题主要是因为缺乏对术语和概念的标准化,大部分参与者创造和使用他们自己对术语和概念的定义。由于这个原因,简要讨论从传统的神经网络到联合机芯片之间的映射是有帮助的。此后将讨论主机(任何控制联合机芯片操作的智能源)和联合机芯片之间的数据流、联合机组之间的传送、和多层神经网络层间的传送。(2.1.2)映象
为了更好地理解联合机芯片的能力和灵活性,将讨论传统的神经网络体系结构和联合机体系结构之间的映象。这一讨论集中在4个具有不同复杂性的独立的例子上,以帮助读者增加了解。这些例子里输入和输出数量的选取是任意的,只不过是为了传递一种尺寸的观念。
联合机被组成为支持高达64个8位输入和产生高达64个输出。对于那些要求低于64个输入和少于64个输出的应用,单个联合机就足以实现必要的结构。对于超过这些需求(大于64个8位输入和/或64个输出)的应用,为实现其结构需要不同数量的联合机。下面的例子用来说明为实现这些应用的不同的联合机组成。例1:42个输入35个输出的前馈网络
图2-1-1到图2-1-3分别用传统的神经网络表示、逻辑的联合机表示和实体的联合机表示描述一个要求具有42个输入和35个输出的单层前馈网络。其实现只需要一个联合机。主机向联合机传送42个字节的数据;施用了传播函数;生成35个输出。一个联合机可支持多达64个的输出。在图2-1-1和本文件的其它地方,应注意到输入层不完成任何计算功能。它只简单地作为分配层。例2:102个输入35个输出的前馈网络
图2-2-1到图2-2-3说明具有102个输入和35个输出的前馈网络的传统表示、逻辑表示和实体表示。如可从图2-2-3中看出的,需要两个联合机。联合机组和输入数据流串联连接,联合机0处理数据输入0-63,联合机1处理数据输入64-101。联合机1还完成部分神经腱结果(来自联合机0和其自身)的聚集然后生成35个输出。联合机0和联合机1组成一个簇(Bank)。为便于微代码编程,可能最好配置一个第三联合机以完成聚集和输出功能。例3:42个输入69个输出的前馈网络
图2-3-1到图2-3-3显示需要42个输入和69个输出的前馈网络。其实现需要两个联合机。联合机组与输入数据流并联连接,两个联合机同时接受输入数据。如可从图2-3-3中看出,联合机0和联合机1组成单个片。例4:73个输入69个输出的前馈网络
图2-4-1到图2-4-3说明要求具有73个输入和69个输出的实现方案。该实现方案需要四个联合机来完成任务。在片0中,联合机0和联合机2相连以处理输入数据0-63。在片1中,联合机1和联合机3连接以处理输入数据64-72。片0和片1有效地串联相连以处理多于64个输入的输入数据流。联合机0和联合机1相连组成簇0负责输出0-63。联合机2和联合机3相连组成簇1负责输出64-68。图5:63个输入20条隐线8个输出的前馈网络
图2-5-1到图2-5-3描绘2层前馈网络。输入层只作为输入数据到隐层的分配点。隐层由63个输入和20个输出组成。从隐层出来的20个输出均等地分配给输出层的所有输入。输出层包括20个输入和8个输出。联合机0形成实现输入层和隐层的单个簇(簇0)。这些层从主机取出63个输入采样,对数据执行网络变换函数演算,然后把20个输出传送给输出层。层3由一个簇(簇1)组成。簇1(联合机1)对由隐层提供的20个输入进行运算,对这些数据执行另一个网络变换函数演算,生成输出0-7。有关联合机及其操作的更详细描述,参见第三节“联合机的操作原理”。(2.1.3)一般的数据流
如前面的例子所描述的那样,联合机可以按不同的方式配置。从最简单的配置(一个联合机)到更复杂的实现方案,数据流是相容的。数据从主机流向联合机、从联合机流向带撇号的联合机(联合机′),从联合机′流回主机,或在多层应用中流到另一层上。尽管每个联合机器件具有独一的号码,撇号(联合机′)用来区别带有不同微程序内容和功能的联合机。应该再次指出的是,使用具有不同微代码的多联合机组是一种很强有力的特征,由于一种单一的芯片类型可用于多种变化的应用和功能中。
联合机含有专用端口,标明为N、S、E和W,分别代表北、南、东和西。在主机访问联合机阵列期间,端口承担对联合机/主机提供地址和数据信息的专用功能。在程序控制下,所有端口采用同样的基本传送协议,以在实现层间或层内通信时允许它们互相连接。下一节将给出通过这些端口的数据的概况。图2-6是讨论数据流时的参考图。(2.1.4)数据流
子系统中的每个联合机通过外部接口电路从主机系统接收地址、数据和控制激励。所有的初始化、状态监视和输入都通过该接口。在图2-6中,主机接口和西端口W及南端口S相连。有多种用于在联合机和主机向传送数据的可编程方式,它们将在后面章节中详细描述。一种数据传送方式可能比其它方式更适宜于完成诸如初始化、状态检查、系数存储器阵列(CMA)建立或为计算目的输入操作数据等特定功能。本文件的本节,除了讨论运算数据的输入之外,将不讨论每种功能的合适传送方式。这些传送方式的细节在第2.2节“联合机信号说明”和第3节“联合机的操作原理”中讨论。联合机还具有许多其它可编程特征,它们将在本文后面讨论。(2.1.5)初始化
在任何操作数据输入到联合机之前,该装置的许多主要区域必须得以初始化。已经细心定义了联合机的缺省值以保证在使联合机进入运行状态对只需要主机最少的工作。有关需由主机初始化区域的详细定义见第3节“联合机的操作原理”。(2.1.6)输入数据
子系统中的每个联合机负责取出适当数量的输入数据矢量,计算神经细胞的部分神经腱结果并把结果传送给联合机′。在诸联合机执行它们的微程序的同时,通常把输入数据矢量从主机传送到联合机。数据流的这些方式以及其它存取方式将在第3.5.1节“主机传送方式”和第3.5.2节“联合机传送方式”中详细描述。
图2-6中表示的联合机子系统支持256字节的输入数据矢量流,该矢量流可被看作为4个部分输入矢量,如图2-7所示。每个联合机支持64字节的输入数据矢量流。关联的控制信号及各联合机上的内部配置负责确定什么时候该联合机应当从主机接收它的数据段。联合机0和联合机1接收输入矢量的前64字节(或部分输入矢量#1),联合机2和联合机3接收部分输入矢量#2,联合机4和联合机5接收部分输入矢量#3,而联合机6和联合机7接收部分输入矢量#4。
如前面所述,每个联合机可接收多达64个输入采样,并且每个联合机计算多达64个部分神经腱结果。联合机组可链接在一起以允许更宽的输入数据矢量。一个或多个联合机的链必须和一个联合机,相连接以对该链上所有联合机的部分神经腱结果进行聚集,以便形成输出。和一个联合机′相连接的一个联合机链称之为一簇(Bank),每个簇可处理64个神经细胞。图2-6中有2个簇,簇0和簇1。该图示例出的子系统因而能够处理128个神经细胞。
在簇0中,将来自联合机0的第一部分输出值与来自联合机2、4和6的第一部分输出值合并,以生成该簇里第一个神经细胞的输出。整个神经细胞输出值的聚集在联合机8′内部完成。全体部分输出值(或部分神经腱结果——对神经网络体系结构而言),穿过东/西端口,从联合机组传送联合机′。(2.1.7)部分神经腱结果计算
联合机包含一个能够执行种种算术和逻辑运算的单指令、多数据(SIMD)计算机。所有64个处理部件步调一致地计算它们的数据值,在大部分实施中,由于所支持的算法的复杂性,联合机组是受计算限制的。由于其流线内部体系结构,联合机在输入数据传送时间内可隐掩掉很大部分的计算开销。这是因为联合机可在输入数据矢量的第一个采样到达时刻就开始计算操作而不必在开始之前等待接收整个输入数据矢量。用户可把可得到的微代码指令集下装到微代码存储器阵列以进行对输入数据的计算(参见第2.5节“联合机微代码指令集概述”)。(2.1.8)输出数据
一旦对所有64个神经细胞计算了部分神经腱结果(对所有64个神经细胞计算功能是并行完成的),在微程序控制下,64个神经细胞中每一个的部分神经腱结果通过东-西端口从联合机被传送给相关的联合机′。由于所进行计算的类型和这些计算的精度(的不同)从联合机传送到联合机′的部分神经腱结果可能在宽度上不同。与用于主机传送的控制线类似,适当的控制线被用来为各联合机到联合机′的数据流定序。象联合机组对它们相关联的数据完成计算一样,联合机组监视这些控制线,在适当的时刻把它们的结果放到总线上。取决于网络的尺寸和复杂性,对适当的总线操作可能需要外部隔离和缓冲电路。但是在大部分情况下,联合机和联合机′所使用的控制总线的控制信号对控制这个外部电路是足够的。一旦所有部分神经腱结果总计在一起(在联合机′中),可对该总计施以输出功能。(2.2)联合机信号说明
本节提供对联合机输入和输出信号引脚的描述。这些信号被分成几种不同的类:端口信号;主机存取控制信号;系统配合信号;行和列信号;其它信号;以及测试信号。表2.1给出联合机引脚一览。
本节中使用的约定和第1.3节“约定”中所叙述的一致。(2.2.1)联合机引出脚
图2-8提供了联合机的引出脚。(2.2.2)联合机Run/Stop操作方式
将联合机设计为运行于这样两种方式中的一种之下:Run方式或Stop方式。其方式由R/ S信号所选定的。该信号确定联合机是Run方式(R/ S处于VDD)还是Stop方式(R/ S=0)。取决于操作方式,联合机上的信号的表现不同。表2.2说明每一方式的功能性。关于特定的定时信息参见第4节“联合机总线操作”。关于与联合机不同数据传送的说明参见第3.5节“端口操作”。
Run方式用来允许执行联合机微程序。Stop方式用来允许对联合机内部资源做外部访问以便通过系统主机进行初始化和调试。(2.2.3)端口信号
下面描述联合机上的四个端口信号组。根据俯视联合机器件时的实体位置,这四个端口被标为北、南、东和西。(2.2.3.1)北数据端口(ND〔7∶0〕(71))
这些信号根据操作的Run/Stop方式传送地址或数据信息。在Run方式下,该双向端口响应写北微代码指令(writen、vwriten)作为一个输出而驱动;而当数据穿过芯片的北-南端口传送时,它又充当为一个输入。在Stop方式下,该端口也是双向的。如果OP信号表明一个随机存取传送,而且该装置被选中( ROW和 COL都被认定),该端口将接收随机存取地址的LSB(是低有效位)并且立即传递给南端口。如果该装置没有被选中,在该端口(ND作为输入)接收的任何数据都将立即被转到南端口,而在南端口接收的任何数据都向上移动到并排出ND(ND作为输出)。从联合机驱动出的数据值可在CLK信号的下降沿被启动。进入联合机的地址/数据值在CLK信号的上升沿被锁存。(2.2.3.2)北控制输出( NCO(73))
该输出信号被用来表明有效数据从ND信号线排出。该信号将在CLK信号的下降沿转变。(2.2.3.3)北控制输入( NCI(75)))
该输入信号被用来表明有效的地址/数据正从ND信号线进入。该信号将在CLK信号的上升沿上锁存。(2.2.3.4)南数据端口(SD〔7∶0〕)(83)
这些信号根据操作的Run/Stop方式传送地址或数据信息。在Run方式下,该双向端口响应写南微代码指令(writes,vwrites)作为一个输出而驱动;而当数据穿过芯片的南-北端口传送时,它又充当为一个输入。在Stop方式下,该端口也是双向的。如果OP信号表明随机存取传送,而且该设备被选中( ROW和 COL都被认定),SD将或在CLK的上升沿锁存随相存取数据(当R/ W=0时),或在CLK的下降沿把随机存取数据驱出SD(当R/ W=1时)。如果该器件未被选中,在该端口(SD作为输入)接收的任何数据将立即被转送到北端口,而在北端口接收的任何数据都将向下移动到并排出SD(SD作为输出)。从联合机驱出的数据值在CLK信号的下降沿被启动。进入联合机的地址/数据值在CLK信号的上升沿锁存。请参看第2.3.14节“主机流选择寄存器(HSSR)”关于在流方式存取期间HSP〔1∶0〕位如何能改变该端口操作的信息。(2.2.3.5)南控制输出( SCO(85))
该输出信号用来表明有效的地址/数据正从SD信号线排出。该信号将在CLK信号的下降沿转变。(2.2.3.6)南控制输入( SCI(89))
该输入信号用来表明有效数据正在从SD信号线进入。该信号将在CLK信号的上升沿锁存。(2.2.3.7)东数据端口(ED〔7∶0〕(77))
这些信号根据操作的Run/Stop方式传送地址或数据信息。在Run方式下,该双向端口响应写东微代码指令(writee,vwritee)作为一个输出驱动,而当数据穿过芯片的东-西端口传送时,该端口又充当一个输入。在Stop方式下,在该端口(ED作为输入)接收的任何数据将立刻被转送到西端口,而在西端口接收的任何数据都将传给并排出ED(ED作为输出)。从联合机排出的数据值在CLK信号的下降沿启动。进入联合机的地址/数据值在CLK信号的上升沿锁存。诸参看第2.3.14节“主机流选择寄存器(HSSR)”有关在流方式存取期间HSP〔1∶0〕位如何能改变该端口操作的信息。(2.2.3.8)东控制输出( ECO(79))
该输出信号用来表明有效的地址/数据正在从ED信号线排出。该信号将在CLK信号的下降沿转变。(2.2.3.9)东控制输入( ECI(81))
该输入信号用来表明有效数据正在从ED信号线进入。该信号将在CLK信号的上升沿锁存。(2.2.3.10)西数据端口(WD〔7∶0〕(91))
这些信号根据操作的Run/Stop方式传送地址或数据信息。在Run方式下,该双向端口响应写西微代码指令(writew、vwritew)作为一个输出驱动;而当数据穿过芯片的西-东端口传送时,它又充当一个输入。在Stop方式下,该端口也是双向的。如果OP信号表明一个随机存取传送,而且该装置被选中( ROW和COL都被认定),该端口将接收随机存取地址的MSB(最高有效位)并且立即转送给东端口。如果该装置没有被选中,在该端口(WD作为输入)接收的任何数据都立即转送到东端口,而在东端口接收的任何数据都将传给并排出WD(WD作为输出)。从联合机排出的数据值在CLK信号的下降沿被启动。进入联合机的地址/数据值在CLK信号的上升沿锁存。(2.2.3.11)西控制输出(WCO(93))
该输出信号用来表明有效数据正在从WD信号线排出。该信号将在CLK信号的下降沿转变。(2.2.3.12)西控制输入( WCI(95))
该输入信号用来表明有效的地址/数据正在从WD信号线进入。该信号将在CLK信号的上升沿锁存。(2.2.4)主机存取控制线
下述信号用在Stop方式下访问联合机内的资源。主机存取可以是随机存取或流式存取中的一种。(2.2.4.1)读/写控制(R/ W(65))
该输入信号用来控制向/从联合机存取的方向。如果信号为高电平,存取为读(数据被从联合机读出),如果这个信号为低电平,存取为写(数据被写进联合机)。在CLK的上升沿R/ W引脚被内部锁存。(2.2.4.2)数据启动( EN(67))
该低电平有效输入信号是主机总线传输的数据启动信号。当该信号被认定时(与 ROW和 COL输入一起),地址或数据被传送给联合机直到适当数量的字节/字已被传送完成 EN被否定。 EN信号可用来控制流进和流出联合机的信息的数据速率。通过保持ROW、 COL线有效和启动/禁止 EW信号,数据传送的速率可被改变。在CLK的上升沿 EN引脚被锁定。(2.2.4.3)存取类型(OP)(94)
该输入信号用来指明要执行哪种类型的主机存取(R/ S=0)。在CLK的上升沿OP引脚被内部锁存。
当OP=0时,流式存取方式被选择。当以这个方式操作时,通过采用OARx/DCRx寄存器组合,内部地生成一个起始地址和计数。这种机制允许数据流可被写进联合机系统或可从联合机系统读出。通过使用一个起始地址(OARx)寄存器和一个持续(DCRx)寄存器,该数据流可在不提供地址的情况下馈给联合机链。该链是通过把xCI和xCO信号互相连接起来组成的(见图2-9)。所有的联合机组存取同样的数据。流传送的方向由R/ W确定。在每个数据装入后内部地址指针自动地递增。在流式存取可在联合机阵列上执行之前,主机流偏移寄存器(HSOR)必须被加载。有关流式传输的更多信息参见第3.5.1节“主机传送方式”。
当OP=1时,随机存取方式被选择。在这种方式下,对由端口完成的各次读和写操作都需要一个地址。地址在西端口或北端口上提供(分别为16位地址的最高有效字节或最低有效字节)数据在南端口被取得或被给出(取决于读/写)。(2.2.5)系统配合方式
下述信号用来协调联合机系统。最值得注意的是Run/Stop方式以及用于多联合机组的完成信号。(2.2.5.1)Run/Stop(R/ S)(80)
该输入信号确定联合机的操作方式。当该信号为高电平(VDD)时,Run方式被选择。当该信号为低电平(VSS)时,Stop方式被选择。在CLK信号的上升沿R/ S引脚被锁存。
Stop方式主要用于对联合机(组)的主机初始化和配置。Run方式主要用于执行内部微代码和用于无须主机干预的联合机组之间的数据传送。(2.2.5.2)忙( BUSY)(78)
该低电平有效、开路漏极(open drain)输出信号用来表明联合机目前正在执行指令。当联合机已执行done指令或已以单步方式完成所选取的指令时,该 BUSY引脚被否定。每当 RESET引脚被起动或者R/ S信号转换到Stop方式,该 BUSY信号也被否定。该输出和一个外部上拉器件一起用来确定什么时候所有的联合机组达到一个“done”状态。该 BUSY引脚在CLK信号的下降沿被启动。(2.2.6)行和列信号
取决于Run/Stop方式, ROW和 COL信号执行两种不同的功能。在Run方式下,这些信号用来辅助多联合机组之间的最小值和最大值运算。在Stop方式下,这些信号用来为主机传送选择一个联合机器件。(2.2.6.1)行信号( ROW(82))
该低电平有效双向“线或”信号用作两件事:在一个行中选择一个联合机和在微程序控制下辅助最小值和最大值运算。
在Run方式下, ROW信号被max和min微代码指令组使用以越过共享一条公用 ROW线的芯片中的芯片边界来解决最大值和最小值功能。在这些指令期间,来自正在被测试寄存器的一个数据位被写入该“线或”信号。在下半个时钟周期期间,该信号被检测以观察被读的数据是否和已写入的数据一样。很明显,越过芯片边界执行min和max指令需要芯片进行同步操作(即,不同芯片上的指令在同一时钟上执行)。
在Stop方式下, ROW信号作为向联合机的芯片选择输入,用于为主机存取选择联合机(在一行里)。(2.2.6.2)列信号( COW)(84)
该低电平有效双向线“或”信号用作两件事:在一个列里选择一个联合机和在微程序控制下辅助最小值和最大值功能。
在Run方式下, COL信号被max和min微代码指令组使用,以越过共享一条公用 COL线的芯片中的芯片边界来解决最大值和最小值功能。在这些指令期间,来自正在被测试寄存器的一个数据位被写入该线“或”信号。在下半个时钟周期期间,该信号被检测以观察被读的数据是否和已写入的数据一样。同样,越过芯片边界执行min和max指令要求芯片进行同步操作(即,不同芯片上的指令在同一时钟上执行)。
在Stop方式下 COL信号作为向联合机的芯片选择输入,用于为主机存取选择联合机(在一列里)。
(2.2.7)其它信号
(2.2.7.1)系统总线时钟(CLK)
该输入信号是整个网络的系统时钟。所有利用这个时钟传出芯片之外的数据将是这样的,即在时钟的下降沿传送输出数据而在时钟的上升沿捕捉输入数据。所有数据和控制信号的建立时间和保持时间都以该时钟为基准的。这一信号跨过多联合机组的同步对于执行某些联合机指令(特别是那些“外部可见的”指令,比如rowmin,rowmax,colmin,colmax,vwrite,write等)是关键性的。
(2.2.7.2)系统复位( RESET)
和内部系统复位相连的这一低电平有效的输入信号是施加给系统中所有装置的系统复位信号。当其被认定时,它迫使所有的装置回到它们的缺省状态。复位和CLK的上升沿内部地同步。请参见第4,3,4节“复位定时”以得到更多信息。
(2.2.7.3)中断( INTR(66))
该低电平有效、开路漏极输出信号被用来通知主机系统中断条件已经出现。取决于置于IMR1和IMR2寄存器中的那些位,该信号可由不同原因所认定。有关更详细的信息请参见第2.3.23节“1号中断屏蔽寄存器(IMR1)”和第2.3.25节“2号中断屏蔽寄存器(IMR2)”和第4.3.3节“中断定时”。
(2.2.7.4)通用端口I/O(PA〔1∶0〕(68))
这些高电平有效输入/输出信号被联合机微程序用于通用的输入/输出。当这些引脚被编程为输入时,数据在CUK信号的上升沿被锁存。当编程为输出时,这些信号允许数据在CLK信号的下降沿送出。这两个引脚可被独立地编程为输入或为输出。有关I/O和数据编程的更详细信息参见第2、3、8节“通用端口寄存器(GPPR)”。
(2.2.7.5)处理机状态(PSTAT〔2∶0〕(86))
这些输出信号连续地反映联合机指令状态的状态。这些输出信号在CLK信号的下降沿驱动而出。有关PSTAT〔2∶0〕信号的可能值参看表2.3。
(2.2.8)测试信号
这四个测试信号提供了一个接口,该接口支持IEEE 1149.1用于插件连接的边界扫描测试的测试存取端口(TAP)。
(2.2.8.1)测试时钟(TCK)
该输入信号用作为测试逻辑的专用时钟。因为测试逻辑的计时独立于联合机的正常操作,一块板上的所有其它联合机装置可共享一公用的测试时钟。
(2.2.8.2)测试数据输入(TDI)
该输入信号对TAP和边界扫描数据寄存器提供串行数据输入。
(2.2.8.3)测试数据输出(TDO)
该三态输出信号提供来自TAP或边界扫描数据寄存器的串行数据输出。TDO输出可被置为高阻抗方式以允许插件板级测试数据通路的并行连接。
(2.2.8.4)测试方式选择(THS)
该输入信号被TAP控制器解码并区分测试支持电路的主要操作。
(2.2.8.5)测试复位( TRST)
该输入信号把TAP控制器和IO.Ct1单元复位到它们的初始状态。IO.Ct1单元的初始状态为把双向引脚配置为一输入的状态。有关边界扫描链的更详细信息请参看第2.6.3节“数据寄存器”。
(2.2.9)直流电气特性
图2.4给出联合机输入和输出两种功能的直流电气特性。
(2.2.10)联合机引出脚
图2-10详细列举联合机组件的引出脚。标明为“n.c.”的引脚为不连接的引脚,它也不和联合机内部的任何有源电路相连接。
(2.3)联合机的主机可访问寄存器
本节中所描述的寄存器是那些在主机方式存取联合机(即R/S=0)期间可被访问的内部寄存器。这些寄存器可以用随机存取方式(OP=1)或用流式存取方式(OP=0)来访问。但是,联合机标识寄存器的值不能够被改变。表2、6列举了主机可访问寄存器。
(2.3.1)联合机标识寄存器(AIR)
联合机标识寄存器(AIR)330可被主机或微代码用来确定装置的类型和规模。对该装置进行的每次功能修改将通过对该寄存器的递减来记录(即,该装置具有$FF的一个ID(标识),该装置的下一版本就将具有$FE的ID)。
这个寄存器定位为主机和微代码存储器变换中的第一个,这样不论体系结构怎样修改该寄存器将总是定位在相同的位置。
AIR是一个只读寄存器并可由微代码指令movfc访问。图2-11更详细地说明AIR。更多的细节请参阅第2.4.5.1节“联合机标识寄存器(AIR)”。
(2.3.2)算术控制寄存器(ACR)
算术控制寄存器(ACR)172控制矢量机和标量机中数字的算术表示。表2.7提供了有关ACR的更多信息。
SSGN位和VSGN位在算术运算期间分别控制标量机或矢量机里的数值是否考虑为是带符号的或是不带符号的。这些位还控制产生哪种类型(带符号或不带符号)的溢出。这些位的缺省值为0,意味着缺省时标量机和矢量机中采用的是带符号算术。
ACR可用微代码指令movci,movtc和movfc存取。图2-12中更详细地说明了ACR。其中位0-SSGN为标量带符号/不带符号算术运算;位1-VSGN为矢量带符号/不带符号算术运算。有关细节请参阅第2.4.5.2节“算术控制寄存器(ACR)”。
(2.3.3)异常状态寄存器(ESR)
异常状态寄存器(ESR)332记录所有待决异常的出现。联合机异常模型是平直的(异常处理不能嵌套;即,一次只能处理一个异常)和分优先级的(较高优先级异常在较低优先级异常之前处理)。每次该寄存器由主机读过之后,其内容被清除掉。请将这种清除和第2.4.5.3节“异常状态寄存器(ESR)”中所描述的由rte指令对位的清除进行比较。表2.8提供了ESR的更多信息。
SVE位表明何时标量机内已出现溢出异常。VVE位表明何时矢量机内已出现溢出异常。即,如果溢出在64个处理部件中的任何一个中出现,该位将被置位。
SDE位表明何时标量机内已出现被零除的异常。VDE位指明何时矢量机内已出现被零除的异常。和VVE位一样,VDE位反映所有64个处理部件的被零除的状态。如果在64个处理部件的任一个中出现被零除,VDE位将被置位。
PCE位表明是否已出现PC越界异常。当程序计数器(PC)的内容大于PC界限寄存器(PBR)的内容时出现PC越界异常。
IOE位表明何时由联合机执行非法Opcode(操作码)。
PEE位表明何时出现端口错误异常。可能的端口错误异常描述于第3.6.4.5节“对多端口错误异常的解释”和表3.6所示的可能的端口错误异常”之中。
ICE位表明何时出现基于指令的IDR争用。这个条件发生于在执行vstore,vwritel或writel指令的同时一个外部流式写试图对IDR加载。这也被认为是一种端口错误异常。可能的端口错误异常在第3.6.4.5节“对多端口错误异常的解释”和表3.6“可能的端口错误异常”中叙述。
有关异常处理的更详细说明,请参见第3.6.4节“联合机异常模型”。ESR是一个只读寄存器,可被微代码指令movfc访问。图2-13更详细地描叙了ESR,其中位0-SVE为标量溢出异常;位1-VVE为矢量溢出异常;位2-SDE为标量被零除异常;位3-VDE为矢量被零除异常;位4-PCE为PC越界异常;位5-IOE为非法操作码异常;位6-PEE为端口错误异常;位7-ICE为基于指令的IOR争用异常。
(2.3.4)异常屏蔽寄存器(EMR)
异常屏蔽寄存器(EMR)334允许联合机中的异常条件的有选择开启(和禁止)。当一个异常被屏蔽掉时,相应的异常例程将不被调用。表2.9给出了EMR的更详细的信息。
如果VVEM位被设置,矢量机的溢出条件将不产生异常(即异常处理不会出现)。矢量溢出由各个处理部件的VPCR(矢量进程控制寄存器)里的VV位表明,而在全局上由ESR的VVE位表明。按照缺省值,VVEM是清零的,这意味着当矢量机内存在溢出条件时将出现异常处理。
SDEM位确定是否标量机里的被零除条件会引起程序流程的改变。如果SDEM位被设置,而且标量机内确实出现被零除条件,将不会出现异常处理。按照缺省值,SDEM是清零的,这意味着当标量机内存在被零除条件时将出现异常处理。
VDEM位确定是否矢量机里的被零除条件会引起程序流程的改变。如果VDEM位被设置,而且矢量机内确实出现被零除条件,将不会出现异常处理。根据缺省值,VDEM是清零的,这意味着当矢量机内存在被零除条件时将出现异常处理。
PCEM位确定是否PC越界会引起异常处理。按照缺省值,PCEM是置1的,这意味着PC越界条件会导致异常处理出现。因为PC越界被认为是“接近致命性”的运行条件,所以强烈地建议在任何时候该位都保持置1。
IOEM位确定是否指令流中非法操作码会引起异常处理。按照缺省值,IOEM是清零的,其意味着非法操作码条件将导致异常处理出现。如果该位被设置,非法操作码会被简单地忽视掉,异常处理将不出现。
PEEM位确定是否端口错误在Run方式期间会引起异常处理出现。按照缺省值,PEEM是清零的,这意味着所有的端口错误都将导致端口错误异常例程受到执行。如果PEEM被设置,所有的端口错误将被忽略。这不是可取的。
ICEM位确定是否基于指令的IDR争用会引起异常处理出现。按照缺省值,ICEM是清零的,这意味着所有基于指令的IDR争用都将导致基于指令的IOR争用异常例程被执行。如果ICEM被设置,所有的基于指令的IDR争用都将被忽略。
EMR可用微代码指令movci、movte和movfc存取。更多的细节请参见第2.4.5.4节“异常屏蔽寄存器(EMR)”。EMR在图2-14中得到更详细的描述,其中,位0-SVEM:标量溢出异常屏蔽;位1-VVEM:矢量溢出异常屏蔽;位2-SDEM:标量被零除异常屏蔽;位3-VDEM-矢量被零除异常屏蔽;位4-PCEM:PC越界异常屏蔽;位5-IOEM:非法操作码异常屏蔽;位6-PEEM:端口错误异常屏蔽;位7-ICEM:基于指令的IDR争用异常屏蔽。
(2.3.5)处理部件选择寄存器(PESR)
处理部件选择寄存器(PESR)220用于所有的向下移位指令(drotmov,dsrot,dadd,daddp,dmin,dminp,dmax和dmaxp)期间。PESR中含有的值指明哪个处理部件将提供环绕(wraps)到0号处理部件的数据。本质上,PESR指示移位链的末端。该寄存器的缺省值为$3F,它表示所有的处理部件都将用于向下移位操作中。
PESR可由微代码指令movci,movtc和movfc访问。更多细节请参见第2.4.5.5节“处理部件选择寄存器(PESR)”。PESR在图2-15中得到更详细的说明。
(2.3.6)端口控制寄存器(PCR)
端口控制寄存器(PCR)52控制在Run方式(R/ S=1)期间数据怎样流进和通过联合机,它还控制在Run方式期间输入数据寄存器怎样被填充。图2-16中PCR得到更详细的说明,其中,位0-WT为西抽头位;位1-ST为南抽头位;位2-ET为东抽头位;位3-NT为北抽头位;位4-EWS为东西开关位;位5-NSS为北南开关位;位6-FM:为IDR填充方式。表2.10提供有关PCR的更多信息。
在Run方式(R/ S=1)下,该寄存器的前四位(NT70,ET68,ST66和WT64)为抽头位,它们控制是否要把写进端口的信息送给输入数据寄存器(IDR)。如果在Run方式期间数据由一个外部器件写给端口中的一个,并且这个端口的抽头位被设置,则写给这个端口的数据也要被写入IDR。
在Run方式(R/ S=1)下,两个开关位(NSS74和EWS72)控制是否写入一个端口的数据要从相对的端口写出。例如,如果NSS=1,并且数据流入北端口,该数据在一个时钟周期之后将流出南端口。类似,如果NSS=1,并且数据流进南端口,一个时钟周期之后该数据将流出北端口。
重要的是要注意,如果北-南开关被闭合,而且北抽头和南抽头二者都闭合、数据被写入北端口,那么复制的数据将不被写入IDR(即,写入北端口的数据将不经过开关然后再经过南抽头传播给IDR)。
抽头和开关设定只在Run方式(R/ S=1)期间有效。当联合机被停止(R/ S=0)时, ROW, COU, EN信号和地址信息决定数据的源/目的地。
填充方式位(FM)76控制Run方式期间IDR如何被填充。当FM=0时,输入变址被用来填充IDR。当利用输入变址填充IDR时,IPR和ILMR确定输入数据被存储于何处,ICR确定将要存储多个字节,而IOR确定被广播的输入数据何时被接收。图2-17表示用来实现输入变址的寄存器。
当FM=1时,输入标记被采用。输入标记利用IPR和ILMR来确定输入数据被存储于何处,ICR确定将要存储多少字节,而ITR用来确定何时所广播的数据被接收。图2-18表示用来实现输入标记的寄存器。
应记住在Run方式时,数据利用广播数据传输方法从芯片向芯片发送,而这些传送的目的地总是IDR。
请参阅第3.5.2.1节“输入变址”和第3.5.2.3节“输入标记”中有关输入变址和输入标记的讨论。
PCR可由微代码指令movci,movte和movfe访问。有关细节请见第2.4.5.6节“端口控制寄存器(PCR)”。
(2.3.7)联合机端口监视寄存器(APMR)
联合机端口监督寄存器(APMR)336用来确定联合机中端口错误异常的原因。当ESR的PEE位被设置时,这些位描述端口错误异常的原图。表2.10提供有关APMR的更多信息。
该寄存器的前四位(EW,ES,EE和EN)表明当错误条件出现时是否一个通过该装置的Run方式写正在进行中(请记住端口错误异常只会在Run方式期间产生)。最后四位(IW、IS、IE和IN)表明当错误条件出现时是否微代码写正在进行中。
在图2-20中表示端口错误的图形例子。
关于错误代码的描述,请参见第3.6.4.4节“端口错误异常”和第3.6.4.5节“对多个端口错误异常的解释”。
APMR是一个只读寄存器,可由微代码指令movfc访问。有关细节请见第2.4.5.7节“联合机端口监督寄存器(APMR)”。APMR在图2-19中更详细说明,其中位0-EW为外部西端口写;位1-ES为外部南端口写;位2-EE为外部东端口写;位3-EN为外部北端口写;位4-IW为内部西端口写;位5-IS为内部南端口写;位6-IE为内部东端口写;位7-IN为内部北端口写。
(2.3.8)通用端口寄存器(GPPR)
通用端口寄存器(GPPR)338和通用方向寄存器(GPDR)一起用来确定PA〔1∶0〕信号引脚的状态。PA〔1∶0〕本质上是一个2位并行I/O端口。该寄存器充当这个2位并行I/O端口的接口,可以或者由主机使用来设置系统范围的参数值,或者由联合机使用以表明状态信息。该寄存器不能由 RESET信号来改变。
GPPR可由微代码指令movci,movtc和movfc访问。更多细节请见第2.4.5.8节“通用端口寄存器”。图2-21中较详细地说明GPPR。
(2.3.9)通用方向寄存器(GPDR)
通用方向寄存器(GPDR)340和通用端口寄存器(GPPR)一起用来确定PA〔1∶0〕信号引脚的状态。这个寄存器控制各个信号引脚的方向。请见表2.12关于这些位的定义。这个寄存器的缺省(或复位)条件在复位下置为$00,表明PA〔1∶0〕信号作为输入操作。
GPDR可由微代码指令movci,movtc和movfc访问。有关细节请见第2.4.5.9节“通用方向寄存器(GPDR)”。在图2-22中更详细地说明了GPDR。
(2.3.10)IDR指针寄存器(IPR)
IDR指针寄存器(IPR)132是在Run方式(R/ S=1)期间为广播操作确定IDR地址的寄存器。这个寄存器中所包含的值指明当广播传送启动时传送的起始IDR单元。IPR可具有范围从零(IDR中的第一个单元)到63(IDR中的最后一个单元)的值。当复位时该寄存器的值为0,表明在Run方式期间接收数据的第一个IDR的单元是IDR〔0〕。
IPR寄存器以IPR寄存器的一个内部版本作为影子。这个影子寄存器允许在该IPR影子寄存器的值被修改,以把数据放进IDR时,在IPR中规定的初始值保持不改变。每次把数据装入IDR中IPR影子寄存器的内容就增加。该影子寄存器增加的数量取决于ILMR寄存器的内容。
在下述条件下从IPR向IPR影子寄存器加载:
1.当它被加载时;
2.当一条done指令被执行时;
3.当使用IDRC寻地方式时;和
4.当 RESET信号被触发时(1→0→1)。
规定IDRC作为矢量指令中的源操作数清除IDR的有效位,并且使用IDR的内容作为矢量源。请参考表2.36中对可能的矢量寄存器源的列举。
硬件限制:当进行超过IDR的界限的写尝试时,或者当对IPR影子寄存器的正常增加使其大于$3F时,将设置一个内部标志,它表明“IDR满”。所有后继的对IDR的Run方式写(由于writel、vwritel和外部写)都被忽视。每当一条done指令被执行、IDRC寻址方式被使用或 RESET信号被认定时,该标志被请除。
IPR类似就用于主机方式流操作的OAR1寄存器。请参见第3.5.2.2节关于ILMR怎样影响IDR输入变址的内容。图2-23中更详细地说明了IPR。
对于Run方式输入变址期间IDR、IPR、ICR和ILMR如何一起工作的描述,请见第2.3.6节“端口控制寄存器(PCR)”中对FM位的描述。IPR可用微代码指令movci,movtc和movfc存取。有关细节请参阅第2.4.5.10节“IDR指针寄存器”。
(2.3.11)IDR计数寄存器(ICR)
IDR计数寄存器(ICR)136是用来确定在Run方式(R/S=1)流式写操作期间由IDR接受的字节数量的寄存器。ICR可具有从0到63这个范围的值,为0的值有示1个字节将被写入IDR,63表示64个字节将被写入IDR。如果需要把0个字节装入IDR,端口控制寄存器(PCR)的端口抽头可被断开。ICR用于输入变址(PCR∶FM=0)期间和输入标记(PCR∶FM=1)期间的两种情况。在复位后该寄存器的值为63,表示当Run方式流式写开始时,64个字节将被接受到IDR中。
ICR寄存器从ICR寄存器的一种内部版本作为影子。这个影子寄存器允许在该ICR影子寄存器的值被修改以把数据放进ICR时,在ICR中规定的初始值保持不改变。每次把数据装入IDR时,ICR影子寄存器的内容被减小。该影子寄存器减小的数量取决于ILMR寄存器的内容。
在下述条件下从ICR向ICR影子寄存器加载:
1.当它被加载时;
2.当执行done指令时;
3.当使用IDRC寻址方式时;和
4.当 RESET信号被触发时(1→0→1)
硬件限制:当进行超过IDR的界限的写尝试时,或者当对ICR影子寄存器的正常减小使其小于$00时,将设一个内部标志,它表明“IDR满”。所有后继的对IDR的Run方式写(由于writel、vwritel或外部写)都将被忽视。每当一条done指令被执行、IDRC寻址方式被使用、或者 RESET信号被认定时,该标志被清除。
ICR类似用于Stop方式流式操作的DCR1寄存器。该影子寄存器减小的数量由ILMR寄存器的内容控制。同样可见第3.5.2.2节关于ILMR怎样影响IDR变址的内容。
关于在Run方式输入变址期间IDR、IPR、ICR和ILMR如何一起工作的描述,请参见第2.3.6“端口控制寄存器(PCR)”中对FM位的描述。ICR可被微代码指令movci、movtc和movfc访问。更多细节请参阅第2.4.5.11“IDR计数寄存器(ICR)”。图2-24中较详细地说明了ICR。
(2.3.12)IDR单元屏蔽寄存器(ILMR)
IDR单元屏蔽寄存器(ILMR)134确定在Run方式(R/S=1)期间数据是怎样装入IDR的。在随机存取方式下,IDR指针寄存器不被使用(IDR里的每个单元必须被明确地定址)。在流式写操作期间,屏蔽位确定哪些内部生成的IDR地址位是“不必关心的”。ILMR还象一个指示器那样工作,指明当接收流式写数据时IDR指针寄存器(IPR)需要增加多少。
控制ILMR操作的两条规则如下述:
·ILMR的位在内部生成的地址上起“不必关心”的作用。这意味着数据被装入到那些在地址“不必关心”时所选定的IDR单元之中。一个为00110000的ILMR值不必关心IDR地址的位4和位5,它意味着同样的数据被送到IDR单元00000000、00010000、00100000和00110000。
·IPR是按在ILMR中最低有效位“0”的单元来增量的。即,如果最低有效0是在位单元0,那么每一次数据被放进IDR时,IPR将以按20,或1,来递增。如果最低有效“0”是在位单元3,则每次IPR将按8递增。
请见第3.5.2.2节“采用ILMR的例子”中有关采用ILMR的例子。还请阅第2.3.6节“端口控制寄存器(PCR)”关于在Run方式期间加载IDR的更详细描述。
ILMR可由微代码指令movci,movtc和movfc访问。有关细节请参阅第2.4.5.12节“IDR单元屏蔽寄存器(ILMR)。图2-25较详细地说明ILMR。
(2.3.13)IDR初始偏移寄存器(IOR)
初始偏移寄存器(IOR)130是一个只在Run方式(R/S=1)工作的寄存器,它包含对联合机在把数据放进IDR之前必须等待的有效数据数(即时钟周期数)的计数。例如,如果IOR包含$0F,该装置应让15个数据通过,第16个数据应放入IDR中由IPRILMR规定的单元。一旦这个计数被满足,直到下一个Run方式流式写操作之前,这个寄存器的内容一直是被忽视的。
IOR可由微代码指令movci,movtc和movfc访问。更多细节请见第2.4.5.13节“IDR初始偏移寄存器(IOR)”。图2-26中IOR得到更详细说明。
(2.3.14)主机流选择寄存器(HSSR)
主机流选择寄存器(HSSR)100允许主机去定义在Stop方式(R/S=0)期间流式操作在何处和如何影响联合机。表2.13提供有关HSSR的更多信息。
HSSR的前4位(LS〔3∶0〕用来选择在流传送期间数据传送将来源于或写入哪个联合机的逻辑空间。因为流式存取期间无显式地址向联合机传送,所以存取地址是由HSSR寄存器、偏移地址寄存器(OAR1和OAR2)和深度控制寄存器(DCR1和DCR2)所指定的。表2.14表示由LS位定义的单元。图2-27对HSSR进行了更详细的说明,其中,位0-LS0:逻辑地址选择位#0;位1-LS1:逻辑地址选择位#1;位2-LS2:逻辑地址选择位#2;位3-LS3:逻辑地址选择位#3;位4-HSPO:主机流端口位#0;位5-HSP1:主机流端口位#1。
主机流选择端口位(HSP〔1∶0〕)控制在主机方式流操作期间数据如何传送进和传送出这个装置。这些位的操作很象端口控制寄存器(PCR)中的开关位和抽头位,但是只用于主机方式存取。这些位允许主机主式传送而不干扰联合机阵列的运行期间配置(如由开关位和抽头位定义的)。
当HSP〔1∶0〕=00,该装置表现得仿佛没有信息呈现。HSP位和XCI/XCO控制线相结合一起工作,只有当这些控制线处于数据传送的正常状态时数据才会呈现。HSP位不控制呈现在北端口的流读数据是否会出现在南端口,也不控制呈现在西端口的流式读数据是否会出现在南端口,也不控制呈现在西端口的流式读数据是否会出现在东端口。这只是控制该装置发源的数据应向哪里发送的一种方法。
(缺省值)当HSP〔1∶0〕=01时,主机流数据通过南端口传送。对于主机读操作,该装置将来自所有被访问的单元的数据提供给南端口。对于主机写存取,该装置从南端口接收所有的数据。
当HSP〔1∶0〕=10时,主机流数据通过东端口传送。对于主机读操作,该器件将来自所有被访问的单元的数据提供给东端口。对于主机写存取,该器件从东端口接收所有的数据。
HSP〔1∶0〕=11则被保留以供将来使用。这个编码使联合机能与在HSP〔1∶0〕=00时相同地运行,但是Motorola(摩托罗拉)公司保留在任何时候改变该编码的权力(即,请使用HSP〔1∶0〕=00,而不要依赖HSP〔1∶0〕=11)。表2.15提供了关于HSP位的更多信息。
(2.3.15)主机流偏移寄存器(HSOR)
主机流偏移寄存器(HSOR)222用来控制在Stop方式(R/ S=0)期间对联合机的流写入存取。图2-28中较详细地说明了HSOR。该16位寄存器里所含的值表明从第一块数据抵达该装置的时刻(在XCI被认定后的一个周期)到该装置开始接收数据的时刻之间的延迟。HSOR和DCRx寄存器一起工作,来控制数据偏移以及被写入联合机的流的持续时间。
例如,设有4个联合机(具有如图2-29所示的HSOR和DCR1的值)和一个含有20个数据的流,将数据如图2-29所示那样地装入到联合机组之中。
作为第二个例子,有可能重新排列联合机组接收数据的次序,这样仿佛重新安排了芯片的次序。并且如图2-30所示,甚至还可能使一个链中多于一个的联合机接收相同的数据。
(2.3.16)北-南保持寄存器(NSHR)
北-南保持寄存器(NSHR)90含有关于北和南端口之间最新广播传送的状态和数据。表2.16提供有关NSHR的更多信息。图2-31中更详细地说明了NSHR,其中位0-V为有效位;1-DIR为方向位;位2-SRC为源指示。在Run方式(R/ S=1)期间,每一次数据写入北端口或南端口,NSHR的内容都要被更新。当联合机置为Stop方式(R/ S=0)时,该寄存器含有北和南端口之间的最新的Run方式流写的状态。当端口控制寄存器(PCR)中的北-南开关(NSS)闭合(PCR∶NSS=1)并且在Run方式期间数据被写入北或南端口中的一个时,该寄存器的内容被改变。该寄存器的内容与PCR的北抽头(NT)和南抽头(ST)的设置无关。
如果NSS=0并且数据写入南或北端口,则NSHR将不被改变。NSHR的内容也与PCR中的NT或ST的设置无关。
NSHR的V位表明是否NSHR的数据字节含有有效信息。
DIR位表明数据的方向。如果数据是一个微代码writen、writes、vwriten或vwrites的结果,该位表明数据是从那个端口写入的。如果数据是通过该装置被写入的外部数据的结果,该位就指明数据是从哪个端口写入的。
SRC位表明NSHR中含有的数据是否是微代码writen,writes,vwriten或vwrites的结果。如果该位不被设置,该数据是通过该器件的对某一端口外部写的结果。
(2.3.17)东-西保持寄存器(EWHR)
东-西保持寄存器(EWHR)92含有关于东和西端口之间最新广播传送的状态和数据。表2.17提供有关EWHR的更多信息。图2-32中更详细地说明了EWHR,其中位0-V为有效位;位1-IDR为方向位;位2-SRC为源指示。在Run方式(R/S=1)期间,每一次数据写入东端口或西端口时,EWHR的内容都被更新。当联合机被置入Stop方式(R/S=0)时,该寄存器含有东和西端口之间的最新的Run方式流写的状态。当端口控制寄存器(PCR)中的东-西开关( EWS)被闭合(PCR∶ EWS=1)、并且在Run方式期间数据被写入东和西端12中的一个时,该寄存器的内容被改变。该寄存器的内容与PCR的东抽头(ET)和西抽头(WT)的设置无关。
如果 EWS=0并且数据被写入东和西端口,EWHR将不被改变。EWHR的内容也与PCR的ET或WT的设置无关。
EWHR的V位表明是否EWHR的数据字节含有有效信息。
DIR位表明数据的方向。如果数据是一个微代码writee,writew、vwritee或vwritew的结果,该位表明数据是从哪个端口写入的。如果数据是通过该装置写入的外部数据的结果,该位将表明数据是从那个端口写入的。
SRC位表明EWHR里含有的数据是否是微代码writee,writew,vwrittee或vwritew(和内部写)的结果或者该数据是否是通过该器件的对某一端口的外部写的结果。
(2.3.18)移位地址寄存器#1(OAR1)
偏移地址寄存器#1(OAR1)96用来在Stop方式(R/S=0)流存取期间指明与由HSSR的LS〔3∶0〕所规定的逻辑空间有关的起始内部地址。图2-33中较详细地描述OAR1。
OAR1由OAR1的一个内部版本作为影子。这个影子寄存器允许在OAR1中的规定的初始值保持不改变,而与此同时OAR1影子寄存器的值被修改以将数据置入联合机内。每次把数据装入联合机时OAR1影子寄存器的内容就被增加。
在下述条件下OAR1影子寄存器从OAR1被加载:
1.当它被加载时;
2.当联合机选择为流存取时;
3.当 RESET信号被触发时(1→0→1)。
一维阵列包括输入数据寄存器(IDR)、输入标记寄存器(ITR)、指令高速缓冲存储器(IC)、矢量数据寄存器(V〔0〕到V〔7〕)、和矢量进程控制寄存器(VPCR)。
当执行进入二维阵列的流式存取时OAR1也被使用。在这种情况下,它被用来对阵列的第一维(列变址)进行变址。唯一的二维阵列是系数存储器阵列(CMA)。
(2.3.19)深度控制寄存器#1(DCR1)
深度控制寄存器#1(DCR1)97的内容用在对所有一维和二维阵列的Stop方式流式存取期间。内部地址生成逻辑利用DCR1的内容确定流传送中所传送的字节数量(在由HSSR的LS〔3∶0〕所定义的逻辑空间中的一个之中)。图2-34较详细说明了DCR1。
DCR1由DCR1的一个内部版本作为影子。这个影子寄存器允许在DCR1内的规定的初始值保持不改变,而与此同时,DCR1影子寄存器中的值正在改变以将数据放入联合机之中。每次把数据装入联合机时DCR1影子寄存器的内容就被减小。
在下述条件下从DCR1向DCR1影子寄存器加载:
1.当它加载时;
2.当联合机选择为流存取时;
3.当 RESET信号被触发时(1→0→1)。
对于一维阵列,在控制被传送给联合机链中下一个联合机之前该寄存器控制在流操作期间写入或读出的单元数量。DCR1的偏移为1,因此DCR1=0将准确地流动1个字节,而DCR1=63将流动64个字节。为使一个联合机不参与流式传输操作,设置HSSR∶HSP〔1∶0〕=00。
当流式传输整个随机存取映象时,将跳过映象中的孔,在孔处没有有用的寄存器。这样DCR1+OCR1将不总是等于在整个映象情况下的结束地址。跳过的地址列举在表2-18中。
该寄存器的复位值为$14FF,这意味着如果在流式操作出现前DCR1不被改变,那么联合机将接收或供给其大小等于随机存取映象减去不使用单元的字节流。
一维阵列包括输入数据寄存器(IDR)、输入标记寄存器(ITR)、指令高速缓冲存储器(IC)、矢量数据寄存器(V〔0〕到V〔7〕)、和矢量进程控制寄存器(VPCR)。
当执行进入二维阵列的流式存取时也使用DCR1。在这种情况下,它被用来控制置入到各行的项的数量。唯一的二维阵列是系数数存储器阵列(CMA)。
对Stop方式(R/ S=0)流式操作,当:1)由DCR1和DCR2规定的数据量被传送完时;或2)内部地址发生器企图流越HSSR∶LS〔3∶0〕所定义的空间时, XCO信号被认定。
(2.3.20)偏移地址寄存器#2(OAR2)
仅用于二维阵列寻址,偏移地址寄存器#2(OAR2)98,和OAR1寄存器一起,控制在主机方式(R/ S=0)流存取期间写入式读出的第一行的位置。该寄存器的复位值是$0,这意味着,如果在流操作出现之前该寄存器不被改变,对CMA的流存取将从第一行(#0行)开始。该寄存器的最大值为63($3F),归因于这个事实即CMA是最大(并且是唯一)的二维阵列,因而在y方向只有64个位置。任何写进该寄存器的大于$3F的值将产生一个模64的值。
OAR2由OAR2的一个内部版本作为影子。这个影子寄存器允许在OAR2中的规定的初始值保持不改变,而与此同时该OAR2影子寄存器的值正在修改以将数据放入联合机之中。每次把数据装入联合机时OAR2影子寄存器的内容就被增加。图2-35中较详细地说明了OAR2。
在下述条件下OAR2影子寄存器被从OAR2加载:
1.当被加载时;
2.当联合机选择为流存取时;
3.当 RESET信号被触发时(1→0→1)。
请记住OARx和DCRx只是Stop方式寄存器,它们不用于Run方式操作中。
(2.3.21)深度控制寄存器#2(DCR2)
仅用于二维阵列,深度控制寄存器#2(DCR2)99,和DCR一起,在把控制传给链中的下一个联合机之前,控制流式操作期间能被写入和读出的二维阵列中位置的数量。该寄存器的复位值的$3F,或63,这意味着如果在对CMA的流传送发生前该寄存器不被改变,CMA所有的64行(在单个列里)都将被访问。通过认定 XCO信号将控制传给联合机链中的下一个联合机。注意DCR2的偏移为1,这样DCR2=0将访问CMA的一行。图2-36中较详细地说明了DCR2。
对Stop方式(R/ S=0)流式操作,当:1)由DCR1和DCR2规定的数据量被传送完时;或2)内部地址发生器企图流越HSSR∶LS〔3∶0〕所定义的空间时, XCO信号被认定。
在Stop方式(R/ S=0)中,在流式传送的起点(当联合机的ROW和 COL被选中时),OAR1、DCR1、OAR2和DCR2被传送给影子寄存器。这些影子寄存器中所含有的值被使用直到联合机不再被选中为止。换言之,如果在流操作中OAR或DCR寄存器被修改,在当前的传送尚未终止的新的流操作尚未启动之前这个改变不会被反映来。
DCR2由DCR2的一个内部版本作为影子。这个影子寄存器允许在DCR2中的规定初始值保持不改变,而与此同时DCR2影子寄存器的值正在改变以把数据装入联合机之中。每次数据装入联合机时DCR2影子寄存器的内容都被减小。
在下述条件下DCR2影子寄存器从DCR2被加载:
1.当它被加载时;
2.当联合机被选择为流存取时;
3.当 RESET信号被触发时(1→0→1)。
请记住OARx和DCRx只是Stop方式寄存器,它们不用于Run方式操作期间。
关于OAR1、DCR1、OAR2和DCR2如何用于流式存取方式的描述,请见第3.5.1.2节“主机流式存取方式”。
(2.3.22)中断状态寄存器#1(ISR1)
中断状态寄存器#1(ISR1)342可被主机用来确定由联合机产生的与流相关的中断的起因。ISR1的位和中断屏蔽寄存器#1(IMR1)中的位具有一一对应的关系。ISR1的位的设置与对应的(IMR1)位无关。这允许主机对条件进行轮询,而不是使这些条件生成外部中断。当ISR1被主机读过后,所有的位被清零。以这种方式,ISR1含有从最近的一次读后算起的任何状态变化。在图2-37中较详细说明了ISR1,其中,位0-SVI为标量溢出中断;位1-VVI为矢量溢出中断;位2-SDI为标量被零除中断;位3-VDI为矢量被零除中断;位4-PCI为越界中断;位5-IOI为非法操作码中断,位6-PEI为端口错误中断;位7-ICI为基于指令的IDR争用中断。表2-19给出有关ISR1的更多信息。
如果SVI位被设置,则标量机中微代码算术运算已引起溢出。
如果VVI位被置位,则矢量机中微代码算述运算已引起溢出。
如果SDI位被置位,则标量机中的微代码除法运算已引起被零除。
如果VDI位被置位,则矢量机中微代码除法运算已引起被零除。
如果PCI位被置位,说明程序计数器(PC)已超出它的界限而微定序器开始在数据空间里执行。这中机制类似于微处理机存储管理部件的页面异常。
如果IOI位被置位,说明在指令流中检测到一个非法操作码。
如果PEI位被置位,说明一个在端口操作期间错误被查出。为确定端口错误的原因,联合机端口监视寄存器(APMR)应被读出。
如果ICI位被置位,则出现了基于指令的IDR争用。这种条件出现于在执行vstore、vwritel或writel指令的同时外部流写试图加载IDR的时候。
该寄存器所包含的位的值和联合机中断屏蔽寄存器#1(IMR1)所含有的位的值一起将最终确定何时和是否要生成一个外部中断。
(2.3.23)中断屏蔽寄存器#1(IMR1)
中断屏蔽寄存器#1(IMR1)344和中断状态寄存器#1(ISR1)一起工作以开启或禁止外部中断。如果一个内部条件使将ISR1中一个位被置位,而且IMR1中对应的位(或多个位)是被设定的,则一个外部中断将生成。图2-38中较详细地说明IMR1,其中,位0-SVIM为标量溢出中断屏蔽;位1-VVIM为矢量溢出中断屏蔽;位2-SDIM为标量被零除中断屏蔽;位3-VDIM为矢量被零除中断屏蔽;位4-PCIM为PC越界中断屏蔽;位5-IOIM为非法操作码中断屏蔽;位6-PEIM为端口错误中断屏蔽;位7-ICIM为基于指令的IDR争用中断屏蔽。表2.20给出有关IMR1的更多信息。
如果SVIM被置位,标量溢出将不产生外部中断。
如果VVIM被置位,矢量机溢出将不产生外部中断。
如果SDIM被置位,标量机被零除将不产生外部中断。
如果VDIM被置位,矢量机被零除将不产生外部中断。
如果PCIM位被置位,PC越界将不产生外部中断。相反,如果PCM位被置位,PC越界将产生一个外部中断。
如果IOIM位被置位,对非法操作码的执行将不产生外部中断。
如果PEIM位被置位,一个端口错误将不产生外部中断。如果PEIM位不被置位,任何与端口有关的错误都将产生外部中断。PEIM位的缺省设置为0。对可能引起外部中断的端口条件的列表请见表3.6。
如果ICIM位被置位,基于指令的IDR争用将不生成外部中断。如果ICIM被清零,基于指令的IDR争用将产生一个外部中断,这种条件出现于当在执行vstore、vwritel或writel指令的同时外部流写试图加载IDR的时候。
(2.3.24)中断状态寄存器#2(ISR2)
中断状态寄存器#2(ISR2)346可被主机用来确定是否标量或矢量机的算术运算引起中断条件。该寄存器和中断屏蔽寄存器#2(IMR2)一起将最终确定是否要产生一个外部中断。图2-39中较详细地说明ISR2,其中位0-HLTI:停止指令中断;位1-SIO:软件中断,#1位;位2-SI1:软件中断;#2位;位3-SI2:软件中断,#2位。表2.21和2.22提供有关ISR2的更多信息。
尽管该寄存器的各个位和联合机的特定并常条件相对应,但应记住中断条件是和异常条件相正交的。
如果HLTI位被置位,表明一条halt指令已被执行。
当一条intr#n指令被执行时,SI〔2∶0〕位被置位。一条intr#6软件中断将设置SI〔2∶0〕=110。
(2.3.25)中断屏蔽寄存器#2(IMR2)
联合机中断屏蔽寄存器#2(IMR2)348允许主机屏蔽矢量和标量算术中断。如果IMR2中的一个位被置位,对应的中断条件将不造成外部中断的产生。类似地,当IMR2的各个位清零,对应条件将产生一外部中断。图2-40中较详细说明IMR2,其中位0-HLTM表示停止指令中断屏蔽;位1-SIM0表示软件中断屏蔽,#0位;位2-SIM1表示软件中断屏蔽,#1位;位3-SIM2表示软件中断屏蔽,#2位。表2.23和2.24提供有关IMR2的更多信息。
如果HLTM位被置位,对halt指令的执行将不产生外部中断。相反,如果HLM位不被置位,对halt指令的执行将产生一个外部中断。
SIM〔2∶0〕位允许一批软件中断被屏蔽掉,最高优先级软件中断是软件中断#7,它是由intr#7指令所生成的。最低优先级软件中断是软件中断#1,它是由intr#1指令所产生的。
(2.3.26)微定序器控制寄存器(MCR)
微定序器控制寄存器(MCR)188控制指令如何和何时由微代码定序器发出。图2-41较详细说明MCR,其中位0-SS表示单步;位1-RSA表示复位SIMD阵列;位2-STKF表示找标记;位3-FLSF表示一级找标记;位4-RELF表示Repeate循环标记;位5-RPLF表示Repeat循环标记;位6-IL表示指令锁定。表2.25和2.26提供有关MCR的更多信息。
SS位允许由微定序器执行单条指令。在各条指令的启动点SS位的状态被查询。如果在一条指令的执行期间SS的状态改变,在下一条指令启动之前它的作用不再发生。在每条指令执行之后,PC递增,并且 BUSY信号设置为有效。在R/S信号从1→0→1被触发之前下一条指令将不被执行。
RSA位可被主机用来把联合机复位到一个已知的状态。该位的设置不会清除系数存储器(CMA),也不会影指令高速缓冲存储器(IC)。可将这个位的设置与再起动指令的操作进行比较(这是不同的)。
STKF位指示CMA中栈的状态。如果栈是空的,则该位具有的值为1。如果CMA栈至少含有一个有效返回地址,STKF具有为零的值。
FLSF位表示FLS寄存器是否当前地含有一个有效的返回地址。如果有,FLSF位将为1,否则的话将为零。
RELF位表示是否一个repeate循环已被启动和被认为是有效的。如果是,RELF位将为1,否则的话它将为零。
RPLF位表示是否一个repeat循环已被启动。如果是,RPLF位为1,否则的话它将为零。
ILF位控制微定序器中指令的执行。当该位被置位时,该微定序器实际上被禁止,而且对R/ S信号的触发将不会使PC先行。如果在单步模式期间done或halt指令被执行,ILF位可被联合机置位。这允许带有不同代码长度的多个联合机达到同步,即使是在单步前进时也一样。在该位被置位时,联合机仍能够接收进入IDR的数据也能够通过端口传送数据。为了允许其它指令可被执行,ILF必须被清零。
从图2-42所示的例子可更清楚FLS和栈随着FLSF位和STKF位的操作情况。
当代码块#1正在被执行时,FLS被认为是空的(因为FLSF位为0)而栈不包含返回地址。
当bsr C2被执行时,$0042(紧随bsr C2指令的地址)被放入FLS,PC被设置到标号为C2的地址。
当bsr C3被执行时,$0082被放入栈上。STKF位取用栈上返回地址的最低有效位单元,这样在栈上的实际值为$0083。PC被置到标号为C3的地址。
当bsr C4被执行时,$00A2被放入栈。STKF位取用栈上返回地址的最低有效位单元,其中栈上的实际值为$00A2。PC被置到标号为C4的地址。
当代码块#4里的return被执行时,SP第一次增量,返回地址从栈中拉出。从栈中拉出值的最低有效位是STKF的新值。回想STKF=0意味着CMA仍然含有另一个返回地址,所以下一个return指令可从栈得到返回地址。
当代码块#3的return被执行时,SP再次增量,从栈内拉出返回地址。从栈拉出的值的最低位为1,它是STKF的新值。当STKF=1时,下一条return指令将从FLS得到返回地址。
当代码块#2的return被执行时,返回地址被从FLS(因为FLSF∶STKF=1∶0)拉出。然后FLSF被清零,这意昧着FLS的内容是无效的。
如果当FLSF为0时一个return被执行,FLS内含有的值被装入PC,即使该FLS值是无效的。
(2.3.27)微定序器状态寄存器(MSR)
微定序器状态寄存器(MSR)350反映联合机微定序器的当前运行状态。图2-43较详细地说明MSR,图中,位0-未使用,位1-R-微定序器运行;位2-EXE0-内部执行状态#0位;位3-EXE1-内部执行状态#1位;位4-EXE2-内部执行状态#2位。表2.27和2.28提供MSR的更多信息。
R位表示当联合机处于Stop方式(R/ S=0)中时微定序器是否停止在一条指令正在执行期间。如果一条指令正在执行之中,R位将被置为1。否则的话它将被清零。
EXE〔2∶0〕位反映联合机的PSTAT信号引脚的当前状态。这允许主机确定当联合机从Run方式(R/ S=1)转变为Stop方式(R/ S=0)时正在进行那类操作。
(2.3.28)标量进程控制寄存器(SPCR)
标量进程控制寄存器(SPCR)208控制多字节算术和逻辑运算流程,还可用于指示最近的算术运算的状态。图2-44中较详细地说明SPCR,其中位0-SX0为标量执行#0位;位1-SX1为标量执行#1位;位2-V为标量溢出位;位3-SD为标量溢出方向位。表2.29给出有关SPCR的更多信息。
标量扩充位(SX〔1∶0〕用来扩充某些算术指令的精度。关于这些位如何设置和它们如何被使用的描述,请见第2.5.19节“对多字节运算的描述”。
标量溢出位(SV)和标量溢出方向位(SD)用来指示在先前的算术运算中溢出的出现,以及若溢出出现,指出溢出发生的方向。
(2.3.29)指令寄存器(IR)
指令寄存器(IR)352是一个16位寄存器,用来保持当前正在执行的指令。当 RESET施加到联合机时该寄存器不被改变。图2-45较详细地说明IR。
(2.3.30)指令高速缓冲存储器线路有效寄存器(ICVR)
指令高速缓冲存储器线路有效寄存器(ICVR)354指示指令高速缓冲存储器(IC)的状态和指令高速缓冲存储器标记(ICT0至ICT3)的状态。图2-46较详细地说明ICVR。表2.30提供有关ICVR的更多信息。
如果ICV0被置位,高速缓冲存储器线路#0含有有效的指令。如果该位被清零,高速缓冲存储器#0的内容是不定的。
如果ICV1被置位,高速缓冲存储器线路#1含有有效的指令。如果该位被清零,高速缓冲存储器#1的内容是不定的。
如果ICV2被置位,高速缓冲存储器线路#2含有有效的指令。如果该位被清零,高速缓冲存储器#2的内容是不定的。
如果ICV3被置位,高速缓冲存储器线路#3含有有效的指令。如果该位被清零,高速缓冲存储器#3的内容是不定的。
(2.3.31)程序计数器(PC)
程序计数器(PC)186是一个16位寄存器,它指示当前正在执行的指令在微代码存储器阵列(MMA)中的单元。脱离复位时,在异常指针程序计数器(EPPC)里包含的16位地址被装入PC。图2-47较详细地说明PC。
关于PC如何和指令高速缓冲存储器标记(ICT0-ICT3)一起使用的描述,请见第3.3.4节。关于更详细的有关MMA如何通过CMA规定的描述请见第3.3.2节“CMA和MMA映象”。关于异常指针表的更多信息,请见第2.3.44节“异常指针表”。
(2.3.32)程序计数器界限寄存器(PBR)
PC界限寄存器(PBR)356是一个16位寄存器,其中最低有效位是不被使用的,它包含第一个非指令地址相关的地址。每条指令预取期间,PC对照PBR进行校核。如果PC大于PBR,则存在PC越界条件。如果EMR的PCEM位被置为1(缺省值),则ESR记录该条件,但是不产生异常。如果PCEM=1,该条件记录在ESR中,并且EPOB被装入PC,产生PC越界异常。如果PC小于PBR,PC所指向的指令被装入微定序器以供执行。图2-48较详细地说明PBR。
在调试算法期间PBR是有用的,可把PC限制于特定的最大值。不加 RESET,该寄存器以$FFFE的值被初始化,该值表明对PC所有可能值都是有效的(从而实际上禁止PC界限检查)。
(2.3.33)指令高速缓冲存储器标记#0(ICT0)
指令高速缓冲存储器标记#0(ICT0)358用来确定CMA的那一列当前被装入指令高速缓冲存储器(IC)的线路#0。图2-49较详细地说明ICT0。
为了确定高速缓冲存储器的命中或缺失,在执行各条指令之前将ICI0和PC的最高有效字节进行比较。如果PC的最高有效字节不和任何标记寄存器相匹配,那么含有下一条指令(由PC指向)的一条新线路必须装入指令高速缓冲存储器。
如果PC的位7和位6等于00,那么在存在一个缺失时指令的新线路将被装入指令高速缓冲存储器线路#0。ICT0将被装入PC的最高有效字节,而且指令高速缓冲存储器有效寄存器(ICVR)里的高速缓冲存储器线路#0(ICV0)有效位(ICV0)将被设置。
(2.3.34)指令高速缓冲存储器标记#1(ICT1)
指令高速缓冲存储器标记#1(ICT1)360用来确定CMA的那一列目前被装入指令高速缓冲存储器(IC)的线路#1。图2-50里较详细地说明ICT1。
为了确定高速缓冲存储器的命中或缺失,在执行各条指令之前将ICT1和PC的最高有效位字节进行比较。如果PC的最高有效字节不和任何标记寄存器相匹配,那么含有下一条指令(由PC指向的)的一条新线中必须被装入指令高速缓冲存储器。
如果PC的位7和位6等于01,那么当存在一个缺失时指令的新线路将被装入指令高速缓冲存储器线路#1之中。ICT1将用PC的最高有效字节加载,而且指令高速缓冲存储器有效寄存器(ICVR)中用于高速缓冲存储器线路#1的有效位(ICV1)将被设置。
(2.3.35)指令高速缓冲存储器标记#2(ICT2)
指令高速缓冲存储器标记#2(ICT2)362用来从CMA中确定那一列当前被装入指令高速缓冲存储器(IC)的线路#2。图2-51里较详细地说明ICT2。
为了确定高速缓冲存储器的命中或缺失,在执行各条指令之前将ICT2和PC的最高有效位字节进行比较。如果PC的最高有效字节不和任何标记寄存器相匹配,那么含有下一条指令(由PC指向)的一条新线路必须被装入指令高速缓冲存储器之中。
如果PC的位7和位6等于10,那么在存在一个缺失时,指令的新线路将被装入指令高速缓冲存储器线路#2。将把PC的最高有效字节装入到ICT2,而且指令高速缓冲存储器有效寄存器(ICVR)中用于高K倩撼宕娲!飨呗7#2的有效位(ICV2)将被设置。
(2.3.36)指令高速缓冲存储器标记#3(ICT3)
指令高速缓冲存储器标记#3(ICT3)364用来从CMA中确定那一列当前被装入指令高速缓冲存储器(IC)的线路#3。图2-52里较详细地说明ICT3。
为了确定高速缓冲存储器的命中或缺失,在执行各条指令之前将ICT3和PC的最高有效字节进行比较。如果PC的最高有效字节不和任何标记寄存器相匹配,那么含有下一条指令(由PC指向)的一条新线路必须被装入指令高速缓冲存储器之中。
如果PC的位7和位6等于11,那么在存在一个缺失时,指令的新线路将被装入指令高速缓冲存储器线路#3。将把PC的最高有效位字节装入到ICT3,而且指令高速缓冲存储器有效寄存器(ICVR)中用于高速缓冲存储器线路#3的有效位(ICV3)将被设置。
(2.3.37)栈指针(SP)
栈指针(SP)366是一个16位寄存器,它指定系数存储器阵列(CMA)中保存子例程返回地址的单元,和指规定使用load/store指令存放子例程局部数据的单元。图2-53中较详细地说明SP。
在 RESET时,栈指针以异常指针栈指针(EPSP)的内容被加载,EPSP是位于异常指针表中的寄存器中的一个。关于异常指针表的更多信息请见第2.3.44节“异常指针表”。
(2.3.38)一级栈(FLS)
一级栈(FLS)368允许迅速执行单级子例程调用。当一条子例程转移指令(jsr)被执行时,FLS中含有的值通常将被放置在栈顶。为了消除栈操作所需的时间(在调用期间和返回时),返回地址被放在一级栈寄存器中。图2-54较详细地说明FLS。
如果做出两条不带有插入return指令的bsr指令,第二个jsr被强迫把它的返回地址存入栈上(通过SP引用)。
(2.3.39)重复开始寄存器(RBR)
重复开始寄存器(RBR)180被repeat和repeate指令用来允许快速执行程序的内部循环。图2-55中较详细地说明RBR。当repeat或repeate指令被执行时,PC的值+2被装入RBR。循环结束处(当重复结束寄存器(RER)的值笔当前正在执行的指令地址相匹配时),把RBR的内容装入程序计数器(PC)。
请参阅第2.5.16节“标量机程序流程控制操作”中的repeat和repeate指令。
(2.3.40)重复结束寄存器(RER)
重复结束寄存器(RER)182被repeat和repeate指令使用以允许迅速执行程序的内部循环。图2-56中较详细地说明RER。当repeat或repeate指令被执行时,指令中那个指示循环中最后一条指令的地址被装入RER寄存器,然后将该寄存器中的值和当前正在执地中的指令的地址进行比较。如果比较产生匹配,重复计数寄存器(RCR)的内容递减,若RCR等于零,退出重复循环,若RCR不等于零,RBR的内容被装入程序计数器(PC)并且循环履行另一次重复。
请参阅第2.5.16节“标量机程序流程控制操作”中的repeat和repeate指令。
(2.3.41)重复计数寄存器(RCR)
重复计数寄存器(RCR)184被repeat和repeate指令使用以允许迅速执行程序的内部循环。图2-57中较详细地说明RCR。当repeat(e)指令被执行时,将计数值从该指令(G〔0〕-G〔7〕)内规定的G寄存器中装入到RCR寄存器之中。RCR控制repeat(e)循环要被执行多少次。每次重复指针寄存器(RBR)和当前执行指令的地址相匹配时,RCR的内容减1。当RCR等于零时,退出该循环。
请参阅第2.5.16节“标量机程序流程控制操作”中的repeat和repeate指令。
(2.3.42)全局数据寄存器(G〔0〕-G〔7〕)
位于标量机内的全局数据寄存器(G〔0〕-G〔7〕)302是一组通用数据寄存器。这些寄存器的用途是可互换的,这意味着这些寄存器除被联合机有于通用数据外不被用作任何其它用途。
全局数据寄存器实际上被3个空单元所填充,如图2-58所示。这种填充允许将来的发展而无须改变存储器映象。对这些单元的写被认为是合法操作,两当它们被读时,这些单元给出$00。
(2.3.43)全局指针寄存器(P〔0〕-P〔7〕)
位于标量处理机中的全局指针寄存器(P〔0〕-P〔7〕)300是多用途的。它们可用作为数据寄存器,在这种情况下它们完全和全局数据寄存器一样操作。它们还可被用作采用间接形式数据存取的指令中的间接间指针。
全局指针寄存器实际上被3个空单元所填充,如图2-59所示。这种填充允许将来的发展而无须改变存储器映象。对这些单元的写被认为是合法操作,而它们被读时,这些单元给出$00。
(2.3.44)异常指针表
图2-60所示的异常指针表370的寄存器允许主机确定异常事件中联合机的实际反应。
异常指针表被放入主机可访问寄存器映象中,从而小程序(它们足够小以至于适合全部装入指令高速缓冲存储器中)可把全部系数存储器阵列(CMA)分配用于数据存储。
EPPC-(复位初始程序计数器)-当联合机脱离复位时该16位寄存器中含有的值被装入程序计数器(PC)。
EPSP-(复位初始栈指针)-当联合机脱离复位时该16位寄存器中含有的值被装入栈指针(SP)。
EPSV-(标量溢出异常指针)-如果在标量机里出现一个算术溢出,而且如果异常屏蔽寄存器(EMR)中的标量溢出异常屏蔽位(SVEM)是清零的,那么EPSV的内容在下一个时钟脉冲上装入PC。
EPVV-(矢量溢出异常指针)-如果在矢量机里出现一个算术溢出,而且如果异常屏蔽寄存器(EMR)里的矢量溢出异常屏蔽位(VVEM)为零,那么EPVV的内容在下一个时钟脉冲上装入PC。
EPSZ-(标量被零除异常指针)-如果在标量机里出现被零除,并且如果异常屏蔽寄存器(EMR)中的标量被零除异常屏蔽位(SDEM)为零,则EPSZ的内容在下一个时钟脉冲上装入PC。
EPVZ-(矢量被零除异常指针)-如果在矢量机里出现被零除,并且如果异常屏蔽寄存器(EMR)中的矢量被零除异常屏蔽位(VDEM)是清零的,则EPVZ的内容在下一个时钟脉冲上装入PC。
EPOB-(PC越界异常指针)-如果程序计数器(PC)超出PC界限寄存器(PBR)中含有的值,而且如果异常屏蔽寄丰器(EMR)的PC越界异常屏蔽位(PCEM)是清零的,则EPOB所含的值将在下一个时钟脉冲装入PC。
EPIO-(非法操作码异常指针)-如果一个不能由当前版本的联合机实现的操作码被解码,而且如果异常屏蔽寄存器(EMR)的非法操作码异常屏蔽位(IOEM)是清零的,则EPIO的内容在下一个时钟脉冲上装入PC。
EPPE-(端口错误异常指针)-如果出现表3.6中列举的任何一种端口错误异常,而且如果异常屏蔽寄存器(EMR)的端错误异常屏蔽位(PEEM)是清零的,则EPPE所含的值将在下一个时钟脉冲装入PC。
关于开启和禁止异常的更多信息请参见第2.3.4节“异常屏蔽寄存器”。
所有其它异常按图2-61所示的流程图处理。当检测出一种异常时,微定序器把程序计数器(PC)的当前值推进栈。从异常指针表中读出和该异常对应的地址并装入PC。然后,由异常指针指向的异常例程被执行。异常例程通常用rte指令来结束,该指令将使微定序器检索入栈的PC值并回到异常条件之前的位置。
如果在第一个异常被完全处理完之前出现第二个异常,联合机将进入空闲状态,有效地执行nop指令直到联合机被复位。
(2.3.45)输入数据寄存器(IDR)
输入数据寄存器(IDR)18是一个64单元的阵列它保持Run方式的输入数据值。图2-62较详细地说明IDR。在Run方式期间IDR是唯一的外部可写单元。如果端口控制寄存器(PCR)中的抽头位被设置为某一特定端口,并且数据被写进该端口,则该数据将被装入IDR。IDR的各个单元实际为9位宽:8位用来保持实际数据,而第9位为一有效位。
IDR〔0〕的有效输入数据位(VID位)包含在PE〔0〕:VPCR中,IDR〔1〕的VID位包含在PE〔1〕:VPCR中。当每个数据被写进一个IDR单元时,对应的有效位被设置。有效位用来控制微代码指令的执行。如果IDR中的一个单元被一条微代码指令所存取(读),而对应的有效位没有被设置,那么SIMD控制块将进行拖延直到数据由通过一外部源被写进IDR单位为止。
在Stop方式(R/ S=0)期间,可使用随机或流式存取方式中的一种对IDR加载。在Run方式(R/ S=1)期间,数据采用流式存取传送,而IDR可使用输入变址或输入标记两种中的一种来加载。端口控制寄存器(PCR)中的FM位被用来确定采取那一种方法(变址或标记)。
关于如何加载IDR的详细说明,请参见第3.5.2节“联合机传送方式”和第3.5.1节“主机传送方式”。有关对VPCR多个位的描述请参见第2.3.47节“矢量进程控制寄存器(VPCR)。
(2.3.46)矢量数据寄存器(V〔0〕至V〔7〕)
矢量机中各个处理部件含有一组8个矢量数据寄存器(V〔0〕-V〔7〕)128。在图2-63中较详细地说明这些寄存器。在计算过程中这些寄存器可被用作暂时的或结果的存储器。这些寄存器的使用是可互换的,这意味关这些寄存器除了被联合机用于通用数据外不被用于其它任何用途。
(2.3.47)矢量进程控制寄存器(VPCR)
矢量机的每个处理部件包括一个矢量进程控制寄存器(VPCR)102,它控制多字节的算术和逻辑运算流程。VPCR还可被用来表示最新的算术运算的状态。图2-64对VPCR进行了详细说明,其中位0-VX0为矢量扩充#0位;位1-VX1为矢量扩充#1位;位2-VV为矢量溢出;位3-VD为矢量溢出方向;位4-VT为矢量条件真位;位5-VH为矢量条件史位;位6-VID为输入数据有效位。有关VPCR的更多信息由表2.31提供。
矢量扩充位(VX〔1∶0〕)用来扩充某些算术运算指令的精度。关于怎样设置这些位及怎样用微代码指令使用它们,请参见第2.5节“联合机微代码指令集概述”中的表2.64和第2.5.20节“进程计算控制”。
矢量溢出位(VV)与矢量溢出方向位(VD)用来表示前一算术运算中溢出的发生以及若有溢出发生时所取的溢出方向。对于那些为饱和提供保护的指令,VV则指明饱和是否出现,而VD则表示饱和在哪个方向出现。关于VV与VD位的设置与应用的更完整的说明,请参见第2.5节“联合机微代码指令集概述”中的表2.64。
矢量条件位(VT和VH)允许vif-velse-vif-vendif条件指令在所有处理部件中正常地(并独立地)操作。当处理部件的VT位未被置位(即VT=0)时,整个层(shelf)(处理部件和其64个CMA单元)被认为是不活动的。若一指令的目的地是矢量寄存器(V〔0〕-V〔7〕)中或CMA中的一个,则该目的地将不被更新。VH位允许条件结构中的velse-vif部分正常操作。这表明了在执行了最后的vendif指令以来,处理部件是否已经拥有if条件语句。
有效输入数据位(VID)表示输入数据寄存器(IDR)中的对应单元是否有效。例如,如果IDR〔13〕被写,那么在处理部件#13中的VID将被置位(PE〔13〕∶VID=1)。
关于饱和的说明,请参见第2.5.9节“饱和与非饱和运算比较”。要查阅设置VPCR的位的指令,请参见表2.64。
(2.3.48)输入标记寄存器(ITR)
在Run方式下(R/ S=1),当数据被写入输入数据寄存器时,输入标记寄存器(ITR)138为其提供一种控制机制。图2-65对ITR作了更详尽的说明。由端口控制寄存器(PCR)中的FM位来控制ITR的应用。当FM位被清零时,使用IDR初始偏移寄存器(IOR),当FM位被置“1”时,使用ITR。
在Run方式数据广播期间,当FM被清零时,输入数据寄存器(IDR)将从数据流中接收升序的、连续的字节,直到控制被传递到下一个联合机。当使用ITR时,IDR可从输入数据流中接收升序、非连续的字节。ITR中所含的值指定了应从该输入采样流中捕捉的采样数量。
使用ITR的注意事项如下:
1.只有在Run方式下(R/ S=1)传输数据时,ITR中的内容才被使用。
2.ITR的内容只影响对IDR的传输(即在Run方式期间,IDR为芯片到芯片传输的蕴含目的地)。
3.ITR中应包含升序的值,即标记#2中所含的值应大于标记#1中所含的值,标记#1中所含值应大于标记#0中所含的值。
标记值的最大数目是64(等于IDR的存储单元数)。
这组寄存器并未设计成能支持广义的芯片到芯片的传输,但被设计成能支持非全连网络以及应用接收域概念的网络。
要使用输入标记方式,IPR寄存器必须首先用$0加载,ICR寄存器用$40加载(即有多少个要被写入的标记),然后将标记值流式送入ITR。一旦标记被加载到ITR之中,PCR的FM位可被置位,且该装置将在整个Run方式广播期间便用ITR。
更详尽的说明请参见第3.5.2.1节“输入变址”和第3.5.2.3节“输入标记”。
(2.3.49)指令高速缓冲存储器(IC)
指令高速缓冲存储器(IC)20由4条高速缓存线路组成,其中每条线路分别有32个指令字,图2-65-1对IC作了更详尽的说明。每条指令高速缓存线路拥有其自己的标记和有效位。每条高速缓存线路作为一个矢量从MMA加载,从而在一个单独的时钟周期中都能加载32个指令字。(注意:当系统存储器阵列(CMA)的空间被用来保持指令时,该空间通常叫作微代码存储器阵列,即MMA)。
有关MMA与指令高速缓冲存储器的更多的信息,请参见3.3.1节“指令高速缓存”。
(2.3.50)系数存储器阵列(CMA)
系数存储器阵列(CMA)14是可以包含网络系数、微代码指令和临时数值的64×64阵列。图2-66对CMA作了更详尽的说明。根据主机如何对CMA进行存取,CMA可被视为两维阵列或者为一个线性阵列。以下说明仅适合于联合机处于Stop方式(R/ S=0)的情况。关于CMA在Run方式下(R/ S=1)是怎样被存取的说明,请参见第3.3.2节“CMA和MMA映象”中关于CMA的说明。
当采用随机存取访问CMA时,CMA表现为一个线性阵列,其地址沿各层的单列向下升序。即,CMA的第一列包含前64个单元,其第二列包含第二64个单元,等等。
当采用流式存取访问CMA时,诸存储单元可被视为二维阵列也可被视为一线性阵列。如果HSSR∶LS〔3∶0〕=0001,这表示CMA作为将被存取的逻辑空间,那么CMA作为一个二维阵列被存取,在这种情况下,OAR1用来表示一特定层中的偏移,OAR2用来表示存取开始于哪一层,DCR1用来表示每层上有多少CMA单元将被存取,DCR2用来表示有多少层被存取。
如果HSSR∶LS〔3∶0〕=1111,表示整个随机存取空间将被存取,则CMA被当作有4096个单元的线性阵列。
包含在CMA中的数据被用来将输入数据转换为输出数据。当进行学习时,它也是CMA中所包含的受到改变的数据。每单元为8位宽,每层与64个单元相关联。
(2.4)联合机可用微代码存取的寄存器
本节所叙述的寄存器是那些在执行SIMD指令集期间可被存取的,因而它们形成了可由主机从外部存取的寄存器子集的寄存器。关于可由主机存取的寄存器的完整说明,请参看第2.3节“联合机的主机可存取寄存器”。
可由SIMD指令集存取及修改的寄存器的数目分成5组:2.4.1节中的输入数据寄存器(IDR)、2.4.2节中的矢量机,寄存器、2.4.3节中的微定序器控制寄存器、2.4.4节中的标量机寄存器及2.4.5节中的联合机控制寄存器。各寄存器组之间的关系示于图2-67。
(2.4.1)输入数据寄存器(IDR)
IDR本身构成一个类型,因为它可用来作为一个矢量源(同时向处理部件提供64个数据),或者作为一个标量源(允许所有处理部件同时存取一个IDR单元)。
IDR包含用于该联合机的输入矢量。这一寄存器可以通过使用寄存器间接寻址方式的微代码指令来存取。即,这些间接指令使用指针寄存器(P〔0〕-P〔7〕)之一的内容存取IDR中的适当值。
有可能(通过使用微代码指令序列)用两种不同方法之一去存取IDR。存取IDR的一种方法是允许IDR中的单一入口被所有SIMD矢量机的处理部件同时看见,这是IDR的一种标量存取。另一种IDR存取方法是与将IDR看作是与处理部件垂直对准的,从而作为一个矢量来存取它。换句话说,IDR〔0〕与处理部件#0相关联,IDR〔1〕将与处理部件#1相关联,等等。用这种方法,必须在任何计算开始前将整个IDR填充,而一旦IDR被填充,整个IDR可被同时处理。VPCR的各VID位包含IDR中的每个存储单元的有效状态。
(2.4.2)矢量机寄存器
下面论述的每个寄存器都可以在矢量机的64个处理部件的每个中找到。图2-68与图2-68-1说明了矢量机寄存器。
(2.4.2.1)系数存储器阵列(CMA)
每个处理部件都可以存取一组64个(8位)CMA存储单元,这些单元用来为每个处理单元存储映象系数。CMA可通过利用全局指针寄存器(P〔0〕-P〔7〕)间接存取。这类间接寻址的语句可在第2.5.3节“微代码指令格式”中找到。应该注意,使用寄存器间接寻址方式将引起所有处理部件索引同一个CMA列。关于CMA的更多的信息,请参见第2.3.50节。
(2.4.2.2)矢量数据寄存器(V〔0〕-V〔7〕)
每个处理部件都包括一组在计算进程中可使用的8个(8位)通用寄存器,有关矢量数据寄存器的更多的信息,请参见第2.3.46节。
(2.4.2.3)矢量进程控制寄存器(VPCR)
VTCR包含来自前次矢量ALU运算的条件/处理位,以及控制矢量机中目的寄存器的加载的位。有关这些位的列表请参见表2.32。有关VPCR的更多的信息请参看第2.3.47节。
(2.4.3)微定序器控制寄存器
图2-69说明微定序器寄存器。
(2.4.3.1)指令寄存器(IR)
这个16位寄存器包含当前正在执行的微代码指令。当存取指令时用到它,但它不能用作为一条指令的一个操作数。
(2.4.3.2)程序计数器(PC)
这个16位寄存器保持正在执行的微代码指令的地址。该地址用来从指令高速缓冲存储器(IC)中获得一个新的微代码指令字,每次对CMA或IC的存取(使用PC)都被认为是一个字节的存取,因此PC总是以2递增,有关PC的更多信息请参见第2.3.31节。
(2.4.3.3)栈指针(SP)
栈指针用来完成进入CMA的数据进栈操作。在子例程的操作中该寄存器(与FLS一起)为子例程的调用与返回提供了一种机制。在load/store操作中,它用来作为存取数据操作数的基地址指针。注意:栈操作被认为是数据传送操作,因此是被存储在CMA中而不是在指令高速缓冲存储器中的。SP总是指向第一个自由存储单元。在完成一条POP指令(上托指令)时,SP被增加,然后完成数据存取。在完成push指令(推入指令)时,数据首先被放在栈中,然后SP被减小。
(2.4.3.4)一级栈(FLS)
FLS保持用于子例程调用的一级返回PC。该寄存器的使用为只有一级深度的子例程提供较快的调用与返回访问。对于嵌套子例程的调用,第一次调用的返回地址存储在FLS中,且所有随后的调用将使它们各自的返回地址推入栈中(它是由SP寄存器所指向的)。有关FLS的更多的信息请参看第2.3.38节。
(2.4.3.5)重复开始寄存器(RBR)
当执行repeat(e)指令时用到RBR,它保持跟在repeat(e)之后的指令地址。当repeat(e)指令执行时,该寄存器被自动加载,当到达repeat(e)循环的底部(PC==RER)时,该寄存器的内容被装入程序计数器(PC)之中。有关RBR的更多的信息,请参见第2.3.39部分。
(2.4.3.6)重复结束寄存器(RER)
在执行repeat(e)指令时用到RER。RER包含repeat(e)循环中最后一条指令的地址。如果重复计数寄存器(RCR)不等于零,每次PC==RER时,RCR都被减小,且包含在RBR中的值被装入PC。有关RER的更多的信息,请参见2.3.40节。
(2.4.3.7)重复计数寄存器(RCR)
在执行repeat(e)指令时用到RCR。该寄存器包含被执行的repeat(e)循环的次数,当该寄存器装入0时,repeat(e)指令与RER所指定的地址之间的指令被越过,有关RCR的更多的信息,请参见第2.3.41节。
(2.4.4)标量机寄存器
SIMD标量机寄存器是那些能够被标量机存取和修改的寄存器。图2-70对标量机寄存器作了更详尽的说明。在这些寄存器中包含的值对所有SIMD单元的操作起作用。因为对于SIMD矢量机中的所有64个处理部件有一个单一的SIMD标量机,所以只有每个SIMD标量机寄存器的一个单一的一套。
(2.4.4.1)全局指针寄存器(P〔0〕-P〔7〕)
这组8个(8位)寄存器可包含用来选择IDR或CMA中的寄存器的地址。这些寄存器也可以用作标量算术运算的通用数据寄存器。
(2.4.4.2)全局数据寄存器(G〔0〕-G〔7〕)
一组8个(8位)通用数据寄存器,它们可保持全局计算值,或可保持SIMD矢量机的特定处理部件专用的数据。
(2.4.4.3)标量进程控制寄存器(SPCR)
SPCR控制标量机中的多字节算术运算流程,有关该寄存器中各位的说明,请参见表2.33。
(2.4.5)联合机控制寄存器
下面叙述的寄存器是那些使用movci、movtc、movfc指令可读(R)或可读写(R/ W)的寄存器。用来存取这些寄存器的地址等价于表2.5中出现的寄存器的随机存取地址。图2-71对标量机寄存器作了更详尽的说明。
(2.4.5.1)联合机标识寄存器((AIR)
AIR是包含装置标识号的只读寄存器,联合机程序可确定装置类型(因此可确定装置特定的配置)。当使用movfc指令时,该寄存器的地址是$0。有关AIR的更多的信息请参见第2.3.1节。
(2.4.5.2)算术运算控制寄存器(ACR)
ACR用于控制矢量及标量机中的算术运算。VSGN与SSGN位控制矢量与标量机是否执行带符号的或不带符号的算术运算。在使用movci、movtc与movfc时,这一寄存器的地址为$1。有关ACR的更多信息,见2.3.2节。
(2.4.5.3)异常状态寄存器(ESR)
异常状态寄存器的各位记录所有未决异常的发生,联合机异常模型是平直的(同时只处理一个异常)且是分优先级的(优先级较高的异常先于优先级较低的异常得到处理)。当PEE位被置“1”时,则表示发生了端口错误异常。当IOE位被置“1”时,则表示发生了非法操作码异常。当PCE位被置“1”时,则表示发生了PC越界异常。当VDE和SDE位被置“1”时,则分别表示在矢量与标量机中发生了被零除异常。当VVE与SVE位被置“1”时,则分别表示在矢量和标量机中发生了溢出异常。当使用movfc时该寄存器地址是$2。有关ESR的更多的信息,请参见第2.3.3节。
当执行rte指令时,如果EMR中的对应屏蔽位被清零,对应于正在处理的异常的位被清零。也就是说,对ESR中一位清零的唯一途径是执行一个rte指令(有望来自异常处理例程的内部)。进入异常处理例程的唯一方法是用于:1)发生一个异常,2)EMR中的对应屏蔽位被清零。这种功能允许异常被“堆叠”(其中多个异常可为待决的,而在任何一次都只处理一个异常)。这种机制还允许那些被忽略的异常的状态能够得以保持。
(2.4.5.4)异常屏蔽寄存器(EMR)
异常屏蔽寄存器允许微代码指定哪些异常要被处理,哪些异常要被忽略。当PEEM位被置“1”时表示端口错误将不产生异常;IOEM位被置“1”时表示非法操作码将不产生异常;PCEM位被置“1”时表示PC越界将不产生异常;VDEM和SDEM位被置“1”时分别表示在矢量与标量机中被零除将不产生异常;而VVEM与SVEM位被置“1”时分别表示在矢量与标量机中的溢出将不产生异常。当使用movci、movtc、movfc指令时该寄存器的地址是$3。有关EMR的更多的信息请参见2.3.4节。
(2.4.5.5)处理部件选择寄存器(PESR)
PESR控制参与drotmov指令或者dsrot指令的最后处理部件。当使用movci、movtc和movfc指令时该寄存器的地址是$4。有关PESR的更多的信息请参见2.3.5节。
(2.4.5.6)端口控制寄存器(PCR)
PCR控制联合机的四个端口上开关与抽头位置的设定。当在Run方式中数据进行芯片到芯片的传输时,该寄存器还允许微代码确定怎样填充TDR。当使用movci、movtc和movfc指令时该寄存器的地址是$5。有关PCR的更多的信息请参见第2.3.6节。
(2.4.5.7)联合机端口监视寄存器(APMR)
APMR使微代码能够确定端口错误原因。该寄存器通常只在异常处理过程中使用。当使用movci、movtc和movfc指令时该寄存器地址为$6。有关APMR的更多的信息请参见2.3.7节。
(2.4.5.8)通用端口寄存器(GPPR)
GPPR是一个控制PA〔1∶0〕信号引脚的状态的两位寄存器。当使用movci、movtc和movfc指令时它的地址是$7。有关GPPR的更多信息请参见2.3.8节。
(2.4.5.9)通用方向寄存器(GPDR)
GPDR控制PA〔1∶0〕信号引脚的方向,当使用movci、movtc和movfc指令时它的地址为$8。有关GPDR的更多信息请参见第2.3.9节。
(2.4.5.10)IDR指针寄存器(IPR)
IPR在数据广播期间控制数据被放在IDR中的什么地方。该寄存器的复位值是$00,它表示如果该寄存器被改变之前数据被广播,该数据将从IDR〔0〕单元开始送入IDR。当使用movci、movtc和movfc指令时,该寄存器的地址是$9。有关IPR的更多的信息请参见第2.3.10节。
(2.4.5.11)IDR计数寄存器(ICR)
ICR规定在数据广播期间将由这一部分接收的数据的最大数量。当使用movci、movtc和movfc指令时该寄存器的地址为$A。有关ICR的更多的信息请参见第2.3.11节。
(2.4.5.12)IDR单元屏蔽寄存器(ILMR)
ILMR与IPR一起使用来确定哪些IPR地址位是“不必关心”的,这使广播期间数据能在IDR中被复制。当使用movci、movtc和movfc指令时该寄存器的地址为$C。有关ILMR的更多信息请参见第2.3.12节。
(2.4.5.13)IDR初始偏移寄存器(IOR)
IOR允许数据在广播开始时被忽略。它的复位值是$0000,这意味着在广播开始时IDR被加载而不忽略任何数据。一旦所规定的字节数被越过,装入IDR的字节将代表一个来自广播的相连数据流,该寄存器仅在Run方式流写入操作期间被使用。更具体地说,它仅在输入变址方式时才使用(PCR∶FM=0)。请将此与第2.3.12节中叙述的输入标记(PCR∶FM=1)的情况加以比较。由于它是一个16位寄存器,因此必须分两部分寻址。当使用movci、movtc和movfc指令时,该寄存器的MSB(最高有效位)地址为$E,LSB(最低有效位)地址为$F。有关IOR的更多信息请参见第2.3.13节。
(2.5)联合机微代码指令集概述
本节叙述可用来为联合机的操作编程的命令。在第2.4节“联合机可用微代码可存取的寄存器”中,叙述了联合机微代码程序员可利用的寄存器。本节将叙述利用这些寄存器可完成的实际操作。
(2.5.1)指令类型
指令构成一套完成各种各样操作的工具。表2.34给出了指令和指令类型的一览表。
(2.5.2)使用的记号
表2.35中所示的记号在本节中自始至终使用。
(2.5.3)微代码指令格式
本节叙述用来为联合机建立微代码指令的字段。对于所有一元指令(单操作数指令,如bcnt sregD)来说,所指定的寄存器既作为该指令的源寄存器的作为目的寄存器。对于所有二元指令(双操作数指令,如add sregS,sregD),所指定的第一寄存器作为该操作的一个源,而所指定的第二寄存器则既作为该操作的源寄存器又作为该操作的目的寄存器。
(2.5.3.1)数据格式
矢量与标量机的基本数据量为一个字节。以速度损失为代价提供了将数据大小扩充为多字节算术运算的能力。对于其他格式(如浮点格式),则要求使用者使用部分CMA作为暂存存储器。
(2.5.3.2)寄存器选择
vreg1、vreg2和sreg字段定义微代码操作中所使使用的矢量与标量机中的寄存器组。各名称vreg1、vreg2和sreg不含有源信息或目的地信息,它们简单地意味着表达矢量与标量机中的寄存器组。由vreg1表达的一组寄存器在表2.36中给出,由vreg2表达的一组寄存器在表2.37中给出,由sreg表达的一组寄存器在表2.38中给出。
(2.5.4)栈指针的约定
联合机将一个栈指针(SP)寄存器用于子例程调用和异常处理。以下给出被用于SP寄存器的约定。当数据放到栈上时,SP寄存器被减小;而当数据从栈中取出时,SP寄存器增大(即分别为bsr与return)。栈指针的当前值指向第一个能够用来进行栈操作的存储单元(即SP指向一个空单元)。
(2.5.5)存取IDR
IDR可用两种不同方式寻址。它即可以作为64个单字节标量实体来寻址(标量存取),这意味着IDR中的单个字节被广播到所有处理部件中;它也可以作为单个的64字节的矢量实体来寻址(矢量存取),这意味着IDR的#0字节由#0处理部件所存取,IDR的#1字节由#1处理部件所存取,……而IDR的#63字节被#63处理部件所存取。
当对IDR进行标量存取(即单个字节广播到所有PE)时,指令记号使用一间接地址指针,对IDR(IDR〔P0〕或IDR〔P0++〕,即vmov IDR〔P0〕,V〔0〕)进行变址。这是通过使用联合机内部的广播总线来完成的。IDR的一个单元中的内容可被放到该总线上并同时被所有处理部件所接收。
当对IDR进行矢量(即作为一个64字节的矢量)存取时,指令记号不使用间接指针寄存器(IDR或IDRC,即vmov IDR,V〔0〕),广播总线被全部绕过,IDR的每一单元被同时传送到各自对应的处理部件中。
这种灵活性使不同算法的实现变得容易起来。图2-72示出IDR的概念性实现。
IDR还具有与每个IDR单元相关的有效位。这保证了联合机的程序不在无效数据上操作。当IDR单元被写时,该有效位被置“1”。当对IDR进行标量存取时,特定IDR单元的有效位用来确定其数据的有效性。当对IDR进行矢量存取时,每个有效位与处理屏蔽(VT位)进行比较,从而确定该IDR单元是否有效。要确定IDR本身是否有效,要将所有有效的IDR单元结合在一起。于是,如果处理屏蔽被置位,那么该有效位与其他有效的PE/IDR单元一起被用来作为整个矢量的有效性的检验。在以上两种情况中,联合机程序部将被拖延,直到所需的IDR单元变为有效时为止。
(2.5.6)矢量进程控制寄存器
每个SIMD处理部件中的矢量处理控制寄存器(VPCR)包含有关指令结果的信息。有些指令修改VPCR的某些位或所有位,而另一些指令只是检测VPCR的位的状态或位的组合。有关VPCR的说明参见表2.39。
(2.5.7)标量进程控制寄存器
标量机中的标量进程控制寄存器(SPCR)包含有关指令结果的信息。一些指令修改SPCR中的某些位或所有位,而另一些指令只是测试SPCR的位的状态或位的组合,对SPCR每位的说明,参见表2.40。
(2.5.8)带符号与不带符运算比较
算术控制寄存器(ACR)的SSGN位与VSGN位控制某些指令操作并控制如何产生进程信息(SPCR和VPCR)。对于乘法和除法,xSGN位直接控制是进行带符号(=进制补码)运算还是进行不带符号运算。此外,对于加法、减法和乘法,xSGN位还控制如何产生溢出信息。对于带符号运算,溢出位(加法和减法)被定义为运算的最高有效位位置上进位输入与进位输出的异或,对于不带符号运算,溢出被定义为运算结果的最高有效位位置上的进位输出。
(2.5.9)饱和与非饱和运算比较
对于那些引起它们的结果饱和的指令,其结果饱和的数值取决于算术控制寄存器(ACR)中的符号位(SSGN和VSGN)。对于不带符号运算,最大的正饱和结果为$FF(255),最小数为$00(0)。对于带符号运算,最大的正饱和数为$7F(127),最小数是$80(-128),请注意饱和指令sat和vsat不导致溢出(其他引起操作数饱和的指令的情况也一样)。
(2.5.10)联合机系统控制操作
本节描述全局级上控制联合机的指令,关于标量数据微代码的指令的说明参见表2.41。
(2.5.11)矢量机数据传送
本节描述完成基本矢量机的数据传送的指令。关于矢量机数据传送微代码指令的说明参见表2.41。
(2.5.11.1)对drotmov指令的说明
如前所述,drotmov指令转动一个V寄存器,然后在结果上进行矢量移动。图2-73说明了有限几个处理单元执行前后的情况。在图2-73中该例有四个处理部件PE。PESR包含数值2。它选择#2PE作为将向#0PE提供数据的环绕部件。箭头指示了数据的移动情况。
(2.5.11.2)对dsrot指令的说明
联合机包括一个叫做dsrot的向下移位指令。该指令提供合理的有效的递归倍增式算法以及其他可能的聚集运算。这一指令完成稀疏的多位置向下循环移位。指令dsrot#N,vreg2的功能如下:
每个PE复制从上邻一个PE传递到一局部寄存器的值。处理屏蔽(VT位)用来以正常方式抑制存储在任何PE中的结果。
如果一个PE在其PE号的最低有效N位元全部为“1”,它将把来自vreg2寄存器存的值传到下邻的一个PE。否则,它将其从上邻的PE所接收到的值向前传播。如果N=0,那么每个PE将把vreg2存的值传到下面一个PE。处理屏蔽(VT位)对一个PE将哪个值传递给它下面的一个相邻PE不起作用。最后一个PE将以循环方式把值返回给第一个PE(0号PE)。在该链中哪个PE将起最后PE的作用将由PESR寄存器中的值来决定。
作为例子,表2.43说明了几个dsrot指令的执行中得出的几种结果,本例中假设PESR寄存器含有值15。表2.43叙述了这些例子。
(2.5.12)矢量机数据运算
本节叙述操作矢量寄存器的指令。应注意VSGN位控制关于带符号运算与不带符号运算的结果。有关带符号/不带符号和饱和运算的更多信息请参考2.5.8节“带符号和不带符号运算比较”和2.5.9节“饱和和非饱和运算比较”。有关矢量数据微代码指令,参考表2.44。
(2.5.12.1)循环右移与左移指令概述
表2.45提供了联合机程序员能用的循环右移与左移指令的快速一览表。
(2.5.12.2)向下移位操作的说明
指令dadd、daddp、dmin、dminp、dminp、dmax和dmaxp将向下移位与计算相结合,从而简化了对于聚集运算的递归倍增式计算的完成,而聚集运算预期在目标应用中是最为常用。“p”代表前级式指令,其中无“p”的指令形式是结束指令。有关前级和非前级式指令形式的更多信息,参考第2.5.18节扩充位与多字节运算的执行。
这些指令将稀疏多位置向下循环移位与算术运算结合起来。指令dadd#N,vreg2的功能如下:
*加法只是在半数的PE中发生,即在那些在它们各自的PE号的位置N上有“1”比特的PE中发生(最低有效位被计作位置0)。每个这种形式的P E将上邻一个PE传过来的值加在其局部vreg2寄存器中。不是这种形式的PE则保持它们的vreg2寄存器值不变。处理屏蔽(VT位)可按正常的方式用来抑制在任一PE中存储结果,否则这些PE将修改它们的vreg2寄存器。
*如果PE中PE号的最低有效N位元全部是“1”,它将它的vreg2寄存器存的值传到下邻一个PE。否则,它将它从上邻一个PE所接到的值向前传播。如果N=0,每个PE都将其vreg2寄存器存的值传给下邻一个PE。处理屏蔽(VT位)对PE将哪个值传递给它下面的一个相邻PE不起作用。注意由于无论什么样的#N值被指定,从上一PE中传到第一PE的值从不被使用,因此最后一个PE是否将值传回给第一PE是无关紧要的。
作为一个例子,下面的表说明了由几个dadd指令的执行而得到的几种结果。该例假设有16个PE。表2.43叙述了这些例子,表2.46提供了dadd指令的几个例子。
(2.5.12.3)vmin/vmax指令的说明
vmin和vmax指令被用来将2个矢量共同组合成一个矢量。如图2-74所示,vmin指令的结果是一个组合矢量,它包含该指令中所规定的两个矢量中的最小元素。同样,也如图2-74所示,vmax指令结果是一个组合矢量,它包含指令中所规定的两个矢量中的最大元素。
记住,与所有其他矢量运算的情况相同,当,且只当,处理单元的VT位被置位时,结果才被存储。
(2.5.13)矢量机条件操作
本节叙述完成条件操作的指令。条件操作利用VPCR的VT与VH位控制每个处理部件中后续指令的执行。当vif指令被判定为“真”(TRUE)或当venif指令被执行时,VPCR的VT位被置位。如果任何前面的vif(自最近一个vendif之后)被判定为真(TRUE),VT位被velse指令清0。当TV位清0时,它防止指令更新矢量目的寄存器或矢量进程控制寄存器。
VPCR的VH位包含vif-velseif或vif-velseif-velseif-vendif序列的VT位历史。(注:velseif指令并不存在于微代码级内,但它是velse和vif两个指令的简单链接)。如果前一vif指令被判定为“真”(TRUE),VH位则被velse的执行置“1”。VH位被vendif指令的执行清零。
有关VH与VT位对各指令的执行所具有的作用的全面说明,参考第2.5.21节VPCR的VH位和VT位对PE处理的作用。有关说明SIMD矢量机中的指令的条件执行情况的实例代码字段,参见第3.6.5.4节“条件执行”。表2.47给出现有的条件微代码,指令的简要说明。
(2.5.13.1)条件指令对VT和VH位的作用
为阐明VT和VH位的功能,表2.48与图2-75分别示出了VT与VH位的下一状态变化表和状态变化图。应记住,只有当VT位置“1”时vif指令才被执行;而velse和vendif指令的执行不依赖VT位。复位即初始条件为VT=1;VH=0。
(2.5.13.2)循环右移与左移指令概述
表2.49提供了联合机程序员可用的循环右移与左移指令的快速一览表。
(2.5.14)标量机数据移动
本节叙述实现基本标量机数据移动的指令。有关标量机数据移动微代码指令的说明,参见表2.50。
(2.5.15)标量机数据运算
本节叙述在标量机上操作的指令。应当注意,算术控制寄存器(ACR)的位SSGN与VSGN控制与带符号值和不带符号值相关的指令的执行结果。有关带符号/不带符号与饱和运算的更多的信息,请参见第2.5.8节“带符号与不带符号运算比较”以及第2.5.9节“饱和与非饱和运算比较”。有关标量数据微代码指令的说明,请参见表2.51。
(2.5.16)标量机程序流程控制操作
本节叙述了在SIMD标量机中实现程序控制的指令。对于那些必须保存PC的指令(bsr,jsrmi和jsrri),提供了一个单级硬件栈(FLS)。如果需要一个单级以上的栈,就必须为栈分配CMA的空间,而下一个可用的栈单元将由SP所指出。有关程序控制的微代码指令的说明,参见表2.52。
(2.5.17)repeat和repeate指令的说明
当某些指令形式出现在循环终点时(当微定序器正在计算是否应该另循环一次,或者是否应该执行紧跟在循环之后的指令时),repeat和repeate指令能够得出边界条件,明显的交互作用涉及流程变化指令(bra、bsr、jmpri、jmpmi、jsrri、jsrri和jsrmi)。不大明显的交互作用涉及到矢量条件指令(vif、velse和vendif)。下面将对这些交互作用一一解释。
(2.5.17.1)repeat循环终点处的流程变化
发生在repeat循环终点处的流程变化是相当直观的。显式流程变化(bra/jmpri/jmpmi或bsr/jsrri/jsrmi)将总是比repeat循环的隐式流程变化更受欢迎一些。在图2-76与图2-77示出的两个例子中,repeat可用repeate代替。换句话说,repeat循环的形式对这两个例子并不是至关重要的。
(2.5.17.2)repeat循环终点处的矢量条件
一个repeat循环终点处的矢量条件指令的交互作用不如上述流程变化的例子那么明显。有关的交互作用为,当VT与VH位明显变化时(由出现在repeate循环终点的指令引起),将干扰VT与VH位的隐式变化(由repeate循环终点的隐式vendif指令引起)。
在图2-79与图2-80中,矢量条件(那些影响VT与VH位的指令)被用作下列指令的位置保持器:locmin、locmax、colmin、colmax、rowmin、rowmax、dskipe、vifxx、velse、vendif、vlshfth、vlshftt、vrotrh和vrotrv。
如表2.52中所说明的,repeate循环与带有终结的vendif的repeat循环是等同的。该等同性在图2-78中示出(注意右手侧的循环是一repeate循环)。
如果一个矢量条件指令在repeat循环的终点出现,则该条件指令将像预料的那样影响VT和VH(它的工作情况正像一个在循环内部的矢量条件那样)。图2-79中示出这一点。
如果一个矢量条件指令在repeate循环的终点出现,则repeate循环中蕴含的vendif将起支配作用,就好像该矢量条件指令从未被执行一样,图2-80示出了这种情况。
(2.5.18)扩充位与多字节运算的执行
联合机被设计为能支持单字节与多字节的运算,它的作法是保存所完成的上一个运算的扩充信息。每个给定运算都具有两种基本形式的指令:初始指令与结束指令。根据所进行的运算,可以首先或最后运算最高有效字节。应当注意,对于可能发生溢出的计算最后的运算将饱和。
对于单字节运算,联合机程序员可以根据应用选择饱和指令(结束形式)或非饱和指令(初始形式)。当在单字节运算中使用初始指令时应当特别小心,以免初始指令所产生的扩充信息无意中对后面的指令起作用。
考虑到扩充位,联合机指令可分为三种。在第一种中,扩充位不用于运算,而总是作为运算结果被清零,第二种指令是将扩充位用于运算(例如进位输入),对扩充位进行设置以反映运算结果(例如进位输出);第三种运算指令是将扩充位用于运算,但总是将扩充位作为运算结果而清零(例如饱和加,将从不产生进位输出)。于是,对于加法、减法和移位的情况,扩充信息总是用于运算。在多字节序列的第一个运算开始时确保扩充位清零是非常重要的,否则将会产生错误结果。
(2.5.19)多字节运算的说明
以下几节中所述的扩充位适用于标量与矢量进程控制寄存器。这里所说的运算指加法、减法、最大值、最小值、左移、右移和求反。下面各例还假设两个24位数量在运算(V0、V1、V2与V3、V4、V5;V2和V5是最低有效字节)。在所选实例中有8位操作数与24位操作数一起应用的情况。
另外,在表2.53至表2.63中术语xX0与xX1用作为标量机中SX0与SX1位或矢量机中VX0与VX1位的简写。
(2.5.19.1)多字节加法
在多字节加法情况下,运算从最低有效字节开始,然后向高字节进行。例如(不要忘记开始时扩充位应为00):
vaddp V2,V5
vaddp V1,V4
vadd  V0,V3
vadd指令(它可以饱和)将永远不产生进位输出,因此在vadd指令结束时扩充位将被清零。而由vaddp指令产生的扩充信息用来保存进位与符号信号,扩充位xX1用来保存sreg操作数的符号信息(这被用来支持符号扩充加法,后面将要论及),扩充位xX0用来保存加法的进位信息,表2.53详细说明了扩充位可能出现的一些状态。
若用户关心最高字节vadd饱和,可以根据保持在处理控制寄存器中的最后溢出和饱和方向的信息,用vsat指令改变多字节结果的最低有效位字节。指令:
vsat V4
vsat V5
将跟在vadd指令之后,使目的寄存器的两个较低有效字节都饱和(如果饱和发生在最高有效位add中)。
对于长度不同的操作数情况(如一个字节与24位的流水和(running total)相加)可采用带符号扩充加法。例如(假设V0与V3、V4、V5相加):
vaddp Vo、V5
vaddsxp V4
vaddsx V3
应记住,扩充位含有关于上一个运算的源操作数的信息,xX1位专门被vaddsxp指令用来确定前次运算是怎样被符号扩充的,若xX1被置“1”,vaddsxp指令将加上任何进位信息,并将数值$FF作为另一变元用于加法。这将对V0值产生符号扩充的效果。与vadd指令一样,vaddsx指令将使结果饱和(如果溢出位被置位的话),并将扩充位清零。表2.54表示vaddsxp指令对扩充位的作用。
对于前一例的情况,如果最高有效位运算饱和,就应使用vsat指令来使结果中的其余各字节饱和。
(2.5.19.2)多字节减法
在多字节减法情况下,运算从最低有效位字节开始然后向高字节进行。例如(记住开始时扩充位应为00):
vsubp  V2,V5
vsubp  V1,V4
vsub   V0,V3
vsub指令(会饱和)从不产生借位输出,因此,在vsub指令结束时扩充位将被清零,但由vsubp指令产生的扩充信息却被用来保持借位和符号信息。扩充位xX1被用来保持源操作数的符号信息(这被用来支持符号扩充减法,它将在下面论及)。扩充位xX0用来保持减法的借位信息。表2.55详细说明了扩充位可能出现的状态。
如果使用者关心最高有效字节减法的饱和,那么可以根据保持在处理控制器中的最终溢出和饱和方法的信息,使用vsat指令改变多字节结果的最低有效字节。指令:
vsat V4
vsat V5
将跟在vsub指令之后使目的寄存器的两个较低有效位字节都饱和(若饱和发生在最高有效字节减法中的话)。
在操作数长度不同的情况下(如从24位的流水差中减去一个字节),可使用带符号扩充减法。例如(假设从V3、V4、V5中减去V0):
vsubp V0,V5
vsubsxp V4
vsubsx V3
请记住,扩充位中包含着有关最后操作的源操作数的信息,xX1位专门由vsubsxp指令用来确定前一操作是怎样被符号扩充的。如果xX1位被置位,那么vsubsxp指令将减去任何借位信息并将$FF值作为另一变元用于减法。这会产生将V0值进行符号扩充的作用。与vsub指令一样,vsubx指令将使结果饱和(如果溢出位被置“1”的话),且将扩展位清零。表2.56指出了vsubsxp指令时扩充位的影响。
对于上例的情况,如果最高有效字节运算饱和,应使用vsat指令使结果中的其余字节都饱和。
(2.5.19.3)多字节比较
在多字节比较情况下,运算从最高有效字节开始,然后向低字节进行。在大多数情况下,矢量比较的期望结果是设置处理屏蔽(VT位),标量比较最可能发生程序流程变化。在任何一种情况下,比较都在最低有效字节以vif或skip形式的指令结束,例如(记住扩充位开始时为00):
vcompp V0,V3
vcompp V1,V4
vifeq V2,V5
vcompp指令使用扩充位的方式与add和subtract指令不同,扩充位用来确定最后操作的结果是什么,并确定是否需要进一步比较。表2.57详细列出了vcompp指令之前和之后扩充位的定义。
在最后vcompp指令结束时,条件指令vif(或skip)被执行。vif指令将取出扩充信息并将它与所期望的比较相结合(例如是否相等)从而使处理屏蔽(VT位)相应地被置位或被清零(或执行某些流程改变)。
(2.5.19.4)“VIF”对xX0和xX1的依赖
再次重复说明vif和skip指令与X0与X1位状态有直接关系是非常必要的(SX0∶SX1对标量机而言;VX0∶VX1对矢量机而言),要方便多字节比较需要这种依从关系。由于这一原因,大多数指令将X0与X1位清零,请对那些当使用vif与skip指令时确实影响X0与X1位的指令加以特别注意。
(2.5.19.5)多字节最大值
在多字节最大值的情况下,操作由最高有效字节开始向低字节进行。多字节最大值的操作与多字节中比较非常相似,但操作结果不同,sreg寄存器将存放两个操作数中的最大者,例如(记住扩充位开始时为00):
vmaxp V0、V3
vmaxp V1、V4
vmax  V2、V5
vmaxp指令使用扩充位的方式与add指令、subtract指令不同。扩充值用来向vmaxp指令指示应采取什么行动。最终的最大值操作(最低有效W纸Z)应使用vmax操作去保证扩充位放回到它们的空状态(00),且数据的最后字节被移动(根据比较)。表2.58详细列出vmaxp指令之前和之后的扩充位定义。
(2.5.19.6)多字节最小值
在多字节最小值情况下,操作从最高有效字节开始并向低字节进行。多字节最小值的操作与多字节最大值的操作非常相似,但操作结果不同,sreg寄存器中将是两操作数中的最小值。例如(记住扩充位开始为00):
vminp V0,V3
vminp V1,V4
vmin V2,V5
vimp指令使用扩充位的方式与add、subtract指令不同。扩充位用来向vmipp指令指示应采取什么行动。最后的最小值操作(最低有效位字节)应用vmin操作去保证扩充位放回到空状态(00),且数据的最后字节被移动(根据比较)。表2.59详细列出扩充位在vimp指令执行之前和之后的定义。
(2.5.19.7)多字节左移
在多字节左移的情况,操作从最低有效字节开始,向高字节进行。在左移操作情况中无专门的左移前级指令,而用前级add完成此功能,例如(记住,扩充位开始时为00):
vaddp V2,V2
vaddp V1,V1
vlshftV0
前两步操作将V2与V1寄存器左移一比特位置,且将进位结果保存在扩充位xX0中。在这种情况下扩充位xX1不必关心,最后指令vlshft取出该扩充信息并将它移位到最后一字节(最高有效位)之中,然后将这些扩充位清为空状态(00)。
(2.5.19.8)多字节右移
在多字节右移情况下,操作从最高有效字节开始向低字节进行。与以前各种情况一样,前级右移指令用于最高有效字节,正常右移指令被用于最后(最低有效位)字节。例如(记住,扩充位开始为00):
vrshftp V2
vrshftp V1
vrshft V0
前两步操作将V2与V1寄存器移位一比特的位置,并将最低有效位结果保存在扩充位xX0中。xX1扩充位用来向指令指示可能的符号扩充是需要的(见表2.60)。最后的指令vrshfft取出扩充信息并将它移位到最后(最低有效)字节之中,然后将扩充位清为空状态(00)。于是对于最后一步操作来说,最低有效位被丢弃。
(2.5.19.9)多字节求反
在多字节求反情况下,操作从最低有效字节开始向高字节进行。对于较低字节,使用前级求反指令,对于最后(最高有效)字节使用正常求反指令。应注意,求反绝对值最大的负数(-128)产生溢出条件(127),扩充位xX0用来保存来自求反的借位信息,而xX1位不必关心,例如(记住,扩充位开始时为00):
vnegp V2
vnegp V1
vneg  V0
vneg指令(它可以饱和)永远不会产生借位输出,因此在该vneg指令结束时扩充位将被清零。表2.61详细列出扩充位的一些可能状态。
(2.5.19.10)多字节指针增量
在多字节指针增量的情况,操作从最低有效字节开始,向高字节进行。例如(记住,扩充位开始时为00):
incp #3,P6
inc  #0,P7
inc指令将永远不产生进位输出,于是在流inc指令结束时扩充位将被清零。但是由incp指令产生的扩充信息用来保持进位与符号信息。扩充位SX1用来保持sreg操作数的符号信息(这被用来支持符号扩充加法)。虽然源操作数是该指令中的常数域,但SX1位仍被清零以保持与其他联合机指令相一致。SX1位不用作inc或incp指令的输入。扩充位SX0用来保持加法的进位信息。表2.53详细列出了扩充位的一些可能状态。表2.62提供了前级指令增量(incp)的扩充位说明。
(2.5.19.11)多字节指针减量
在多字节指针的减量的情况下,操作从最低有效字节开始,向高字节进行,例如(记住,扩充位开始时为00):
decp #3,P6
dec  #0,P7
dec指令将永远不产生借位输出,于是在该dec指令结束时扩充位将被清零。但由decp产生的扩充信息被用来保持借位与符号信息。扩充位SX1用来保持sreg操作数的符号信息(这被用来支持符号扩充加法)。虽然源操作数是本指令中的常数域,但SX1位仍被置“1”以保持与其他联合机指令相一致。SX1不用作dec或decp指令的输入。扩充位SX0用来保持减法的借位信息。表2.55详细列出了扩充位可能出现的状态。表2.63提供初始减量(decp)的扩充位说明。
(2.5.20)进程计算控制
本节叙述VPCR/SPCR各位怎样受到各指令的影响。大多数操作使用源操作数与目的操作数,完成操作并将结果存在目的操作数之中。单操作数运算只使用目的操作数,并在目的操作数上完成操作,且将结果存在目的操作数中。表2.64列出了每个指令,并列出它是怎样影响进程代码的。注意VX〔1∶0〕、VT、VV、VD和VH位在每个处理部件中,而SX〔1∶0〕SV和SD位是在标量机处理机控制寄存器中。
(2.5.21)VPCR的VH位和VT位对PE处理的作用
若VT位被置位,允许当前指令更新目的寄存器;但是如果VT位被清零,目的寄存器则不能更新。该闭锁功能也用来更新VPGR寄存器位。VH位的功能是保存VT位的历史状态,并控制何时能修改VPCR的VT位。于是,通过VT与VH位的结合,在SIMD矢量机内指令执行中存在着控制分级结构。表2.65示出了VH、VT位对联合机的指令执行的作用。
(2.5.22)指令执行次数
本节给出每个指令的执行周期数,有可能对导致多位置或多位操作的这些指令次数进行调整。表2.66列出了每条指令以及它们的周期数如何从最小变到最大的情况。
(2.5.23)联合机缺失指令
在联合机中有几种能完成两种功能的指令,这些指令在表2.67中说明。
(第3节)
联合机的操作原理
本节给出联合机操作的更详细说明,联合机的主要功能是取得输入数据并完成用户定义的传输功能。
联合机功能性的主要方面分成一些逻辑部分。
第3.1节“信息流程和结构”,叙述了通过典型前馈网络的信息流程,并提供了网络到联合机/联合机′体系结构上的映象。第3.2节指令流线,叙述了怎样获取和执行指令的基本机制。第3.3节“指令和数据存储器”,叙述如何设置联合机的主存储器以保持微代码,矢量数据和标量数据。第3.4节“联合机初始化”,叙述与联合机的建立和初如化有关的问题。讨论了诸如最小配置和初始化这类的问题。第3.5节“端口操作”,叙述端口操作方式以及联合机的用户能够如何控制从主机侧出入联合机的数据传输。另外,还给出为支持不同方式的数据传输的主存储器映象的说明。第3.6节“联合机操作”,叙述SIMD处理部件与计算功能的控制,讨论中包括矢量与标量机的宏观与微观。还给出了若干微代码程序结构的说明。第3.7节“微代码启动的端口写操作”,叙述在微代码控制下将计算数据从联合机传输到支持联合机′装置的操作方式,还讨论二维与一维的联合机的配置。第3.8节“联合机总线布置”,示出了如何设置多个联合机以解决问题以及在阵列结构中使用联合机时监视哪些错误情况。(3.1)信息流程与结构
用高层次的方法,神经网络体系结构可被映射到一组联合机块上来完成所需功能。信息流程也可被认为是映象函数。图3-1示出了典型的全连前馈神经网络。为支持许多不同形式的神经网络算法,另一个可被称为联合机′的联合机(具有不同微代码),可被用来从联合机中取出部分神经腱值并将它们聚集形成总神经细胞输出。
在该网络中,输入层(i)仅完成分配功能,有119条输入通到该网络。隐层(h)取出这些输入,并利用诸如乘积之和:∑(i*Cih)这样的传播函数来作用网络系数Cih,在描述互连系数时,第一下标(i)代表输入下标,即“自”神经细胞,第二下标(h)表示所“至”神经细胞。隐层在乘积和上执行输出函数,并产生来自隐层的输出,在该例中隐层有80个神经细胞。输出层(0)接收来自隐层的输出,并利用一传播函数∑(h*Who)来作用网络系数Who。与在隐层中相似输出层在乘积和上执行输出函数,产生网络输出。在该例中的输出层有20个神经细胞。对于64输入和64输出的联合机体系结构,该例的映象将需要若干个联合机。图3-2示出了图3-1中隐层的一种可能映象。在图3-2中,联合机0、联合机1、联合机2′形成簇0,而联合机3、联合机4、联合机5′形成簇(bank)1。类似地,联合机0和联合机3形成片(slice)0,联合机1和联合机4形成片1,联合机2′和联合机5′形成片2。在图3-1所示的网络映象中应注意输入层与隐层都被映射到图3-2上。这是因为输入层只作为分配层起作用。
联合机组合的信息流程流动如下:前63个输入样值被加载到片0的IDR之中,其余样值被加载到片1的IDR之中,在片1正被加载的同时,片0可开始计算它的输入采样值的乘积和。
片0完成计算之后,它将部分神经腱结果(代表矢量部分和)传输到联合机′中,当片1也传输了它的部分和之后,联合机′片(片2)可执行输出函数,并开始将隐层数据传输给输出层。一个联合机′可支持许多同簇的联合机。
在图3-2中,片2示出联合机可被用作不同的功能块(具有不同微代码),它还示出CMA可用于不同用途。串列矢量被加载到CMA之中作为T0-T79。S矢量(S0-S79)是在片0与片1中联合机的被求和的部分神经腱值。联合机2′和联合机5′中示出的COF值被用来在神经腱总和上执行压缩功能从而产生网络的输出。
图3-3示出了联合机/联合机′单元的逻辑图。注意联合机装置利用互连系数负责来自前层输出的传播,而联合机′装置则完成聚集与输出功能。
应当指出,用3-2与图3-3中所示的映象仅代表图3-1所示网络的一种可能的映象,如在第2.1节“联合机系统概述”中描叙的,片2可被整个地移走,部分结果可被累加到片1之中。(3.2)指令流线
联合机以三阶段流线来实现指令定序器。这意味着每个指令必须通过三个不同功能单元来完成。图3-4对此作了图示,更详细的情况在表3.1中作了说明。
当流线被填充时,忽略指令通过第一和第二阶段所花费的时间是可能的。在图3-5中,认为流水线在t3和t3到t7之间被填充,每个时钟执行一条新指令,换句话说,每条指令需花费至少3个时钟周期来完成,但若使用这种特定的流水线,每条指令就具有一个时钟的实际执行时间。
多周期指令定时与图3-5所示的单周期指令定时没有很大的不同。但是,由于每条指令都负责预取下一条即将执行的指令,所以多周期指令一直要到它们距完成只有一个周期时才开始进行预取。多周期执行定时在图3-6中说明。(3.2.1)指令流线中的拖延
流线拖延由两种不同情况引起:高速缓存缺失和源冲突。
在流线阶段1中的拖延完全是由高速缓存缺失引起的(在有效高速缓存线上未能找到PC中地址的情况)。每个由高速缓存缺失引起的注入流线的拖延将另一个时钟周期注入流线中当前指令的执行时间之内。
阶段2中的拖延,如图3-7所示,是由数据的连贯性引起的。
间接寻址方式(诸如图3-7中所见的(MA〔P1〕)是在流线阶段2内被处理的。图3-7所示两条指令都是单周期指令,当在流线阶段3中正在执行add g0,V0时,(MA〔P1〕)的数据预取正在阶段2中进行。这正是出现问题之处。正在流线阶段2中使用的指针同时在流线阶段3中被更新。因此,在使用指针之前,要拖延流线一个时钟,直到指针的更新(在阶段3)结束时为止。
在阶段3的拖延直接与IDR有效位(VID)有关。如果一条诸如Vadd IDR〔P1〕,V0这样的指令指向尚未被填充的IDR单元,那么阶段3的拖延将在流水线中引发,直到引用的IDR单元被填充(且VID位指示该IDR单元有效)时为止。由于阶段3的拖延依赖于外部源,因此它并不持续一个指定的的时钟数,于是如果外部数据源未能向联合机提供期望数量的数据,联合机就有可能无限期拖延(ICR规定联合机在Run方式下要求的数据量为多少)。正是由于这个缘故,阶段3拖延在PSTA引脚上是外部可见的(PSTA〔2∶0〕=000指示出阶段3流线的拖延)。该指示同样在微定序器状态寄存器的EXE编码中是可见的(MSR∶EXE〔2∶0〕=000指示出阶段3拖延)。(3.2.2)指令流线中的拖延优先级
如果同时出现一个以上的拖延,表3.2确定解决拖延的次序。(3.3)  指令和数据存储器
每个联合机中的CMA用来保持程序指令和程序数据。由此,术语CMA与MMA都指的是同一个称作CMA的实体RAM。当联合机在这一存储器中存取数据时,它被称作CMA;当联合机在这一存储器中存取指令时,它被称作MMA。主要区别是进行MMA存取时的特定寻址方式。
在图3-2的联合机0、联合机1、联合机3和联合机4的情况中,有两列CMA,它们被分配给程序存储器(MMA)。根据应用,也许有更多的CMA用作为MMA存储器。根据应用的需要,折衷选择数据空间和指令空间则是程序员的任务了。(3.3.1)指令高速缓存储
每个联合机为快速指令存取设有128个字的指令高速缓冲存储器,该高速指令缓存器组成为四条32字直接映射的高速缓存线(每个指令字16位宽)。
为确定缓存命中或缓存缺失,在每条指令执行之前,用指令标记(ICT0-ICT3)与PC的位8-15进行比较。如果确定PC与任一标记寄存器都不相配,则必须将含有下一条指令(由PC指向的指令)的新线装写入指令高速缓冲存储器之中。
PC的位7与6位确定指令将被装入哪条缓存线,由于指令缓存是直接映射的,因此这两位明确确定了要被装入的缓存线,若PC的位7和6是00,缓存线#0将被加载;同样,若位7和6是01,那么缓存线#1被加载。与被加载的缓存线相对应的高速缓存标记寄存器(ICT0-ICT3)将用PC的最高有效字节来加载。另外,指令高速缓存有效寄存器(ICVR)中的对应高速缓存线有效位将被置“1”。
高速缓存线从CMA的加载,引起指令的执行中一个时钟的延迟。一旦指令高速缓存器已被写加载,就不会因为从CMA中同时存取指令和数据而再受到时间损失,除非高速缓存器缺失。若应用能够全部装入高速缓存器,那么整个CMA都可用作数据存储器。应用必须保证高速缓存器不缺失。(3.3.2)CMA与MMA映象
与较早规定的联合机版本相比,CMA空间与MMA空间之间的映射已被简化。由于只有4K字节的实际存储器,因此指令与数据的存取可看见整个4K空间。分配与管理4K空间中的每个区域(指令或数据)则是程序员的责任。图3-8示出了作为指令或数据空间来看的4K空间中的前70个字节。(3.3.3)对CMA的直接和反向存取
CMA装备有允许其被直接存取和反向存取的机制,图3-9示出了CMA直接存取与反向存取的图示说明。在直接存取CMA之间,PE#0使用来自CMA行#0的数据,PE#1使用来自CMA行#1的数据,等等;在反向存取CMA期间,PE#0使用来自CMA行#63的数据,PE#1使用来自CMA行#62的数据,等等。
所有进入CMA的存取或是使用指针间接寻址(CMA〔Pn〕),或是使用指针间接后增量(CMA〔Pn++〕)。在以上两种寻址方式中都使用指针寄存器Pn去指定CMA中的一列。由于CMA中有64列,所以仅需要指针寄存器中的6个位(位5-位0)去直接存取每个列,直接存取CMA时,指针寄存器的位6是0,对CMA的反向存取是将位6设置为数值1而实现的。指针寄存器位7不使用。
这一机制有容许处理部件存取128个字节数据的优点。它还允许矢量在一个时钟中被“倒装”,进行合理的上移,上移可由以下代码字段来实现:
;被倒装的矢量是在CMA(基数0)的第5列
movi#$44,P0;#$44是64+4(即设置p0的位6和存取;
                ;列5(基数0)等
vmovCMA〔P0〕,V0;将“倒装”的列4移入v0
drotmov v0,V0;下移V0一个PE
vstore V0,CMA〔P0〕;倒装V0,并将其放回CMA的列4之中
这个机制对所有CMA数据存取(读和写存取)都是有效的,但对进入CMA的指令存取不起作用。(3.3.4)分配CMA空间
CMA是一组存储器单元,由程序员按需要分配,本节示出几种可以如何配置CMA的例子,以便为程序员提供最大的灵活性。
在第2.3节和2.4节中已经加以说明,CMA可以或者作为1024个连续的存储器单元出现,或者作为每个处理部件64个8位的存储器单元出现。这两种观点都是正确的,但若不去看在执行指令期间联合机是怎样使用CMA的就不完全了。
在下面各例中,例1是最简单的,它也将是我们讨论的起点。从这里开始,每个接下来的例子都将逐渐变得复杂一些,并且依赖包含在前面各例中的信息,因此在前进以前认真学习每个例子是明智的。(3.3.4.1)例1:仅用于数据存储的CMA
如图3-10所示,第一例是所有配置中最简单的。该例假设:1)所有计算数据被保持在CMA中;2)整个程序存留在指令高速缓存器内部(因此程序不占任何CMA空间);3)不使用push、pop、bsr、jsrri和jsrmi指令,且异常被关断(因此CMA不需包含一个栈区);4)jsrmi与jmpmi都不被使用(于是CMA不需包含跳转表)。
注意初始程序计数器(EPPC)设置为$0000,这将使联合机从IC开始执行程序(假设ICT0-ICT4=$00,ICVR=$0F,PBP=$00)。栈指针的初始值(EPSP)不怕关心,因为本例不使用栈。(3.3.4.2)例2:指令高速缓存器、PC和CMA页面
指令高速缓存器(IC)是一直接映象缓存器,它用CMA作为其主存储器。IC由4条线组成,每条线相当于CMA中的一个单列。CMA中的列可以以4个为一组地组合在一起,且每4列的一组被称为一个页面(如图3-11中所示)。每一页面中的第一列对应于高速缓存线#0,第二列对应于高速缓存线#1,第三列对应于高速缓存线#2,第四列对应于高速缓存线#3。
当来自CMA的一个列加载到IC的一条线中时,该列的页面号被装入与高速缓存线的相关联高速缓存标记寄存器(ICT0-ICT3)中。另外,与该线相关联的高速缓存标记有效位(ICV0-ICV3)在ICVR中被置位。
如图3-12中所示,程序计数器(PC)从逻辑上分成三部分:PC的最高有效8位反映当前指令的页面;PC的位7和6对应当前指令的线;PC的位5到0对应于该线中的当前指令。
当一个指令预取发生时,PC的高8位与PC位7和6所指示的线的IC标记(ICT0-ICT3)相比较。如果适当的高速缓存标记不等于PC的位15-8,或者如果适当线的高速缓存有效位未被置位(ICVR的ICV0-ICV3),则存在一次高速缓存缺失,且包含当前PC的CMA列被加载到由PC位7和6指示的IC之中,PC的位15-8被放入由PC的位7和6所规定的高速缓存线标记。(3.3.4.3)例3:用于程序和数据的CMA
本例考查程序刚好成指令高速缓存器(IC)稍大一些的情况,在这种情况下,部分程序必须被保持在CMA中,而大部分程序可位于IC中,所有前面例子中的其他假设仍适用于这一例子。
对图3-13(就IC而论)旨在解释以下几点:
1)程序包含129与160条指令之间(相当于5条高速缓存线;
2)联合机只有4条高速缓存线,因此某些来自程序的“外溢”不得不被存入CMA中。
由于联合机使用直接映象缓存器,因此事先能知道哪个CMA的列将被换入和换出孔。在本例中,列00与列04都需要使用高速缓存线#0,而高速缓存线#1、#2与#3将不会被重写(因此能被直接地放入IC),于是在CMA中无需为它们保留空间。(3.3.4.4)例4:程序移位
作为上例的转折,程序被向前移动128个字节。这意味着程序将从$80开始,而不是从$00开始(记住,联合机中的程序不必非从$0000单元开始不可)。因此程序计数器(EPPC)的初始值将是$0080。这也有着将程序在CMA中移动了两列的效果。
重要的是要注意,在图3-14中,高速缓存线#2现在是将被替换的高速缓存线(代替了上例中的替换缓存线#0)。这意味着高速缓存线#0、#1与#3将被替换。栈指针(EPSP)的初始值仍旧不必关心,因为尚没有启动栈和异常的指令出现。(3.3.4.5)例5:对例4增加跳转表
对于间接存储器指令,例如jsrmi和jmpmi,必须在CMA的前128个字节中建立一个跳转表,本例中的跳转表由8个间接的、16位地址组成,图3-15对其作了说明。
由于包含在跳转表中的信息被认为是数据而不是指令,因此每执行一次jsrmi与jmpmi指令,都将从CMA中,而不是从指令高速缓存器中取出间接地址(为了使指令高速缓存器中出现一个“命中”,所以微定序器必须完成一次指令存取)。该跳转表可动态更新,但是,如果使用了jsrmi与jmpmi指令,它就将在CMA中占据至少一线。(3.3.4.6)例6:对例4增加CMA栈
需要一级以上的栈的应用必须在CMA中分配栈空间。第一级栈(FLS)提供一个单一的栈单元,若有更多的栈就必须使用CMA了。如在图3-16的顶部看到的那样,栈指针(EPSP)的初始值是$003F。这意味着当联合机由复位产生时,第一个可用的栈单元将是$3F。
图3-16试图表示程序执行期间某一时刻CMA栈的状态。几个项已被压入CMA栈(用黑色阴影表示的区域),还有一些栈项尚未被使用(十字线阴影区域)。(3.3.4.7)例7:对例4增加矢量和标量存储
当应用中需要多于16字节的标量存储(G0-G7,P0-P7),或者需要多于8字节的矢量存储(V0-V7)时,CMA可用来为这两种形式的数据提供临时存储,见图3-17。
列01被用于标量存储,列$3E与$3F被用于矢量存储。(3.3.4.8)例8:把所有部分汇集到一起
作为最后一个例子,以上所有各例中的要求都被组合在一起,包括有跳转表、CMA栈、128字节的矢量存储空间(2列)、64字节的标量存储空间、2列空间的程序代码和58个64字节的矢量。见图3-18。(3.4)联合机初始化
在任何运算数据输入联合机前,该装置的大部分区域必须被初始化。在 RESET信号被认定并且被否定后,所有联合机的内部寄存器缺省为第2.3节“联合机主机可存取寄存器”中所规定的状态,需要被主机初始化的内部单元是系数存储器阵列(CMA)、微代码存储器阵列(MMA)和其他所期望的控制功能。(如果联合机程序包含的指令少于128个,则指令高速缓存器、标记寄存器和有效位而不是MMA将需要被初始化)。必须注意保证控制寄存器的复位状态能提供一个在网络处理前建立需求最小的状态。在内部,微代码指令组提供使初始化区段与循环区段在一起的能力。更详细内容看第3.6.3节“联合机指令流程的微观”。
最小初始化需求包括微代码存储器阵列和一些控制端口的信息流传输的信号标记控制寄存器。(3.5)端口操作
在联合机上引入有4个端口,以便于控制主机和例如联合机′的其他系统部件的信息流的高效并行传输,端口标有N、S、E和W分别为北、南、东和西。联合机的设计是利用这些端口将多个联合机连接在一起从而协调一致地工作。联合机的设计还使其在一维和二维阵列中都是规模可变的。以下叙述假设联合机系统建立在两维阵列中。
所有配置,状态,输入和输出值都可以通过这些端口由主机存取。联合机被设计成以两种方式之一操作,方式选择通过R/ S输入完成,该输入确定联合机是在Run方式下(R/ S为VDD电平)还是在Stop方式下(R/ S为GND电平)工作。联合机端口的不同运行情况取决于操作方式。有关具体的时间图信息参见第4节“联合机总线操作“。有关联合机的各种信号的说明参见第2.2节“联合机信号说明”。
Run方式用来允许执行联合机的微程序,Stop方式(也叫作Host方式)用来允许为初始化和调试而进行的系统主机对联合机内部资源的访问。端口可在Run方式下用作为神经网络层间通信的、或作为联合机装置之间的层内通信的连接总线。(3.5.1)主机传送方式
在Stop方式中,联合机支持两种不同形式的传送方式。它们是随机存取和流式存取。在随机存取方式下,主机提供地址和数据信息进行读、写。在流方式下,主机提供数据,而联合机内部地产生被访问的单元的地址。有关联合机总线端口操作的详细定时图参见第4.1节“联合机端口定时图”。
在联合机阵列中有两个信号用来作为芯片选择。这两个信号( ROW和 COL)提供了从联合机阵列中选出一个单独装置的机制。
随机存取操作中, ROW和 COL信号用来选择一个联合机以便存取。地址信息呈现于西端口和北端口,地址信息以向东和向南的方向流动直到汇集在被选中的装置上(即 ROW与 COL都被认定)。另一方面,数据从所选定的装置中沿向北(写操作)或向南(读操作)的方向传输。对只有 ROW或 COL之一信号(不是同时具有两者)的装置,地址和数据根据 ROW或 COL的认定,在垂直方向或水平方向传输。
在流式操作中(地址内部地产生),数据流向和流自阵列的南边缘或东边缘(而不是两者同时)。流操作基本上是填充或是排空阵列中一个列或一个行。利用 ROW和 COL线,还能选择某些子区段而只在阵列的一个部分上操作。
对于下面有关联合机存取方式的说明,参见图3-19所示有关联合机阵列的配置。(3.5.1.1)随机存取方式
端口操作方式的说明在联合机的引脚叙述,而不是从主机方面考虑。
随机存取方式的设计允许存取联合机中的单独寄存器,为了利用随机存取方式存取数据,主要装入地址(WD、ND)、数据(SD)和启动特定端口上的随机存取方式的控制信号(OP  NCI、 WCI、R/ W、 EN)。这些地址和控制信号被内部锁存和解码,以选择一给定的寄存器。在下一个时钟周期,被存取的数据将被传输。在一个写周期,数据将在CLK信号的上升沿被锁存。对于读,数据则将在时钟周期下降时被驱送出引脚。可以以随机方式被存取的寄存器表参见表2.5。(3.5.1.2)主机流式存取方式
流式存取方式允许主机将大量数据输入一组排列在一条链中的联合机,而不需访问内部寄存器。流式存取方式能用来初始化联合机,或用来保存联合机状态。为了用流式存取方式存取一个区域,对于东端口的流式读出,主机激活控制信号 ROW、 COL、 EN、S/ W和 WCI并接收ED输出的数据;对于南端口的流式读出,激活控制信号 ROW、 COL、 EN、R/ W和 NCI并接收ED输出的数据;对于东端口的流式写入,激活控制信号 ROW、 COL、 EN、S/ W和ECI并将数据放入ED;或对于南端口的流式写入,激活控制信号 ROW、 COL、 EN、R/ W和 SCI并将数据放入SD。控制信号被内部地锁存和解码以选择一给定区域。在下一个时钟周期上,被存取的数据开始传输。在一写周期,数据将在CLK信号的上升沿被锁存。在读时,数据将在时钟周期的下降沿驱送出引脚。
在流式操作时,主机流选择寄存器(HSSR)控制流到哪个联合机的区域去。在流式存取方式下,内部地址为用户产生。这由OAR1和OAR2寄存器来完成,传输的持续期间由DCR1和DCR2寄存器控制。另外在流式写入时,主机流偏移寄存器(HSOR)控制数据流的偏移,即何时开始填充。
在流填充操作开始时,HSOR被装入一个计数器,该计数器使流中数据的每个字节递减。当计数器到达零时,联合机开始从将流中数据复制到它的存储器之中。该机制允许在一个流式写入操作中联合机加载不同的、重叠的或相同的数据。
在流式读操作中,不使用HSOR,而使用 xCI和 xCO引脚,向行或列中的下一个联合机发出信号开始送出数据。流式读出由认定最西或最北的联合的 xCI信号开始,使这些联合机开始向东或南送出数据。当一个联合机结束时,向线上的下一个联合机发出信号,如此依序增加数据直到流结束。
在这种体系结构中的包括OAR与DCR寄存器的主要动机是允许一个单一神经细胞(一个能够跨过多个联合机的神经细胞)的系数的流式读出或写入。这种机制也能用来流式读出或流写入按照单个输入的联合机中的所有系数。是否使用DCR2和OAR2寄存器取决于被存取的逻辑空间(HSSR)。对于一维寄存器,如IDR或V0,只需使用DCR1与OAR1。图3-20示出DCR1与OAR1寄存器是怎样作为一维矢量寄存器工作的。
在一维流式存取方式中,OAR1寄存器中的值被用作为起始地址(联合机内部)。一个内部计数器(起始值为零)对于从流中复制或被写入流的每个字节都增加,当计数器等于DCR1寄存器中的值时,联合机从填充状态转换为充满状态。
在流方式下,总是有一个联合机在链中为第一个。线上的第一个联合机将往往使xCI输入激活,给它以控制总线上的数据的权力。在流方式下应考虑的另一件事情是将主机地址解码为联合机地址的接口逻辑。接口逻辑需要能够认定到的所有联合机上的所有控制线,这些联合机在流式操作中形成一个链。典型地,流式操作将从主机侧通过一个单一的主机地址来存取数据,该地址控制联合机侧的流式操作。更多的信息参见图3-24。
对于二维流式操作(CMA),采用一个第二寄存器组来控制流式存取。这两个寄存器是OAR2和DCR2控制寄存器。这两个寄存器与OAR1与DCR1寄存器的相同之处是,它们提供始地址(联合机内部)和一计数值。就像DCR1一样,也有一个独立的为DCR2设立的内部计数器。图3-21详细说明了四个流寄存器的工作情况以及怎样用它们控制CMA存取。(3.5.2)联合机传送方式
在Run方式中联合机可以从四个端口的任何一个完成写操作。这是在write指令控制下进行的。写操作的目的地(取决于端口开关和抽头)将是延着写方向上装置的IDR寄存器。例如,如果联合机从北端口写出,共享同一列的(上方的)装置有可能接收该数据。由write指令完成的传送方式正像主机流式存取方式一样。由于IDR是该操作的目的地,因此,另一组控制寄存器决定何时和在何地数据被写入IDR寄存器。该IDR可由输入变址或输入标记来加载。
采用输入变址,被捕获的输入数据是一串相连的输入样值。采用输入标记,输入流包含一蕴含样值计数(计数从零开始,每输入一个样值就被T黾S)。在标记捕获机制中,有一个与IDR中每个单元有关的内部标记。这两种机制之间的基本差异在于IDR地址寄存器增加的条件。有关这种捕获机制的详细说明参见第3.5.2.1节“输入变址”,和第3.5.2.3节“输入标记”。比较起来,下面的说明将描述第一捕获机制(输入变址),因为它与流式存取方式有关。(3.5.2.1)输入变址
利用数据向IDR加载的基本方法是输入变址方法。使用这种填充方法,IDR在某个循环计数开始被连续的字节加载。IDR寄存器包含一个循环计数,该计数表示何时数据应从数据流中装入IDR。IPR和ILMR寄存器决定输入样值将被放入IDR中的何处。ICR寄存器决定有多少样值被装入IDR之中。
当1)IPR与ICR寄存器被加载时;2)执行done指令时;3)使用IDRC寻址方式时;4) RESET信号被触发(1→0→1)时,IPR与ICR寄存器将生成影子。
IPR寄存器用来作为对IDR的一个变址去决定下个数据样值的存储单元。ILMR寄存器用来屏蔽(或不关心)IPR中的位位置。这为IDR提供了重制字节的灵活性。例如,如果IPR包含$00,ILMR包含$03,那么装入IDR的第一个字节将被放入单元$00、$01、$02和#03。下一个字节将被放入单元$04、$05、$06和$07,等等。对每个样值IDR将增加4,以便IPR指向IDR中下一个自由点。
有两个概念可能帮助我们理解怎样使用IDR和ILMP:主寻址与副寻址的概念。在输入变址方式期间,当产生一用于存取IDR的内部地址时,IPR负责保存“主地址”,该主地址指向IDR的一个单一单元。当IPR的内容与ILMR的内容相结合时,便产生一组“副地址”。在下面的例2(ILMR=$3)和例3(ILMR=$4)中,其图解中有两种不同级别的阴影,深灰色阴影代表用“主地址”(只用IPR)放入IDR中的数据。浅灰色阴影代表用“副地址”(使用IPR与ILMR)放入IDR中的数据。(3.5.2.2)使用ILMR的例子
这里再重复Run方式下使用ILMR装入IDR的规则:
·ILMR的各位在内部产生的地址中的作用为“不必关心”。意思是数据被装入到那些在地址“不必关心”时所选中的IDR单元之中,例如,ILMR值为00110000,“不nt”IDR地址的位4和5,意思为同样的数据被送入IDR单元00000000、00010000、00100000和00110000。
IPR的增加与ILMR中的最低有效“0”的单元成比例。即,如果最低有效“0”在位单元0.那么每次数据被放入IDR时,IPR都将增加20,即1。如果最低有效“0”是在位单元3,那么IDR每次将增加8。
在以下三个例子中,流入联合机的数据由图3-22所规定。每个框表示一个8位数据。例1:ILMR=0
如果ILMR=$00(即主复位产生的情况)且IPR=0(指向IDR〔0〕),那么每个被装入IDR的新数据被放入下一个可能的IDR单元。表3.3为发该数据流程的表格式说明。例2:ILMR=$3
若ILMR=$3(00000011)且IPR=0(指向IDR〔0〕),那么装入IDR的第一个数据将进入IDR〔0〕、IDR〔1〕、IDR〔2〕和IDR〔3〕,且IPR将增加22(4),以使新的IPR单元是IDR(4)。将被写入IDR的第二个数据将被装入IDE〔4〕、IDR〔5〕、IDR〔6〕和IDR〔7〕,且IPR又增加4。一旦已接收到16个数据,IDR就被完全装满在表3.4中,主地址用深色阴影代表,副地址用浅色阴影代表。该数据流程的表格说明在表3.4中。例3:ILMR=$4
若ILMR=$4(00000100)且IPR=0,那么被装入IDR的第一个数据将走到IDR〔0〕和IDR〔4〕且IPR增加20到单元IDR〔1〕。被装入IDR的第二个数据将装入IDR(1)、IDR〔5〕,且IPR增加到IDR〔2〕。表3.5中,主地址用深色阴影表示,副地址用浅色阴影表示。该数据流程的表格式表格说明在表3.5中。
在表3.5中假设IDR从$00开始,每次一个新数据放入IDR就增加1。(这个数据由表中的深阴影项表示)。ILMR的作用就像IDR的“地址屏蔽”,在此例中,ILMR中的值是$4,这使位2(从位0数起)为“不必关心”的。IDR地址的“不必关心”使浅阴影的数据值地装入IDR。
插在t3与t4之间、以及t7与t8之间的数据的奇怪转变正是直接由“不必关心”造成的。t0和t4时刻,有效IDR地址是00000x00(IPR值00000000与ILMR值00000100相结合),因此单元00000000与00000100都被同一个数据(10)写入。同样,在时刻t1和t5,有效的IDR地址是00000x01,因此单元00000001与000000101都被同一个数据(23)写入。(3.5.2.3)输入标记
为提供更多的灵活性,设置了输入标记捕获制。这种机制可能代替输入变址进行装入IDR的操作。这种捕获机制由在端口控制寄存器(PCR)中的填充方式(FM)位来启动。允许这种捕获机制用于计算操作中的IDR装入,该计算操作需要特殊神经网络连接。
这种捕获机制允许联合机以随机增长的次序从输入流中有选择地抓住输入样值。为了利用这种机制存取IDR,主机首先将待使用的标记装入ITR,然后主机将设置PCR中的FM位的值,从而启动ITR进行IDR填充。主机将数据和控制信息装入一个端口,该端口是向联合机链送出数据的诸端口之一。控制信号被内部地锁存和解码,当数据通过联合机时,一个内部计数器被增量。当计数值与当前的输入标记相符且 xCI输入被开启时,输入样值被装入IDR之中。该过程连续进行,直到所有输入样值被装入IDR之中、或者达到ICR计数、或者达到一个不再上升的标记值时为止。
使用输入标记捕获机制的例子在图3-23中给出,该例示出整个有6个样值的输入帧(其中某些未被使用),以及一个三个神经细胞的输出层(其中并非所有连接部被使用)。为说明清楚起见,此例中只示出了CMA、ITR和IDR寄存器。为实现这个例子,输入标记机制只用来装入那些所需要的输入样值(注意ITR中的值作为将被捕获的输入样值的计数值)。为保证输出神经细胞只使用所需的系数,CMA中保持了一个位压缩屏蔽,该屏蔽被用来装入矢量机处理屏蔽位(VT),用它加载VT位,从而指示哪些系数参与矢量机中的传播函数,vlshftt微代码指令用来取出该位压缩屏蔽位并把它们移入VT位。
输入标记捕获机制与矢量机处理屏蔽位(VT)一起提供了实现非全连神经网络的有效方法,即提供一个使用接收域概念的示例。(3.5.3)对联合机的主机存储器映象
为了使主机能够访问联合机的内部单元,必须有某种形式的接口电路对主机总线信号进行解码并将它们转变成适合于联合机的控制信号。虽然接口逻辑取决于特定的主机,但对主机来说存储器映象却有些类似。图3-24给出了一个可能的存储器映象。
图3-24详细说明了图3-19中的总线的存储器映象。在该例中有四个联合机装置。图3-24中有四个8K字节的区域,每个区域为一个联合机的随机变换。在这个32K字节的区域下面是流单元。从主机侧看,流式操作就像将数据传输到一个单独的单元。
接口设计者可选择,将流单元映射到任何需要的地址范围。这允许在接口逻辑与主机地址空间之间进行折衷选择。(3.6)联合机操作
联合机基本为一个8位并行处理阵列,它取入一个8位输入样值,并对该输入进行并行操作。各种事件根据定入MMA的微代码而发生。本节将叙述在有效输入数据存入IDR后所发生的宏操作与微操作。为便于讨论,图3-25给出了联合机内部结构方框图。该方框图示出CMA由矢量机存取并可对IDR寄存器中的单元并行存取。(3.6.1)联合机的宏观
联合机可以是空闲、输入、执行和输出四种状态之一。有关的转换流程参见图3-26。
输入状态功能已在第3.5节“端口操作”中讨论了。在这一讨论中,假设输入状态与执行状态不同(有一种联合机配置允许同时进行数据输入和矢量机执行。这将在后面更详细地讨论)。当所有样值都装入IDR之后,联合机转换到执行状态。
在执行状态,联合机将通过微代码例程运算输入数据和系数数据。可以有许多如用户需要的不同微代码例程(直到MMA被充满)。标量机所提供的循环结构允许联合机根据系统配置和所实现的范例完成固定次数的微代码执行。去选择执行哪个例程要根据联合机是在前馈信息流中还是在反向的信息流中(在后面将详细讨论)。
在循环的终点,联合机能进入输出状态。这一点上,联合机可开始在端口将数据传输给联合机′。由于执行write微代码指令,联合机成为总线主控者时,就产生输出状态。因此,严格地说,输出状态是执行状态的一个子集。这里对联合机装置间的传输数据的讨论作了说明。在全部数据被传输之后,联合机进入空闲状态,这时主机可能收到一中断信号,表明联合机(子系统)已为另一个输入矢量作好准备。然后,主机存取联合机状态寄存器,从而清掉联合机已完成的输出阶段的状态。主机提供下一个输入矢量并重复以上过程。
联合机可以根据联合机′的命令进入输入/执行状态,这取决于联合机′中的微代码。这种情况出现在当联合机′已确定一个神经细胞(或所有神经)的系数需要调整以便学习的情况下,当联合机处于空闲状态,联合机′通过端口向联合机发出命令指示某个动作。该动作可以是调整神经细胞的系数,或是向系统中加入一个新神经细胞。这一命令功能可以几种方式来实现。联合机′可反过来向联合机发出一个信号,告诉它将完成什么动作。
在联合机′向联合机传输回数据的情况下,将出现向输入状态、然后向执行状态的转变,回送数据可有两种形式。第一种,它可以是矢量效用的数据(如反向传播的错误矢量)。第二种,它可以是指挥联合机去执行某个例程的信号。于是从空闲状态转换为输入状态或是执行状态是可能的。在这里,可执行一个微代码例程(非前馈)去进行某些有关神经系数的学习算法。(3.6.2)主机和联合机交互作用的详细说明
本节给出主机、联合机与联合机′之间的作用流程的说明,这些说明将示出几种只描述主机和联合机交互作用的情况,以及一种有联合机′参与的情况。
从主机向联合机输入数据有两种基本方法,第一种是先填充后计算,另一种是边计算边填充,两种填充方法中主机所完成的动作十分相似,但完成动作的次序不同。这种分类方法允许用户确定IDR加载与微代码计算之间的并行量。(3.6.2.1)输入有效位
IDR寄存器包含矢量机用于传播函数的输入数据,每个IDR中寄存器单元包括一位有效位。
当IDR单元被写入时,这些有效位被置“1”,它们可通过这样三种不同机制之一清零:1) RESET信号;2)clearv指令;3)restart指令。在Run方式下,联合机开始执行指令。当被引用的IDR单元为无效时,矢量机将等待有效输入数据。当矢量机查到有效输入数据时,它就执行包含在MMA中的操作。矢量机用P〔0〕-P〔7〕寄存器选择被使用的当前输入样值。P〔0〕-P〔7〕指针还选择有效位,以便使矢量机可以确定输入样值是否有效,正是IDR的有效位形成了控制用于有效数据的矢量机动作的操作的逻辑,图3-27从逻辑上示出IDR有效位是怎样建立的,IDR有效位实体地位于每个处理部件的矢量进程控制寄存器(VPCR)中。
如前所述,P寄存器用来选择一个单独IDR单元进行操作。然而,IDR寄存器也可用来作一个矢量源。在这种情况下,采用一种更复杂的规则来确定什么时候IDR寄存器有效。这时所有有效位都被使用而不是仅仅检查一个有效位。为了确定IDR寄存器是否有效,在有效位以及与该IDR单元对应的有关的PE的VT位之间进行检查。如果VT位清零(PE未激活),那么有效位的状态为“不必关心”的状态。如果是另一种情况,VT位被置“1”(PE激活),那么有效位的状态被用来确定IDR寄存器的有效性。联合机将一直等待到所有有效单元(一组VT位和一组有效位)为真,才被允许进行处理。
在以下叙述中,流程图中每个方框中的号码都与图3-26中的状态号码相对应。在以下的流程图中,只描述有关的动作。假设主机,联合机与联合机′都被初始化为所需状态,因此在流程图中也只描述了相关的信息。以下图解参见图2-6中给出的总线互连结构。(3.6.2.2)先填充后计算
在这种情况下,主机填充IDR,然后指令矢量机执行传播函数,一个独立的联合机系统的基本流程示于图3-28。
在该流程中,联合机从复位状态开始,下一步骤由主机完成。主机然后将数据加载到IDR寄存器上(记住被主机写入的单元自动地将本单元的有效位置“1”),主机加载最后一个IDR单元以释放联合机微代码(记住联合机等待有效数据)。联合机中的第一个move指令用来延迟联合机,直到整个IDR被加载。这时,联合机开始计算装入IDR的数据。在计算终点是done/clearv指令。这时,联合机清零有效位并待待主机,主机利用轮询例程或中断例程去了解联合机结束的通知。这时主机将用新输入数据写入IDR,流程如前面一样继续进行。
如果应用中需要联合机多次运算输入数据(搜索输入矢量中的窗口),那么将消除clearv指令。(3.6.2.3)边计算边填充
这种情况下,主机与联合机之间的并行性比先填充后计算时的情况大得多。一个独立的联合机系统的基本流程在图3-29给出。
这个流程中联合机从复位状态开始。由于IDR包含无效数据(有效位在复位状态被清零、且还未被主机加载),所以矢量机正等待数据。这时主机开始向IDR装入数据。一旦主机开始向IDR之中装入数据,矢量机就开始计算传播函数。因此,与前一流程中输入与执行状态有区别的情况不同,这一流程(边计算边填充)使输入状态与执行状态明显重叠。计算结束时,done/clearv指令被执行(该指令将使IDR有效位清零)。这时,联合机待等主机。主机将利用一轮询或中断例程去查看联合机结束的通知。(3.6.2.4)联合机和联合机′的交互作用
本节中讨论联合机与联合机′之间的交互作用。不要忘记联合机′被用来聚集从几个联合机中产生的部分神经键结果,并执行在结果的总和上的输出函数。这需要联合机在某种程序控制下将该输出“送到”联合机′。另外,联合机′可将信息返回联合机(如调整一层上的系数,或所有系数)。基本流程在图3-30中给出。
这个流程中,联合机在复位状态开始,由于IDR包含无效数据(有效位在复位状态被清零目还未由主机加载),所以矢量机等待数据。这时主机开始向IDR之中装入数据。一旦主机开始向IDR装入数据,矢量机就可以开始计算传播函数。待前馈计算阶段结束时,在联合机中执行一条write指令,该指令将V〔0〕寄存器中的值送入联合机′。在联合机′中有一IDR引用。该引用使联合机′等待,直到IDR中出现有效数据为止。
在联合机′中,例程结束时产生一write G0指令,送回联合机,通知其去完成某些动作。在联合机中,该指令循环等待联合机′。此时,可选择另一例程在联合机中开始执行。该例程大概能够调整一个或所有联合机中系数。另外还应记住,联合机′向联合机的传输是广播式的,以致所有联合机都接收由联合机′传输的内容。在这一计算结束时,有done/clearv指令。此时联合机对有效位清零并等待主机。主机可利用轮询或中断例程去查看联合机结束的通知。(3.6.3)联合机指令流程的微观
联合机在执行状态时,标量机正在向矢量机发出指令。这些指令(见第2.5节“联合机微代码指令集概述”)允许构成许多不同的传播与聚集算法。还有在模糊逻辑的应用中实现模糊化的灵活性。本节还将叙述标量机的微操作。
标量机微代码指令流程在图3-31中用图解表示。halt、done和dskip指令在图3-31示出。
在微定序器中有一个微代码程序计数器PC。复位后,PC值由包含在EPPC寄存器中的地址加载。SP寄存器由包含在EPSP寄存器中的地址加载装入。SP寄存器被加载之后,预取第一条指令。当联合机开始执行微代码时(当指示的IDR单元为空,且输入开始被装入时),MMA中的微代码指令被存取和执行。如果例程序请求输入还未到达的数据(一个IDR单元还未被标准明为有效)时,微定序器一直被拖延,直到数据被放入IDR。在接近前馈例程结束时,有一个dskip指令,该指令关闭循环。执行dskip指令时,PC寄存器由包含在dskip指令中的PC值加载,且被选定的G寄存器减一。该流程一直继续直到G寄存器被减至零为止。这时联合机可以(通过使用done指令)退出执行状态,并进入如前所述的输出状态。
选择另一个微代码例程,装入MMA,是由联合机′送回的可能的命令决定的,在前馈计算与向联合机′传输部分神经键结果的结束之处,联合机′可指示联合机应采取什么动作。在联合机/联合机′命令结构中,联合机′可指出执行哪个例程,这些例程的流程与前馈例程的流程相同。在该例程结束时,联合机准备好开始进行另一个前馈循环。(3.6.4)联合机的异常模型
有几种形式的异常可能在联合机中出现。其中某些是与标量指令有关,某些是与矢量指令有关。另外一些与多个联合机的交互作用有关。本节将叙述各种可能出现的异常,以及联合机如何响应。
联合机将只在指令边界上响应异常,该规则的例外是端口错误异常。该异常中,只要检测到异常,指令(最可能出现的是写形式指令)立即结束。
当一个异常被检测出来,联合机将完成三项任务。首先,除复位异常之外,联合机把当前PC值装到栈上,PC值将是下一个可执行指令的地址。然后,联合机将从异常指针表中的矢量表中获取异常矢量(见第2.3.44节)。最后,联合机将在对应的异常处理程序中起动异常处理。(3.6.4.1)复位异常
当两个事件被检测到时,将发生复位异常处理。 RESET线必须经过认定然后被否定,而R/ S线必须在Run方式下。这两个事件发生后,联合机将开始复位异常处理。联合机首先标出FLS寄存器为空,表示没有被存储的栈指针值。然后联合机将从EPPC和EPSP中分别取出PC与SP的初始值,并从由PC访问的第一条指令开始执行。(3.6.4.2)标量异常
有两种可能的标量异常:1)标量被零除,2)算术溢出。两种形式的标量异常均可用EMR(异常屏蔽寄存器)中的SDEM和SVEM位屏蔽,即,异常处理可被允许或禁止。对于标量异常,不使用FLS寄存器(即便它是空的)。根据检测,PC值被装到栈上,合适的异常矢量被取出,且异常处理程序被执行,异常例程序完成一条rte指令将使联合机返回到正常指令流中。(3.6.4.3)矢量异常
有两种可能的矢量异常:1)矢量被零除,2)算术溢出。两种形式的矢量异常都可用EMR(异常屏蔽寄存器)中的VDEM和VVEM位屏蔽。即异常处理可被允许或禁止。矢量异常与标量异常有些不同,其中任何一个PE都可能引起异常。确认引起异常的PE(或几个PE)正是异常处理程序的责任。矢量异常时,不使用ELS寄存器(即便它是空的)。根据检测,PC值被装到栈上,合适的异常矢量被取出,且异常处理程序被执行。在异常例程序时完成一条rte指令将使联合机返回到正常指令流中。(3.6.4.4)端口错误异常
端口错误异常可由指令或抽头与开关配置引起。有四种类型的端口错误异常,即IDR争用、端口冲突、端口交错与开关异常,对所有访问都调用端口错误异常处理程序。确定端口错误是由以上四种异常中的哪一种引起的责任由端口错误异常处理程序来承担。该处理程序可通过询问APMR和PCR寄存器来确定异常的类型。
交错与冲突异常是具有外部数据移位的内部写指令的结果,因此装入栈中的PC值,将指向下一个可执行指令。在争用的情况下,联合机可以也可以不正在执行指令。它也许正停在done或halt指令上。记住,争用是在Run方式下同时向联合机写入的结果,因此PC值可以是也可以不是有效的,无论在争用异常时联合机的状态如何,异常处理程序都被调用。遇到一条rte指令,先前的状态被恢复(即在done与halt下等待)。(3.6.4.5)多个端口错误异常的解释
表3.6示出了所有可能的奇异端口错误异常。如果PCR与APMR中出现任何其他的位组合,则是由多个端口错误异常引起的,在下面讨论中叙述了多端口错误异常的5个例子。
当多端口错误出现时,PCR将与APMR结合在一起使用,来确定错误原因,端口错误产生内部异常状态,该状态使PC和SP值压入栈中,且端口异常矢量将从EPPE寄存器取出。端口异常仅仅在Run方式操作期间发生。
重要的是要注意PCR是一个控制寄存器(反映当前抽头与开关设置),APMR是一个状态寄存器(反映当前的通过联合机的数据移位)。只利用APMR本身不足于确定端口异常的原因。
观察表3.6的另一个方法是示出APMR中的哪些位被PCR中的位所关注。由于端口冲突异常与PCR的位设置无关,因此这张表并不完全,表3.7提供了有关APMR的更多信息。例1:N-W IDR争用
第一例涉及单一错误情况,可从表3.8中的PCR设置看出,北端口与西端口的抽头位被闭合(完成连接),数据同时在北、西端口被写入。这造成IDR资源争用(它们都正试图同时向IDR写入),而联合机进入异常状态,图3-32说明了例1中的数据移位。例2:N-W IDR争用/E端口交错
该例涉及两种不同的错误情况,在图3-33中作了说明,表3.9中示出了例2中激活的位,像上例一样北和西抽头位被置“1”,且东一西开关也被置“1”。向北和西端口的外部写入引起一个N-WIDR争用异常。由于E-W开关闭合,与微代码启动的至东端口写同时进行的对西端口外部写入将引起E(东)端口交错异常。例3:N-W IDR争用/E开关冲突
本例中(见图3-34和表3.10)北和西抽头位被置“1”,且东-西开关被置“1”。数据同时写入西北和东端口。与前例一样,当北和西抽头位被置“1”时,同时向北和西端口的写入将引起IDR争用异常。由于东-西开关闭合,同时向东和西端口的写入将引起东-西开关争用。例4:E端口交错/E端口冲突E-W开关争用
本例中(见图3-35和表3.11)东-西开关被置“1”。外部数据正进入东、西端口,同时还有微代码启动的向东端口的数据写出。由于开关闭合,则外部西端口写出与内部东端口写出相结合而引起一个东端口交错异常。内部东端口写出与外部东端口写入相结合就产生一个东端口冲突异常。最后,由于东-西开关闭合,(外部)东端口与西端口的写入引起一个东-西开关争用异常。例5:N-W IDR争用/E端口交错/E端口冲突/E-W开关争用
在这最后一个例子中(见图3-36和表3.12),东-西开关置“1”,北和西抽头位也置为“1”。由于内部产生写,数据正向东端口写出,同时,数据还正被写出北、东和西端口。由于开关闭合,内部东端口写出与外部西端口写引起交错异常。内部东端口写入与外部东端口写出引起东端口冲突。同时的外部东和西端口写与东-西开关置“1”,引起东西开关的冲突异常。北和西端口同时外部写入,与北和西抽头位置“1”,将引起N-W IDR冲突异常。(3.6.5)微代码程序结构
本节将给出几个微代码程序段的结构。第一段程序将示出内部寄存器的初始化,然后示出转变到循环区段之中以便为联合机块中的所有神经与神经键计算神经键函数。第二段例程将示出一个由联合机提供的内部循环能力的例子。第三程序段示出并说明了在两联合机之间传递信号的机制。第四程序段示出并说明了矢量机中条件执行机制。最后一例是代码字段,说明了减小的浮点例程是怎样构成的。(3.6.5.1)初始化和循环
第一段例程实例是一个简单的积之和函数,用于求装入IDR的输入与装入CMA阵列中的系数的乘积之和。参考图3-37。当例程开始时,用指令来初始化P〔0〕和P〔1〕指针,并加载G〔0〕寄存器。注意,这些指令只执行一次,这是因为repeat指令只是用循环起始PC、结束PC与计数值(PBR,RER和RCR值)来初始化循环。该机制向微代码例程提供初始化区段和循环区段。
该循环包含用来执行积之和函数的指令。第一个指令将当前选中的系数从CMA中移入VD寄存器,下一步完成当前输入值与V0值的相乘(记住,P指针选择使用哪些值,++记号使该指针寄存器的内容在指令结束时增加)。下一条指令将积的最低有效字节(V1中)加至V3寄存器中。再下一条指令将V0寄存器中的最高有效字节及来自上一次相加的进位加入V2寄存器中。当最后的加指令结束时,PC等于RER寄存器中的内容。根据这一条件,RCR寄存器减少并被检测是否为零,如果结果是非零值,RBR寄存器的内容传递给PC,且循环继续。最后RCR计数器为零,执行将下行至done指令。此时,联合机从执行状态转变为输出状态。(3.6.5.2)多重循环
第二个例程示出了说明由G寄存器给出的内部循环能力的指令段。图3-38示出了一个说明双重循环的代码实段的程序。在该代码字段的开始,一个一般的操作码被执行(只是为了填充本例)。在这一点上,要执行的是外循环,一个新的循环计数被装入G0寄存器。内循环一直到G1计数器达到零才被执行,此时内部寄存器(RBR、RER、RCR)用来确定何时内循环结束。以外循环dskip指令继续执行循环直到外循环计数达到零并且done指令被执行为止。dskip指令减小所选择的G寄存器,然后检测G寄存器是否为零值。这种类型可被用来形成多重循环。记住,repeat指令只可以有一级(因为只有一套RBR、RER和RCR寄存器)。(3.6.5.3)两个联合机之间的信号传送
本节提供的代码字段说明了在两个(或更多)联合机之间信号的使用。基本机制是利用IDR中的有效位拖延指令执行到正确的时刻。在这种情况下,被传递的数据是将被执行的另一个例程的地址。这时联合机需要来自另一个装置的信号,要被执行的代码应将IDR寄存器中的有效位清零。然后微代码存取将被写入的IDR单元。当另一个联合机对IDR寄存器完成write微代码指令时,等待的联合机采取某种行动。图3-39列举了一个这样的例程段。(3.6.5.4)条件执行
条件指令后面的基本思想是清零(或设置)处理屏蔽位VT。正是这个VT位控制处理部件(PE)中的微代码指令的操作。在此例中八个矢量寄存器中的四个被检测,在这些检测的基础上某些处理部件执行指令而另一些不执行。表3.13中的状态信息参见图2-75的状态号码。本例假设所有PE都以VT=1、VH=0开始。前两个操作码(操作码1、操作码2)由全体PE执行。vifeqV0,V4指令命名PE2、PE3、PE4中的VT位被清零,这使得操作码3只由PE1来执行。下一个velse指令允许由PE2、PE3、PE4来执行操作码4,vifeq V1,V4指令使PE2的VT位保持为“1”,而PE3和PE4的VT位清零。请记住,PE1已从可能执行指令的PE表中落榜,该动作使操作码5在PE2中执行,接下来的velse指令允许PE3与PE4执行操作码6,vifeq V2,V4指令使PE3中VT位置“1”,使PE4中的VT位清零,这使操作码7只能在PE3中执行。velse指令允许PE4执行操作码8指令。最后的vendif指令使所有PE复位为它们的pre-vif状态,于是PE1、PE2、PE3和PE4都执行操作码9。这就是执行vif-velse-vif-velse-vendif形式的指令的基本机制。表3.14提供了处理部件寄存器的内容。(3.7)微代码启动的端口写操作
当联合机在Run方式中时,有四个相同端口,它们可便于控制主机和其他系统部件,如联合机′,的高效并行的信息传输。联合机的设计能使其利用各端口将多个联合机连接在一起去协调一致地工作,将多个联合机连接在一起,不需要外部逻辑。有关例子参见第3.8节“联合机总线布置”。
端口的设计能使其为联合机提供一个简单机制,该机制能使联合机向联合机′传输部分神经键结果去求总和。该传输是固有地流式的,数据量是可由联合机程序员来控制的。记住,在Run方式下,所有传输都是来自主机的同样的流传输,所传输的数据量或是由指令(按字节的标量写传输)控制,或是由标量寄存器的内容控制(例如从PE(0)开始和以PE(n)结束的矢量写)。
数据传输方向总是写操作,并且由write微代码指令控制。在E/W总线上的信息流程走向如下。当标量机退出计算状态,每个装置都要将数据送往联合机4′装置。在联合机0中write指令无条件地执行。另一方面,联合机1装置需等待联合机0(联合机2与联合机3也如此)。该机制使几个成一行的联合机之间的数据移动与一个联合机′装置相协调。这种监视机制与第3.6.5.3节“两个联合机之间的信号传送”所述的信号传送的例子非常相似。应注意,数据传送不限于东西传输,在Run方式下数据可以沿四个方向中任何一个传输。
在具有未用神经细胞的系统(一个被部分使用的联合机)中,用户需要去管理那些未用单元中的值,以免它们与该神经网络中的正常操作发生冲突。
当链中的最后一个联合机结束向联合机′传输数据时(它必须知道有多少个支持联合机),联合机的输出阶段就完成了。这时联合机′能够指出任何应采取的行动。联合机/联合机′系统应当具有通讯协议,在需要的时候它能使联合机′将命令和数据信息反向传送给联合机。(3.8)联合机总线布置
本节将叙述总线端口开关与抽头结构基本的思想,它使联合机能在许多不同总线布置中使用。本节还将叙述几种对于联合机端口的能力是可行的总线布置。(3.8.1)联合机端口开关与抽头
联合机包含灵活的端口开关与抽头机制,它能使出现在一个端口的数据向前传送到另一个端口(具有一个时钟周期的延时),端口开关由联合机端口控制寄存器(PCR)中的NSS与EWS位控制。抽头位也由该寄存器控制。这种抽头控制功能允许出现在一个端口的数据被装入芯片中的IDR寄存器。这使联合机有能力仅向前传输数据,或在向前传递数据的同时窥视或捕获它。必须注意,在Run方式下的加载机制被用来加载IDR。有关更多信息参见第2.3.6节“端口控制寄存器”,图3-40示出该功能的象征性表示。(3.8.2)总线端口冲突与出错
一般可能出现三种类型的情况。这三种情况中的某些被认为是致命的,并将使标量与矢量机执行异常处理。有关表示这些情况的状态参见第2.3.7节“联合机端口监视寄存器(APMR)”,有关更详细的端口错误的异常处理的说明参见第3.6.4.4节“端口错误异常”。(3.8.2.1)联合机碰撞条件
当一外部操作(其向联合机写入)与一内部写操作相冲突时,发生碰撞情况,由于控制线 xCI与 xCO)的定时,使得在电损害发生之前有足够的时间检测该条件。(3.8.2.2)联合机争用条件
由于在特定联合机内部的开关与抽头的设置,引起争用,当对联合机进行两个外部存取时,发生争用。记住,在Run方式下,所有操作目的地都是IDR,因此两个外部写操作会争用IDR。(3.8.2.3)联合机交错
当传输中的数据(通过闭合开关)与来自-write指令的数据发生交错时,就出现交错条件。当多个联合机失去与数据传输相关的同步时,也出现这种条件。(3.8.2.4)联合机开关争用
当相对的两个端口被同时写入,且连接开关闭合时,发生开关争用。(3.8.3)联合机环形结构
在环形结构中,两个端口被用来连接环形配置中的联合机。详细情况在图3-41中示出。
在环形结构中,端口开关可被用来隔离环的不同部分,提高系统的并行性。记住,开关与抽头控制既可由主机又可由微代码程序来更改。环形结构提供重新配置的能力,在环形结构中,可使用一种方式来构成微代码与主机使得网络能随时间变化。动态重新配置能力是该结构的主要特性。到达环的数据可由北端口或南端口提供。
图3-42提出了一种可能的环形配置,该列中有6个联合机装置在前馈网络中连接起来。联合机0到联合机2为第一层,联合机3到联合机5为第二层。如在本例中可以看到的,在对于数据计算与传输存在着可观的并行能力的可能性。在进程的计算与聚集阶段,第一层可以正在处理n+1时刻的输入样值,而第二层(联合机3到联合机5)可以正在计算n时刻的结果。同样,对于数据传输,联合机5可以正在输出n时刻的结果,而联合机2则正在传输n+1时刻的数据,主机正在输入一个n+2时刻的新输入帧。在图3-42示出的例子中,开关和抽头的设置可使各层隔开,抽头设置还示出开关中的数据如何流动(即哪一装置正在接收数据)。(3.8.4)二维联合机结构
联合机被设计为二维互连的。联合机利用四个端口与其相邻的联合机的互连与前面描述的环形结构相类似。它提供行和列的重新配置能力,这取决于对阵列的应用,图3-43示出了一个小的联合机二维阵列。
(第4节)联合机总线操作
本节描述联合机的北、东、南和西端口的定时关系,并分成三个部分进行讨论。第一部分涉及联合机主机存取特有的定时(即随机存取定时和流存取定时)。本节的第二部分涉及作为响应write指令的主机装置的联合机特有的定时(注意这些write的目的地总是接收装置的IDR寄存器)。第三部分涉及其它定时,诸如done(及 BUSY)、R/ S、 INTR、 RESET及1149.1检测端口定时。表4.1提供了定时图的快速检索。
(4.1)联合机端口定时
联合机端口构成了主机与联合机子系统之间的主要接口。所有的初始化信息和数据正是通过这些端口传送的。联合机端口是完全同步的,并利用CLK信号来为联合机和主机系统之间的传送计时。这些端口的行为取决于R/S控制线。正是此线决定了联合机所进行的存取的类型(主机或联合机主控器)。当R/ S处于逻辑1时,联合机处于“Run”方式,当R/ S信号为逻辑0时,联合机处于“Stop”方式。“Run”方式是用于联合机的微程序执行的,而“Stop”方式是用于主机存取的。各联合机端口是8位宽的,它支持操作的随机存取和流式存取方式。对于某些操作,多个端口参与联合机的存入/取出。
端口信号与CLK信号间的一般关系,是至端口的所有输入及双向输入信号均被内部地锁存在CLK信号的上升沿。相反,所有输出及双向输出均在CLK信号的下降沿被启动。
联合机与主机之间的数据传送涉及下列信号:
*数据总线xD〔7∶0〕
*控制信号( xCI, xCO,R/ W,OP, EN, COL, ROW)
当联合机处于“stop”方式时,所有控制信号都是单向的,而数据xD〔7∶0〕信号是双向的。主机通过发出利用简单握手协议的控制信号以确保数据的正确移动,来使数据进出联合机。R/W和OP线控制所进行的操作的种类,而 EN、 ROW及 COL信号起装置选择和数据路由控制的作用。 xCI和 xCO线在被激活时,表示有效的数据是在数据线上。
当联合机处于“Run方式时,控制信号 EN、OP及R/ W是“不必关心”的。 xCO及 xCI线执行与它们在“Stop”方式下所执行的相同的功能。信号 ROW及 COL现在是双向的,并参与最大值及最小值指令。只有写操作(数据流出联合机主控器)是被充许的。数据传送受write指令的控制。在微程序的控制下,发出一个write指令,它把数据传出一个联合机端口并送到相邻的联合机器件的IDR。根据抽头及开关设置,被写的数据将流经和/或被存入相邻的装置。
该联合机装置被设计为在两维阵列中工作的。以下描述参见图4-1。对于随机方式的存取,地址信息从陈列的北和西侧流到 ROW和 COL信号两者都激活的装置。有激活的 ROW或 COL之一(但不是二者同时)的装置参与地址/数据移动,但本身不提供数据。存取的数据流向/自南边并流到选定的装置( ROW和 COL均是激活的)。
对于流式存取,数据可流自南或东边之一(但不是二者)。在此情况下一列或行被选出,以供流向/自。鉴于对流式操作不要求地址(它是内部地产生的),故数据流向/自选定的装置并流向陈列的南或东侧。
以下段落描述对主机及联合机总线周期两者的随机及流式操作方式的总线周期。对在以下段落中所用的符号的描述,请参见1.3节的约定。
(4.1.1)主机随机存取
图4-2显示了主机随机存取方式的读和写操作的定时。回想到对随机存取,地址信息从北和西端口流入联合机且数据流入或流出南端口。以下流程描述了发生的操作的序列(OP==1)。
时钟周期2
R/ W、 ROW、 COL、OP及 EN信号被认定,以表明要发生随机存取读。 WCI及 NCI信号被认定,以表明地址信息将出现在下一时钟周期中。
时钟周期3
在此周期的开始,前述控制信号被内部地锁存和解码,以启动对被驱动到北和西端口的地址信息的锁存。另外 SCO也被驱动出,以表明在下一时钟周期中将启动数据。
时钟周期4
在此时钟周期的开始,地址被内部地锁存且存储单元被存取,以使读取的数据能被在CLK信号的下降沿上被驱动出。另外,在CLK信号的下降沿上, SCO信号被否定。
时钟周期5
在CLK信号的下降沿上,驱动出SD信号的数据是三态的。
时钟周期6
端口不活动。
时钟周期7
R/ W、 ROW、 COL、OP及 EN信号被认定,以表明要发生主机随机存取写。 WCI和 NCI信号被认定,以表明在下一时钟周期将提供地址信息。
时钟周期8
在此周期的开始,前述控制信号被内部地锁存和解码,以启动对驱动到北和西端口上的地址信息的锁存。另外, SCI被认定,表明在下一时钟周期中数据将是有效的。
时钟周期9
在该时钟周期的开始,地址及 SCI信息被内部锁存,且存储单元被存取,从而使写入的数据可在CLK信号的下降沿上被锁存。
时钟周期10
在CLK信号的下降沿,在SD信号上被驱动进来的信号是三态的。
(4.1.2)主机随机地址传送西至东
图4-3显示了主机随机存取方式地址传送的定时。这种传送发生在被存取的装置与所选的装置共用同一行时。前面提到,对于随机存取,地址信息从北和西端口流入联合机,且数据流入或流出南端口。下面的流程描述了所发生的操作序列(OP==1)。
时钟周期3
ROW、OP及 EN信号被认定,以表明要发生随机存取方式传送。对于这一装置 COL信号是不活动的。地址A1被驱动到WD线上,使之能在CLK信号的下一个上升沿上被锁存。该地址的源可以是另一联合机装置(在阵列的内部)或是主机驱动地址信息至联合机边缘装置。 WCI信号被认定,以表明地址信息将在下一时钟周期中被提供。
时钟周期4
在周期的开始,前述控制信号被内部地锁存和解码,以启动对被驱动到西端口上的地址信息的锁存。另外, ECO被驱动出,以表明将在下一时钟周期中启动数据。
时钟周期5
将在该周期的开始被锁存的地址信息,在CLK信号的下降沿上驱动到ED信号上。
时钟周期6
将在该周期的开始时被锁存的地址信息,在CLK信号的下降沿上驱动出。 WCI输入被否定,以表明在WD上的地址信息不再有效。
时钟周期7
控制信号 ROW、 EN及地址信息WD被否定,表明下一周期是传送的最后一个周期。控制信号 ECO响应在前一周期中否定的WCI信号而否定。
时钟周期8
在CLK信与的下降沿,被驱动出ED信号的数据是三态的。
(4.1.3)主机随机地址和数据传送北和南
图4-4显示了主机随机存取方式的两种情况的定时。第一种情况(时钟周期2至6)是该装置与选定的装置共用同一列的情况。在此情况下,地址信息从北端口向下流至南端口。在第二种情况(时钟周期7至11),该装置仍共用同一列,但数据被向上或向下传送。在考虑联合机装置的情况下,传送的信息的种类(地址或数据)及方向完全由 NCI或 SCI信号决定。以下流程描述了所发生的操作序列(OP==1)。
时钟周期2
COL、OP和 EN信号被认定,以表明将发生随机存取方式传送。对于这一装置, ROW信号是不活动的。地址AO被驱动到NO线上,从而使之能在CLK信号的下一个上升沿上被锁存。该地址的源可以是另一联合机装置(在阵列内部的)或者是主机驱动地址信息至联合机边缘装置。 NCI信号被认定,以表明将在下一时钟周期中提供地址信息。
时钟周期3
在本周期的开始,前述控制信号被内部锁存和解码,以启动对驱动到北端口上的地址信息的锁存。另外, SCO被驱动出,表明将在下一时钟周期中启动数据。
时钟周期4
将在该周期开始时被锁存的地址信息,在CLK信号的下降沿上,驱动到SD信号上。 NCI输入被否定,表明ND上的地址信息不再有效。
时钟周期5
控制信号 ROW、 EN及地址信息ND被否定,表明下一周期是最后一个传送周期。控制信号 SCO响应于在前一周期中否定的NCI信号而否定。
时钟周期6
在CLK信号的下降沿边,被驱动出SD信号的数据是三态的。
在以下描述中,数据被描述为向上流动的(写操作)。对于读取操作,读取的数据的定时看上去就象刚在时钟周期2至6中描述过的地址定时。
时钟周期7
COL、OP及 EN信号被认定,以表明将发生随机存取方式的传送。对于这一装置, ROW信号是不活动的。数据D1被驱动到SD线上,以使之能在CLK信号的下一个上升沿上被锁存。此数据的源可以是另一联合机装置(在阵列的内部),或者是主机驱动数据信息至联合机边缘装置。SCI信号被认定,以表明将在下一时钟周期中提供数据信息。
时钟周期8
在该周期的开始,前述控制信号被内部锁存和解码,以启动对被驱动到南端口上的数据信息的锁存。另外, NCO被驱动出,表明数据将在下一时钟周期被启动。
时钟周期9
将在该周期开始时被锁存的数据信息,在CLK信号的下降沿上驱动到ND信号上。 SCI输入被否定,表明在SD上的数据信息不再有效。
时钟周期10
控制信号 ROW、 EN及SD上的数据信息被否定,表明下一周期是传送中的最后一个周期。控制信号 NCO响应于在前一周期中否定的 SCI信号而否定。
时钟周期11
在CLK信号的下降边,被驱动出ND信号的数据是三态的。
(4.1.4)带有早期终止的主机随机地址/数据传送北/南
图4-5显示了在第4.1.3节“主机随机地址和数据传送北和南”中描述的两种情况的定时。这里不同的是 EN信号被用来提早终止传送,而前一情况有较长的 EN时间。这一不同之处的原因,是由于对于一个联合机阵列来说,地址和数据这两个分量汇合在选定设备上(认定的 ROW和 COL)所需的时间会很长。根据外部控制硬件的复杂性,插板可通过给 EN驱动器逻辑增加更多的功能性,来节省(进入阵列的)存取时间。简单的情况是所有的存取都按最坏情况时间计时。该时间应是存取联合机阵列中最右上方处的装置的时间。以下描述图4-4和图4-5的区别。
时钟周期4
在CLK信号的下降沿,在该周期开始时被锁存的地址信息被驱动到SD信号上。 NCI输入被否定,表明ND上的地址信息不再有效。控制信号 ROW、 EN及地址信息ND被否定,表明下一周期是传送的最后一个周期。
时钟周期5
控制信号 SCO响应于在前一周期中否定的 NCI信号而否定。在CLK信号的下降沿,被驱动出SD信号的数据是三态的。
时钟周期9
在该周期开始时被锁存的数据信息,在CLK信号的下降沿,被驱动到ND信号上。 SCI输入被否定,表明SD上的数据信息不再有效。控制信号 ROW、 EN被否定,表明下一周期是传送的最后一个周期。
时钟周期10
在SD上的数据信息及控制信号 NCO响应于在前一周期中否定的 SCI信号而否定。在CLK信号的下降沿,被驱动出ND信号的数据是三态的。
(4.1.5)主机数据流读取
图4-6显示了主机数据流式存取方式读的定时。流式读取传送从具有被认定的 ROW和 COL信号的一串装置取得数据。在下述情况中,两个装置共用同一 ROW信号。假定“端”装置处于联合机阵列边缘。为了起动数据流式存取,当 EN信号被认定时,要求边缘处的装置(装置#1)使西端口数据流控制输入 WCI被认定。这一标志告诉该特定联合机它是用于数据流式传送的线路中的第一个。
联合机装置有内部控制寄存位HSSR:HSP〔1:0〕,以控制数据流的方向。数据流传送可经过南(HSP〔1:0〕=01)或东(HSP〔1:0〕=10)端口(但不是二者)发生。下述流程假定,两个联合机装置中的每一个将流出两字节的信息(即DCR1=02)。为了简化讨论,此部分描述中的信号被标以上标。这是为了表明与信号相关联的装置。例如,\X\TO(WCI1)是与装置#1相联系的 WCI输入。以下的流程描述了所发生的操作的序列(OP==0)。
时钟周期2
R/ W、 ROW、 COL、OP及 EN信号被认定,表明要发生数据流存取读。
Figure C9410329702051
信号被认定,以表明联合机#1是用于数据流传送的链中的第一个。
时钟周期3
在该周期的开始,前述控制信号被内部地锁存和解码,以启动要被驱动到东端口上的数据。另外,
Figure C9410329702061
被驱动出,以表明将在下一时钟周期启动数据。
时钟周期4
在该时钟周期的开始,WCI2信息被内部地锁存,以准备下一时钟周期中的数据。联合机#2,响应于被锁存的
Figure C9410329702062
,在CLK信号的下降沿认定\X\TO(ECO2)信号。在CLK信号的下降沿,联合机#1装置把数据驱动到ED1上。
时钟周期5
在该周期的开始,联合机#2锁存来自联合机#1的数据,并将其传送到东端口,在那里其数据在CLK信号的下降沿被驱动出。联合机#1否定 信号,以向联合机#2表明联合机#1已经完成其数据流传送(联合机#1是空的)。在CLK信号的下降沿,联合机#1在ED1信号线上驱动最后一块数据。
时钟周期6
在该周期的开始,联合机#2锁存来自联合机#1的下一块数据,并在CLK信号的下降沿将其驱动到ED2信号上。另外,在该周期的开始,联合机#2锁存并解码
Figure C9410329702064
输入,以确定联合机#2当前是数据流中的数据的提供者。现在联合机#2使
Figure C9410329702071
保持被认定(现在是表明联合机#2正在提供数据)。
时钟周期7
在CLK信号的下降沿,联合机#2把其第一个数据提供给数据流传送。
时钟周期8
在CLK信号的下降沿,联合机#2把其第二个数据提供给数据流传送。另外,在CLK信号的下降沿,
Figure C9410329702072
线被否定,以表明下一时钟周期将是来自联合机#2的数据的最后一个周期。 ROW、COL、 EN信号也在此周期中被否定,以表明下一时钟周期是最后一个。
时钟周期9
在CLK信号的下降沿,在ED2上被驱动进来的数据是三态的。
根据控制联合机陈列的逻辑的复杂性,可以两种方式处理数据流传送的终结。第一种要求控制逻辑知道数据流的持续时间,从而能在正确的时间否定 EN、 ROW、 COL等控制信号。第二种利用在陈列的右(或底)边的 ECO(或 SCO)信号作为数据流可被终止的指示。
(4.1.6)主机数据流存取
图4-7显示了用于主机数据流写入存取定时的定时图。注意数据流写操作可提供要在各联合机装置中复制的数据(取决于HSOR寄存器的状态)。其主要目的是向各联合机提供独特的数据。数据流写传送向其使 ROW和 COL信号均被认定的一串装置发送数据。在下述情况下,两个装置共用同一 ROW信号。在流写传送的情况下,数据流是单向的。在流写的情况下,直到 ECI信号被认定(表明有效数据在ED信号上),数据才被写入。因此,在流写的情况下,涉及到 ECI和 WCO(对北南传送为 SCI、 NCO)流控制信号,而不是 ECO和 WCI( SCO、 NCI)信号。
联合机装置有控制流传送方向的内部控制寄存器位HSSR:HSP〔1:0〕。流写可通过南(HSP〔1:0〕=01)或东(HSP〔1:0〕=10)端口发生,但不是通过两者。下述流程假定,两个联合机装置中的每一个将接收两字节的信息。第一装置(联合机#2)中的HSOR寄存器包含值0x0000,而第二装置(联合机#1)中的HSOR包含值0x0002。根据OAR/DCR寄存器及主机流选择寄存器的内部设定,特定的联合机可以仅装入一部分传送的数据。为简化讨论,在本描述中的信号被标以上标,以表明与该信号相关联的装置。例如, 是与装置#1相关联的 WCI输入。下列流程描述了发生的操作序列(OP==1)。
时钟周期2
R/ W、 ROW、 COL、OP及 EN信号被认定,以表明将发生流写存取。另外,ECI2被认定,以表明被写的数据将在下一时钟周期中有效。
时钟周期3
在该周期的开始,前述控制信号被内部地锁存和解码。要被驱动到东端口ED2上的数据被提供给联合机#2。另外,在CLK信号的下降沿,
Figure C9410329702091
响应于在前一时钟周期中被认定的
Figure C9410329702092
而被认定。装置联合机#2HSOR现在与一直在计数有效数据(对此装置来说其值为零)的内部计数器相匹配。联合机#2现在已准备好接收数据,直至DCR计数达到零为止。
时钟周期4和5
联合机#2把数据驱动到至联合机#1的WD2线上。下一块数据在ED2线上驱动。
时钟周期6
在该周期的开始,联合机#2锁存下一块数据。另外,控制信号ECI2被否定,表明在下一时钟周期中最后一块数据将出现在ED2线上。装置联合机#1HSOR,现在与一直计数有效数据的内部计数器相匹配。联合机#1现在已准备好接收数据,直至DCR计数达到零为止。
时钟周期7
在该周期的开始,联合机#2锁存下一块数据。另外,控制信号 ROW、 COL、 EN、R/ W及
Figure C9410329702101
被否定,表明流写将在下一时钟周期终止。
时钟周期8
在该时钟周期的开始,最后一块数据被联合机#2锁存和内部存储。
(4.2)联合机主控机操作
在联合机微代码的控制下,联合机可从四个端口中的任何一个向外写数据。这仅限于联合机的写操作(数据从一个联合机流入另一个)。这由write微代码指令集来控制。这些写周期是仅有的可能传送,且写操作的目的地总是IDR寄存器。
联合机仅能在“Run”方式中执行微代码写操作。这是由于写操作是由一条指令起动的。当联合机处于“Run”方式时,控制信号 EN、OP及R/ W是“不必关心”的。 xCI和 xCO线执行与他们在前面例子中所执行的相同的功能。信号 ROW及 COL现在是双向的;并参与最大值和最小值矢量指令。只有write操作(数据从主控机流出)被允许。数据传送受write型指令的控制。
为避免因猛烈的微程序操作或定时失配而造成的电气损坏,联合机将总是在驱动数据之前一个时钟周期驱动出 xCO线。这保证了可在总线上出现任何电气争用之前检测到同时的写操作或失配的写操作。
根据表关和抽头的联合机内部设定,所提供的数据可以1)经闭合的开关传送,2)被断开的开关阻止传送,3)把数据放入带有闭合抽头的IDR寄存器,或4)因抽头断开而不影响IDR寄存器。
端口信号与CLK信号的一般关系,是到端口的所有输入和双向输入信号均在CLK信号的上升沿被内部锁存。相反,所有输入和双向输出均在CLK信号的下降沿被启动。
在联合机或主机与运行的联合机之间的端口上的数据传送,包括以下信号:
*数据总线xD〔7:0〕
*控制信号 xCI和 xCO
(4.2.1)联合机写操作所有有效数据
图4-8显示了联合机#2和联合机#1之间的四字节传送的定时。write指令的长度由标量数据存器之一中的值控制。对于此例,包含在此标量数据寄存器中的值为4。被执行的实际指令可以是vwritew VO,GO。另外,联合机#1有闭合的东/西开关,从而使提供给东端口的数据被向前传到西端口。对联合机#1,东抽头是打开的,从而使提供给该装置的数据仅流经联合机#1,而不改变其内部IDR存储单元。
时钟周期2
联合机#2,在CLK信号的下降沿,响应于write指令的执行而认定 输出。此动作表明在下一时钟周期数据将将被提供在WD2输出上。
时钟周期3
在CLK信号的下降沿,联合机#2把PE#0中的V0寄存器的值驱动到WD2线上。另外,在CLK信号的下降沿,联合机#1响应于在前一时钟周期中被锁存和解码的
Figure C9410329702122
而认定
Figure C9410329702123
时钟周期4和5
在这些时钟周期中,数据在时钟周期的开始被锁存、通过、并在CLK信号的下降沿被驱动出。
时钟周期6
响应于write指令终止(在联合机#2中起动的write), 线在CLK信号的下降沿被否定。另外,最后一块数据被驱动到联合机#2(WD2)的输出上。
时钟周期7
响应于
Figure C9410329702132
信号,联合机#1在CLK信号的下降沿否定信号并驱动出最后一块数据。
(4.2.2)联合机写操作部分有效数据
图4-9显示了在联合机#2和联合机#1之间的两字节传送的定时。write指令的长度,由标量数据寄存器之一中的值控制。对于此例,包含在该标量数据寄存器中的值是4。所执行的实际指令可是vwritew V0,G0。之所以仅传送两个字节的原因,是因为四个PE中的两个清除了它们的VT位(表明由于无效数据它们将不提供数据)。另外,联合机#1的东/西开关断开,使提供给东端口的数据无法传到西端口。对联合机#1,东抽头闭合,从而使提供给该装置的数据仅写到联合机#1的IDR。注意,联合机#1的IDR的前两个存储单元将被此操作写入。来自源的写入过程中的间隔,具有在目的地处组装数据字节的作用。
时钟周期2
在CLK信号的下降沿,联合机#2,响应于write指令的执行,认定
Figure C9410329702141
输出。此动作表明在下一时钟周期中数据将被提供在WD2输出上。
时钟周期3
联合机#2在CLK信号的下降沿把PE#0中的V0寄存器的值驱动到WD2线。另外, 信号响应于内部状态而被否定,以使下一个PE清除其VT位。
时钟周期4
WD2在CLK信号的下降沿上是三态的。
时钟周期5
Figure C9410329702143
在CLK信号的下降沿,响应于带有将在下一时钟周期被送出的数据的激活的PE,而被认定。
时钟周期6
响应于write指令终止(它在联合机#2中被起动),在CLK信号的下降沿
Figure C9410329702144
线被否定。另外,最后一块数据被驱动到联合机#2的输出端(WD2)上。
(4.2.3)联合机写冲突定时
图4-10显示了在端口之一上的联合机冲突的定时。存在着两种可能类型的冲突。第一类型与同时执行写操作的两个联合机有关。在此情况下, xCI信号(它领先于数据一个时钟周期)均变成激活的。此状态(比如 ECI和 ECO均激活)表明已发生了端口冲突。第二类型发生在端口写操作正在进行且在同一端口执行一个write指令时。在此情况下,数据被驱动到端口上,但 xCI信号再次被用来在发生任何电气损坏之前检测冲突。
当端口冲突被(两个联合机都)检测到时,由两个装置都执行异常处理(即使一个已被中止且数据刚刚通过)。冲突异常矢量被取出,冲突异常处理被起动并且适当的状态位被设定。
时钟周期2和3
这两个时钟周期表明同时的端口冲突。
时钟周期8至11
这些时钟周期表明正在进行中的写和另一个被执行的写。
(4.3)其它定时
联合机上的其余信号处理done、Run/Stop、中断、复位及用户测试功能。以下的图示提供了这些特征的定时。
done的指示(它认定 BUSY信号)可来自两个来源中的一个。首先,done指令在被执行时否定 BUSY信号并把联合机保持在当前的PC存储单元。这类似于中止(halt)指令,但它有否定 BUSY输出的附加作用。其次,若联合机处于单步操作方式, BUSY信号将在当前指令结束时否定(见图4-11)。
R/S信号告诉联合机装置它处于什么状态,是“Run”方式(R/S=1)还是“Stop”方式(R/ S=0)。在数据“正在转换”且R/ S线转变到“Stop”状态的情况下,数据被保持在内部存储单元中,以使传送可以从其中止处重新开始。此外,若当R/ S信号从“Run”方式转变到“Stop”方式(1→0)时当前正在执行一指令,则将保留足够的状态信息,以在联合机回到“Run”方式(R/ S=1)时恢复执行。
联合机中断可通过任何数目的内部条件来产生,有关中断事件的更详细信息,请参见第2.3.22节“中断状态寄存器#1(ISR1)”及第2.3.24节“中断状态寄存器#2(ISR2)”。
联合机的复位序列需要4个时钟周期来执行内部初始化功能。
联合机还包括一用户可存取的测试端口,它允许多种插板测试性能。该测试端口是IEEE1149.1兼容的。对该测试端口的操作,用户可参看IEEE1149.1文件。
(4.3.1)联合机 BUSY输出定时
图4-12显示了联合机 BUSY信号的定时。第一种情况表示done指令。第二种情况表示指令的完成是单步方式。 BUSY线被用作开路漏极输出端,从而当所有联合机均已执行了一条done指令时,外部上拉可使此输出端处于高电压。
时钟周期2
在CLK信号的下降沿,PSTAT线表示正在执行标量指令。
时钟周期3
在CLK信号的下降沿,BUSY响应于正在执行的done指令而被否定。
时钟周期4
某些外部装置把R/ S线从“Run”转变到“Stop”。
时钟周期5
在该周期的开始,R/ S输入被解码而成为激活的。这起到认定BUSY输出的作用。
时钟周期6
在该周期的开始,R/S线在“Run”状态下被解码。这起到在紧跟在done指令层的指令处再启动联合机的作用。
时钟周期7
在CLK信号的下降沿,PSTAT线表示正执行某些指令。
时钟周期8
在CLK信号的下降沿, BUSY信号被否定,表明当前指令已经完成。
时钟周期10和11
当R/ S线从“Run”转变到“Stop”转变到“Run”时,联合机被重新启动。这使下一指令能被执行。
(4.3.2)带有“Run/Stop”干预的联合机同写定时
图4-13显示了联合机写操作的定时,其中联合机被停止在操作的中间。
时钟周期2
在CLK信号的下降沿,联合机#2响应于write指令的执行而认定
Figure C9410329702181
输出。此动作表示在下一时钟周期中数据将出现在WD2输出端上。
时钟周期3
在CLK信号的下降沿,联合机#2把PE#0中的V0寄存器的值驱动到WD2线。另外,在CLK信号的下降沿,联合机#1响应于在前一时钟周期中被锁存和解码的ECI1而认定
Figure C9410329702191
时钟周期4
数据在此时钟周期的开始被锁存、通过、并在CLK信号的下降沿被驱动出。另外,一外部装置认定R/S信号,表示应进行“Stop”方式。
时钟周期5
在此周期的开始,R/S信号在被解码为被认定的。在CLK信号的下降沿,所有 WCO输出均否定,且所有WD输出均是三态的。
时钟周期6
外部装置否定R/ S输入。
时钟周期7
在此周期的开始,R/ S输入在被解码成被否定的。在CLK信号的下降沿, WCO输出被认定,表明在下一时钟周期中将提供数据。
时钟周期8
联合机#1再次把来自PE#0(它在R/ S进入“Stop”方式时被内部地保持)的V0提供到WD1上,而且在CLK信号的下降沿,联合机#2再次把来自PE#1的V0提供到WD2上。
时钟周期9
数据在该时钟周期的开始被锁存、通过、并在CLK信号的下降沿被驱动出。
时钟周期10
响应于写指令的结束(联合机#2),在CLK信号的下降沿
Figure C9410329702201
线被否定。另外,最后一块数据被驱动到联合机#2的输出端(WD2)上。
时钟周期11
响应于
Figure C9410329702202
信号,在CLK信号的下降沿联合机#1否定
Figure C9410329702203
信号并驱动出最后一块数据。
(4.3.3)中断定时
图4-14显示了联合机中断生成的定时。下述流程描述了生成并使主机清除中断状态的事件序列。
时钟周期4
在CLK信号的下降沿,某些内部联合机条件变成真,它们将生成一个中断。这通常是AICR中的一个状态位的设定。更多的信息请参见第2.3.22节“中断状态寄存器#1(ISR1)’及第2.3.24节“中断状态寄存器#2(ISR2)”。
时钟周期5
在CLK信号的下降沿,INTR信号被认定,以向主机表明已出现了中断条件。有关屏蔽中断的更多信息,请参见第2.3.23节“中断屏蔽寄存器#1(IMR1)”及第2.3.25节“中断屏蔽寄存器#2(IMR2)”。时钟周期7至8
此定时图假定主机需要两个周期来响应中断。时钟周期9
在CLK信号的上升沿(在周期的前期),主机存取中断状态寄存器(ISR),以清除中断条件。这通常是用如图4-2所示的操作的随机存取方式进行的。
时钟周期10
在CLK信号的下降沿,INTR输出被否定,表明中断条件已被清除或禁止。
(4.3.4)复位定时
图4-15显示了联合机的复位序列的定时。该复位序列被联合机用于将其内部寄存器初始化到其缺省状态。下述流程描述复位序列中的事件。对热态复位, RESET信号需要被认定至少三个时钟周期。对冷态复位,要求 RESET信号在电力稳定后被认定至少三个时钟周期。 RESET信号输入端有高增益同步器,以在CLK信号的上升沿确定引脚的状态。
时钟周期2
在此时钟周期期间, RESET输入信号会上降。为了在时钟周期#3中使 RESET信号的内部同步形式得到认定, RESET信号输入必须在CLK信号的上升沿之前的某个时刻被认定。
时钟周期3
若 RESET输入满足对CLK信号上升沿的建立时间要求,则RESET输入的内部同步形式(rsync)将认定。此事件通过认定rst信号而起动系统复位序列。
时钟周期6
RESET输入在时钟周期#6中某时否定,并且必须被CLK信号的上升沿来否定,以使内部同步形式也否定。
时钟周期7
若 RESET输入对CLK信号上升沿建立时间要求,则 RESET输入的内部同步形式(rsync)将否定。注意此否定起动内部复位序列。
时钟周期10
在复位序列的结束,内部系统复位被否定,且联合机系统准备好开始用户初始化。
(4.3.5)IEEE1149.1测试存取端口(TAP)定时
图4-16显示了用户可存取的测试端口的定时。此测试端口是基于IEEE1149.1标准的。对有关控制1149.1接口的操作的内部状态和状态转换的详细描述,用户可参见IEEE1149.1文件。这里所示的定时图描述了TAP和系统引脚之间的相对于TCK时钟信号的关系。
时钟信号4和8
所有TAP输入(TDI,TMS)及系统输入(和双向输入)在TCK信号的上升沿得到锁存。
时钟周期3、7和11
在TCK信号的下降沿,所有TAP输出(TDO)和系统输出(及双向输出)均被启动。
(第5节)对选定的专题的概述
当提到把信号、状态位、或类似的装置置于逻辑真或逻辑假状态时,分别使用术语“认定”和“否定”。若逻辑真状态是逻辑电平1,则逻辑假状态就是逻辑电平零。而若逻辑真状态是逻辑电平零,那么逻辑假状态就是逻辑电平1。
术语“总线”将被用来指多个信号,这些信号可被用来传送一种或多种信息,诸如数据、地址、控制、或状态。在一个数字之前的符号“$”或“0x”,表示该数字是用其十六进制形式即其数16形式表示的。类似地,在一个数字之后的符号“H”表示该数字是用其十六进制形式即,基数16形式表示的。在一个数字之前的符号“%”表示该数字是用其二进制即基数2形式表示的。
数据处理机10可存储一个指令,但一个或多个指令在其中的存储方式可以不同。比如,为存储指令,数据处理机10可以有一个指令缓冲高速存储器20(见图2-67),或者数据处理机10可以有任何形式的单板存储器(如CMA14),如随机存取存储器(RAM)或只读存储器(ROM)。或者,数据处理机10可从一外部源接收指令,并可把收到的指令短暂地存在缓冲器或锁存电路中,以使指令能被解码。这样,指令的存储可以是永久的、暂时的、或极短暂的。
在图中,同一图中的多个数据处理机10可用标号10.1、10.2、10.3等指示(例如,参见图2-6)。数据处理机10.1、10.2、10.3等可在硬件及软件上均相同,也可在硬件上相同但在软件上不同,或可在硬件及软件上均不同。术语10.x将被用来指数据处理机10.1、10.2、103.等中的任一个。还应注意,“联合机”或“AE”被用来指数据处理机10.x。
同样,数据处理系统55的各种实施例将被标为55.1、55.2、55.3等等(比如,参见图2-6)。术语“55.x”将被用来指数据处理系统55.1、55.2、55.3等中的任何一个。数据处理系统57的各种实施例将被称为57.1、57.2、57.3等等。术语“57.x”将被用来指数据处理系统57.1、57.2、57.3等中的任何一个。
参见图2-6,注意数据处理系统57可以是数据处理系统55的一部分,或者数据处理系统57本身也可是一独立的完整的系统。这样,任何数据处理系统57也可是数据处理系统55的一部分。多数应用采用了外部的CPU54,但这不是必须的。CPU54可带有单板存储器(图中未显示),因而可不需要RAM56、ROM58、及盘60。另外,若CPU54能直接地与数据处理机10.x接口,则可以不需要接口逻辑62。导体61被用来耦合数据处理机10.x的各东和西端口。导体63被用来耦合数据处理机10.x的各北和南端口。
参见2.5节和表2.34,术语“微代码”、“指令”、及“微代码指令”,当指表2.34所到的指令时,在本说明书中可互换使用。表2.34中所列的指令,是软件程序员在汇编语言级用来编程数据处理机10的指令。
(.51)饱和保护
本发明中的某些指令是“饱和”指令。参见第2.5.9节、2.5.19.1节、及目录中对饱和的定义,其中讨论了术语“溢出”和“饱和”。“溢出”指这样一种情况,其中要存入寄存器中的值超过了寄存器所能存储的最大值(例如试图在一个8位寄存器中存储%100000001)。“饱和”或“饱和保护”指的是处理溢出状态的一种方法,其中寄存器中的值被用一上或下界值来代替,例如以$FF作为8位的不带符号的最大边界值。
参见图5-1-2,在所示的本发明实施例中,某些非初级标量指令也是饱和指令,即“add”、“addsx”、“sub”、“subsx”、“neg”及“abs”。同样,某些非初级矢量指令也是饱和指令,即“vadd”、“vaddsx”、“vsub”、“vsubsx”、“vneg”ey“vabs”。若有溢出(即,如果对标量饱和指令认定了SV位214以及如果对矢量饱和指令认定了VV位106,这些饱和指令总是饱和。SW位214位于标量处理控制寄存器(SPCR)208中(见图2-44)。VV位106位于矢量处理控制寄存器(VPCR)102中(见图2-64)。
对于一个饱和标量指令,当一溢出值即SV位214被认定时,算术运算的结果被一个上界或一个下界所代替。位于SPCR寄存器208中的一个对应的溢出方向位即SD位216,确定溢出是沿正还是负方向的。溢出的方向,决定着用哪个边界值—即上界或下界—来取代数据处理运算的结果。位于算术控制寄存器(ACR)172中的符号位即SSGN位174,表示该数是否带有符号。该数是否带符号,决定了上和下界的值。
对饱和的矢量指令,当溢出值即VV位106被认定时,算术运算的结果被上界或下界所取代。位于VPCR寄存器102中的相应溢出方向位即VD位108,确定溢出是沿正还是负方向的。溢出的方向决定了用哪个边界值(上界或下界)来取代数据处理运算的结果。位于算术控制寄存器(ACR)172中的符号位即VSGN位176,表示了该数是否带符号。该数是否带符号,决定了上和下界的值。
“sat”和“vsat”指令是专用饱和指令,它们除了执行饱和外无其它作用。“sat”和“vsat”指令对扩充长度的算术运算特别有用。通常,用跟有单个非前级指令的一个或多个前级指令来执行扩充长度的算术运算。如果该非前级指令是一饱和指令,那么若有溢出的话,由该非前级饱和指令产生的多字节结果的一个字节已得到调整。然而,如果结果已饱和,多字节结果的其余字节则包含一个不正确的值。“sat”及“vsat”指令为多字节算术运算提供了饱和保护。
图5-1-1显示了一个例子,其中“sat”指令可被用来执行对标量机26中的寄存器的饱和保护。“vsat”指令执行对矢量机9中的寄存器同样的饱和保护功能。图5-1-1所示的例子假定,指令的目的是把存储在寄存器组(GD,G1,G2)中的3字节数据值加到存储在寄存器组(G3,G4,G5)中的3字节数据值上,从而在出现溢出时使存储在寄存器(G3,G4,G5)中的3字节结果饱和。
adap G2,G5;把前级G2加到G5
           ;(非饱和加法运算)
addp G1,G4;把前级G1加到G4
           ;(非饱和加法运算)
add Go,G3 ;把非前级G0到加G3
           ;(饱和加法运算)
sat G4     ;在G4上执行饱和保护
           ;(根据溢出改正G4中的值)
sat G5     ;在G5上执行饱和保护
           ;(根据溢出改正G5中的值)
在执行“add G0,G3”指令结束时,寄存器组(G3,G4,G5)包含部分饱和的结果,且溢出值SV位2/4表示已有一个溢出。相应的溢出方向位,即SD位216,表示溢出是沿正方向。符号位,即SSGN位174,表示在此例中数是不带符号的。“sat G4”指令利用该溢出值、溢出方向位、及符号位,来确定饱和沿正方向发生且必须把上界值$FF存储在寄存器G4中以取代不正确的结果$34。“sat G5”指令利用该溢出值、溢出方向位、及符号位,以确定饱和沿正方向发生且必须把上界值$FF存储在寄存器G5中以取代不正确结果$32。
(5.2)数据处理机之间的通信:开关和抽头
参见图3-40和图2-67,开关42使数据流经数据处理机10,而抽头42使数据被数据处理机10所接收和锁存。参见图2-6,开关和抽头可被用为在采用数据处理机10的阵列的系统中提供可可缩放性。开关可使被传送的数据在不受数据处理机10的内部干预的情况下跨过一台数据处理机10。抽头使到达数据处理机10的端口的数据被复制到数据处理机10的输入数据寄存器(IDR)18之中。
为了使两个(或更多)数据处理机10通信(其中数据处理机10不是阵列中的相邻者),连接数据处理机10的开关必须闭合(即处于导通状态)。这样,开关可使一个数据处理机10把数据送到另一数据处理机10,而不涉及到两个通信的数据处理机10之间的数据处理机。在最佳实施例中,抽头使数据处理机10能捕获到达任一端口的数据。
应注意,端口(北、南、东、西)的数目、开关(42.1和42.2)的数目、及抽头(40.1、40.2、40.3及40.4)的数目,是相互独立的。本发明的不同实施例可有不同数目的端口、开关、及抽头。例如,一个数据处理机10可有少些或多些的端口,各端口不一定非要有抽头不可,且一端口可与多个开关相耦合。各开关可独立于抽头和其他开关操作,而各抽头的操作可独立于开关和其他抽头。
尽管在本实施例中所示的开关是双向的,也可采用单向开关。例如,可用两个单向开关代替一个双向开关。若采用单向开关,可加上能被用来确定数据流的方向的附加控制位。开关可用任何类型的模拟或数字电路(如组合或序列逻辑)来实现。实际构成开关和抽头所需的具体电路,是本领域的技术人员所熟知的。
在所示的实施例中,当开关处于导通状态(连接)时,数字数据被从开关的一端传到开关的另一端;这样,数据可从一个端口经开关而传到另一端口。当开关处于不导通状态(断开)时,数字数据不能从开关的一端传到开关的另一端;这样,数据不能经开关从一个端口传到另一端口。
参见图2-16、表2.10及图2-67,端口控制寄存器(PCR)52包含用于控制开关和抽头的控制位。PCR52的位0-6,通过系统复位、通过由数据处理机10执行的某些指令及以通过从外部处理机(如图2-6中的CPU54)的主机存取,而被改变。注意被传送的数字数据本身并不需要任何路由信息。因此,数字数据本身不必表明哪个(些)数据处理机10应接收和锁存数字数据。
注意,在数据处理机10执行指令时,软件程序可动态地修改PCR52的位0-6。软件程序可以是数据处理机10中的、位于指令高速缓冲存储器20中或位于单板存储器(图中未显示)中的内部程序,也可是位于CPU54、RAM56、ROM58、或盘60中的外部程序。注意数据处理机10不必为了在端口之间进行数据传送而执行任何指令或进行任何有效控制。
PCR52中的控制位,使得数据处理机10的通信结构能为不同系统配置而改变,并在数据处理机10执行指令时,能被动态地改变。这样,开关和抽头体系结构为用户提供了完全通过软来重组数据处理机10的阵列的能力,而不必改变单独的硬件连接或硬件连器。
参见图3-40,北端口引脚44可通过开关电路42.1有选择地与南端口引脚48相耦合,且西端口引脚50可通过开关电路42.2与东端口引脚相耦合,北端口引脚44可通过抽头电路40.1有选择地与输入数据寄存器(IDR)18相耦合,东端口引脚46可通过抽头电路40.2有选择地与输入数据寄存器(IDR)18相耦合,南端口引脚48可通过抽头电路40.3有选择地与输入数据寄存器(IDR)18相耦合,西端口引脚50可通过抽头电路40.4有选择地与输入数据寄存器(IDR)18相耦合。
(5.3)多端口数据处理机
参见图5-2-1、图5-2-2、图5-3、图5-4、图5-5、图5-6与图5-7,数据处理机10可处于两种操作方式中的一种:即“Stop”和“Run”方式中的一种。注意“Stop”方式也可称为“主机,,方式。在发明所示的实施例中,操作方式由至数据处理机10的输入选择。R/S集成电路引脚80(见图2-8)上的逻辑电平,被用于确定数据处理机10是处于“Stop”方式还是处于“Run”方式。在“Stop”方式下,数据处理机10中的所有能被从外部存取的寄存器都可被从外部存取;且数据处理机10不执行指令。在“Run”方式下,数据处理机10中所有能被从外部存取的寄存器都不可以被从外部存取,仅IDR寄存器18除外(见图2-67);并且数据处理机10能够提取、解码和执行指令。
所示实施例中的北、南、东和西端口,用于不同目的,根据操作方式起着不同的作用。同样,某些信号和某些集成电路引脚,根据不同的操作方式,用于不同的目的并起着不同的作用(见表2.2)。
在“Run”方式下,开关和抽头,而不是行和列选择信号,被用来控制经过端口的通信。在所示的本发明实施例中,开关42.1和42.2,连同轴头40.1、40.2、40.3和40.4(见图3-40),被用来使数据处理机10能够在“Run”方式下与其它外部数据处理器10和/或主机数据处理机54通信。在所示的实施例中, ROW集成电路引脚82和 COL集成电路引脚84(见图2-8),没有被用于在“Run”方式下接收列或行选择信号。
在“Stop”方式下,行和列选择信号,而不是开关和抽头,被用来控制通过端口的通信。在所示的实施例中,一个列选择信号由COL引脚84接收,而一个行选择信号则由 ROW引脚82接收。在本发明的所示实施例中,开关42.1和42.2,连同抽头40.1、40.2、40.3和40.4,(见图3-40)没有被用于“Stop”方式中。
在“Stop”方式下,数据处理机10用列选择信与和行选择信号来确定是否传送信息和是否存储或发源信息。如果其行选择引脚或列选择引脚都没有被认定,数据处理机10甚至将不传送信息。然而,若其行选择引脚( ROW引脚82)或其列选择引脚 COL引脚84)仅有一个被认定,数据处理机10可传送信息,但是将不存储信息或作为任何信息的源。若其行选择信号和其列选择信号都被认定,数据处理机10可传送信息,并且也可存储信息或作为信息的源。
当数据处理机10处于“Stop”方式时,有两种存取方式可供选择:即随机存取方式和流式存取方式。存取方式确定了数据处理机10内部资源可被存取的方式。在本发明的所示实施例中,存取方式由至数据处理机10的输入来选择。OP集成电路引脚94上的逻辑电平(见图2-8)被用来确定数据处理器10是处于随机存取方式还是处于流式存取方式。
在随机存取方式中,必须从外部向数据处理机10提供一地址,以指定对数据处理机10中的哪个单个内部地址存储单元进行存取。外部提供的地址被数据处理机10在北和西端口接收。在所示的实施例中,随机存取方式被用来每次仅对一个数据处理机10进行存取。
在流式存取方式中,没有从外部向数据处理机10提供地址。相反,数据处理机10必须为信息传送在内部产生一个或多个地址。另外,当数据处理机10处于流式存取方式时,任何数目的数据字节都可作为一个数据“流”而被传送至数据处理机10或从数据处理机10中传出。在所示实施例中,流式存取方式可被用来同时对一个或多个数据处理机10进行处理。
若干个寄存器可执行一种专门的功能,或仅在数据处理机10处于“Stop”方式时被使用。在本发明的所示实施例中,当数据处理机10处于操作的“Stop”方式及流式存取方式时,偏移地址寄存器#1(OAR1)96、偏移地址寄存器#2(OAR2)98、深度控制寄存器#1(DCR1)97、深度控制寄存器#2(DCR2)99、主机流选择寄存器(HSSR)100、和主机流偏移寄存器(HSOR)222被使用。
(5.4)数据处理机中的扩充长度操作
数据处理机中的一个常见问题,是需要在比可用的算术逻辑单元(ALU)电路在一个ALU循环中所能够容纳的还要宽(即有更多位)的数据值上进行算术计算。例如,经常要求数据处理机用一个16位ALU对两个32位数据值进行求和。先有技术的数据处理机一般通过提供单个的“进位”或“扩充”位和通过提供两种版本的计算指令,来支持这种扩充的算术,以说明进位位是否被用作一个对指令的输入(例如,“加”和“带进位的加”、“减”和“带借位的减”、“右移”和“带扩充的右移”等)。这种传统方法对有限指令表的操作是足够的,但它不足以有效地支持其他扩充长度的操作。需要一种能有效支持扩充长度操作的扩充指令表的方法。
以下是先有技术的单扩充位方法所不能支持的扩充长度运算的某些例子:(1)两个有不同长度的二进制补码的数的加(其中较短的数必须是符号扩充的);(2)两个有不同长度的二进制补码的数的相减(其中较短的数必须是符号扩充的);(3)计算两个扩充长度的数的最小值(带有或不带有符号);(4)计算两个扩充长度数的最大值(带有或不带有符号);(5)比较两个扩充长度数(带有或不带有符号)并利用该结果来控制有条件的转移或其他有条件的动作;(6)计算扩充长度延长的伪随机数。
需要一种方法,它能够有效地支持扩充长度运算的扩充指令表。本发明有效地支持了扩充长度运算的扩展指令表,并支持了加、减、以及移位操作。本发明涉及数据处理机所执行的新指令,以及在用于实施这些新指令的数据处理机中的电路。
本发明利用新指令来执行扩充长度运算。新指令实际可用两种版本的指令来实施,即“前级”版本的指令和“非前级”版本的指令。在本发明中,新指令的不同版本被用来确定扩充位是如何作为指令的结果被修正的;指令的不同版本不被用来确定是否一单个扩充位将被作为一个输入。注意,在现有技术中,指令的不同版本是被用来规定是否把单个扩充位用作向指令的输入,而不是指令的输出。另外,新指令采用两个扩充位,其中各扩充位对不同的指令可起不同的作用。没有固定的进位位和借位位;没有固定的移位扩充位。
参见图2-44、表2.29、图2-64和表2.31,在一个实施例中数据处理机10有两个扩充位,即X0和X1。注意术语“X0”和“xX0”是可互换使用的,用来表示在标量机26中的标量进程控制寄存器(SPCR)208内的SX0位210或在矢量机9中的矢量进程控制寄存器(VPCR)102内的VX0位104。同样,注意术语“X1”和“xX1”是可互换使用的,表示位于标量机26中的SPCR寄存器208内的SX1位212,或位于矢量机9中的VPCR寄存器102内的VX1位105。
由数据处理机10所执行的多数指令,无条件地把扩充位X0和X1清除到它们的缺省状态(在所示的实施例中为逻辑状态零),表示“空”扩充数据。H欢x,某些被称为“前级”指令的指令,可有选择地修正扩充位。扩充长度的计算一般利用一条或多条前级指令。各前级指令有选择地修正扩充位,以为随后的指令产生扩充数据。一般地,一条或多条前级指令组成的系列的后面跟有一条非前级指令。该非前级指令使扩充位返回到它们的缺省或否定状态,这在所示的实施例中是零逻辑状态。
前级指令和非前级指令都用扩充位作为输入,但在设计上不把缺省扩充位码%00作为输入考虑,对扩充数据的解释取决所执行的扩充长度运算的种类,如以下所要说明的那样。将要讨论各种的扩充运算,也就是新的指令。为了说明的目的,将假定ALU是一字节宽的。然而,重要的是要注意到,同一扩充方法也可用于任何宽度的ALU。
现在讨论加与减运算。对加和减,扩充位X0表示进位或借位信息;扩充位X1表示使初级指令产生扩充数据的源操作数的符号位。扩充位X1中的这种符号信息可被随后的“加号扩充”指令用来对较短的数进行符号扩充,以正确地完成有不同长度的两个二进制补码带符号数的相加。
图5-8显示了一组四条指令“addp”、“addp”,“addsxp”的执行,这些指令用于执行不同长度的两个带符号二进制补码的数的加法运算。图5-8显示了包含在寄存器对(G1,C0)中的2字节数与包含在4寄存器组(G5,G4,G3,G2)中的4字节数的相加。该相加运算的结果被放置在寄存器组(G5,G4,G3,G2)中。四条指令的码序列按照以下顺序由数据处理机10执行:
addp G0,G2;把前级G0加到G2上
           ;(生成扩充位)
addp G1,G3;把前级G1加到G3上
           ;(生成扩充位)
addsxp G4;把符号扩无前级加到G4
         ;(生成扩充位)
addsx G5 ;把符号扩充加到G5)
         ;(清除扩充位)
利用样值的结果计算如图5-8所示。开始,假定两个扩充位X0和X1运算被前一条非前级指令所否定或置予它们的缺省状态。注意扩充位X0对加法运算起着进位位而对减法运算起着借位位的作用。扩充位X1反映了产生它的初级指令的源操作数的符号位或最高有效位。“addp”指令忽略它们的输入X1位并利用X0位作为一个进位输入。第二条“addp”指令的X1输出反映了位于寄存器G1中的较短源操作数的符号位。扩充位X1中的这一符号信息,被“addsxp”指令用来选择适当的符号扩充值,在本实施例中即$FF,与$00相反。“addsxp”指令使扩充位X1不变,以使后续的“addsx”指令同样能够选择正确的符号扩充值。
参见第2.5.9节、2.5.19.1节、和“目录”中的定义,来讨论术语“溢出”和“饱和”。“溢出”指的是这样的情况,其中要存储在寄存器中的值超过了寄存器所能够存储的最大值(例如,试图把$1FF存储在一个8位寄存器中)。“饱和”指的是处理溢出状态的一种方法,其中寄存器中的值被用上或下界值所取代,例如用$FF表示一个8位不带符号的最大边界值。
非前级指令“add”和“vadd”是饱和指令而前级指令“addp”和“vaddp”是非饱和指令。对于标量“add”指令,当溢出值即SPCR寄存器208中的SV位214被认定时,加法运算的结果被上或下界所取代。相应的溢出方向位,即位于SPCR寄存器208中的SD位216,确定溢出是沿着正还是负方向。溢出的方向,确定了用上和下边界值中的哪一个来取代数据处理操作的结果。一个符号位,即位于算术控制寄存器(ACR)172中的SSGN位174,表示该数是否带符号。该数是否带符号确定了上和下界的值。
对于矢量“vadd”指令,当溢出值,即位于VPCR寄存器102的VV位106被认定时,加法运算的结果被上或下界所取代。对应的溢出方向位,即VPCR寄存器102中的VD位108,确定了溢出是沿正还是负方向。溢出的方向确定用哪个界(上还是下界)值来取代数据处理操作的结果。一个符位,即位于算术控制寄存器(ACR)172中的VSGN位176,表明了该数是否带有符号。该数是否带有符号,确定了上和下界的值。
现在讨论最小和最大值运算。对最小和最大值运算,多字节计算开始于最高有效字节并进行到最低有效字节。在多字节最小和最大值运算中,两个扩充位被用于区别如下状态:(1)源操作数已经被发现超过了目标操作数,从而使随后对较低有效位字节的任何比较变得无关紧要;(2)目标操作数已经被发现超过了源操作数,从而使任何随后对较低有效字节的比较变得无关紧要;(3)源和目标操作数的高位字节相同,从而必须继续对较低有效字节的比较,以确定哪个操作数较大。
现在讨论比较和有条件测试。对根据多字节比较的测试,计算从最高有效字节开始并进行到最低有效字节。扩充位被用于区别与最小和最大值运算相同的三种状态。本发明的某些实施例中,一个单类型的比较前级指令可以与若干不同类型的非前级条件指令一起使用,以测试不同的条件动作标准,例如等于、大于、小于,等等。
现在讨论伪随机数的发生。对伪随机数发生操作,假设采用一种右移线性反馈移位寄存器类的技术,利用前级指令,多字节计算从最高有效字节开始并进行到最低有效字节。然后,在结束时,需要执行一个非前级指令,以执行最高有效字节的最高有效位的最后调节。在伪随机数计算期间,一个扩充位对多字节右移操作起着进位位的作用,而一个扩充位表明“一的总计”运算到目前是否遇到奇数个或偶数个一。或者,也可以采用等价的左移位线性反馈移位寄存器类的技术,使多字节计算从最低有效字节进行到最高有效字节。在这种情况下,对最低有效的最后调节,可以由作为结束的非前级指令的一个“add”指令来执行。
图5-9、图5-10和图5-11显示了涉及各种前级和非前级指令的执行的步骤。本发明的其他实施例可以有较多、较少、或不同的前级和非前级指令。图5-9显示了与某些移位指令的执行有关的步骤。图5-10显示了与某些比较指令的执行有关的步骤。图5-11显示了与某些算术指令的执行有关的步骤。注意在所示的本发明实施例中,左移位初级指令“lshftp”是用add前级指令“addp”来实施的。
(5.5)数据处理机中的数据移动操作
采用矢量的处理机中的一个公共问题,是需要计算矢量的元素的和或总和。在有些应用中,只需要一个标量结果(即所有元素的总和)。在一些其它应用中,则必须地算累计和矢量。把矢量元素组合成一单一的总聚集值或一个累计部分聚集的矢量的需要,不仅限于相加。其他的求聚集操作,如最小和最大值操作,对某些应用也是需要的。需要一种把矢量元素组合成一个总的聚集值的更有效的技术和机制。
与先有技术一样,本发明计算矢量的元素的总和;此外,本发明同时计算累积和的矢量。注意在本发明中,矢量元素的总和是累积和矢量的最后分量。本发明以比先有技术费用性能比更有利的方式,采用了快速SIME型(单指令多数据型)并行计算。本发明包含新指令及实现新指令的有关电路。
在先有技术中,有一种用于计算矢量元素的和的并行算法,叫做“递归加倍”(recursive doubling)。图5-12(先有技术)显示了这种递归加倍算法是怎样可被用来计算具有八个元素的矢量的元素的和的。注意,处理部件#0开始存储值“A”,处理部件#1开始存储值“B”,处理部件#2开始存储值“C”,处理部件#3开始存储值“D”,处理部件#4开始存储值“E”,处理部件#5开始存储值“F”,处理部件#6开始存储值“G”,处理部件#7开始存储值“H”。
仍然参见图5-12,如在从左数第二列中所示,矢量元素被组成对,且对各对计算出第一组中间和。此第一组中间和用并行处理硬件同时地计算。如在从左数第三列中所示,以类似方式给第一组中间和配对并求和,从而产生第二组中间和,每个由四个原始矢量分量组成的组有一个中间和。如在从左数第四列中所示,第二组中间和被类似地配对和求和,产生矢量元素的一个总和,即“A+B+C+D+E+F+G+H”。
当这种先有技术的递归加倍算法被编程以在传统SIMD型并行计算机上运行时,该算法的每一步骤可能需要以下子步骤:〔子步骤#1〕作出由前面的步骤所产生的和矢量(或者如果这是第一步骤则为原始矢量)的副本;〔子步骤#2〕把矢量的该副本相对于矢量的未移位副本移位2(i-1)个位(注意“i”是步骤数;注意该移位是移动2(i-1)个矢量元素位置,不是各元素中的2(i-1)位的位置);以及〔子步骤#3〕通过把未移位的矢量副本加到移位的副本上,进行矢量加。参见图5-12,该算法的第一步骤要求三个子步骤1、2和3。该算法的第二步骤要求三个子步骤4、5和6。该算法的第三步骤要求三个子步骤7、8和9。
但是,该先有技术递归加倍算法有如下缺点。第一,该算法的各个步骤要求若干个指令(如图5-12中所示)。第二,在上述子步骤#1中产生的双矢量副本占据了一个第二矢量寄存器或等价的矢量暂存空间。第三,在传统的SIMD处理机中,上述子步骤#2中的矢量移位操作要么要求2(i-1)个顺序步骤,要么要求处理部件通过较昂贵的、能够在单一步骤中进行多位置移位的互连网络进行通信。最后,大多数先有技术的递归加倍算法仅产生总和(即矢量元素的总和),而不是某些应用中所要求的矢量累积和。
本发明实现了一种有用的技术和机制,用于进行矢量操作数的数据移动操作。该技术和机制还能够有选择地把数据传送操作和各种计算组合起来。
在本发明的所示实施例中,以下指令被用于进行矢量操作数的各种数据移动操作:“dadd”、“daddp”、“dmin”、“dminp”、“dmax”、“dmaxp”、dsrot”、和“drotmov”。有关“drotmov”指令的信息,请参见表2.42、图2-73、和第2.5.11.1节。有关“dsrot”指令的信息,请参见表2.42、表2.43、和第2.5.11.2节。有关“dadd”、“daddp”、“dmin”、“dminp”、“dmax”和“dmaxp”指令的信息,请参见表2.44、表2.46和第2.5.12.2节。
(5.5.1)指令“dadd”、“daddp”、“dmin”、“dminp”、“dmax”“dmaxp”
本发明通过提供一种叫做“向下加”的、具有助记码“dadd”的新SIMD计算机指令,克服了先有技术的递归加倍算法的缺点。该“dadd”指令包含两个字段,一个规定下移位的量,另一个规定一个矢量寄存器编号(见表2.44)。
参见图5-13、图5-14、图5-15和图5-16,指令“dadd#N,vreg2”以如下方式工作。加只发生在一半处理部件(PE)16中,即那些在其各自的处理部件号的位位置“N”(把最低有效位位置计数为0)中有1的部件中。每个这种处理部件把从上面的处理部件传来的值加到其局部矢量数据寄存器128上(见图2-63)。记号V〔x〕和Vn都被用来表示矢量数据寄存器128中的任何一个。不是这种类型的处理部件的V〔x〕寄存器值保持不变。处理屏蔽,VT位110(见图2-64和表2.31),可以正常的方式被用来抑制存储在那些否则将修改它们的V〔x〕寄存器128的处理部件中的结果。多路转换器(MUX)310、312、314、316、318、320、322和324被用来选择是否把处理部件16用作正被传送的数据值的源,或者是否反之处理部件16向前传送它接收的数据值。
若处理部件16在其处理单元数最低有效的N位都有1,则它把V〔x〕寄存器所存的值传送到下邻的处理部件。若一个处理部件16在位位置“N”有1,则它向前传送其从上面的处理部件所接收的值。若“N”等于零,则每个处理部件都把值从其V〔x〕寄存器128传到下面的处理部件。VT位110对哪个值被一处理部件传送到其下一相邻者没有影响。注意最后一个处理部件是否把值传送回第一个处理部件是测有关系的,因为不管规定了什么“N”值,从上面传进第一处理部件的值都不被使用。
若一个处理部件〔#(x+1)〕不存储其计算结果(即它在位位置“N”有零值),则处理部件〔#x〕可从上面即从处理部件〔#(x-1)〕传送数据,或可从其V〔x〕寄存器128发出数据。因而需要有些处理部件传送数据,需要有些处理部件发生数据,而其他一些处理部件则由于下面的处理部件在位位置“N”有零值而二者都可做。
下面的例子,说明了对矢量数据寄存器128的dadd指令的四次应用,如何用其原始元素的累计总和取代一个16元素的矢量。注意到dadd指令的M次应用,足以对把2M处理部件边界上开始的任何2M元素子矢量相加。还请注意dadd指令的这些同样的M次应用足以对在2M边界上开始的、少于2M个的相继元素的任何子矢量进行求和。最后,注意“处理屏蔽”,即所示实施例中的VT位110,可以被用于抑制一个2M元素组的底部的元素修正而不影响组内的这些元素上面的计算结果。
          指令
      dadd#0,V0
      dadd#1,V0
      dadd#2,V0
      dadd#3,V0
 初始    之后          之后PE#  value   dadd#0        dadd#10000 x0          x0            x00001 x1          (x0)+x1       x0+x10010 x2          x2            (x0+x1)+x20011 x3          (x2)+x3       (x0+x1)+x2+x30100 x4          x4            x40101 x5          (x4)+x5       x4+x50110 x6          x6            (x4+x5)+x60111 x7          (x6)+x7       (x4+x5)+x6+x71000 x8          x8            x81001 x9          (x8)+x9       x8+x91010 x10         x10           (x8+x9)+x101011 x11         (x10)+x11     (x8+x9)+x10+x111100 x12         x12           x121101 x13         (x12)+x13     x12+x131110 x14         x14           (x12+x13)+x141111 x15         (x14)+x15     (x12+x13)+x14+x15
  之后PE#   dadd#20000  x00001  x0+x10010  x0+x1+x20011  x0+x1+x2+x30100  (x0+x1+x2+x3)+x40101  (x0+x1+x2+x3)+x4+x50110  (x0+x1+x2+x3)+x4+x5+x60111  (x0+x1+x2+x3)+x4+x5+x6+x71000  x81001  x8+x91010  x8+x9+x101011  x8+x9+x10+x111100  (x8+x9+x10+x11)+x121101  (x8+x9+x10+x11)+x12+x131110  (x8+x9+x10+x11)+x12+x13+x141111  (x8+x9+x10+x11)+x12+x13+x14+x15
  之后PE#   dadd#30000  x00001  x0+x10010  x0+x1+x20011  x0+x1+x2+x30100  x0+x1+x2+x3+x40101  x0+x1+x2+x3+x4+x50110  x0+x1+x2+x3+x4+x5+x60111  x0+x1+x2+x3+x4+x5+x6+x71000  (x0+x1+x2+x3+x4+x5+x6+x7)+x81001  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x91010  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x9+x101011  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x9+x10+x111100  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x9+x10+x11+x121101  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x9+x10+x11+x12+x131110  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x9+x10+x11+x12+x13+x141111  (x0+x1+x2+x3+x4+x5+x6+x7)+x8+x9+x10+x11+x12+x13+x14+x15
注意在用于dadd指令的处理部件中的数据移动,不需要复杂的互连网络,且不需要单个位置移位的缓慢多重执行。因为指令“dadd#N,Vn”只要求把各个第2N个元素复制到下面的2N个处理部件,处理部件16之间简单的最近近邻通信方案就已经足够。各处理部件可接受从其上面的邻近处理部件传来的数据,并且每一处理部件都把来自该处理部件的局部存储器(即矢量数据寄存器128)的数据,或把从上面的处理部件所接收到的数据的副本,传给其下面的近邻部件。微定序器22(见图2-67)确定对每一指令所允许的传播延迟时间为多少。注意最长的向下向传播路径与2N成正比,且“N”由微定序器22在dadd指令的一个字段中接收。
dadd指令可被扩充,以处理多字矢量元素和/或饱和算术运算。注意前级指令daddp以与上述非前级指令dadd相同的方式进行移位和相加。dmin、dminp、dmax、和dmaxp指令以与dadd指令相同的方式工作,只是所进行的计是最小或最大比较而非相加。有关dadd、daddp、dmin、dminp、dmax、和dmaxp指令的进一步信息,请参见表2.44、表2.46和第2.5.12.2节。
(5.52)指令dsrot
dadd指令把矢量相加与向下转动(即矢量元素越过处理部件16的移位)相结合,以便于有效的递归加倍型相加。对其他经常用的聚集操作,如最小和最大操作,也可提供类似的指令,但是给未来的用户预测及提供其想要的所有可能的聚集操作的指令则是不实际的。为了得到更大的灵活性,提供了一个“向下的稀疏转动”指令dsrot,以使用户能为其他的可能聚集操作编制合理的有效递归加倍型算法。该指令执行稀疏多位置向下循环移位。
参见表2.42、第2.5.11.2节、和表2.43,指令“dsrot#N,vreg2”以如下方式工作。各处理部件16把从上面的处理部件传来的值复制到其局部Vn寄存器。处理屏蔽即VT位110可以以正常方式被用于抑制存储在任何处理部件中的结果。若处理部件在其处理部件号的N个最低有效位都是1,则它把来自其矢量数据寄存器(Vn)128(见图2-63)的值传到下面的处理部件;否则,它向前传送它从上面的处理元素所接收的值。
若N等于零,则各处理部件都把来自其Vn寄存器的位传向下面的处理部件。VT位110对处理部件把哪个值传向其下面的近邻没有影响。最后的处理部件以环形方式把值传回第一处理部件。哪个处理部件16作为链中的最后一个,是由处理部件选择寄存器(PESR)220规定的(见图2-15)。
下面的例子显示了带有由dsrot指令与十六个处理部件组成的环形链所执行的功能。
    初始   之后PE#     value  dsrot#0,Vn0000    x0          x150001    x1          x00010    x2          x10011    x3          x20100    x4          x30101    x5          x40110    x6          x50111    x7          x61000    x8          x71001    x9          x81010    x10         x91011    x11         x101100    x12         x111101    x13         x121110    x14         x131111    x15         x14
    初始   之后PE#     value  dsrot#1,Vn0000    x0          x150001    x1          x150010    x2          x10011    x3          x10100    x4          x30101    x5          x30110    x6          x50111    x7          x51000    x8          x71001    x9          x71010    x10         x91011    x11         x91100    x12         x111101    x13         x111110    x14         x131111    x15         x13
    初始   之后PE#     value  dsrot#2,Vn0000    x0          x150001    x1          x150010    x2          x150011    x3          x150100    x4          x30101    x5          x30110    x6          x30111    x7          x31000    x8          x71001    x9          x71010    x10         x71011    x11         x71100    x12         x111101    x13         x111110    x14         x111111    x15         x11
    初始   之后PE#     value  dsrot#3,Vn0000    x0          x150001    x1          x150010    x2          x150011    x3          x150100    x4          x150101    x5          x150110    x6          x150111    x7          x151000    x8          x71001    x9          x71010    x10         x71011    x11         x71100    x12         x71101    x13         x71110    x14         x71111    x15         x7
dsrot指令只提供了“递归加倍”式聚集的数据移动部分。然而,通过把dsrot指令与矢量计算一起使用,可能写出执行任何所需聚集操作的软件指令例程。注意,dsrot指令可用与用实现dadd和daddp指令相同的、成本低廉的最低邻通信方案来实现。
另外,注意dsrot指令的一种特殊情况,可被用于进行密集(与稀疏相反)转动,其中所有的矢量元素值都移动。指令“dsrot#0,Vn”对矢量寄存器的所有元素Vn执行一个一位置的向下转动。所有矢量元素的多位置向下转动,可通过多次执行该指令来进行。这种类型的密集转动操作对某些应用是有用的。注意在本发明的其他实施例中,可用向上的移位来代替向下的移位。
(5.6)指令的多级条件执行
(5.6.1)指令vif、velse和vendif
本发明使指令的条件执行能以简单方式实现,这种方式只需要最少量的电路,但却仍然能允许非常大的软件灵活性。采用了三种条件指令,即vif、felse、和vendif。在指令名称的开始处的字母v,表明该指令是一个矢量指令。vif式指令实际上是一组指令,它有vif的助记形式并包括条件测试。该组vif指令包括以下的单个指令:
vif指令    条件
vireq    如果相等
vifge    如果大于或等于
vifgt    如果大于
vifle    如果小于或等于
vifit    如果小于
vifne    如果不等于
vifnv    如果没有溢出
vifv     如果溢出
所有条件指令的清单,请参见表2.47。在本发明的其他实施例中,在vif型指令中可包括较多、较少或不同的条件。而且,在本发明的其他实施例中,可采用其他或不同类型的条件指令。
本发明还利用了各处理部件16中的两个位,即VT位110和VH位112。VT位110和VH位112均在矢量进程控制寄存器(VPCR)102中。VPCR寄存器102显示在图2-64中,且在表2.31和说明书第2.3.47节中进行了说明。本发明的其他实施例可用一个以上的位(VT位110)来自表示启动值或屏蔽值。同样,其他的实施例也可用一个以上的位(VT位112)来表示一历史值。该VH位112被叫做历史值或历史位,因为它表示了VT位110的历史或先前的逻辑状态。
表2.48显示了执行“vif”、“velse”、和“vendif”指令所产生的VT位110和VH位112的下一状态转变表。标为Qn的列表示了,在执行指定的条件指令之前,VT位110和VH位112的当前逻辑状态(关于指定的条件指令,请参见右边的列)。标为Qn+1的列,表示在指定的条件指令的执行完成时VT位110和VH位112的逻辑状态。(关于指定的条件指令,请参见最右边的列)。开列在最左边的列的状态转变号码,对应于图2.75中所示的十个加圈的状态转变。
图2-75显示了执行“vif”、“velse”和“vendif”指令所产生的VT位110和VH位112的状态转变图。注意“vif”指令的执行取决于VT位110的当前逻辑状态。作为“vif”指令的一部分的条件测试,由各处理部件16分别地进行。只有当条件指令开始执行时一个处理部件16的VT位110被认定时该处理部件16才参与vif指令的执行。注意velse和vendif指令是与VT位110的当前逻辑状态无关地执行的。
启动值(VT位110)和历史值(VH位112)的组合,使软件编程结构能在电路的水平上实现。例如,可利用vif、velse、和vendif指令与启动值(VT位110)和历史值(VT位112)一起,在电路水平上实现利用“if”、“elseif”、“else”、和“endif”高级软件命令的高级软件编程结构。各处理部件16只参与软件指令的“if”、“elseif”、和“else”部分中的一个。历史值表明处理部件16是否已经参与了软件指令先前的“if”或“elseif”部分中之一。注意,若在没有“elseif”结构的情况下使用“if”和“else”结构,则不需要VH位112。
对实现大多数通常的高级结构,一个序列中的第一个指令将是vif指令之一且序列中的最后一个指令将是一个vendif指令。一个简单的序列,在vif指令和vendif指令之间可以只有一个velse指令。更复杂的序列可以有后面跟有一个vendif指令的多个velse-vif指令对,如表3.13中的例子所示。
注意,可用通用寄存器保存VT位110和VH位112的顺序副本来嵌套vif、velse、和vendif指令,参见表2.47,可用左移指令vlshftt和vlshfth和右转动指令vrotrt和vrotrh来进栈和出栈VT位110和VH位112的顺序复本。
某些其他指令也包含一蕴含的vendif结构。例如,repeat和repeate指令也修正VT位110和VH位112。且dskip和dskipe指令也修正VT闰110和VH位112。表2.65显示了哪些指令与VT位110和VH位112的逻辑状态无关地执行,以及哪些指令依赖于VT位110和/或VH位112的逻辑状态。
表3.13、表3.14和第3.6.5.4节说明了与VT位110和VH位112一起采用vif、velse、和vendif指令的指令条件执行的一个例子。
(5.6.2)指令dskip和dskipe
表2.52简要地定义了dskip和dskipe指令的操作。dskip指令减小一个指定的标量寄存器的内容,并且如果该标量寄存器的新内容为$FF时(它等效于十进制负一的二进制补码表示)引起跳过下一指令的执行。dskipe指令执行与dskip指令相同的步骤。另外,dskipe指令执行与vendif指令相同的步骤,即:(1)保证VT位110被认定;(2)保证VH位112被否定。图5-17显示了dskip和dskipe指令的执行期间所进行的步骤的流程图。
dskipe指令所执行的步骤与dskip指令相同;但是此外dskipe指令还执行与vendif指令相同的步骤,即设定VT位110并否定VH位112。这样,dskipe指令保证了VT位110和VH位112已返回它们的缺省或复位状态。这样,通过利用dskipe指令而不是dskip指令,VT位110和VH位112可被返回到它们的缺省状态。采用dskipe指令消除了在一个dskip指令之前执行vendif指令的必要。在许多应用中,在dskip或dskipe之后的下一个指令将是改变程序流程的指令(例如跳转指令)。且经常需要保证VT位110和VH位112在程序流程被改变之前被返回到它们的缺省状态。
虽然本发明通过减小标量寄存器中的数据值为调节该数据值,本发明的其他实施例可采用其他的各种调节方法。例如,可用一种算术单元来回或减一调节值。该调节值可以是一个不等于一个的数。例如,该调节值可以是一个不等于一的数。例如,该调节值可以是2的幂或是一个负数。或者,可采用增量器而不是减量器。可以增加数据值,直到它等于一预定值。虽然该预定值在本发明的所示实施例中是二进制补码形式的十进制负一(十六进制中的$FF),但也可采用任何预定值。例如,可用零作为该预定值。另外,比较测试可以是小于或等于的测试,而不只是相等性的测试。同样,比较测试可以是大于或等于的测试,而不只是等于的测试。
(5.6.3)指令repeat和repeate
表2.52定义了repeat和repeate指令的操作。该repeat和repeate指令使随后的N个指令被跳过,或者使随后的N个指令以指令循环的形式被执行M次。
参见图5-18-1、图5-18-2、图2-76到2-80、和第2.5.17节,repeat和repeate指令导致了执行同样的步骤,只是有以下的不同。repeate指令加上一蕴含的vendif指令作为循不中的最后一个指令。这样,每次执行完循环中的最后一个显式指令时,所有的VT位110和VH位112都被清除。这样,在指令循环结束时,repeate指令使VT位110和VH位112被返回到它们的缺省即复位状态。注意,显式或蕴含的vendif指令有若干种实现方式。例如,不管它们的当前逻辑状态如何,可迫使所有VT位110进入被认定的逻辑状态且迫使所有的VH位112进入否定的逻辑状态。或者,只有那些当前未被认定的VT位110可被迫使进入认定的逻辑状态,且所有当前未被否定的VH位112可被迫使进入否定的状态。
参见图2-41,微定序器控制寄存器(MCR)188有一个RELF位198和一个R PLF位200。RELF位198表示当前是否正在执行repeate循环。RPLF位200表示当前是否正在执行repeat循环。
在所示的本发明实施例中,下列寄存器被用于执行由repeat和repeate指令起动的循环:(a)重复开始寄存器(RBR)180(见图2-55);(b)重复结束寄存器(RER)182(见图2-56);和(c)重复计数寄存器(RCR)184(见图2-57)。在本发明的其它实施例中,可采用多些、少些、或者不同的寄存器来存储执行由repeat和repeate指令起动的循环所需要的参数。
(5.7)数据处理机体系结构
某些应用,诸如模糊逻辑、神经网张和其他并行、阵列导向应用,倾向于利用某些最好由SISD处理机执行的数据处理任务,以及某些最好由SIMD处理机执行的数据处理任务。本发明结合了SISD(单指令单数据)处理机的某些优点以及SIMD(单指令多数据)处理机的某些优点。
参见图2-67,数据处理机10有单个的微定序器22,后者能够向矢量机电路9和标量机电路26提供控制信号。当执行矢量指令时,微定序器22向矢量机9提供控制信号;当执行标量指令时,微定序器22向标量机26提供控制信号。数据处理机10每次只能执行一个指令,因此数据处理机10不同时执行矢量和标量指令,然而,在本发明的某些实施例中,由于流线(pipeline)化,可允许少量的指令重叠。
参见图2-67,矢量机9、输入数据寄存器(IDR)18、复位电路15、指令高速缓冲存储器20、微定序器22、控制寄存器22、标量机26、北端口28、南端口30、东端口32、和西端口34都通过传导加标总线13而互相双向地耦合。总线开关11耦合在全局数据总线38和广播总线36之间。微定序器22通过总线23与矢量机9双向耦合,以传送控制和状态信息。微定序器22通过总线25与标量机26双向地耦合,以传送控制和状态信息。参见图2-67和图2-69,微定序器22有指令解码电路19、控制电路21、拖延电路39、寄存器374、和算术逻辑单元(ALU)372,它们全都通过导体376和导体378而互相双向地耦合。
在本发明中,在单个的集成电路上的单个的数据处理机10利用单个的单板微定序器22,既能执行标量指令,也能执行矢量指令。这个在单个集成电路上的单个处理机10,还能在没有任何来自外部处理机的控制的情况下工作。实际上,如果数据处理机10包括一个单板ROM,而后者包含组成一完整的软件程序的一序列指令时,数据处理机10可作为应用中唯一的数据处理机而工作。
(5.8)把输入数据装入数据处理器
许多模糊逻辑、神经网络、和其他并行阵列导向应用,需要灵活的数据存储技术,这种技术使集成电睡能以多种方式选择和存储输入数据。我们希望接收该数据的集成电路而不是发送该数据的装置,来选择适当的数据位并把它们以所希望的形式存储在集成电路中的所希望的装置中。还希望尽量减小选择和存储输入数据所需要的软件开销。虽然这种数据存储技术在神经网络应用中有非常大的用途,它也可以被广泛地用于其他许多应用。
在本发明的一个实施例中,数据处理机10提供了两种填充方式,以把信息存入输入数据寄存器(IDR)18。第一种填充方式叫做变址填充方式(也叫做输入变址方式),显示在图2-17和5-19中。第二种填充方式叫做标记填充方式(也叫做输入标记方式),显示在图2-18和5-20中。图5-21显示了用于实施IDR18的填充模式的电路。
位于RCR寄存器52(见图2-16和表2.10)中的填充方式位(FM)76,确定采用哪种填充方式。本发明的其他实施例可具有多些、少些、或不同的模式,并可采用一个或者多个控制位来选择采用哪种方式。在本发明的一个实施例中,当数据处理机10处于“Run”操作方式时,采用填充方式;且当数据处理机10处于“Stop”操作方式时,不采用填充方式。在“Run”操作方式下,用广播数据传送把数据从一个数据处理机10.x传到另一个数据处理机10.x。广播数据传送的目的地总是接收数据处理机10.x的IDR18。
变址填充方式被用于把相继或顺序的数据输入装入IDR18之中。图2-17和有关的描述内容,说明了本发明的一个实施例如何利用四个控制值来协调IDR18在变址填充方式下的填充。在所示的实施例中,四个控制值中的每一个处于不同的寄存器中。本发明的其他实施例可用多些、少些、或不同的控制值。另外,控制值可以以不同于存储在寄存器中的控制值的方式来提供。
图5-19与图2-17对应并显示了正由数据处理机10在其一个端口接收的数据流的值。IDR起始偏移寄存器(IOR)130包含指定定时值的起始偏移位(IO位)140。该定时值确定在数据流的何时IDR寄存器18将开始接收和存储数据值。在本发明的一个实施例中,IOR寄存器130包含一时钟周期时间值,该值计数在端口接收到的有效数据字节,并在IOR寄存器130中的计数与已在端口接收到的有效数据字节相匹配时起启动装置的作用。
IDR指针寄存器(IPR)132包含规定一指针值的指针位(PTR位)142。该指针值影响在IDR18中的何处存储输入的数据。该IDR计数寄存器(ICR)136包含规定一个计数值的计数位(CNT位)146。该计数值影响在IDR18中存储多少字节。IDR存储单元屏蔽寄存器(ILMR)134包含规定一个屏蔽值的屏蔽位(M位)144。该屏蔽值影响如何把数据装入IDR18之中。
参见图5-21,本发明的一个实施例采用了影子IPR寄存器135影子ICR寄存器139。该影子寄存器使IPR寄存器132和ICR寄存器136能继续存储用户编制的任何值。在IDR填充操作的开始,存储在IPR寄存器132中的值被装入影子IPR寄存器135,且存储在ICR寄存器136中的值被装入影子ICR寄存器139。然后,在IDR18的数据填充期间,存储在影子IPR寄存器135和影子ICR寄存器139中的值可被修正,而存储在IPR寄存器132和ICR136中的起始值不被修正。电路133包含影子IPR寄存器135及增量电路137。电路143包含影子ICR寄存器139和减量电路141。
影子IPR寄存器135总是指向下一个自由的IDR18的存储单元。来自ILMR寄存器134的值与来自影子IPR寄存器135的值相逻辑地组合,以确定对IDR18中的哪个存储单元进行写入。例如,如果ILMR寄存器134中的屏蔽值是$00,则在IDR填充期间对IDR18中的一个存储单元进行写入。如果ILMR寄存器134中的屏蔽值是$01,则IDR18中的下两个可用的存储单元将接收并存储同样的数据值。ICR寄存器136中的计数值确定多少数据值将被存入IDR18。然而,当确定实际将存储多少数据值时,计数值或屏蔽值中的较大者将确定多少数据将被实际写入IDR18中。注意一个输入数据值可被写入一个以上的IDR18存储单元,如图5-19所示。
标记填充方式被用于把非顺序数据输入装入IDR18。该标记填充方式不采用存储在IDR起始偏移寄存器(IOR)130中的一个定时值,而是采用了被叫做输入标记寄存器(ITR)1138的一组寄存器。各ITR寄存器138包含一组ITR位148,且每组ITR位148指定一定时值。每一定时值确定在输入数据流期间何时IDR18将接收并存储数据值。这样,ITR寄存器138使数据处理机10能指定一特定的顺序,按照该顺序输入的数据值被有选择地存入IDR寄存器18中。图5-20对应于图2-18并显示了被数据处理机10在其一个端口所接收的数据值流的一个例子。
参见图5-21,在本发明的一个实施例中,当数据处理机10的端口之一接收输入数据时,一计数器156被增值。当计数器156中的值与ITR位148的当前值相匹配时,输入的数据值被装入IDR18之中。该过程继续进行,直到所有的输入样值都被装入IDR18,或直到ICR寄存器136中包含的计数值被达到时为止。注意,在本发明的一个实施例中,来自减量电路141的下溢状态被用作为至IDR地址发生和控制电路154的控制输入信号。
该IDR地址发生和控制电路154,与IDR加载电路153一起,执行协调IDR寄存器18的加载功能。IDR地址发生和控制电路154为存储输入数据值的IDR18存储单元产生地址。电路150通常被用来指定IDR寄存器18“何时”被加载;电路151通常被用来指定将在IDR寄存器18中的“何处”装入输入数据值;电路152通常被用来指定将把“多少”数据值存入IDR寄存器18中。
在本发明的一个实施例中,有六十四个ITR寄存器138,且各ITR寄存器138都能存储两个字节的值。与IOR寄存器130类似,ITR寄存器138确定被广播的输入数据何时被选择和存入IDR18的存储单元。其他三个寄存器,IDR指针寄存器(IPR)132、IDR计数寄存器(ICR)136、和IDR存储单元屏蔽寄存器(ILMR)134为两种填充方式起着相同的目的。注意标记填充方式为实现未完全连接的神经网络提供了有力的方法或采用接收域概念的范例。
(5.9)数据处理器10的拖延技术和机制
图5-22-1和5-22-2显示了数据相干技术,它保证了用于矢量和标量指令的数据相干和同步。这种数据相干技术,使数据处理机10中指令的内部执行和数据处理机10外部源对寄存器的装入之间能够实现协调。
在本发明的一个实施例中,输入数据寄存器(IDR)18可被用作至数据处理机10的输入矢量。标量以及矢量操作均可利用IDR18进行。操作数的寻址方式,确定着操作是标量操作还是矢量操作(见第2.5.5节)。一种拖延机制被用来保证数据的相干性。该拖延机制使访问IDR18的指令等候,直到所有有效的数据输入都已被放入IDR18之中。
图2-68显示了一种层和各个层中的处理部件16。注意在所示的本发明实施例中,VT位110和VID位114均位于各处理部件16之内的矢量进程控制寄存器(VPCR)102中。本发明的其他实施例可采用其他的布置,诸如把VT位110和VID位114定位为IDR18的一部分。
在所示的实施例中,各IDR18单元和各处理部件16之间有一对应的关系。所以,对各个处理部件16,均有一个对应的启动值(VT位110)和一个对应的有效值(VID位114)。在本发明的其他实施例中,启动值可多于单个的启动位(VT位110),且有效值可多于单个的有效位(VID位114)。另外,注意当指令执行把IDR18作为目的地的写入操作时,只有其对应的VT位110被认定的那些IDR18的存储单元被实际写入。这样,VT位110要么可被作为启动其对应的VT位110被认定的处理部件16的启动值,要么可被作为屏蔽掉或禁止其对应的VT位110被否定的处理部件16的屏蔽值。
图5-23到5-25显示采用这种数据相干技术的某些例子。图5-23和5-24显示了数据处理机10对要求存取IDR18的标量机指令的响应。图5-23显示了数据处理机10未拖延的情况;而图5-24显示了数据处理机10拖延的情况。图5-25显示了数据处理机10对要求存取输入数据寄存器(IDR)18并使数据处理机10拖延的矢量指令的响应。
在图5-23中,标量指令对其有效位被认定(对数据处理机#2来说即为VID位114是逻辑1)的IDR存储单元,在本例中即IDR〔2〕,进行存取。被认定的有效位,表示存储在对应的IDR存储单元中的值是有效的并可在标量指令的执行期间被使用。所以已经有了有效数据,而且标量指令的执行能够继续。全局拖延信号126保持被否定,向微定序器22指示标量指令的执行可以继续进行而不用任何延迟。注意对应的启动值即VT位110未被用于标量指令。
然而,在图5-24中,标量指令却存取一个其有效位被否定(对处理单元#2来说即VID位114是逻辑0)的IDR18的存储单元,在本例中即IDR〔2〕。否定的有效位表示存储在对应的IDR存储单元中的值不是有效的且不能用于标量指令的执行期间。这样,数据处理机10必须延迟该标量指令的执行,直到一外部数据源通过端口向IDR〔2〕写入一个有效的数据值,全局拖延信号126被认定,向微定序器22指明标量指令的执行必须被延迟,直到接收到有效数据为止。
同样,注意对应的启动值,即VT位110,不是用于标量指令的。在本发明的某些实施例中,外部的数据源可直接写入VID位114,从而把VID位114置于其认定状态,即使没有写入IDR18。注意外部数据源可以是一个主机处理机54或另一据处理机10.x。
在图5-25中,存取IDR18的指令是矢量指令。启动值,VT位110,现在被使用。用于各处理部件16的启动值(VT位110)确定该处理部件16在矢量指令的执行期间是否参与。若VT位110被否定,则该特定的处理部件16不参与。因此其启动值被否定的IDR18的存储单元也不参与,且其有效值是无关的(即被标为“不必关心的”)。然而,其启动值被认定的IDR18的存储单元却参与,且其有效值是相关的(即被标为“要被关心”的)。所以在图5-25中,处理部件#1和#62不参与,因为它们的VT位110被否定;而处理部件#0、#2、#3和#63是参与的,因为它们的VT位110被认定。
继续参见图5-25,有效值(VID位114)现在被使用。矢量指令试图存取其VT位110被认定的每一个IDR18存储单元。然而,若干IDR18的存储单元(即本例中的IDR〔3〕和IDR〔63〕)正要参与但却还不包含有效值。所以VID位114对于处理部件#3和#63仍然被否定。结果,处理部件#3和#63认定它们各自的矢量拖延信号124(见图2-68-1)。来自任何一个处理部件16的任何拖延信号的认定,都使全局拖延导体126被置于其被认定的状态。在本发明的一个实施例中,全局拖延导体126以“线或”或者“线与”的配置而被使用。
在图2-68-1所示的本发明实施例中,拖延发生逻辑116产生两个局部拖延信号,即标量拖延信号122和矢量拖延信号124。标量拖延信号122和矢量拖延信号124被电路121进行逻辑组合,以产生全局拖延信号126。在所示的实施例中,当利用处理部件16的操作访问一标量时,采用标量拖延信号122,而在采用处理部件16的操作访问一矢量时,则利用矢量拖延信号124。本发明的其他实施例可以不同的方式产生全局拖延信号126。
对全局拖延导体126所传送的信号的认定,向微定序器22表明数据处理机10应该拖延和延迟当前矢量指令的执行,直到有效数据被接收并存储在IDR〔3〕和IDR〔63〕之中为止。数据处理器10然后拖延。一旦有效数据被接收并存储在IDR〔3〕中,处理部件#3的VID位114被认定且处理部件#3的矢量拖延信号124被否定。且一旦有效数据被接收并存储在IDR〔63〕中,处理部件#63的VID位114被认定并且处理部件#63的矢量拖延信号124被否定。不再有任何处理部件16认定矢量拖延信号124,所以全局拖延导体126返回其被否定状态。
注意,若其VT位110被认定的每个处理部件16使其VID位114也被认定,则这些处理部件16中将没有一个认定矢量拖延信号124,且全局拖延导体126将保持在其否定状态。在这种情况下,对应于各参与的处理部件16的IDR18存储单元已包含有效数据并且不需要拖延。
对VID位114的认定和否定,本发明的不同实施例可采用多种机制来改变VID位114。本发明的其他实施例可采用如下机制中的一种或多种。第一,某些指令或指令类型可直接改变VID位114。第二,寻址方式可使VID位114被改变。例如,在本发明的一个实施例中,对于其中IDR18是源寄存器的矢量指令,有两个特殊的寻址方式。当采用“IDR”寻址方式时,VID位114不受矢量指令的执行的影响。另一方面,当采用“IDRC”寻址方式时,VID位114通过矢量指令的执行而被否定。第三,数据处理机10的复位可使VID位114被改变。第四,对IDR18存储单元的写入存取可被用来认定对应的VID位114。第五,对VID位114的直接写入可被用来改变它们的逻辑状态。也可采用影响VID位114的其他机制。
(5.10)最大和最小值确定
(5.10.1)指令colman、rowmax、locmax、colmin、rowmin、和locmin
对模糊逻辑、神经网络、和其他并行、阵列导向的应用,需要一种简单而迅速的技术和机制来对矢量和标量操作数进行最大和最小值确定。该技术和机制应该能够处理不同数目的待比较数据值。另外,该技术和机制应该能够跨越集成电路的边界进行最大和最小值确定。确定最小或最大值的位置及其值本身经常是重要的。虽然该最小和最大值确定技术对神经网络应用非常有用,它也可以被用于多种其他应用。
在本发明的一个实施例中,数据处理机10能够执行一个或多个colmax、rowmax、或locmax指令,以便执行最大值确定。同样,数据处理机10能够执行一个或多个colmin、rowmin或locmin指令,以便执行最小值确定。本发明的其他实施例可有多些、少些、或不同的比较指令。
参见图5-26,标为“线或”的线路158的比较线或比较导体与矢量机9中的各处理部件16相耦合。每一处理部件16有一个对应的VT位110位于每一处理部件16之内的矢量进程控制寄存器(VPCR)102中(关于VT位110的信息,请见图2-68、图2-64、和表2.31)。虽然图5-26显示了六十三个处理部件16,本发明的其他实施例可采用任何数目的处理部件16。最小/最大引脚选择电路164、行控制引脚电路160、和列控制引脚电路162,被用来把比较导体158有选择地耦合到所示的各集成电路引脚,即行控制引脚 ROW82和列控制引脚 COL84。所以,电路170通常起着用于有选择地耦合和解耦比较导体158和集成电路引脚82和84的开关的作用。
图5-30-1和5-30-2显示了当执行比较指令时进行的步骤。在本发明的一个实施例中,比较指令本身的特定操作码,确定了 COL引脚84和 ROW引脚82中的一个是否要被耦合到比较导体158。例如,在所示的实施例中,colmax和colmin指令只把COL引脚84耦合到比较导体158,rowmax和rowmin指令只把ROW引脚82耦合到比较导体158,而locmax和locmin指令不把任何引脚耦合到比较导体158。
仍然参见图5-26,微定序器22对比较指令进行解码,并确定对于该具体指令应把哪个引脚(如果有的话)同比较导体158相耦合。微定序器22然后把控制信号送到最小/最大引脚选择电路164。最小/最大引脚选择电路164利用该控制信号来有选择地确定是认定还是否定至行控制引脚电路160的控制信号和至列控制引脚电路162的控制信号。当行控制引脚电路160接收到一个来自最小/最大引脚选择电路164的认定控制信号时,该行控制引脚电路160把比较导体158耦合到 ROW引脚82。当列控制引脚电路162接收到一个来自最小/最大引脚选择电路164的认定控制信号时,列控制引脚电路162把比较导体158耦合到 COL引脚84。
因此,比较导体158能与其他数据处理机10.x的集成电路引脚相耦合,如图5-29所示。所以,内部比较导体158能被耦合到外部比较导体,诸如列导体166和行导体168。所以比较既可在集成电路以内进行,也可以跨越多个集成电路的引脚边界进行。
图5-27和5-28显示了locmax指令的执行的例子。在图5-27中,第一列表示初始时存储在各处理部件中的一个任意8位值。在该具体例子中,对于处理部件#8至#63来说启动位(VT位110)的初始值是零。所以,只有处理部件#0至#7被启动并参与指令的执行。
作为第一步骤,各被启动的处理部件,本例中即处理部件#0至#7,将其第一个数据位置于“线或”线158上。在所示的本发明实施例中,该第一数据位总是存储在各处理部件中的数据值的最高有效位(MSB),且各随后的位是剩下的下一最高有效位。然而,本发明的其他实施例可用不同的数据位排序和选择方案。
由于所示实施例中的比较导体158是一条“线或”线,比较线158将保持在逻辑状态“0”。除非在该线上驱动出逻辑电平“1”。注意,也可使用一条“线与”线。对于一条“线与”线,该线将保持在逻辑状态“1”中,除非在该线上驱动一个逻辑电平“0”。图5-28显示了各步骤之后(即各组据位被置于“线或”线158上之后)得到的“线或”线158的逻辑状态。
对locmax指令,各处理单元把它设在“线或”线158上的逻辑值与实际产生的线上的逻辑状态相比较。参见图2-68-1,移位、求补及检测电路117执行这种功能。若处理部件把逻辑零设置到线上并读回了零,则该处理部件的VT位110保持被认定。同样,若该处理部件在线上放置一个逻辑“1”并读回一个“1”则该处理部件的VT位110保持被认定。然而,若处理部件把逻辑零放置于线上并读回1时,该处理部件的VT位110被否定,而且该处理部件(它现在已被禁止)将不再参与比较指令的执行。注意,在采用“线或”线的情况下,处理部件不可能把逻辑1置于线上而读回零。
在图5-27所示的实施例中,存储在处理部件#0至#7中的每一数据值的最高有效位是逻辑零。所以被启动的各处理部件把逻辑零置于“线或”线158上。所以“线或”线158保持逻辑零状态。各处理部件把它置于线上的值(在该情况下为零)与线上实际产生的值(在此情况下也是零)相比较。因为各处理部件把逻辑零置于线上并且读回零,所以各处理部件的VT位110保持被认定。各处理部件的VT位110的值显示在图5-27的第二列。这样在第一步骤之后,各处理部件的VT位110的值仍然是逻辑1。
作为第二步骤,每一被启动的处理部件(在此例中仍然是处理部件#0至#7)把其第二数据位即下一个最高有效位置于“线或”线158上。各处理部件把它置于“线或”线158上的逻辑值与线实际产生的逻辑状态相比较。因为处理部件#0、#2、#3、#4和#6把逻辑1置于线上并读回1,所以这些处理部件的VT位110保持被认定。但是,因为处理部件#1、#3、和#7把逻辑零置于线上并读回了1,所以这些处理部件的VT位110被否定。因此处理部件#0、#2、#3、#4、#6仍然被启动,而处理部件#1、#5、和#7现在被禁止并不再参与比较指令的执行。各处理部件的VT位110在各“线或”步骤之后的值,显示在图5-27的第二列。
在最后一个“线或”步骤之后的VT位110的希望值,示于图5-27的最右一列。最右列中的希望值与中间列中的步骤如下所示的实际结果相匹配。由于处理部件#2和#4均包含最大值(在此情况下为%0101000),所以希望在指令结束时只有处理部件#2和#4的VT位110被认定。以这种方式,可用比较指令来禁止不包含最大值的所有处理部件。VT位110可被用来确定包含最大值的处理部件的位置。而且该最大值本身可从其VT位110在比较指令结束时被认定的任何处理部件中检索到。
在所示的本发明实施例中,“线或”步骤的数目是可编程的。指令中的一个位字段被用于指定“线或”步骤的数目。例如,若各处理部件有N位宽的数据值,则通过编程指令中的位字段,用户可选择对1至N位中的任何一个进行比较。本发明的其他实施例可用寄存器位字段或缺省值,而不是指令位字令,来指定要被比较的位的数目。
参见图2-68-1,位修正电路118与移位、求补、和检测电路117相耦合。该移位、求补和检测电路117检测处理部件何时把逻辑零置于线上并读回了一个1。移位、求补和检测电呼117然后认定至位修正电路118的控制信号。当位修正电路118收到该认定的控制信号时,位修正电路118否定VT位110。注意控制和状态信号是在控制电路115和微定序器22之间传送的。还请注意控制电路115产生用于控制处理部件16的控制信号。
图5-27和5-28所示的例子是关于使用不带符号数据值的locmax指令的执行的。这种机制和技术的变形,可被用于执行对带符号或不带符号的数进行操作的指令,而且它对最大或最小值进行定位。为定位带符号数的一个矢量的最大值,上述过程中可加上一个附加的步骤。假定带符号的数由2进制补码形式表示,各带符号的数的最高有效位是符号位。各个带符号数的该符号位必须在它被置于“线或”线158上之前被求补。
带符号数的一个矢量最小值,可以同样的方式,通过对所有的位进行求补而得到定位。二进制补码的带符号数的最小值可通过求2钩麑盼灰酝獾乃琯形焕炊丂弧2渭<2-68-1,移位、求补、和检测电路117与微定序器22相耦合,以接收控制信息;关于这些信息(如果有的话)的、至“线或”线158的一个(些)数据位输出必须被求补。移位、求补和检测电路117然后进行任何必须的求补。
在所示的本发明实施例中,一控制寄存器位字段被用来检测比较指令是将把待比较的数据值作为带符号还是不带符号的值来对待。参见图2-12,算术控制寄存器(ACR)172包含一个标量带符号/不带符号位(SSGN)174和一个矢量带符号/不带符号位(VSGN)176。VSGN位176被用于检测在比较指令期间所用的矢量数据值将被认作是带符号的还是不带符号的数。
虽然本发是的所示实施例只能处理每条比较指令八位的最大宽度,但可通过执行比较指令一次以上(从最高有效字节开始),来处理比八位更宽的矢量数据值。注意,本发明的其它实施例还可处理多于或少于8位宽的数据值。
图6-27和5-28所示的例子,是关于locmax指令的执行的。rowmax指令的执和与locmax指令的类似,只是比较导体158还要附加地与ROW引脚82相耦合。且colmax指令的执行与locmax指令的类似,只是比较导体158还要附加地与COL引脚84相耦合。
同样,rowmin指令的执行与locmin指令的类似,只是比较导体158还要与 ROW引脚82相耦合。且colmin指令的执行与locmin指令的类似,只是比较导体158还要与 COL引脚84相耦合。
参见图5-29,用于比较操作的“线或”线158,可只被用在数据处理机10.x的内部,或者通过集成电路引脚与外部“线或”线连接以用于多芯片操作。数据处理机10.x支持跨越如图5-29所示的二维阵列中的数据处理机10.x的任何行或列的多芯片最大或最小存储单元的操作。采用了多个“线或”线166和168。通常,每行有一条外部“线或”线,每列有一条外部“线或”线。
在本实施例中,各数据处理机10.x有一个用于与一条“线或”行线168相耦合的 ROW引脚82,和一个用于与一条“线或”列线166相耦合的 COL引脚84。这些列导体166和行导体168被用作用于行和列导向的多芯片操作的“线或”线;这些操作是在数据处理机10.x在Run操作方式下执行指令时进行的。注意, ROW引脚82和 COL引脚84在Stop操作方式下有一种不同的功能。在Stop操作方式下, ROW引脚82和 COL引脚84的使用方式与芯片选择类似。
(5.10.2)指令vmaxp、vmax、vminp、和vmin、maxp、max、minp、和min
对于模糊逻辑,神经网络、和其他并行、阵列导向应用,需要一种简单而快速的技术和机制,以便为矢量和标量操作数均进行最大和最小值确定。该技术和机制应该能对带符号(二进制的补码)和不带符号的数进行最大和最小值确定。而且,该技术和机制应能对扩充长度的(多字节的)操作数进行最大和最不值确定。尽管这种用于最小和最大值确定的技术对神经网应用非常有用,但它当然也可被用于多种其他应用。
参见图2-67,矢量最大和矢量最小指令即vmaxp、vmax、vminp、和vmin的执行涉及到矢量机9。表2.44描述了矢量最大和矢量最小指令。表2.36列出了哪些存储器能被用作源寄存器(即vreglS),且表2.37列出了哪些寄存器能被用作目地寄存器(即vreg2D)。2.5.12.3和表2.74也描述矢量最大和矢量最小指令。
参见图2-68和2-68-1,矢量最大和矢量最小指令的比较部分由算术逻辑单元(ALU)119执行。由于比较功能由用于加、减、和比较指令的同一ALU119执行,因此这些最小和最大指令几乎不需要什么额外的电路。注意在本发明的其他实施例中,可用任何类型的比较器电路来执行该比较功能。
一个符号位,即位于算术控制寄存器(ACR)172中的VSGN位176,确定矢量最大和最小指令所用的数据值将被和为带符号的还是不带符号的数来处理。矢量机9有两个扩充位,即位于矢量进程控制寄存器(VPCR)102中的VX0位104和VX1位105。这两个扩充位被用来支持扩充长度的操作,包括扩充长度的最小和最大操作。这两个扩充位通常被清除到缺省状态,除了在扩充长度的计算期间。
参见图2-67,标量机26涉及标量最大和标量最小指令—即maxp、max、minp、和min——的执行。表2.51描述矢量最大和矢量最小指令。表2.38列出了哪些寄存器可被用作源寄存器(即“sregS”)和目标寄存器(即“sregD”)。
参见图2-70,标量最大和标量最小指令的比较部分由算术逻辑单元(ALU)304执行。由于比较功能由用于加、减、和比较指令的同一ALU304执行,因此这些最小和最大指令几乎不需要什么额外的电路。注意在本发明的其他实施例中,可用任何类型的比较器电路来执行该比较功能。
一个符号位,即位于算术控制寄存器(ACR)172中的SSGN位174,确定标量最大和最小指令所用的数据值是将被作为带符号的还是不带符号的数来处理。标量机26有两个扩充位,即位于SPCR寄存器208中的SX0位210和SX1位212。这两个扩充位被用来支持扩充长度的操作,包括扩充长度的最小和最大操作。这两个扩充位通常被清除到缺省状态,除非在扩充长度的计算期间。
图5-10显示了数据处理机10在各种比较指令的执行中所执行的步骤,包括矢量和标量最小和最大指令。
在本发明中,只需要一个指令来计算两个单字节操作数的最小或最大值,例如,单个指令“min G0,G1”可被用来计算存储在寄存器G0和G1(见图2-70中的G〔n〕寄存器302)中的两个单字节操作数的最小值。注意,其结果即两个值中的较小者,被存储在寄存器G1中。还请注意要求扩充位SX0 210和SX1 212在指令开始之前处于它们的缺省状态,在所示实施例中即%00。
以下的步骤在min指令期间执行。ALU304用带符号或不带符号的算术运算比较两个数据值,如由SSGN位174所指定的。ALU304从目标数据值中减去源数据值。ALU304产生一表示减操作是否需要借位的借位值。若减的结果是负值,则借位值被认定。若减的结果是正值,则借位值被否定。
ALU304在控制电路308接收的借位信号上输出借位值。控制电路308然后在ALU304的输出端把一个或多个控制信号送到一个多路转换器(未显示),使ALU304选择较小的数据值作为结果。该结果,即较小的数据值,然后被传送到目标寄存器并存储在其中。由于min指令是一种“非前级”指令,它无条件地把扩充位SX0 210和SX1 212清除到缺省状态。控制电路308和位修正电路306被用来改变标量进程控制寄存器(SPCR)208中的位的逻辑状态。
一串一个或多个的前级指令——其后面跟有一单个的非前级指令——通常被用来计算扩充长度的操作数的最小或最大值。例如,下面的一串指令可被用来计算在源寄存器组(G2,G1,G0)和目标寄存器组(G5,G4,G3)中的两个3字节数的最小值。注意其结果,即两个3字节值中的较小者,被存储在寄存器组(G5,G4,G3)中。还请注意在第一指令“minp G2,G5”开始之前,扩充位SX0 210和SX1 212必须处于它们的缺省状态。
minp G2,G5;min前级G2至G5
           ;(产生扩充位)
minp G1,G4;min前级G1至G4
           ;(产生扩充位)
min G0,G3 ;min G0至G3
           ;(使扩充位返回缺省状态)
注意前级指令minp被用于最高有效字节,且非前级指令min被用于最后的最低有效字节。第一个指令,即“minp G2,G5”,利用扩充位SX0 210和SX1 212在指令开始时处于缺省状态这一事实,来确定它正在处理最高有效字节。所以,“minp G2,G5”指令利用带符号或不带符号的数比较G2与G5,如SSGN位174所指定的。
“minp G2,G5”指令选择较小的操作数字节作为结果,并且有选择地修正扩充位SX0 210和SX1 212,以表示比较的结果(见表2.59)。如果存储在寄存器G2中的数据值小于存储在寄存器G5中的数据值,则寄存器G2被选择为结果且扩充位SX0 210和SX1212被有选择地修正为等于%01。如果存储在寄存器G2中的数据值大于存储在寄存器G5中的数据值,则寄存器G5被选择为结果,且扩充位SX0 210和SX1 212被有选择地修正为等于%10。如果存储在寄存器G2中的数据值等于存储在寄存器G5中的数据值,则两个数据值之一被选择为结果,而且扩充位SX0 210和SX1 212被有选择地修正为等于%11。
第二指令,即“minp G1,G4”,利用扩充位SX0 210和SX1212在指令开始时不处于缺省状态这一事实,以确定它不在处理最高有效字节。
如果扩充位SX0 210和SX1 212的输入值是%01,则已确定出存储在寄存器组(G2,G1,G0)中的3字节值小于存储在寄存器组(G5,G4,G3)中的数据值。因此,存储在寄存器G1中的数据值被选为结果,且扩充位SX0 210和SX1 212保持为%01。
如果扩充位SX0 210和SX1 212的输入值是%10,则已经确定出存储在寄存器组(G2,G1,G0)中的3字节值大于存储在寄存器组(G5,G4,G3)中的3字节值,所以,存储在寄存器G4中的数据值被选为结果并且扩充位保持为%10。
如果扩充位SX0 210和SX1 212的输入值是%11,则利用不带符号的算术运算把存储在寄存器G1中的数据值与存储在G4中的数据值进行比较。注意,该字节不是最高有效字节,所以不包含一个符号位,即使该3字节数是带符号的。“minp G1,G4”指令选择较小的值作为结果,并根据比较的结果有选择地把扩充位SX0210和SX1 212修正为%01、%10、或%11(见表2.59)。
最后的指令,“min G0,G3”,是非前级指令,且它以与上述“minp G1,G4”指令相同的方式起作用,只是除了它把扩充位SX0 210和SX1 212返回到它们的缺省状态%00。
虽然上述的例子利用了标量指令min和minp,但是对于矢量指令vmin和vminp,在各启动的处理部件16中也将进行相同的步骤。
对于确定最大值的计算,采用了标量指令max和maxp以及矢量指令vmax和vmaxp。最大指令的功能与最小指令的功能非常类似,只是较大而不是较小的值被选作为将被存储在目标寄存器中的结果。
图5-31显示了一串指令的例子,它可被用来计算源寄存器组(G2,G1,G0)和目标寄存器组(G5,G4,G3)中的两个3字节不带符号数的最大值。注意其结果,即两个3字节值中的较大者,被存储在寄存器组(G5,G4,G3)中。还请注意要求扩充位SX0 210和SX1 212,在第一指令“maxp G2,G5”开始之前,处于它们的缺省状态。还请注意符号位SSGN174等于%1,从而表明该数据将被作为不带符号的数来处理。
maxp G2,G5;max前级G2至G5
           ;(产生扩充位)
maxp G1,G4;max前级G1至G4
           ;(产生扩充位)
max G0,G3 ;max G0至G3
           ;(把扩充位返回缺省状态)
图5-32显示了一串指令的例子,它可被用于计算在源寄存器组(G2,G1,G0)和目标寄存器组(G5,G4,G3)中的两个不带符号的3字节数的最大值。注意其结果,即两个3字节值中的较大者,被存储在寄存器组(G5,G4,G3)中。还请注意请求在第一指令“maxp G2,G5”开始之前,扩充位SX0 210和SX1 212处于它们的缺省状态。还请注意符号位SSGN174等于%0,从而表明数据值将被当作带符号的(二进制的补码)数处理。
maxp G2,G5;max前级G2至G5
           ;(产生扩充位)
maxp G1,G4;max前级G1至G4
           ;(产生扩充位)
max G0,G3;maxG0至G3
            (把扩充位返回缺省状态)
(5.11)对系数存储器阵列(CMA)14的反向存取
参见图2-67和5-33,在本发明的所示实施例中,系数存储器阵列(VH)14是一个布置成六十四行和六十四列的字节宽存储电路。本发明的其他实施例可有不同数目的行和列。各处理部件16每次与VH14中的一行相耦合,从而使每一处理部件16每次能对六十四字节的信息进行存取。
为了尽量减小VH14和处理部件16所需要的半导体区域,处理部件16在实体上被分成两部分,处理部件16的第一部分在实体上位于VH14的第一侧。处理部件16的第二部分在实体位于VH14的不同一侧(见图5-33)。
通过改变VH14的行(如图5-33所示),有可能在实体上把各处理部件16与附加的存储器行相耦合。这样各处理部件16就可存取两倍的存储器存储单元。各存储器存储单元对应一个字节宽存储电路。另外,可在不影响VH14和处理部件16之间的接口的情况下,除去一半的处理部件16(即两个部分中的一个部分)。而且,处理部件16之间的通信得到了改进,因为处理部件PE〔n〕可与处理部件PE〔63-n〕交换数据。例如,处理部件PE〔0〕可与处理部件PE〔63〕交换数据;而处理部件PE〔30〕可与处理部件PE〔33〕交换数据。
一个选择电路204耦合在VH14和包括PE〔0〕至PE〔31〕的一部分处理部件16之间。选择电路206耦合在VH14包括PE〔32〕至PE〔63〕的一部分处理部件16之间。选择电路204和选择电路206被用来选择两行中的哪一行被耦合到各处理部件16并且由各处理部件16所存取。
由于VH14中的行的实体布置,处理部件PE〔0〕可用很少的电导体路由耦合到VH14中的行63,从而最大限度地减小了所需要的半导体区域。处理部件PE〔n〕能存取其本身的对应存储器行(行n);而且处理部件PE〔n〕还能存取与处理部件PE〔63-n〕对应的存储器行(行63-n)。
存储器的存取利用标量机内的指针寄存器中的指针值来选择对哪行VH14进行存取(见图2-59和图2-70中的全局指针寄存器P〔0〕-P〔7〕300)。该指针值从0至127是有效的。最高有效位(在所示的实施例中为位6)被用来在对应行和非对应行之间进行选择。如果最高有效位被否定,则对应行被处理部件16所使用。而如果最高有效位被认定,则非对应行被处理部件16所使用。对处理部件PE〔n〕来说对应行是行“n”,而对处理部件PE〔n〕来说非对应行是行“63-n”。对同一存储器存储单元的同时写入得到了避免,因为所有的处理部件16将对它们的对应行进行写入,或所有的处理部件16将对它们的非对应行进行写入。
从程序员的观点看,非对应行可被用作为一种反转矢量的途径。当处理部件16把字节值写入它们的非对应行中的一个或多个列中,并随后把该字节值从它们的对应行中的同样的一个或多个列中读出时,就发生了矢量的反转。处理部件PE〔63〕现在存储原来存储在处理部件PE〔0〕中的值,并且处理部件PE〔0〕现在存储原来存储在处理部件PE〔63〕中的值。这种处理部件16可存取在CMA14中的对应行或者非对应行的事实,对于数据移动操作(例如下移操作)和可以把VT位110用作启动位的这一事实,都是非常有用的。
                                            表2.1信号概述
    组    信号名称  助记符号   方向       功能
端口信号 北数据/地址 ND I/O   双向8位数据或LSB地址端口
北控制输出 NCO O   北端口上的数据为有效输出
北控制输入 NCI I   北端口上的数据为有效输入
  南数据    SD   I/O   双向8位数据端口
  南控制输出 SCO O   南端口上的数据为有效输出
南控制输入 SCI I   南端口上的数据为有效输入
  东数据    ED   I/O   双向8位数据端口
东控制输出 ECO O   东端口上的数据为有效输出
东控制输入 ECI I   东端口上的数据为有效输入
西数据/地址 WD I/O   双向8位数据或MSB地址端口
西控制输出 WCO O   西端口上的数据为有效输出
西控制输入 WCI I   西端口上的数据为有效输入
主机存取控制 读/写控制 R/ W I 主机读写控制输入
  存取方式    OP    I 主机存取选择
  数据启动    EN    I 用于主机存取的数据启动
系统配合信号 Run/Stop控制 R/ S I   Run/Stop控制主机存取和程序执行
忙控制 BUSY O   用于联合机间程序同步的忙控制
行/列信号 行控制 ROW I/O   主机行选择输入和行min/max控制
列控制 COL I/O   主机列选择输入和列min/max控制
                                       表2.1(续)信号概述
      组    信号名称   助记符号   方向        功能
其它信号(从  页起) 系统时钟 CLK I 时钟输入以导出所有总线信号定时
系统复位     RESET     I 联合机复位输入
中断     INTR     O 联合机中断线
处理机状态  PSTAT[2:0]     O 联合机处理机状态
通用I/O   PA[1:0]    I/O 通用程序输入/输出
测试信号(从  页起) 测试时钟 TCK I 用于IEEE1149.1测试存取端口(TAP)的时钟信号
测试复位     TRST     I 用于TAP的测试复位输入
测试数据输入     TDI     I 串行数据输入
测试数据输出     TDO     O 串行数据输出
测试方式选择     TMS     I 选择测试电路的操作
电源     电源     VDD     - 电源
    接地     VSS     - 接地
                               表2.2基于Run/Stop方式的信号功能性
       信号        Run方式        Stop方式
ND,WD 程序写数据     主机地址输入或主机数据输入/输出
      SD,ED      程序写数据     主机数据输入/输出
     NCO, SCO,WCO, ECO   ND、SD、WID、ED输出数据为有效     ND、SD、WD、ED输出数据为有效
   NCI, SCI, WCI,ECI   ND、SD、WID、ED输入数据为有效     ND、SD、WD、ED输入数据为有效
EN,OP,R/ W 不必关心     ND、SD、WD、ED输出数据为有效
ROW,COL     行和列最小值和最大值功能 行和列芯片选择
                                     表2.3处理机状态信号的编码
 PSTAT[2]  PSTAT[1]  PSTAT[0]                  状态
0 0 0 联合机拖延在IDR引用上(阶段#3流线拖延)
    0     0     1 任一write,vwrite指令正在执行中
    0     1     0 除vwrite外的任一矢量指令正在执行中
    0     1     1 除write外的任一标量指令正在执行中
    1     0     0 任一vif,velse,vendif指令正在执行中
    1     0     1 异常处理
    1     1     0 出现转移
    1     1     1 不出现转移
                                   表2.4联合机直流电气特性
        特性    最小值    最大值    单位
    输入高电压(VIH)    0.7VDD     VDD     V
    输入低电压     VSS    0.2VDD     V
    输入漏泄电流     -2.5     2.5     μA
    三态漏泄电流     -20     20     μA
    输出高电压   VDD-0.8     VDD     V
    输出低电压     VSS     0.4     V
    输出高电流     0.4     mA
    输出低电流     3.2     mA
    载荷电容     60     pF
    输入电容     20     pF
Figure C9410329702951
Figure C9410329702961
Figure C9410329702971
Figure C9410329702981
Figure C9410329703011
Figure C9410329703021
                                         表2.7ACR位定义
位的位置    位    定义  状态                说    明
0 SSGN(174)    标量带符号/不带符号   0     在标量机中进行带符号算术运算
  1     在标量机中进行不带符号算术运算
1 VSGN(176)    矢量带符号/不带符号   0     在矢量机中进行带符号算术运算
  1     矢量机中进行不带符号算术运算
                                              表2.8 ESR位定义
 位的位置   位     定义  状态         说    明
0 SVE   标量溢出异常   0     没有出现标量溢出
  1     已出现标量溢出
1 VVE   矢量溢出异常   0     没有出现矢量溢出
  1     已出现矢量溢出
2   SDE    标量被零除异常   0     没有出现标量被零除
  1     已出现标量被零除
3 VDE    矢量被零除异常   0     没有出现矢量被零除
  1     已出现矢量被零除
4 PCE    PC越界异常   0     没有出现PC越界
  1     已出现PC越界
5 IOE  非法操作码异常   0     没有出现非法操作码
  1     已出现非法操作码
6 PEE   端口错误异常   0     没有出现端口错误
  1     已出现端口错误
7 ICE   基于指令的IDR争用   0     没有出现基于指令的IDR争用
  1     已出现基于指令的IDR争用
                                           表2.9 EMR位定义
 位的位置   位     定义  状态            说    明
0 SVEM  标量溢出异常屏蔽    0     标量溢出将产生异常
   1     标量溢出将不产生异常
1 VVEM  矢量溢出异常屏蔽    0     矢量溢出将产生异常
   1     矢量溢出将不产生异常
2 SDEM  标量被零除异常屏蔽    0     标量被零除将产生异常
   1     标量被零除将不产生异常
3 VDEM  矢量被零除异常屏蔽    0     矢量被零除将产生异常
   1     矢量被零除将不产生异常
4 PCEM  PC越界异常屏蔽    0     PC越界将产生异常
   1     PC越界将不产生异常
    5  IOEM  非法操作码异常屏蔽    0     非法操作码将产生异常
   1     非法操作码将不产生异常
6 PEEM  端口错误异常屏蔽    0     端口错误将产生异常
   1     端口错误将不产生异常
7 TCEM  基于指令的IDR争用异常屏蔽    0     基于指令的IDR争用将产生异常
   1    基于指令的IDR争用将不产生异常
                                        表2.10 PCR位定义
位的位置     位      定义  状态              说    明
0 WT(64) 西抽头位    0       西抽头断开
1   西抽头连接。对西端口的外部写将被送给IDR
1 ST(66) 南抽头位    0       南抽头断开
1   将被送给IDR南抽头连接。对南端口的外部写
2 ET(68) 东抽头位    0       东抽头断开
1   东抽头连接。对东端口的外部写将被送给IDR
3 NT(70) 北抽头位    0       北抽头断开
1   北抽头连接。对北端口的外部写将被送给IDR
4 EWS(72) 东-西开关位    0     东-西开关断开
   1     东-西开关连接
5 NSS(74) 北-南开关位    0     北-南开关断开
   1     北-南开关连接
6 FM(76) 填充方式    0     输入变址方式
   1     输入标记方式
                                        表2.11APMR位定义
 位的位置     位      定义  状态                 说    明
0 EW (外部)西端口写    0     没有检测到从西端口至西端口的写
   1     检测到从西端口到西端口的写
1 ES (外部)南端口写    0     没有检测到从南端口到南端口的写
   1     检测到从南端口到南端口的写
2 EE (外部)东端口写    0     没有检测到从东端口到东端口的写
   1     检测到从东端口到东端口的写
3 EN (外部)北端口写    0     没有检测到从北端口到北端口的写
   1     检测到从北端口到北端口的写
4 IW (内部)西端口写 0     没有检测到由于微代码writew指令的对西端口的写
1     检测到由于微代码writew指令的对西端口的写
5 IS (内部)南端口写 0     没有检测到由于微代码writes指令的对南端口的写
1     检测到由于微代码writes指令的对南端口的写
6 IE (内部)东端口写 0     没有检测到由于微代码writee指令的对东端口的写
1     检测到由于微代码writee指令的对东端口的写
7 IN (内部)北端口写 0     没有检测到由于微代码writen指令的对北端口的写
1     检测到由于微代码writen指令的对北端口的写
                              表2.12 GPDR位定义
 位的位置    位   定义   状态         说    明
0 DIR0 方向    0     PA[0]作为输入操作
   1     PA[0]作为输出操作
1 DIR1 方向    0     PA[1]作为输入操作
   1     PA[1]作为输出操作
                                 表2.13 HSSR位定义
 位的位置      位     定义  状态        说    明
3:0 LS[3:0]   逻辑地址选择 参见表2.14中对LS位的定义
5:4 HSP[1:0]    主机流端口选择 参见表2.15中对HSP位的定义
                       表2.14 LS位定义
  LS3   LS2   LS1   LS0     选择的空间
   0    0    0    0     IDR
   0    0    0    1     ITR
   0    0    1    0     MMA
   0    0    1    1     CMA
   0    1    0    0     V[0]
   0    1    0    1     V[1]
   0    1    1    0     V[2]
   0    1    1    1     V[3]
   1    0    0    0     V[4]
   1    0    0    1     V[5]
   1    0    1    0     V[6]
   1    0    1    1     V[7]
   1    1    0    0     VPCR
   1    1    0    1     IC
   1    1    1    0     MOTOROLA公司保留
1 1 1 1     整个寄存器集($0000-$1FFF)
                                         表2.15 HSP位定义
 HSP1  HSP0                  流方向
0 0     该装置不改变数据流,但是把出现在一个端口处的任何数据传送给相对的端口
   0    1          主机流数据在南端口提供
   1    0          主机流数据在东端口提供
   1    1                    保留
                                           表2.16 NSHR位定义
 位的位置    位      定义  状态               说    明
0 V 有效数据    0  NSHR的数据字节不含有有效数据
   1  NSHR的数据字节含有有效数据
1 DIR 传送方向 0  NSHR的数据字节中包含的数据被写出北端口
1  NSHR的数据字节中包含的数据被写出南端口
2 SRC 源指示 0  NSHR的数据字节中包含的数据是通过该装置的一个外部写的结果
1 NSHR的数据字节中包含的数据是该装置微代码writen,writes,vwriten或vwrites指令的结果
                                        表2.17 EWHR位定义
位的位置    位      定义  状态                说    明
0 V 有效数据   0  EWHR的数据字节不含有有效数据
  1  EWHR的数据字节含有有效数据
1 DIR 传送方向 0  EWHR的数据字节中包含的数据被写出东端口
1  EWHR的数据字节中包含的数据被写出西端口
2 SRC 源指示 0  EWHR的数据字节中包含的数据是通过该装置的一个外部写的结果
1  EWHR的数据字节中包含的数据是该装置微代码writee,writew,vwritee或vwritew指令的结果
                                表2.18随机存取图中跳过的地址
                                           地址区域
    $0140-$01FF     $0740-$07FF
    $0240-$02FF     $0840-$08FF
    $0340-$03FF     $0940-$09FF
    $0440-$04FF     $0A40-$0AFF
    $0540-$05FF     $0B80-$0CFF
    $0640-$06FF     $0E00-$0FFF
                                      表2.19 ISR1位定义
位的位置 位名称   位定义  状态            说    明
0 SVI   标量机溢出    0     未出现标量机溢出
1 从上次读ISR1以来出现了标量机溢出
1 VVI 矢量机溢出    0     未出现矢量机溢出
   1 从上次读ISR1以来出现了矢量机溢出
2 SDI 标量机被零除    0     未出现标量机被零除
1     从上次读ISR1以来出现了标量机被零除
3 VDI 矢量机被零除    0     未出现矢量机被零除
1     从上次读ISR1以来出现了矢量机被零除
4 PCI PC越界 0     从上次读ISR1以来PC未越过它的边界
1     表示程序计数器(PC)已越过它的边界
5 IOI 非法操作码 0       表示从上次读ISR1以来未执行非法操作码
   1     表示执行过非法操作码
6 PEI 端口错误    0         未出现端口错误
   1         出现过端口错误
7 ICI 基于指令的IDR争用    0     未出现基于指令的IDR争用
   1     出现过基于指令的IDR争用
                                          表2.20 IMR1位定义
位的位置 位名称     位定义  状态               说    明
0 SVIM   标量溢出中断屏蔽    0  标量机溢出将产生外部中断
   1  标量机溢出将不产生外部中断
1 VVIM 矢量溢出中断屏蔽    0  矢量机溢出将产生外部中断
   1  矢量机溢出将不产生外部中断
2 SDIM 标量被零除中断屏蔽    0  标量机被零除将产生外部中断
   1  标量机被零除将不产生外部中断
3 VDIM   矢量被零除中断屏蔽    0  矢量机被零除将产生外部中断
   1  矢量机被零除将不产生外部中断
4 PCIM PC越界中断屏蔽 0     若ISR1的PCI位被置位,PC越界将产生外部中断
   1     PC越界将不产生外部中断
5 IOIM 非法操作码中断屏蔽    0  对非法操作码的执行将产生外部中断
1        对非法操作码的执行将不产生外部中断
6 PEIM 端口错误中断屏蔽    0  端口的一出错条件将产生外部中断
   1  端口的一出错条件将不产生外部中断
7 ICIM 基于指令的IDR争用中断屏蔽    0  基于指令的IDR争用将产生外部中断
1       基于指令的IDR争用将不产生外部中断
                                           表2.21 ISR2位定义
位的位置  位名称 位定义 状态 说    明
0 HLTI 中止执行 0     指明由于对该寄存器的读中止指令未被执行
   1     中止指令被执行
3:1  SI[2:0] 软件中断 请见表2.22中对SI[2:0]位的说明
                                       表2.22软件中断状态位编码
  SI2   SI1   SI0            说    明
    0     0     0     未产生软件中断
    0     0     1     intr#1微代码指令被执行
    0     1     0     intr#2微代码指令被执行
    0     1     1     intr#3微代码指令被执行
    1     0     0     intr#4微代码指令被执行
    1     0     1     intr#5微代码指令被执行
    1     1     0     intr#6微代码指令被执行
    1     1     1     intr#7微代码指令被执行
                                         表2.23 IMR2位定义
位的位置    位名称 位定义 状态 说    明
0 HLTM    中止中断屏蔽 0   若ISR2的HLTI位被置位,对中止指令的执行将产生外部中断
  1   对中止指令的执行不产生外部中断
3:1   SIM[2:0]  软件中断屏蔽 请见表2.24中对SIM[2:0]的说明
                                 表2.24软件中断屏蔽位编码
 SIM2   SIM1  SIM0              说    明
    0     0     0     软件中断#1-#7将产生外部中断
    0     0     1     软件中断#2-#7将产生外部中断
    0     1     0     软件中断#3-#7将产生外部中断
    0     1     1     软件中断#4-#7将产生外部中断
    1     0     0     软件中断#5-#7将产生外部中断
    1     0     1     软件中断#6-#7将产生外部中断
    1     1     0     软件中断#7将产生外部中断
    1     1     1     所有软件中断(intr#1到intr#7)被屏蔽掉,不产生外部中断
                                         表2.25 MCR位定义
位的位置    位    定义  状态              说    明
0 SS 单步    0          不运行  单步
   1   执行由程序计数器指向的单指令
1 RSA 复位SIMD阵列    0         SIMD阵列不被复位
1  各个VPCR中的VT位被置位。而各个VPCR中的VH位被清零。一组VT位被置位、VH位被清零后,RSA位被清零
2 STKF CMA栈标记    0 STKF和FLSF位的编码示于表2.26中
   1
3 FLSF   一级栈标记    0
   1
4 RELF(198) repeate循环标记    0        当前未执行repeate循环
   1        当前正在执行repeate循环
5 RPLF(200) repeat循环标    0        当前未执行repeat循环
   1        当前执行repeat循环
6 ILF 指令锁定    0           微定序器被启动
   1           微定序器被禁止
                               表2.26 STKF位和FLSF位的编码
 FLSF  STKF                       说    明
  0   1     复位条件。FLS寄存器屏蔽被标为无效。CMA栈为空的
  1   1     FLS寄存器包含一有效返回地址。CMA栈为空的
1 0            FLS寄存器包含一有效返回地址。CMA栈至少包含一个有效返回地址
  0   0                 FLS中为无效返回地址
                                       表2.27 MSR位定义
 位的位置   位       定义 状态                说    明
1 R 微定序器运行 0   当R/ S线转变到Stop状态时SIMD指令定序器不执行指令。如果联合机在R/ S线进入Stop状态前已执行过done或halt指令会出现这种情况
1   当R/ S线转变到Stop状态时SIMD指令定序器正在执行指令
4:2   EXE[2:0]     内部执行状态 请见表2.28对EXE[2:0]位的说明
                                   表2.28 EXE[2:0]位定义
 EXE[2]  EXE[1]   EXE[0]                  说    明
    0     0     0     联合机拖延在IDR引用上(3级流线拖延)
    0     0     1     任一write,vwrite指令正在执行中
    0     1     0     除了vwrite外的任一矢量指令在执行中
    0     1     1     除了write外的任一标量指令在执行中
    1     0     0     任一vif,velse,vendif指令在执行中
    1     0     1           出现标量程序流程改变
    1     1     0     异常处理在进程中而不是复位
    1     1     1               复位状态
                                        表2.29 SPCR位定义
  位的位置   位     定义  状态               说    明
1:0   SX[1:0]     标量扩充位 请见下面的说明
2 SV 标量溢出位   0             未出现溢出
  1        前面的算术运算产生溢出
3 SD 标量溢出方向位   0     如果出现溢出,溢出为负方向的
  1     如果出现溢出,溢出为正方向
                                      表2.30 ICVR位定义
位的位置   定义  状态                说    明
0 ICV0 指令高速缓冲存储器线路#0有效   0     高速缓冲存储器线路#0无效
  1     高速缓冲存储器线路#0有效
1 ICV1 指令高速缓冲存储器线路#1有效   0     高速缓冲存储器线路#1无效
  1     高速缓冲存储器线路#1有效
2 ICV2 指令高速缓冲存储器线路#2有效   0     高速缓冲存储器线路#2无效
  1     高速缓冲存储器线路#2有效
3 ICV3 指令高速缓冲存储器线路#3有效   0     高速缓冲存储器线路#3无效
  1     高速缓冲存储器线路#3有效
                                      表2.33  SPCR寄存器位说明
    位                         说    明
SX[1:0] 标量扩充位。这些位被用来扩充某些算术运算和逻辑指令的精度。根据操作,这两个位将有不同的含意。更多的信息请参见2.5.19节“多字节运算”。
    SV 标量溢出位(SV)和标量溢出方向位(SD)。这些位被用来表示在前面的标量算术运算中生的溢出和如果有溢出发生,指出所发生的溢出的方向。关于SV和SD位的设定和使用的更详细描述,请参见第页上对SPCR位的描述。
SD
                                              表2.31 VPCR位定义
 位的位置   定义   状态                     说    明
1:0 VX[1:0(104,105)   矢量扩充位 用于扩充矢量算术运算
2 VV(106) 矢量溢出位    0         无溢出出现
   1   前面的算术运算产生了一溢出
3 VD(108) 矢量方向位    0   如果溢出产生,溢出是负方向的
   1   如果溢出产生,溢出是正方向的
4 VT(110) 矢量条件真位    0             层不活动
   1             层活动
5 VH(112) 矢量条件历史位 0   表示这一处理部件最近一次执行vendif指令以来未获得条件语句
1   表示这一处理部件最近一次执行vendif指令以来获得了条件语句
6 VID(114) 矢量输入数据有效位 0     输入数据寄存器(IDR)中的对应逻辑不是有效的
1     输入数据寄存器(IDR)中的对应逻辑是有效的
                                          表2.32 VPCR寄存器位说明
   位                                   说     明
VX[1:O] 矢量机扩充位。该位设定在最后一次算术运算的值。该位的主要作用是扩充矢量机中的算术运算的精度。这些位被用来为多字节操作保持扩充信息。根据该指令,这两个位将有不同的含意。更多的信息请参见2.5.19节“多字节操作”。
   VV 矢量溢出位(VV)和矢量溢出方向位(VD)。这些位被用来表示在前面的矢量算术运算中发生的溢出和所发生的溢出的方向。关于VV和VD位的设定和使用的更详细描述,请参见第页上对VPCR位的描述。
VD
VT “真”位。这是一处理屏蔽位。该它被设置时,它使微代码操作的目标操作数得到更新(包含VX位)。在该位被请零时,目标寄存器的更新被封锁。这使某些处理部件能进行计算而同时使另一些位基本上被闲置。该位可用vif,velse,vrotrt,colmin,colmax,rowmin,rowmax和locmax指令修改。
VH 历史位。该位被与VT位一起使用,以使velse-vif结构能正常地工作。该位记录了该处理部件是否把一vif语句评价为“真”。若该位被设置,VT位将不被设置,直到vendif指令执行之后为止。该位可被velse,vrotrh和vendif指令修改。
VID 输入数据有效。若该位被设置,则表示有效数据处在IDR中对应的存储单元。即,若处理部件14的VD位被设置,则位于IDR[14]中的数据有效。否则,IDR中的数据被当作无效的。每次外部的源把数据写入IDR,对应的VID都被设置。用clearv指令可清除所有的VID位。
                                      表2.34 指令按类型的分类
  2.5.10节AE系统控制操作
CLEARV     HALT     INTR        RESTARTDONE       ILLEGAL  NOP         SETV
  2.5.11节矢量机数据移动
DROTMOV    VMOV     VSTORE      VSTOREI    VWRITEL    VWRITESDSROT      VMOVTV   VSTOREA     VWRITEE    VWRITEN    VWRITEW
  2.5.12节矢量机数据操作
DADD       VABS     VBCNT       VMIN       VRAND      VSUBPDADDP      VADD     VDIV        VMINP      VROTRV     VSUBSXDMAX       VADDP    VISHFT      VMUL       VRSHFT     VSUBSXPDMAXP      VADDSX   VISHFTV     VNEG       VRSHFTP    VXORDMIN       VADDSXP  VMAX        VNEGP      VSATDMINP      VAND     VAMAXP      VOR        VSUB
  2.5.13节矢量机条件操作
COLMAX     LOCMIN   VCOMPP      VIFEQ      VIFLE      VIFNV      VISHFTTCOLMIN     ROWMAX   VELSE       VIFGE      VIFLT      VIFV       VROTRHLOCMAX     ROWMIN   VENDIF      VIFGT      VIFNE      VISHFTH    VROTRT
  2.5.14节标量机数据移动
GET        LOADR    MOVFC       MOVFSP     PUSH       STORE      WRITENGETPE      MOV      MOVTC       MOVTSP     PUT        WRITEE     WRITESLOADA      MOVCI    MOVI        POP        STOREA     WRITEL     WRITEW
  2.5.15节标量机数据操作
ABS        AND      DECSP       LSHFT      MUL        RAND       SUBPADD        BCNT     DIV         MAX        NEG        RSHFT      SUBSXADDP       COMPP    INC         MAXP       NEGP       RSHFTP     SUBSXPADDSX      DEC      INCP        MIN        NOT        SAT        XORADDSXP     DECP     INCSP       MINP       OR         SUB
  2.5.16节标量机程序流程控制操作
BRA        DSKIPE   JSRMI       REPEATE    SKIPEQ     SKIPLE     SKIPNVBSR        JMPMI    JSRRI       RETURN     SKIPGE     SKIPLT     SKIPNVTDSKIP      JMPRI    REPEAT      RTE        SKIPGT     SKIPNE     SKIPV
                                         表2.35 记号的含义
  记号                       含  义
 VREG1S 矢量寄存器组#1被用作指令源(见表2.36)
 VREG1D 矢量寄存器组#1被用作指令目的地(见表2.36)
 VREG2S 矢量寄存器组#2被用作指令源(见表2.37)
 VREG2D 矢量寄存器组#2被用作指令目的地(见表2.37)
 SREGS 标量寄存器组被用作指令源(见表2.38)
 SREGD 标量寄存器组被用作指令源(见表2.38)
 PC 程序计数器
 SP 栈指针寄存器
 VT VPCR“真”位
 VH VPCR历史位
 VV,SV 矢量和标量溢出位
 VD,SD 矢重和标重溢出/饱和方向位
 VX[1:0],SX[1:0] 矢量和标量扩充位
 #U 8位不带符号中间值
 #S 8位带符号(二进制补码)中间值
 #A 7位不带符号中间值
 #R 7位带符号(二进制补码)中间值
 #PE 6位处理部件号
 #C 4位控制寄存器号
 #N 3位中间值
 + 算术加算符
 ++ 后增量算符
 - 算术减算符
 * 算术乘
 / 算术除
                                      表2.35(续)记号的含义
记号   含    义
|>   算术右移
<|   算术左移
&   逻辑“与”
|   逻辑“或”
  逻辑“异或”
  逻辑求反
                                    表2.36 Vreg1字段的矢重寄存器
                          说    明
V0至V7 寄存器直接寻址。采用指定的SIMD矢量寄存器
G0至G7 寄存器直接寻址,对所有处理部件采用指定的标量寄存器
P0至P7 寄存器直接寻址。对所有处理部件采用指定的标量寄存器
CMA〔P0〕至CMA〔P7〕 寄存器间接寻址。采用被选定的P寄存器指定的CMA列。
CMA〔P0++〕至CMA〔P7++〕 寄存器间接寻址。采用被选定的P寄存器指定的CMA列。在指令后增加P寄存器的值。
IDR〔P0〕至IDR〔P7〕 寄存器间接寻址。采用被选定的P寄存器指定的IDR字节
IDR〔P0++〕至IDR〔P7++〕 寄存器间接寻址。采用选定的P寄存器指定的IDR字节。在指令之后增加P寄存器的值
    IDR 用IDR的全部内容作为矢量寄存器
                                 表2.36(续)vreg1字段的矢量寄存器
VREG1                       说    明
IDRC 用IDR的全部内容作为矢量寄存器。在指令之后清除所有VPCR VID位和Run模式影子寄存器,而不论VT位的设定如何。
    #PE 用处理部件号作为矢量源
    #-128 用矢量常数-128作为源值(十六进值$80)
    #-1 用矢量常数-1作为源值(十六进值$FF)
    #0 用矢量常数0作为源值(十六进值$00)
    #1 用矢量常数-1作为源值(十六进值$01)
    #127 用矢量常数-127作为源值(十六进值$7F)
                                  表2.37vreg2字段矢量寄存器
  VREG2                     目标寄存器说明
  V0至V7 寄存器直接寻址。指定的矢量数据寄存器的内容将被指令更新。
                                      表2.38 Sreg字段的标量寄存器
SREG                      说    明
P0至P7 寄存器直接寻址。指定的全局指针寄存器的内容包含指令的源操作数
G0至G7 寄存器直接寻址。指定的全局数据寄存器的内容包括指令的源操作数
                            表2.39 VPCR寄存器位说明
   位                                     说明
VX[1:0] 矢量机扩充位。该位被设定在最后一次算术运算的进位和符号值。该位
的主要作用是扩充矢量机中的算术运算的精度。
这些位被用来为多字节操作保持扩展信息。根据指令,这些两个
位有不同的含意。更多的信息请参见2.5.18节“扩充位和进行多
字节操作”
VV 矢量溢出位(VV)和矢量溢出方向位(VD)。这些位被用来表示在前面的矢量运术运算中发生的溢出和所发生的溢出的方向。关于vv和VD位的设定和使用的更详细描述,请参见第页上对VPCR位的描述。
VD
VT “真”位。这是处理屏蔽位。当它被设置时,它使微码操作的目标操
作数得到更新(包括VX位)。当该位被清零时,目标寄存器的更
新被封锁。这使某些处理部件能进行计算而同时使另一些位基本
上被闲置。该位可用vif、velse、vrotrt、colnin、colmax、rowmin、
rowmax和locmax指令修改。
VH 历史位。该位被与VT位一起使用,以使velse-vif结构能正常地
工作。该位记录了该处理部件是否把一vif语句评价为“真”。若该
位被设置,VT位将不被设定,直到vendif指令执行之后为止。该
位可被velse、vrotrh和vendif指令修改。
VID 输入数据有效。若该位被设定,则表示有效数据处在IDR中对应
的存储单元。即,若设定处理部件14的VID位,则位于IDR[14]
中的数据有效。否则,IDR的数据被当作无效的。每次外部的源
把数据写入IDR,对应的VID位都被设定。用clearv指令可清除所
有的VID位。
                            表2.40 SPCR寄存器位说明
     位                         说    明
SX[1:0] 标量扩充位。这些位被用来扩充某些算术运算和逻辑指令的精度。根据操作,这两个位将有不同的含意。更多的信息请参见2.5.18节“扩充位和执行操作”。
    SV 标量溢出位(SV)和标量溢出方向位(SD)。这些位被用来表示在前面的标量算术运用中发生的溢出和所发生的溢出的方向。关于SV和SD位的设定和使用的更详细描述,请参见对SPCR位的描述。
SD
                                    表2.41 联合机系统控制操作指令
  指令   句法                   操  作
  CLEARV   CLEARV 清除所有IDR有效位
DONE DONE 向AE系统表明微程序已完成此指令将否定 BUSY信号引脚并复位“RUN方式影子寄存器”
HALT HALT 中止微程序。若启动,它可造成外部中断。PC指向下一个可执行指令。为使AE重新启动(在当前指令),R/ S线必须从“RUN”状态转到“Stop”状态并再转回“RUN”状态
  ILLEGAL   ILLEGAL 该指令在执行时总产生“非法执令异常”
INTR INTR #N AE产生的软件中断。把中断级设定在#N。若启动,它可产生-外部中断。
  NOP   NOP 不操作
                                  表2.41(续)联合机系统控制操作指令
    指令    句法                   操  作
RESTART RESTART 此操作模拟正被触发的复位引脚,但不复位任何控制寄存器(SPCR和VPCR以外的)。该指令具体执行以下各项:VT<-1时所有PEs)VH<-0(对所有PEs)VID<-0(对所有PEs)VX0<-0对所有PEs)SX0<-0VX1<-0对所有PEs)SX1<-0VV<-0(对所有PEs)SV<-0VD<-0(对所有PEs)SD<-0PC<-EPPC        SP<-EPSPFLS寄存器标志被置于无效,repeat指令标记为无效。
  SETV   SETV 设置所有IDR有效位
                                       表2.42矢量机数据移动指令
  指令     句法                     操    作
DROTMOV DROTMOVVREG2S*,VREG2D 把vreg2向下转动一个PE位置。这把数据从PEn移到PEn+1,在向下转动之后,把vreg2S的值移到vreg2D。这起到向下移位和矢量移动的作用。更多的信息请参见2.5.11.1节“drot-mov指令说明”*vreg2D只包括寄存器V0-V7
DSROT     DSROT #N,VREG2 执行vreg2稀疏向下转动。更多的信息请节2.5.12.3“对vmin/vmax指令的说明”
VMOV     VMOVVREG1S,VREG2D 把vrerg1s移到vreg2D。注意这是一个64个部件的移动(取决于VT位)。
  VMOVTV     VMOVTV 把PE VT位的值移进VID位
                                     表2.42(续)矢量机数据传送指令
    指令     句法                   操作
VSTORE   VSTORE VREG1,CMA[Pn]VSTOREA VREG1,CMA[Pn++]VSTOREI VREG1,IDR vreg1的值移到选定的CMA或IDR存储单元。注意这是一个64个部件的移动(并取决于VT位)
VWRITEE VWRITEE #NVREG2 把从#0PE开始并在其地址被包含在寄存器P(N)中的PE结束的vreg2的内容写出东端口。VT位被清除的PE被跳过且没有数据被写入。
VWRITEL VWRITEL #N,VREG2 写从#0PE开始并在其地址被包含在寄存器P(N)中的PE结束的vreg2的内容。该写入操作的目的地是本地IDR寄存器。其VT位被清除的PE被跳过且没有数据被写入。这起到对IDR进行压缩移动的作用。
VWRTITEN VWRITEN #NVREG2 把从#0PE开始并在其他地址被包含在寄存器P(N)中的PE结束的vreg2的内容写出北端口。VT位被清除的PE被跳过且没有数据被写入。
VWRITES VWRITES #N,VREG2 把从#0PE开始并在其他地址被包含在寄存器P(N)中的PE结束的vreg2的内容写出南端口。VT位被清除的PE被跳过且没有数据被写入。
VWRITEW VWRITEW #N,VREG2 把从#0PE开始并在其他地址被包含在寄存器P(N)中的PE结束的vreg2的内容写出西端口。VT位被清除的PE被跳过且没有数据被写入。
                                 表2.43 dsrot指令的几个例子
PE#    初始值(V1)  在dsrot#0V1 之后  在dsrot#1V1 之后  在dsrot#2V1 之后  在dsrot#3V1 之后
    0000     X0     X15     X15     X15     X15
    0001     X1     X0     X15     X15     X15
    0010     X2     X1     X1     X15     X15
    0011     X3     X2     X1     X15     X15
    0100     X4     X3     X3     X3     X15
    0101     X5     X4     X3     X3     X15
    0110     X6     X5     X5     X3     X15
    0111     X7     X6     X5     X3     X15
    1000     X8     X7     X7     X7     X7
    1001     X9     X8     X7     X7     X7
    1010     X10     X9     X9     X7     X7
    1011     X11     X10     X9     X7     X7
    1100     X12     X11     X11     X11     X7
    1101     X13     X12     X11     X11     X7
    1110     X14     X13     X13     X11     X7
    1111     X15     X14     X13     X11     X7
                                   表2.44矢量机数据操作指令
    指令     句法                      操作
DADD DADD #N,VREG2 把PE(n)中的vreg2值加到PE(m)中的vreg2,并把结果存入PE(m)的vreg2中。该指令的结果将饱和。根据VSGN控制位,该饱和值将是不同的。n和m的值取决于#N。更多的信息请参见2.5.12.2节“向下移位操作”。
                                 表2.44(续1)矢量机数据传送指令
    指令      句法                     操作
DADDP DADDP #N,VREG2 把PE(n)中的vreg2值(前级)加到PE(m)中的vreg2,并把结果存入PE(m)的vreg2中。该指令的结果将不饱和。该指令与dadd指令一起使用,以支持多字节操作。n和m的值取决于#N。更多的信息请参见2.5.12.2节“向下移位操作”。
DMAX DMAX #N,VREG2 确定PE(n)中的vreg2到PE(m)中的vreg2的最大值,开把结果存入PE(m)的vreg2中。n和m的值取决于#N。更多的信息请参见2.5.12.2节“向下移位操作”。
DMAXP DMAXP #N,VREG2 确定(前级)PE(n)中的vreg2到PE(m)中的vreg2的最大值,并把结果存入PE(m)的vreg2中。n和m的值取决于#N。更多的信息请参见2.5.12.2节“向下移位操作”。
DMIN DMIN #N,VREG2 确定PE(n)中的vreg2到PE(m)中的vreg2的最小值,并把结果存入PE(m)的vreg2中。n和m的值取决于#N。更多的信息请参见2.5.12.2节“向下移位操作”。
DMINP DMINP #N,VREG2 确定(前级)PE(n)中的vreg2到PE(m)中的vreg2的最小值,并把结果存入PE(m)的vreg2中。n和m的值取决于#N。更多的信息请参见2.5.12.2节“向下移位操作”。
    VABS  VABS VREG2 取vreg2的绝对值。注意-128饱和至127。
VADD  VADD VREG1S,VREG2D 把vreg1S值加到vreg2D,并把结果存入vreg2D中。该指令的结果将饱和。根据VSGN控制位,该饱和值将是不同的。
                              表2.44(续2)矢量机数据传送指令
     指令     句法                    操  作
VADDP     VADDPVREG1S,VREG2D 把vreg1S加(前级)到vreg2D,并把结果存入vreg2D中。该指令的结果将不饱和。该指令被与vadd指令一起使用以支持多字节操作。
VADDSX VADDSXVREG2 带符号扩充地加到vreg2并把结果存储在vreg2中,该指令被用来把所有的进位信息(与符号扩充)加入多字节和中。该指令的结果将饱和。
VADDSXP VADDSXPVREG2 带符号扩充地加(前级)到vreg2并把结果存储在vreg2中,该指令被用来把所有的进位信息(与符号扩充)加入多字节和中。该指令的结果将饱和。
VAND  VAND VREG1S,VREG2D 对vreg1S和vreg2D进行逻辑“与”操作并把结未行储在vreg2D中。
VBCNT     VBCNTVREG2 计数vreg2中的设定位并把结果存储在vreg2中。
VDIV VDIV VREG1S,VREG2D* 用vreg2D的内容除vreg1S的内容,并把8位的商和8位的余数存储在vreg2D指定的寄存器对中。vreg2D必须是一偶数寄存器,商被存储在偶数寄存器中而余数被存储在奇数(偶数+1)寄存器中。*vreg2D只包括偶数的V寄存器(V0,V2,V4,V6)。
VLSHFT     VLSHFTVREG2 左移vreg2的内容并把结果存储在vreg2D中。各vreg2的MS位将被置于vreg2D的LS位。
VLSHFTV     VLSHFTVVREG2D 把VPCR VID位的值左移进vreg2的LS位。
VMAX  VMAX VREG1S,VREG2D 确定vreg1S和vreg2D寄存器之间的最大值并把结果存储在vreg2D中。
                                      表2.44(续3)矢量机数据传送指令
    指令     句法                    操  作
VMAXP     VMAXPVREG1S,VREG2D 确定vreg1S和vreg2D之间的最大(前级)值并把结果存储在vreg2D中。
VMIN     VMINVREG1S,VREG2D 确定vreg1S和vreg2D寄存器之间的最小值并把结果存储在vreg2D中。
VMINP     VMINPVREG1S,VREG2D 确定vreg1S和vreg2D之间的最小(前级)值并把结果存储在vreg2D中。
VMUL VMULVREG1S,VREG2D 把vreg1S的内容与vreg2D的内容相乘,并把结果存储在vreg2D指定的寄存器中。vreg2D必须是一偶数寄存器,积的MSB被存储在偶数寄存器中而积的LSB被存储在奇数(偶数+1)寄存器中。
VNEG     VNEGVREG2 对vreg2D的内容(2的补码)求负并把结果存储在vreg2D中。该指令的结果将饱和。
VNEGP     VNEGPVREG2 对vreg2D的内容(2的补码)求负并把结果存储在vreg2D中。negp指令被用来支持多字节否定。该指令的结果将饱和。
VOR     VORVREG1S,VREG2D 对vreg1S的内容和vreg2D的内容进行逻辑“或”,并把结果存储在vreg2D中。
VRAND VRANDVREG1S,VREG2D 产生一随机数。该指令将取vreg2D中的种子值。把包含在vreg1S中的屏蔽值与该种子值进行逻辑“与”操作,对结果进行逐位的“异或”操作,把所产生的LS位值移入vreg2D的最高有效位的位置。
VROTRV     VROTRVVREG2 vreg2D的LS位循环右移进VPCR VID位。
VRSHFT     VRSHFTVREG2 把vreg2D的内容右移一个位置。更多的信息请参见表2.60。
                                  表2.44(续4)矢量机数据传送指令
    指示     句法                      操  作
VRSHFTP     VRSHFTPVREG2 把vreg2D的内容右移(前级)一个位置。更多的信息请参见表2.60。
VSAT VSATVREG2 根据饱和/溢出位的状态使vreg2D的内容饱和。若前面的结果溢出,则将发生饱和操作。否则将不进行改变。饱和方向位将确定要饱和到的值。
VSUB     VSUBVREG1S,VREG2D 来自vreg2D的内容减去vreg1S的内容并把结果存储在vreg2D中。该指令的结果将饱和并取决于VSGN控制位。
VSUBP     VSUBPVREG1S,VREG2D 从vreg2D的内容减去(前级)vreg1S的内容并把结果存储在vreg2D中。该指令的结果将不饱和。
VSUBSX VSUBSXVREG2 带符号扩充地减vreg2D并把结果存储在vreg2D中。该指令被用于把借位信息(带符号扩充)减入多字节的减。该指令的结果将饱和。
VSUBSXP VSUBSXPVREG2 带符号扩充地减(前级)vreg2D并把结果存储在vreg2D中。该指令被用于把借位信息(带符号扩充)减入多字节的减。该指令的结果将不饱和。
VXOR     VXORVREG1S,VREG2D 对vreg1S的内容和vreg2D的内容进行“异或”操作,并把结果存储在vreg2D中。
Figure C9410329703331
                                     表2.46 dadd指令的几个例子
PE# 初始值     在dadd#0Vn之后     在dadd#1Vn之后     在dadd#2Vn之后     在daddVn之后
    0000     X0     X0     X0     X0     X0
    0001     X1     X1+X0     X1     X1     X1
    0010     X2     X2     X2+X1     X2     X2
    0011     X3     X3+X2     X3+X1     X3     X3
    0100     X4     X4     X4     X4+X3     X4
    0101     X5     X5+X4     X5     X5+X3     X5
    0110     X6     X6     X6+X5     X6+X3     X6
    0111     X7     X7+X6     X7+X5     X7+X3     X7
    1000     X8     X8     X8     X8     X8+X7
    1001     X9     X9+X8     X9     X9     X9+X7
    1010     X10     X10     X10+X9     X10     X10+X7
    1011     X11     X11+X10     X11+X9     X11     X11+X7
    1100     X12     X12     X12     X12+X11     X12+X7
    1101     X13     X13+X12     X13     X13+X11     X13+X7
    1110     X14     X14     X14+X13     X14+X11     X14+X7
    1111     X15     X15+X14     X15+X13     X15+X11     X15+X7
                                   表2.47矢量机条件操作指令
    指令   句法   测试                    操  作
COLMAX COLMAX#N,VREG2 N/A   跨AE列的vreg2D内容的N步最大值。该指令用 COL信号来解决跨AE装置边界的最大值。具有该最大值的PE把VPCR VT位设定为1。所有其他的均清除VPCR VT位。
COLMIN COLMIN#N,VREG2 N/A   跨AE列的vreg2D内容的N步最小值。该指令用 COL信号来解决跨AE装置边界的最小值。具有该最小值的PE把VPCR VT位设定为1。所有其他的均清除VPCR VT位。
LOCMAX   LOCMAX#N,VREG2 N/A   AE局部的vreg2D内容的N步最大值。具有该最大值的PE把VPCR VT位设定为1。所有其他的均清除VPCR VT位。
LOCMIN   LOCMIN#N,VREG2 N/A   AE局部的vreg2D内容的N步最小值。具有该最小值的PE把VPCR VT位设定为1。所有其他的均清除VPCR VT位。
ROWMAX ROWMAX#N,VREG2 N/A   跨AE列的vreg2D内容的N步最大值。该指令用 ROW信号来解决跨AE装置边界的最大值。具有该最大值的PE把VPCR VT位设定为1。所有其他的均清除VPCR VT位。
ROWMIN ROWMIN#N,VREG2 N/A   跨AE列的vreg2D内容的N步最小值。该指令用 ROW信号来解决跨AE装置边界的最小值。具有该最小值的PE把VPCR VT位设定为1。所有其他的均清除VPCR VT位。
VCOMPP   VCOMPPVREG1S,VREG2D N/A   把vreg1S的内容与vreg2D的内容相比较(前级)。根据其结果设定扩充位。
                                     表2.47矢量机条件操作指令(续)
    指令   句法    测试                操  作
VELSE VELSE N/A vif指令的else从句。更多的信息请参见2.5.13.1节“关于VT位与VH位的条件指令”。
    VENDIF   VENDIF    N/A 结束vif块。VT=1;0→VH
VIFEQ   VIFEQVREG1S,VREG2D VREG1S==VREG2D 若vreg1S等于vreg2D,VT=1,否则VT=0
VIFGE   VIFGEVREG1S,VREG2D VREG1S>=VREG2D 若vreg1S大于或等于vreg2D,VT=1,否则VT=0
VIFGT   VIFGTVREG1S,VREG2D VREG1S>VREG2D 若vreg1S大于vreg2D,VT=1,否则VT=0
VIFLE   VIFLEVREG1S,VREG2D VREG1S<=VREG2D 若vreg1S小于或等于vreg2D,VT=1,否则VT=0
VIFLT   VIFLTVREG1S,VREG2D VREG1S<VREG2D 若vreg1S小于vreg2D,VT=1,否则VT=0
VIFNE   VIFNEVREG1S,VREG2D VREG1S!=VREG2D 若vreg1S不等于vreg2D,VT=1,否则VT=0
    VIFNV   VIFNV    N/A 若溢出指示不真,VT=1,否则VT=0
    VIFV   VIFV    N/A 若溢出指示真,VT=1,否则VT=0
VLSHFTH   VLSHFTHVREG2 N/A 把VPCR VH位的值左移进vreg2的LS位。
VLSHFTT   VLSHFTTVREG2 N/A 把VPCR V位的值左移进vreg2的LS位。
VROTRH   VROTRHVREG2 N/A 把vreg2的LS位右循环移位进VPCRVH位。
VROTRT   VROTRTVREG2 N/A 把vreg2的LS位右循环移位进VPCR VT位。
                              表2.48 VPCRT和VH位的下一状态转换表
  状态          QN+1          QN 条  件
    VT     VH     VT     VH
    1     0     0     0     0   Vif被执行
    2     0     1     0     1   Vif被执行
    3     1     0 1 0   Vif真
    4     0     0   Vif假
    5     1     0     0     0   Velse被执行
    6     0     1     0     1   Velse被执行
    7     0     1     1     0   Velse被执行
    8 1 0     0     0   Vendif被执行
    9     0     1   vendif被执行
    10     1     0   Vendif被执行
Figure C9410329703361
                                    表2.50标量机数据传送指令
    指令        句法                     操  作
GET GET VREG*。SREG**,SREG 获得sreg的内容所指的PE中的vreg1的值并把结果置于sreg中。*-vreg1限于V寄存器。**-sreg限于P寄存器。
GETPE GETPE SREG 在VT位被设定设定的情况下获得第一PE的地址并把结果置于sreg中。若所有64位都被清除,则SV被设定,且sreg产的值是最后一个处理部件中的值($3f)。
LOADA   LOADA #A,SREGD 装入来自CMA存储器的绝对值。装入来自被CMA存储器的前128字节中#A指定的地址的sregD
LOADR   LOADR #R,SREGD 装入来自CMA存储器的相对值。被装入的数据的地址是当前SP值和带符号的7位中间值#R的和。数据被装入sregD
MOV   MOV SREGS,SREGD 把来自sregS的值移到sregD
MOVCI   MOVCI #U,#C 把中间值#U移到控制寄存器#C。
MOVFC   MOVFC #C,SREGD 把控制寄存器#C的值移到sregD
MOVTC   MOVTCSREGS,#C 把sregD寄存器的值移到控制寄存器#C。
MOVI   MOVI #U,SREGD 把中间值移到sregD寄存器。
MOVFSP MOVFSP SREG 把SP寄存器移到sreg指定的寄存器对。该寄存器对的MSB由sreg指定。LSB是sreg+1(若sreg+GO,则G0保持MSB,且G1保持LSB)。
MOVTSP MOVTSP SREG 把一个寄存器对移到SP寄存器。寄存器对由保持MS字节的偶寄存器和保持LS字节的奇寄存器确定。
                                  表2.50(续)标量机数据移动指令(续)
    指令       句法                   操  作
POP POP SREG 从栈中弹出一个值并把它置入sreg。在数据被写入该栈之后,栈指针(SP)增加。
PUSH PUSH SREG 把sreg的值推到栈上。在数据被从栈读出之前,栈指针(SP)减小。
PUT     PUT SREGS,SREG*,VREG2D 把sregS的值置于sreg的内容所指的PE的vreg2D中。*-sreg限于P寄存器。
STOREA     STOREASREGS,#A 把绝对值存储在CMA存储器中。把sregS存储在CMA的头128个字节中指定为#A的地址中。
STORER     STORERSREGS,#R 相对于CMA存储器存储。数据的地址是带符号的7位中间值#R与当前SP值的和。数据取自sregS
WRITEE     WRITEESREGS 把sregS的值写出东端口。
WRITEL     WRITELSREGS 把sregS的值写到IDR寄存器。
WRITEN     WRITENSREGS 把sregS的值写出北端口。
WRITES     WRITESSREGS 把sregS的值写出南端口。
WRITEW     WRITEWSREGS 把sregS的值写出西端口。
                                      表2.51标量机数据操作指令
    指令        句法                         操  作
    ABS     ABS SREG 取sreg的绝对值。注意-128饱和至127。
ADD     ADD SREGS,SREGD 把sregS的内容加到sregD的内容,并把结果存入sregD。该指令的结果将饱和。根据SSGN控制位,该饱和值将不同的。
ADDP ADDPSREGS,SREGD 把sregS的内容加(前级)到sregD的内容上,并把结果存入sregD。该指令的结果将不饱和。该指令被与add指令一起使用,以支持多字节操作。
ADDSX     ADDSXSREG 将符号扩充加(前级)到sreg寄存器并把结果存入在同一sreg寄存器中。该指令被用来把所有的进位信息(带符号扩充)加入多字节和中。该指令的结果将饱和。
ADDSXP     ADDSXPSREG 将符号扩充加(前级)到sreg寄存器并把结果存入在同一sreg寄存器中。该指令被用来把所有的进位信息(带符号扩充)加入多字节和中。该指令的结果将不饱和。
AND     AND SREGS,SREGD 对sregS和sregD的内容进行逻辑“与”操作,并把结果存储在sregD中。
BCNT BCNT SREG 计数sreg中的设定位的数目并把结果存储在sreg中。
COMPP     COMPPSREGS,SREGD 把sregS的内容和sregD的内容进行比较(前级)。根据结果设定扩充位。
DEC     DEC #N,SREGD 把sregD减#N并把结果存储在sregD中。该dec指令不依赖于SSGN控制位,而且它不饱和。它是被用于通用指针操作的。
                                     表2.51标量机数据操作指令(续1)
    指令     句法                    操  作
DECP     DECP #N,SREG 把sreg减(前级)#N并把结果存储在sreg中。该decp指令不依赖于SSGN控制位,而且它不饱和。它是被用于通用指针操作的。
    DECSP     DECSP 栈指针减1
DIV DIVSREGS,SREGD 把一个sregS的内容用另一sregD的内容除,并把8位的商和8位的余数存储在sregD对中。指定的sregD必须是一偶数寄存器,商被存储在奇数寄存器中而余数被存储在偶数(奇数-1)寄存器中。
INC     INC #N,SREG 把sreg增加#N并把结果存储在sreg中。该inc指令不依赖于SSGN控制位,而且它不饱和。它是被用于通用指针操作的。
INCP     INCP #N,SREG 把sreg增加(前级)#N并把结果存储在sreg中。该inc指令不依赖于SSGN控制位,而且它不饱和。它是被用于通用指针操作的。
    INCSP     INCSP 栈指针加1。
LSHFT LSHFT  SREG 把sreg的内容左移并把结果存储在sreg中,最低有效位被设值为零。
MAX     MAX SREGS,SREGD 确定两个sreg之间的最大值并把结果存储在sregD中。
MAXP     MAXP SREGS,SREGD 确定(前级)两个sreg之间的最大值并把结果存储在sregD中。
MIN     MIN SREGS,SREGD 确定两个sreg之间的最小值并把结果存储在sregD中。
MINP     MINP SREGS,SREGD 确定(前级)两个sreg之间的最小值并把结果存储在sregD中。
                                    表2.51标量机数据操作指令(续2)
    指令     句法                     操作
MUL MULSREGS,SREGD 把sregS的内容与sregD的内容相乘,并把结果存储在sregD指定的寄存器中。sregD必须是一偶数寄存器,MSB积被存储在偶数寄存器中而LSB积被存储在奇数(偶数+1)寄存器中。
NEG NEG SREG 求sreg的内容的负值并把结果存储在sreg中。该指令的结果将饱和。对最负的2进制的补码(-128)的求负产生127和溢出。
NEGP NEGP SREG 求sreg的内容的负并把结果存储在sreg中。该negp指令被用于支持多字节求负。该指令的结果将不饱和。
NOT NOT SREG 对sreg进行逻辑补码(1的补码)并把结果存储在sreg中。
OR     OR SREGS,SREGD 对sregS的内容和sregD的内容进行逻辑“或”操作,并把结果存储在sregD中。
RAND RANDSREGS,SREGD 产生一随机数目。该指令将取sregS中的种子值。把包含在第二sregD中的屏蔽值与该种子值进行逻辑“与”操作,并随后把这些8位(1的和)的“异或”移入sreg的最有效位的位置。
RSHFT     RSHFTSREG 把sreg的内容右移一个位置。更多的信息请参见表2.60。
RSHFTP     RSHFTPSREG 把sreg的内容右移(前级)一个位置。更多的信息请参见表2.60。
                                 表2.51标量机数据操作指令(续3)
    指令   句法                     操  作
SAT SAT SREG 根据SPCR中的饱和方向(SD)和溢出位(SV)的状态使sreg的内容饱和。若前面的结果溢出,则将发生饱和操作。否则将不进行改变。饱和方向位将确定sreg要饱和到的值。
SUB   SUBSREGS,SREGD 从sregD的内容减去sregS的内容并把结果存储在sregD中。该指令的结果将饱和并取决于SSGN控制位。
SUBP   SUBPSREGS,SREGD 从sregD的内容减(前级)去sregS的内容并把结果存储在sregD中。该指令的结果将不饱和。
SUBSX   ADDSXSREG 把符号扩充从sreg减去并把结果存储在sreg中。该指令被用于把借位信息(带符号扩充)减入多字节的减。该指令的结果将饱和。
SUBSXP SUBSXPSREG 把符号扩充从sreg减(前级)去并把结果存储在sreg中。该指令被用于把借位信息(带符号扩充)减入多字节的减。该指令的结果将不饱和。
XOR   XORSREGS,SREGD 对sregS的内容和sregD的内容进行“异或”操作,并把结果存储在sregD中。
                               表2.52标量机程序流控制操作指令
    指令     句法                      操作
    BRA     BRA #S 相对于下一指令进行PC转移。
BSR BSR #S 相对于子程序进行PC转移。当前的PC被保存在栈上,并采用新的指令地址。
DSKIP DSKIP SREG 减sreg的内容并在sreg为$FF时跳过下一个指令。
DSKIPE     DSKIPESREG 减sreg的内容并在sreg为$FF时跳过下一个指令。另外,执行与vendif指令在循环中的每次重复结束时相同的功能。
JMPMI JMPMI(#U) 跳转存储器间接。跳至其地址被包含在(#U;#U+1)所指定的存储器存储单元中的指令。#U引用CMA中的地址对的MSB。(#U+1)引用该地址对的LSB。这个不带符号的7位数可是偶数或奇数。所以在CMA的头128个字节中必然存在存储器间接“跳转表”。
JMPRI JMPRISREG 跳跃寄存器间接。被sreg(即(sreg;sreg+1))指定的寄存器对的内容被装入PC中。sreg一定是偶数寄存器(G0,G2,G4,G6,P0,P2,P4,P6)。
JSRMI JSRMI(#U) 跳跃至子程序存储器间接。跳至其地址被包含在(#U;#U+1)所指定的储器存储单元中的指令。#U引用CMA中的地址对的MSB。(#U+1)引用该地址对的LSB。当前的PC被保存在栈上且新的指令地址被采用。这个不带符号的7位数可是偶数或奇数。所以在CMA的头128个字节中必然存在存储器间接“跳转表”。
JSRRI JSRRISREG 跳转至存储器间接。当前的PC被保存在栈上且被sreg(即(sreg;sreg+1))指定的寄存器对的内容被装入PC中。sreg一定是偶数寄存器(G0,G2,G4,G6,P0,P2,P4,P6)。
                                 表2.52(续1)标量机程序流控制操作指令
    指令     句法                    操作
REPEAT REPEAT #U,SREG* 把下一个#U指令重复sreg次。该sreg寄存器的内容被用作repeat指令的循环计数。该repeat指令不修改sreg的内容。在执行了repeat指令时sreg的内容被传送到RCR寄存器。sreg的内容被理解为不带符号的值。若该值是零,该repeat指令将使下一个#U指令被跳过。*-sreg只限于G寄存器。
REPEATE REPEATE #U,SREG* 把下一个#U指令重复sreg次,其中每次重复的结束都有蕴含的vendif指令。该sreg的内容被用作repeat指令的循环计数。*-sreg只限于G寄存器。
RETURN RETURN 从子程序返回。把栈最上边的两个字节(被SP所指)置于PC寄存器中。
RTE RTE 从子程序返回。返回到跟随引起异常的指令的指令。注意对在AE处于done或halt状态时引起的异常,AE返回到该状态,直到R/S被触发。
SKIPEQ     SKIPEQ SREGS,SREGD 若sregS和sregD相等,跳过下一指令。
SKIPGE     SKIPGE SREGS,SREGD 若sregS大于或等于sregD,跳过下一指令。
SKIPGT     SKIPGT SREGS,SREGD 若sregS大于sregD,跳过下一指令。
SKIPLE     SKIPLE SREGS,SREGD 若sregS小于或等于sregD,跳过下一指令。
SKIPLT     SKIPLT SREGSSREGD 若sregS小于sregD,跳过下一指令。
SKIPNE     SKIPNE SREGS,SREGD 若sregS和sregD不等,跳过下一指令。
    SKIPNV     SKIPNV 若溢出位被清除,跳过下一指令。
SKIPNVT SKIPNVT 若矢量机中的任何一个VPCR VT位被清除,跳过下一指令。
    SKIPV     SKIPV 若溢出位被设值,则跳过下一指令。
                                表2.53对于加前级(addp vaddp)扩充位说明
 xX1  xX0             操作输入             操作结果
0 0   无进位进入加法之中源操作数符号位是0。   加法中无进位产生。源操作数的符号位是0。
0 1   产生一个送入这一字节的进位。源操作数符号位是0。   产生一个进位作为加法的结果。源操作数的符号位是0。
1 0   加法中无进位进入加法中。源操作数符号位是1。   加法中无进位产生。源操作数的符号位是1。
1 1   产生一个送入这一字节的进位。源操作数符号位是1。   产生一个进位作为加法的结果。源操作数的符号位是1。
                               表2.54符号扩充,加前级的扩充位说明
xX1 xX0             操作输入               操作结果
0 0   加中没有进位。符号把源操作数扩充了0   加没有产生进位。xX1位未被改变。
0 1   产生了进入这个字节的进位。符号把源操作数扩充了0 加产生了进位。xX1位未被改变。
1 0   加中没有进位。符号把源操作数扩充了1   加没有产生进位。xX1位未被改变。
1 1   产生了进入这个字节的进位。符号把源操作数扩充了1 加产生了进位。xX1位未被改变
                              表2.55对减前级(subp,vsubp)的扩充位的说明
 xX1  xX0            操作输入             操作结果
0 0   减中没有借位。源操作数的符号位是0。   减没有产生借位。源操作数的符号位是0。
0 1   产生了进入这个字节的借位。源操作数的符号位是0。   减产生了借位。源操作数的符号位是0。
1 0   减中没有借位。源操作数的符号位是1。   减没有产生借位。源操作数的符号位是1。
1 1   产生了进入这个字节的借位。源操作数的符号位是1。   减产生了借位。源操作数的符号位是1。
                                 表2.56符号扩充减前级的扩充位说明
 xX1  xX0        操作输入       操作结果
0 0   减未产生借位。符号把源操作数扩充了0。     减未产生借位。xX1位未被改变。
0 1   产生了从这个字节的借位。符号把源操作数扩充了0。     减产生了借位。xX1位未被改变。
1 0   减未产生借位。符号把源操作数扩充了1。     减未产生借位。xX1位未被改变。
1 1   产生了从这个字节的借位。符号把源操作数扩充了1。     减产生了借位。xX1位未被改变。
                             表2.57对于比较前级(Compp,vcompp)扩充位说明
 xX1  xX0              操作输入           操作结果
0 0   零。0进行比较操作,假设这是多字节操作的最高有效字节 N/A
0 1   前述操作造成vreg1<vreg2扩充位未被改变 vreg1<vreg2
1 0   前述操作造成vreg1>vreg2扩充位未被改变 vreg1>vreg2
1 1   前述操作造成相等的值。继续比较字节 vreg1==vreg2
                              表2.58最大值前级(maxp,vmap)扩充位说明
 xX1  xX0                操作输入          操作结果
0 0   零。0进行比较操作,假设这是多字节操作的最高有效字节   xX1∶xX0=00不是maxp或vmaxp指令可能结果
0 1   前述操作造成vreg1<vreg2扩充位未改变   vreg1<vreg2,vreg2保持不变
1 0   前述操作造成vreg1>vreg2扩充位未被改变   vreg1>vreg2把vreg1源操作数移到vreg2
1 1   前述操作造成相等的值。继续比较字节   vreg1=vreg2
                               表2.59最小初始(minp,vminp)的扩位说明
 xX1  xX0                 操作输入          操作结果
0 0   零。0进行比较操作,假设这是多字节操作的最高有效字节   xX1∶xX0=00不是minp或vminp指令的可能结果
0 1   前述操作造成vreg1<vreg2扩充位未改变   vreg1<vreg2把vreg1操作数移到vreg2
1 0   前述操作造成vreg1>vreg2扩充位未被改变   vreg1>vreg2,vreg2保持不变
1 1   前述操作造成相等的值。继续比较字节   vreg1=vreg2,vreg2保持不变
                                    表2.60右移初始扩展位说明
 xX1  xX0               操作输入              操作结果
0 0   xX1=0表示这是多字节操作的最高有效位且xX0被忽略。若xSGN位是1(不带符号),把一个0右移进最高位位置。若xSGN是0(带符号),则移入MS位(带符号扩展地右移) N/A-右移初步将不产生作为输出的比xX1∶xX0组合
0 1   xX1=0表示这是多字节操作的最高有效位且xX0被忽略。若xSGN位是1(不带符号),把一个0右移进最高位位置。若xSGN是0(带符号),则移入MS位(带符号扩展地右移) N/A-右移初步将不产生作为前出的比xX1∶xX0组合
1 0 把一个逻辑0右移进最高有效位   一个逻辑0被移出最低有效位置
1 1 把一个逻辑1右移进最高有效位位置   一个逻辑1被移出最低有效位位置
                                 表2.61否定初始的扩展位说明
 xX1  xX0           操作输入             操作结果
0 0   没有借位进入否定xX1-不必关心 N/A
0 1   产生了从这个字节的借位xX1-不必关心 N/A
1 0   没有借位进入否定xX1-不必关心 未产生来自否定的借位。xX1=1
1 1   产生了从这个字节的借位xX1-不必关心 否定产生了借位。xX1=1
                                 表2.62增加初始(imcp)的扩充位说明
 SX1   SX0           操作输入                 操作结果
0 0 没有进位。SX1-不必关心   加未产生进位。源操作数的符号位是0
0 1   产生了进入此节字的进位。SX1-不必关心   加产生了进位。源操作数的符号位是0
1 0 没有进位。SX1-不必关心 N/A
1 1   产生了进入此节字的进位。SX1-不必关心 N/A
                                  表2.63对于减量前级(decp)的扩充位说明
 xX1  xX0         操作输入             操作结果
0 0   减未产生借位SX1-不必关心 N/A
0 1   该字节产生了一个借位SX1-不必关心 N/A
1 0   减未产生借位SX1-不必关心   减未产生借位,源操作数的符号位是1
1 1   该字节产生了一个借位SX1-不必关心   减产生了借位。源操作数的符号位是1
                                           表2.64指令的进程控制位概述
指令   VX[1:0]   SX[1:0] VT VH VID VV SV VD SD 特殊定义
ABS  00   00   -   -    -   0      0    SV=Cin〔7〕^Cout〔7〕;SD=SV
ADD  00   00   -   -    -   0   #   0    SD=1正溢出,SD=0负溢出
ADDP  00      -   -    -   0   #   0    请见表2.53SD=1正溢出SD=0负溢出
ADDSX  00   00   -   -    -   0   #   0    SD=1正溢出SD=0负溢出
ADDSXP  00      -   -    -   0   #   0    请见表2.54SD=1正溢出SD=0负溢出
AND  00   00   -   -    -   0   0   0   0
BCNT  00   00   -   -    -   0   0   0   0
BRA  00   00   -   -    -   0   0   0   0
                                           表2.64指令的进程控制位概述(续1)
指令   VX[1:0]   SX[1:0] VT VH VID VV SV VD SD 特殊定义
 BSR  00  00 - - -  0  0  0  0
 CLEARV  00  00 - - 0  0  0  0  0
 COLMAX  00  00 - -  0  -  0  0 若最大VT=1否则VT=0
 COLMIN  00  00 - -  0  -  0  0 若最小VT=0否则VT=1
 COMPP  00   - - -  0  0  0  0 参见表2.57
 DADD  00  00 - - -  #  0    0 VD=1正溢出VD=0负溢出
 DADDP    00 - - -  #  0    0 请参见表2.53VD=1正溢出VD=0负溢出
 DEC  00  00 - - -  0  0  0  0
 DECP  00  1 - - -  0  0  0  0 见表2.55
 DECSP  00  00 - - -  0  0  0  0
 DIV  00  00 - - -  0    0  0 被零除设置溢出
 DMAX  00  00 - - -  0  0  0  0
 DMAXP    00 - - -  0  0  0  0 见表2.58
 DMIN  00  00 - - -  0  0  0  0
 DMINP    00 - - -  0  0  0  0 见表2.59
 DONE  -  - - - 0  -  -  -  -
 DROTMOV  00  00 - - -  0  0  0  0
 DSKIP  00  00 - - -  0  0  0  0
 DSKIPE  00  00 1 0 -  0  0  0  0
 DSROT  00  00 - - -  0  0  0  0
 GET  00  00 - - -  0  0  0  0
 GETPE  00  00 - - -  0    0  0 若所有64VT=0,置位SV
 HALT  -  - - - -  -  -  -  -
 ILLEGAL  -  - - - -  -  -  -  -
 INC  00  00 - - -  0  0  0  0
 INCP  00  0 - - -  0  0  0  0 见表2.53
                                           表2.64指令的进位控制位概述(续2)
指令   VX[1:0]   SX[1:0] VT VH VID VV SV VD SD 特殊定义
  INCSP  00  00 - - -   0   0   0   0
  INTR  00  00 - - -   0   0   0   0
  JMPMI  00  00 - - -   0   0   0   0
  JMPRI  00  00 - - -   0   0   0   0
  JSRMI  00  00 - - -   0   0   0   0
  JSRRI  00  00 - - -   0   0   0   0
  LOADA  00  00 - - -   0   0   0   0
  LOADR  00  00 - - -   0   0   0   0
  LOCMAX  00  00 - -   0   0   0   0 若最大,VT=1,否则VT=0
  LOCMIN  00  00 - -   0   0   0   0 若最小,VT=1,否则VT=0
  LSHFT  00  00 - - -   0   0   0   0
  MAX  00  00 - - -   0   0   0   0
  MAXP  00   - - -   0   0   0   0 见表2.58
  MIN  00  00 - - -   0   0   0   0
  MINP  00   - - -   0   0   0   0 见表2.59
  MOV  00  00 - - -   0   0   0   0
  MOVI  00  00 - - -   0   0   0   0
  MOVCI  00  00 - - -   0   0   0   0
  MOVFC  00  00 - - -   0   0   0   0
  MOVTC  00  00 - - -   0   0   0   0
  MOVFSP  00  00 - - -   0   0   0   0
  MOVTSP  00  00 - - -   0   0   0   0
  MUL  00  00 - - -   0   0   0   0
  NEG  00  00 - - -   0      0    求-128的负值产生SV=1和SD=1
  NEGP  00  1 - - -   0   0   0   0 见表2.61
  NOP  00  00 - - -   0   0   0   0
  NOT  00  00 - - -   0   0   0   0
  OR  00  00 - - -   0   0   0   0
                                           表2.64指令时进程控制位概述(续3)
指令   VX[1:0]   SX[1:0] VT VH VID VV SV VD SD 特殊定义
POP  00  00 - - -  0  0  0   0
PUSH  00  00 - - -  0  0  0   0
PUT  00  00 - - -  0  0  0   0
RAND  00  00 - - -  0  0  0   0
REPEAT  00  00 - - -  0  0  0   0
REPEATE  00  00 - - -  0  0  0   0
RESTART  00  00 1 0 0  0  0  0   0
RETURN  00  00 - - -  0  0  0   0
ROWMAX  00  00 - -  0  0  0   0   若最大VT=1否则VT=0
ROWMIN  00  00 - -  0  0  0   0   若最小VT=0否则VT=1
RTE  -  - - - -  -  -  -   -
RSHFT  00  00 - - -  0  0  0   0
RSHFTP  00  1 - - -  0  0  0   0   见表2.60
SAT  00  - - - -  0  -  0   -
SETV  00  00 - - 1  0  0  0   0
SKIPEQ  00  00 - - -  0  0  0   0
SKIPGE  00  00 - - -  0  0  0   0
SKIPGT  00  00 - - -  0  0  0   0
SKIPLE  00  00 - - -  0  0  0   0
SKIPLT  00  00 - - -  0  0  0   0
SKIPNE  00  00 - - -  0  0  0   0
SKIPNV  00  00 - - -  0  0  0   0
SKIPNVT  00  00 - - -  0  0  0   0
SKIPV  00  00 - - -  0  0  0   0
STOREA  00  00 - - -  0  0  0   0
STORER  00  00 - - -  0  0  0   0
SUB  00  00 - - -  0  #  0      SD=0溢出
SUBP  00   - - -  0  #  0      见表2.55SD=0溢出
                                          表2.64指令的进程控制位概述(续4)
指令   VX[1:0]   SX[1:0] VT VH VID VV SV VD SD 特殊定义
SUBSX  00  00 - - -  0 #  0 SD=0,溢出
SUBSXP  00   - - -  0 #  0 见表2.56SD=0溢出
VABS  00  00 - - -   0  0 0 若vreg1S=-128,VV=1
VADD  00  00 - - -  # 0   0 VD=1,正溢出,VD=0,负溢出,
VADDP    00 - - -  # 0   0 见表2.53VD=1,止溢出VD=0,负溢出
VADDSX  00  00 - - -  # 0   0 VD=1正溢出VD=0负溢出
VADDSXP    00 - - -  # 0   0 见表2.54VD=1正溢出VD=U负溢出
VAND  00  00 - - -  0 0  0 0
VBCNT  00  00 - - -  0 0  0 0
VCOMPP    00 - - -  0 0  0 0 见表2.57
VDIV  00  00 - - -   0  0 0 被零除设置溢出
VELSE  00  00 -  0 0  0 0 更多的信息见表2.5.13.1“条件指令对VT和VH位的作用”
VENDIF  00  00 1 0 -  0 0  0 0
VIFEQ  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFGE  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFGT  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFLE  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFLT  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFNE  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFNV  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VIFV  00  00 - -  0 0  0 0 若真VT=1否则VT=0
VLSHFT  00  00 - - -  0 0  0 0
                                            表2.64指令的进程控制位概述(续5)
指令  VX[1:0]  SX[1:0] VT VH VID VV SV VD SD 特殊定义
 VLSHFTH  00  00 - - 0  0  0  0 VH->vreg的LSB
 VLSHFTT  00  00 - - 0  0  0  0 VT->vreg的LSB
 VLSHFTV  00  00 - - 0  0  0  0 VID->vreg的LSB
 VMAX  00  00 - - - 0  0  0  0
 VMAXP    00 - - - 0  0  0  0 见表2.58
 VMIN  00  00 - - - 0  0  0  0
 VMINP    00 - - - 0  0  0  0 见表2.59
 VM0V  00  00 - - - 0  0  0  0
 VMOVTV  00  00 - - - 0  0  0  0 若VT=1则VT->VID
 VMUL  00  00 - - - 0  0  0  0
 VNEG  00  00 - - -  0    0 -128的vneg产生VV=1和VD=1
 VNEGP    00 - - - 0  0  0  0 见表2.61
 VOR  00  00 - - - 0  0  0  0
 VRAND  00  00 - - - 0  0  0  0
 VROTRH  00  00 - - 0  0  0  0 vreg的LS位->VH
 VROTRT  00  00 - - 0  0  0  0 vreg的LS位->VT
 VROTRV  00  00 - - 0  0  0  0 vreg的LS位->VID
 VRSHFT  00  00 - - - 0  0  0  0
 VRSHFTP  1  00 - - - 0  0  0  0 见表2.60
 VSAT  -  00 - - - -  0  0
 VSUB  00  00 - - - #  0    0 VD=0溢出
 VSUBP    00 - - - #  0    0 见表2.55VD=0溢出
 VSUBSX  00  00 - - - #  0    0 VD=0溢出
 VSUBSXP    00 - - - #  0    0 见表2.56VD=0溢出
 VSTORE  00  00 - - - 0  0  0  0
 VSTOREA  00  00 - - - 0  0  0  0
                                  表2.64指令的进程控制位概述(续6)
指令   VX[1∶0]   SX[1:0] VT VH VID VV SV VD SD 特殊定义
 VSTOREI  00  00 - - 0  0  0  0 当IDR存储单元被写入时VID=1
 VWRITEE  00  00 - - - 0  0  0  0
 VWRITEL  00  00 - - 0  0  0  0 当IDR存储单元被写入时VID=1
 VWRITEN  00  00 - - - 0  0  0  0
 VWRITES  00  00 - - - 0  0  0  0
 VWRITEW  00  00 - - - 0  0  0  0
 VXOR  00  00 - - - 0  0  0  0
 WRITEE  00  00 - - - 0  0  0  0
 WRITEL  00  00 - - 0  0  0  0 当IDR存储单元被写入时VID=1
 WRITEN  00  00 - - - 0  0  0  0
 WRITES  00  00 - - - 0  0  0  0
 WRITEW  00  00 - - - 0  0  0  0
 XOR  00  00 - - - 0  0  0  0
         -=不被作用
         =见特殊定义
         =见特殊定义
         D=目的地
         S=源
         R=操作的结果
         &=逻辑“与”
         |=逻辑“或”
         ^=“异或”
         D=逻辑“非D”
         #=根据带符号/不带符号操作设定的溢出。对带符号的溢出
          =Cin[7]^cout[7]。对不带符号的溢出=cout[7]。
                                  表2.65微代码指令对VH,VT位的依赖
            指  令                    执    行
ABS,ADD,ADDP,ADDSX,ADDSXP,AND,BCNT,BRA,BSR,COMPP,CLEARV,DEC,DECP,DECSP,DIV,DONE,DSKIP,DSKIPE,GET,GETPE,HALT,ILLEGAL,INC,INCP,INCSP,INTR,JMPMI,JMPRI,JSRMI,JSRRI,LOADA,LOADR,LSHFT,MAX,MAXP,MIN,MINP,MOV,MOVCI,MOVFC,MOVTC,MOVI,MOVFSP,MOVTSP,MUL,NEG,NEGP,NOP,NOT,OR,POP,PUSH,PUT,RAND,REPEAT,REPEATE,RESTART,RETURN,RSHFT,RSHFTP,RTE,SAT,SETV,SKIPEQ,SKIPGE,SKIPGT,SKIPLE,SKIPLT,SKIPNE,SKIPNV,SKIPNVT,SKIP,STOREA,STORER,SUB,SUBP,SUBSX,SUBSXP,VELSE,VENDIF,VLSHFTH,VLSHFTT,VROTRH,VROTRT,WRITEE,WRITEL,WRITEN,WRITES,WRITEW,XOR 这些指令将独立于VPCR VH或VPCRVT位状态而执行
                                表2.65(续)微代码指令对VH,VT位的依赖
          指    令                     执    行
COLMAX,COLMIN,DADD,DADDP,DMAX,DMAXP,DMTN,DMINP,DROTMOV,DSROT,LOCMAX,LOCMIN,ROWMAX,ROWMIN,VABS,VADD,VADDP,VADDSX,VADDSXP,VAND,VBCNT,VCOMPP,VDIV,VIFEQ,VIFGE,VIFGT,VIFLE,VIFLT,VIFNE,VIFNV,VIFV,VLSHFT,VLSHFTV,VMAX,VMAXP,VMIN,VMINP,VMOV,VMOVTV,VNEG,VNEGP,VOR,VRAND,VROTRV,VRSHFT,VRSHFTP,VSAT,VSUBVSUBP,VSUBSX,VSUBSXP,VSTORE,VSTOREA,VSTOREI,VWRITEE,VWRITEL,VWRITEN,VWRITES,VWRITEW,VXOR 这些指令将依赖于VPCR VH或VPCR VT位的状态而执行
                                        表2.66执行时间概述
   指令     最小周期时间     最大周期时间
 ABS     2     2
 ADD     1     1
 ADDP     1     1
 ADDSX     1     1
 ADDSXP     1     1
 AND     1     1
 BCNT     1     1
 BRA     2     2
 BSR     2     3
                                         表2.66(续2)执行时间概述
    指令   最小周期时间   最大周期时间
 CLEARV     1     1
 COLMAX     2+N     2+N
 COLMIN     2+N     2+N
 COMPP     1     1
 DADD     2     2+M
 DADDP     2     2+M
 DEC     1     1
 DECP     1     1
 DECSP     1     1
 DIV     20     20
 DMAX     2     2+M
 DMAXP     2     2+M
 DMIN     2     2+M
 DMINP     2     2+M
 DONE     1     1
 DROTMOV     1     1
 DSKIP     2     2
 DSKIPE     2     2
 DSROT     1     1+M
 GET     2     2
 GETPE     2     2
 HALT     1     1
 ILLEGAL     1     1
 INC     1     1
 INCP     1     1
 INCSP     1     1
 INTR     1     1
 JMPMI     3     3
 JMPRI     3     3
 JSRMI     6     7
 JSRRI     5     6
 LOADA     3     3
 LOADR     3     3
 LOCMAX     2+N     2+N
 LOCMIN     2+N     2+N
                             表2.66(续3)执行时间概述
    指    令   最小周期时间     最大周期时间
 LSHFT     1     1
 MAX     1     1
 MAXP     1     1
 MIN     1     1
 MINP     1     1
 MOV     1     1
 MOVCI     2     2
 MOVFC     2     2
 MOVTC     2     2
 MOVI     2     2
 MOVFSP     2     2
 MOVTSP     2     2
 MUL     6     6
 NEG     1     1
 NEGP     1     1
 NOP     1     1
 NOT     1     1
 OR     1     1
 POP     2     2
 PUSH     2     2
 PUT     2     2
 RAND     2     2
 REPEAT     3     3
 REPEATE     3     3
 RESTART     3     3
 RETURN     2     3
 ROWMAX     2+N     2+N
 ROWMIN     2+N     2+N
 RTE     2     3
 RSHFT     1     1
 RSHFTP     1     1
 SAT     1     1
 SETV     1     1
 SKIPEQ     2     2
 SKIPGE     2     2
                                      表2.66(续3)执行时间概述
    指    令   最小周期时间     最大周期时间
 SKIPGT     2     2
 SKIPLE     2     2
 SKIPLT     2     2
 SKIPNE     2     2
 SKIPNV     2     2
 SKIPNVT     2     2
 SKIPV     2     2
 STOREA     2     2
 STORER     2     2
 SUB     1     1
 SUBP     1     1
 SUBSX     1     1
 SUBSXP     1     1
 VABS     2     2
 VADD     1     1
 VADDP     1     1
 VADDSX     1     1
 VADDSXP     1     1
 VAND     1     1
 VBCNT     1     1
 VCOMPP     1     1
 VDIV     20     20
 VELSE     1     1
 VENDIF     1     1
 VIFEQ     1     1
 VIFGE     1     1
 VIFGT     1     1
 VIFLE     1     1
 VIFLT     1     1
 VIFNE     1     1
 VIFNV     1     1
 VIFV     1     1
 VLSHFT     1     1
 VLSHFTH     1     1
 VLSHFTT     1     1
                                         表2.66(续4)执行时间概述
    指    令     最小周期时间     最大周期时间
 VMAX     1     1
 VMAXP     1     1
 VMIN     1     1
 VMINP     1     1
 VMOV     1     1
 VMOVTV     1     1
 VMUL     6     6
 VNEG     1     1
 VNEGP     1     1
 VOR     1     1
 VRAND     2     2
 VROTRH     1     1
 VROTRT     1     1
 VRSHFT     1     1
 VRSHFTP     1     1
 VSAT     1     1
 VSTORE     2     2
 VSTOREA     2     2
 VSTOREI     2     2
 VSUB     1     1
 VSUBP     1     1
 VSUBSX     1     1
 VSUBSXP     1     1
 VWRITEE     3     3+K
 VWRITEL     3     3+K
 VWRITEN     3     3+K
 VWRITES     3     3+K
 VWRITEW     3     3+K
 VXOR     1     1
 WRITEE     3     3
 WRITEL     3     3
 WRITEN     3     3
 WRITES     3     3
 WRITEW     3     3
 XOR     1     1
                                         表2.67多功能指令
    所期望的指令     实际指令
    LSHFTP SREG     ADDP SREG,SREG
    VLSHFTP VREG2     VADDP VREG2,VREG2
    VNOT VREG2     VXOR #-1,VREG2
    ROTR VREG2
                                            表3.1流线阶段
流水线阶段 阶段名称                 描    述
1 指令预取 流线阶段的主要功能是预取指令和为下一个预取做准备
2 数据预取 流线的数据预取的主要功能是存取将用于指令执行的数据。仅有几个矢量指令寻址模式利用了数据预取。这些指令是:*IDR标量存取(vadd idr〔p1〕,v1);*CMA矢重数据(vadd cma〔p3〕,v2);或*对矢量机的标量数据广播(vaddgi,v1)
3 指令执行 最后的阶段被用于数据执行。在此阶段在第2阶段中所存取的操作数和其他的操作数被结合在一起以产生指令的结果
                                        表3.2拖延优先级
    优先级     阶段
    最    高     1     阶段#1
    2     阶段#3<-
    最    低     3     阶段#2
                                      表3.3当ILMR=0时的输入序列
IDR                                            时    间
    T0     T1     T2     T3     T4     T5     T6     T7     T8     T9  T10
    $00     10     10     10     10     10     10     10     10     10     10     10
    $01     ×     23     23     23     23     23     23     23     23     23     23
    $02     ×     ×     57     57     57     57     57     57     57     57     57
    $03     ×     ×     ×     128     128     128     128     128     128     128     128
    $04     ×     ×     ×     ×     14     14     14     14     14     14     14
    $05     ×     ×     ×     ×     ×     44     44     44     44     44     44
    $06     ×     ×     ×     ×     ×     ×     89     89     89     89     89
    $07     ×     ×     ×     ×     ×     ×     ×     67     67     67     67
    $08     ×     ×     ×     ×     ×     ×     ×     ×     32     32     32
    $09     ×     ×     ×     ×     ×     ×     ×     ×     ×     17     17
    $0A     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×     11
                                          表3.4当ILMR=3时的输入序列
IDR                                         时    间
    T0     T1     T2     T3     T4     T5   T6     T7     T8     T9  T10
    $00     10     10     10     10     10     10   10     10     10     10     10
    $01     10     10     10     10     10     10   10     10     10     10     10
    $02     10     10     10     10     10     10   10     10     10     10     10
    $03     10     10     10     10     10     10   10     10     10     10     10
    $04     ×     23     23     23     23     23     23     23     23     23     23
    $05     ×     23     23     23     23     23     23     23     23     23     23
    $06     ×     23     23     23     23     23     23     23     23     23     23
    $07     ×     23     23     23     23     23     23     23     23     23     23
    $08     ×     ×     57     57     57     57     57     57     57     57     57
    $09     ×     ×     57     57     57     57     57     57     57     57     57
    $0A     ×     ×     57     57     57     57     57     57     57     57     57
    $0B     ×     ×     57     57     57     57     57     57     57     57     57
    $0C     ×     ×     ×    128    128    128    128    128    128    128    128
    $0D     ×     ×     ×    128    128    128    128    128    128    128    128
    $0E     ×     ×     ×    128    128    128    128    128    128    128    128
    $0F     ×     ×     ×    128    128    128    128    128    128    128    128
                                            表3.5当ILMR=4时的输入序列
IDR                                            时    间
    T0     T1     T2     T3     T4     T5     T6     T7     T8     T9  T10
    $00     10     10     10     10     14     14     14     14     14     14     14
    $01     ×     23     23     23     23     44     44     44     44     44     44
    $02     ×     ×     57     57     57     57     89     89     89     89     89
    $03     ×     ×     ×    128    128    128    128     67     67     67     67
    $04     10     10     10     10     14     14     14     14     14     14     14
    $05     ×     23     23     23     23     44     44     44     44     44     44
    $06     ×     ×     57     57     57     57     89     89     89     89     89
    $07     ×     ×     ×    128    128    128    128     67     67     67     67
    $08     ×     ×     ×     ×     ×     ×     ×     ×     32     32     32
    $09     ×     ×     ×     ×     ×     ×     ×     ×     ×     17     17
    $0A     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×     11
    $0B     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×
    $0C     ×     ×     ×     ×     ×     ×     ×     ×     32     32     32
    $0D     ×     ×     ×     ×     ×     ×     ×     ×     ×     17     17
    $0E     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×     11
    $0F     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×     ×
                                            表3.6可能的端口错误异常
                     PCR                           APMR        说    明
NSS EWS NT ET ST WT IN IE IS IW EN EE ES EW
  ×   ×   ×   ×   ×   ×   0   0   0   0   0   0   0   0       端口上无错误
  ×   ×   ×   ×   1   1   0   0   0   0   0   0   1   1 端口对IDR资源的争用
  ×   ×   ×   1   ×   1   0   0   0   0   0   1   0   1
  ×   ×   ×   1   1   ×   0   0   0   0   0   1   1   0
  ×   ×   ×   1   1   1   0   0   0   0   0   1   1   1
  ×   ×   1   ×   ×   1   0   0   0   0   1   0   0   1
  ×   ×   1   ×   1   ×   0   0   0   0   1   0   1   0
  ×   ×   1   ×   1   1   0   0   0   0   1   0   1   1
  ×   ×   1   1   ×   ×   0   0   0   0   1   1   0   0
  ×   ×   1   1   ×   1   0   0   0   0   1   1   0   1
                                            表3.6(续)可能的端口错误异常
                PCR                    APMR 说    明
  NSS   EWS   NT   ET   ST   WT   IN   IE   IS   IW   EN   EE   ES  EW
  ×   ×   1   1   1   ×   0   0   0   0   1   1   1   0     端口对IDR资源的争用
  ×   ×   1   1   1   1   0   0   0   0   1   1   1   1
  ×   ×   ×   ×   ×   ×   0   0   0   1   0   0   0   1 端口冲突
  ×   ×   ×   ×   ×   ×   0   0   1   0   0   0   1   0
  ×   ×   ×   ×   ×   ×   0   1   0   0   0   1   0   0
  ×   ×   ×   ×   ×   ×   1   0   0   0   1   0   0   0
  ×   1   ×   ×   ×   ×   0   0   0   0   0   1   0   1 开关异常
  1   ×   ×   ×   ×   ×   0   0   0   0   1   0   1   0
  ×   1   ×   ×   ×   ×   0   1   0   0   0   0   0   1 端口交错
  1   ×   ×   ×   ×   ×   1   0   0   0   0   0   1   0
  ×   1   ×   ×   ×   ×   0   0   0   1   0   1   0   0
  1   ×   ×   ×   ×   ×   0   0   1   0   1   0   0   0
                                          表3.7 APMR位的依赖性
              PCR                     APMR 解  释
 NSS  EWS  NT  ET  ST  WT IN IE IS IW EN EE ES EW
0 0 0 0 0 1 × × × × × 1 × 1 当设定PCR。WT位被“关心”的APMR
0 0 0 0 1 0 × × × × 1 × 1 × 当设定PCS ST位时被“关心”的APMR位
0 0 0 1 0 0 × × × × × 1 × 1 当设定PCR ET位时被“关心”的APMR位
0 0 1 0 0 0 × × × × 1 × 1 × 当设定PCR NT位时被“关心”的APMR位
0 1 0 0 0 0 × 1 × 1 × 1 × 1 当设定PCR EWS位时被“关心”的APMR位
1 0 0 0 0 0 1 × 1 × 1 × 1 × 当设定PCR NWS位时被“关心”的APMR位
                                             表3.8例#1中活动的位
              PCR                      APMR 含    义
 NSS  EWS  NT  ET  ST  WT   IN   IE   IS   IW   EN   EE   ES   EW
  0   0   1   0   0   1   0   0   0   0   1   0   0   1     N-W IDR争用
                                            表3.9例#2中活动的位
              PCR                     APMR 含    义
 NSS  EWS   NT   ET   ST   WT   IN   IE   IS   IW   EN   EE   ES   EW
  0   O   1   0   0   1   0   0   0   0   1   0   0   1      N-W IDR争用
  0   1   0   0   0   0   0   1   0   0   0   0   0   1       E端口交错
  0   1   1   0   0   1   0   1   0   0   1   1   0   1   多端口错误的结果
                                     表3.10例#3中活动的位
               PCR                   APMR 含    义
 NSS  EWS  NT  ET  ST  WT  IN  IE  IS  IW  EN  EE  ES  EW
  0   0   1   0   0   1   0   0   0   0   1   0   0   1      N-W IDR争用
  0   1   0   0   0   0   0   0   0   0   0   1   0   1       E开关争用
  0   1   1   0   O   1   0   0   0   0   1   1   0   1     多端错误的结果
                                            表3.11例#4中活动的位
              PCR                     APMR 含    义
 NSS  EWS  NT  ET  ST  WT   IN   IE   IS   IW   EN   EE   ES   EW
  0   1   0   0   0   0   0   1   0   0   0   0   0   1   E端口交错
  0   0   0   0   0   0   0   1   0   0   0   1   0   0   E端口冲突
  0   1   0   0   0   0   0   0   0   0   0   1   0   1   E-W开关争用
  0   1   0   0   0   0   0   1   0   0   0   1   0   1   多端口错误的结果
                                             表3.12在例#5中活动的位
              PCR                      APMR 含    义
 NSS  EWS  NT  ET  ST  WT  IN  IE  IS  IW  EN  EE  ES  EW
  0   0   1   0   0   1   0   0   0   0   1   0   0   1   N-W IDR争用
  0   1   0   0   0   0   0   1   0   0   0   0   0   1   E端口交错
  0   0   0   0   0   0   0   1   0   0   0   1   0   0   E端口冲突
  1   0   0   0   0   0   0   0   0   0   1   0   1   E-W开关争用
  0   1   1   0   0   1   0   1   0   0   1   1   0   1   多端口错误的结果
                                           表3.13处理部件的例子
        PE1         PE2        PE3        PE4
    码   VT  VH   状态 VT  VH   状态 VT VH 状态 VT  VH 状态
  1  0     -  1  0     -  1  0 -  1  0 -
  1  0     -  1  0     -  1  0 -  1  0 -
  VIFEQ V0,V4   1  0     3  1  0     4  1  0 4  1  0 4
  1  0     -  0  0     -  0  0 -  0  0 -
  1  0     7  0  0     5  0  0 5  0  0 5
  0  1     -  1  0     -  1  0 -  1  0 -
  VIFEQ V1,V4   0  1     2  1  0     3  1  0 4  1  0 4
  0  1     -  1  0     -  0  0 -  0  0 -
  0  1     6  1  0     7  0  0 5  0  0 5
  0  1     -  0  1     -  1  0 -  1  0 -
  VIFEQ V2,V4   0  1     2  0  1     2  1  0 3  1  0 4
  0  1     -  0  1     -  1  0 -  0  0 -
  0  1     6  0  1     6  1  0 7  0  0 5
  0  1     -  0  1     -  0  1 -  1  0 -
  0  1     9  0  1     9  0  1 9  1  0 10
  1  0     -  1  0     -  1  0 -  1  0 -
                                           表3.14处理部件寄存器的内容
    V0     V1     V2     V3     V4
 PE1     0     1     1     1     0
 PE2     1     0     1     1     0
 PE3     1     1     0     1     0
 PE4     1     1     1     0     0
                                     表4.1定时速查表
  图4-2   主机随机存取读和写定时
  图4-3   主机随机存取地址传送定时
  图4-4   主机随机存取地址数据传送定时
  图4-5   带提前终止的主机随机存取地址/数据传送
  图4-6   主机流存取读定时
  图4-7   主机流写存取
  图4-8   从装置#2的Run方式与操作
  图4-9   从装置#2的带不活动PE的Run式与操作
  图4-10   AE写操作冲突定时
  图4-11   AE R/S至BUSY输出定时
  图4-12   AE R/S至BUSY输出定时
  图4-13   带Run/Stop干预的AE与定时
  图4-14   中断定时
  图4-15   复位定时
  图4-16   IEEE 1149.1端口定时

Claims (10)

1.一种集成电路,包括:
能够执行矢量指令的一个矢量引擎;
能够执行标量指令的一个标量引擎;
一个定序器,用于控制矢量引擎中矢量指令的执行和标量引擎中标量指令的执行,该定序器与矢量引擎耦合以传送矢量控制信息,该定序器与与标量引擎耦合以传送标量控制信息;以及
一个共享存储器电路,用于存储一个矢量操作数和一个标量操作数,该共享存储器电路与该矢量引擎耦合以传送该矢量操作数,该共享存储器电路与该标量引擎耦合以传送标量操作数;
其中该矢量引擎包括:
多个处理组成单元,用于执行该矢量指令,该多个处理组成单元每一个都包括:
多个矢量寄存器,用于存储多个数据值,该多个数据值每一个都都在该矢量指令的执行期间有选择地得到使用;以及
一个算法逻辑单元,用于执行算法和逻辑运算,该算法逻辑单元与该多个矢量寄存器中的每一个耦合并与该共享存储器电路耦合。
2.根据权利要求1的集成电路,其中该定序器非同时地控制矢量指令和标量指令的执行。
3.根据权利要求1或2的集成电路,进一步包括:
一个指令存储电路,它与所述定序器耦合。
4.根据权利要求1或2的集成电路,其中该多个处理组成单元每一个都对应于该共享存储器电路的一个部分。
5.根据权利要求1或2的集成电路,进一步包括:
与该矢量引擎耦合的一个输入数据寄存器,该输入数据寄存器存储多个数据值。
6.根据权利要求1或2的集成电路,进一步包括多个集成电路管脚,这些管脚表示了该集成电路的内部状态信息。
7.一种数据处理器,包括:
能够执行矢量指令的一个矢量引擎;
能够执行标量指令的一个标量引擎;
指令接收电路,用于向所述矢量引擎提供该矢量指令并向所述标量引擎提供该标量指令;以及
接口电路,它与所述矢量引擎和所述标量引擎耦合,所述接口电路提供所述矢量引擎与所述标量引擎之间的协调;
其中该矢量引擎包括:
用于执行矢量指令的多个处理组成单元,该多个处理组成单元每一个都包括:
矢量控制电路,用于在矢量指令执行期间控制多个处理组成单元中的这一个的操作;
至少一个矢量寄存器,它与所述矢量控制电路耦合;以及
矢量计算逻辑,用于在该矢量指令的执行期间进行一种算法运算和一种逻辑运算中的至少一个,所述矢量计算逻辑与所述矢量控制电路耦合;且
其中该标量引擎包括:
标量控制电路,用于控制所述标量引擎在该标量指令的执行期间的操作;
至少一个标量寄存器,它与所述标量控制电路耦合;以及
标量计算逻辑,用于在该标量指令的执行期间进行一种算法运算和一种逻辑运算中的至少一个,所述标量计算逻辑与所述标量控制电路耦合。
8.根据权利要求7的数据处理器,其中所述数据处理器被形成在一个单个的集成电路上。
9.根据权利要求7的数据处理器,进一步包括:
一个指令高速缓冲存储器,它与该指令接收电路耦合,用于存储该矢量指令和该标量指令。
10.根据权利要求7、8或9的数据处理器,进一步包括:
一个存储器阵列,该存储器阵列与所述矢量引擎和所述标量引擎耦合,所述存储器阵列存储将要由所述矢量引擎在该矢量指令的执行期间使用的多个矢量,且所述存储器阵列存储将要由所述标量引擎在该标量指令的执行期间使用的至少一个标量。
CN94103297A 1993-03-31 1994-03-30 一种数据处理系统及其方法 Expired - Fee Related CN1080906C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US040,779 1993-03-31
US08/040,779 US5717947A (en) 1993-03-31 1993-03-31 Data processing system and method thereof
US040779 1993-03-31

Publications (2)

Publication Number Publication Date
CN1107983A CN1107983A (zh) 1995-09-06
CN1080906C true CN1080906C (zh) 2002-03-13

Family

ID=21912891

Family Applications (1)

Application Number Title Priority Date Filing Date
CN94103297A Expired - Fee Related CN1080906C (zh) 1993-03-31 1994-03-30 一种数据处理系统及其方法

Country Status (6)

Country Link
US (18) US5717947A (zh)
EP (1) EP0619557A3 (zh)
JP (2) JPH0773149A (zh)
KR (1) KR940022257A (zh)
CN (1) CN1080906C (zh)
TW (1) TW280890B (zh)

Families Citing this family (192)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5354695A (en) 1992-04-08 1994-10-11 Leedy Glenn J Membrane dielectric isolation IC fabrication
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
EP0803130B1 (en) * 1994-06-29 2007-02-28 Intel Corporation Processor that indicates system bus ownership in an upgradable multiprocessor computer system
CN100412786C (zh) 1994-12-02 2008-08-20 英特尔公司 可以对复合操作数进行压缩操作的微处理器
CN1149469C (zh) * 1995-08-31 2004-05-12 英特尔公司 支持分组数据的处理器
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5822559A (en) * 1996-01-02 1998-10-13 Advanced Micro Devices, Inc. Apparatus and method for aligning variable byte-length instructions to a plurality of issue positions
US5727229A (en) * 1996-02-05 1998-03-10 Motorola, Inc. Method and apparatus for moving data in a parallel processor
JP2904099B2 (ja) * 1996-02-19 1999-06-14 日本電気株式会社 コンパイル装置およびコンパイル方法
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
CN1210647C (zh) 1996-11-29 2005-07-13 松下电器产业株式会社 适于作由正值处理及饱和运算处理组成的修整处理的处理器
WO1998028695A1 (en) 1996-12-19 1998-07-02 Hyundai Electronics America Video frame rendering engine
US6112291A (en) * 1997-01-24 2000-08-29 Texas Instruments Incorporated Method and apparatus for performing a shift instruction with saturate by examination of an operand prior to shifting
US6551857B2 (en) * 1997-04-04 2003-04-22 Elm Technology Corporation Three dimensional structure integrated circuits
US6430589B1 (en) 1997-06-20 2002-08-06 Hynix Semiconductor, Inc. Single precision array processor
US6044392A (en) * 1997-08-04 2000-03-28 Motorola, Inc. Method and apparatus for performing rounding in a data processor
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
FR2772949B1 (fr) * 1997-12-19 2000-02-18 Sgs Thomson Microelectronics Partage de l'adressage indirect des registres d'un peripherique dedie a l'emulation
US6366999B1 (en) * 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
JPH11282683A (ja) * 1998-03-26 1999-10-15 Omron Corp エージェントシステム
JPH11338844A (ja) * 1998-05-22 1999-12-10 Nec Corp 発火数制御型神経回路装置
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
WO2000022511A1 (en) * 1998-10-09 2000-04-20 Koninklijke Philips Electronics N.V. Vector data processor with conditional instructions
US6574665B1 (en) * 1999-02-26 2003-06-03 Lucent Technologies Inc. Hierarchical vector clock
US6308253B1 (en) * 1999-03-31 2001-10-23 Sony Corporation RISC CPU instructions particularly suited for decoding digital signal processing applications
US7802079B2 (en) * 1999-04-09 2010-09-21 Clearspeed Technology Limited Parallel data processing apparatus
US7506136B2 (en) * 1999-04-09 2009-03-17 Clearspeed Technology Plc Parallel data processing apparatus
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US8174530B2 (en) * 1999-04-09 2012-05-08 Rambus Inc. Parallel date processing apparatus
US8762691B2 (en) * 1999-04-09 2014-06-24 Rambus Inc. Memory access consolidation for SIMD processing elements using transaction identifiers
US20080184017A1 (en) * 1999-04-09 2008-07-31 Dave Stuttard Parallel data processing apparatus
US7627736B2 (en) * 1999-04-09 2009-12-01 Clearspeed Technology Plc Thread manager to control an array of processing elements
US20080008393A1 (en) * 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
US20070242074A1 (en) * 1999-04-09 2007-10-18 Dave Stuttard Parallel data processing apparatus
US20080016318A1 (en) * 1999-04-09 2008-01-17 Dave Stuttard Parallel data processing apparatus
US20080162874A1 (en) * 1999-04-09 2008-07-03 Dave Stuttard Parallel data processing apparatus
US8171263B2 (en) * 1999-04-09 2012-05-01 Rambus Inc. Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions
US8169440B2 (en) * 1999-04-09 2012-05-01 Rambus Inc. Parallel data processing apparatus
US7966475B2 (en) 1999-04-09 2011-06-21 Rambus Inc. Parallel data processing apparatus
US7526630B2 (en) * 1999-04-09 2009-04-28 Clearspeed Technology, Plc Parallel data processing apparatus
US20070294510A1 (en) * 1999-04-09 2007-12-20 Dave Stuttard Parallel data processing apparatus
US20080007562A1 (en) * 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
GB2348982A (en) * 1999-04-09 2000-10-18 Pixelfusion Ltd Parallel data processing system
EP1099166B1 (en) * 1999-05-19 2004-08-04 Koninklijke Philips Electronics N.V. Data processor with a debug circuit
US7401205B1 (en) * 1999-08-13 2008-07-15 Mips Technologies, Inc. High performance RISC instruction set digital signal processor having circular buffer and looping controls
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
JP2001175933A (ja) * 1999-12-15 2001-06-29 Sanden Corp 自動販売機の制御プログラム書換システム及び自動販売機の制御装置
DE10001874A1 (de) * 2000-01-18 2001-07-19 Infineon Technologies Ag Multi-Master-Bus-System
US7191310B2 (en) * 2000-01-19 2007-03-13 Ricoh Company, Ltd. Parallel processor and image processing apparatus adapted for nonlinear processing through selection via processor element numbers
US6665790B1 (en) * 2000-02-29 2003-12-16 International Business Machines Corporation Vector register file with arbitrary vector addressing
US6968469B1 (en) 2000-06-16 2005-11-22 Transmeta Corporation System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored
WO2002007000A2 (en) 2000-07-13 2002-01-24 The Belo Company System and method for associating historical information with sensory data and distribution thereof
US6606614B1 (en) * 2000-08-24 2003-08-12 Silicon Recognition, Inc. Neural network integrated circuit with fewer pins
DE10102202A1 (de) * 2001-01-18 2002-08-08 Infineon Technologies Ag Mikroprozessorschaltung für tragbare Datenträger
US7599981B2 (en) 2001-02-21 2009-10-06 Mips Technologies, Inc. Binary polynomial multiplier
US7711763B2 (en) * 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7162621B2 (en) * 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7181484B2 (en) * 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
CA2344098A1 (fr) * 2001-04-12 2002-10-12 Serge Glories Systeme de processeur modulaire a elements configurables et intereliables permettant de realiser de multiples calculs paralleles sur du signal ou des donnees brutes
US6725233B2 (en) 2001-05-15 2004-04-20 Occam Networks Generic interface for system and application management
US7155496B2 (en) * 2001-05-15 2006-12-26 Occam Networks Configuration management utilizing generalized markup language
US7685508B2 (en) * 2001-05-15 2010-03-23 Occam Networks Device monitoring via generalized markup language
US6666383B2 (en) 2001-05-31 2003-12-23 Koninklijke Philips Electronics N.V. Selective access to multiple registers having a common name
US7088731B2 (en) * 2001-06-01 2006-08-08 Dune Networks Memory management for packet switching device
AU2002351525A1 (en) * 2001-06-28 2003-03-03 Oak Technology, Inc. System-on-a-chip controller
US7007058B1 (en) 2001-07-06 2006-02-28 Mercury Computer Systems, Inc. Methods and apparatus for binary division using look-up table
US7027446B2 (en) * 2001-07-18 2006-04-11 P-Cube Ltd. Method and apparatus for set intersection rule matching
GB2382887B (en) * 2001-10-31 2005-09-28 Alphamosaic Ltd Instruction execution in a processor
US7278137B1 (en) 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7000226B2 (en) * 2002-01-02 2006-02-14 Intel Corporation Exception masking in binary translation
US7349992B2 (en) * 2002-01-24 2008-03-25 Emulex Design & Manufacturing Corporation System for communication with a storage area network
US6934787B2 (en) * 2002-02-22 2005-08-23 Broadcom Corporation Adaptable switch architecture that is independent of media types
US7140019B2 (en) * 2002-06-28 2006-11-21 Motorola, Inc. Scheduler of program instructions for streaming vector processor having interconnected functional units
US7415601B2 (en) * 2002-06-28 2008-08-19 Motorola, Inc. Method and apparatus for elimination of prolog and epilog instructions in a vector processor using data validity tags and sink counters
US7159099B2 (en) * 2002-06-28 2007-01-02 Motorola, Inc. Streaming vector processor with reconfigurable interconnection switch
WO2004015764A2 (en) 2002-08-08 2004-02-19 Leedy Glenn J Vertical system integration
US7231552B2 (en) * 2002-10-24 2007-06-12 Intel Corporation Method and apparatus for independent control of devices under test connected in parallel
US20040098568A1 (en) * 2002-11-18 2004-05-20 Nguyen Hung T. Processor having a unified register file with multipurpose registers for storing address and data register values, and associated register mapping method
US6912646B1 (en) * 2003-01-06 2005-06-28 Xilinx, Inc. Storing and selecting multiple data streams in distributed memory devices
US20060167435A1 (en) * 2003-02-18 2006-07-27 Adamis Anthony P Transscleral drug delivery device and related methods
US20040215924A1 (en) * 2003-04-28 2004-10-28 Collard Jean-Francois C. Analyzing stored data
US7191432B2 (en) * 2003-06-05 2007-03-13 International Business Machines Corporation High frequency compound instruction mechanism and method for a compare operation in an arithmetic logic unit
US7725681B2 (en) * 2003-08-15 2010-05-25 Nxp B.V. Parallel processing array
US20050043872A1 (en) * 2003-08-21 2005-02-24 Detlef Heyn Control system for a functional unit in a motor vehicle
US7290122B2 (en) * 2003-08-29 2007-10-30 Motorola, Inc. Dataflow graph compression for power reduction in a vector processor
US7610466B2 (en) * 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
US7107436B2 (en) * 2003-09-08 2006-09-12 Freescale Semiconductor, Inc. Conditional next portion transferring of data stream to or from register based on subsequent instruction aspect
US7275148B2 (en) * 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
US7315932B2 (en) * 2003-09-08 2008-01-01 Moyer William C Data processing system having instruction specifiers for SIMD register operands and method thereof
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
WO2005037326A2 (en) * 2003-10-13 2005-04-28 Clearspeed Technology Plc Unified simd processor
US7526691B1 (en) * 2003-10-15 2009-04-28 Marvell International Ltd. System and method for using TAP controllers
DE60314525T2 (de) 2003-12-17 2008-02-28 Stmicroelectronics Ltd., Almondsbury TAP Zeitmultiplexen mit Abtasttest
JP4502650B2 (ja) * 2004-02-03 2010-07-14 日本電気株式会社 アレイ型プロセッサ
JP4728581B2 (ja) * 2004-02-03 2011-07-20 日本電気株式会社 アレイ型プロセッサ
JP4547198B2 (ja) * 2004-06-30 2010-09-22 富士通株式会社 演算装置、演算装置の制御方法、プログラム及びコンピュータ読取り可能記録媒体
US20060095714A1 (en) * 2004-11-03 2006-05-04 Stexar Corporation Clip instruction for processor
US7650542B2 (en) * 2004-12-16 2010-01-19 Broadcom Corporation Method and system of using a single EJTAG interface for multiple tap controllers
US7370136B2 (en) * 2005-01-26 2008-05-06 Stmicroelectronics, Inc. Efficient and flexible sequencing of data processing units extending VLIW architecture
US7873947B1 (en) * 2005-03-17 2011-01-18 Arun Lakhotia Phylogeny generation
US20060218377A1 (en) * 2005-03-24 2006-09-28 Stexar Corporation Instruction with dual-use source providing both an operand value and a control value
JP4277042B2 (ja) * 2005-03-31 2009-06-10 パナソニック株式会社 演算処理装置
US7757048B2 (en) * 2005-04-29 2010-07-13 Mtekvision Co., Ltd. Data processor apparatus and memory interface
WO2006128148A1 (en) * 2005-05-27 2006-11-30 Delphi Technologies, Inc. System and method for bypassing execution of an algorithm
US7543136B1 (en) * 2005-07-13 2009-06-02 Nvidia Corporation System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits
UA91250C2 (en) * 2005-11-21 2010-07-12 Пердью Фарма Л.П. 4-oxadiazolyl-piperidine compounds and use thereof
US7404065B2 (en) * 2005-12-21 2008-07-22 Intel Corporation Flow optimization and prediction for VSSE memory operations
US7602399B2 (en) * 2006-03-15 2009-10-13 Ati Technologies Ulc Method and apparatus for generating a pixel using a conditional IF—NEIGHBOR command
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
ATE505049T1 (de) * 2007-02-09 2011-04-15 Nokia Corp Optimierte verbotene verfolgungsbereiche für private/heimnetzwerke
US8917165B2 (en) * 2007-03-08 2014-12-23 The Mitre Corporation RFID tag detection and re-personalization
JP4913685B2 (ja) * 2007-07-04 2012-04-11 株式会社リコー Simd型マイクロプロセッサおよびsimd型マイクロプロセッサの制御方法
US8131909B1 (en) 2007-09-19 2012-03-06 Agate Logic, Inc. System and method of signal processing engines with programmable logic fabric
US7970979B1 (en) * 2007-09-19 2011-06-28 Agate Logic, Inc. System and method of configurable bus-based dedicated connection circuits
FR2922663B1 (fr) * 2007-10-23 2010-03-05 Commissariat Energie Atomique Structure et procede de sauvegarde et de restitution de donnees
US7945768B2 (en) * 2008-06-05 2011-05-17 Motorola Mobility, Inc. Method and apparatus for nested instruction looping using implicit predicates
US8417921B2 (en) * 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
US8447956B2 (en) * 2008-08-15 2013-05-21 Apple Inc. Running subtract and running divide instructions for processing vectors
US8549265B2 (en) 2008-08-15 2013-10-01 Apple Inc. Processing vectors using wrapping shift instructions in the macroscalar architecture
US9335997B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture
US8583904B2 (en) 2008-08-15 2013-11-12 Apple Inc. Processing vectors using wrapping negation instructions in the macroscalar architecture
US9335980B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using wrapping propagate instructions in the macroscalar architecture
US9342304B2 (en) 2008-08-15 2016-05-17 Apple Inc. Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture
US8560815B2 (en) 2008-08-15 2013-10-15 Apple Inc. Processing vectors using wrapping boolean instructions in the macroscalar architecture
US8527742B2 (en) * 2008-08-15 2013-09-03 Apple Inc. Processing vectors using wrapping add and subtract instructions in the macroscalar architecture
US8539205B2 (en) 2008-08-15 2013-09-17 Apple Inc. Processing vectors using wrapping multiply and divide instructions in the macroscalar architecture
US8555037B2 (en) 2008-08-15 2013-10-08 Apple Inc. Processing vectors using wrapping minima and maxima instructions in the macroscalar architecture
TWI417798B (zh) * 2008-11-21 2013-12-01 Nat Taipei University Oftechnology High - speed reverse transfer neural network system with elastic structure and learning function
JP5321806B2 (ja) * 2009-01-13 2013-10-23 株式会社リコー 画像形成装置の操作装置及び画像形成装置
US8832403B2 (en) * 2009-11-13 2014-09-09 International Business Machines Corporation Generation-based memory synchronization in a multiprocessor system with weakly consistent memory accesses
GB2480285A (en) 2010-05-11 2011-11-16 Advanced Risc Mach Ltd Conditional compare instruction which sets a condition code when it is not executed
US8693788B2 (en) * 2010-08-06 2014-04-08 Mela Sciences, Inc. Assessing features for classification
US9141386B2 (en) * 2010-09-24 2015-09-22 Intel Corporation Vector logical reduction operation implemented using swizzling on a semiconductor chip
GB2484729A (en) * 2010-10-22 2012-04-25 Advanced Risc Mach Ltd Exception control in a multiprocessor system
RU2010145507A (ru) * 2010-11-10 2012-05-20 ЭлЭсАй Корпорейшн (US) Устройство и способ управления микрокомандами без задержки
CN103002276B (zh) * 2011-03-31 2017-10-03 Vixs系统公司 多格式视频解码器及解码方法
US9946665B2 (en) * 2011-05-13 2018-04-17 Melange Systems Private Limited Fetch less instruction processing (FLIP) computer architecture for central processing units (CPU)
US9507593B2 (en) 2011-12-23 2016-11-29 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
US9489196B2 (en) 2011-12-23 2016-11-08 Intel Corporation Multi-element instruction with different read and write masks
CN104025025B (zh) 2011-12-28 2018-08-28 英特尔公司 用于对打包数据元素执行增量编码的系统、装置和方法
US9557998B2 (en) * 2011-12-28 2017-01-31 Intel Corporation Systems, apparatuses, and methods for performing delta decoding on packed data elements
US20130227190A1 (en) * 2012-02-27 2013-08-29 Raytheon Company High Data-Rate Processing System
US20160364643A1 (en) * 2012-03-08 2016-12-15 Hrl Laboratories Llc Scalable integrated circuit with synaptic electronics and cmos integrated memristors
US9389860B2 (en) 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US8849885B2 (en) * 2012-06-07 2014-09-30 Via Technologies, Inc. Saturation detector
KR102021777B1 (ko) * 2012-11-29 2019-09-17 삼성전자주식회사 병렬 처리를 위한 재구성형 프로세서 및 재구성형 프로세서의 동작 방법
US9558003B2 (en) * 2012-11-29 2017-01-31 Samsung Electronics Co., Ltd. Reconfigurable processor for parallel processing and operation method of the reconfigurable processor
CN103914426B (zh) * 2013-01-06 2016-12-28 中兴通讯股份有限公司 一种多线程处理基带信号的方法及装置
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
US11501143B2 (en) * 2013-10-11 2022-11-15 Hrl Laboratories, Llc Scalable integrated circuit with synaptic electronics and CMOS integrated memristors
FR3015068B1 (fr) * 2013-12-18 2016-01-01 Commissariat Energie Atomique Module de traitement du signal, notamment pour reseau de neurones et circuit neuronal
US20150269480A1 (en) * 2014-03-21 2015-09-24 Qualcomm Incorporated Implementing a neural-network processor
US10042813B2 (en) * 2014-12-15 2018-08-07 Intel Corporation SIMD K-nearest-neighbors implementation
US9996350B2 (en) 2014-12-27 2018-06-12 Intel Corporation Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array
WO2016109447A1 (en) 2014-12-29 2016-07-07 Concentric Meter Corporation Fluid parameter sensor and meter
US10789071B2 (en) * 2015-07-08 2020-09-29 Intel Corporation Dynamic thread splitting having multiple instruction pointers for the same thread
US10419501B2 (en) * 2015-12-03 2019-09-17 Futurewei Technologies, Inc. Data streaming unit and method for operating the data streaming unit
JP6549697B2 (ja) * 2016-03-31 2019-07-24 三菱電機株式会社 ユニット及び制御システム
CN111651203A (zh) * 2016-04-26 2020-09-11 中科寒武纪科技股份有限公司 一种用于执行向量四则运算的装置和方法
TWI627860B (zh) * 2016-05-31 2018-06-21 晨星半導體股份有限公司 影音處理裝置與方法
US10147035B2 (en) 2016-06-30 2018-12-04 Hrl Laboratories, Llc Neural integrated circuit with biological behaviors
US10379854B2 (en) * 2016-12-22 2019-08-13 Intel Corporation Processor instructions for determining two minimum and two maximum values
KR20180080463A (ko) * 2017-01-04 2018-07-12 삼성전자주식회사 반도체 장치 및 반도체 장치의 동작 방법
CN107423816B (zh) * 2017-03-24 2021-10-12 中国科学院计算技术研究所 一种多计算精度神经网络处理方法和系统
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
CN109754061B (zh) * 2017-11-07 2023-11-24 上海寒武纪信息科技有限公司 卷积扩展指令的执行方法以及相关产品
EP3721340A4 (en) * 2017-12-04 2021-09-08 Optimum Semiconductor Technologies Inc. NEURONAL NETWORK ACCELERATOR SYSTEM AND ARCHITECTURE
CN108153190B (zh) * 2017-12-20 2020-05-05 新大陆数字技术股份有限公司 一种人工智能微处理器
CN109416757B (zh) * 2017-12-29 2022-05-03 深圳市大疆创新科技有限公司 用于处理数值数据的方法、设备和计算机可读存储介质
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
CN110059809B (zh) * 2018-10-10 2020-01-17 中科寒武纪科技股份有限公司 一种计算装置及相关产品
US11256503B2 (en) * 2019-03-11 2022-02-22 Untether Ai Corporation Computational memory
US20220171829A1 (en) 2019-03-11 2022-06-02 Untether Ai Corporation Computational memory
CN110609706B (zh) * 2019-06-13 2022-02-22 眸芯科技(上海)有限公司 配置寄存器的方法及应用
US11604972B2 (en) 2019-06-28 2023-03-14 Microsoft Technology Licensing, Llc Increased precision neural processing element
CN112241613B (zh) * 2019-07-19 2023-12-29 瑞昱半导体股份有限公司 检测电路的引脚关联性的方法及其计算机处理系统
WO2021040684A1 (en) * 2019-08-26 2021-03-04 Hewlett-Packard Development Company, L.P. Centralized access control of input-output resources
US11342944B2 (en) 2019-09-23 2022-05-24 Untether Ai Corporation Computational memory with zero disable and error detection
CN110908716B (zh) * 2019-11-14 2022-02-08 中国人民解放军国防科技大学 一种向量聚合装载指令的实现方法
CN113011577B (zh) * 2019-12-20 2024-01-05 阿里巴巴集团控股有限公司 处理单元、处理器核、神经网络训练机及方法
CN113033791B (zh) * 2019-12-24 2024-04-05 中科寒武纪科技股份有限公司 用于保序的计算装置、集成电路装置、板卡及保序方法
US11468002B2 (en) 2020-02-28 2022-10-11 Untether Ai Corporation Computational memory with cooperation among rows of processing elements and memory thereof
US11309023B1 (en) * 2020-11-06 2022-04-19 Micron Technology, Inc. Memory cycling tracking for threshold voltage variation systems and methods
US11182160B1 (en) 2020-11-24 2021-11-23 Nxp Usa, Inc. Generating source and destination addresses for repeated accelerator instruction

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN85108294A (zh) * 1984-11-02 1986-05-10 萨德利尔计算机研究有限公司 数据处理系统
CN86105110A (zh) * 1985-08-20 1987-07-01 施卢默格海外有限公司 数据处理的系统和方法
US4891751A (en) * 1987-03-27 1990-01-02 Floating Point Systems, Inc. Massively parallel vector processing computer
US4942517A (en) * 1987-10-08 1990-07-17 Eastman Kodak Company Enhanced input/output architecture for toroidally-connected distributed-memory parallel computers
US4985832A (en) * 1986-09-18 1991-01-15 Digital Equipment Corporation SIMD array processing system with routing networks having plurality of switching stages to transfer messages among processors
US5058001A (en) * 1987-03-05 1991-10-15 International Business Machines Corporation Two-dimensional array of processing elements for emulating a multi-dimensional network
US5072418A (en) * 1989-05-04 1991-12-10 Texas Instruments Incorporated Series maxium/minimum function computing devices, systems and methods

Family Cites Families (105)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB211387A (en) * 1923-05-22 1924-02-21 Joseph William Guimont Improvements in and relating to radiators for heating buildings and the like
US3287703A (en) * 1962-12-04 1966-11-22 Westinghouse Electric Corp Computer
FR1416562A (fr) * 1964-09-25 1965-11-05 Constr Telephoniques Système de traitement de données simplifié
US3665402A (en) * 1970-02-16 1972-05-23 Sanders Associates Inc Computer addressing apparatus
JPS4871547A (zh) * 1971-12-27 1973-09-27 Hitachi Ltd
US3744034A (en) * 1972-01-27 1973-07-03 Perkin Elmer Corp Method and apparatus for providing a security system for a computer
US4075679A (en) * 1975-12-08 1978-02-21 Hewlett-Packard Company Programmable calculator
US4437156A (en) * 1975-12-08 1984-03-13 Hewlett-Packard Company Programmable calculator
US4180854A (en) * 1977-09-29 1979-12-25 Hewlett-Packard Company Programmable calculator having string variable editing capability
US4270170A (en) * 1978-05-03 1981-05-26 International Computers Limited Array processor
US4244024A (en) * 1978-08-10 1981-01-06 Hewlett-Packard Company Spectrum analyzer having enterable offsets and automatic display zoom
US4514804A (en) * 1981-11-25 1985-04-30 Nippon Electric Co., Ltd. Information handling apparatus having a high speed instruction-executing function
JPS58114274A (ja) * 1981-12-28 1983-07-07 Hitachi Ltd デ−タ処理装置
US4463445A (en) * 1982-01-07 1984-07-31 Bell Telephone Laboratories, Incorporated Circuitry for allocating access to a demand-shared bus
US4470112A (en) * 1982-01-07 1984-09-04 Bell Telephone Laboratories, Incorporated Circuitry for allocating access to a demand-shared bus
US4488218A (en) * 1982-01-07 1984-12-11 At&T Bell Laboratories Dynamic priority queue occupancy scheme for access to a demand-shared bus
JPS58134357A (ja) * 1982-02-03 1983-08-10 Hitachi Ltd ベクトルプロセッサ
US4482996A (en) * 1982-09-02 1984-11-13 Burroughs Corporation Five port module as a node in an asynchronous speed independent network of concurrent processors
JPS59111569A (ja) * 1982-12-17 1984-06-27 Hitachi Ltd ベクトル処理装置
US4539549A (en) * 1982-12-30 1985-09-03 International Business Machines Corporation Method and apparatus for determining minimum/maximum of multiple data words
US4546428A (en) * 1983-03-08 1985-10-08 International Telephone & Telegraph Corporation Associative array with transversal horizontal multiplexers
US4661900A (en) * 1983-04-25 1987-04-28 Cray Research, Inc. Flexible chaining in vector processor with selective use of vector registers as operand and result registers
US5152000A (en) * 1983-05-31 1992-09-29 Thinking Machines Corporation Array communications arrangement for parallel processor
US4814973A (en) * 1983-05-31 1989-03-21 Hillis W Daniel Parallel processor
JPS606429A (ja) * 1983-06-27 1985-01-14 Ekuseru Kk 異径中空成形品の製造方法及びその製造装置
US4589087A (en) * 1983-06-30 1986-05-13 International Business Machines Corporation Condition register architecture for a primitive instruction set machine
US4569016A (en) * 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
JPS6015771A (ja) * 1983-07-08 1985-01-26 Hitachi Ltd ベクトルプロセッサ
FR2557712B1 (fr) * 1983-12-30 1988-12-09 Trt Telecom Radio Electr Processeur pour traiter des donnees en fonction d'instructions provenant d'une memoire-programme
US4588856A (en) * 1984-08-23 1986-05-13 Timex Computer Corporation Automatic line impedance balancing circuit for computer/telephone communications interface
JPS61122747A (ja) * 1984-11-14 1986-06-10 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション デ−タ処理装置
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
DE3681463D1 (de) * 1985-01-29 1991-10-24 Secr Defence Brit Verarbeitungszelle fuer fehlertolerante matrixanordnungen.
JPS61221939A (ja) * 1985-03-28 1986-10-02 Fujitsu Ltd デイジタル信号処理プロセツサにおける命令機能方式
US5113523A (en) * 1985-05-06 1992-05-12 Ncube Corporation High performance computer system
US5045995A (en) * 1985-06-24 1991-09-03 Vicom Systems, Inc. Selective operation of processing elements in a single instruction multiple data stream (SIMD) computer system
EP0211179A3 (en) * 1985-06-28 1990-09-05 Hewlett-Packard Company Apparatus for performing variable shift
JPS62180427A (ja) * 1986-02-03 1987-08-07 Nec Corp プログラム制御回路
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
US4809169A (en) * 1986-04-23 1989-02-28 Advanced Micro Devices, Inc. Parallel, multiple coprocessor computer architecture having plural execution modes
GB8617674D0 (en) * 1986-07-19 1986-08-28 Armitage P R Seismic processor
US5155389A (en) * 1986-11-07 1992-10-13 Concurrent Logic, Inc. Programmable logic cell and array
US5418970A (en) * 1986-12-17 1995-05-23 Massachusetts Institute Of Technology Parallel processing system with processor array with processing elements addressing associated memories using host supplied address value and base register content
GB2201015B (en) * 1987-02-10 1990-10-10 Univ Southampton Parallel processor array and array element
JPS63253468A (ja) * 1987-04-10 1988-10-20 Hitachi Ltd ベクトル処理装置
JPS6491228A (en) * 1987-09-30 1989-04-10 Takeshi Sakamura Data processor
US5218712A (en) * 1987-07-01 1993-06-08 Digital Equipment Corporation Providing a data processor with a user-mode accessible mode of operations in which the processor performs processing operations without interruption
JP2509947B2 (ja) * 1987-08-19 1996-06-26 富士通株式会社 ネットワ−ク制御方式
US5168573A (en) * 1987-08-31 1992-12-01 Digital Equipment Corporation Memory device for storing vector registers
US4916652A (en) * 1987-09-30 1990-04-10 International Business Machines Corporation Dynamic multiple instruction stream multiple data multiple pipeline apparatus for floating-point single instruction stream single data architectures
US5047975A (en) * 1987-11-16 1991-09-10 Intel Corporation Dual mode adder circuitry with overflow detection and substitution enabled for a particular mode
US5043867A (en) * 1988-03-18 1991-08-27 Digital Equipment Corporation Exception reporting mechanism for a vector processor
US4949250A (en) * 1988-03-18 1990-08-14 Digital Equipment Corporation Method and apparatus for executing instructions for a vector processing system
JPH01320564A (ja) * 1988-06-23 1989-12-26 Hitachi Ltd 並列処理装置
JP2602906B2 (ja) * 1988-07-12 1997-04-23 株式会社日立製作所 解析モデル自動生成方法
EP0360527B1 (en) * 1988-09-19 1995-01-04 Fujitsu Limited Parallel computer system using a SIMD method
DE68926783T2 (de) * 1988-10-07 1996-11-28 Martin Marietta Corp Paralleler datenprozessor
US5083285A (en) * 1988-10-11 1992-01-21 Kabushiki Kaisha Toshiba Matrix-structured neural network with learning circuitry
US5150328A (en) * 1988-10-25 1992-09-22 Internation Business Machines Corporation Memory organization with arrays having an alternate data port facility
US5150327A (en) * 1988-10-31 1992-09-22 Matsushita Electric Industrial Co., Ltd. Semiconductor memory and video signal processing circuit having the same
FR2639461A1 (fr) * 1988-11-18 1990-05-25 Labo Electronique Physique Arrangement bidimensionnel de points memoire et structure de reseaux de neurones utilisant un tel arrangement
US4890253A (en) * 1988-12-28 1989-12-26 International Business Machines Corporation Predetermination of result conditions of decimal operations
US5165010A (en) * 1989-01-06 1992-11-17 Hitachi, Ltd. Information processing system
US5127093A (en) * 1989-01-17 1992-06-30 Cray Research Inc. Computer look-ahead instruction issue control
US5187795A (en) * 1989-01-27 1993-02-16 Hughes Aircraft Company Pipelined signal processor having a plurality of bidirectional configurable parallel ports that are configurable as individual ports or as coupled pair of ports
US5168572A (en) * 1989-03-10 1992-12-01 The Boeing Company System for dynamic selection of globally-determined optimal data path
US5140530A (en) * 1989-03-28 1992-08-18 Honeywell Inc. Genetic algorithm synthesis of neural networks
US5020059A (en) * 1989-03-31 1991-05-28 At&T Bell Laboratories Reconfigurable signal processor
DE69021925T3 (de) * 1989-04-26 2000-01-20 Yamatake Corp Feuchtigkeitsempfindliches Element.
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
US5073867A (en) * 1989-06-12 1991-12-17 Westinghouse Electric Corp. Digital neural network processing elements
US5422881A (en) * 1989-06-30 1995-06-06 Inmos Limited Message encoding
JPH0343827A (ja) * 1989-07-12 1991-02-25 Omron Corp ファジーマイクロコンピュータ
US5173947A (en) * 1989-08-01 1992-12-22 Martin Marietta Corporation Conformal image processing apparatus and method
US5440749A (en) * 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
JP2659436B2 (ja) * 1989-08-25 1997-09-30 富士通株式会社 半導体記憶装置
US5140523A (en) * 1989-09-05 1992-08-18 Ktaadn, Inc. Neural network for predicting lightning
US5140670A (en) * 1989-10-05 1992-08-18 Regents Of The University Of California Cellular neural network
DE58908974D1 (de) * 1989-11-21 1995-03-16 Itt Ind Gmbh Deutsche Datengesteuerter Arrayprozessor.
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US5623650A (en) * 1989-12-29 1997-04-22 Cray Research, Inc. Method of processing a sequence of conditional vector IF statements
JP2559868B2 (ja) * 1990-01-06 1996-12-04 富士通株式会社 情報処理装置
US5067095A (en) * 1990-01-09 1991-11-19 Motorola Inc. Spann: sequence processing artificial neural network
JP3260357B2 (ja) * 1990-01-24 2002-02-25 株式会社日立製作所 情報処理装置
KR920006322B1 (ko) * 1990-04-03 1992-08-03 정호선 나눗셈기
KR930001024B1 (ko) * 1990-04-03 1993-02-12 정호선 신경회로망을 이용한 제곱근 연산용 집적회로
KR920008271B1 (ko) * 1990-04-03 1992-09-26 정호선 신경회로망을 이용한 부동소수점방식 가산기회로
US5148515A (en) * 1990-05-22 1992-09-15 International Business Machines Corp. Scalable neural array processor and method
US5146420A (en) * 1990-05-22 1992-09-08 International Business Machines Corp. Communicating adder tree system for neural array processor
JPH05501460A (ja) * 1990-05-30 1993-03-18 アダプティブ・ソリューションズ・インコーポレーテッド 分散ディジタル最大化機能アーキテクチャおよびその方法
CA2043505A1 (en) * 1990-06-06 1991-12-07 Steven K. Heller Massively parallel processor including queue-based message delivery system
US5182794A (en) * 1990-07-12 1993-01-26 Allen-Bradley Company, Inc. Recurrent neural networks teaching system
US5418915A (en) * 1990-08-08 1995-05-23 Sumitomo Metal Industries, Ltd. Arithmetic unit for SIMD type parallel computer
JPH04107731A (ja) * 1990-08-29 1992-04-09 Nec Ic Microcomput Syst Ltd 乗算回路
US5208900A (en) * 1990-10-22 1993-05-04 Motorola, Inc. Digital neural network computation ring
US5216751A (en) * 1990-10-22 1993-06-01 Motorola, Inc. Digital processing element in an artificial neural network
US5167008A (en) * 1990-12-14 1992-11-24 General Electric Company Digital circuitry for approximating sigmoidal response in a neural network layer
US5164914A (en) * 1991-01-03 1992-11-17 Hewlett-Packard Company Fast overflow and underflow limiting circuit for signed adder
US5175858A (en) * 1991-03-04 1992-12-29 Adaptive Solutions, Inc. Mechanism providing concurrent computational/communications in SIMD architecture
DE69228980T2 (de) * 1991-12-06 1999-12-02 Nat Semiconductor Corp Integriertes Datenverarbeitungssystem mit CPU-Kern und unabhängigem parallelen, digitalen Signalprozessormodul
US5418973A (en) * 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
US5440702A (en) * 1992-10-16 1995-08-08 Delco Electronics Corporation Data processing system with condition code architecture for executing single instruction range checking and limiting operations
US5422805A (en) * 1992-10-21 1995-06-06 Motorola, Inc. Method and apparatus for multiplying two numbers using signed arithmetic
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
JPH0756892A (ja) * 1993-08-10 1995-03-03 Fujitsu Ltd マスク付きベクトル演算器を持つ計算機

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN85108294A (zh) * 1984-11-02 1986-05-10 萨德利尔计算机研究有限公司 数据处理系统
CN86105110A (zh) * 1985-08-20 1987-07-01 施卢默格海外有限公司 数据处理的系统和方法
US4985832A (en) * 1986-09-18 1991-01-15 Digital Equipment Corporation SIMD array processing system with routing networks having plurality of switching stages to transfer messages among processors
US5058001A (en) * 1987-03-05 1991-10-15 International Business Machines Corporation Two-dimensional array of processing elements for emulating a multi-dimensional network
US4891751A (en) * 1987-03-27 1990-01-02 Floating Point Systems, Inc. Massively parallel vector processing computer
US4942517A (en) * 1987-10-08 1990-07-17 Eastman Kodak Company Enhanced input/output architecture for toroidally-connected distributed-memory parallel computers
US5072418A (en) * 1989-05-04 1991-12-10 Texas Instruments Incorporated Series maxium/minimum function computing devices, systems and methods

Also Published As

Publication number Publication date
CN1107983A (zh) 1995-09-06
US6085275A (en) 2000-07-04
US5572689A (en) 1996-11-05
US5664134A (en) 1997-09-02
US5805874A (en) 1998-09-08
JP2006012182A (ja) 2006-01-12
US5598571A (en) 1997-01-28
EP0619557A2 (en) 1994-10-12
US5537562A (en) 1996-07-16
US5706488A (en) 1998-01-06
US5734879A (en) 1998-03-31
US5548768A (en) 1996-08-20
US5742786A (en) 1998-04-21
EP0619557A3 (en) 1996-06-12
US5754805A (en) 1998-05-19
US5600846A (en) 1997-02-04
US5752074A (en) 1998-05-12
TW280890B (zh) 1996-07-11
US5790854A (en) 1998-08-04
KR940022257A (ko) 1994-10-20
US5737586A (en) 1998-04-07
US5717947A (en) 1998-02-10
JPH0773149A (ja) 1995-03-17
US5559973A (en) 1996-09-24
US5600811A (en) 1997-02-04

Similar Documents

Publication Publication Date Title
CN1080906C (zh) 一种数据处理系统及其方法
CN1117316C (zh) 采用多个向量寄存器组的单指令多数据处理方法及其装置
CN1112635C (zh) 多媒体信号处理器中的单指令多数据处理方法及其装置
CN1163833C (zh) 数据处理系统以及在数据处理系统中执行交互操作的方法
CN1288585C (zh) 用于设计可配置处理器的自动处理器生成系统及方法
CN1062426A (zh) 归约处理器
CN1308818C (zh) 用于结构仿真的系统
CN1174313C (zh) 多指令集的数据处理
CN1063168A (zh) 并行处理装置
CN1217262C (zh) 假想分支目标地址高速缓存中置换目标地址的装置及方法
CN86107558A (zh) 具有带式随机存取存储器和地址发生器装置的单指令多数据单元阵列处理机
CN1246772C (zh) 处理器
CN1040803C (zh) 在数据处理系统提供附加系统特性的方法和装置
CN1625731A (zh) 具有多种长度指令集体系结构的可配置数据处理器
CN1399736A (zh) 用于处理器的转移指令
CN1306640A (zh) 微控制器指令集
CN1629801A (zh) 产生早期指令结果的管线式微处理器、装置以及方法
CN1912926A (zh) 可中断图形处理单元处理多个程序的方法和图形处理单元
US9182992B2 (en) Method for improving performance of a pipelined microprocessor by utilizing pipeline virtual registers
CN1040480C (zh) 不采用一个或二个操作系统的服务而在不同处理器中运行的应用程序之间直接传送信息的方法及装置
CN1115631C (zh) 具有risc结构的八位微控制器
CN1862485A (zh) 数字信号处理器
CN104025034A (zh) 可配置精减指令集核
CN1152300C (zh) 多媒体信号处理器中的单指令多数据处理方法及其装置
CN1254740C (zh) 使用协处理器的数据处理

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: FREEDOM SEMICONDUCTORS CO.

Free format text: FORMER OWNER: MOTOROLA, INC.

Effective date: 20040813

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20040813

Address after: Texas in the United States

Patentee after: FreeScale Semiconductor

Address before: Illinois, USA

Patentee before: Motorola, Inc.

C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee