JP2004536736A - 集積回路デバイスを有する印刷カートリッジ - Google Patents

集積回路デバイスを有する印刷カートリッジ Download PDF

Info

Publication number
JP2004536736A
JP2004536736A JP2003518836A JP2003518836A JP2004536736A JP 2004536736 A JP2004536736 A JP 2004536736A JP 2003518836 A JP2003518836 A JP 2003518836A JP 2003518836 A JP2003518836 A JP 2003518836A JP 2004536736 A JP2004536736 A JP 2004536736A
Authority
JP
Japan
Prior art keywords
data
media
image
print cartridge
pixel
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.)
Pending
Application number
JP2003518836A
Other languages
English (en)
Inventor
カイア シルバーブルック,
Original Assignee
シルバーブルック リサーチ ピーティワイ リミテッド
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 シルバーブルック リサーチ ピーティワイ リミテッド filed Critical シルバーブルック リサーチ ピーティワイ リミテッド
Publication of JP2004536736A publication Critical patent/JP2004536736A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/14Structure thereof only for on-demand ink jet heads
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J11/00Devices or arrangements  of selective printing mechanisms, e.g. ink-jet printers or thermal printers, for supporting or handling copy material in sheet or web form
    • B41J11/0005Curl smoothing, i.e. smoothing down corrugated printing material, e.g. by pressing means acting on wrinkled printing material
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J15/00Devices or arrangements of selective printing mechanisms, e.g. ink-jet printers or thermal printers, specially adapted for supporting or handling copy material in continuous form, e.g. webs
    • B41J15/04Supporting, feeding, or guiding devices; Mountings for web rolls or spindles
    • B41J15/044Cassettes or cartridges containing continuous copy material, tape, for setting into printing devices
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/14Structure thereof only for on-demand ink jet heads
    • B41J2/14427Structure of ink jet print heads with thermal bend detached actuators
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1623Manufacturing processes bonding and adhesion
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1626Manufacturing processes etching
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1626Manufacturing processes etching
    • B41J2/1628Manufacturing processes etching dry etching
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1626Manufacturing processes etching
    • B41J2/1629Manufacturing processes etching wet etching
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1631Manufacturing processes photolithography
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1632Manufacturing processes machining
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1635Manufacturing processes dividing the wafer into individual chips
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/1637Manufacturing processes molding
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/164Manufacturing processes thin film formation
    • B41J2/1642Manufacturing processes thin film formation thin film formation by CVD [chemical vapor deposition]
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/164Manufacturing processes thin film formation
    • B41J2/1645Manufacturing processes thin film formation thin film formation by spincoating
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/16Production of nozzles
    • B41J2/1621Manufacturing processes
    • B41J2/164Manufacturing processes thin film formation
    • B41J2/1646Manufacturing processes thin film formation thin film formation by sputtering
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17513Inner structure
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17526Electrical contacts to the cartridge
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17543Cartridge presence detection or type identification
    • B41J2/17546Cartridge presence detection or type identification electronically
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17553Outer structure
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J29/00Details of, or accessories for, typewriters or selective printing mechanisms not otherwise provided for
    • B41J29/38Drives, motors, controls or automatic cut-off devices for the entire printing mechanism
    • B41J29/393Devices for controlling or analysing the entire machine ; Controlling or analysing mechanical parameters involving printing of test patterns
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J3/00Typewriters or selective printing or marking mechanisms characterised by the purpose for which they are constructed
    • B41J3/44Typewriters or selective printing mechanisms having dual functions or combined with, or coupled to, apparatus performing other functions
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B82NANOTECHNOLOGY
    • B82YSPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
    • B82Y30/00Nanotechnology for materials or surface science, e.g. nanocomposites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/86Secure or tamper-resistant housings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K1/00Methods or arrangements for marking the record carrier in digital fashion
    • G06K1/12Methods or arrangements for marking the record carrier in digital fashion otherwise than by punching
    • G06K1/121Methods or arrangements for marking the record carrier in digital fashion otherwise than by punching by printing code marks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/06009Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
    • G06K19/06037Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking multi-dimensional coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/06009Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
    • G06K19/06046Constructional details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/067Record carriers with conductive marks, printed circuits or semiconductor circuit elements, e.g. credit or identity cards also with resonating or responding marks without active components
    • G06K19/07Record carriers with conductive marks, printed circuits or semiconductor circuit elements, e.g. credit or identity cards also with resonating or responding marks without active components with integrated circuit chips
    • G06K19/073Special arrangements for circuits, e.g. for protecting identification code in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1408Methods for optical code recognition the method being specifically adapted for the type of code
    • G06K7/14172D bar codes
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L23/00Details of semiconductor or other solid state devices
    • H01L23/57Protection from inspection, reverse engineering or tampering
    • H01L23/576Protection from inspection, reverse engineering or tampering using active circuits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03BGENERATION OF OSCILLATIONS, DIRECTLY OR BY FREQUENCY-CHANGING, BY CIRCUITS EMPLOYING ACTIVE ELEMENTS WHICH OPERATE IN A NON-SWITCHING MANNER; GENERATION OF NOISE BY SUCH CIRCUITS
    • H03B29/00Generation of noise currents and voltages
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/00127Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture
    • H04N1/00326Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture with a data reading, recognizing or recording apparatus, e.g. with a bar-code apparatus
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/0035User-machine interface; Control console
    • H04N1/00405Output means
    • H04N1/00408Display of information to the user, e.g. menus
    • H04N1/0044Display of information to the user, e.g. menus for image preview or review, e.g. to help the user position a sheet
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/00962Input arrangements for operating instructions or parameters, e.g. updating internal software
    • H04N1/00965Input arrangements for operating instructions or parameters, e.g. updating internal software using a plug-in memory module, e.g. memory card, memory stick
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/21Intermediate information storage
    • H04N1/2104Intermediate information storage for one or a few pictures
    • H04N1/2112Intermediate information storage for one or a few pictures using still video cameras
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/21Intermediate information storage
    • H04N1/2104Intermediate information storage for one or a few pictures
    • H04N1/2112Intermediate information storage for one or a few pictures using still video cameras
    • H04N1/2154Intermediate information storage for one or a few pictures using still video cameras the still video camera incorporating a hardcopy reproducing device, e.g. a printer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N1/32101Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N1/32128Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title attached to the image data, e.g. file header, transmitted message header, information on the same page or in the same computer file as the image
    • H04N1/32133Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title attached to the image data, e.g. file header, transmitted message header, information on the same page or in the same computer file as the image on the same paper sheet, e.g. a facsimile page header
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/222Studio circuitry; Studio devices; Studio equipment
    • H04N5/262Studio circuits, e.g. for mixing, switching-over, change of character of image, other special effects ; Cameras specially adapted for the electronic generation of special effects
    • H04N5/2628Alteration of picture size, shape, position or orientation, e.g. zooming, rotation, rolling, perspective, translation
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/135Nozzles
    • B41J2/165Prevention or detection of nozzle clogging, e.g. cleaning, capping or moistening for nozzles
    • B41J2/16585Prevention or detection of nozzle clogging, e.g. cleaning, capping or moistening for nozzles for paper-width or non-reciprocating print heads
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17596Ink pumps, ink valves
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/015Ink jet characterised by the jet generation process
    • B41J2/04Ink jet characterised by the jet generation process generating single droplets or particles on demand
    • B41J2002/041Electromagnetic transducer
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2202/00Embodiments of or processes related to ink-jet or thermal heads
    • B41J2202/01Embodiments of or processes related to ink-jet heads
    • B41J2202/21Line printing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2129Authenticate client device independently of the user
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L2924/00Indexing scheme for arrangements or methods for connecting or disconnecting semiconductor or solid-state bodies as covered by H01L24/00
    • H01L2924/0001Technical content checked by a classifier
    • H01L2924/0002Not covered by any one of groups H01L24/00, H01L24/00 and H01L2224/00
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/00127Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2101/00Still video cameras
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/0008Connection or combination of a still picture apparatus with another apparatus
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/3212Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of data relating to a job, e.g. communication, capture or filing of an image
    • H04N2201/3222Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of data relating to a job, e.g. communication, capture or filing of an image of processing required or performed, e.g. forwarding, urgent or confidential handling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/3261Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of multimedia information, e.g. a sound signal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/3261Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of multimedia information, e.g. a sound signal
    • H04N2201/3264Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of multimedia information, e.g. a sound signal of sound signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/3269Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of machine readable codes or marks, e.g. bar codes or glyphs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/3274Storage or retrieval of prestored additional information
    • H04N2201/3276Storage or retrieval of prestored additional information of a customised additional information profile, e.g. a profile specific to a user ID
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/328Processing of the additional information

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Manufacturing & Machinery (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Chemical & Material Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Toxicology (AREA)
  • Condensed Matter Physics & Semiconductors (AREA)
  • Software Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Nanotechnology (AREA)
  • Health & Medical Sciences (AREA)
  • Electromagnetism (AREA)
  • General Health & Medical Sciences (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Composite Materials (AREA)
  • Crystallography & Structural Chemistry (AREA)
  • Materials Engineering (AREA)
  • Human Computer Interaction (AREA)
  • Power Engineering (AREA)
  • Record Information Processing For Printing (AREA)
  • Studio Devices (AREA)
  • Ink Jet (AREA)
  • Accessory Devices And Overall Control Thereof (AREA)
  • Printers Characterized By Their Purpose (AREA)

Abstract

印刷カートリッジ(1001)は、ハウジング(1007)を含んでいる。集積回路デバイス(1033)は、ハウジング(1007)に配置される。集積回路デバイス(1033)は、カートリッジのシリアルナンバー、媒体および媒体顔料のうちの少なくとも1つに関するデータを運ぶメモリ回路を有している。
【選択図】図228

Description

【発明の分野】
【0001】
本発明は、プリンタ技術の分野に関しており、イメージプリンタなどに用いられる印刷カートリッジを開示している。特に、本発明は集積回路デバイスを含む印刷カートリッジを開示している。
【発明の背景】
【0002】
近年、デジタル印刷技術は、従来のカメラ及び写真フィルム技術の適当な代替技術として提案されている。従来のフィルム及び写真技術は、多数の予めフォーマットされたネガを有するフィルムロールに依存し、ネガはレンズ系の傍に引き出され、そのネガにはレンズ系によって撮影された像のネガ像が形成される。フィルムロールの終了後、フィルムはその容器に巻き戻され、ネガを処理し現像する処理店へ回送され、対応した写真のポジセットが生成される。
【0003】
残念ながら、このようなシステムには多数の重大な欠点がある。第一に、利用される化学薬品は、明らかに感光性が非常に高く、光がフィルムロールに衝突すると、フィルムは露光してしまう。したがって、これらの化学薬品は、光の影響が完全に制御された光に敏感な環境で作用することが要求される。この結果として、費用の増加を招く厄介なエンジニアリング要求が生じる。更に、フィルム処理技術は、「ネガ」を利用し、その後、処理化学薬品及び複雑なハロゲン化銀処理等の利用によって「ポジ」フィルム紙に処理を施すことが必要である。これは、一般的に、過度に煩わしく、複雑であり、且つ費用がかかる。更に、このようなシステムは普及しているので、ある種のサイズのフィルムフォーマットに標準化され、一般的に、上記の技術に関して考えられるフレキシビリティは極めて低い。
【0004】
近年、完全なデジタルカメラが発表された。これらのカメラ装置は、通常、処理チップに接続された電荷結合素子(CCD)又はその他の形態のフォトセンサを利用し、処理チップは、着脱可能な磁気カードの形態をとり得る媒体蓄積装置に接続され、メディア蓄積装置を制御する。このタイプの装置では、像はCCDイメージセンサによって撮影され、磁気記憶装置に蓄積される。後の時点で、撮影された像は、コンピュータ装置へダウンロードされ、見るために印刷される。デジタルカメラは、像へのアクセスが即時的ではなく、コンピュータシステムにローディングする更なる後処理ステップが必要であるという欠点があり、この更なる後処理は、しばしば、迅速かつ臨機応変の用途に障害になる。
【0005】
したがって、操作が便利、単純かつ効果的な改良形カメラ画像生成装置に対する全体的なニーズが依然としてある。さらに、画像を効果的に再現できる単純な形の携帯型即時印刷媒体に対するニーズもまた依然としてある。
【0006】
親出願において、印刷媒体およびカートリッジによって供給される媒体顔料に関連した情報を提供する認証チップを使用することが開示されている。出願人は、少なくとも媒体顔料に関する情報をカートリッジと共に供給できる手段を提供することが非常に望ましいことを、確認していた。適切な暗号化技術を用いることで、この手段はアフターマーケット補給を禁止するのに使用することができた。印刷技術分野で周知のように、このようなアフターマーケット補給は印刷業界において相当な懸念を引き起こすことになっていた。
【発明の概要】
【0007】
発明の第1の態様によれば、
ハウジングと、
ハウジングに配置されて、カートリッジのシリアルナンバー、媒体および媒体顔料のうちの少なくとも一つに関するデータを運ぶメモリ回路を有している集積回路デバイスと、を備える印刷カートリッジを提供する。
【0008】
発明の第2の態様によれば、印刷カートリッジの媒体顔料を決める方法であって、前記方法は、印刷カートリッジのハウジングに配置されている集積回路デバイスのメモリ回路を読みとるステップを備えており、前記メモリ回路は媒体顔料に関するデータを運ぶ、方法を提供する。
【0009】
発明の第3の態様によれば、
ハウジングと、
ハウジング内に配置され、媒体顔料の供給を含んでいる媒体顔料供給設備と、
ハウジングに配置されて、媒体顔料に関するデータを運ぶメモリ回路を有している集積回路デバイスと、を備える印刷カートリッジを提供する。
【0010】
発明の第4の態様によると、印刷カートリッジの媒体を決める方法であって、前記方法は、印刷カートリッジのハウジングに配置される集積回路デバイスのメモリ回路を読みとるステップを備えており、前記メモリ回路は印刷カートリッジの媒体に関するデータを運ぶ、方法を提供する。
【0011】
発明の第5の態様によれば、
ハウジングと、
ハウジング内に配置され、媒体の供給を含んでいる媒体供給設備と、
ハウジングに配置されて、媒体に関するデータを運ぶメモリ回路を有している集積回路デバイスと、を備える印刷カートリッジを提供する。
【0012】
発明の第6の態様によると、印刷カートリッジの媒体および媒体顔料を決める方法であって、前記方法は、印刷カートリッジのハウジングに配置される集積回路デバイスのメモリ回路を読みとるステップを備えており、前記メモリ回路は印刷カートリッジの媒体顔料および媒体に関するデータを運ぶ、方法を提供する。
【0013】
発明の第7の態様によれば、
ハウジングと、
ハウジング内に配置され、媒体の供給および媒体顔料の供給をそれぞれが含んでいる、媒体供給設備および媒体顔料供給設備と、
ハウジングに配置されて、媒体顔料および媒体に関するデータを運ぶメモリ回路を有している集積回路デバイスと、を備える印刷カートリッジを提供する。
【0014】
発明の第8の態様によると、印刷カートリッジの認証チップを提供しており、前記印刷カートリッジは、ハウジングと、ハウジング内に配置され且つ媒体顔料の供給を含んでいる媒体顔料供給設備と、ハウジングに配置され媒体顔料を印字機構に送る送り機構とを有しており、前記認証チップは、
ハウジングに取り付け可能であって、媒体顔料に関するデータを取り入れるメモリ回路を有している集積回路デバイスを備えている。
【0015】
発明の第9の態様によると、印刷カートリッジの認証チップを提供しており、前記印刷カートリッジは、ハウジングと、ハウジング内に配置され且つ媒体の供給を含んでいる媒体供給設備と、ハウジングに配置され媒体を印字機構に送る送り機構とを有しており、前記認証チップは、
ハウジングに取り付け可能であって、媒体に関するデータを取り入れるメモリ回路を有し
ている集積回路デバイスを備えている。
【0016】
発明の第10の態様によると、印刷カートリッジの認証チップを提供しており、前記印刷カートリッジは、ハウジングと、ハウジング内に配置され且つ媒体顔料の供給および媒体の供給を含んでいる媒体顔料供給設備および媒体供給設備と、ハウジングに配置され媒体顔料および媒体を印字機構に送る送り機構とを有しており、前記認証チップは、
ハウジングに取り付け可能であって、媒体顔料および媒体に関するデータを取り入れるメモリ回路を有している集積回路デバイスを備えている。
【0017】
以下、本発明は一例として添付図面を参照して説明される。以下の説明の特定の性質は、本発明の概要の広範囲に亘る性質を何らかの形で限定するものとして構成されるべきではない。
【好適なその他の実施例の説明】
【0018】
本発明の範囲には他のいかなる形態も含まれ得るが、以下では、本発明の好適な形態が、添付図面を参照して、例示だけのために説明される。
【0019】
好適な実施例により構成されたデジタル画像処理カメラシステムは、図1に示されている。カメラユニット1は、一体的なプリントロール(図示しない)を挿入する手段を含む。カメラユニット1は、カメラによって撮影される像3を検出するエリアイメージセンサ2を含む。オプションとして、シーン3を映像化し、オプション的に立体画法の出力効果の生成物を得るため、第2のエリアイメージセンサを搭載してもよい。
【0020】
カメラ1は、センサ2によって検出された像を表示するためのオプションのカラーディスプレイ5を含む。シンプルな像がディスプレイ5に表示されるとき、ボタン6を押下することが可能であり、その結果、印刷された画像8がカメラユニット1によって出力される。以下では、Artcard(アートカード)9と呼ばれる一連のカードは、一方の面に符号化された情報を含み、もう一方の面に、Artcard9により生成された特定の効果によって歪められた画像を含む。Artcard9は、カメラ1の側面にあるArtcardリーダー10に挿入され、挿入されると、Artcard9の面に現れた歪みと同じ方法で歪められた出力画像8が得られる。したがって、この簡単なユーザインタフェースを使用することにより、特定の効果を生じさせることを望むユーザは、多数のArtcard9のうちの一枚をArtcardリーダー10に挿入し、像3の写真を撮影するためボタン19を利用することが可能であり、その結果、対応した歪んだ出力画像8が得られる。
【0021】
カメラユニット1は、カメラユニットの内部プリントロールに残っているプリントアウトの数を含む説明情報を表示するための簡単なLCD出力ディスプレイ15に加えて、多数の他の制御ボタン13、14を含み得る。更に、様々な出力フォーマットがCHPスイッチ17によって制御され得る。
【0022】
次に図2を参照すると、カメラ1の内部ハードウェアの概略図が示されている。内部ハードウェアは、Artcam(アートカム)中央プロセッサユニット(ACP)31を中心としている。
【0023】
Artcam中央プロセッサ31
Artcam中央プロセッサ31は、システムの心臓部を形成する多数の機能を提供する。ACP31は、好ましくは、複雑な高速CMOSシステムオンチップとして実現される。一部のフルカスタム領域を有する標準的なセル設計を利用することが推奨される。0.25ミクロンCMOSプロセス上の製作は、合理的に小さいダイ面積と共に、要求され
る密度及び速度を実現する。
【0024】
ACP31によって与えられる機能には次の機能が含まれる:
1. エリアイメージセンサ2の制御及びデジタル化。ACPの3次元立体視バージョンは、第2のオプションのイメージセンサ4が立体視効果のために設けられた二つのエリアイメージセンサインタフェースを必要とする;
2. エリアイメージセンサ補償、再フォーマッティング、及び画像強調;
3. 記憶装置33に対するメモリインタフェース及び管理;
4. Artcard9からのデータの読み出しのために設けられたArtcardリーダーのリニアイメージセンサ34のインタフェース、制御及びアナログ・デジタル変換;
5. デジタル化された符号化Artcard画像からの未加工Artcardデータの抽出;
6. Artcardの符号化データのリード・ソロモン誤差検出及び訂正。Artcard9の符号化された面は、Artcard9の画像歪み面に表示された効果を生成するためどのように画像を処理するかに関する情報を含む。この情報は、以下では、「Varkスクリプト」と呼ばれるスクリプトの形式である。Varkスクリプトは、望ましい効果を生成するためACP31内で実行されるインタープリタによって利用される;
7. Artcard9上のVarkスクリプトの解釈;
8. Varkスクリプトによって指定されたとおりの画像処理動作の実行;
9. 用紙輸送36、ズームレンズ38、自動焦点39、及びArtcardドライバ37のための様々なモーターの制御;
10. プリントロール42からの写真8を裁断する裁断機41の動作用の裁断機アクチュエータ40の制御;
11. 印刷用画像データの中間調化;
12. 適当な時におけるプリントヘッド44へのプリントデータの供給;
13. プリントヘッド44の制御;
14. プリントヘッド44へのインク圧送の制御;
15. オプションのフラッシュユニット56の制御;
16. 方位センサ46、自動焦点47及びArtcard挿入センサ49を含むカメラ内の様々なセンサの読み出し及びそれに基づく処置;
17. ユーザインタフェースボタン6、13、14の読み出し及びそれに基づく処置。
18. 状態ディスプレイ15の制御;
19. ビューファインダー及びプレビュー画像のカラーディスプレイ5への供給;
20. 電力管理回路51によるACP電力消費を含むシステム電力消費の制御;
21. 汎用コンピュータへの外部通信52の提供(パートUSBを使用);
22. プリントロール認証チップ53の情報の読み出し及び保存;
23. カメラ認証チップ54の情報の読み出し及び保存;
24. テキスト修正用のオプションのミニキーボード57との通信。
【0025】
水晶振動子58
水晶振動子58は、システムクロック用の周波数基準として使用される。システムクロックは非常に高いため、ACP31は水晶58から得られた周波数を増大させるため位相ロックループクロック回路を含む。
【0026】
イメージセンシング
エリアイメージセンサ2
エリアイメージセンサ2は、そのレンズを通る像を電気信号へ変換する。エリアイメージセンサは、電荷結合素子(CCD)でもよく、アクティブ画素センサ(APS)CMOSイメージセンサでもよい。現在のところ、利用可能なCCDは、通常、かなり高い画質を有するが、CMOSイメージャの開発は、現在、非常に盛んに行われている。CMOS
イメージャは、最終的には、画素数の少ないCCDよりも実質的に安価になり、駆動回路及び信号処理を組み込み得ることが予想される。CMOSイメージャは、12インチウェハーに移行しているCMOS製造技術で製作することが可能である。したがって、CCDとCMOSイメージャの間の製造コストの差は増加し、徐々にCMOSイメージャの方が支持される可能性が高い。しかし、現在のところ、CCDは、最良の選択肢である。
【0027】
Artcamユニットは、1500×1000型のエリアイメージセンサで適切な結果を生じるであろう。しかし、例えば、750×700型のような小型のセンサも、様々な市場で適切であろう。Artcamは、従来のデジタルカメラと比べると、イメージセンサの解像度に対する感度が低い。その理由は、Artcard9に入っている殆どのスタイルは、解像度の不足をわかりにくくするように画像を処理するからである。例えば、画像が印象派の絵画へ変換される効果をシミュレートするため歪められる場合、原画像の低解像度は最小の影響で使用可能である。低解像度入力画像が典型的に気付かれない更なる例には、極めて歪んだ画像を生じる画像ワープ、画像の複数の縮写(例えば、パスポート写真)、ベースレリーフメタルルックのためのバンプマッピングのようなテクスチャ処理、及び構造化されたシーンへの写真合成が含まれる。
【0028】
このように低解像度イメージセンサを許容することは、Artcamユニット1カメラの製造コストを低下させる重要なファクタである。低コストの750×500型イメージセンサを用いるArtcamは、しばしば、非常に高価な1500×1000型イメージセンサを用いる従来のデジタルカメラよりも優れた結果を生じる。
【0029】
オプションの立体視3次元イメージセンサ4
Artcamユニット1の3次元バージョンは、立体視動作のため補助イメージセンサ4を備える。このイメージセンサは、主イメージセンサと同一である。オプションのイメージセンサを駆動する回路は、設計コストの増大を低減するため、ACPチップ31の標準部品として収容してもよい。或いは、別個の3次元Artcam ACPを設計してもよい。このオプションは、主流の単一センサ型のArtcamの製造コストを削減する。
【0030】
プリントロール認証チップ53
小型チップ53は、各プリントロール42に収容される。このチップは、APS(新写真システム)フィルムカートリッジのような他の形態のカメラフィルムユニット上のバーコード、光学センサ及びホイール、並びに、ISO/ASAセンサの機能を置き換える。
【0031】
認証チップは、以下のその他の機能も提供する:
1. APSロールから機械的及び光学的に検出されるデータではなく、データの保存;
2. 高解像度の正確さの媒体の残りの長さの表示;
3. 粗悪な模造プリントロールコピーを防止するための認証情報。
【0032】
認証チップ53は、1024ビットのフラッシュメモリを含み、1024ビットのうちの128ビットは認証鍵であり、512ビットは認証情報である。更に、認証鍵が直接アクセスされないことを保証するため、暗号化回路が収容される。
【0033】
プリントヘッド44
Artcamユニット1は、十分に小規模、十分に低電力、十分に高速、十分に高品質、及び十分に低コストであり、プリントロールに適合したどのようなカラー印刷技術でも利用可能である。以下、当該印刷ヘッドについて具体的に説明する。
【0034】
インクジェットヘッドの仕様は以下の通りである。
【0035】
【表1】
Figure 2004536736
オプションのインク圧コントローラ(図示せず)
インク圧コントローラの機能は、Artcamに組み込まれたインクジェットプリントヘッド44のタイプに依存する。一部のタイプのインクジェットでは、インク圧は単純に大気圧であるため、インク圧コントローラを使用しなくても済む。他のタイプのプリントヘッドは、安定化した正のインク圧を必要とする。この場合、インプレッシャ・コントローラは、ポンプ及び圧力トランスデューサを含む。
【0036】
その他のプリントヘッドは、インク圧力に、典型的に約100KHzの規則的な振動を生じさせるため超音波トランスデューサが必要である。この場合、ACP31は、これらの振動の周波数位相及び振幅を制御する。
【0037】
用紙輸送モーター36
用紙輸送モーター36は、プリントロール42内からプリントヘッドの傍を通して、一定速度で用紙を移動させる。モーター36は、用紙を移動させるローラーを駆動するため適切な速度までギアダウンされた小型モーターである。機械的なガタ又はその他の振動が印刷されたドット行間隔に影響を与えるので、高画質を実現するためには、高品質モーターと機械式ギアが必要である。
【0038】
用紙輸送モータードライバ60
モータードライバ60は、APC31からのデジタルモーター制御信号をモーター36の駆動に適切なレベルまで増幅する小型回路である。
【0039】
用紙プルセンサ
用紙プルセンサ50は、印刷プロセス中にユーザによるカメラユニットからの写真の引っ張りを検出する。APC31は、このセンサ50を読み出し、この状況を検出した場合、裁断機41を作動する。用紙プルセンサ50は、動作中にカメラをより絶対確実にするために組み込まれる。ユーザが印刷中に強引に用紙を引き出そうとした場合、プリント機構44又はプリントロール42は、(極端なケースでは)破損するであろう。ポッドが完全に排出される前にポラロイド式カメラからポッドを引き出すことが許されるので、一般の人々はこのような動作を行うことに慣れている。したがって、一般の人々は、用紙を引き出してはならないという印刷された指示に留意しない可能性が高い。
【0040】
Artcamは、好ましくは、引っ張り検出後に裁断機41が用紙を裁断した後、写真印刷プロセスを再開する。
【0041】
引っ張りセンサは、歪みゲージセンサとして実現してもよく、又は用紙が引っ張られたときに用紙ドライブローラーに発生するトルクによって偏向される小さいプラスチック製のフラグを検出する光学センサとして実現してもよい。後者の実現形態は、低コストのため推奨される。
【0042】
用紙裁断機アクチュエータ40
用紙裁断機アクチュエータ40は、写真の終わりに、又は用紙引っ張りセンサ50が作動されたときに、裁断機41に用紙を裁断させる小型アクチュエータである。
【0043】
用紙裁断機アクチュエータ40は、APCからの裁断機制御信号をアクチュエータ41によって要求されるレベルまで増幅する小型回路である。
【0044】
Artcard9
Artcard9はArtcamユニット用のプログラム記憶媒体である。前述の通り、プログラムは、Varkスクリプトの形式である。Varkは、特に、Artcamユニットのため開発された強力な画像処理言語である。各Artcard9は一つのVarkスクリプトを格納し、これによって、一つの画像処理スタイルを規定する。
【0045】
好ましくは、VARK言語は高度に画像処理専用である。高度に画像処理専用とすることにより、カード上に詳細を記憶するために要する記憶容量は実質的に減少する。更に、機能強化された効果を含む新しいプログラムを作成できる簡便さは、実質的に向上する。好ましくは、この言語は、ワープマップによる画像ワーピング、コンボリューション、カラールックアップテーブル、画像のポスタリゼーション、画像へのノイズ付加、画像強調フィルタ、ペインティングアルゴリズム、ブラシジッタリング及び操作エッジ検出フィルタ、タイリング、光源による照明、バンプマップ、テキスト、顔検出及び物体検出属性、3次元フォントを含むフォント、並びに、任意の複合予備レンダリングアイコンを含む多数の画像処理機能を取り扱う機能を含む。Vark言語インタープリタの動作のより詳細な内容は以下に記載される。
【0046】
したがって、作成された言語によって定義されるような言語構造を利用することにより、任意の画像に対する新しい影響を作成し、Artcard上の安価な記憶装置のために構築し、その後、カメラの所有者に配布することが可能である。更に、カードの片面には、カードのもう一方の面に記憶された特定のVARKスクリプトが任意の撮影像に与える影響を説明する例が設けられる。
【0047】
このようなシステムを利用することにより、VARKインタープリタがカメラ装置に組み込まれているならば、装置に依存しないシナリオが与えられ、その結果として、根本的な技術が長期のうちに完全に変えられるという点で、カメラ技術は、著しく陳腐化する虞を伴わずに普及させることができる。更に、新しいフィルタが作成され、カード読み出し用の簡単なカードを用いるような、安価な方式で配布されたときに、Varkスクリプトを更新することが可能である。
【0048】
Artcard9は、クレジットカード(長さ86mm、幅54mm)と同一フォーマットの薄い白色プラスチック製の片である。Artcardは、高解像度インクジェットプリンタを使用して両面印刷されている。このインクジェットプリンタ技術は、1600dpi(63dpmm)の解像度のArtcamに使用される技術と同じ技術であると考えられる。Artcard9の主要な特徴は、安価な製造コストである。Artcardは、プラスチックフィルムの幅広いウェブと同様に高速で製造可能である。プラスチックウェブは、親水性の染料固着層で両面を覆われる。ウェブは、ページ幅のカラーインクジェットプリンタを用いて両面同時に印刷される。次に、ウェブは、個別のカードに切断され打ち抜かれる。カードの一方の面は、Artcard9が検出された像に与える影響を人が読める形で表現したものが印刷される。これは、カードの裏面に記憶されたVarkスクリプトを使用して処理された単純な標準画像でもよい。
【0049】
カードの裏面には、画像処理シーケンスを定義するVarkスクリプトに復号化され得るドットの配列が印刷される。この印刷面積は80mm×50mmであり、全部で15876000ドットがある。このドットの配列は、少なくとも1.89MByteのデータを表現することができる。高信頼性を実現するため、広範な誤り検出及び訂正がドットの配列に組み込まれる。これにより、カードの実質的な部分が汚損され、損耗され、皺を付けられ、或いは、汚されても、データの完全性に影響が及ばないようにすることができる。使用されるデータ符号化方式はリード・ソロモン符号化であり、データの半分が誤り訂正のために用いられる。これにより、各Artcard9には、誤り訂正された967Kbyteのデータを記憶させることができる。
【0050】
リニアイメージセンサ34
Artcardリニアセンサ34は、上記のArtcardデータ画像を電気信号へ変換する。エリアイメージセンサ2、4の場合と同様に、リニアイメージセンサは、CCD又はAPS CMOS技術を用いて製造可能である。イメージセンサ34の有効長さは50mmであり、Artcard9上のデータ配列の幅と一致する。ナイキストのサンプリング定理を充たすため、リニアイメージセンサ34の解像度は、イメージセンサに到達するArtcard光学像の最高空間周波数の少なくとも2倍でなければならない。実際上、データ検出は、イメージセンサ解像度がこれよりも実質的に高くなった場合、より簡単になる。4900dpi(180dpmm)の解像度が選ばれた場合、全部で9450画素が与えられる。この解像度は、5.3μmの画素センサピッチを必要とする。これは、千鳥状にされた4行の20μm画素センサを使用することによって簡単に実現することができる。
【0051】
リニアイメージセンサは、ライトパイプ(図示せず)によってArtcard9を照明するためのLED65を含む特殊なパッケージに装着される。
【0052】
Artcardリーダーのライトパイプは、以下の数機能を備えた成形ライトパイプでもよい:
1. ライトパイプは、全ての内部反射ファセットを使用してカードの幅に亘ってLEDからの光を拡散する。
2. ライトパイプは、集積化されたシリンドリカルレンズを使用してArtcard9の16μm幅のストリップ上に光を集める。
3. ライトパイプは、成形されたマイクロレンズの配列を使用してArtcardから反射された光をリニアイメージセンサの画素に集める。
【0053】
次に、Artcardリーダーの動作を説明する。
【0054】
Artcardリーダーモーター37
Artcardリーダーモーターは、比較的一定の速度でArtcardを進めてリニアイメージセンサ34を通過させる。厳密な精度の機械コンポーネントをArtcardリーダーに収容することは費用対効果がよくないので、モーター37は、Artcard9を動かすローラーのペアを駆動するため適切な速度までギアダウンされた標準的な小型モーターである。速度変動、ガタ、及びその他の振動は、未加工の画像データに影響を与えるので、APC31内の回路は、Artcardデータを確実に読むためこれらの効果の広範な補償を行う。
【0055】
モーター37は、Artcardを取り出すとき、逆向きに駆動される。
【0056】
Artcardモータードライバ61
Artcardモータードライバ61は、モーター37を駆動するために適切なレベルまでAPC31からのデジタルモーター制御信号を増幅する小型回路である。
【0057】
カード挿入センサ49
カード挿入センサ49は、カードリーダー34に挿入されているカードの有無を検出する光学センサである。このセンサ49からの信号の後、APC31はカード読み出しプロセスを開始し、そのプロセスには、Artcardリーダーモーター37の作動が含まれる。
【0058】
カードイジェクトボタン16
カードイジェクトボタン16(図1)は、現在のArtcardを取り出すためユーザによって使用され、他のArtcardを挿入できるようになる。APC31は、ボタンの押下を検出し、カードを取り出すため、Artcardリーダーモーター37を反転させる。
【0059】
カード状態インジケータ66
カード状態インジケータ66は、Artcard読み出しプロセスの状態をユーザへ報せるために設けられる。これは、標準的な2色(赤/緑)LEDでもよい。カードが正しく読み出され、データの完全性が検証されたとき、LEDは連続的に緑色で発光する。カードが不良である場合、LEDは赤色で発光する。
【0060】
カメラが3Vのバッテリではなく1.5Vのバッテリから給電される場合、電源電圧は、緑色LEDの前向き電圧降下よりも小さく、LEDは発光しない。この場合、赤色LEDが使用されるか、又はそのLEDは、より高い電圧を必要とするArtcam内の他の回路に給電する電圧ポンプから給電される。
【0061】
64MビットDRAM33
多種多様な画像処理効果を実行するため、カメラは8Mbyteのメモリ33を利用する。これは、単一の64Mビットメモリチップによって設けることができる。勿論、メモリ技術の変化に伴って、より大容量のDRAM記憶容量サイズで置き換えても構わない。
【0062】
メモリチップへの高速アクセスが要求される。これは、Rambus DRAM(毎秒500メガバイトのバーストアクセス速度)、又はダブルデータレート(DDR)SDRAM又はシンクリンク(SyncLink)DRAMチップを使用することによって達成できる。
【0063】
カメラ認証チップ
カメラ認証チップ54は、異なる情報を記憶している点を除くと、プリントロール認証チップ53と同一のものである。カメラ認証チップ54には、以下の三つの主要な目的がある:
1. 認証コードをプリントロール認証チップと比較するセキュア手段を設けること;
2. カメラの製造番号のような製造情報用の記憶装置を設けること;
3. ユーザ情報の記憶用の小容量の不揮発性メモリを設けること。
【0064】
ディスプレイ
Artcamは、オプションのカラーディスプレイ5及び小型状態ディスプレイ15を含む。最低コストの民生用カメラは、ある種のデジタルカメラ及びビデオカメラで見られるような小型TFT LCD5のようなカラー画像ディスプレイを含む。カラーディスプレイ5は、これらのバージョンのArtcamの主要なコストのかかる要素であり、バックライトを加えたディスプレイ5は主要な電力消費元である。
【0065】
状態ディスプレイ15
状態ディスプレイ15は、小型の受動セグメントに基づくLCDであり、現在のハロゲ
ン化銀式カメラ及びデジタルカメラに設けられているLCDと類似している。その主要な機能は、プリントロール42に残っているプリントの数と、フラッシュ状態及びバッテリ状態のような様々な標準的なカメラ機能に対するアイコンと、を表示することである。
【0066】
カラーディスプレイ5
カラーディスプレイは、完全動画像ディスプレイであり、ビューファインダーとして、印刷される画像の確認として、及びユーザインタフェースディスプレイとして動作する。ディスプレイ5のコストは、その面積にほぼ比例するので、大型ディスプレイ(例えば、4インチ対角)ユニットは、Artcamユニットの高価なバージョンに限定される。例えば、カラービデオカメラの約1インチのビューファインダーTFTのようなより小さいディスプレイは、中程度のArtcamに有効である。
【0067】
ズームレンズ(図示せず)
Artcamはズームレンズを含むことができる。これは、標準的な電子カメラに使用されるズームレンズと同一であり、ポケットカメラのズームレンズに類似している標準的な電子制御ズームレンズでもよい。Artcamユニットの好適なバージョンは、標準的な交換可能な35mmSLRレンズを含む。
【0068】
自動焦点モーター39
自動焦点モーター39はズームレンズの焦点を変更する。モーターは、自動焦点機構を駆動するため適切な速度にギアダウンされた小型モーターである。
【0069】
自動焦点モータードライバ63
自動焦点モータードライバ63は、モーター39を駆動するため適切なレベルまでAPC31からのデジタルモーター制御信号を増幅する小型回路である。
【0070】
ズームモーター38
ズームモーター38は、ズームのフロントレンズを出入りするように動かす。モーターは、ズーム機構を駆動するため適切な速度にギアダウンされた小型モーターである。
【0071】
ズームモータードライバ62
ズームモータードライバ62は、モーターを駆動するため適切なレベルまでAPC31からのデジタルモーター制御信号を増幅する小型回路である。
【0072】
通信
ACP31は、パーソナルコンピュータとの通信用のユニバーサルシリアルバス(USB)インタフェース52を含む。必ずしも全てのArtcamモデルがUSBコネクタを組み込むことを予定されているわけではない。しかし、USB回路52のために必要なシリコン面積は小さいので、インタフェースを標準的なACPに収容することが可能である。
【0073】
オプションのキーボード57
Artcamユニットは、Artcardによって指定されたテキストをカスタマイズするオプションの小型キーボード57を含む。Artcard画像に現れるあらゆるテキストは、複雑なメタリック3次元フォントの形である場合でも編集可能である。小型キーボードは、元のテキストと編集されたテキストを表示するため単一ラインの英数字LCDを含む。このキーボードは標準装備品でもよい。
【0074】
ACP31は、小型キーボートとの間でデータを転送するシリアル通信回路を含む。
【0075】
電源
Artcamユニットは、バッテリ48を使用する。Artcamのオプションに依存して、このバッテリは、3Vのリチウム電池、1.5VのAAアルカリ電池、又はその他のバッテリ装置のいずれでもよい。
【0076】
電源管理ユニット51
電源消費は、Artcamにおける重要な設計制約条件である。標準的なカメラバッテリ(例えば、3Vのリチウムバッテリ)又は標準的なAA若しくはAAAアルカリ電池の何れかが使用可能であることが望ましい。Artcamユニットの電子回路の複雑さの程度は35mm写真カメラよりも著しく高いが、電力消費量が相応に高いとは限らない。Artcamの電源は、全てのユニットが未使用時には電源をオフされるように慎重に管理される。
【0077】
最も重大な電力浪費元は、APC31、エリアイメージセンサ2及び4、プリンタ44の様々なモーター、フラッシュユニット56、並びに、オプションのカラーディスプレイ5である。次に各部品について別々に取り扱う:
1. ACP:0.25μmのCMOSを使用して製造され、1.5Vで動作するならば、ACP電力消費は非常に小さくすることができる。ACPチップの様々な部品へのクロックも非常に小さくすることができる。ACPチップの様々な部品へのクロックは、未使用時にオフにすることができ、スタンバイ電流消費を殆ど取り除く。ACPは、印刷される写真毎に約4秒間だけ完全に使用される;
2. エリアイメージセンサ:電力は、ユーザがボタンに指を置いたときに限りエリアイメージセンサに供給される;
3. プリンタ電力は、実際に印刷しているときに限りプリンタへ供給される。これは、1枚の写真につき約2秒間である。たとえそうであっても、適度に低い電力消費印刷が使用されるべきである;
4. Artcamで必要になるモーターは、全て低電力小型モーターであり、典型的に、1枚の写真について数秒間だけ作動される;
5. フラッシュユニット45は、一部の写真だけに対して使用される。その電力消費は、妥当なバッテリ寿命の3Vのリチウムバッテリによって容易に供給される。
6. オプションのカラーディスプレイ5は、次の二つの理由から主要な電流浪費元である。カラーディスプレイは、カメラの使用中の全ての時間に亘ってオンにする必要があり、液晶ディスプレイが使用された場合には、バックライトが必要になる。カラーディスプレイを組み込むカメラは、許容可能なバッテリ寿命を達成するため、より大型のバッテリを要求する。
【0078】
フラッシュユニット56
フラッシュユニット56は民生用カメラの標準的な小型電子フラッシュである。
【0079】
ACP31の概要
図3は、Artcam中央プロセッサ(ACP)31を詳細に示す図である。Artcam中央プロセッサは、Artcamの処理能力の全てを提供する。ACPは、0.25ミクロンCMOSプロセス用に設計され、約150万個のトランジスタと、約50mm2の面積を有する。ACP31の設計は複雑であるが、設計の手間は、データパスコンパイレーション技術、マクロセル、及びIPコアを使用することによって軽減できる。ACP31は、
RISC型CPUコア72と、
4ウェイVLIWベクトルプロセッサ74と、
ダイレクトRAMbus(ラムバス)インタフェース81と、
CMOSイメージセンサインタフェース83と、
CMOSリニアイメージセンサインタフェース88と、
USBシリアルインタフェース52と、
赤外線キーボードインタフェース55と、
数字LCDインタフェース84と、
カラーTFT LCDインタフェース88と、
プログラム記憶装置70用4Mバイトフラッシュメモリ70と、
を含む。RISC型CPU、ダイレクRAMbusインタフェース81、CMOSセンサインタフェース83、及びUSBシリアルインタフェース52は、ベンダーによって供給されるコアでもよい。ACP31は、電力消費を最小限に抑えるため、外部3V及び内部1.5Vに基づいて200MHzのクロック速度で動作することが意図されている。CPUコアは100MHzで動作すればよい。以下の二つのブロック図、即ち、
単独のACP31の説明図、及び
Artcamの残りのハードウェアに接続されたACP31の上位レベルの図を与える例示的なArtcam、
はACP31の2通りの見方を与える。
【0080】
画像アクセス
前述の通り、DRAMインタフェース81は、ACPチップの他のクライアント部と、ラムバスDRAMとの間を接続する役割を担う。実際上、DRAMインタフェース内の各モジュールはアドレス生成器である。
【0081】
ACPによって操作される画像には三つの論理タイプがある。それらは、
−CCDから撮影された入力像であるCCD画像と、
−Artcam装置によって内部的に利用される画像フォーマットである内部画像フォーマットと、
−Artcamによって印刷される出力画像フォーマットである印刷画像と、
である。
【0082】
これらの画像は、典型的に、色空間、解像度、並びに、カメラ間で変動のあり得る出力及び入力色空間の点で相違する。例えば、低価格カメラのCCD画像は、高価格カメラで使用されるものとは異なる解像度、又は異なる色特性を揺する。しかし、あらゆる内部画像フォーマットは、全てのカメラを通じて色空間の点で同一フォーマットである。
【0083】
その上、3種類の画像タイプは、どちらの方向が「上向き」であるかに関しても異なり得る。カメラの物理的な向きは、人物像であるか、又は風景像であるかについての観念を生じさせ、この観念は処理全体を通じて維持されるべきである。このため、内部画像は常に正しく向きを決められ、印刷動作中にCCDから獲得された画像に対して回転が実行される。
【0084】
CPUコア(CPU)72
ACP31は、Vark画像処理言語インタープリタを動作させ、Artcamの汎用オペレーティングシステムの役割を実行するため32ビットRISC型CPU72を内蔵する。多種多様なCPUコアが適当であり、要求されたコア計算及び制御機能を消費者の期待を満足する十分な速さで実行するために足りる処理能力を備えていればどのようなプロセッサコアでも構わない。適当なコアの例には、LSIロジック社のMIPS R4000、Strong ARMコアが含まれる。異なるArtcamモデルの間で命令セットの継続性を維持する必要はない。Artcardの互換性は、将来のプロセッサの進歩及び変更とは無関係に維持される。なぜならば、Varkインタープリタは、新しい命令セット毎に再コンパイルをするだけで済むからである。したがって、ACP31のアーキテクチャは、自由に進化させることができる。種々の製造者は、CPUコアの使用許諾や移植をすることなく、様々なACP31チップ設計を製造することができる。この装置非依存性によって、PC市場においてインテル社が行っているようなチップベンダーのロックインが避けられる。CPUは100MHzで動作し、単一サイクルタイムは10nsである。このCPUは、VLIWベクトルプロセッサ74が時間的に重大な演算を担うとしても、Varkインタープリタを実行するために十分な高速性が必要である。
【0085】
プログラムキャッシュ72
プログラムコードがオンチップフラッシュメモリ70に保存されるとしても、ウェルパックされたフラッシュメモリ70がCPUによって要求される10nsのサイクルタイムで動作できる可能性は低い。したがって、優れた性能のために小規模のキャッシュが要求される。各々が32バイトの16個のキャッシュラインは、全部で512バイトになり、十分な大きさである。プログラムキャッシュ72は、プログラムキャッシュ72という名前の章に規定されている。
【0086】
データキャッシュ76
小規模のデータキャッシュ76が優れた性能のために要求される。この要求は、概して、ラムバスDRAMを使用しているために生じる。ラムバスDRAMは、高速データをバーストで提供することができるが、単一バイトのアクセスには不十分である。CPUは、CPUデータキャッシュ76のサイズをフレキシブルに操作することを可能にさせるメモリキャッシングシステムにアクセスする。最小限で16個のキャッシュライン(512バイト)が優れた性能のために推奨される。
【0087】
CPUメモリモデル
ArtcamのCPUメモリモデルは、32MBのエリアにより構成される。Artcamの基本モデルでは、CPUメモリモデルは、8MBの物理的RDRAMオフチップにより構成され、最大で16MBのオフチップメモリが設けられる。ACP31にはプログラム記憶用に4MBのフラッシュメモリ70が存在し、最終的に、4MBのアドレス空間がACP31の様々なレジスタ及びコントロールに割り当てられる。したがって、Artcam用のメモリマップは以下の通りである。
【0088】
【表2】
Figure 2004536736
アドレスをデコードする簡単な方法は、アドレスビット23−24を使用することである。即ち、
ビット24がクリアされている場合、アドレスは下位側16MBのレンジに含まれるので、DRAM及びデータキャッシュ76から充たされる。殆どの場合に、DRAMは8MBに過ぎないが、より上位のメモリモデルArtcamを考慮に入れるため16MBが割り当てられる。
ビット24がセットされ、ビット23がクリアされている場合、アドレスは、フラッシュ
メモリ70の4Mバイトレンジを表現し、プログラムキャッシュ72によって充たされる。
ビット24=1及びビット23=1である場合、アドレスは、CPUメモリデコーダ68によって、低速バス経由によるAC内の要求されたコンポーネントへのアクセスに変換される。
【0089】
フラッシュメモリ70
ACP31は、Artcamプログラムを記憶する4Mバイトのフラッシュメモリ70を含む。フラッシュメモリ70はマスクROMよりも高い充填率を有し、カメラプログラムコードを試験するためより高いフレキシビリティを許容することが想定される。フラッシュメモリ70の弱点はアクセス時間であり、このアクセス時間はCPUの100MHzの動作速度(10nsのサイクルタイム)に対して十分に高速であるとはいえない。したがって、高速プログラム命令キャッシュ77が、CPUと低速のフラッシュメモリ70との間のインタフェースとして作用する。
【0090】
プログラムキャッシュ72
優れたCPU性能のために小型キャッシュが要求される。この要求は、プログラムコードを記憶するフラッシュメモリ70が低速であることに起因する。各々が32バイトの16個のキャッシュラインは、全部で512バイトになり、十分な大きさである。プログラムキャッシュ72は読み出し専用キャッシュである。CPUプログラムによって使用されるデータは、CPUメモリデコーダ68を通過し、アドレスがDRAM内にある場合、汎用データキャッシュ76を通る。分離によって、CPUをVLIWベクトルプロセッサ74とは独立して動作させることができる。所定のプロセスに対するデータ要求量が少ない場合、結果的に、そのプロセスは完全にキャッシュによって動作し得る。
【0091】
最後に、プログラムキャッシュ72は、CPUによって純粋にプログラム命令としてではなく、データとして読み出すことが可能である。これにより、テーブル、即ち、VLIWのためのマイクロコード等をフラッシュメモリ70からロードすることが可能になる。ビット24がセットされ、ビット23がクリアされているアドレスは、プログラムキャッシュ72から充足される。
【0092】
CPUメモリデコーダ68
CPUメモリデコーダ68は、CPUデータアクセスに沿う簡単なデコーダである。デコーダは、データアドレスを、内部低速バスによる内部ACPレジスタアクセスに変換し、これにより、ACPレジスタのメモリマップドI/Oを可能にさせる。CPUメモリデコーダ68は、ビット24がセットされ、ビット23がクリアされているアドレスだけを解釈する。CPUメモリデコーダ68内ではキャッシングは行われない。
【0093】
DRAMインタフェース81
Artcamによって使用されるDRAMは、1.6GB/秒で動作する単一チャンネルの64Mビット(8Mバイト)RAMbus(ラムバス)RDRAMである。RDRAMアクセスは、単一チャンネル(16ビットデータパス)コントローラによる。RDRAMは、低電力動作用の数種の有効な動作モードを有する。ラムバス仕様書には、95%以上の効率を達成可能であるようなランダムな32バイト転送のあるシステムが記載されているが、これは、32バイトのうちの一部しか使用されない場合には成り立たない。同一のデバイスに対する2回の読み出しに続いて2回の書き込みを行うことによって86%以上の効率が得られる。基礎的なレイテンシーは、書き込みから読み出しへ変化するバスのターンアラウンドのために必要であり、遅延書き込み機構が存在するので、効率を更に改善することが可能である。書き込みに関して、書き込みマスクは、特定のバイトのサブセットへの書き込みを可能にさせる。これらの書き込みマスクは、内部キャッシュの「ダーティビット」によってセットされるであろう。ラムバスダイレクトRDRAMは、要するに、1GB/秒を超えるスループットを簡単に達成可能であり、32バイトの転送知識を十分に利用する知的アルゴリズムと組み合わされ(殆どのプロセスで)書き込み毎に複数回の読み出しを伴い、1.3GB/秒を超える転送レートが期待されるということである。10ns毎に、コアとの間で16バイトを転送することができる。
【0094】
DRAM構成
基本モデル(8MB RDRAM)のArtcam用のDRAM構成を次に示す。
【0095】
【表3】
Figure 2004536736
注:非圧縮形式の印刷画像は4.5MB(1チャンネル当たり1.5MB)を必要とする。他の対象を8MBモデルに収容するため、印刷画像は圧縮されるべきである。クロミナンスチャンネルが4:1に圧縮された場合、各クロミナンスチャンネルは0.375MBしか必要としない。
【0096】
ここで説明されるメモリモデルは、単一の8MBのRDRAMを想定している。Artcamのその他のモデルの中にはより多くのメモリを具備し、印刷画像を圧縮しなくてもよいものがある。その上、メモリ量が増加すると、最終画像の大部分を同時に操作できるようになり、速度が向上する可能性がある。
【0097】
Artcardの取り出し又は挿入は、印刷画像、拡大された写真画像の1チャンネル、及び画像ピラミッドを保持する5.5MBエリアを無効にすることに注意すべきである。この空間は、Artcardデータを復号化するためArtcardインタフェースによって安全に使用される。
【0098】
データキャッシュ76
ACP31は、専用CPU命令キャッシュ77及び汎用データキャッシュ76を含む。データキャッシュ76は、CPU、VLIWベクトルプロセッサ74及びディスプレイコントローラ88からの全てのDRAM要求(データの読み出し及び書き込み)を取り扱う。これらの要求は、メモリ使用量及びアルゴリズム的タイミング必要条件の点で非常に異なる側面を有する。例えば、VLIWプロセスは、リニアメモリ内の画像を処理し、画像内の値毎にテーブルの値をルックアップする。画像の大半をキャッシュする必要な殆ど無いが、実際のメモリアクセスが必要ではないように、ルックアップテーブル全体をキャッシュすることが望ましい。このように必要条件が相違しているため、データキャッシュ76は、キャッシングを知的に定義することが可能である。
【0099】
ラムバスDRAMインタフェース81は、非常に高速のメモリアクセス能力を備えているが(平均スループットは25nsで32バイト)、単一バイトの要求を処理するためには不十分である。実効的なメモリレイテンシーを低下させるため、ACP31は、128個のキャッシュラインを含む。各キャッシュラインは32バイト幅である。このようにして、データキャッシュ76の総容量は4096バイト(4KB)である。128個のキャッシュラインは、16個のプログラム可能なサイズのグループに構成される。16個のグループの各々は、連続したキャッシュラインのセットでなければならない。CPUは、各グループに割り付けるキャッシュラインの個数を決定する役割を担う。各グループ内で、キャッシュラインは、簡単なLRU(最低使用頻度)アルゴリズムに従って詰められる。CPUデータ要求に関して、データキャッシュ76は、アドレスビット24がクリアされたメモリアクセス要求を取り扱う。ビット24がクリアされている場合、アドレスは下位側16MBのレンジに収まるので、DRAM及びデータキャッシュ76から応じることができる。殆どの場合に、DRAMは、8MBしかないが、よりメモリ量の多いモデルのArtcamを考慮に入れて16MBが割り付けられる。ビット24がセットされている場合、アドレスはデータキャッシュ76によって無視される。
【0100】
全てのCPUデータ要求はキャッシュグループ0から応じられる。優れたCPU性能のためには16個の最小のキャッシュラインが推奨されるが、CPUは、(0個以外の)任意の個数のキャッシュラインをキャッシュグループ0に割り当てることができる。残りのキャッシュグループ(1から15)は、現在の必要条件に従って割り付けられる。これは、VLIWベクトルプロセッサ74プログラム又はディスプレイコントローラ88への割付を意味することもある。例えば、常時利用可能であることが要求される256バイトのルックアップテーブルは、8個のキャッシュラインが必要であろう。順次画像を書き出すためには、(生成されたレコードのサイズと、書き込み要求が多数のサイクルに亘って書き込み遅延されているかどうかと、に応じて)2から4個のキャッシュラインだけが必要であろう。各キャッシュラインのバイトには、メモリをDRAMへ書き込む際に書き込みマスクを作成するため使用されるダーティビットが関連付けられる。各キャッシュラインには別のダーティビットが関連付けられ、このダーティビットは、キャッシュラインのバイトの何れかに書き込みがされたかどうか(したがって、DRAMを再使用する前に、キャッシュラインをDRAMへ書き戻さなければならないかどうか)を示す。二つの異なるキャッシュグループがメモリの同じアドレスをアクセスし、同期が外れる可能性があることに注意する必要がある。VLIWプログラムライターは、これが問題にならないことを保証する役割を担う。例えば、あるキャッシュグループには画像を読み出す役割を与え、別のキャッシュグループには変更された画像をメモリに書き戻す役割を与えることは完全に合理的である。画像が順番に読み出し又は書き込みされる場合、キャッシュラインをこのようにして割り付けることは有利である。全部で8本のバス182は、VLIWベクトルプロセッサ74をデータキャッシュ76へ接続する。各バスは、I/Oアドレス生成器に接続される。(1個の処理ユニット178当たりに2個のI/Oアドレス生成器189及び190が存在し、VLIWベクトルプロセッサ74には4個の処理ユニットが存在する。したがって、バスの総数は8本である。) 所与のサイクルにおいて、CPUのキャッシュグループ(グループ0)への単一の32ビット(4バイト)アクセスの他に、残りのキャッシュグループへの16ビット(2バイト)の四つ同時のアクセスが8本のVLIWプロセッサ74のバス上で許容される。データキャッシュ76は要求を公平に処理する役割がある。ある所与のサイクルで、特定のキャッシュグループへのたった一つの要求が処理される。VLIWベクトルプロセッサ74に8個のアドレス生成器189、190が存在する場合、アドレス生成器の各々は個別のキャッシュグループを参照する可能性がある。しかし、2個以上のアドレス生成器189、190が同じキャッシュグループにアクセスする可能性があり、場合によっては、その方が合理的である。CPUは、キャッシュグループに正確なキャッシュラインの個数が割り付けられることを保証し、VLIWベクトルプロセッサ74の様々なアドレス生成器189、190が特定のキャッシュグループを正確に参照することを保証する役割を担う。上述のようにデータキャッシュ76は、ディスプレイコントローラ88及びVLIWベクトルプロセッサ74が同時に動作状態になることを許容する。これらの二つのコンポーネントの動作が決して同時に出現しないと考えられるならば、全部で9個のキャッシュグループがあれば足りる。CPUはキャッシュグループ0を使用し、VLIWベクトルプロセッサ74及びディスプレイコントローラ88は残りの8個のキャッシュグループを共用し、(4ビットではなく)3ビットだけで特定の要求に応じるキャッシュグループを定めることができる。
【0101】
JTAGインタフェース85
標準的なJTAG(ジョイントテスト部会)インタフェースはテスト目的用にACP31に収容される。チップの複雑さのため、BIST(ビルトインセルフテスト)及び機能的ブロック分離等を含む様々なテスト技術が必要である。チップ面積の10%のオーバーヘッドが全チップテスト回路のため想定される。テスト回路は本文書の範囲外の事項である。
【0102】
シリアルインタフェース
USBシリアルポートインタフェース52
これは標準的なUSBシリアルポートであり、内部チップの低速バスに接続されるので、CPUがそれを制御することができる。
【0103】
キーボードインタフェース65
これは標準的な低速シリアルポートであり、内部チップ低速バスに接続されるので、CPUがそれを制御することができる。キーボードインタフェースは、プリントをカスタマイズするための簡単なデータ入力を許容するためオプション的にキーボードへ接続できるように設計される。
【0104】
認証チップシリアルインタフェース64
これらは、二つの標準的な低速シリアルポートであり、内部チップ低速バスに接続されるので、CPUがこれらを制御できる。二つのポートを具備する理由は、別個のラインを使用して、オンカメラ認証チップとプリントロール認証チップの両方に接続するためである。1個のラインしか使用しない場合、模造プリントロールの製造者は、認証コードを生成するのではなく、カメラの認証チップによって生成されたコードを使用するようにカメラを誤動作させるチップを設計することができる。
【0105】
パラレルインタフェース67
パラレルインタフェースはACP31を個別の静的な電気信号に接続する。CPUは、低速バスを介して、メモリマップドI/Oとしてこれらの配線の各々を制御することができる。以下の表は、パラレルインタフェースへの配線の一覧である。
【0106】
【表4】
Figure 2004536736
VLIW入力及び出力FIFO78、79
VLIW入出力FIFOは、プロセスとVLIWベクトルプロセッサ74との間を接続するため使用される8ビット幅のFIFOである。両方のFIFOはVLIWベクトルプロセッサ74によって制御されるが、CPUによってクリアしたり、(例えば、状態について)問い合わせをしたりすることができる。
【0107】
VLIW入力FIFO78
クライアントは、VLIWベクトルプロセッサ74にデータを処理させるため、8ビットデータをVLIW入力FIFO78に書き込む。クライアントには、イメージセンサインタフェース、Artcardインタフェース、及びCPUが含まれる。これらのプロセスの各々は、単にデータをFIFOに書き込み、VLIWベクトルプロセッサ74に重い仕事の全ての実行を任せることによって、処理から解放される。クライアントによるVLIW入力FIFO78の使用を用いる一例は、イメージセンサインタフェース(ISI83)である。イメージセンサインタフェース83は、イメージセンサからデータを取得し、そのデータをFIFOに書き込む。VLIWプロセスは、FIFOからデータを取得し、データを正しい画像データフォーマットへ変換し、それをDRAMへ書き出す。イメージセンサインタフェース83は、その結果として、非常に簡単化される。
【0108】
VLIW出力FIFO79
VLIWベクトルプロセッサ74は、8ビットデータをVLIW出力FIFO79に書き込み、クライアントはVLIW出力FIFOでデータを読み出すことができる。クライアントには、プリントヘッドインタフェース及びCPUが含まれる。これらのクライアントの両方は、単にFIFOから処理済みのデータを読み出し、VLIWベクトルプロセッサ74に重い仕事の全ての実行を任せることにより、処理から解放される。CPUは、データがVLIW出力FIFO79に収容されたときはいつでも中断させることができ、FIFOを絶えずポーリングするのではなく、データが利用可能になったときに限りそのデータを処理できるようになる。クライアントによるVLIW出力FIFO79の使用を用いる一例は、プリントヘッドインタフェース(PHI62)である。VLIWプロセスは、画像を取得し、画像を正しい向きへ回転し、色変換を行い、プリントヘッド必要条件に応じて得られた画像をディザリングする。プリントヘッドインタフェース62は、VLIW出力FIFO79からディザリングされたフォーマット後の8ビットデータを読み出し、その8ビットデータをACP31の外部にあるプリントヘッドに渡すだけでよい。プリントヘッドインタフェース62はその結果として非常に簡単化される。
【0109】
VLIWベクトルプロセッサ74
Artcamの高い処理要求を実現するため、ACP31は、VLIW(超長命令語)ベクトルプロセッサを含む。VLIWプロセッサは、クロスバースイッチ183によって接続され並列に動作する4個の同一処理ユニット(例えば、PU178)の組である。各処理ユニット、例えば、PU178は、各サイクルに、4回の8ビット乗算、8回の8ビット加算、3回の32ビット加算、I/O処理、及び様々な論理演算を実行することができる。処理ユニット、例えば、PU178はマイクロコード化され、各々は、2個のアドレス生成器189、190を具備し、データ処理のため利用可能なサイクルを完全に使用できる。4個の処理ユニット、例えば、PU178は、通常、密接に相互作用するVLIWプロセッサを実現するため同期させられる。200MHzのクロックにより、VLIWベクトルプロセッサ74は、12Gop(毎秒120億回の演算速度)で動作する。命令は、ワーピング、芸術的なブラッシング、複雑な合成照明、色変換、画像フィルタリング、及び合成のような画像処理機能のために調整される。これらは、デスクトップコンピュータよりも2桁加速されている。
【0110】
図3(a)に詳細に示されるように、VLIWベクトルプロセッサ74は、クロスバースイッチ183によって接続された4個の処理ユニット、例えば、PU178であり、各処理ユニット、例えば、PU178は、クロスバースイッチ183へ2入力を供給し、クロスバースイッチ183からの2出力を取得する。2個の共通レジスタは、処理ユニット、例えば、PU178のための制御及び同期機構を形成する。8本のキャッシュバス182は、データキャッシュ76を介してDRAMへの接続を可能にさせ、2本のバスは各処理ユニット、例えば、PU178へ至る(I/Oアドレス生成器毎に1本のバス)。各処理ユニット、例えば、PU178は、(データを処理するための多数のレジスタ及びある種の算術論理を格納する)ALU(算術論理ユニット)188と、ある種のマイクロコードRAM196と、外界(他のALUを含む)への配線と、を具備する。ローカルPU状態機械は、マイクロコードで動き、この手段によって処理ユニット、例えば、PU178が制御される。各処理ユニット、例えば、PU178は、DRAM(データキャッシュ76経由)とALU188(入力FIFO及び出力FIFO経由)の間のデータフローを制御する二つのI/Oアドレス生成器189、190を含む。アドレス生成器は、データ(特に、様々なフォーマットの画像)、並びに、DRAM内のテーブル及びシミュレーティッドFIFOを読み書きすることが可能である。フォーマットはソフトウェア制御の下でカスタマイズ可能であるが、マイクロコード化されない。データキャッシュ76から取得されたデータは、16ビット幅の入力FIFOを介してALU188へ転送される。出力データは、16ビット幅の出力FIFOに書き込まれ、そこからデータキャッシュ76へ書き込まれる。最後に、全ての処理ユニット、例えば、PU178は、単一の8ビット幅VLIW入力FIFO78と、単一の8ビット幅VLIW出力FIFO79を共用する。低速データバス接続によって、CPUは、処理ユニット、例えば、PU178のレジスタを読み書きし、マイクロコードを更新し、VLIWベクトルプロセッサ74の全ての処理ユニット、例えば、PU178によって共用される共通レジスタを読み書きすることが可能になる。次に、図4を参照すると、単独の処理ユニット、例えば、PU178の内部のより詳細が示され、以下では、コンポーネント及び制御信号を詳述する。
【0111】
マイクロコード
各処理ユニット、例えば、PU178は、その特定の処理ユニット、例えば、PU178用のプログラムを保持するマイクロコードRAM196を含む。マイクロコードをROMに収容するのではなく、マイクロコードはRAMに収容され、CPUはマイクロコードをアップロードする役割を担う。チップ上の同じ空間であるため、このトレードオフは、ある一つの機能の最大サイズをRAM196のサイズまで縮小するが、マイクロコードに書き込まれる機能の数は無制限である。マイクロコードを用いて実現された機能は、Varkアクセラレーション、Artcard読み取り、及び印刷を含む。VLIWベクトルプロセッサ74の方式は、ACP31のケースでは、以下の幾つかの利点がある:
ハードウェア設計の複雑さが低減される;
ハードウェアのリスクは複雑さの低減によって低減する;
ハードウェア設計時間は、専用シリコンに組み込まれる全てのVark機能に依存しない;
チップ上の空間が全体的に縮小される(多数のプロセスをマイクロコードとして組み込むことができるため);
ハードウェア設計時間に影響を与えることなく、(マイクロコードによって)Varkに機能を加えることができる。
【0112】
サイズ及び内容
各処理ユニット、例えば、PU178を制御するCPUによってロードされたマイクロコードRAM196は128ワードであり、各ワードは96ビット幅である。処理ユニット、例えば、PU178の様々なユニットを制御するためのマイクロコードサイズの概要は以下の表に掲載されている。
【0113】
【表5】
Figure 2004536736
128個の命令ワードによって、処理ユニット、例えば、PU178毎の全マイクロコードRAM196は、12288ビット、即ち、正確に1.5KBである。VLIWベクトルプロセッサ74は、4個の同一の処理ユニット、例えば、PU178により構成されるので、これは、6144バイト、即ち、正確に6KBと一致する。マイクロコードワード内の一部のビットは、制御ビットとしてそのまま使用され、一方、他のビットはデコードされる。マイクロコードワードのビットの各々の解釈を詳細に記述する種々のユニット説明を参照せよ。
【0114】
処理ユニット、例えば、PU178の間の同期
各処理ユニット、例えば、PU178は、4ビット同期レジスタ197を含む。それは、一体的に動作する処理ユニット、例えば、PU178を決定するため使用されるマスクであり、単一プロセスとして機能する対応した処理ユニット、例えば、PU178の各々に対して1ビットがセットされる。例えば、全ての処理ユニット、例えば、PU178が単一プロセスとして機能する場合、4個の同期レジスタ197の各々は、全て4ビットがセットされるであろう。2個の処理ユニット、例えば、PU178毎に二つの同期プロセスが存在するならば、2個の処理ユニット、例えば、PU178は、(そのPU自体に対応した)同期レジスタ内の2ビットがセットされ、他の2個の処理ユニットは、(そのPU自体に対応した)同期レジスタ内の別の2ビットがセットされる:
同期レジスタ197は、以下の二つの基本的な方式で使用される;
同期した所定のプロセスを停止及び開始する;
プロセス内で実行を一時停止する。
【0115】
停止及び開始プロセス
CPUは、マイクロコードRAM196にロードし、第1の命令の実行アドレス(通常は0)をロードする役割を担う。CPUがマイクロコードを実行し始めるとき、マイクロコードは指定されたアドレスから始まる。
【0116】
マイクロコードが実行されるのは、同期レジスタ197の全てのビットが共通同期レジスタ197にもセットされたときに限られる。したがって、CPUは、全ての処理ユニット、例えば、PU178をセットアップし、次に、共通同期レジスタ197への1回の書き込みでプロセスを開始又は停止する。
【0117】
この同期方式は、複数のプロセスが処理ユニット、例えば、PU178上で非同期的に実行されることを可能にさせ、同時に1個の処理ユニット、例えば、PU178としてではなく、プロセスとして停止及び開始される、
プロセス内の実行の一時停止
所与のサイクルにおいて、処理ユニット、例えば、PU178は、(現在のマイクロコード命令のオペレーションコードに基づいて)FIFOからの読み出し、又はFIFOへの書き込みのために必要である。FIFOが読み出し要求時にエンプティであるか、又は書き込み要求時にフルである場合、FIFO要求は完了し得ない。処理ユニット、例えば、PU178は、したがって、プロセス一時停止制御信号198をアサートする。全ての処理ユニット、例えば、PU178からのプロセス一時停止信号は、全ての処理ユニット、例えば、PU178へフィードバックされる。同期レジスタ197は、4個のプロセス一時停止ビットと論理積演算され、結果が非零であるならば、処理ユニット、例えば、PU178のレジスタのライトイネーブル、又はFIFOストローブはセットされない。したがって、そのタスクを終了できなかった処理ユニット、例えば、PU178と同じプロセスグループを形成する処理ユニット、例えば、PU178の中に、自分のレジスタ又はFIFOがそのサイクル中に更新された処理ユニットは存在しない。この簡単な技術は、所定のプロセスグループを同期状態に保つ。後の各サイクルで、処理ユニット、例えば、PU178の状態機械は、同じアドレスのこのマイクロコード命令を再実行することを試み、成功するまでそのようにし続ける。勿論、共通同期レジスタ197は、必要に応じてプロセス全体を停止させるため、CPUによって書き込むことができる。この同期方式は、任意の処理ユニット、例えば、PU178の組み合わせが一体となって動作することを可能にさせ、各グループは、データを読み書きする準備ができていないことを原因とする一時停止に関しては、協働して動作する処理ユニットだけに影響を与える。
【0118】
制御及び分岐
各サイクル中、処理ユニット、例えば、PU178のALU188内の4個の基本入力及び計算ユニットの各々(読み出し、アダー/ロジック、乗算/補間、及びバレルシフタ)は、そのサイクル中の演算結果が0であるか又は負であるかを示す零フラグ及び負フラグの二つの状態ビットを生成する。各サイクルに、これらの4個の状態ビットのうちの一つが、処理ユニット、例えば、PU178から出力されるマイクロコード命令によって選択される。4個の状態ビット(一つの処理ユニット、例えば、PU178のALU188について1個)が4ビット共通状態レジスタ200に組み合わされる。次のサイクル中に、各処理ユニット、例えば、PU178のマイクロコードプログラムは、共通状態レジスタ200からのビットのうちの1ビットを選択し、状態ビットの値に依存して別のマイクロコードアドレスへ分岐することが可能である。
【0119】
状態ビット
各処理ユニット、例えば、PU178のALU188は、多数の入力及び計算ユニットを含む。各ユニットは、負フラグと零フラグの二つの状態ビットを生成する。これらの状態ビットのうちの一つは、特別なユニットが1ビット3状態の状態ビットバス上の値をアサートするときに、処理ユニット、例えば、PU178から出力される。一つの状態ビットが処理ユニット、例えば、PU178から出力され、次に、共通状態レジスタ200を更新するため、他の処理ユニット、例えば、PU178の状態ビットと組み合わされる。出力状態ビットを決定するマイクロコードは以下の形式をとる。
【0120】
【表6】
Figure 2004536736
ALU188内で、2ビット選択プロセッサブロック値は、4個の1ビットイネーブルビットにデコードされ、異なるイネーブルビットが各プロセッサユニットブロックへ送信される。状態選択ビット(零又は負を選択する)は、状態ビットバスへ出力されるべきビットを決定するため全てのユニットへ渡される。
【0121】
マイクロコード内の分岐
各処理ユニット、例えば、PU178は、実行中の現在のマイクロコードアドレスを保持する7ビットプログラムカウンタ(PC)を含む。普通のプログラム実行はリニアであり、即ち、あるサイクルのアドレスNから次のサイクルのアドレスN+1へ進む。しかし、サイクル毎に、マイクロコードプログラムは、異なる場所へ分岐する能力、又は共通状態レジスタ200からの状態ビットをテストして分岐する能力を備えている。次の実行アドレスを決定するマイクロコードは以下の形式をとる。
【0122】
【表7】
Figure 2004536736
ALU188
図5はALU188を詳細に示す図である。ALU188内部には、多数の専用処理ブロックが存在し、マイクロコードプログラムによって制御される。専用処理ブロックには、
入力FIFOからのデータを受け取る読み出しブロック202と、
出力FIFOを介してデータを送り出す書き込みブロック203と、
加算及び減算と、比較及び論理演算のためのアダー/ロジックブロック204と、
乗算タイプの補間及び乗算/累算のための乗算/補間ブロック205と、
要求に応じてデータをシフトするバレルシフトブロック206と、
外部クロスバースイッチ183からのデータを受け取る入力ブロック207と、
外部クロスバースイッチ183へデータを送り出す出力ブロック208と、
一次記憶装置にデータを保持するレジスタブロック215と、
が含まれる。
【0123】
4個の専用32ビットレジスタは、4個の主要な処理ブロックの結果を保持する:
Mレジスタ209は、乗算/補間ブロックの結果を保持する;
Lレジスタ209は、アダー/ロジックブロックの結果を保持する;
Sレジスタ209は、バレルシフタブロックの結果を保持する;
Rレジスタ209は、読み出しブロック202の結果を保持する。
【0124】
更に、データ転送用の二つの内部クロスバースイッチ213及び214が存在する。多様な処理ブロックは、各ブロックに属するマイクロコード定義と共に後続のセクションで更に展開される。尚、マイクロコードは、内部の様々なユニットへ制御信号を供給するためブロック内でデコードされる。
【0125】
処理ユニット、例えば、PU178間のデータ転送
各処理ユニット、例えば、PU178は、外部クロスバーを介してデータを交換することができる。処理ユニット、例えば、PU178は、二つの入力を取得し、2個の値を外部クロスバーへ出力する。このようにして、処理用の2個のオペランドが単一サイクルで獲得できるが、実際には、次のサイクルまで演算に使用されない。
【0126】
入力207
このブロックは図6に示され、外部クロスバーからのデータを受け取る2個のレジスタIn1及びIn2を含む。レジスタはサイクル毎にロードすることが可能であり、又はそのままの状態を保つことが可能である。8入力から選択するための選択ビットは、外部クロスバースイッチ183へ出力される。マイクロコードは以下の形式をとる。
【0127】
【表8】
Figure 2004536736
出力208
入力は出力208によって補完される。出力ブロックは図7に詳細に示されている。出力は、Out1及びOut2の2個のレジスタを含み、両方のレジスタは、他の処理ユニット、例えば、PU178によって使用するためサイクル毎に外部クロスバーへ出力される。また、書き込みユニットは、Out1とOut2のうちの一方を、ALU188に取り付けられた出力FIFOの一つに書き込むことが可能である。最終的に、両方のレジスタは、第1クロスバー213への入力として利用可能であり、第1クロスバー213は、そのレジスタ値がALU188内の他のユニットへの入力として利用できるようにする。各サイクルで、2個のレジスタのうち何れか一方は、マイクロコード選択に応じて更新することができる。指定されたレジスタにロードされたデータは、(第1クロスバー213から選択された)D0−D3のうちの一つ、(第2クロスバー214から選択された)M、L、S及びRのうちの一つ、2個のプログラマブル定数のうちの一つ、又は固定値0若しくは1である。出力用のマイクロコードは以下の形式をとる。
【0128】
【表9】
Figure 2004536736
ALU188内のローカルレジスタ及びデータ転送
前述の通り、ALU188は、以下の4個のブロックの結果を保持するため、4個の専用32ビットレジスタを含む:
Mレジスタ209は乗算/補間ブロックの結果を保持する;
Lレジスタ209はアダー/ロジックブロックの結果を保持する;
Sレジスタ209はバレルシフタブロックの結果を保持する;
Rレジスタ209は読み出しブロック202の結果を保持する。
【0129】
CPUはこれらのレジスタに直接アクセスを行い、他のユニットは、第2クロスバー214経由の入力としてそれらを選択することができる。場合によっては、演算を1サイクル以上遅延させる必要がある。レジスタブロックは、4個の32ビットレジスタD0−D3を含み、処理中の一時変数を保持する。各サイクルに、レジスタのうちの一つを更新可能であり、一方、全てのレジスタは、他のユニットが(同様に、In、In2、Out1及びOut2を含む)第1クロスバー213を介して使用するために出力される。CPUはこれらのレジスタへ直接アクセスを行う。指定されたレジスタにロードされたデータは、(第1クロスバー213から選択された)D0−D3のうちの一つ、(第2クロスバー214から選択された)M、L、S及びRのうちの一つ、2個のプログラマブル定数のうちの一つ、又は固定値0若しくは1である。レジスタブロック215は図8に詳細に示されている。レジスタ用のマイクロコードは以下の形式をとる。
【0130】
【表10】
Figure 2004536736
第1クロスバー213
第1クロスバー213は図9に詳細に示されている。第1クロスバー213は、入力In、In2、Out1、Out2、D0−D3から選択するため使用される。7個の出力が第1クロスバー213から発生され、3個が乗算/補間ユニットへ、2個がアダーユニットへ、1個がレジスタユニットへ、1個が出力ユニットへ向けられる。第1クロスバー213用の制御信号は、クロスバー入力を使用する様々なユニットから到来する。第1クロスバー213のため分離された特定のマイクロコードは存在しない。
【0131】
第2クロスバー214
第2クロスバー214は図10に詳細に示されている。第2クロスバー214は、汎用ALU188レジスタM、L、S及びRから選択するため使用される。6個の出力が第1クロスバー213から発生され、2個が乗算/補間ユニットへ、2個がアダーユニットへ、1個がレジスタユニットへ、1個が出力ユニットへ向けられる。第2クロスバー214用の制御信号は、クロスバー入力を使用する様々なユニットから到来する。第2クロスバー214のため分離された特定のマイクロコードは存在しない。
【0132】
処理ユニット、例えば、PU178とDRAM又は外部プロセスとの間のデータ転送
図4を参照すると、処理ユニット、例えば、PU178は、外部クロスバーを介して、直接的に相互にデータを共有する。また、処理ユニットは、外部プロセス並びにDRAMとの間でデータを転送する。各処理ユニット、例えば、PU178は、2個のI/Oアドレス生成器189及び190を含み、DRAMとの間でデータを転送する。処理ユニット、例えば、PU178は、I/Oアドレス生成器の出力FIFO、例えば、186を介してDRAMへデータを送出し、又はI/Oアドレス生成器の入力FIFO187を介して、DRAMからデータを受け取る。これらのFIFOは、処理ユニット、例えば、PU178に局在する。また、外部プロセスとの間で、全てのALUによって共有される共通VLIW入力FIFO78及び共通VLIW出力FIFO79の形でデータを送受する機構が存在する。VLIW入力及び出力FIFOは、8ビット幅しかなく、印刷、Artcard読み出し、CPU等へのデータ転送に使用される。ローカル入力及び出力FIFOは16ビット幅である。
【0133】
読み出し
図5の読み出しプロセスブロック202は、ALU188のRレジスタ209を更新する役割を担い、Rレジスタは、VLIWマイクロコード化プロセスへの外部入力データを表現する。サイクル毎に、読み出しユニットは、共通VLIW入力FIFO78(8ビット)、又は2個のローカル入力FIFO(16ビット)のうちの何れかから読み出すことが可能である。32ビット値が生成され、そのデータの全部又は一部がRレジスタ209へ転送される。プロセスは図11に示されている。読み出し用のマイクロコードは以下の表に掲載されている。一部のビットパターンの解釈はデコーディングを補助するため意図的に選択される。
【0134】
【表11】
Figure 2004536736
書き込み
書き込みプロセスブロックは、各サイクルに、共通VLIW出力FIFO79、又は2個のローカル出力FIFOの一方の何れかへの書き込みを行うことができる。所与のサイクル中に書き込まれるFIFOは1個しかないので、1個の16ビット値が全てのFIFOへ出力され、下位8ビットがVLIW出力FIFO79へ達することに注意する必要がある。マイクロコードは、どのFIFOがその値を受け付けるかを制御する。データ選択のプロセスは図12により詳細に示されている。ソース値Out1及びOut2は出力ブロックから到来する。それらは、単に2個のレジスタである。書き込み用のマイクロコードは以下の形式をとる。
【0135】
【表12】
Figure 2004536736
計算ブロック
各ALU188は、2個の計算プロセスブロック、即ち、アダー/ロジックプロセスブロック204と、乗算/補間プロセスブロック205と、を含む。更に、これらの計算ブロックを補助するためバレルシフタブロックが設けられる。レジスタブロック215からのレジスタは、パイプライン演算中に一時記憶装置として使用することも可能である。
【0136】
バレルシフタ
バレルシフタプロセスブロック206は図13に詳細に示され、その入力は、アダー/ロジック、若しくは、乗算/補間プロセスブロックの出力、又はそれらのブロック(ALUレジスタL及びM)の前のサイクルの結果から得られる。選択された32ビットは、(必要に応じて符号を拡張して)何れかの向きに任意のビット数だけバレルシフトされ、ALU188のSレジスタ209へ出力される。バレルシフトプロセスブロック用のマイクロコードは以下の表に記載されている。一部のビットパターンの解釈はデコーディングを助けるため意図的に選択されることに注意する必要がある。
【0137】
【表13】
Figure 2004536736
アダー/ロジック204
アダー/ロジックプロセスブロックは、図14により詳細に示され、簡単な32ビット加算/減算、比較、及び論理演算用に設計されている。単一サイクルで、1回の加算、比較、又は論理演算を実行することができ、その結果はALU188のLレジスタ209に保存される。二つの主オペランドA及びBが存在し、これらは、二つのクロスバーの何れか、又は4個の定数レジスタから選択される。一方のクロスバーの選択によって、前のサイクルの算術演算の結果を使用することが可能になり、もう一方は、このALU又は他のALU188によって前に計算されたオペランドへアクセスする。CPUは、4個の定数(K1−K4)にアクセスする唯一のユニットである。例えば、(A+B)×4のような演算が要求される場合、アダーからの直接出力は、バレルシフタへの入力として使用可能であり、先にLレジスタ209にラッチしなくても2個分だけ左シフトさせることができる。アダーからの出力は、乗算−累算演算のため乗算ユニットで利用することができる。アダー/ロジックプロセスブロック用のマイクロコードは以下の表に掲載されている。一部のビットパターンの解釈はデコーディングを補助するため意図的に選択される。
アダー/ロジックユニット用のマイクロコードビット解釈
【0138】
【表14】
Figure 2004536736
乗算/補間205
乗算/補間プロセスブロックは、図15に詳細に示され、4個の8×8形補間ユニットのセットであり、4個の8×8形補間ユニットは、1サイクル毎に4回の別個の8×8形補間を実行する能力を備えているか、又は1回の16×16形乗算を実行するため組み合わせることができる。これは、単一サイクル中に最大で4回のリニア補間、1回のバイリニア補間、又はトライリニア補間の半分を実行可能であることを示す。補間又は乗算の結果はALU188のMレジスタ209に保存される。二つの主オペランドA及びBは、ALU188の汎用レジスタの何れかから選択されるか、又は乗算/補間プロセスブロックの内部にある4個のプログラマブル定数から選択される。各補間ブロックは、簡単な8ビット補間器[結果=A+(B−A)f]として機能するか、又は簡単な8×8形乗算[結果=A*B]として機能する。演算が補間である場合、A及びBは、4個の8ビット数値A0からA3(A0は下位バイトである)、及びB0からB3として取り扱われる。AGEN、BGEN及びFGENは、実行される演算に適合するように補間ユニットへの入力を並べる役目を果たす。例えば、バイリニア補間を実行するため、4個の値の各々は、異なる係数によって乗算され、その結果が加算され、一方、16×16形の乗算は、係数を0にする必要がある。アダー/ロジックプロセスブロック用のマイクロコードは、以下の表に掲載されている。尚、一部のビットパターンの解釈はデコーディングを補助するため意図的に選択される。
【0139】
【表15】
Figure 2004536736
同じ4ビットがV及びfの選択のために使用されるが、Vの直前の4個の選択肢は、一般的にf値として意味をなさない。1又は0の係数を用いる補間は無意味であり、前の乗算若しくは現在の結果がfに対する有意な値である可能性は少ない。
【0140】
I/Oアドレス生成器189と190
I/Oアドレス生成器は図16に詳細に示されている。VLIWプロセスはDRAMに直接アクセスしない。アクセスは2個のI/Oアドレス生成器189、190を介して行われ、各々のI/Oアドレス生成器は固有の入力FIFO及び出力FIFOを含む。処理ユニット、例えば、PU178は、2個のローカル入力FIFOの一方からデータを読み出し、2個のローカル出力FIFOの一方にデータを書き込む。各I/Oアドレス生成器は、DRAMからデータを読み出し、そのデータを入力FIFOに入れる責任があり、その入力FIFOにおいて、データは処理ユニット、例えば、PU178によって読み出すことができる。各I/Oアドレス生成器は、その出力FIFOから(処理ユニット、たとえば、PU178によって入れられた)データを取り出し、それをDRAMに書き込む役割を担う。I/Oアドレス生成器は、データキャッシュ76を介してDRAMのデータを取得及び記憶するためのアドレスを生成し制御を行う状態機械である。それは、CPUソフトウェア制御の下でカスタマイズ可能であるが、マイクロコード化できない。アドレス生成器は、
多種多様な方式で画像の画素の最初から最後までを繰り返すため(読み、書き、もしくはその両方)使用される画像イタレータと、
画像の画素、テーブルのデータをランダムにアクセスし、DRAMのFIFOをシミュレートするため使用されるテーブルI/Oと、
の二つに大別されるアドレスを生成する。
【0141】
I/Oアドレス生成器189と190の各々は、データキャッシュ76への固有のバス配線を具備し、1個の処理ユニット、例えば、PU178について2本のバス配線があり、VLIWベクトルプロセッサ74全体で合計8本のバスがある。データキャッシュ76は、サイクル毎に、4個の処理ユニット、例えば、PU178からの最大で8個の要求のうちの4個のために作用することが可能である。入力FIFO及び出力FIFOは、深さが8エントリーで、幅が16ビットのFIFOである。多種多様のアドレス生成(画像イタレータ及びテーブルI/O)が後のセクションで説明される。
【0142】
レジスタ
I/Oアドレス生成器は、アドレス生成を制御するため使用されるレジスタの組を有する。また、アドレッシングモードは、データがどのようにフォーマットされ、ローカル入力FIFOへ送られるか、並びに、データが出力FIFOからどのように解釈されるかを決定する。CPUは、低速バスを介して、I/Oアドレス生成器のレジスタにアクセス可能である。第1のレジスタの組は、I/O生成器のためのハウスキーピングパラメータを定義する。
【0143】
【表16】
Figure 2004536736
状態レジスタは以下の値をとる。
【0144】
【表17】
Figure 2004536736
キャッシュ処理
複数のレジスタがキャッシュ処理機構を制御するため使用され、入力、出力等に使用するキャッシュグループを指定する。キャッシュグループのより詳細な情報についてはデータキャッシュ76に関するセクションを参照のこと。
【0145】
【表18】
Figure 2004536736
画像イタレータ=順次自動画素アクセス
ソフトウェア及びハードウェアアルゴリズム用の主な画像絵素アクセス方法は画像イタレータによる。画像イタレータは、画像チャンネル内の画素のキャッシュのアドレッシング及びアクセスの全てを実行し、それらのクライアントのため画素を読み出し、書き込み、或いは、読み書きする。読み出しイタレータは、そのクライアントのための特定の順序で画素を読み出し、書き込みイタレータはそのクライアントのための特定の順序で画素を書き込む。イタレータのクライアントは、ローカル入力FIFOから画素を読み出し、又はローカル出力FIFOを介して画素を書き込む。
【0146】
読み出し画像イタレータは、特定の順序で画像の中を読み、画素データをローカル入力FIFOに入れる。クライアントが入力FIFOから画素を読み出す毎に、読み出しイタレータは(データキャッシュ76経由で)画像からの次の画素をFIFOに入れる。
【0147】
書き込み画像イタレータは、画像全体を書き出すため、特定の順序で画素を書き込む。クライアントは画素を出力バッファに書き込み、この出力バッファが次に書き込み画像イタレータによって読み出され、データキャッシュ76を介してDRAMに書き込まれる。
【0148】
典型的に、VLIWプロセッサは、読み出しイタレータに結合された入力と、対応した書き込みイタレータに結合された出力と、を有する。処理ユニット、例えば、PU178のマイクロプログラムの観点では、FIFOは、DRAMへの効率的なインタフェースである。記憶を(データの論理的な順序ではなく)実際に実行する方法は無関係である。FIFOは、長さが実質的に制限されていると考えられるが、実際上、FIFOは長さが有限であり、特に、複数のメモリアクセスが競合する場合、データをソートし、取り出す遅延が生じる。画像処理アルゴリズムの最も一般的なアドレッシング必要条件に対処する様々な画像イタレータが存在する。殆どの場合に、各読み出しイタレータには、対応した書き込みイタレータが存在する。種々のイタレータが以下の表に掲載されている。
【0149】
【表19】
Figure 2004536736
4ビットアドレスモードレジスタがイタレータタイプを決定するため使用される。
【0150】
【表20】
Figure 2004536736
アクセス専用レジスタは以下のように使用される。
【0151】
【表21】
Figure 2004536736
フラグレジスタ(アクセス専用1)は、データの読み出し及び書き込みに影響を与える要因を決定する多数のフラグを含む。フラグレジスタは以下のように構成される。
【0152】
【表22】
Figure 2004536736
読み出しイネーブル及び書き込みイネーブルに関する注意:
読み出しイネーブルがセットされたとき、I/Oアドレス生成器は読み出しイタレータとして動作するので、特定の順序で画像を読み出し、画素を入力FIFOに収容する。
【0153】
書き込みイネーブルがセットされたとき、I/Oアドレス生成器は書き込みイタレータとして動作するので、特定の順序で画像を書き込み、出力FIFOから画素を取り出す。
【0154】
読み出しイネーブルと書き込みイネーブルの両方がセットされたとき、I/Oアドレス生成器は、読み出しイタレータ及び書き込みイタレータとして動作し、入力FIFO内の画素を読み出し、出力FIFOからの画素を書き込む。画素は読み出された後に限り書き込まれる。即ち、書き込みイタレータは読み出しイタレータよりも先に進むことはない。このモードが使用されるときには、VLIWマイクロコードによる入力処理と出力処理の間のバランスを確保するように注意すべきである。尚、CasheGroup1とキャッシュグループ2に異なる値をロードすることによって、別々のキャッシュグループを読み出しと書き込みに関して指定することも可能である。
【0155】
PassX 及び PassY に関する注意:
PassXとPassYの両方がセットされた場合、Y縦座標はX縦座標よりも前に入力FIFOに収容される。
【0156】
PassX及びPassYは、読み出しイネーブルビットがクリアされたときに限りセットされる。縦座標をアドレス生成器に渡すのではなく、縦座標は入力FIFOに直接収容される。縦座標はFIFOから取り出されるときに前進する。
【0157】
書き込みイネーブルビットがセットされた場合、VLIWプログラムは、入力FIFOからの縦座標の読み出しを、出力FIFOへの書き込みと確実にバランスさせる必要がある。なぜならば、書き込みは、縦座標までしか発生しないからである(読み出しイネーブル及び書き込みイネーブルに関する上記の注意を参照せよ。)
ループに関する注意:
ループビットがセットされた場合、読み出しは、一旦[最終画素、最終行]に達すると、[開始画素、開始行]で再開する。これは、データを繰り返し読み出す必要があるコンボリューションカーネルやディザセルマトリックスのような構造体を処理する場合に理想的である。
【0158】
読み出しイネーブル及び書き込みイネーブルがセットされた状態のループ処理は、単一ラインの履歴を維持する環境で役に立ち得るが、書き込みの前に読み出しが行われる場合に限り有効である。(長さに制約のある形式で書き込みが読み出しの前に行われる)FIFOの効果がある場合、画像イタレータではなく、適切なテーブルI/Oアドレッシングモードが使用される。
【0159】
書き込みイネーブルだけがセットされたループ処理は、直前のN画素の書き込み窓を作成する。これは、窓からデータを読み出す非同期的プロセスを用いて使用される。Artcard読み出しアルゴリズムは、このモードを利用する。
【0160】
順次読み出し及び書き込みイタレータ
図17は、画素データフォーマットの説明図である。最も簡単な画像イタレータは、順次読み出しイタレータ、及び対応した順次書き込みイタレータである。順次読み出しイタレータは、チャンネルからの画素を、同時に1行ずつ、上から下に示し、同じ行内では、画素は左から右へ示される。パディングバイトはクライアントに示されない。これは、画像からの各画素にある種のプロセスを実行する必要があるが、処理される画素の順序を問題にしないか、又はデータが特にこの順序であることを要求するアルゴリズムにとって最も有益な点である。順次読み出しイタレータを補完するのは、順次書き込みイタレータである。クライアントは出力FIFOに画素を書き込む。順次書き込みイタレータは、適切なキャッシュ処理及び適切なパディングバイトを使用して、有効画像を書き出す。各順次イタレータは、2本のキャッシュラインへのアクセスを必要とする。読み出し時に、32画素が1本のキャッシュラインから示されるが、他のキャッシュラインはメモリからロードされ得る。書き込み時、32画素は1本のキャッシュラインに書き込まれるが、他の画素はメモリに書き込まれる。画像の各画素に独立に演算を実行するプロセスは、典型的に、画素を得るために順次読み出しイタレータを使用し、新しい画素値を目的画像内の対応した場所に書き込むため順次書き込みイタレータを使用するであろう。このような処理は図18に示されている。
【0161】
殆どの場合に、原画像及び目的画像は異なり、2個のI/Oアドレス生成器189と190によって表現される。しかし、原画像と目的画像を一致させることも有効である。なぜならば、ある種の入力画像は1回しか読み出されないからである。その場合、同じイタレータを入力と出力の両方に使用することが可能であり、読み出しイネーブルレジスタ及び書き込みイネーブルレジスタの両方が適切にセットされる。最大効率の場合、読み出し用と書き込み用の2個の異なるキャッシュグループを使用することが必要である。データがVLIWプロセスによって作成され、順次書き込みイタレータによって書き込まれるべき場合、PassXフラグ及びPassYフラグは座標を生成するため使用され、その座標は、次に、入力FIFOへ伝えられる。VLIWプロセスは、これらの座標を使用し、出力データを適切に作成することができる。
【0162】
ボックス読み出しイタレータ
ボックス読み出しイタレータは、汎用フィルタ及びコンボルブのような演算を実行するため最も便利な順序で画素を提示するため使用される。このイタレータは、順次に読み出された画素の周りの正方形のボックス内の画素値を提示する。このボックスは、X及びYの方向の幅が1、3、5又は7画素になるように制限される(Xボックスサイズ及びYボックスサイズは同じ値であるか、一方の次元の値が1であり、他方の次元の値が3、5又は7である)。この処理は図19に示されている。
【0163】
ボックスオフセット:この専用レジスタは、どの入力画素がボックスの中心として使用されるかに関してサブサンプリングを決定するため使用される。通常値は1であり、これは、各画素がボックスの中心として使用されることを意味する。”2”という値は、画像ピラミッドを構築する場合のように画像を4:1に縮小する際に便利である。上記の図からの画素アドレスを使用すると、ボックスは、画素0、2、8及び10の順に中心が置かれる。ボックス読み出しイタレータは、最大で14(2×7)本のキャッシュラインにアクセスする必要がある。画素が7本のラインの中の1組から提示される間に、他のキャッシュラインはメモリからロードすることが可能である。
【0164】
ボックス書き込みイタレータ
対応するボックス書き込みイタレータは存在しない。なぜならば、画素の複製は入力時だけに要求されるからである。入力用のボックス読み出しイタレータを使用するプロセスは、殆ど確実に、同期しているので出力用の順次書き込みイタレータを使用するであろう。その良い例はコンボルバである。コンボルバでは、N個の入力画素が1個の出力画素を計算するため読み出される。そのプロセスフローは、図20に示されているようなフローである。ボックス読み出しイタレータを使用するとき、原画像及び目的画像は同じメモリを使ってはならない。なぜならば、後続の画像のラインが(新たに計算されたものではなく)元の値を必要とするからである。
【0165】
垂直ストリップ読み出し及び書き込みイタレータ
ある種の例では、画像を出力画素の順序で書き込む必要があるが、出力画素に対する入力画素のコヒーレンスの方向がわからない。その一例は回転である。画像が90度回転され、出力画像を水平方向に処理する場合、キャッシュコヒーレンスの完全に失われる。これに対して、出力画像を処理する同時に1本のキャッシュラインの幅の画素に基づいて出力画像を処理し、(同じライン上の次のキャッシュラインに相当する画素へ進むのではなく)次のラインへ進む場合、入力画像の画素に対するキャッシュコヒーレンスが得られる。入力画素に(色コヒーレンスのような)既知の「ブロック」コヒーレンスが存在する場合も同様であり、この場合、読み出しが処理順序を支配し、同期させられるべき書き込みは、同じ画素順序に従わなければならない。入力として提示された画素の順序(垂直ストリップ読み出し)、又は出力に予想される順序(垂直ストリップ書き込み)は同一である。順序は、ライン0の画素0から画素31、次に、ライン1の画素9から画素31、以下、画像の全てのラインに対して同様であり、次に、ライン0の画素32から63というように続く。最後の垂直ストリップでは、正確に32画素が存在しないかもしれない。この場合、画像の実際の画素だけが入力として、提示されるか、又は予定される。この処理は図21に示されている。
【0166】
垂直ストリップ書き込みイタレータだけを必要とするプロセスは、典型的に、出力画素座標が与えられた場合に入力画素座標をマッピングする方法を備えている。そのプロセスは、このマッピングに従って入力画像の画素にアクセスし、コヒーレンスは、入力画像用の「ランダムアクセス」リーダー上に十分なキャッシュラインを設けることによって決定される。図22のプロセス概要に示されるように、座標は、典型的に、垂直ストリップ書き込みイタレータのPassXフラグ及びPassYフラグをセットすることによって生成される。
【0167】
書き込みイタレータを順次読み出しイタレータ又はボックス読み出しイタレータとペアにすることは重要ではないが、垂直ストリップ書き込みイタレータは、入力座標と出力座標の間に重要なマッピングが存在するとき、性能に著しい改良を加える。
【0168】
垂直ストリップ読み取りイタレータと垂直ストリップ書き込みイタレータをペアにすることは重要である。この場合、入力画像と出力画像が同じであるならば、垂直ストリップ読み取りイタレータと垂直ストリップ書き込みイタレータを一つのALU188に割り当てることが可能である。座標が必要であるならば、更なるイタレータをセットされたPassXフラグ及びPassYフラグと共に使用しなければならない。垂直ストリップ読み取り/書き込みイタレータは、入力FIFOに画素を提示し、出力FIFOからの出力画素を受け取る。適切なパディングバイトが書き込み時に挿入される。入力及び出力の各々は、優れた性能のために少なくとも2本のキャッシュラインを必要とする。
【0169】
テーブルI/Oアドレッシングモード
(画像のような)テーブル内の値を調べることはしばしば必要になる。テーブルI/Oアドレッシングモードは、この機能を提供し、クライアントがインデックスを出力FIFOに入れることを要求する。I/Oアドレス生成器は、インデックスを保有し、適切にデータを調べ、VLIWクライアントによる後の処理のため、調べた値を入力FIFOに返す。
【0170】
1次元、2次元及び3次元のテーブルがサポートされ、特定のモードは補間を対象としている。VLIWのクライアント側の複雑さを軽減するため、インデックス値は、固定小数点の数値として取り扱われ、アクセス専用レジスタは、固定小数点を定め、インデックスの整数部として取り扱われるべきビットを定める。データフォーマットは、画素オフセットレジスタが無視される点で、汎用画像特徴の制限された形式であり、データは行内で連続していると仮定され、データ要素毎に、8ビット又は16ビット(1バイト又は2バイト)だけが許容される。4ビットのアドレスモードレジスタはI/Oタイプを決定するため使用される。
【0171】
【表23】
Figure 2004536736
アクセス専用レジスタは次の通りである。
【0172】
【表24】
Figure 2004536736
FractX、FractY及びFractZは、インデックスに基づいてアドレスを生成し、有意ビット及び整数/小数コンポーネントに関するインデックスのフォーマットを解釈するため使用される。種々のパラメータは、索引付けされたテーブルの次元数によって必要に応じて定められる。1次元テーブルは、FractXだけが必要であり、2次元テーブルは、FractX及びFractYを必要とする。各Fract値は、対応したインデックスの小数ビットの個数により構成される。例えば、Xインデックスは、5:3のフォーマットである。これは、整数が5ビットで、小数が3ビットであることを示す。したがって、FractXは3にセットされる。簡単な1次元ルックアップは、8:0のフォーマットであり、即ち、小数コンポーネントが全く無い。FractXは0になる。零オフセットは、3次元ルックアップの場合に限り必要になり、2種類の解釈を採用する。これは3次元テーブルルックアップのセクションに詳述されている。フラグレジスタ(アクセス専用1)は、データの読み取り(あるケースでは、書き込み)に影響を与える要因を決定するため使用される多数のフラグを含む。フラグレジスタは以下のように構成される。
【0173】
【表25】
Figure 2004536736
1次元直接ルックアップとDRAMのFIFOを除くと、全てのテーブルI/Oモードは、読み出しだけをサポートし、書き込みをサポートしていない。したがって、上記の二つのモードを除く全てのI/Oモードでは、読み出しイネーブルビットはセットされ、書き込みイネーブルビットはクリアされる。1次元直接ルックアップは、
読み出しイネーブルビットがセットされ、書き込みイネーブルビットがクリアされている読み出し専用と、
読み出しイネーブルビットがクリアされ、書き込みイネーブルビットがクリアされている書き込み専用と、
読み出しイネーブルビットと書き込みイネーブルビットの両方がセットされているリード・モディファイ・ライトと、
の3モードをサポートする。
【0174】
異なるモードは、以下の1次元ルックアップのセクションに記載されている。DRAM FIFOモードは、
読み出しイネーブルビットと書き込みイネーブルビットの両方がセットされているライト・リード・モード
という一つのモードだけをサポートする。
【0175】
このモードは、以下のDRAM FIFOのセクションに記載されている。DataSizeフラグは、テーブルの各データ要素のサイズが8ビットであるか、16ビットであるかを決定する。2種類のデータサイズだけがサポートされる。32ビットの要素は、プロセスの必要条件に依存して、以下の2種類の方法の何れかで作成することができる:
二つの16ビットテーブルから同時に読み出し、その結果を合成する。これは、タイミングが問題となるときに都合が良いが、二つのI/Oアドレス生成器189と190を無駄に使用する点で欠点があり、各32ビット要素はCPUによって32ビットのエンティティとして読むことができない;
16ビットテーブから2回に亘って読み出し、その結果を合成する。これは、一つのルックアップだけが使用されるので都合が良いが、異なるインデックスを生成し、ルックアップへ伝えなければならない。
【0176】
1次元構造
直接ルックアップ
直接ルックアップは、1次元ルックアップテーブルへの簡単なインデキシングである。クライアントは、フラグレジスタに適切なビットをセットすることにより、三つのアクセスモード、即ち、
読み出し専用
書き込み専用
リード・モディファイ・ライト
の間で選択可能である。
【0177】
読み出し専用
クライアントは、固定小数点インデックスXを出力FIFOに送り、テーブル[Int(X)]の8又は16ビット値が入力FIFOに返される。インデックスXの小数コンポーネントは完全に無視される。インデックスが範囲外である場合、エッジ繰り返しフラグは、エッジ画素が返されるか、一定画素が返されるかを決定する。アドレス生成は、次のように簡単である:
データサイズが8ビットを示す場合、Xは右へバレルシフトされたFractXのビットであり、結果はテーブルのベースアドレスImageStartに加算される;
データサイズが16ビットを示す場合、Xは右へバレルシフトされたFractXのビットであり、左へ1ビットシフトされた(ビット0が0になる)結果は、テーブルのベースアドレスImageStartに加算される。
【0178】
結果として得られたアドレスにおける8又は16ビットデータ値は入力FIFOに入れられる。アドレス生成には1サイクルを要し、要求されたデータをキャッシュから出力FIFOへ転送するためにも(キャッシュヒットを仮定したとき)1サイクルを要する。例えば、各エントリーが16ビットであり、インデックスが12ビットの8:4の固定小数点フォーマットである256エントリーのテーブルの値を引く場合を想定すると、FractXは4であり、データサイズは1である。インデックスがルックアップへ渡されたとき、4ビットだけ右へシフトし、その結果を1ビットだけ左へシフトし、ImageStartに加算する。
【0179】
書き込み専用
クライアントは、固定小数点インデックスXを出力FIFOへ渡し、その後、テーブルの指定された場所へ書き込まれるべき8又は16ビット値を渡す。完全な転送には最低でも2サイクル、即ち、アドレス生成のための1サイクルと、FIFOからDRAMへのデータ転送のための1サイクルを要する。VLIWプロセスがインデックスをFIFOに収容してから書き込まれるべき値をFIFOに収容するまでの間に任意の数のサイクル数を設けることができる。アドレス生成は、読み出し専用モードと同様に行われるが、データがそのアドレスから読み出されるのではなく、出力FIFOからのデータがそのアドレスに書き込まれる。アドレスがテーブルの範囲外である場合、そのデータはFIFOから削除され、DRAMには書き込まれない。
【0180】
リード・モディファイ・ライト
クライアントは、固定小数点インデックスXを出力FIFOに送り、テーブル[Int(X)]の8又は16ビット値が入力FIFOへ返される。出力FIFOに収容された次の値は、テーブル[Int(X)]に書き込まれ、前に返された値を置き換える。汎用処理ループは、ある場所から値を読み出し、値を変更し、その値を書き戻すプロセスである。全体的な時間は、
インデックスからアドレスを生成するサイクルと、
テーブルからの値を返却するサイクルと、
ある種の方法で値を変更するサイクルと、
変更した値をテーブルへ書き戻すサイクルと、
の4サイクルである。
【0181】
クライアントが「Xからの読み出し」又は「Xへの書き込み」を表すフラグを提示する特定の読み出し/書き込みモードは存在しない。クライアントは、元の値を書き込むことにより「Xからの読み出し」のシミュレーションを行い、返された値をただ無視することによって「Xへの書き込み」のシミュレーションを行うことができる。しかし、このようなモードの使用が促進されることはない。なぜならば、各動作は、最低でも3サイクル(モディファイは必要ではない)を使用し、特定の読み出し及び書き込みモードによって行われるような1回のアクセスではなく2回のデータアクセスを使用するからである。
【0182】
補間テーブル
これは、所定の固定小数点インデックスXに対して、1個の値ではなく2個の値が返される点を除くと、読み出しモードにおける直接ルックアップと同じである。返される値は、テーブル[Int(X)]とテーブル[Int(X)+1]である。いずれかのインデックスが範囲外である場合、エッジ繰り返しフラグは、エッジ画素が返されるか、一定画素が返されるかを決定する。アドレス生成は、8ビットデータであるか16ビットデータであるかに応じて、2番目のアドレスが単に(1番目のアドレス+1)又は(1番目のアドレス+2)である点を除くと、直接ルックアップと同じである。要求されたデータを出力FIFOへ転送するためには2サイクルを要するが(キャッシュヒットを想定)、1回の16ビットフェッチによって2個の8ビット値がキャッシュからアドレス生成器へ実際に返される。
【0183】
DRAM FIFO
読み出し/書き込み1次元テーブルの特殊なケースは、DRAM FIFOである。DRAM及び付随したキャッシュを使用して所定の長さのFIFOをシミュレーションすることがしばしば必要である。DRAMのFIFOによって、クライアントは、テーブルに明示的に索引付けをせずに、あたかもFIFOの一方の端であるかのようにして出力FIFOへ書き込み、同じ論理的FIFOのもう一方の端であるかのようにして入力FIFOから読み出す。2個のカウンタがシミュレーティッドFIFOの入力位置と出力位置を追跡し、必要に応じてDRAMへキャッシュする。クライアントは、フラグレジスタの読み出しイネーブルビットと書き込みイネーブルビットの両方を見る必要がある。
【0184】
DRAM FIFOの用法の一例は、ある値のシングルライン履歴を保持することである。初期履歴は処理が始まる前に書き込まれる。一般的なプロセスがラインを完了するとき、前のラインの値がFIFOから獲得され、このラインの値はFIFOに入れられる(このラインは、次のラインを処理するときには前のラインになる)。入力と出力が平均的に相互に一致する限り、出力FIFOは常に一杯である。その結果として、この種のFIFOの場合、アクセス遅延が無く効率的である(但し、FIFO全長が非常に短い場合、例えば、3又は4バイトの場合を除くが、その場合にはFIFOの目的を損なうであろう)。
【0185】
2次元テーブル
直接ルックアップ
2次元直接ルックアップはサポートされていない。2次元ルックアップの全てのケースはバイリニア補間のためアクセスされることが予定されているので、特別なバイリニアルックアップが実現された。
【0186】
バイリニアルックアップ
この種のルックアップは、2次元テーブルからのデータのバイリニア補間のために必要である。固定小数点X座標及びY座標が与えられた場合(Y、Xの順に出力FIFOに入れられた場合)、4個の値がルックアップ後に返される。それらの値は(順番に):
Table[Int(X), Int(Y)]
Table[Int(X)+1, Int(Y)]
Table[Int(X), Int(Y)+1]
Table[Int(X)+1, Int(Y)+1]
である。
【0187】
返される値の順序は、最良のキャッシュコヒーレンスを与える。データが8ビットである場合、2個の値が2サイクルの間のサイクル毎に返され、下位バイトは第1のデータ要素である。データが16ビットである場合、1サイクル毎に1エントリーずつで、4個の値が4サイクルに返される。アドレス生成には2サイクルを要する。第1サイクルでは、FractYビットだけ右へバレルシフトされたインデックス(Y)がRowOffsetによって乗算され、その結果がImageStartに加えられる。第2サイクルは、XインデックスをFractXビットだけ右へシフトし、(8ビットデータの場合)その結果、又は(16ビットデータの場合)その結果を1ビットだけ左へシフトしたものの何れかが第1サイクルからの結果に加算される。これにより、アドレスAdrは、Table[Int(X), Int(Y)]のアドレスである:
Adr = ImageStart
+ ShiftRight(Y, FractY)*RowOffset
+ ShiftRight(X, FractX)
Adrのコピーは後続のエントリーをフェッチするためAdrOldに保持される:
データが8ビットであるならば、タイミングは、アドレス生成の2サイクルであり、その後、データが返却される2サイクルが続く(1サイクル毎に2個のテーブルエントリー);
データが16ビットであるならば、タイミングはアドレス生成の2サイクルであり、その後、データが返却される4サイクルが続く(1サイクル毎に1エントリー)。
【0188】
以下の二つの表は、8ビットデータサイズ及び16ビットデータサイズ用のアドレス計算方法を示している。
【0189】
【表26】
Figure 2004536736
【0190】
【表27】
Figure 2004536736
両方のケースにおいて、アドレス生成の第1サイクルは、XインデックスのFIFOへの挿入と重なってもよく、実効タイミングは、アドレス生成のための1サイクル、及び返却データの4サイクルと同程度に低い。インデックスの生成がその結果よりも2ステップ進んでいる場合、実効アドレス生成時間は無く、データは単に適切なレート(1セット毎に2サイクル又は4サイクル)で生成される。
【0191】
3次元ルックアップ
直接ルックアップ
2次元ルックアップの全てのケースはトライリニア補間のためアクセスされることが予想されるので、二つの特別なトライリニアルックアップが実現される。1番目は単純なルックアップテーブルであり、2番目は画像ピラミッドからのトライリニア補間用である。
【0192】
トライリニアルックアップ
このタイプのルックアップは、色変換テーブルのような3次元データテーブルに有効である。標準的な画像パラメータは、データの単一のXY平面を定義し、即ち、各平面は、ImageHight個の行により構成され、各行は、RowOffset個のバイトを含む。殆どの環境において、連続した平面を想定すると、一つのXY平面は、ImageHight×RowOffsetバイトの連なりである。このオフセットを仮定又は計算するのではなく、CPUによるソフトウェアは、そのオフセットを12ビットZOffsetレジスタの形で提供しなければならない。この形式のルックアップの場合、Z、Y、Xの順の3個の固定小数点インデックスが与えらると、ルックアップテーブルから8個の値:
Table[Int(X), Int(Y), Int(Z)]
Table[Int(X)+1, Int(Y), Int(Z)]
Table[Int(X), Int(Y)+1, Int(Z)]
Table[Int(X)+1, Int(Y)+1, Int(Z)]
Table[Int(X), Int(Y), Int(Z)+1]
Table[Int(X)+1, Int(Y), Int(Z)+1]
Table[Int(X), Int(Y)+1, Int(Z)+1]
Table[Int(X)+1, Int(Y)+1, Int(Z)+1]
が順番に返される。
【0193】
返される値の順序は、最良のキャッシュコヒーレンスを与える。データが8ビットである場合、2個の値が4サイクルの間のサイクル毎に返され、下位バイトは第1のデータ要素である。データが16ビットである場合、1サイクル毎に1エントリーずつで、4個の値が8サイクルに返される。アドレス生成には3サイクルを要する。第1サイクルでは、FractZビットだけ右へバレルシフトされたインデックス(Z)が12ビットのZOffsetによって乗算され、ImageStartに加えられる。第2サイクルでは、FractYビットだけ右へバレルシフトされたインデックス(Y)がRowOffsetによって乗算され、その結果が前のサイクルの結果に加算される。第2サイクルは、XインデックスをFractXビットだけ右へシフトし、(8ビットデータの場合)その結果、又は(16ビットデータの場合)その結果を1ビットだけ左へシフトしたものの何れかが第2サイクルからの結果に加算される。これにより、アドレスAdrは、Table[Int(X), Int(Y), Int(Z)]のアドレスである:
Adr = ImageStart
+ (ShiftRight(Z, FractZ)*ZOffset)
+ (ShiftRight(Y, FractY)*RowOffset)
+ ShiftRight(X, FractX)
Adrのコピーは後続のエントリーをフェッチするためAdrOldに保持される:
データが8ビットであるならば、タイミングは、アドレス生成の2サイクルであり、その後、データが返却される2サイクルが続く(1サイクル毎に2個のテーブルエントリー);
データが16ビットであるならば、タイミングはアドレス生成の2サイクルであり、その後、データが返却される4サイクルが続く(1サイクル毎に1エントリー)。
【0194】
以下の二つの表は8ビットデータサイズ及び16ビットデータサイズ用のアドレス計算方法を示している。
【0195】
【表28】
Figure 2004536736
【0196】
【表29】
Figure 2004536736
両方のケースにおいて、アドレス生成のサイクルは、XインデックスのFIFOへの挿入と重なってもよく、単一の1回限りのルックアップの実効タイミングは、アドレス生成のための1サイクル、及び返却データの4サイクルと同程度に低い。インデックスの生成がその結果よりも2ステップ進んでいる場合、実効アドレス生成時間は無く、データは単に適切なレート(1セット毎に4サイクル又は8サイクル)で生成される。
【0197】
画像ピラミッドルックアップ
ブラッシング、タイリング及びワーピングの間に、画像の特定エリアの平均カラーを計
算することが必要である。所与のエリア毎に値を計算するのではなく、これらの機能は画像ピラミッドを利用する。画像ピラミッドの説明及び構造は、この文書のDRAMインタフェース81の章の内部画像フォーマットに関するセクションに詳述される。このセクションは、順序付きの3個の固定小数点インデックス:レベル(Z)、Y、及びXに関して、ピラミッド内の所与の画素をアドレッシングする方法に関連する。画像ピラミッドルックアップは8ビットのデータエントリーを想定するので、DataSizeフラグは完全に無視される。Z、Y、及びXの指定後、以下の8画素:
[Int(X), Int(Y)]のレベルInt(Z)の画素
[Int(X)+1, Int(Y)]のレベルInt(Z)の画素
[Int(X), Int(Y)+1]のレベルInt(Z)の画素
[Int(X)+1, Int(Y)+1]のレベルInt(Z)の画素
[Int(X), Int(Y)]のレベルInt(Z)+1の画素
[Int(X)+1, Int(Y)]のレベルInt(Z)+1の画素
[Int(X), Int(Y)+1]のレベルInt(Z)+1の画素
[Int(X)+1, Int(Y)+1]のレベルInt(Z)+1の画素
が入力FIFOを介して返される。
【0198】
8個の画素は4×16ビットのエントリーとして返却され、XエントリーとX+1エントリーはハイ/ローに合成される。例えば、拡大縮小された(X,Y)座標が(10.4,12.7)であるならば、最初に返される4個の画素は、(10,12)、(11,12)、(10,13)及び(11,13)であろう。座標が有効レンジ外であるとき、クライアントは、エッジ画素繰り返し及び定数画素レジスタ(下位8ビットだけが使用される)によって、エッジ画素繰り返し、又は定数カラー値の返却を選択することができる。画像ビラミッドが構築されたとき、レベル0の座標からレベルZの座標までの簡単なマッピングが存在する。この方法は、単に、X又はY座標をZビットだけ右へシフトさせる。これは、座標の整数部を獲得するため既にシフトされたビット数(即ち、X座標に対するFractXビットの右シフト及びY座標に対するFractYの右シフト)に加えて行う必要がある。画像ピラミッドの所与のレベルに対するImageStart及びRowOffsetを見つけるため、24ビットのZOffsetレジスタがレベル情報テーブルへのポインタとして使用される。このテーブルは、レコードの配列であり、各レコードは、レベル数によって順序付けられた所与のピラミッドのレベルを表現する。各レコードは、ImageStartからそのピラミッドのレベルまでの16ビットのオフセットZOffset(オフセットの下位6ビットのような64バイトの整列したアドレスは存在しない)と、そのレベルのための12ビットのZRowOffsetと、により構成される。テーブルの要素0は、ZOffsetが0であり、単にフルサイズ画像を指示するとき、ZRowOffsetが汎用レジスタRowOffsetと一致する。テーブルの要素NにおけるZoffset値は、画像ピラミッドのレベルNの実効ImageStartを得るため、ImageStartに加算されるであろう。テーブルの要素NのRowOffset値は、レベルNに対するRowOffset値を格納する。CPU上で動かされるソフトウェアは、このアドレッシングモードを使用する前にテーブルを適切にセットアップしなければならない。実際のアドレス生成の概要は、以下で1サイクル毎に説明される。
【0199】
【表30】
Figure 2004536736
上述のアドレス生成は、単一のバレルシフタ、2個のアダー、及び24ビットを生じる単一の16×16乗算/加算ユニットを使用して実現できる。一部のサイクルには2回のシフトが含まれるが、それらは、シフト値が同じであるか(即ち、バレルシフタの出力が2回使用されるか)、又はシフトが1ビットであるかのどちらかであり、ハードワイヤード可能である。次の内部レジスタ:ZAdr, Adr, ZInt, YInt, XInt, ZRowOffset, ZImageStartが必要である。_Int形のレジスタは最大で8ビットだけが必要であるが、他のレジスタは最大24ビットになり得る。このアクセス方法は、画像ピラミッドから読み出すだけであり、画像ピラミッドへ書き込まないので、キャッシュグループ2(CacheGroup2)が(Zadrを用いて)画像ピラミッドアドレステーブルをルックアップするため使用される。CacheGroup1は、(Adrを用いて)画像ピラミッド自体をルックアップするため使用される。アドレステーブルは、(原画像サイズに応じて)約22エントリーがあり、各エントリーは4バイトである。したがって、3又は4本のキャッシュラインをキャッシュグループ2に割り付けるべきであり、できるだけ多数のキャッシュラインをCasheGroup1に割り付けるべきである。データのセットを返すためのタイミングは8サイクルであり、サイクル8とサイクル0は動作が重なり合うと考えられ、即ち、次の要求のサイクル0はサイクル8の間に生じる。これが許される理由は、サイクル0がメモリにアクセスせず、サイクル8が特定の演算を含まないからである。
【0200】
VLIWベクトルプロセッサ74を用いる座標の生成
書き込みイタレータにリンクされた一部の関数は、処理パイプラインの一部で処理されている現在画素のX及び/又はY座標を必要とする。特定の処理は、処理されている各行又は列の最後に行われる必要がある。殆どの場合に、PassX及びPassYフラグは全ての座標を完全に生成するために十分である。しかし、特別な必要条件が存在する場合、以下の関数を使用することができる。この計算は、単一サイクル生成のため多数のALUに展開することが可能であり、或いは、多数サイクル生成のため単一のALU188内で行ってもよい。
【0201】
シーケンシャル[X,Y]生成
プロセスが順次読み出しイタレータに従って順次に画素を処理するとき(又は、画素を生成し、順次書き込みイタレータへその画素を書き出すとき)、以下のプロセスは、図23に示されるように、PassXフラグ/PassYフラグの代わりに、X、Y座標を生成するため使用可能である。
【0202】
座標生成器は、X座標に関して画像幅ImageWidthまでカウントアップし、ImageWidth個の画素毎に1回ずつY座標をインクリメントする。実際のプロセスは図24に示され、以下の定数がソフトウェアによってセットされる。
【0203】
【表31】
Figure 2004536736
以下のレジスタは一時変数を保持するため使用される。
【0204】
【表32】
Figure 2004536736
必要条件は以下のように要約される。
【0205】
【表33】
Figure 2004536736
垂直ストリップ[X,Y]生成
プロセスが、画素を垂直ストリップ書き込みイタレータへ書くために画素を処理し、ある種の理由からPassXフラグ/PassYフラグを使用できないとき、図25に示されるようなプロセスがX、Y座標を生成するため使用できる。この座標生成器は、X座標に関して画像幅ImageWidthまでカウントアップし、ImageWidth個の画素毎に1回ずつY座標をインクリメントするだけである。実際のプロセスは図26に示され、以下の定数がソフトウェアによってセットされる。
【0206】
【表34】
Figure 2004536736
以下のレジスタは一時変数を保持するため使用される。
【0207】
【表35】
Figure 2004536736
必要条件は以下のように要約される。
【0208】
【表36】
Figure 2004536736
垂直ストリップ毎に1回ずつ出現する計算(2回の加算、そのうち一つはMIN演算と関連付けられている)は、一般的なタイミング統計量に含まれない。なぜならば、それらは、画素タイミング毎の実際の一部ではないからである。しかし、それらは、特定の関数用のマイクロコードのプログラミングに考慮しなければならない。
【0209】
イメージセンサインタフェース(ISI83)
イメージセンサインタフェース(ISI83)は、CMOSイメージセンサからデータを取得し、データをDRAMに蓄積するため利用できるようにする。イメージセンサは、3:2のアスペクト比をもち、典型的な解像度は750×500サンプルであり、375K(1画素当たり8ビット)を生ずる。2×2画素ブロックの各々は、図27に示されるような構造を有する。ISI83は、画像を読み出すため、フレーム同期パルス及びPixelClockパルスを含む制御情報をイメージセンサへ送信する状態機械である。画素は、イメージセンサから読み出され、VLIW入力FIFO78に入れられる。VLIWは、次に、画素を処理及び/又は蓄積することが可能である。これは図28に示されている。ISI83は、検出された写真画像をDRAMに蓄積するVLIWプログラムと組み合わせて使用される。処理は次の2ステップで行われる:
小規模VLIWプログラムはFIFOから画素を読み出し、順次書き込みイタレータを介して画素をDRAMへ書き込む;
DRAM内の写真画像は、写真が撮影されたときのカメラの向きに応じて90、180又は270度回転させられる。
【0210】
回転が0度である場合、ステップ1は、写真画像を最終的な写真画像格納場所へ書き出すだけであり、ステップ2は実行されない。回転が0度以外である場合、画像は一時エリア(例えば、プリント画像記憶エリア)に書き込まれ、次に、ステップ2の間に、回転させられ最終的な写真画像格納場所へ入れられる。ステップ1は、非常に簡単なマイクロコードであり、VLIW入力FIFO78からデータを取り出し、そのデータを順次書き込みイタレータに書き込む。ステップ2の回転は、加速Varkアフィン変換関数を用いて実行される。処理は、設計の複雑さを軽減し、画像のために既に必要とされたVarkアフィン変換回転ロジックを再使用するため、2ステップで行われる。これが許容できる理由は、両方のステップが、Artcamのオペレータにとってごくわずかな時間である約0.03秒内に終了するからである。たとえそうであったとしても、読み出しプロセスは、センサ速度による制限を受け、フレーム全体を読み出すために0.02秒を要し、画像を回転するため約0.01秒を要する。
【0211】
検出された写真画像と内部フォーマット画像との間で変換を行うために向きは重要である。なぜならば、R画素、G画素及びB画素の相対位置は向きと共に変化するからである。処理された画像は、印刷のため正しい向きにするために、印刷プロセス中に回転させる必要がある。Artcamの3次元モデルは、2個のイメージセンサを具備し、それらの入力は単一のISI83(マイクロコードは異なるが、ACP31は同一)に多重化される。各センサはフレーム蓄積型であるため、両方の画像を同時に取得し、同時にメモリへ転送することができる。
【0212】
ディスプレイコントローラ88
Artcam上の「撮影」ボタンが半押しされたとき、TFTはイメージセンサからの(簡単なVLIWプロセスによって変換された)現在の像を表示する。撮影ボタンが完全に押下されたとき、撮影像が表示される。ユーザが印刷ボタンを押下し、画像処理が始まると、TFTはターンオフされる。画像が印刷されると、TFTは再度ターンオンされる。ディスプレイコントローラ88は、フラットパネルディスプレイを内蔵するArtcamモデルで使用される。例示的なディスプレイは、240×160画素の解像度を有するTFT型LCDである。ディスプレイコントローラ88の構成は図29に示されている。ディスプレイコントローラ88の状態機械はレジスタを含み、レジスタは同期生成のタイミングを制御し、表示画像はそこから(特定のキャッシュグループによるデータキャッシュ76を介してDRAMに)取得され、レジスタは、TFTをその時点で(TFTイネーブルを用いて)動作可能状態にすべきであるかどうかを制御する。CPUは、低速バスを介してこれらのレジスタへ書き込むことが可能である。240×160画素の画像をRGB方式TFTに表示するためには、1画素当たりに3個のコンポーネントが必要になる。DRAMから取得された画像は3個のDACを介して表示され、DACは、R、G及びBの出力信号の各々に対して1個ずつ設けられる。毎秒30フレーム(毎秒60フィールド)の画像リフレッシュレートで、ディスプレイコントローラ88は、
240×160×3×30=3.5MB/秒
のデータ転送速度を必要とする。
【0213】
このデータ速度は、システムの他の部分よりも低速である。しかし、集約的な画像処理中にVLIWプログラムを減速させるためには十分に高い。TFT動作の一般的な原理はこれを反映している。
【0214】
画像データフォーマット
上述の通り、DRAMインタフェース81は、ACPチップの他のクライアント部と、RAMBUS DRAMとの間を接続する。事実上、DRAMインタフェース内の各モジュールはアドレス生成器である:
ACPによって操作される画像には3種類の論理的タイプがある。それらは、
−CCDから捕捉された入力像であるCCD像
−Artcam装置によって内部的に利用される内部画像フォーマット
−Artcamによって印刷される出力画像フォーマットである印刷画像
である。
【0215】
これらの画像は、典型的に、色空間、解像度、並びに、カメラ間で変動し得る出力及び入力色空間が相違する。例えば、低価格カメラのCCD像は、高価格カメラで使用されるCCDとは、解像度やカラー特性が異なる。しかし、全ての内部画像フォーマットは、あらゆるカメラの中で色空間に関して同一フォーマットである。
【0216】
その上、3種類の画像タイプは、どちらの方向が「上向き」であるかに関して異なる可能性がある。カメラの物理的な向きは、人物像であるか、又は風景像であるかについての観念を生じさせ、この観念は処理全体を通じて維持されるべきである。このため、内部画像は常に正しく向きを決められ、印刷動作中にCCDから獲得された画像に対して回転が実行される。
【0217】
CCD像編成
多種多様なCCDイメージセンサを利用可能であるが、CCD自体は750×500形イメージセンサであり、375000バイト(1画素当たり8ビット)を生成する場合を想定する。2×2画素ブロックの各々は図30に示されるような構造を有する。
【0218】
DRAMに蓄積されたときのCCD像は、メモリ内で隣接している所定のラインと連続した画素を有する。各ラインは、次々に蓄積される。イメージセンサインタフェース83は、CCDからデータを取得し、そのデータを正しい向きでDRAMに格納する役割を担う。このようにして、回転0度のCCD像は、G、R、G、R、G、R...のような第1ラインを含み、B、G、B、G、B、G...のような第2ラインを含む。CCD像が人物像であり、90度回転されているならば、第1ラインはR、G、R、G、R、Gであり、第2ラインはG、B、G、B、G、B、...(以下同様に続く)となるであろう。
【0219】
画素は、インターリーブ形式で蓄積される。なぜならば、全てのカラーコンポーネントが内部画像フォーマットを変換するために必要になるからである。
【0220】
ACP31はCCD画素フォーマットに関して仮説を立てないことに注意する必要がある。なぜならば、イメージング用の実際のCCDは、Artcamの間で経時的に変化し得るからである。ハードウェアによって行われる全ての処理は、ACP31の有用性を拡大するために主要なマイクロコードによって制御される。
【0221】
内部画像編成
内部画像は、典型的に、多数のチャンネルにより構成される。Vark画像には、
Lab
Labα
LabΔ
αΔ

が含まれるが、これらに限定されるものではない。
【0222】
L、a及びbは、Lab色空間のコンポーネントに対応し、αは(コンポジットのため使用される)マットチャンネルであり、Δは(ブラッシング、タイリング、及びイルミネーティングの間に使用される)バンプマップチャンネルである。
【0223】
VLIWプロセッサ74は、画像が平面的な構造で編成されることを要求する。そのため、Lab画像は、三つの別個のメモリブロック、即ち、
Lチャンネル用の1ブロック
aチャンネル用の1ブロック
bチャンネル用の1ブロック
として記憶される。
【0224】
各チャンネルのブロック内において、画素は(幾つかのオプションのパディングバイトと共に)所定の行に対し隣接して記憶され、行は次々に記憶される。
【0225】
図31には、論理的画像100の記憶形式の一例が示されている。論理的画像100は、逐次記憶されたカラーコンポーネントL101、a102及びb103を有する平面形式で記憶される。或いは、論理的画像100は、非圧縮Lコンポーネント101と、圧縮Aコンポーネント105及び圧縮Bコンポーネント106を有する圧縮フォーマットで記憶してもよい。
【0226】
図32を参照すると、ラインn(110)の画素は、ラインn+1(111)の画素の前に一緒に格納されている。画像は単一チャンネル内の隣接したメモリに記憶されている。
【0227】
8MBメモリモデルの場合、全処理の終了後の最終的な印刷画像は、クロミナンスチャンネルにおいて圧縮する必要がある。クロミナンスチャンネルの圧縮は、4:1にすることができ、全体的な圧縮は12:6又は2:1になる。
【0228】
最終的な印刷画像を除くと、Artcamの画像は典型的に圧縮されない。メモリ制約のため、ソフトウェアは、クロミナンスチャンネルの最終的な印刷画像を、これらのチャンネルの各々を2:1でスケーリングすることによって圧縮することを選択してもよい。これが行われた後、画像を印刷するために利用されるプリントVark関数は、圧縮されたものとして指定されたクロミナンスチャンネルを取り扱うように指示されるべきである。プリント関数は、圧縮されたクロミナンスを取り扱う方法を知っている唯一の関数であるが、たとえそうであるとしても、プリント関数は、固定の2:1圧縮比で処理するだけである。
【0229】
画像を圧縮し、次に、最終印刷画像を作成するため圧縮画像に基づいて動作することは可能であるが、これは、解像度の損失を生ずるので推奨できない。その上、画像は、プリントアウト前の最終段階として一回だけ圧縮されるべきである。1回の圧縮は実質的には気付かれないのに対し、多数回の圧縮はかなりの画像劣化を生じさせる。
【0230】
クリップ画像編成
Artcardに記憶されたクリップ画像はACP31によって明示的にはサポートされない。ソフトウェアは、現在のArtcardから画像を取り出し、ACPで認識できる形式にデータを編成する役割を担う。画像がArtcard上に圧縮形式で記憶されているならば、ソフトウェアは、それらを伸長する役割を担う。なぜならば、Artcard画像の伸長をサポートする特定のハードウェアは存在しないからである。
【0231】
画像ピラミッド編成
画像を操作するため利用されるブラッシング、タイリング、及びワーピングプロセス中に、しばしば、画像の特定のエリアの平均カラーを計算することが必要である。所与の各エリアの値を計算するのではなく、これらの関数は、画像ピラミッドを利用する。図33に示されるように、画像ピラミッドは、事実上の多重解像度画素マップである。原画像115は1:1表現である。各次元におけるローパスフィルタリング及び2:1のサブサンプリングによって、元のサイズの1/4の画像116が得られる。このプロセスは、画像全体が単一画素によって表現されるまで続けられる。画像ピラミッドは、原始的な内部フォーマット画像から構築され、原画像が占めていたサイズの1/3(1/4+1/16+1/64+...)を使用する。1500×1000の原画像の場合、対応した画像ピラミッドは約1/2MBである。画像ピラミッドは特定のVark関数によって構築され、他のVark関数のパラメータとして使用される。
【0232】
印刷画像編成
処理画像全体は、それを印刷するため同時に必要になる。しかし、印刷画像出力は、CMYディザ画像を含み、唯一の一時的な画像フォーマットであり、印刷画像機能内で使用される。しかし、内部色空間から印刷色空間への色変換が必要であることに注意しなければならない。その上、色変換は、インク特性の異なるカメラのプリントロールの種類毎に別々に調整することができる。例えば、セピア出力は特定のセピア調色Artcardを使用して実行され、又はセピア色調プリントロールを使用して実行される(したがって、全てのArtcardはセピア色調で機能する)。
【0233】
色空間
上述の通り、Artcamでは、画像タイプの種類に対応して三つの色空間が使用される。
【0234】
ACPは、特定の色空間についての直接的な知識を持たない。その代わりに、ACPは、CCD色空間、内部色空間、及びプリンタ色空間、即ち、
CCD色空間:RGBと、
内部色空間:Labと、
プリンタ色空間:CMYと、
の間の変換のためクライアントの色空間変換テーブルに依存する;
ACP31から色空間変換を取り除くことによって、
−様々なカメラで様々なCCDを使用すること
−同じカメラで(長期間に異なるプリントロールの)異なるインクを使用すること
−ACP設計パスからCCD選定を分離すること
−正確なカラー処理のため内部色空間を巧く定義すること
が可能になる。
【0235】
Artcardインタフェース87
Artcardインタフェース(AI)は、Artcardがリニアイメージセンサの下を通過するときに、リニアイメージセンサからデータを取得し、どのデータをDRAMに記憶するため利用する。イメージセンサは、1走査線当たりに11000個の8ビットサンプルを生成し、Artcardを4800dpiでサンプリングする。AIは、画像を読み出すため、LineSyncパルス及びPixelClockパルスを含む制御情報をリニアセンサへ送る状態機械である。画素は、リニアセンサから読み出され、VLIW入力FIFO78に収容される。VLIWは、次に、画素を処理する、及び/又は、画素を蓄積することが可能である。AIは以下の数個のレジスタを含む。
【0236】
【表37】
Figure 2004536736
尚、CPUは、走査を始動する前にVLIW入力FIFO78をクリアしなければならない。状態レジスタは以下のように解釈されるビットを有する。
【0237】
【表38】
Figure 2004536736
Artcardインタフェース(AI)87
Artcardインタフェース(AI)87は、Ardcardリーダー34からArtcard画像を取得し、それをオリジナルデータ(通常は、Varkスクリプト)に復号化する役割を担う。特に、AI87は、ArtcardスキャナリニアCCD34から信号を受け取り、カードに印刷されたビットパターンを検出し、ビットパターンをオリジナルデータに変換し、読み出しエラーを訂正する。
【0238】
Artcard9が挿入されていない場合、Artcamから印刷された画像は、任意の標準的な画像処理ルーチンによって整理された検出写真画像に過ぎない。Artcard9は、ユーザがプリントアウトする前に写真を修正するための手段である。特定のArtcard9をArtcamに挿入するという簡単なタスクによって、ユーザは、写真画像に対して実行される複雑な画像処理を定義することができる。
【0239】
Artcardが挿入されていない場合、写真画像は、印刷画像を作成するため通常の方法で処理される。1枚のArtcard9がArtcamに挿入されているとき、そのArtcardの効果は、印刷画像を生成するため写真画像に適用される。Artcard9が取り外されたとき(取り出されたとき)、印刷された画像は標準的な方法で処理された写真画像に戻る。ユーザがArtcardを取り出すためボタンを押下したとき、Artcam中央プロセッサ31で実行されるオペレーティングシステムによって維持されるイベントキューにイベントが収容される。イベントが処理されるとき(例えば、現在のプリントが行われた後)、以下の状況が発生する。
【0240】
現在のArtcardが有効であるならば、印刷画像は無効としてマークされ、「プロセス標準」イベントがイベントキューに入れられる。イベントが最終的に処理されたとき、印刷画像を生成するため、写真画像に標準的な画像処理演算が加えられる。
【0241】
モーターはArtcardを取り出すため始動され、時間的に規定された「モーター停止」イベントがイベントキューに追加される。
【0242】
アートカードの挿入
ユーザがArtcard9を挿入したとき、Artcardセンサ49はそれを検知し、ACP72へ報せる。これにより、ソフトウェアは、「Artcard挿入済み」イベントをイベントキューに挿入する。このイベントが処理されると、以下の数個の状況が発生する:
現在のArtcardは無効としてマークされる(「無し」ではない);
印刷画像は無効としてマークされる;
Artcardモーター37はArtcardを取り込むため始動される;
Artcardインタフェース87はArtcardを読み取るように命令される;
Artcardインタフェース87は、ArtcardスキャナリニアCCD34から信号を受け取り、カードに印刷されたビットパターンを検出し、検出されたビットパターンの誤りを訂正し、有効ArtcardデータブロックをDRAMに生成する。
【0243】
ArtcardCCDからのデータ読み出し−一般的考察
図34に示されるように、データカード読み出しプロセスは、画素データがカードから読み出される間に4フェーズを有する。フェーズは以下の通りである:
フェーズ1 Artcard上のデータエリア検出
フェーズ2 CCD画素に基づくArtcardからのビットパターン検出と、バイトとしての書き込み
フェーズ3 バイトパターンのスクランブル解除及びXOR演算
フェーズ4 データ復号化(リード・ソロモン復号)。
【0244】
図35に示されるように、Artcard9は、ナイキストの定理を充足するため、少なくとも印刷された解像度の2倍でサンプリングされなければならない。実際には、これよりも高いレートでサンプリングする方がよい。好ましくは、画素は、各次元で印刷されたドットの解像度の3倍でサンプリングされ(237)、1個のドットを定義するために9個の画素が必要になる。したがって、Artcard9の解像度が1600dpiであり、センサ34の解像度が4800dpiである場合、50mmのCCDイメージセンサを使用することにより、1列毎に9450画素が得られる。即ち、2MBのドットデータ(1ドット当たり9画素の場合)が必要であるならば、2MB*8*9/9450=15978列=約16000列が必要になる。勿論、ドットがサンプリングCCDと厳密に揃えられていないならば、考えられる最悪のケースでは、ドットは16(4×4)画素エリア(231)で検出されるであろう。
【0245】
Artcard9は、熱損傷のため多少歪みが生じ、Artcardリーダーへの挿入のばらつきによって僅かに(最大で、例えば、1度)回転し、リーダーモーター37の速度の変動を原因として真のデータレートに僅かな偏差が現れる可能性がある。これらの変化のために、カードからのデータの列は、対応した画素データの列として読み出せなくなる。図36に示されるように、Artcard9の1度の回転によって、カード上のある列からの画素は、166列に亘る画素として読み出されることになる。
【0246】
最後に、Artcard9は、人間のオペレータにとって合理的な時間内に読み取られなければならない。Artcard上のデータはArtcard表面の大部分を覆っているので、タイミングの問題はArtcardデータ自体に制限され得る。1.5秒の読み出し時間は、Artcard読み出しとして適切である。
【0247】
Artcardは1.5秒内に取り込まれなければならない。したがって、16000列の全ての画素データがCCD34から1.5秒以内に、即ち、1秒当たり10667列で読み出される必要がある。したがって、1列を読み取るために利用できる時間は1/10667秒、即ち、93747ナノ秒である。画素データは画素データを読み出すプロセスとは完全に独立に、同時に1列ずつDRAMへ書き込むことが可能である。
【0248】
1列のデータ(1画素当たり4ビット、したがって、1バイト当たりに2×4ビット画素の読み出しが可能であるので、9450/2バイト)をDRAMへ書き込むための時間は、8個のキャッシュラインを使用することによって短縮される。4ラインが同時に書き込まれるならば、4バンクを独立にかきこむことが可能であり、オーバーラップレイテンシーが短縮される。この場合、4725バイトは11840ns(4725/128*320ns)で書き込み可能である。このようにして、所定の列データをDRAMへ書き込むために要する時間は、利用可能な帯域幅の13%未満しか使用しない。
【0249】
Artcardの復号化
単純にデータサイズを見ると、リニアCCD34によって読み取られるようなArtcard画素データ全体(各ビットが3×3配列として読まれるならば140MB)が維持される場合、プロセスを8MBのメモリ33に適合させることは不可能に思われる。このため、リニアCCDの読み取り、ビットマップの復号化、及びアンビットマッププロセスは、(Artcard9がリニアCCD34の傍を通過する間に)リアルタイムで行われるべきであり、これらのプロセスは、全ての画像データ蓄積が利用可能にされなくても効率的に作用しなければならない。
【0250】
Artcard9が挿入されたとき、古い蓄積された印刷画像と拡大された写真画像は無効になる。新しいArtcard9は、現在の撮影写真画像に基づいて新しい画像を作成する命令を含み得る。古い印刷画像は無効であり、拡大された写真画像及び画像ピラミッドを保持するエリアは無効であり、読み出しプロセス中にスクラッチメモリとして使用できる5MBよりも多くの量が残される。厳密に説明すると、Artcardの新しい生データが書き込まれるべき1MBのエリアは、最終的なリード・ソロモン復号化が行われるときまで、Artcard読み出しプロセス中にスクラッチデータとして使用可能であり、その1MBエリアが再度開放される。ここで説明している読み出しプロセスは、(データの最終的な宛先としての利用を除いて)余分な1MBエリアを利用しない。
【0251】
また、スクランブル解除プロセスは、スクランブル解除を所定の場所で行うことができないので、2組の2MBのメモリエリアを必要とすることに注意すべきである。幸運にも、5MBのスクラッチエリアはこの目的のために十分なスペースを含む。
【0252】
図37を参照すると、Artcardデータを復号化するために必要なステップのフローチャート220が示されている。これらのステップには、Artcard221を読み込むステップと、対応した符号化され、XOR演算され、スクランブル処理されたビットマップデータ223を生成するため、読まれたデータを復号化するステップと、を含む。次に、符号化され、スクランブル処理されたデータ224を生成するため、チェッカーボードXOR演算がそのデータに適用される。このデータは、次に、データ225を生成するためにスクランブル解除227され、その後、このデータは、元の生データ226を生成するため、リード・ソロモン復号化を受ける。或いは、スクランブル解除及びXOR演算プロセスは、一緒に行ってもよく、別々のデータのパスを必要としない。上記のステップの各々は、以下で詳述される。図37を参照して説明したように、Artcardインタフェースは、4フェーズを有し、そのうちの最初の二つは、時間的に重大であり、画素データがCCDから読み出される間に行われなければならない:
フェーズ1 Artcard上のデータエリア検出
フェーズ2 CCD画素に基づくArtcardからのビットパターン検出と、バイトとしての書き込み
フェーズ3 バイトパターンのスクランブル解除及びXOR演算
フェーズ4 データ復号化(リード・ソロモン復号)。
【0253】
これらの4フェーズを次に詳細に説明する。
【0254】
フェーズ1:Artcard9がCCD34を通過するとき、AIは、データエリアの左側でArrcard上の特別ターゲットを確実に検出することにより、データエリアのスタートを検出しなければならない。特別ターゲットが検出され得なかった場合、カードは無効としてマークされる。この検出は、Artcard9がCCD34を通過する間に、リアルタイムで行われる必要がある。
【0255】
必要に応じて、回転不変性が与えられる。この場合、ターゲットは、Artcardの右側で繰り返されるが、上隅ではなく、下右隅に関連している。このようにして、もし、カードが「間違った」やり方で挿入された場合、ターゲットは、結局、正しい向きにされる。後述のフェーズ3は、データの向きを検出し、回転の可能性を考慮するように変更してもよい。
【0256】
フェーズ2:データが一旦決定されると、主たる読み出しプロセスが始まり、CCDからの画素データを「Artcardデータ窓」に入れ、この窓からのビットを検出し、検出されたビットをバイトに組み立て、DRAMにバイトイメージを構築する。これは、ArtcardがCCDを通過する間に全て行われる必要がある。
【0257】
フェーズ3:全ての画素がArtcardデータエリアから読み出されると、Artcardモーター37は停止させられ、バイトイメージはスクランブル解除され、XOR演算される。リアルタイム性能は要求されないが、このプロセスは、人間のオペレータを煩わせない程度に高速でなければならない。このプロセスは、2MBのスクランブル化されたビットイメージを取得し、スクランブル加除され/XOR演算されたビットイメージを別々の2MBイメージに書き込む。
【0258】
フェーズ4:Artcard読み出しプロセスの最終フェーズは、リード・ソロモン復号化プロセスであり、2MBビットイメージが1MBの有効Artcardデータエリアに復号化される。再び、リアルタイム性能は要求されないが、人間のオペレータからみて素早く復号化を行うことが必要である。復号プロセスが有効であるならば、カードは有効としてマークされる。復号に失敗した場合、ビットイメージ内のデータの複製の復号化が試みられ、プロセスは、成功するか、又はビットイメージ内にデータの複製イメージが存在しなくなるまで繰り返される。
【0259】
上記の4フェーズプロセスは、4.5MBのDRAMを必要とする。2MBはフェーズ2の出力のために確保され、0.5MBはフェーズ1及び2の間のスクラッチデータ用に確保される。残りの2MBのスペースは、1列当たりに4725バイトとして440列以上を保持することができる。実際上、読み出されている画素データはフェーズ1のアルゴリズムよりも数列分だけ先行しており、最悪のケースでは、約180列だけフェーズ2よりも遅れるが、440列の限界の範囲内に十分に収まる。
【0260】
次に、各フェーズの実際の動作を詳細に説明する。
【0261】
フェーズ1−Artcard上のデータエリア検出
このフェーズは、Artcard9上のデータエリアの左側を確実に検出することと関係がある。データエリアの正確な検出は、カードの左側に印刷された特殊ターゲットの正確な検出によって実現される。これらのターゲットは、特に、最大1度までの回転がある場合でも簡単に検出できるように設計されている。
【0262】
図38を参照すると、Artcard9の左側の拡大図が示されている。このカードの左側は16個のバンド239に分割され、ターゲット、例えば、241は各バンドの中心に設けられる。バンドは、バンドを分離するための線が引かれていないという点で論理的である。図39には、1個のターゲットが示されている。ターゲット241は、単一の白色ドットを含む印刷された黒色正方形である。この考え方は、最初にできるだけ多数のターゲット241を検出し、次に、少なくとも8個の検出された白色ドットの場所を単一の論理的な直線に繋ぎ合わせるというものである。この考え方が実行できれば、データエリア243のスタートは、この論理的な直線から一定距離になる。実行できない場合、カードは無効であるとして拒否される。
【0263】
図38に示されるように、カード9の高さは3150ドットである。ターゲット(Target0)241は、データエリアの左上隅244から24ドットの一定距離だけ離れた場所に置かれるので、ターゲットは、192ドット(576画素)の等しいサイズの16個の領域のうちの最初の領域239の範囲に巧く収まり、カードの最後の画素領域にターゲットは存在しない。ターゲット241は、簡単に検出できるように十分に大きくしなければならないが、カードが1度回転したときに領域の外側へ出る程に大きくしてはならない。ターゲットの適当なサイズは、白色ドット242を含む31×31ドット(93×93個の検出画素)の黒色正方形241である。
【0264】
最悪の1度の回転がある場合、1列分のシフトは57画素毎に起こる。したがって、590画素のサイズのバンドの場合、カードが最悪の回転状態であるならば、このシンボルの何れかの部分を、上部若しくは下部の12画素、又はバンドのその場所に配置することは不可能であり、或いは、シンボルはCCD読み出し時に間違ったバンドで検出されるであろう。
【0265】
したがって、矩形の黒色部分が57画素の高さ(19ドット)である場合、少なくとも9.5個の黒色画素は、CCDによって同一列で確実に読み出すことができる(画素の半分が1列に収まり、あとの半分が次の列に収まる最悪ケース)。同一列で少なくとも10個の黒色ドットが確実に読み出されるようにするため、高さを20ドットにする必要がある。黒色ドットのスタートのエッジでの誤検出に備えて、ドットの個数を31まで増加させ、ターゲットのローカル座標(15,15)に置かれた白色ドットの両側に15ドットずつを置く。31ドットは91画素であり、列内のシフトは最大でも3画素であり、576画素のバンドの範囲内に容易に収まる。
【0266】
このように、各ターゲットは、31×31ドット(93×93画素)のブロックであり、各ターゲットは、
各列に31個の黒色ドットを含む15列(93画素のうちの45画素幅の列)と、
15個の黒色ドット(45画素)、1個の白色ドット(3画素)、及び更なる15個の黒色ドット(45画素)を含む1列と、
各列が31個の黒色ドットを含む15列(93画素のうちの45画素幅の列)と、
により構成される。
【0267】
ターゲット検出
ターゲットは、ドットを検出するのではなく、同時に1列ずつ画素の列を読み出すことにより検出される。所定のバンド内で、ターゲットの左側を構築する多数の隣接した黒色画素により構成された多数の列を探索することが必要である。次に、更なる黒色列の中心で白色領域を見つけることが期待され、最後に、ターゲットの中心の左側で黒色列が見つけられる。
【0268】
画素の読み出しの際に優れたキャッシュ性能を得るためには8個のキャッシュラインが必要である。論理的な読み出し毎に、4回のサブ読み出しによって4個のキャッシュラインが満たされ、一方、その他の4個のキャッシュラインは使用される。これは、利用可能なDRAM帯域幅の13%までを効率的に使用する。
【0269】
図40に示されるように、ターゲットを検出する検出機構FIFOは、フィルタ245、ランレングスエンコーダ246、及びランダムアクセスのため最上部3要素(S1、S2及びS3)の特別な配線を必要とするFIFO247を含む。
【0270】
入力画素の列は、全てのターゲットが検出されるか、又は指定された数の列が処理されるまで、同時に1列ずつ処理される。列を処理するため、画素はDRAMから読み出され、0又は1を検出するためフィルタ245の中を通され、次に、ランレングス符号化246される。ビット値、及び同じ値の隣接したビットの個数は、FIFO247に入れられる。FIFO249の個々のエントリーは8ビットに収まり、7ビット250はランレングスを保持し、1ビット249は検出されたビットの値を保持する。
【0271】
ランレングスエンコーダ246は、576画素(192ドット)領域内の隣接した画素だけを符号化する。
【0272】
FIFO247の最上部3要素は、ランダムな順序でアクセス252され得る。これらのエントリーの(画素の)ランレングスは、以下の表に従って、ショート、ミディアム、及びロングの3個の値にフィルタ処理される。
【0273】
【表39】
Figure 2004536736
FIFO247の最上部の3個のエントリーに着目すると、3種類の興味深い特殊ケースが存在する。
【0274】
【表40】
Figure 2004536736
好ましくは、領域バンド毎に以下の情報が保持される。
【0275】
【表41】
Figure 2004536736
全部で7バイトが与えられる。合計が8バイトであるならば、アドレス生成が簡単化される。そこで、16個のエントリーは、16*8=128バイトが必要であり、これは、4個のキャッシュラインとぴったり合う。アドレスレンジは、0.5MBのDRAMエリアのスクラッチの内側に入るべきである。なぜならば、他のフェーズが残りの4MBデータエリアを利用するからである。
【0276】
所定の画素列を処理し始めるとき、レジスタ値S2StartPixel254は0にリセットされる。FIFO内のエントリーがS2からS1へ進むとき、それらは、既存のS2StartPixel値に加算され(255)、現在S2で定義されているランの正確な位置を与える。FIFO内の3個の興味深いケースの各々を調べると、S2StartPixelはターゲットの黒色エリアのスタートを判定するため使用可能であり(ケース1及び2)、ターゲットの中心にある白色ドットのスタートを判定するため使用可能である(ケース3)。列を処理するアルゴリズムは以下のように表される。
【0277】
【表42】
Figure 2004536736
列の処理に関与するステップ(プロセスColumn)は以下の通りである。
【0278】
【表43】
Figure 2004536736
3種類のケース(処理ケース)の各々に対する処理は以下の通りである。
【0279】
ケース1
【0280】
【表44】
Figure 2004536736
ケース2
ケース3を識別するためPrevCaseWasCase2フラグ(前のケースはケース2であった)をセットする以外に特別な処理は記録されない(上記の列を処理するステップ3を参照)。
【0281】
ケース3
【0282】
【表45】
Figure 2004536736
所与の列を処理する最後に、現在の列がターゲット検出のための列の最大番号と比較される。許容された列の番号を超えたとき、検出されたターゲットの個数をチェックする必要がある。検出されたものが8個未満であるならば、カードは無効であると見なされる。
【0283】
プロセス ターゲット
ターゲットが検出された後、ターゲットを処理する必要がある。全部のターゲットが利用可能であるか、又は一部のターゲットだけが利用可能である。一部のターゲットは誤って検出された可能性もある。
【0284】
この処理のフェーズは、できるだけ多数のターゲットの中心を通る数学的な直線を決定する。その直線が通過するターゲットの個数が多いほど、より高い信頼度でターゲット位置が検出される。限界は8ターゲットに設定される。直線が少なくとも8個のターゲットを通過する場合、正しい直線である見なされる。
【0285】
力ずくではあるが、簡単なアプローチを採用することは差し支えない。なぜならば、そのように行うための時間があり(以下を参照)、複雑さを低減することによりテストが簡単化されるからである。Target0とTarget1(両方のターゲットが有効であると見なされる場合)の間で直線を決定し、この直線上にあるターゲットの個数を決定する必要がある。次に、Target0とターゲット2の間の直線を決定し、このプロセスを繰り返す。最終的に、Target1と2の間の直線、1と3の間の直線等に同じプロセスを実行し、以下同様に続き、最終的に、Target14とTarget15の間の直線に同じプロセスを実行する。全てのターゲットが検出された場合を想定すると、15+14+13+...=90回の計算(各計算の組は16回のテストを必要とするので、実際には、1440回の計算)を実行し、その直線に沿って最大個数のターゲットが検出された直線を選択する必要がある。ターゲット位置を見つけるためのアルゴリズムは、例えば、以下のようになる:
Figure 2004536736
Figure 2004536736
図34に示されるように、上記アルゴリズムにおて、TargetA261及びTargetBからCurrentLine260を決定するため、ターゲット261、262と、ターゲットAの位置との間でΔrow(264)及びΔcolumn(263)を計算することが必要である。Δrow及びΔcolumnを加算することにより、Target0からTarget1、以下同様、へ移動することが可能になる。検出された(実際に検出されたならば)TargetNの位置は、直線上のTargetNの計算された予測位置と比較することができ、許容範囲内に収まるならば、TargetNは直線上にあることが判定される。
【0286】
Δrow及びΔcolumnは、
Δrow = (rowTargetA - rowTargetB)/(B - A)
Δcolumn = (columnTargetA- columnTargetB)/(B-A)
により計算される。次に、Target0の位置を、
row = rowTargetA - (A * Δrow)
column = columnTargetA - (A * Δcolumn)
により計算する。
【0287】
また、(row, column)を実際のrowTarget0及びcolumnTarget0と比較する。ある予測ターゲットから次のターゲット(例えば、Target0からTarget1)へ移動するためには、Δrow及びΔcolumnをそれぞれrow及びcolumnに加算すればよい。各ターゲットが直線上にあるかどうかをチェックするため、Target0の予測位置を計算し、次に、各ターゲットの座標に対して1回の加算及び1回の比較を実行することが必要である。
【0288】
16個全てのターゲットと最大で90本の直線との比較の終了後、得られる結果は有効ターゲットを通る最良直線である。その直線が少なくとも8個のターゲットを通過するならば(即ち、MaxFound >= 8)、直線を形成するために十分なターゲットが検出されたことが認められるので、カードを処理することができる。最良直線の通過するターゲットが8個未満であるならば、カードは無効であると見なされる。
【0289】
結果として生じるアルゴリズムは、Δrow及びΔcolumnを計算するための180回の除算と、Target0の位置を計算するための180回の乗算/加算と、2880回の加算/比較と、を要する。この処理を実行するための時間は、36列の画素データを読み出すために要する時間、即ち、3374892nsである。加算は除算よりも所要時間が短いという事実までを考慮しない場合、3240回の数学的演算を3374892ns内に実行しなければならない。これは、1演算当たりに約1040ns、即ち、104サイクルに相当する。したがって、CPUは、ターゲットの全ての処理を無事に実行することが可能であり、設計の複雑さは低減される。
【0290】
データエッジ境界及びクロックマークに基づく重心の更新
ステップ0:データエリアの位置検出
Target0(図38の241)からデータエリアの左上境界244までの行及び列に関する距離は所定の固定距離であり、更に、垂直クロックマーク276までには1ドットの列がある。したがって、前の段階で見つかったTargetA、Δrow及びΔcolumn(Δrow及びΔcolumnはターゲット間の距離を表す)は、上述のようにTarget0の重心又は予測位置を計算するため使用される。
【0291】
Target0からデータエリアまでの固定画素オフセットはターゲット間の距離(ターゲット間は192ドット、Target0とデータエリア243の間は24ドット)と関連付けられるので、単に、Δrow/8をTarget0の重心の列座標に加算すればよい(ドットのアスペクト比は1:1)。最上部座標は、
(columnDotColumnTop= columnTarget0 + (Δrow/8)
(rowDorColumnTop= rowTarget0 + (Δcolumn/8)
として定義される。
【0292】
次のΔrow及びΔcolumnは、ターゲット間のドット数によってそれらを除算することにより、(ターゲット間ではなく)単一列内のドット間の画素数を与えるために更新される:
Δrow = Δrow/192
Δcolumn = Δcolumn/192
更に、currentColumnレジスタ(フェーズ2を参照)には−1をセットすることにより、ステップ2の後、フェーズ2が開始したとき、currentColumnレジスタは−1から0へインクリメントする。
【0293】
ステップ1:初期重心デルタ(Δ)及びビット履歴の書き出し
これは、フェーズ2のために必要なセットアップ情報を書き込むだけである。
【0294】
これは、各行のすべてのΔrow及びΔcolumnのエントリーと、ビット履歴に0を書き込むことによって実現できる。ビット履歴は実際には予測ビット履歴である。なぜならば、クロックマーク列276の左側には境界列277があり、その前には、白色エリアが存在することがわかっているからである。したがって、ビット履歴は、011、010、011、010等である。
【0295】
ステップ2:読み出された実際の画素に基づく重心の更新
ビット履歴は、予測クロックマーク及びデータ境界に従ってステップ1でセットアップされる。各ドット行の実際の重心は、予測データを実際の画素値と比較することによって、より正確にセットされる(初期的には0である)。重心更新機構は、フェーズ2のステップ3を実行するだけで実現される。
【0296】
フェーズ2−読み出された画素に基づくArtcardからのビットパターン検出及びバイトとしての書き込み
Artcard9からのドットは、3列に亘って検出された少なくとも9個の画素が提示されることを要求するので、検出された画素列毎にドット検出計算を実行するポイントは殆ど無い。処理に要する時間は、平均ドット出現に亘って平均化し、利用可能な処理時間を最大化した方がよい。これにより、Artcard9からのドットの列の処理を、Artcardから3列のデータを読み出すために要する時間内に収めることが可能になる。最も可能性の高いケースでは、ドットを提示するために4列を要するが、4番目の列は、あるドットの最後の列であり、且つ次のドットの最初の列である。したがって、処理は3列だけに制限されるべきである。
【0297】
CCDからの画素は、利用可能な時間の13%内でDRAMに書き込まれるので、83%の時間、即ち、93747*3の83%=281241nsの83%=233430nsは、ドットの1列を処理するために利用可能である。
【0298】
利用可能な時間内に、3150ドットを検出し、それらのビット値をメモリの生データエリアに書き込むことが必要である。したがって、この処理は以下のステップを必要とする:
Artcard上のドットの列毎に、
ステップ0:次のドット列へ進む;
ステップ1:Artcardドット列の上端及び下端を検出する(クロックマークをチェックする);
ステップ2:ドット列を処理し、ビットを検出し、ビットを適切に記憶する;
ステップ3:重心を更新する。
【0299】
Artcardの論理的なドット列を処理し、論理的なドット列は165画素に亘ってシフトする可能性があるので、最悪のケースでは、少なくとも165列がDRAMに読み込まれるまで、最初の列を処理できない。したがって、フェーズ2は、読み出しプロセスが終了した後、同じ時間で終了する。最悪ケースの時間は、165*93747ns=15468255ns、即ち、0.015秒である。
【0300】
ステップ0:次のドットへ前進
次のドットの列へ進むため、Δrow及びΔcolumnをdotColumnTopに加算し、列の上端のドットの重心を得る。最初にこれを行うとき、ビットイメージ画像データエリアの左側のクロックマーク列276の所にいるので、第1のデータ列へ進む。Δrow及びΔcolumnは、1列内のドット間の距離を表すので、ドット列の間を移動するために、ΔrowをcolumndotColumnTopに加算し、ΔcolumnをrowdotColumnTopに加算することが必要である。
【0301】
処理中の列番号を追跡するため、列番号は、CurrentCoulmnという名称のレジスタに記録される。センサが次のドット列へ進むたびに、CurrentColumnレジスタをインクリメントする必要がある。CurrentColumnレジスタが最初にインクリメントされとき、それは、−1から0へインクリメントされる(フェーズ1のステップ0を参照)。CurrentColumnレジスタは、(maxColumnsに達したときに)読み出しプロセスを終了するときを決定し、(8ドット列毎に1回ずつ)8ビット全部がバイトに書き込まれた後、DataOutPointerを次のバイト情報の列へ進めるために使用される。下位3ビットは、現在のバイトにどのビットまで入るかを決定する。
【0302】
ステップ1:Artcardドット列の上端及び下端の検出
Artcardからのドット列を処理するため、列の上端及び下端を検出することが必要である。列は、(局所的な歪み等を除いて)列の上端と下端の間に直線を形成すべきである。初期的に、dotCoulumnTopはクロックマーク列276を指定する。予測値をトグルさせ、予測値をビット履歴に書き込み、ステップ2へ進むだけでよく、その最初のタスクは、列の最初のデータドットに到達するため、Δrow及びΔcolumnの値をdotColumnTopに加算することである。
【0303】
ステップ2:Artcardのドット列を処理
列の上端及び下端の重心が画素座標に与えられたならば、列は、それらの間に歪み等を原因とする変動ができる限り少ない直線を形成する。
【0304】
処理が列の上端(上端重心座標)でスタートし、列の下端へ下がる場合を想定すると、後続の予測ドット重心は、
rownext= row + Δrow
columnnext= column + Δcolumn
として与えられる。
【0305】
これは、列の次のドットの予測重心のアドレスを与える。しかし、局部的な歪み及び誤差を考慮するため、直前に所定の行で検出したドットに基づく別のΔrow及びΔcolumnを加算する。このようにして、列の上端から下端を繋ぎ合わせる直線からあるパーセンテージの最大のドリフトに累積する小さいドリフトを考慮することができる。
【0306】
したがって、行毎に2個の値を保持するが、行履歴はこのフェーズのステップ3で使用されるので、それらの2個の値は別々のテーブルに格納する:
*Δrow及びΔcolumn(それぞれ2@4ビット=1バイト);
*行履歴 (1行毎に3ビット、1バイト当たり2行が格納される)。
【0307】
行毎に、重心への変化を決定するため、Δrow及びΔcolumnを読み出すことが必要である。読み出しプロセスは、帯域幅の5%と2個のキャッシュラインを要する:
76*(3150/32)+2*3150=13824ns=帯域幅の5%。
【0308】
重心が決定されると、重心の周辺画素は、ドットの状態、即ち、ビットの値を検出するために調べられる。換言すると、ドットは、4×4画素のエリアを覆う。しかし、ドットの解像度の3倍の解像度でサンプリングしているので、ドットの状態、即ち、ビットの値を検出するために必要な画素数はこれよりも遙かに少ない。1回につきアクセスすべき画素列は、3列に過ぎない。
【0309】
1%の回転による画素ドリフトのある最悪ケースでは、重心は57画素行毎に1列ずつシフトするが、ドットの直径が3ドットであるため、ある列は、171画素行(3*57)に対して有効であろう。1バイトは2画素を含むので、各バッファ読み出し(4個のキャッシュライン)で有効なバイト数は、最悪の場合に(128の読み出しのうちの)86であろう。
【0310】
ビットが検出されると、ビットはDRAMへ書き出すことが必要である。DRAM遅延を最小限に抑えるため、8列からのビットが隣接したバイトのセットとして格納される。所与のドット列からの全てのビットは、データバイト内の次のビット位置に対応するので、そのバイトの古い値を読み出し、新しいビット内でシフトしOR演算し、そのバイトを書き戻すことが可能である。
【0311】
読み出し/シフト及びOR演算/書き込みプロセスは2個のキャッシュラインを必要とする。
【0312】
所定の行に対するビット履歴を更新するとき、そのビット履歴を読み出し、書き込むことが必要である。1行当たりに必要なビット履歴は3ビットだけであり、2行の履歴を単一バイトに格納することが可能である。読み出し/シフト及びOR演算/書き込みプロセスは2個のキャッシュラインを必要とする。
【0313】
ビット検出及び蓄積のために要する総帯域幅は以下の表に掲載されている。
【0314】
【表46】
Figure 2004536736
ドットの検出
重心を与えるドットの値(即ち、ビットの値)を検出するプロセスは、3個の画素値を検査し、ルックアップテーブルから結果を取得することによって実現される。この処理は、かなり簡単であり、図42に示されている。ドット290の半径は約1.5画素である。したがって、重心を支える画素291は、その画素内の重心の実際の位置とは無関係に、完全にそのドット値であろう。重心が画素291の中心と正確に一致するならば、重心画素の上画素292及び下画素293、並びに、重心画素の左画素294及び右画素295は、大部分そのドット値であろう。重心が画素295の正確な中心から離れているならば、中心画素以外の画素がそのドットによって100%覆われる可能性が高い。
【0315】
図42には、中心の左及び下へ偏っている重心だけが示されているが、同じ関係が中心の上側及び右側の重心に対しても成り立つことは明白である。ケース1では、重心は、中央画素295の中心と正確に一致する。中心画素295はそのドットによって完全に覆われ、上、下、左、及び右の画素もそのドットによって十分に覆われている。ケース2では、重心は、中央画素291の中心の左側にある。中心画素は、依然としてドットによって完全に覆われ、中心の左の画素294はドットによって完全に覆われている。上画素292及び下画素293は依然として十分に覆われている。ケース3では、重心は、中央画素291の中心の下側にある。中心画素291は、依然としてドット291によって完全に覆われ、中心の左の画素はドットによって完全に覆われている。中心の左画素294及び右画素295は依然として十分に覆われている。ケース4では、重心は中央画素の中心の左下にある。中心画素291は依然としてドット291によって完全に覆われ、中心の左画素294、及び中心の下画素294はドットによって完全に覆われている。
【0316】
重心を更新するアルゴリズムは、以下の3個の代表的な画素を選択し、ドットの値を決定するため、中央画素291の中心から重心までの距離を使用する:
第1画素:重心を含む画素
第2画素:重心のX座標(列値)が<1/2である場合、第1画素の左側の画素であり、さもなければ、第1画素の右側の画素
第3画素:重心のY座標(行値)が<1/2である場合、第1画素の上側の画素であり、さもなければ、第1画素の下側の画素。
【0317】
図43に示されるように、各画素の値は、予め計算されたルックアップテーブル301へ出力される。3個の画素は12ビットのルックアップテーブルへ供給され、このルックアップテーブルはドットの値、即ち、オン又はオフを示す単一ビットを出力する。ルックアップテーブル301は、チップ定義時に構築され、約500ゲートにまとめられる。ルックアップテーブルは、簡単な閾値テーブルでもよいが、但し、中心画素(第1画素)は重く重み付けされる。
【0318】
ステップ3:列において行毎に重心Δsの更新
Δs処理の考え方は、現在列において、行毎に予測重心位置で完全なドットを生成するため、前のビット履歴を使用することである。実際の(CCDからの)画素は、予測完全画素と比較される。両方が一致する場合、実際の重心位置は正確に予測位置に含まれるので、重心Δsは有効であり、更新する必要がない。さもなければ、予測重心位置を実際のデータに最も良く適合させるため、重心Δsを更新するプロセスを行うことが必要である。新しい重心Δsは次の列のドットを処理するために使用される。
【0319】
重心Δsの更新は、下記の理由で、ステップ2からの後続のプロセスとして実行される:なぜならば、
設計の複雑さを軽減し、それにより、十分な帯域幅が残っているフェーズ1のステップ2として実行でき、DRAMバッファを再使用できるようになり、
重心更新に必要な全てのデータが特殊なパイプライン化を行うことなく、プロセスのスタート時に利用できることが保証されるからである。
【0320】
重心Δは、複雑さを低減するため、Δcolumn及びΔrowとして処理される。
【0321】
所与のドットは直径が3ドットであるが、4×4の画素エリアに出現する可能性が高い。しかし、あるドットのエッジは、結果的に、次のドットのエッジと同じ画素に含まれる。このため、重心更新のためには、所与の単一ドットに関する情報以外の情報が必要である。
【0322】
図44には、前の列からの単一のドット310が所与の重心311と共に示されている。本例では、ドット310は、4個の画素列312から315の範囲にΔが広がり、実際上、前のドット列のドット(座標=(Prevcolumn, CurrentRow))の一部は、現在行のドットの現在列に入り込んでいる。現在の行及び列のドットが白色であるならば、前の列のドットからのドット情報(現在の列のドットは白色)しか存在しないので、前のドット列から最も右側にある画素列314は小さい値であると予測される。このことから、この画素列315における画素値が高くなればなるほど、重心がより右側になることがわかる。勿論、右側のドットも黒色であるならば、サブピクセルから情報を獲得できないので、重心を調整することができる。同様のことは、ドット座標(Prevcolumn, CurrentRow)における左、上及び下のドットについても成り立つ。
【0323】
このことから、最大で5個の画素列及び画素行が必要であることがわかる。行及び列の重心Δsを別々に考慮し、それらを90度だけ回転した同じ問題として取り扱うことにより、状況を簡単化することが可能である。
【0324】
水平方向のケースを最初に説明すると、予測画素が検出画素と一致しない場合、列重心Δsを変更することが必要である。ビット履歴から、現在ドット列の現在行に対して見つかったビットの値、直前のドット列、及び二つ前のドット列がわかる。予測重心位置もわかっている。これらの二組の情報を使用することにより、読み出しが完全であるならば、20ビットの予測ビットパターンを生成することが可能である。20ビットのビットパターンは水平方向次元で5画素毎の予測Δ値を表現する。1番目のニブルは、最も左側のドットの最も右側の画素を表現する。次の3個のニブルは、前の列からドット310の中心を通る3画素を表現し、最後のニブルは(現在列から)最も右側のドットの最も左側の画素317を表現する。
【0325】
予測重心が画素の中心である場合、20ビットパターンは以下の表に基づくことが予測される。
【0326】
【表47】
Figure 2004536736
中心ドットの左側及び右側の画素は、ビットが0であるか、又は1であるかに応じて、それぞれ、0又はDである。中心の3画素は、ビットが0であるか、又は1であるかに応じて、それぞれ、000又はDFDである。これらの値は、所与の画素に対してドットによって占められた物理的なエリアに基づいている。画素の正確な中心から重心までの距離に依存して、僅かにシフトしたデータを予測し、これは、実際に中心画素の両側の画素だけに影響を与える。16通りの可能性があるので、中心からの距離を16で除算し、予測画素をシフトさせるためその量を使用することができる。
【0327】
20ビットの5個の画素予測値が決定されると、それは読み出された実際の画素と比較される。これは、画素単位で、読み出された実際の画素から予測画素を減算し、最後に、予測Δ値からの距離を獲得するため、それらの差をまとめて加算することにより行われる。
【0328】
図45は、上記アルゴリズムを実現する一形態の説明図であり、ビット履歴322及び重心小数コンポーネント323を受け取り、対応した20ビットの数324を出力するルックアップテーブル320が含まれ、20ビットの数324は、中心画素入力326から減算321され、画素差327が生成される。
【0329】
このプロセスは、予測重心に関して、Δcolumnの量1による重心の左シフト及び右シフトに対して1回ずつ実行される。実際の画素からの差が最も小さい重心は、「勝者」であると見なされ、それに応じてΔcolumnが更新される(「変更無し」が望ましい)。その結果として、Δcolumnは、ドット列毎に1よりも大きく変更されることはない。
【0330】
このプロセスは垂直方向画素に対しても繰り返され、その結果としてΔrowが更新される。
【0331】
ここで、並列化できる見通しはかなり高い。ACPユニット31に対して選択されたクロックのレートに依存して、これらのユニットは直列に配置することができ(これにより、3種類のΔのテストは連続したクロックサイクルで行われる)、又は並列に配置することができ、これにより、3種類のテストを同時に行うことができる。クロックレートが十分に高速であるならば、並列化の必要性はない。
【0332】
帯域幅初期化
Δsの古いΔを読み出し、それらを再度書き出すことが必要である。これは、帯域幅の10%を要する:
2*(76(3150/32)+2*3150)=27648ns=帯域幅の10%。
【0333】
Δsを更新するとき、所与の列のビット履歴を読み出すことが必要である。各バイトは2個の行のビット履歴を含むので、帯域幅の2.5%を要する:
76((3150/32)/2)32)+2*(3150/2)=4085ns=帯域幅の2.5%。
【0334】
1%の回転によって画素がドリフトする最悪ケースでは、重心は57画素行毎に1列だけシフトするが、ドットの直径は3画素であるため、所与の画素列は、181画素行(3*57)に対して有効である。バイトは2画素を収容するので、キャッシュ読み出しにおいて有効なバイト数は最悪のケースで(128回の読み出しのうちの)86である。5列に対する最悪ケースのタイミングは、したがって、31%帯域幅である:
5*(((9450/(128*2))*320)*128/86)=88112ns=帯域幅の31%。
【0335】
重心Δを更新するために必要な総帯域幅は以下の表に掲載されている。
【0336】
【表48】
Figure 2004536736
フェーズ2のメモリ使用量
2MBのビットイメージDRAMエリアは、フェーズ2処理中に読み書きされる。2MB画素データDRAMエリアは読まれる。
【0337】
0.5MBのスクラッチDRAMエリアは行データを格納するため使用される。即ち、
【0338】
【表49】
Figure 2004536736
フェーズ3−生データのスクランブル解除及びXOR演算
図37を参照すると、復号化の次のステップは、生データのスクランブル解除及びXOR演算である。Artcardから取得されるような2MBバイト画像は、スクランブル処理され、XOR演算された形式である。これは、フェーズ4におけるリード・ソロモンデコーダに必要なビットイメージを得るためにスクランブル解除及び再XOR演算を必要とする。
【0339】
図46を参照すると、スクランブル解除プロセス330は、2MBのスクランブル付きのバイト画像331を取得し、スクランブル解除された2MB画像332を書き込む。このプロセスは、同じ場所で合理的に実行することが不可能であるため、2組の2MBエリアが利用される。スクランブル付きのデータ331は、16×16配列に並べられたシンボルブロック順であり、シンボルブロック0(334)は、ランダムな順序の、あらゆる符号語からの全てのシンボル0を含む。シンボルブロック1は、ランダムな順序で全ての符号語からの全てのシンボル1を含み、以下同様である。255個のシンボルしかないので、256番目のシンボルブロックは、現時点では使用されない。
【0340】
線形フィードバックシフトレジスタは、シンボルブロック、例えば、シンボルブロック334内の位置と、そのシンボルブロックが由来する符号語、例えば、符号語355との間の関係を決定するため使用される。これは、元のArtcard画像を生成したときと同じシードが使用される限り機能する。時間のボトルネックは、DRAMの非順次アドレスへの読み出し/書き込みの準備完了を待機することであるため、他のソースラインからのバイトと、0xAA及び0x55とのXOR演算は、(時間的に)実質的に制約がない。
【0341】
スクランブル解除及びXOR演算プロセスのタイミングは、実質的に、2MBのランダムバイト読み出しと、2MBのランダムバイト書き込みであり、即ち、
2*(2MB*76ns+2MB*2ns)=327155712ns、つまり、約0.33秒である。このタイミングはキャッシュ処理を想定していない。
【0342】
フェーズ4−リード・ソロモン復号
このフェーズはループであり、ビットイメージ内のデータのコピーに対して繰り返され、復号が成功するか、又は復号しようとするコピーが無くなるまで、データのコピーをリード・ソロモン復号モジュールへ送る。
【0343】
使用されるリード・ソロモンデコーダは、適切にプログラミングされたVLIWプロセッサでもよく、或いは、LSIロジックのL64712のような別個のハードワイヤードでもよい。L64712は、1秒当たり50Mビット(毎秒約6.25MB)のスループットを備えているので、時間は、2MBの読み出し及び1MBの書き込みのためのメモリアクセス時間(順次アクセスの場合500MB/秒)ではなく、むしろ、リード・ソロモンデコーダの速度によって制約される。最悪ケースで要する時間は、2/6.25秒=約0.32秒である。
【0344】
フェーズ5 Varkスクリプトの実行
Artcard9を読み出し、それを復号化するために要する総時間は、約2.15秒である。ユーザにとっての明らかな遅れは、実際には、0.65秒(フェーズ3及び4の合計)に過ぎない。なぜならば、Artcardは、1.5秒後に動きを止めるからである。
【0345】
Artcardがロードされると、Artvarkスクリプトは解釈される。直ちにスクリプトを実行するのではなく、スクリプトは、「プリント」」ボタン13(図1)を押したときに限り実行される。スクリプトを実行するために取られる措置は、スクリプトの複雑さに大きく依存し、プリントボタン及び実際のプリントボタンを押下し、実際のプリントが行われるまでの間に認識される遅れを考慮しなければならない。
【0346】
代替Artcardフォーマット
勿論、他のartcardのフォーマットも考えられる。以下では、多数の好適な特徴を備えたこのような新しい代替artcardフォーマットについて説明する。以下では、代替Artcardデータフォーマット、ユーザデータを代替Artcard上のドットにマッピングする機構、及びリソースが不足している組込型システムで使用するための高速代替Artcard読み出しアルゴリズムを説明する。
【0347】
代替Artcardの概要
代替Artcardは、組込型アプリケーション及びPC型アプリケーションの両方で使用され、大容量のデータ又はコンフィギュレーション情報への使い易いインタフェースを提供する。
【0348】
代替Artcardの裏面は(データを保存するので)アプリケーションとは無関係に同一の外観を有するが、代替Artcardの表面はアプリケーションに依存している。表面はアプリケーションとの関係においてユーザに意味がなければならない。
【0349】
代替Artcard技術は、印刷解像度とは独立にすることができる。カード上にドットとしてデータを保存する考え方は、(解像度を上げることによって)同じ空間により多くのドットを配置することができるならば、それらのドットがより多くのデータを表現し得るということを意味するに過ぎない。好適な実施例は、例示的なArtcardとしての86mm×55mmカード上で1600dpiの印刷を利用することを想定するが、他の等価的なレイアウト、他のカードサイズのためのデータサイズ、及び/又は、他の印刷解像度に決定することは容易である。印刷解像度とは無関係に、読み出し技術はそのまま維持される。全ての復号化及びその他のオーバーヘッドを考慮した後、代替Artcardは、1600dpiまでの印刷解像度で、最大で1メガバイトのデータを保存することが可能である。代替Artcardは、1600dpiを超える印刷解像度で、数メガバイトのデータを保存することが可能である。以下の二つの表は、ある印刷解像度に対する代替Artcardの実効データ記憶容量を要約するものである。
【0350】
代替Artcardのフォーマット
代替Artcard上のデータ構造は、データの復元を補助するため特別に設計されている。このセクションは代替Artcardのデータ(裏)面のフォーマットを説明する。
【0351】
ドット
代替Artcardのデータ面のドットはモノクロでもよい。例えば、黒色ドットが、所定の望ましい印刷解像度で白色背景に印刷される。その結果として、「黒色ドット」は物理的に「白色ドット」から区別される。図47には、黒色ドット及び白色ドットの拡大図の様々な例が示されている。白色背景上の黒色ドットのモノクロ方式は、好ましくは、ブラー効果のある読み出し環境においてダイナミックレンジを最大にするために選択される。黒色ドットが特定のピッチ(例えば、1600dpi)で印刷されているとしても、ドット自体は、ドットが隣接させて印刷されたときに、隣接した直線が作成されるように、少し大きくされる。ドットは、実際には滲みの結果として一つに併合されるかもしれないが、図47の例示的な画像では併合されていない。黒色のキザキザはもっと取り除かれるであろう。好適な実施例に記述された代替Artcardは、ドットサイズの柔軟に変化することを許容するが、最良の結果を得るためには、正確なドットサイズ、及び特定の印刷技術用のインク/印刷動作をより詳細に調べるべきである。
【0352】
このArtcardの実施例の説明中、用語ドットは、代替Artcard上に物理的に印刷されたドット(インク、熱、電子写真、ハロゲン化銀等)を意味する。代替Artcardリーダーが代替Artcardを走査するとき、ドットは、ナイキストの定理を充たすために、少なくとも印刷された解像度の2倍でサンプリングされる必要がある。用語画素は、代替Artcardリーダー装置からのサンプル値を意味する。例えば、1600dpiのドットが4800dpiで走査されるとき、ドットの各次元に3個の画素、即ち、1ドット当たりに9個の画素が存在する。サンプリングプロセスは後述される。
【0353】
図48を参照すると、典型的な代替Artcardのデータ面1101が示されている。各代替Artcardは、白色境界領域1103によって囲まれた「アクティブ」領域1102により構成される。白色境界1103は、データ情報を格納しないが、代替Artcardリーダーによってホワイトレベルを較正するため使用される。アクティブ領域は、データブロック、例えば、1104の配列であり、各データブロックは、8個の白色ドット、例えば、1106のギャップによって隣のデータブロックから分離されている。印刷解像度に依存して、代替Artcard上のデータブロック数は変化する。1600dpiの代替Artcard上で、配列は8×8でもよい。各データブロック1104は、627×394ドットの次元を有する。ブロック間ギャップ1106が8白色ドットである場合、代替Artcardのアクティブエリアは、5072×3208ドット(1600dpiのとき、8.1mm×5.1mm)である。
【0354】
データブロック
図49を参照すると、単一のデータブロック1107が示されている。代替Artcardのアクティブ領域は、同一構造のデータブロック1107の配列により構成される。各データブロックの構造は、クロックマーク1109によって囲まれたデータ領域1108と、境界1110と、Target1111である。データ領域は、符号化データだけを含み、クロックマーク、境界、及びターゲットは、特に、データ領域の位置検出を補助し、領域内からのデータの正確な復元を保証するために設けられる。
【0355】
各データブロック1107の次元は、627×934ドットである。この中で、595×384ドットの中央エリアはデータ領域1108である。周囲ドットは、クロックマーク、境界、及びターゲットを保持するため使用される。
【0356】
境界及びクロックマーク
図50はデータブロックを示し、図51及び図52は、そのデータブロックの拡大エッジ部分を示す。図51及び図52に示されるように、二つの5ドット高の境界及びクロックマーク領域1170及び1177が各データブロックに存在し、一方はデータ領域の上方に、もう一方はデータ領域の下側にある。例えば、上端の5ドット高領域は、(データブロックの長辺を引き延ばす)外側黒色ドット境界線1112と、(境界線が独立していることを保証する)白色ドット分離線1113と、3ドット高のクロックマークの組1114と、により構成される。クロックマークは、白色及び黒色行の間で交互に代わり、黒色ブロックの両端から8番目の列で黒色クロックマークから始まる。クロックマークドットとデータ領域内のドットとの間は分離されていない。
【0357】
クロックマークは、代替Artcardが180度回転させて挿入された場合に、同じ相対的な境界/クロックマーク領域が出現するという点で対称性がある。境界1112、1113は、データがデータ領域から読み出されるときに、垂直方向に追従するため、代替Artcardが使用することを意図されている。クロックマーク1114は、データがデータ領域から読み出されるときに、水平方向に追跡することが意図されている。白色のドット直線による境界とクロックマークの分離は、読み取り中にブラー効果が発生する結果として望ましい。境界は、このようにして、両側が白色の黒色直線になり、読み出し時の周波数応答の改良に役立つ。白色と黒色の間で交互に代わるクロックマークは、垂直次元ではなく、水平次元である点を除いて、類似した結果を生ずる。任意の代替Artcardは、追跡のために使用することを意図しているならば、クロックマーク及び境界の位置を見つけなければならない。次のセクションは、クロックマーク、境界及びデータへの方向を示すため設計されたターゲットを取り扱う。
【0358】
ターゲット領域内のターゲット
図54に示されるように、二つの15ドット幅のターゲット領域1116及び1117が各データブロックに存在する。一方はデータ領域の左側に存在し、他方はデータ領域の右側に存在する。ターゲット領域は、方位のため使用される1列のドットによってデータ領域から分離される。ターゲット領域1116及び1117の目的は、クロックマーク、境界、及びデータ領域までの進み方を指定することである。各ターゲット領域は、6個のターゲット、例えば、1118を含み、6個のターゲットは、代替Artcardリーダーによって簡単に検出できるように設計される。次に、図53を参照すると、単一Target1120の構造が示されている。各Target1120は、15×15ドットの黒色正方形であり、中心構造1121とランレングス符号化ターゲット番号1122と、を含む。中心構造1121は、単純な白色十字であり、ターゲット番号コンポーネント1122は、単純な2列の白色ドットであり、各列はターゲット番号の各部分に対し2ドットの長さである。したがって、ターゲット番号1のターゲットidの1122は2ドットの長さであり、ターゲット番号2のターゲットidの1122は4ドット幅であり、以下同様に続く。
【0359】
図54に示されるように、ターゲットは、カード挿入に関して回転不変性を有するように配置される。即ち、左のターゲットと右のターゲットは、180度回転している点を除いて同じである。左のターゲット領域1116において、ターゲットは、Target1から6が上端から下端へそれぞれ位置決めされるように配置される。右のターゲット領域において、ターゲットは、ターゲット番号1から6が下端から上端へ位置決めされるように配置される。ターゲット番号idは、常に、データ領域までの半分のところにある。図54の拡大部分図は、右のターゲットが、180度回転している点を除いて、左のターゲットと同一である様子を明瞭に示している。
【0360】
図55に示されるように、Target1124及び1125は、特に、中心が55ドット離されてターゲット領域内に配置される。その上、Target1(1124)の中心から上部クロックマーク領域の第1のクロックマークドット1126までの距離は55ドットであり、ターゲットの中心から下部クロックマーク領域の第1のクロックマークドット(図示せず)までの距離は55ドットである。両方の領域の第1の黒色クロックマークは、ターゲット中心とちょうど一致して始まる(8番目のドット位置は15ドット幅のターゲットの中心である)。
【0361】
図55の略構成図には、ターゲット中心の間の距離と、上部境界/クロックマーク領域内オンTarget1(1124)から第1の黒色クロックマーク(1126)の第1のドットまでの距離が示されている。上部及び下部の両方のターゲットからクロックマークまでの距離は55ドットであり、代替Artcardの両側は対称性があるため(180度回転しているため)、カードは、左から右へ、又は右から左へ読み出される。読み出し方向とは無関係に、方位はデータ領域からデータを抽出するため決定する必要がない。
【0362】
方位列
図56に示されるように、各データブロックには2個の1ドット幅の方位列1127及び1128が存在する。一方はデータ領域の直ぐ左側にあり、他方はデータ領域の直ぐ右側にある。方位列は、代替Artcardリーダーに方向情報を与えるため設けられる。(左ターゲットの右にある)データ領域の左側には、単一の白色ドット列1127が隣接する。(右ターゲットの左にある)データ領域の右側には、単一の黒色ドット列1128が隣接する。ターゲットは回転不変性があるので、これらの二つのドット列によって、代替Artcardリーダーは、代替Artcardの方向、即ち、カードが正しく挿入されたか、又は逆向きに挿入されたかを決定できるようになる。代替Artcardの観点からは、ドットの劣化が無いと仮定すると、次の二つの可能性が存在する。即ち:
*データ領域の左側のドット列が白色であり、データ領域の右側の列が黒色であるならば、リーダーは、カードが書き込まれたときと同じように挿入されたことを認識する;
*データ領域の左側のドット列が黒色であり、データ領域の右側の列が白色であるならば、リーダーは、カードが後ろ向きに挿入され、データ領域がそれに応じて回転していることを認識する。リーダーは、代替Artcardから正しく情報を復元するため、適切な動作を選択しなければならない。
【0363】
データ領域
図57に示されるように、データブロックのデータ領域は、各列が384ドットを含む595列により構成され、全部で228480ドットがある。これらのドットは、原データを得るために、解釈され、復号化される。各ドットは単一ビットを表現するので、228480ドットは228480ビット、即ち、28560バイトを表現する。各ドットの解釈は以下の通りである。
【0364】
【表50】
Figure 2004536736
しかし、ドットから得られたビットの実際の解釈は、原データから代替Artcardのデータ領域内のドットへのマッピングの理解が必要である。
【0365】
原データのデータ領域ドットへのマッピング
次に、最大サイズが910082バイトの原データファイルを取得し、それを、1600dpi代替Artcard上の64個のデータブロックのデータ領域内のドットへマッピングするプロセスを説明する。代替Artcardリーダーは、代替Artcard上のドットから原データを抽出するためこのプロセスを逆転するであろう。一見して、データをドットにマッピングすることは簡単なことに思われ、即ち、2値データは1と0により構成されるので、黒色ドット及び白色ドットを簡単にカードに書き込むことができるであろう。しかし、この方式は、インクがフェイドし、カードの一部がごみ、汚れ、或いは、場合によっては傷によって損なわれることを許容しない。誤り検出符号化を行わない限り、カードから取得されたデータが正確であるかどうかを検出する方法は無い。更に、冗長符号化を行わない限り、検出された誤りを正す方法はない。したがって、マッピングプロセスの目的は、データ復元を非常に確実に行い、代替Artcardリーダーに、データを正しく読み出したことを認識する能力を与えることである。
【0366】
原データファイルをデータ領域ドットへマッピングするために、以下の三つの基本的なステップが関係する:
*原データを冗長符号化する;
*局部的に生じた代替Artcardの損傷の影響を低減するため、符号化データをシ決定論的にャッフルする;
*シャッフルされた符号化データをドットとして代替Artcardのデータブロックに書き込む。
【0367】
これらの各ステップは以下のセクションで詳細に考察される。
【0368】
リード・ソロモン符号化を使用する冗長符号
データの代替Artcardへのマッピングは、冗長符号化を利用する方法に大きく依存している。バースト誤りを取り扱い、最小限の冗長性で効率的に誤りを検出し訂正する能力を備えているリード・ソロモン符号化を選択する方が好ましい。リード・ソロモン符号化は、Wicker, S. と Bhargava, V. による''Reed−Solomon Codes and their Application'', IEEE Press, 1994、Rorabaugh, Cによる''Error Coding Cookbook'', McGraw−Hill, 1994、及びLyppens, H.による''Reed−Solomon Error Correction'', De. Dobb's Journal, Volume 22, Issue 1, January 1997のような標準的なテキストで適切に説明されている。
【0369】
リード・ソロモン符号化用の様々なパラメータを使用することが可能であり、異なるシンボルサイズ及び異なる冗長性レベルが含まれる。好ましくは、以下の符号化パラメータ、
*m=8
*t=64
が使用される。
【0370】
m=8とすることは、シンボルサイズが8ビット(1バイト)であることを意味する。また、リード・ソロモン符号化されたブロックサイズnは255バイト(28−1シンボル)であることを意味する。最大でt個のシンボルの訂正を行うため、最終的なブロックサイズで2t個のシンボルが冗長シンボルを用いて採用されなければならない。t=64とすることは、誤りがある場合に、1ブロック毎に64バイト(シンボル)を訂正可能であることを意味する。255バイトの各ブロックは、128(2×64)冗長バイトを有し、残りの127バイト(k=127)は原データを保持するため使用される。このようにして、
*n=255
*k=127
である。
【0371】
実際の結果では、127バイトの原データが符号化され、255バイトブロックのリード・ソロモン符号化データが得られる。符号化された255バイトブロックは、代替Artcard上に記憶され、その後、代替Artcardリーダーの復号化によって元の127バイトに戻される。データブロックのデータ領域の単一列内の384ドットは、48バイト(384/8)を保持し得る。595列は28560バイトを保持し得る。これは、112個のリード・ソロモンブロックに達する(各ブロックは255バイトを含む)。完全な代替Artcardの64個のデータブロックは、全部で7168個のリード・ソロモンブロック(1リード・ソロモンブロック当たりに255バイトのとき、1827840バイト)を保持し得る。7168個のリード・ソロモンブロックのうちの2個は、制御情報のため確保されるが、残りの7166個はデータを記憶するため使用される。各リード・ソロモンブロックは127バイトの実際のデータを保持し、代替Artcard上に記憶できるデータの総量は910082バイト(7166×27)である。原データがこの総量未満である場合、データは、正確な個数のリード・ソロモンブロックに適合させるため、符号化することができ、次に、符号化されたブロックは、7166個の全てが使用されるまで複製可能である。図58は利用される符号化の全体的な形態の説明図である。
【0372】
2個の制御ブロック1132及び1133の各々は、残りの7166個のリード・ソロモンブロックを復号化するために必要な同じ符号化情報、即ち、
フルメッセージ(16ビット格納ロー/ハイ)中のリード・ソロモンブロックの個数と、
メッセージ(8ビット)の最後のリード・ソロモンブロック内のデータバイトの個数と、
を収容する。
【0373】
これらの2個の数は、32回繰り返され(96バイトを消費)、残りの31バイトは確保され、0にセットされる。各制御ブロックは、次に、リード・ソロモン符号化され、127バイトの制御情報は255バイトのリード・ソロモン符号化データに変換される。
【0374】
制御ブロックは、生き残る可能性を高くするため2回記憶される。その上、制御ブロック内のデータの繰り返しは、リード・ソロモン符号を使用する場合に特に重要である。間違いの無いリード・ソロモン符号化ブロックにおいて、データの最初の127バイトは、正しく原データであり、もし、制御ブロックが復号化に失敗したとき(64個を超えるシンボルに誤りがあるとき)、原メッセージを復元するために参照することができる。このようにして、制御ブロックが復号化に失敗した場合、2個の復号化パラメータの最も確からしい値を決定するために、3バイトのセットを検査することができる。復元可能であることは保証されないが、冗長性によって可能性は高くなる。例えば、制御ブロックの最後の159バイトが破壊され、最初の96バイトは完全に大丈夫である。最初の96バイトを参照すると、数字の繰り返しセットが見つかる。これらの数字は、残りの7166個のリード・ソロモンブロックにあるメッセージの残りの部分を復号化するため巧く利用することができる。
【0375】
一例として、正確に9967バイトのデータを含むデータファイルを想定する。必要なリード・ソロモンブロックの数は79個である。最初の78個のリード・ソロモンブロックは完全に利用され、9906バイト(78×127)が使用される。79番目のブロックには、61バイトのデータしか含まれない(残りの66バイトは全て0である)。
【0376】
代替Artcardは、7168個のリード・ソロモンブロックにより構成される。最初の2ブロックは制御ブロックであり、次の79ブロックは符号化データであり、次の79ブロックは符号化データの複製であり、次の79ブロックは符号化データの別の複製であり、以下同様に続く。79個のリード・ソロモンブロックを90回記憶した後、残りの56個のリード・ソロモンブロックは、79ブロックの符号化データのうちの最初の56ブロックの別の複製である(符号化データの最後の23ブロックは、代替Artcard上に十分な場所が存在しないので、これ以上記憶されない)。リード・ソロモン符号化される前の各制御ブロックデータ内の127バイトの16進表現が図59に示されている。
【0377】
符号化データのスクランブル処理
全ての符号化ブロックがメモリ内に隣接して格納されているならば、最大で1827840バイトのデータ(2個の制御ブロックと、7166個の情報ブロックとを合わせて全部で7168個のリード・ソロモン符号化ブロック)を代替Artcard上に記憶することができる。好ましくは、データは、この段階で代替Artcard上にそのまま記憶されるのではなく、即ち、1個のリード・ソロモンブロックの255バイトの全てがカード上で物理的に一体として記憶されるのではない。カードに物理的な破損を生じさせるごみ、汚れ、又は歪みは、一つのリード・ソロモンブロック内の64バイト以上を破壊する可能性があり、そのブロックは復元できなくなる。リード・ソロモンブロックの複製が無い場合、代替Artcardの全体を復号化し得ないことになる。
【0378】
これに対するソリューションは、代替Artcard上に多数のバイトが存在し、代替Artcardは合理的な物理サイズを有するという点を活かすことである。したがって、データはスクランブル処理され、一つのリード・ソロモンブロックからのシンボルが相互に接近しないことが保証される。勿論、カードが劣化する異状ケースでは、リード・ソロモンブロックを復元することは不可能であるが、平均的に、データのスクランブル処理によってカードを非常に頑強にすることができる。選択されたスクランブル方式は単純であり、図14に概略的に示されている。リード・ソロモンブロックからのバイト0の全ては、まとめて配置され(1136)、次に、全てのバイト1等も同様である。したがって、7168個のバイト0と、7168個のバイト1等が存在する。代替Artcard上の各データブロックは28560バイトを記憶することができる。この結果として、代替Artcard上の64個のデータブロックの各々に、各リード・ソロモンブロックからの約4バイトが収容される。
【0379】
このスクランブル方式の下では、代替Artcard上の16個のデータブロック全体に対する完全なダメージによって、1リード・ソロモンブロック毎に64個のシンボル誤りが生じる。即ち、代替Artcardにその他のダメージが無い場合、たとえデータの複製が無くても、全てのデータは完全に復元可能である。
【0380】
スクランブル処理された符号化データを代替Artcardへ書き込み
原データがリード・ソロモン符号化され、複製され、スクランブル処理されると、1827840バイトのデータを代替Artcardに記憶する必要がある。代替Artcard上の64個のデータブロックの各々は、28560バイトを記憶する。
【0381】
データは、単純に代替Artcardのデータブロックへ書き出されるので、第1のデータブロックはスクランブル付きデータのうちの最初の28560バイトを格納し、第2のデータブロックは次の28560バイトを格納し、以下同様に続く。
【0382】
図61に示されるように、データブロック内で、データは列に関して左から右へ書き込まれる。このため、データブロック内の最も左側の列は、28560バイトのスクランブル付きデータのうちの最初の48バイトを格納し、最後の列は、28560バイトのスクランブル付きデータのうちの最後の48バイトを格納する。列内では、バイトは、ビット7から始めて、同時に1ビットずつ、上から下へ書き込まれ、ビット0で終了する。ビットがセット(1)されている場合、黒色ドットが代替Artcardに配置され、ビットがクリア(0)されている場合、ドットは配置されず、カードの白色背景カラーのまま残される。
【0383】
例えば、1827840バイトのデータの組は、代替Artcardに記憶されるべき7168個のリード・ソロモン符号化ブロックをスクランブル処理することによって作成できる。最初の28560バイトのデータは最初のデータブロックに書き込まれる。最初の28560バイトのうちの最初の48バイトはデータブロックの最初の列に書き込まれ、次の48バイトは次の列に書き込まれ、以下同様に続く。28560バイトのうちの最初の2バイトが16進のD3 5Fである場合を想定する。バイト0のビット7が最初に格納され、次にビット6が格納され、以下同様に続く。次に、バイト1のビット7からバイト1のビット0までが格納される。各「1」は黒色ドットとして格納され、各「0」は白色ドットして格納されるので、これらの2バイトは、代替Artcard上では、以下のドットの組として表現され、
*D3(1101 0011)は、黒、黒、白、黒、白、白、黒、黒になり、
*5F(0101 1111)は、白、黒、白、黒、黒、黒、黒、黒になる。
【0384】
代替Artcardの復号化
このセクションは、代替Artcardから正確かつ確実な形で原データを抽出する処理を取り扱う。特に、前の章で説明した代替Artcardのフォーマットを前提として、代替Artcardから元の予め符号化されたデータを抽出する方法を説明する。
【0385】
代替Artcardを復号化する前提の一部として多数の一般的な考察が存在する。
【0386】
ユーザ
代替Artcardの目的は、様々なアプリケーションで使用するためのデータを保存することである。ユーザは、代替Artcardを代替Artcardリーダーに挿入し、データが「妥当な時間」内にロードされることを期待する。ユーザの観点からは、モーター輸送が代替Artcardを代替Artcardリーダーへ動かす。これは、問題となる遅れとしては認識されない。なぜならば、代替Artcardは動いているからである。代替Artcardが停止した後の時間は遅延として認識され、代替Artcard読み出し方式において最低限に短縮されるべきである。理想的な状態では、代替Artcardの全体が移動中に読み出され、これにより、カードの移動が停止した後に遅延が認識されない。
【0387】
好適な実施例の目的のため、代替Artcardを物理的にロードするための妥当な時間は1.5秒に決める。代替Artcardの移動が停止した後の付加的な復号化のための時間を最低限に短縮すべきである。代替Artcardのアクティブ領域は代替Artcardの表面の大部分を覆うので、時間的な関心をその領域に限定することができる。
【0388】
ドットのサンプリング
代替Artcard上のドットは、ナイキストの定理(Nyguist‘s Theorem)を充たすため、少なくとも印刷された解像度の2倍でCCDリーダー等によってサンプリングしなければならない。実際には、これよりも高いレートでサンプリングする方がよい。代替Artcardリーダーの環境では、ドットは、好ましくは、各次元に関してドットが印刷された解像度、即ち、単一ドットを定義するために9画素を必要とする解像度の3倍の解像度でサンプリングされる。代替Artcardのドットの解像度が1600dpiである場合、代替Artcardリーダーのイメージセンサは、4800dpiで画素を走査しなければならない。勿論、ドットがイメージセンサと正確に位置合わせされていない場合、図62に示されるような最悪の最も起こり易いケースでは、ドットは4×4画素エリアに亘って検出されるであろう。
【0389】
サンプリングされる各画素は1バイト(8ビット)である。各画素の下位2ビットは、有意なノイズを含む可能性がある。したがって、復号化アルゴリズムは、耐ノイズ性が要求される。
【0390】
位置合わせ/回転
ユーザが代替Artcardを回転なしに完全に位置合わせされた状態で代替Artcardリーダーに挿入する可能性は極めて低い。リーダーの入口及びモーター輸送のグリップにおけるある種の物理的制約は、挿入された後、代替ArtcardがCCDに対して挿入時の最初の角度で保たれることを保証する。好ましくは、この回転角度は、図63に示されるように最大で1度である。読み出しプロセス中にジッタ及びモーターのガタによって角度が僅かに外れる可能性はあるが、基本的に1度の限界内に収まると考えられる。
【0391】
代替Artcardの物理的寸法は86mm×55mmである。1度の回転は、86mmがCCDの下を通過したとき、カードの実効高さを1.5mm(86sin1°)だけ長くするので、必要なCCD長に影響を与える。
【0392】
代替Artcardの読み出しに対する1度の回転の影響は、CCDからの1本の走査線が代替Artcardからの多数の異なるドット列を含むことである。これは、画素の列に対するドットのドリフトを表した図63に拡大された形態で示されている。同図では誇張されているが、実際のドリフトは、57画素毎に最大で1画素列になる。
【0393】
代替Artcardが回転していないとき、単一のドット列は3本の画素走査線によって読むことができる。代替Artcardの回転が大きくなると、局部的な影響が増加する。読み出されるドットの数が増加すると、回転の影響が加わる時間が長くなる。これらの要因のうちのいずれかが増大すると、代替Artcard上の単一列から所定のドットの組を得るために読み出す必要がある画素走査線の数が増加する。以下の表は、特定の代替Artcard構造において単一のドット列のために必要な画素走査線の本数を示している。
【0394】
【表51】
Figure 2004536736
代替Artcardの全体を読むため、87mm(86mmと1°の回転による1mmの和)を読む必要がある。4800dpiの場合、これは、16252列の画素列に相当する。
【0395】
CCD(又はその他のリニアイメージセンサ)の長さ
CCD自体の長さは、
−代替Artcardの物理的高さ(55mm)
−物理的な代替Artcardの挿入時の垂直方向動き(1mm)
−最大1°の挿入時回転(86sin1°=1.5mm)
に適合しなければならない。
【0396】
これらの要因を組み合わせると、全体の長さは57.5mmになる。
【0397】
代替Artcardリーダーの代替ArtcardイメージセンサCCDが4800dpiで走査するとき、1本の走査線は10866画素である。簡単のため、この数字を11000画素に切り上げる。代替Artcardのアクティブ領域の高さは3208ドット、即ち、9624画素である。データ領域の高さは384ドット、即ち、1152画素である。
【0398】
DRAMサイズ
代替Artcardの読み出し及び復号化に必要なメモリ量は、理想的には最低限に削減される。典型的な代替Artcardリーダーの配置は、内蔵型システムであり、その場合、メモリリソースは貴重である。このことは、回転の影響によって更に重大な問題になる。上述の通り、代替Artcardの回転が大きくなると、原ドットを効率的に復元するために要する走査線の数が増加する。
【0399】
アルゴリズムの複雑さと、ユーザの認知する遅延と、頑強性と、メモリ使用量との間にはトレードオフがある。最も簡単なリーダーアルゴリズムの一つは、単に代替Artcardの全体を走査し、次に、リアルタイムの制約無しに全データを処理することであろう。これは、大規模のメモリ容量を必要とするだけではなく、代替Artcardの読み出しプロセスと並行に行われるリーダーアルゴリズムよりも長時間を要するであろう。
【0400】
代替Artcardの読み出し及び復号化のために実際に必要なメモリ量は、符号化されたデータを、少量のスクラッチ空間(1から2KB)と共に保持するために必要なスペースの量の2倍である。1600dpiの代替Artcardの場合、これは、4MBのメモリ必要量を意味する。実際のメモリ使用量は以下のアルゴリズムの説明で詳述される。
【0401】
転送レート
DRAM帯域幅の前提条件は、タイミングを考慮するために行う必要があり、特に、代替Artcardリーダーは、典型的に、内蔵型システムの一部であるので、アルゴリズム設計にある程度の影響を与える。
【0402】
Rambus Incの''Direct Rambus Technology Disclosure'', Oct 1997に記載されているような標準的なRambus Direct(ラムバスダイレクト)RDRAMアーキテクチャが想定され、ピークデータ転送レートは1.6GB/秒である。75%の効率(容易に実現できる)を想定すると、平均で1.2GB/秒のデータ転送レートが得られる。したがって、16バイトのブロックにアクセスするために要する平均時間は12nsである。
【0403】
汚染データ
物理的に破損した代替Artcardがリーダーに挿入されることがあり得る。代替Artcardは、傷を付けられるか、汚れ若しくはごみによって歪みを生じるかもしれない。代替Artcardリーダーが全てを完全に読み出すことは想定できない。汚染データの影響は、ブラー効果によって更に悪化させられる。なぜならば、汚染データが周囲のきれいなドットに影響を与えるからである。
【0404】
ブラー効果環境
ブラー効果は、次の2種類の経路で代替Artcard読み取り環境に組み込まれる:*代替ArtcardからCCD間での距離の特性を原因とする自然的なブラー効果;
*代替Artcardの歪み。
【0405】
代替Artcard像の自然的なブラー効果は、CCDから検出されたデータのオーバーラップが存在するときに生じる。ブラー効果は役に立つ場合がある。なぜならば、ブラー効果は、検出データに高周波数が存在しないこと、及びCCDによって失われたデータが存在しないことを保証するからである。しかし、CCD画素によって覆われたエリアが非常に広い場合、非常に多くのブラー効果が現れ、データを復元するために要するサンプリングの条件が充たされない。図64は検出データの重なり合いの略説明図である。
【0406】
別の形態のブラー効果は、代替Artcardが熱ダメージのために僅かに歪むときに生じる。垂直方向の次元に歪みがあるとき、代替ArtcardとCCDの間の距離は一定ではなく、ブラー効果のレベルはそのエリアの中で変化する。
【0407】
黒色ドット及び白色ドットは、代替Artcardがブラー効果のある読み出し環境で最良のダイナミックレンジを与えるように選択された。ブラー効果は、所与のドットが黒色であるか、又は白色であるかを決定するときに問題を生じる。
【0408】
ブラー効果が増大すると、所与のドットは周辺ドットから受ける影響が大きくなる。その結果として、特定のドットのダイナミックレンジは減少する。白色ドット及び黒色ドットの各々が起こり得るあらゆるドットの組によって囲まれる場合を考える。9個のドットにブラー効果が現れ、中央ドットがサンプリングされる。図65は、黒色ドット及び白色ドットに対して得られた中央ドット値の分布の説明図である。
【0409】
この図は、典型的なブラー効果を意図している。0から約180までの曲線1140は黒色ドットのレンジを示す。75から250までの曲線1141は白色ドットのレンジを示す。しかし、ブラー効果が大きくなると、2本の曲線はレンジの中央の方へ向かってシフトし、交わるエリアが増大し、所与のドットが黒色であるか、白色であるかを判定することがより困難になる。交わりの中心点での画素値は曖昧であり、ドットが黒色である可能性と白色である可能性は等しい。
【0410】
ブラー効果が増大すると、読み出しビット誤りの確率が増加する。都合良く、リード・ソロモン復号化アルゴリズムは、t個のシンボル誤りまで正常にこれらに対処することができる。図65は、特定のシンボル誤り率の場合に復元できない代替Artcardのリード・ソロモンブロックの予測数のグラフである。リード・ソロモン復号化方式が優れた性能を示し、次に、実質的に低下することに注意すべきである。リード・ソロモンブロックの複製が無い場合、1ブロックに誤りが生じるだけでデータを復元できなくなる。勿論、ブロック複製を行った場合、代替Artcard復号化の機会が増加する。
【0411】
図66は、誤りのあるリード・ソロモンブロックの個数に対応するシンボル(バイト)誤りだけを示している。対処可能なブラー効果の量と、カードに生じたダメージの量との間にはトレードオフが存在する。全ての誤り検出及び訂正はリード・ソロモンデコーダによって行われるので、リード・ソロモンデータブロック毎に対処可能な誤りの個数は有限である。ブラー効果によって取り込まれる誤りが増加すると、代替Artcardのダメージによる誤りの中で対処可能な誤りの個数は減少する。
【0412】
代替Artcard復号化の概要
上述の通り、ユーザが代替Artcardを代替Artcard読み取りユニットに挿入するとき、モーター輸送は、理想的には、代替Artcardを運び、モノクロリニアCCDイメージセンサの傍らを通過させる。カードは次元毎に印刷された解像度の3倍の解像度でサンプリングされる。代替Artcard読み取りハードウェア及びソフトウェアは、1度までの回転と、モーター輸送によって生じるジッタ及び振動と、代替ArtcardからCCDまでの距離の変動によって生じるブラー効果を補正する。データのデジタルビットイメージが、以下に説明される複雑な方法によって、サンプリングされた像から抽出される。リード・ソロモン復号化は、代替Artcard上の生データの25%までの任意に分布したデータコラプションを訂正する。約1MBの訂正データが1600dpiカードから抽出される。
【0413】
復号化に関連するステップは図67に示されるようなステップである。
【0414】
復号化プロセスに必要なステップは、
*印刷された解像度の3倍の解像度で代替Artcardを走査する(例えば、4800dpiで1600dpiの代替Artcardを走査する)ステップ1144と、
*カード上で走査されたドットからデータビットマップを抽出するステップ1145と、
*代替Artcardが逆向きに挿入された場合に、ビットマップを反転するステップ1146と、
*符号化データをスクランブル解除するステップ1147と、
*ビットマップからのデータをリード・ソロモン復号化するステップ1148と、
である。
【0415】
アルゴリズムの概要
フェーズ1−リアルタイム ExtractingBitImage
利用可能なメモリ(4MB)と、1600dpiの代替Artcardの走査された全画素を保持するための必要メモリ(172.5MB)との簡単な比較によって、カードが複数回読み出されない限り(現実的な選択肢ではない)、画素データからのビットマップの抽出は、代替ArtcardがCCDの傍を通過させられる間に、オンザフライ方式でリアルタイムに実行する必要がある。このフェーズでは、二つのタスク、即ち、
*代替Artcardを4800dpiで走査するタスク
*カード上で走査されたドットからデータビットマップを抽出するタスク
を実行しなければならない。
【0416】
ビットイメージの回転及びスクランブル解除は、ビットイメージ全体が抽出されるまで行えない。したがって、抽出されたビットイメージを保持するためにメモリ領域を割り当てることが必要である。ビットイメージは、2MBの範囲内で容易に収容され、抽出プロセスで使用するための2MBが確保される。
【0417】
CCDからの現在の走査線だけを調べる間にビットイメージを抽出するのではなく、窓として機能するバッファを代替Artcardに割り付け、最新のN本の走査線読み出しを記憶することが可能である。メモリ必要量は、代替Artcardの全体がこのようにして記憶されることは許容しないが(172.5MBが必要になるであろう)、190画素列を記憶するため2MBを割り付けることは(各走査線は11000バイト以上を必要としない)、ExtractingBitImageプロセスを簡単化させる。
【0418】
したがって、4MBメモリの使用法は以下の通りである:
*抽出されたビットイメージのための2MB;
*走査された画素のための〜2MB;
*フェーズ1のスクラッチデータのために1.5KB(アルゴリズムによる要求次第)。
【0419】
フェーズ1に要する時間は1.5秒である。なぜならば、この時間は、代替ArtcardがCCDの傍を通過し、物理的にロードされるために要する時間であるからである。
【0420】
フェーズ2−ビットイメージからのデータ抽出
ビットイメージが抽出されると、ビットイメージはスクランブル解除され、場合によっては180°回転させることが必要である。ビットイメージは次に復号化される。フェーズ2は、Artcardの動きが停止している点でリアルタイム必要条件が無く、ユーザが時間経過を認識することだけが問題である。したがって、フェーズ2は、代替Artcardを復号化する残りのタスクに関係する。即ち、
*ビットイメージを再編成し、代替Artcardが逆向きに挿入された場合には反転する;
*符号化されたデータをスクランブル解除する;
*ビットイメージからのデータをリード・ソロモン復号化する。
【0421】
フェーズ2への入力は2MBビットイメージバッファである。スクランブル解除及び回転は、その場では実行し得ないので、第2の2MBバッファが必要である。フェーズ1で走査された画素を保持するため使用される2MBバッファは不要になっているので、回転させられたスクランブル無しデータを記憶するため使用可能である。
【0422】
リード・ソロモン復号化タスクは、スクランブル無しのビットイメージを取得し、それを910082バイトに復号化する。復号化は元の位置で実行可能であるが、指定された別の場所で実行してもよい。復号化プロセスは、補助的なメモリバッファを必要としない。
【0423】
したがって、4MBのメモリの使用法は以下の通りである:
*(フェーズ1からの)抽出されたビットイメージのための2MB;
*スクランブル無しの、回転された可能性のあるビットイメージのための〜2MB;
*フェーズ2のスクラッチデータのための<1KB(アルゴリズムによる要求次第)。
【0424】
フェーズ2に要する時間はハードウェアに依存し、リード・ソロモン復号化のために要する時間によって制限される。LSIロジックのL64712のような専用コア、又は等価的なCPU/DSPの組み合わせを使用することにより、フェーズ2は0.32秒を要することが推定される。
【0425】
フェーズ1− ExtractingBitImage
これは、アルゴリズムのリアルタイムフェーズであり、CCDによって走査されたような代替Artcardからビットイメージを抽出することに関連する。
【0426】
図68に示されるように、フェーズ1は、二つの非同期的なプロセスストリームに分解することができる。そのうちの第1のストリームは、単に、CCDからの代替Artcardの画素をリアルタイムで読み出し、その画素をDRAMへ書き込む。第2のストリームは、画素を参照し、ビットを抽出する。第2のプロセスストリームは、それ自体が二つのプロセスに分解される。第1のプロセスは、大域的なプロセスであり、代替Artcardのスタートの位置検出に関する。第2のフェーズはExtractingBitImage固有である。
【0427】
図69は、データ/プロセスの観点からのデータフロー説明図である。
【0428】
タイミング
1600dpi代替Artcardの全体に対して、最大で16252画素列を読み出すことが必要である。代替Artcardの全体に対する合計時間が1.5秒である場合、これは、様々なプロセスの経過中に、1画素列当たりの最大時間が92296nsであることを意味する。
【0429】
プロセス1−CCDからの画素読み出し
CCDは、代替Artcardを4800dpiで走査し、1列当たりに11000個の1バイト画素を生成する。このプロセスは、CCDからデータを取得し、それをDRAMへ書き込むだけであり、DRAMから画素データを読み出している他のプロセスからは完全に独立している。図70には関連したステップが示されている。
【0430】
画素は、190列の全画素列を保持し得る2MBバッファに連続して書き込まれる。バッファは、常に、最近に読み出された190列を保持する。その結果として、画素データを読み出そうとするプロセス(例えば、プロセス2及びプロセス3)は、最初に、所定の列が探索する場所を知る必要があり、次に、要求されたデータが実際にバッファ内に存在することが確実であるように十分に高速でなければならない。
【0431】
プロセス1は、現在のCurrentScanLineが他のプロセスから利用できるようにさせるので、他のプロセスは、未だ読み出されていない走査線からの画素へのアクセスを試みないことを保証することができる。
【0432】
単一のデータ列(11000バイト)をDRAMへ書き出すために要する時間は、11000/16*12=8256nsである。
【0433】
プロセス1は、したがって、利用可能なDRAM帯域幅の9%未満(8256/92296)しか使用しない。
【0434】
プロセス2−代替Artcardのスタート検出
このプロセスは、走査された代替Artcard上のアクティブエリアの位置検出と関連している。このステージへの入力はDRAM(プロセス1によってそこに収容された)からの画素データである。出力は、代替Artcard上の最初の8個のデータブロックに対する境界の組であり、プロセス3への入力として要求される。プロセス3の上位レベル概要が図71に示されている。
【0435】
代替Artcardは、挿入時に垂直方向の動きが1mmある。1度の回転によって、更に、1.5mm(86sin1°)の垂直方向の動きが生じる。その結果として、全部で垂直方向の動きは2.5mmである。1600dpiのとき、これは、約160ドットの動きに相当する。単一のデータブロックの高さは394ドットに過ぎないので、この動きは、データブロックの半分よりも少し少ない。データブロックが存在する場所をより良く推定するためには、代替Artcard自体を検出しなければならない。
【0436】
したがって、プロセス2は、
*代替Artcardのスタートを位置検出する部分と、もし、検出されたならば、
*代替Artcardのスタートに基づいて最初の8個のデータブロックの境界を計算する部分と、
を含む。
【0437】
代替Artcardのスタート位置検出
代替Artcardエリアの外側で走査された画素は黒色である(表面は黒色のプラスチック、又はその他の非反射型表面でもよい)。代替Artcardエリアの境界は白色である。画素列を1列ずつ処理し、画素を黒色又は白色の何れかに関してフィルタ処理するならば、黒色から白色への変化点は、代替Artcard上のスタートを特徴付ける。最高レベルのプロセスは以下の通りである:
Figure 2004536736
ProcessColumn関数は単純である。走査された列の二つのエリアからの画素は、それらが黒色又は白色のどちらであるかを判定するため閾値フィルタに通される。一定数の白色画素を待ち、所定の個数が検出されたとき、代替Artcardのスタートを報せることが可能である。画素列を処理するロジックは以下の疑似コードに示されている。列中に代替Artcardが検出されなかった場合、0が返される。さもなければ、検出された位置の画素数が返される:
Figure 2004536736
Figure 2004536736
データブロック境界の計算
このステージでは、代替Artcardが検出されている。代替Artcardの回転に応じて、代替Artcardの上部又は代替Artcardの下部の何れかが検出されている。プロセス2の第2ステップはどちらが検出されたかを判定し、フェーズ3のためのデータブロック境界を適切にセットする。
【0438】
フェーズ3を見ると、フェーズ3はデータブロックセグメント境界に関して動作することがわかる。各データブロックは、データブロックのデータ領域を位置検出するためにターゲットを探索すべき場所を決定するため、StartPixel及びEndPixelを含む。
【0439】
画素値がカードの上半分に存在する場合、それを第1のStartPixel境界としてそのまま使用することができる。画素値がカードの下半分に存在する場合、画素値が最後のセグメントのEndPixel境界になるように逆行させることが可能である。代替Artcardのデータサイズの幅で前進又は後退し、各セグメントに適切な境界をセットする。これにより、代替Artcardからのデータ抽出を開始する準備が整う:
Figure 2004536736
MaxPixel値はプロセス3で定義され、SetBounds関数は、0及びMaxPixelに対するStartPixel及びEndPixelクリッピングをセットするだけである。
【0440】
プロセス3−画素からのビットデータ抽出
これは代替Artcardリーダーアルゴリズムの心臓部である。このプロセスは、CCD画素データからのビットデータ抽出処理に関係する。このプロセスは、本質的に、プロセス2によって作成され、プロセス3によって維持されたスクラッチ情報に基づいて、画素データからビットイメージを作成する。このプロセスの上位レベル概要は図72に示されている。
【0441】
単に代替Artcardの画素列を読み出し、どの画素がどのデータブロックに属しているかを判定するのではなく、プロセス3は、その逆の作用をする。プロセス3は、所定のデータブロックの画素を探索すべき場所がわかっている。プロセス3は、これを行うため、論理的な代替Artcardを8個のセグメントに分割する。各セグメントは、図73に示されるように8個のデータブロックを含む。
【0442】
図示されたセグメントは論理的な代替Artcardと一致する。物理的に、代替Artcardはある量だけ回転させられている可能性が高い。セグメントは、論理的な代替Artcard構造に固定されたままであるため、回転に依存しない。あるセグメントは、以下の2状態のうちの一方をとり得る:
*LookingForTaregets:この状態では、このセグメントの正確なデータブロック位置は未だ決定されていない。ターゲットは、セグメント境界によって指定された境界内の画素列データを走査することによって位置検出されている。ターゲット、並びに、黒色及び白色のためにセットされた境界を用いてデータブロックが位置検出されると、状態は、ExtractingBitImageへ変化する;
*ExtractingBitImage:この状態では、データブロックは正確に位置検出されており、データビットは同時に1ドット列ずつ抽出され、代替Artcardビットイメージに書き込まれる。データブロッククロックマークの追跡は、回転とは無関係に正確なドット復元を与えるので、セグメント境界は無視される。データブロック全体が抽出されると、新しいセグメント境界が、現在位置に基づいて次のデータブロックに対して計算される。状態は、LookingForTargetsへ変化する。
【0443】
このプロセスは、各領域から8個ずつの64データブロックの全てが抽出されたときに終了する。
【0444】
各データブロックは595のデータ列により構成され、各データ列は48バイトである。好ましくは、データブロック用の2個の方位列がそれぞれ48バイト毎に抽出され、全部で1データブロック当たりに28656バイトが抽出される。簡単のため、2MBのメモリを64×32Kのチャンクに分割することができる。所定のセグメントのn番目のデータブロックは、
SrartBuffer + (256k*n)
で表される場所に格納される。
【0445】
セグメントのデータ構造
8個のセグメントの各々は、データ構造が関連付けられる。各セグメントを定義するデータ構造は、スクラッチデータエリアに格納される。その構造は以下の表に列挙することができる。
【0446】
【表52】
Figure 2004536736
プロセス3の上位レベル
プロセス3は、各セグメントに対して繰り返して、セグメントの現在状態に依存して単一ラインの処理を実行するだけである。擬似コードは以下のように簡潔である:
Figure 2004536736
プロセス3は、指定された時間が経過しても終了しない場合には、外部制御プロセスによって停止される必要がある。これは、データが抽出できなかった場合に限られるであろう。簡単な仕組みは、プロセス1が代替Artcardの読み出しを終了した後にカウントダウンを開始する仕組みである。プロセス3がその時間までに終了しなかった場合、代替Artcardからのデータは復元不可能である。
【0447】
CurrentState LookingForTargets
ターゲットは、同時に1画素列ずつ画素の列を読み出すことによって検出されるのであって、(StartPixelとEndPixelの間にある)所定の画素のバンド内のドットを検出することによって画素のある種のパターンが検出されるのではない。画素列は、全てのターゲットが検出されるか、又は指定された数の列が処理されるまで、同時に1列ずつ処理される。その時点で、ターゲットを処理することが可能であり、データはクロックマークを用いて位置検出される。状態は、データを抽出する時であることを示すためExtractingBitImageに変更される。十分な数の有効ターゲットを位置検出できなかった場合、データブロックは無視され、失敗したデータブロック内の列を確実にスキップし、次のデータブロック内でターゲットを探索するプロセスを再開する。これは以下の擬似コードで表すことができる:
Figure 2004536736
Figure 2004536736
ProcessPixelColumn 関数
各画素列は、ターゲットを識別するある種の画素のパターンを探索するため、指定された境界内(StartPixelとEndPixelの間)で処理される。単一ターゲット(ターゲット番号2)の構造は、既に図54に示されている通りである。
【0448】
画素の観点から、ターゲットは、以下の事項によって識別することができる:
*左の黒色領域:これは、多数の隣接した黒色画素により構成された多数の画素列であり、ターゲットの最初の部分を構築する;
*ターゲット中心:これは、更なる黒色列の中心にある白色領域である;
*ターゲット番号:これは、黒色で囲まれた白色領域であり、白色領域はその長さによってターゲット番号を定義する;
*第3の黒色領域:これは、ターゲット番号の後の二つの黒色ドット領域である。
【0449】
要求されるプロセスの概要は図74に示されている。
【0450】
識別は黒色又は白色画素だけに基づいているので、各列からの画素1150は、黒色又は白色を検出するためフィルタ1151を通され、次に、ランレングス符号化1152される。ランレングスは、次に、状態機械1153へ送られ、状態機械は、最後の3個のランレングスと、最後から4番目の色を取得する。これらの値に基づいて、ターゲット候補は、識別ステージの各々を通過する。
【0451】
最大及び最小収集プロセスGatherMin&Max1155は、セグメントの処理中に見つかった最小値及び最大値を保持するだけである。これらは、ターゲットが位置検出されたとき、BlackMax、WhiteMin、及びMidRange値をセットするため使用される。
【0452】
各セグメントは、ターゲットの探索においてターゲット構造体の組を保持する。ターゲット構造体自体はメモリ内を動き回らないが、幾つかのセグメント変数はこれらのターゲット構造体へのポインタのリストを指示する。これらの3個のポインタリストを再度示す。
【0453】
【表53】
Figure 2004536736
これらのリストポインタの各々と関連したカウンタ、即ち、TargetsFound、PossibleTargetCount、及びAvailableTargetCountが存在する。
【0454】
代替Artcardがロードされる前に、TargetsFound及びPossibleTargetCountは0にセットされ、AvailableTargetCountは28(ターゲット境界の最小サイズは40画素であり、データエリアは約1152画素であるので、調査中のターゲット構造体候補の最大数)にセットされる。ターゲットポインタレイアウトの一例は図75に示される。
【0455】
新しいターゲット候補が検出されるとき、それらは、AvailableTargetsリスト1157から取得され、ターゲットデータ構造体は更新され、この構造体へのポインタはPossibleTargetsリスト1158に追加される。ターゲットが完全に検証されたとき、そのターゲットはLocatedTargetsリスト1159へ追加される。ターゲット候補が最終的にターゲットではないことが判明した場合、ターゲット候補はAvailableTargetsリスト1157へ戻される。この結果として、いつでも循環している28個のターゲットポインタが常に存在し、リストの間を移動している。
【0456】
ターゲットデータ構造体1160は以下の形式をとり得る。
【0457】
【表54】
Figure 2004536736
ターゲット検出モジュール1162(図74)内のProcessPixelColumn関数は、全てのランレングスを一つずつ調べ、(StartPixelによって)ランを既存のターゲット候補と比較するか、又は今までに知られていないターゲット候補が検出された場合に、新しいターゲット候補を作成する。全てのケースにおいて、比較はS0.colorが白色であり、S1.colorが黒色である場合に限り行われる。
【0458】
次に、ProcessPixelColumnの擬似コードを示す。第1のターゲットが肯定的に識別された場合、ターゲットをチェックすべき最後の列は、そこから最大距離の範囲内にあるとして決定される。1°の回転がある場合、最大距離は18画素列である:
Figure 2004536736
Figure 2004536736
AddToTargetはターゲット検出モジュール内の関数であり、特定のランを所与のターゲットに加算することができるかどうかを判定する:
*ランがターゲットの開始位置の許容範囲内に入るならば、そのランは現在のターゲットと直接的に関連付けられるので、それに適用することが可能である;
*ランがターゲットの前で始まる場合、既存のターゲットが依然としてOKであり、そのランとは関係がないと想定する。したがって、ターゲットはそのままの状態で残され、返値FALSEは、ランが適用されなかったことを呼び出し元へ通知する。呼び出し元は、引き続いてランをチェックして、ランがその固有の全く新しいターゲットを開始するかどうかを調べる;
*ランがターゲットの後で始まる場合、そのターゲットが候補ターゲットではなくなったと考える。状態は、NotATargetに変更され、返値TRUEが返される;
ランをターゲットに適用すべき場合、特別の動作が現在の状態と、S1、S2及びS3のランの組に基づいて実行される。AddToTargetの擬似コードは以下の通りである:
Figure 2004536736
画素ランのタイプはDeterminRunTypeにおいて以下のように識別される。
【0459】
【表55】
Figure 2004536736
状態推定手続EvaluateStateは現在の状態及びランタイプに依存して動作する。
【0460】
その動作は以下に表形式で示される。
【0461】
【表56】
Figure 2004536736
ターゲット処理
位置検出されたターゲット(LocatedTargetsリスト内)は、位置検出された順序で記憶される。代替Artcardの回転に依存して、これらのターゲットは、画素昇順又は画素降順である。その上、ターゲットから復元されたターゲット番号は、誤りがあるかもしれない。また、間違ったターゲットを復元したかもしれない。クロックマーク推定量が取得できる前に、ターゲットは、無効ターゲットが確実に廃棄されるように処理する必要があり、有効ターゲットは、間違っているならばターゲット番号が修復される(例えば、ごみのために破損されたターゲット番号)。二つの主要なステップが関連している:
*ターゲットを画素昇順にソートするステップ;
*誤りのあるターゲット番号を見つけ、修復するステップ。
【0462】
最初のステップは簡単である。ターゲット検索の性質は、データが画素昇順又は画素降順の何れかで常に記憶されるべきことを意味する。簡単なスワップソートは、6個のターゲットが既に正しくソートされているならば、最大で14回の比較がスワップ無しに行われる。データがソートされていない場合、14回の比較は3回の3回のスワップと共に行われる。以下の擬似コードはソーティングプロセスを示す:
Figure 2004536736
誤ったターゲット番号を位置検出し修復することは、多少複雑になる。順番に、検出されたN個のターゲットの各々が正しいと仮定される。他のターゲットは、この「正しい」ターゲットと比較され、TargetNが正しい場合に変更を必要とするターゲットの個数がカウントされる。変更の回数が0であるならば、全てのターゲットは既に正しい筈である。さもなければ、他のターゲットに対して要求する変更の回数が最も少ないターゲットが変更の基準として使用される。所与のターゲットのターゲット番号及び画素位置が、「正しい」ターゲットの画素位置及びターゲット番号と比較されたときに、相互に関連しないならば、変更が登録される。この変更は、ターゲットのターゲット番号の更新を意味し、或いは、ターゲットの削除を意味する。上昇するターゲットは、(既にソートされているので)昇順の画素を有すると仮定することができる:
Figure 2004536736
Figure 2004536736
多くの場合、この関数は bestChanges = 0 で終了しており、これは変更が要求されないことを意味している。そうでない場合、変更を適用する必要がある。変更を適用する機能は、targetNumber との比較までは、(上述の擬似コードにおいて)変更をカウントすることと同一である。変更アプリケーションは以下の通りである:
Figure 2004536736
変更ループの最後に、LocatedTargetsリストをコンパクトにして、全てのヌルターゲットを削除する必要がある。
【0463】
この手続の最後に、数個のターゲットが存在する可能性がある。残っている全てのターゲット(少なくとも2個のターゲットが必要である)は、クロックマーク及びデータ領域の位置を検出するため使用される。
【0464】
図55に示されるように、上側領域の第1のクロックマークドット1126は、第1のTarget1124の中心から55ドット離れている(これはターゲット中心間の距離と同じである)。クロックマークドットの中心は更に1ドット遠ざかり、黒色境界線1123は第1のクロックマークドットから更に4ドット離れている。下側領域の第1のクロックマークドットは、上側領域の第1のクロックマークドット1126から正確に7ターゲットの距離(7×55ドット)離れている。
【0465】
Target1及び6が見つかっていると仮定し得ないので、最も上側のターゲット及び最も下側のターゲットを使用する必要があり、どのターゲットが使用されているかを判定するためターゲット番号を使用する。この時点で少なくとも2個のターゲットが必要である。その上、ターゲット中心は、実際のターゲット中心の推定値に過ぎない。それは、ターゲット中心をより正確に位置検出することである。ターゲットの中心は、黒色に囲まれた白色である。したがって、画素次元と列次元の両方で極大を見つけることが望ましい。これには、連続した画像を再構築することが必要である。なぜならば、最大値が整数バウンダリ(本例の推定値)に厳密に合わせられる可能性は殆ど無いからである。
【0466】
連続した画像をターゲットの中心の周りに構築する前に、2個のターゲット中心のより良い推定値を作成することが必要である。既存のターゲット中心は、実施には、ターゲット中心の境界ボックスの左上座標である。ターゲットの中心を画成するエリアを見つけるため各画素を一つずつ調べ、最高値を有する画素を検出することは、簡単なプロセスである。同じ最高画素値を有する画素は2個以上存在する場合もあるが、中心値の推定には1個の画素があればよい。
【0467】
擬似コードは簡単であり、2個のターゲットの各々に対して実行される:
Figure 2004536736
このプロセスの最後に、ターゲット中心座標は、実際の中心の1画素の範囲に収まるべきターゲットの最も白い画素を指示する。ターゲット中心のより正確な位置を構築するプロセスには、推定されたターゲット中心の両側に3個ずつで、ターゲットの7個の走査線スライスの連続信号を再構築することが含まれる。検出された7個の最大値(上記の画素スライスの各々につき1個ずつ)は、列次元において連続信号を再構築し、次に、その次元における最大値の位置を検出するために使用される:
Figure 2004536736
FindMaxは、元の1次元信号に基づくサンプル点を再構築し、最大値の位置及び検出された最大値を返す関数である。使用される信号再構築/再サンプリング方法は、図76に示されるように、Lanczos3窓sinc関数である。
【0468】
Lancoz3窓sinc関数は、再構築された次元から、推定位置Xの周りに集められた、即ち、X−3、X−2、X−1、X、X+1、X+2、X+3にある7(画素)サンプルを取得する。X−1からX+1の間に、0.1の間隔で点を再構築し、最大となる点を決定する。最大値である位置が新しい中心になる。カーネルの性質上、XとX+1の間の点に対してコンボリューションカーネルに必要なエントリーは6個だけである。X−1からXに対して6個の点と使用し、XからX+1に対して6個の点を使用し、X−1からX+1間での画素値を得るために全体として7点が必要である。なぜならば、要求された画素の一部は一致するからである。
【0469】
最も上側のターゲットから最も下側のターゲットまでに正確な推定値が与えられた場合、上側領域及び下側領域に対して第1のクロックマークドットの位置を以下のようにして計算することができる:
Figure 2004536736
これにより第1のクロックマークドットが得られる。列位置は、クロックマークの中心へ到達するため、データエリアから更に1ドット遠くへ動かすことが必要である。また、画素位置は、境界線の中心へ到達するため、更に4ドット遠ざける必要がある。deltaColumn及びdeltaPixelの疑似コード値は、55ドットの距離(ターゲット間の距離)に基づいているので、これらのデルタは、クロックマーク座標に適用される前に、それぞれ、1/55及び4/55によって縮小しなければならない。これは以下の通りに表現される:
kDeltaDotFactor = 1/DOTS_BETWEEN_TARGET_CENTRES
deltaColumn *= kDeltaDotFactor
deltaPixel *= 4 * kDelteDotFactor
UpperClock.pixel -= deltaPixel
UpperClock.column -= deltaColumn
LowerClock.pixel += deltaPixel
LowerClock.column += deltaColumn
UpperClock及びLowerClockは、ターゲットの中心とちょうど合致した第1のクロックマークに対する有効クロックマーク推定値である。
【0470】
黒色及び白色画素/ドットレンジの設定
データをデータエリアから抽出する前に、黒色及び白色ドットの画素レンジを確認する必要がある。LookingForTaregets中に現れた最小値及び最大値は、それぞれ、WhiteMin及びBlackMaxに保存されているが、これらは、データ抽出に関してこれらの変数の有効な値を表現していない。それらは、単に、記憶の便宜上、使用されるだけである。以下の疑似コードは、出現した最小画素及び最大画素に基づいてWhiteMin及びBlackMaxの良い値を獲得する方法を示している:
MinPixel = WhiteMin
MaxPixel = BlackMax
MidRange = (MinPixel + MaxPixel)/2
WhiteMin = MaxPixel - 105
BlackMax = MinPixel + 84
CurrentState = ExtractingBitImage
ExtractingBitImage状態は、データブロックが、ターゲットによって既に正確に位置検出された状態であり、ビットデータは、同時に1ドット列毎に抽出中であり、代替Artcardビットイメージに書き込まれている。データブロッククロックマーク/境界の追跡によって、回転とは無関係に正確なドット復元が行われ、セグメント境界は無視される。データブロック全体(595個のデータ列と2個の方位列を併せて、48バイトずつの597列)が抽出されると、新しいセグメント境界が現在位置に基づいて次のデータブロックのために計算される。この状態は、LookingForTargets状態に変更される。
【0471】
所与のドット列の処理には以下の二つのタスクが必要である:
*第1のタスクは、クロックマークを用いて特定のデータのドット列の位置を検出することである;
*第2のタスクは、ドット列を追跡して、1ドットにつき1ビットずつビット値を集めることである。
【0472】
これらの二つのタスクは、列のデータが代替Artcardから読み出され、DRAMへ転送された場合に限り行うことができる。これは、プロセス1がどの走査線まで到達しているかをチェックし、それをクロックマーク列と比較することによって判定される。ドットデータがDRAMに存在するとき、クロックマークを更新し、クロックマークを次のドット列に対する推定値へ進める前に、列からデータを抽出することが可能である。このプロセスの概要は、以下の疑似コードに示されている。具体的な関数については後述する:
Figure 2004536736
ドット列の位置検出
所定のドット列は、ドットを読み出し、データを抽出する前に、位置検出されなければならない。これは、データブロックの上側及び下側境界に沿ってクロックマーク/境界線を追跡することによって実現される。位相ロックループと等価的なソフトウェアが使用され、たとえクロックマークが破損されていても、クロックマーク位置の良い推定が確実に行われる。図77は、例示的なデータブロックの左上の説明図であり、そのデータブロックのコーナーには、ターゲットエリアの外側へ広がる3ドット高のクロックマーク1166と、白色行と、黒色境界線と、が現されている。
【0473】
初期的に、第1の黒色クロックマークの位置の推定値が(ターゲット位置に基づいて)提供される。正確な垂直位置(画素)を得るため黒色境界が使用され、正確な水平位置(列)を得るため、例えば、クロックマーク1166が使用される。これらは、UpperClock及びLowerClockの位置に反映される。
【0474】
クロックマーク推定値が取得され、その近傍の画素を調べることにより、連続した信号が再構築され、正確な中心が決定される。2次元をクロックマークと境界に分解しているので、これは、簡単な1次元プロセスであり、2回実行する必要がある。しかし、これは、位置合わせの相手側の黒色クロックマークが存在するとき、2ドット列について1回だけ行われる。白色クロックマークの場合、単に推定値を使用し、推定値はそのままにしておく。或いは、(常に存在するので)ドット列毎に境界に基づいて画素座標を更新してもよい。実際上、(黒色クロックマークを含む)1列おきに両方の座標を更新すれば十分である。なぜならば、この動作中の解像度は非常に精細だからである。したがって、このプロセスは次のようになる:
Figure 2004536736
所定の許容度(MAX_CLOCKMARK_DEVIATION)を上回る偏差が存在する場合、検出された信号は無視され、推定値からの最大許容度に収まる偏差だけが許容される。この点に関して、この機能はフェーズロックループの機能と類似している。したがって、DetermineAccurateUpperDotCenter関数は以下の疑似コードによって実現される:
Figure 2004536736
また、DetermineAccurateLowerDotCenter関数は、境界からクロックマークまでの向きが負方向である(+3ドットではなく、−3ドットである)点を除くと同様である。
【0475】
GetAccuratePixel及びGetAccurateColumnは、座標が与えられた場合に、一次元だけの観点で正確なドット中心を決定する関数である。正確なドット中心の決定は、信号を再構成し、最小信号値が検出された位置を見つけるプロセスである(これは、ターゲット中心は黒色ではなく白色であるために、信号の最大値の位置を検出することによりターゲット中心の位置を検出するプロセスとは異なる)。このアプリケーションの信号再構成/再サンプリングのために選択された方法は、図76を参照して説明したようなLanczos3窓sinc関数である。
【0476】
クロックマーク又は境界は何らかの方法で、おそらくは、ひっかきによって、傷つけられている可能性がある。再サンプリングによって得られた新しい中心値と推定値との差が許容量を超える場合、中心値は最大許容量だけ動かされる。それが無効な位置である場合、データ回復に使用するために十分に接近しているはずであり、更なるクロックマークはその位置に再度合わせられる。
【0477】
第1のデータドットの中心と後続のドットへのデルタの決定
正確なUpperClock及びLowerClock位置が決定されると、第1のデータドットの中心(CurrentDot)と、列内の後続のドットへ進めるためにその中心位置に加算されるべきデルタ量(DataDelta)とを計算することができる。
【0478】
最初に行うべきことは、ドット列のデルタを計算することである。これは、単に、LowerClockからUpperClockを減算し、2点間のドット数で除算することによって実現される。実際にはドット数の逆数を乗算することが可能である。なぜならば、ドット数は代替Artcardに関して定数であり、且つ乗算の方が高速に行われるからである。画素次元のデルタと列次元のデルタを獲得するため、異なる定数を使用することが可能である。画素のデルタは二つの境界間の距離であり、列のデルタは二つのクロックマークの中心間である。このようにして、関数DeternineDataInfoは二つの部分からなる。第1の部分は次の擬似コードによって表される:
kDeltaColumnFactor = 1/(DOTS_PER_DATA_COLUMN+2+2-1)
kDeltaPixelFactor = 1/(DOTS_PER_DATA_COLUMN+5+5-1)
delta = LowerClock.column - UpperClock.column
DataDelta.column = delta * kDeltaColumnFactor
delta = LowerClock.pixel - UpperClock.pixel
DataDelta.pixel = delta * kDeltaPixelFactor
次に、列の第1のデータの中心を決定することが可能である。クロックマークの中心から第1のデータドットの中心までの距離は2ドットであり、境界の中心から第1のデータドットの中心までの距離は5ドットである。この関数の第2の部分は次の擬似コードによって表される:
CurrentDot.column = UpperClock.column + (2*DataDelta.column)
CurrentDot.pixel = UpperClock.pixel + (5*DataDelta.pixel)
ドット列の追跡
ドット列はクロックマークに追従する位相ロックループから見つけられたので、残っていることは、その列を下って各ドットの中心でドット列をサンプリングすることだけである。変数CurrentDot点は現在列の第1のドットの中心に決定される。列の次のドットへ進むためには、DataDeltaを加算するだけでよい(2回の加算:1回は列座標のため、もう1回は画素座標のため)。所定の座標におけるドットのサンプリング(バイリニア補間)が行われ、ドットの中心を表現する画素値が決定される。画素値は、次に、そのドットのビット値を決定するため使用される。しかし、より良いビット判定を行うため、同一ドットライン上の2個の周辺ドットに対する中心値と関連して、その画素値を使用することが可能である。
【0479】
抽出されたドット列内のドットに対する全ての画素はこの時点でDRAMにロードされていると仮定してもよい。なぜならば、ラインの両端(クロックマーク)がDRAMに存在するならば、これらの2個のクロックマークの間のドットも間違いなくDRAMに存在するからである。更に、データブロック高さは十分に低いので(384ドット高にすぎない)、単なるデルタだけがラインの全長を越えるために十分であることが保証される。カードが8個のデータブロック高さに分割されている理由の一つは、単一のデータブロックに関して行うことができる保証と同じ厳格な保証を、カードの全高に亘って行うことが不可能だからである。
【0480】
単一ラインのデータ(48バイト)を抽出する上位レベルプロセスは、以下の疑似コードで表される。データバッファポインタは、各バイトが保存されるのに伴ってインクリメントされ、連続したバイト及びデータの列が確実に連続的に保存される:
Figure 2004536736
GetPixel関数はドット座標(固定小数点)を取得し、バイリニア補間によって中心画素値に達するため、4個のCCD画素をサンプリングする。
【0481】
DetermineCenterDot関数は、ビット値が決定されたドットの両側にあるドット中心を表現する画素値を取得し、その中心ドットのビット値の値を知的に推定することを試みる。図64の一般化されたブラー効果曲線から、以下の三つの一般的なケースが考えられる:*ドットの中心画素値はWhiteMinよりも小さいので、確実に黒色ドットである。したがって、ビット値は必ず1である;
*ドットの中心値はBlackMaxよりも大きいので、確実に白色ドットである。したがって、ビット値は必ず0である;
*ドットの中心値は、BlackMaxとWhiteMinの間のどこかにある。ドットは黒色かもしれないし、白色かもしれない。したがって、このビットの値が問題になる。ビットの値を合理的に推定するため、多数の方式が考えられている。これらの方式は、精度に対して複雑さのバランスを取り、ある種のケースでは、保証された解決策が存在しないことを考慮する必要がある。誤ったビット判定を行うケースでは、ビットのリード・ソロモンシンボルに誤りが生じ、フェーズ2のリード・ソロモン復号化ステージで訂正しなければならない。
【0482】
画素値がBlackMaxとWhiteMinの間に入るときにドットの値を決定するため使用される方式は、あまり複雑ではないが、優れた結果を与える。この方式は、門対となっているドットの左及び右にあるドット中心の画素値を使用して、中心ドットのよりもっともらしい値を決定する。即ち、
*両側の2個のドットがMidRange(平均ドット値)の白色側に存在する場合、中心ドットが白色であるならば、「確実に」白色であると推定することができる。その中心ドットが不確実な領域に存在するということは、そのドットが黒色であり、その値をより不確実にするため周辺の白色ドットによる影響を受けたということを示す。したがって、そのドット値は黒色であると考えられるので、そのビット値は1である;
*両側の2個のドットがMidRangeの黒色側に存在する場合、中心ドットが黒色であるならば、「確実に」黒色であると推定することができる。その中心ドットが不確実な領域に存在するということは、そのドットが白色であり、その値をより不確実にするため周辺の黒色ドットによる影響を受けたということを示す。したがって、そのドット値は白色であると考えられるので、そのビット値は0である;
*一方のドットがMidRangeの黒色側に存在し、もう一方のドットがMidRangeの白色側に存在するならば、中心ドット値をそのまま使用して決定する。中心ドットがMidRangeの黒色側に存在するならば、黒色(ビット値1)を選択する。さもなければ、白色(ビット値0)を選択する。
【0483】
このロジックは以下のように表現される:
Figure 2004536736
ここから、周辺画素値の使用は、中心ドットの状態の優れた指標を与え得ることが認められる。ここで説明した方式は、同じ行からのドットだけを使用しているが、単一のドットライン履歴(前のドットライン)の使用は、明らかに代替的な構成になるであろう。
【0484】
次の列のためのクロックマーク更新
ある列の第1のデータドットの中心が決定されると、クロックマーク値は不要になる。それらは、その列に対するデータが獲得された後、次の列の準備のため更新する方が好都合である。クロックマークの向きは、ドット列に沿って下りるドットの追跡方向に対して垂直であるため、列を更新するため画素デルタを使用し、両方のクロックの画素を更新するため列デルタを使用することが可能である:
UpperClock.column += DataDelta.pixel
LowerClock.column += DataDelta.pixel
UpperClock.pixel -= DataDelta.column
LowerClock.pixel -= DataDelta.column
この時点で、次のドット列の推定値が得られる。
【0485】
タイミング
タイミングの必要条件は、DRAM利用率が100%を超えない限り充たされ、並列アルゴリズムの追加によってタイミングが増大されるがDRAM利用率は100%を超えない。DRAM利用率はプロセス1に関して特定され、このプロセス1は各画素を1回ずつ連続的に書き込み、DRAM帯域幅の9%を消費する。
【0486】
このセクションに記載されるようなタイミングは、DRAMが代替Artcardリー
ダーアルゴリズムの要求に容易に対処し得ることを示す。したがって、タイミングのボトルネックは、DRAMアクセスではなく、ロジック速度に関するアルゴリズムの実装であろう。しかし、アルゴリズムは、アーキテクチャの単純さに留意して設計され、メモリサイクル毎に最小限の個数の論理演算しか要求しない。この点で、実装された状態機械又は等価的なCPU/DSPアーキテクチャが以下のサブセクションに記載されているように実行可能である限り、目標速度は達成されるであろう。
【0487】
ターゲット位置検出
ターゲットは画素列の境界内の画素を読み出すことによって位置検出される。各画素は高々1個ずつ読み出される。ランレングスエンコーダが十分高速に動作する場合を考えると、ターゲットの位置検出の限界はメモリアクセスである。したがって、アクセスはプロセス1のタイミング、即ち、DRAM帯域幅の9%利用率よりは悪化しないであろう。
【0488】
したがって、ターゲット位置検出中の(プロセス1を含む)DRAMの総利用率は18%であり、ターゲットロケータは、常に、代替Artcardのイメージセンサ画素リーダーに追従している。
【0489】
ターゲットの処理
ターゲット番号をソートしチェックするためのタイミングは取るに足らない。2個のターゲット中心の各々のより良い推定値を見つけるためには、12組の12画素の読み出し、即ち、全部で144回の読み出しを必要とする。しかし、正確なターゲット中心の修復は些細ではなく、2組の推定を必要とする。各ターゲット中心の調整には、8組の20種類の6エントリー型コンボリューションカーネルが必要である。このようにして、その合計は、8×20×6回の乗算−累算=960に達する。その上、7組の7画素を獲得するため49回のメモリアクセスが必要である。したがって、1ターゲット当たりの総数は、144+960+49=1153であり、これは、画素の列内の画素数(1152)とほぼ同数である。このように、各ターゲット推定は、1行の画素を処理するために要する時間を消費する。ターゲットが2個の場合、実質的に2列の画素列に要する時間を消費する。
【0490】
ターゲットは、第1の画素列上でターゲット番号の後に確実に識別される。方位列の前には2列のドット列が存在するので、6列の画素列が存在する。ターゲット位置検出プロセスは、最初の画素列を使い果たすが、残りの5列の画素列は全く処理されない。したがって、データエリアは、他のプロセス時間に影響を与えることなく、利用可能な時間の2/5内に位置検出することができる。
【0491】
利用可能な時間の残りの3/5は、白色及び黒色画素のレンジを割り当てる些細なタスクのために十分であり、1タスクは高々2から3マシーンサイクルを使用する。
【0492】
データ抽出
タイミングに関して、次の二つの部分を考慮すべきである:
*正確なクロックマーク及び境界値を取得すること;
*ドット値を抽出すること。
【0493】
クロックマーク及び境界値は、1ドット列おきにしか収集されない。しかし、より正確にするためにクロックマーク推定値を更新する毎に、20種類の6エントリー型コンボリューションカーネルを評価しなければならない。平均的に、1ドット列当たりにそのうちの2個が存在する(2ドット列毎に4個)。境界に基づいて画素座標を更新するためには、同じ画素走査線からの7画素だけが必要である。しかし、列座標を更新するためには、異なる列、即ち、異なる走査線からの7画素が必要である。走査線エントリー毎に1回のキャッシュミスが生じ、同じ走査線内の画素に対して2回のキャッシュミスが生じる最悪ケースの状況を想定すると、全部で8回のキャッシュミスが起こる。
【0494】
ドット情報を抽出するためには、1ドット毎に(ドットを定義する平均9個ではなく)4画素だけを読み出す。1152画素(384ドット)のデータエリアを想定すると、せいぜい、これは、9画素ドットではなく4画素ドットを読み出すことによって、72回のキャッシュ読み出しを節約するに過ぎない。最悪ケースは、57画素毎に1列だけ移動する1°の回転であるが、節約の程度が僅かに悪化するだけである。
【0495】
最悪の場合、読み出すキャッシュラインの数は、データエリア内の画素によって使われたキャッシュラインよりも少なくなる、といっても構わない。したがって、アクセスはプロセス1、即ち、DRAM帯域幅の9%利用率よりも悪化することはない。
【0496】
したがって、データ抽出中(プロセス1を含む)のDRAM総利用率は18%であり、データ抽出部は、常に、代替Artcardのイメージセンサ画素リーダーに追従する。これにより実装されるターゲット処理プロセスでは、ターゲットの処理は、かなり非効率的な方法によって実行されるが、依然として、必要に応じて、データ抽出プロセス中に迅速に追従する。
【0497】
フェーズ2−ビットイメージ復号
フェーズ2は、代替Artcardのデータ復元アルゴリズムの非リアルタイムフェーズである。フェーズ2の先頭で、ビットイメージは代替Artcardから抽出されている。ビットイメージは、代替Artcardのデータ領域から読み出されたビットを表現する。一部のビットには誤りがあり、おそらく、代替Artcardは挿入時に回転させられているので、データ全体は180°回転している。フェーズ2は、この符号化されたビットイメージから原データを確実に抽出することに関係している。基本的に、図79に示されるように3ステップが実行される:
*代替Artcardが逆向きに挿入されているならば反転して、ビットイメージを再編成する;
*符号化されたデータをスクランブル解除する;
*ビットイメージからのデータをリード・ソロモン復号化する。
【0498】
3ステップの各々は別個のプロセスとして定義され、あるプロセスの出力は次のプロセルの入力として要求されるので、連続して実行される。最初の2ステップを単一プロセスに併合することは簡単であるが、説明の便宜上、ここでは、別個のプロセスとして取り扱う。
【0499】
データ/プロセスの観点からみると、フェーズ2は図80に示されるような構造を有する。
【0500】
プロセス1及び2のタイミングは無視することが可能であり、その間に1/1000秒未満しか消費しない。プロセス3(リード・ソロモン復号)は、約0.32秒を消費し、これがフェーズ2のために必要な合計時間になる。
【0501】
ビットイメージ再編成、必要に応じて反転
DRAM内のビットマップは、この時点で、代替Artcardから取得されたデータを表現する。しかし、ビットイメージは連続していない。ビットイメージは64個の32k単位のチャンクに分割され、データブロック毎に1チャンクがある。32kチャンクの各々は、28656個の有効バイトだけ、即ち、
最も左側の方位列からの48バイトと、
真のデータ領域からの28560バイトと、
最も右側の方位列からの48バイトと、
未使用の4112バイトと、
を格納する。
【0502】
画素データ(フェーズ1のプロセス1によって格納)のために使用される2MBバッファは、再編成されたビットイメージを保持するために使用可能である。なぜならば、画素データはフェーズ2の間では要求されないからである。再編成の最後に、正しく向きを与えられた連続したビットイメージは、2MB画素バッファに収容され、リード・ソロモン復号化のための準備ができている。
【0503】
カードの向きが正しい場合、最も左側の方位列は白色であり、最も右側の方位列は黒色である。カードが180°回転している場合、最も左側の方位列は黒色であり、最も右側の方位列は白色である。
【0504】
カードが正しい向きにされているかどうかを判定する簡単な方法は、白色ビットに対する黒色ビットの比率が圧倒的であるブロックが見つかるまで、各データブロックを一つずつ使用して、データの最初及び最後の48バイトをチェックすることである。以下の擬似コードはこの方法を例示し、カードが正しい向きに置かれているときTRUEを返し、そうではなければFALSEを返す:
Figure 2004536736
データは、この時点で、カードが正しい向きであるかどうかに基づいて認識できるはずである。最も簡単なケースは、カードが正しい向きにされている場合である。この場合、データは、方位列を除去し、データ全体を連続させるために、少しだけ動かす必要がある。これは、以下の擬似コードに示されるように元の位置で非常に簡単に実現される:
Figure 2004536736
それ以外の場合は、データを実際に反転させる必要がある。データを反転させるアルゴリズムは非常に簡単であるが、簡単にするために、256バイトのテーブルReverseを用いる。ここで、Reverse[N]の値はNのビット反転である:
Figure 2004536736
両方のプロセスのタイミングは無視することが可能であり、1/1000秒未満しか消費しない:
*2MB連続読み出し(2048/16×12ns=1536ns);
*2MB実効的連続バイト書き込み(2048/16×12ns=1536ns)。
【0505】
符号化画像のスクランブル解除
ビットイメージは、1827840個の連続した、正しい向きにされた、スクランブル付きのバイトである。バイトは、1ブロックが255バイト長からなる7168個のリード・ソロモンブロックを生成するために、スクランブル解除されなければならない。スクランブル解除プロセスは非常に簡単であるが、スクランブル解除処理は元の場所で実行できないので、別個の出力バッファを必要とする。図80は、スクランブル解除プロセスが行われるメモリの説明図である。
【0506】
以下の疑似コードはスクランブル解除プロセスの実行方法を規定する:
Figure 2004536736
このプロセスのためのタイミングは無視することが可能であり、1/1000秒未満しか消費しない:
*2MB連続読み出し(2048/16×12ns=1536ns);
*2MB非連続バイト書き込み(2048×12ns=24576ns)。
【0507】
このプロセスの終了時、スクランブル無しデータがリード・ソロモン復号化のために準備できる。
【0508】
リード・ソロモン復号化
代替Artcardの読み出しの最後の部分は、リード・ソロモン復号化プロセスであり、ここでは、約2MBのスクランブル無しデータが約1MBの有効代替Artcardデータに復号化される。
【0509】
このアルゴリズムは、同時に一つのリード・ソロモンブロックを復号化し、(必要であれば)元の場所で実行可能である。なぜならば、符号化されたブロックは復号化されたブロックよりも大きく、冗長バイトがデータバイトの後に格納されているからである。
【0510】
最初の2個のリード・ソロモンブロックは制御ブロックであり、ビットイメージから抽出されるべきデータのサイズに関する情報を含んでいる。このメタ情報は、最初に復号化する必要があり、得られた情報が真のデータを復号化するため使用される。真のデータの復号化は、単に同時に一つずつデータブロックを復号化する問題である。特定のブロックの復号化が失敗した場合、控えのデータブロックを使用することが可能である。
【0511】
最上位レベルのリード・ソロモン復号化を疑似コードで提示する:
Figure 2004536736
Figure 2004536736
DecodeBlockは、標準的なリード・ソロモンブロックデコーダであり、m=8及びt=64を使用する。
【0512】
GetControlData関数は、復号化エラーが生じない限り簡単である。この関数は、成功するまで、同時に一つの制御ブロックを復号化するためDecodeBlockを呼び出すだけである。制御パラメータは、復号化されたデータの最初の3バイトから抽出することができる(destBlocksはバイト0及び1に格納され、lastBlock はバイト2に格納される)。復号化エラーが存在する場合、この関数は、32組の3バイトをトラバースし、最も確からしい値の組を決定しなければならない。一つの簡単な方法は、3バイトの中から2個の連続した等しいコピーを見つけ、これらの値が正しい値であるとして決めることである。他の方法は、出現する3バイトの組の種類数をカウントし、最もよく出現する組が正しい組であると決める。
【0513】
リード・ソロモン復号化に要する時間は実装に依存する。リード・ソロモン復号化プロセスを実行するために専用コア(例えば、LSIロジックのL64712)を使用可能であるが、アプリケーションに応じて(通常、復号化されたデータを用いて何かを実行するために)内蔵型システムの全体でより汎用的に使用できるCPU/DSPの組み合わせを選択する方が好ましい。勿論、復号化時間はCPU/DSPの組み合わせの場合にも十分に高速でなければならない。
【0514】
L64712は、毎秒50Mビット(毎秒約6.25MB)のスループットがあるので、時間は、最大で2MB読み出し及び1MB書き込みのメモリアクセス時間ではなく、リード・ソロモンデコーダの速度によって制約される。最悪のケース(全ての2MBが復号化を必要とするケース)に要する時間は、従って、2/6.25秒=約0.32秒である。勿論、以下の改良を含む多数の改良を考えることができる。
【0515】
読み出し環境のブラー効果が大きいほど、所定のドットは周辺ドットからより大きい影響を受ける。好適な実施例による現在の読み出しアルゴリズムは、ドット値に関してより優れた決定を行うため、同一列内の周辺ドットを使用する能力を備えている。前の列のドットは既に復号化されているので、前の列のドット履歴は、画素値が不確実なレンジに含まれるドットの値を決定する際に役に立つ。
【0516】
初期ステージに関する別の可能性は、それを完全に取り除き、データブロックの初期境界を必要とされる境界よりも広くし、ターゲット処理関数をより知的にすることである。これは、全体的な複雑さを軽減する。データブロックの独立性を維持するために注意する必要がある。
【0517】
制御ブロック機構はより頑強にすることができる:
*制御ブロックは、(本例のケースのように)隣接させるのではなく、最初のブロック及び最後のブロックでもよい。これは、ある種の異常なダメージ状況に対する保護を高めるであろう;
*第2の改良は、リード・ソロモン復号化ステップが失敗した場合に使用される補助的なレベルの冗長性/誤り検出を制御ブロック構造に取り入れることである。パリティのような簡単な仕組みは、リード・ソロモンステージが失敗した場合に、制御情報のもっともらしさを改良する。
【0518】
フェーズ5 Varkスクリプト実行
Artcard9を読み出し、それを復号化するために要する総時間は、したがって、約2.15秒である。ユーザがはっきりとわかる遅延は、実際には0.65秒(フェーズ3及び4の合計)に過ぎない。なぜならば、Artcardは1.5秒後に移動を停止するからである。
【0519】
Artcardがロードされると、Artvarkスクリプトを解釈しなければならない。スクリプトを直ちに実行するのではなく、スクリプトは「プリント」ボタン13(図1)が押下されたときだけに実行される。スクリプトを実行するための所要時間は、スクリプトの複雑さに応じて変化し、プリントボタンの押下と、実際のプリントボタンと、実際の印刷動作との間で認識される遅延を考慮しなければならない。
【0520】
上述の通り、VLIWプロセッサ74は、コンピュータ利用の費用がかかるVark関数を加速するデジタル処理システムである。CPUコア72によってソフトウェアで実行される関数と、VLIWプロセッサ74によってハードウェアで実行される関数のバランスは、実装に依存する。VLIWプロセッサ74の目的は、全てのArtcardスタイルがユーザからみて遅いと感じられない時間内で実行することを助けることである。CPUが高速で強力になると共に、ハードウェア加速を必要とする関数の数は減少し続ける。VLIWプロセッサは、以下の時間的に重要な関数の汎用ハードウェア高速化を可能にさせるマイクロコード化されたALUサブシステムを含む:
1)汎用ソフトウェア処理のための画像アクセス機構
2)画像コンボルバ
3)データ駆動型画像ワーパー
4)画像スケーリング
5)画像モザイク
6)アフィン変換
7)画像コンポジッター
8)色空間変換
9)ヒストグラムコレクタ
10)画像の照明
11)ブラシスタンパー
12)ヒストグラムコレクタ
13)CCDイメージから内部画像への変換
14)画像ピラミッドの構築(ワーパーによってブラッシングのため使用される)。
【0521】
以下の表は、ALUモデルに実装された場合の各Vark演算の所要時間を要約したものである。ALUモデルを使用する関数を実装する方法は後述される。
【0522】
【表57】
Figure 2004536736
例えば、CCD画像を変換するため、ヒストグラム収集、及び(画像強調用)ルックアップ色置換のために1画素当たりに9+2+0.5サイクル、即ち、11.5サイクルを要する。1500×1000画像の場合、これは、172500000、即ち、1コンポーネント当たりに約0.2秒、即ち、全3コンポーネント当たりに0.6秒である。簡単なワープを追加すると、全体で、0.6+0.36、即ち、ほぼ1秒になる。
【0523】
画像コンボルバ
コンボルブは中心画素周りの重み付き平均化である。この平均は、単純な加算でもよく、絶対値の和でもよく、和の絶対値でもよく、或いは、0で丸められた和でもよい。
【0524】
画像コンボルバは汎用コンボルバであり、可変サイズ係数カーネル内の値を変えることによって様々な関数を実現できる。サポートされるカーネルサイズは、3×3、5×5、及び7×7だけである。
【0525】
図82を参照すると、コンボリューションプロセスの一例340が示されている。コンボルバプロセス341に供給される画素コンポーネント値は、ボックス読み出しイタレータ342から与えられる。イタレータ342は行単位で画像データを供給し、各行内では、画素毎に画像データを供給する。コンボルバ341からの出力は、順次書き込みイタレータ344へ送られ、順次書き込みイタレータ344は有効画像フォーマットで合成画像を格納する。
【0526】
係数カーネル346は、DRAM内のルックアップテーブルである。カーネルは、ボックス読み出しイタレータ342と同じ順序に係数が並べられる。各係数エントリーは8ビットである。単純な順次読み出しイタレータは、カーネル346を指定し、係数を与えるため使用される。これは、カーネルサイズと一致する画像幅ImageWidthの画像をシミュレーションし、ループオプションがセットされるので、カーネルは連続して供給される。
【0527】
ALUユニット上のコンボルブプロセスの一実施形態は図81に示されている。以下の定数がソフトウェアによってセットされる。
【0528】
【表58】
Figure 2004536736
制御ロジックは、1画素当たりの乗算/加算の回数をカウントダウンするため使用される。カウント(ラッチ2に累算)が0に達するとき、生成される制御信号は(ラッチ1からの)現在のコンボルブ値を書き出し、カウントをリセットするため使用される。このようにして、一つの制御ロジックブロックは、多数の並列コンボルブストリームのために使用される。
【0529】
各サイクルに、乗算ALUは、画素の適切な部分を組み込むため、1回の乗算/加算を実行することができる。全ての値を総計するために要するサイクル数は、したがって、カーネル内のエントリーの個数である。これは計算制約であるため、画像を複数のセクションに分割し、それらを異なるALUユニットで並列に処理することが適切である。
【0530】
7×7カーネル上で、各画素に要する時間は49サイクル、即ち、490nsである。各キャッシュラインは32画素を保持するので、メモリアクセスのために利用可能な時間は、((32−7+1)×490ns)、即ち、12740nsである。7本のキャッシュラインを読み出し、1本を書き込むために要する時間は、より悪いケースであって、1120ns(全てのアクセスが同じDRAMバンクへのアクセスであるとして、8*140ns)である。その結果として、リソースが無制限であるならば、最大10画素を並列に処理することが可能である。ALUの個数が限定されている場合、最高で4画素を並列に処理することができる。従って、7×7カーネルを使用してコンボリューションを実行するために要する時間は、0.18375秒(1500*1000*490ns/4=183750000ns)である。
【0531】
5×5カーネル上で、各画素に要する時間は25サイクル、即ち、250nsである。各キャッシュラインは32画素を保持するので、メモリアクセスのために利用可能な時間は、((32−5+1)×250ns)、即ち、7000nsである。5本のキャッシュラインを読み出し、1本を書き込むために要する時間は、より悪いケースであって、840ns(全てのアクセスが同じDRAMバンクへのアクセスであるとして、6*140ns)である。その結果として、リソースが無制限であるならば、最大7画素を並列に処理することが可能である。ALUの個数が限定されている場合、最高で4画素を並列に処理することができる。従って、5×5カーネルを使用してコンボリューションを実行するために要する時間は、0.09375秒(1500*1000*250ns/4=93750000ns)である。
【0532】
3×3カーネル上で、各画素に要する時間は9サイクル、即ち、90nsである。各キャッシュラインは32画素を保持するので、メモリアクセスのために利用可能な時間は、((32−3+1)×90ns)、即ち、2700nsである。3本のキャッシュラインを読み出し、1本を書き込むために要する時間は、より悪いケースであって、560ns(全てのアクセスが同じDRAMバンクへのアクセスであるとして、4*140ns)である。その結果として、リソースが無制限であるならば、最大10画素を並列に処理することが可能である。ALU及び読み出し/書き込みイタレータの個数が限定されている場合、最高で4画素を並列に処理することができる。従って、3×3カーネルを使用してコンボリューションを実行するために要する時間は、0.03375秒(1500*1000*90ns/4=33750000ns)である。この結果として、各出力画素は、計算をするためにカーネルサイズ/3サイクルを要する。実際のタイミングは以下の表に要約されている。
【0533】
【表59】
Figure 2004536736
画像コンポジッター
コンポジット処理は、最終画像における前景及び背景の適切な比率を制御するため、マット又はチャンネルを使用して前景画像を後景画像に加算することである。好ましくは、通常コンポジット処理及び付随コンポジット処理の二つのスタイルのコンポジット処理がサポートされる。二つのスタイルの規則は、
通常コンポジット処理:新しい値=前景+(背景−前景)a
付随コンポジット処理:新しい値=前景+(1−a)背景
である。
【0534】
相違点は、付随コンポジット処理の場合、前景はマットによって予め乗算されているのに対して、通常コンポジット処理の場合、そのようにされていないことである。コンポジットプロセスの一例は図83に示されている。
【0535】
アルファチャネルは、レンジ0から1に対応した0から255の値をとる。
【0536】
通常コンポジット
通常コンポジットは、
背景+(背景−前景)*α/255
として実装される。
【0537】
X/255による除算は、257X/65536によって近似される。コンポジットプ
ロセスの実装例は図84に詳細に示され、以下の定数がソフトウェアによってセットされる。
【0538】
【表60】
Figure 2004536736
4個のイタレータが必要であるため、コンポジットプロセスは1画素当たりに1サイクルを要し、ALUの半分しか利用しない。コンポジットプロセスは一つのチャンネルだけで実行される。3チャンネル画像を互いにコンポジットするためには、コンポジッターは、各チャンネルに1回ずつの合計3回実行されなければならない。
【0539】
フルサイズの単一チャンネルをコンポジットするための所要時間は、0.015秒(1500*1000*1*10ns)であり、3チャンネル全てをコンポジットするために0.045秒を要する。
【0540】
255による除算を近似するため、257倍した後に65536で除算する。これは、1回の加算(256*x+x)と、その結果の最後の16ビットの無視(丸めの目的を除く)とによっても実現可能である。
【0541】
図42に示されるように、コンポジットプロセスは、3個の順次読み出しイタレータ351−353と、1個の順次書き出しイタレータ355とを必要とし、乗算器ALUと共にアダーALUと共にアダーを使用するマイクロコードとして実装される。コンポジット時間は1画素当たり1サイクル(10ns)である。付随コンポジット処理と通常コンポジット処理は別々のマイクロコードを必要とするが、1画素当たりの平均時間は同じである。
【0542】
コンポジット処理は単一チャンネルだけで実行される。一つの3チャンネル画像を互いにコンポジットするために、コンポジッターは、チャンネル毎に1回ずつ、併せて3回実行される。aチャンネルは各コンポジットに対して同一であるため、それは毎回読み出される必要がある。しかし、最良ケースでの4×32バイトのキャッシュラインの転送(読み出し又は書き込み)は320nsを要する。パイプラインは、平均で1画素コンポジット当たりに1サイクルを与え、32画素をコンポジットするために32サイクル、即ち、320ns(100MHz)を要するので、チャンネルは実質的に無制限で読み出される。したがって、全チャンネルは、
1500/32*1000*320ns=15040000ns=0.015秒
でコンポジットされる。
【0543】
フルサイズの3チャンネル画像をコンポジットするための所要時間は0.045秒である。
【0544】
画像ピラミッド構築
ワーピング、タイリング、及びブラッシングのような幾つかの関数は、所定の画素のエリアの平均値を必要とする。所与の各エリアの値を計算するのではなく、これらの関数は、好ましくは、画像ピラミッドを利用する。既に図33に示されたように、画像ピラミッド360は、実質的に多重解像度画素マップである。原画像は1:1表現である。各次元での2:1によるサブサンプリングは、元のサイズの1/4の画像を生成する。このプロセスは画像全体が単一画素によって表現されるまで続く。
【0545】
画像ピラミッドは原画像から構築され、原画像によって占められたサイズの1/3(1/4+1/16+1/64+...)を使う。原画像が1500×1000である場合、対応した画像ピラミッドは約1/2MBである。
【0546】
画像ピラミッドは、コンボルブのカーネルを各次元で2画素ずつ前進させるワン・イン・フォー入力画像に基づいて実行される3×3コンボルブによって構築することができる。3×3コンボルブは、単純な4画素の平均化よりも高い精度を生じ、異なるピラミッドレベルの座標の差が1レベル毎に1ビットだけシフトすることによって得られるという付加的な利点がある。
【0547】
ピラミッド全体の構築は、ピラミッドの各レベルで1回ずつピラミッドレベル構築関数を呼び出すソフトウェアループに依拠している。
【0548】
ピラミッドの1レベルを生成するためのタイミングは、入力画像の解像度の(9/4)*(1/4)である。なぜならば、原画像の1/4のサイズの画像を生成しているからである。このようにして、1500×1000画像に対して、
ピラミッドのレベル1を生成するためのタイミング=9/4*750*500=843750サイクルであり、
ピラミッドのレベル2を生成するためのタイミング=9/4*375*250=210938サイクルであり、
ピラミッドのレベル3を生成するためのタイミング=9/4*188*125=52735サイクルであり、
以下同様に続く。
【0549】
総時間は、原画像1画素当たりに3/4サイクル(画像ピラミッドは原画像サイズの1/3であり、各画素は計算に9/4サイクルを要し、即ち、(1/3)*(9/4)=3/4)である。1500×1000画像の場合、(100MHz)で1125000サイクル、即ち、0.011秒である。このタイミングは単一色チャンネルに対するタイミングであり、3色チャンネルは0.034秒の処理時間を要する。
【0550】
汎用データ駆動型画像ワーパー
ACP31は、入力画像の画像ワーピング操作を実行可能である。画像ワーピングの原理は理論的に周知である。ワーピングのプロセスに関する一つの完全な教科書は、Geroge Wolbergによる''Digital Image Warping'', IEEE Computer Society Press, Los Alamitos, California, 1990である。ワーピングプロセスは、Artcard9によって供給されたデータの一部を形成するワープマップを使用する。ワープマップは、必要条件に応じて任意的に寸法を決めることができ、入力画素の出力画素へのマッピングの情報を提供する。残念なことに、任意的に寸法を決められたワープマップの利用は、画像ワーパーによって解決されるべき多数の問題を生じる。
【0551】
図85を参照すると、A×B次元のワープマップ365は、ある大きさ(例えば、0から255の8ビット値)の配列値により構成され、この配列値は理論的な入力画像の座標を表現し、理論的な入力画像の座標は同じ配列座標インデックスを有する対応した「理論的な」出力画像へマップされる。残念ながら、出力画像、例えば、出力画像366は固有の次元C×Dを有し、これは、固有の次元E×Fを有する入力画像とは全く異なる。したがって、出力画像366が、出力画素毎に、対応した入力画像のエリア又は領域を決定できるように、ワープマップ365のマッピングを容易に行えるようにする必要がある。出力画素色データは、対応した入力画像のエリア又は領域から構築される。出力画像366内の各出力画素に対して、最初に、ワープマップ365から対応したワープマップ値を決定することが必要である。このため、出力画像画素がワープマップテーブル365内の小数位置にマッピングされるときに、周辺ワープマップ値をバイリニア補間することが必要である。このプロセスの結果は、ワープマップ365内の各データ値のサイズによって寸法が決められる「理論的な」画像内での入力画像画素の位置を与える。これらの値は、理論的な画像を対応した実際の入力画像367へマッピングするため再度スケーリングしなければならない。
【0552】
実際の値を決定するため、出力画像画素はエイリアシング効果を回避するように選ばれるべきであり、最終的な出力画像画素値に寄与する入力画像画素367の領域を決定するために隣接した出力画像画素を調べる必要がある。この点に関して、以下でより明らかにされるように、画像ピラミッドが利用される。
【0553】
画像ワーパーは画像をワープさせるため以下の幾つかのタスクを実行する:
−出力画像サイズに一致するようにワープマップをスケーリングする;
−各出力画素に表現される入力画像画素の領域のスパンを決定する;
−入力画像ピラミッドからトライリニア補間によって最終的な出力画素値を計算する。
【0554】
ワープマップスケーリング
前述の通り、データ駆動型ワープでは、ワープマップは、出力画素毎に、対応した入力画像マップの中心を記述することが必要である。前述のように単一ワープマップを用いる代わりに、インターリーブされたx及びy値情報を格納すると、X座標及びY座標を別個のチャンネルとして取り扱うことが可能である。
【0555】
その結果として、好ましくは、二つのワープマップが設けられ、XワープマップはX座標のワーピングを表し、YワープマップはY座標のワーピングを示す。前述のように、ワープマップ365は、スケーリング中の画像とは異なる空間解像度でもよい(例えば、32×32ワープマップ365は、1500×1000画像366のワープを適切に記述する)。その上、ワープマップは、ワープ中の画像のサイズに対応した8又は16ビット値によって表現可能である。
【0556】
所定のワープマップから入力画像空間に点を生成するために幾つかのステップが含まれる:
1.出力画像に対してワープマップ内に対応した位置を決定する;
2.次のステップのため、ワープマップから値をフェッチする(これは、ワープマップがほんの8ビット値である場合に、解像度ドメインにおけるスケーリングを必要とする);
3.実際の値を決定するためワープマップのバイリニア補間を行う;
4.入力画像ドメインに対応するように値をスケーリングする。
【0557】
最初のステップは、出力画像における現在のX/Y座標にスケール倍率(XとYで異なる場合がある)を乗算することにより実行される。例えば、出力画像が1500×1000であるならば、ワープマップは150×100であり、XとYの両方は1/10によってスケーリングされている。
【0558】
ワープマップから値をフェッチするためには、二つのルックアップテーブルにアクセスすることが必要である。一方のルックアップテーブルは、ルックアップテーブルから8又は16ビットのエントリーを読み出し、常に16ビット値を返す(元の値が8ビットしかない場合、上位8ビットをクリアする)。
【0559】
パイプラインの次のステップは、参照されたワープマップ値をバイリニア補間することである。
【0560】
最後に、バイリニア補間からの結果がスケーリングされ、ワープされるべき画像と同じドメインに収容される。このようにして、ワープマップのレンジが0から255である場合、Xを1500/255でスケーリングし、Yを1000/255でスケーリングする。
【0561】
補間プロセスは図86に示されているようなプロセスであり、以下の定数がソフトウェアによってセットされる。
【0562】
【表61】
Figure 2004536736
以下のルックアップテーブルが使用される。
【0563】
【表62】
Figure 2004536736
スパン計算
ワープマップ365からの点は入力画像367内の画素領域の中心の位置を示す。隣接した出力画像画素の入力画像画素の間の距離は領域のサイズを示し、この距離は、スパン計算によって近似することができる。
【0564】
図87を参照すると、ワープマップP1の所定の現在点に対して、同じライン上の前のポイントはP0であり、前のラインの同じ位置にあるポイントはP2である。P1とP0の間、並びに、P1とP2の間で、X及びYの絶対距離を決定する。X又はYの最大距離は、実際の形状を近似する正方形であるスパンになる。
【0565】
好ましくは、点は、垂直方向ストリップの出力順に処理され、P0はストリップ内の同じ線で先行する点であり、P1がストリップ内の最初の点であるとき、P0は、前のストリップの対応した線の最後の点を表す。P2は同一ストリップ内の前の線の点であるため、32エントリーの履歴バッファに保持され得る。スパン計算プロセスの原理は図88に示され、そのプロセスの詳細は図89に示されている。
【0566】
以下のDRAMのFIFOが使用される。
【0567】
【表63】
Figure 2004536736
32ビット精度のスパン履歴が保持されるので、1500画素幅の画像がワープされる場合、12000バイトの一時記憶が必要になる。
【0568】
スパン364の計算は、二つのアダーALU(一方はスパン計算用であり、もう一方はP0及びP2の履歴をループしカウントするためのものである)を使用し、以下のように7サイクルを要する。
【0569】
【表64】
Figure 2004536736
履歴バッファ365、366は、キャッシュ型のDRAMである。「前のライン」(P2履歴の場合)バッファ366は、32エントリーのスパン精度である。「前の点」(P0履歴の場合)バッファ365は、(ストリップの線の点1から31の計算のため)殆どの場合に使用される1個のレジスタを必要とし、DRAMにバッファされた履歴値の組はストリップの線の点0の計算に使用される。
【0570】
スパン履歴の32ビット精度は、P2履歴を保持するため4本のキャッシュラインと、P0履歴のための2本のキャッシュラインと、を必要とする。P0の履歴は、32画素からなる8本の線毎に1回ずつ、(ImageHeight*4)バイトの一時記憶空間に書き込まれ、読み出される。このようにして、1500画素の高さの画像がワープされるとき、6000バイトの一時記憶が必要であり、全部で6本のキャッシュラインが必要である。
【0571】
トライリニア補間
平均化されるべき入力画像からエリアの中心及びスパンを決定した後、ワーププロセスの最終部分は、出力画素の値を決定することである。単一の出力画素は、理論的に入力画像全体によって表現できるので、出力画素に寄与する入力画像の特定のエリアを実際に読み出し平均化するためには、非常に時間を消費する可能性がある。その代わりとして、入力画像の画像ピラミッドを使用することにより画素値を近似することができる。
【0572】
スパンが1以下である場合、所与の座標の周辺で原画像の画素を読み出し、バイリニア補間を実行するだけでよい。スパンが1よりも大きい場合、二つの適切なレベルの画像ピラミッドを読み出し、トライリニア補間を実行する必要がある。二つのレベルの画像ピラミッドの間にリニア補間を実行することは、厳密に正確ではないが、許容可能な結果を与える(それは結果画像にブラー効果が生じる側で判断を誤る)。
【0573】
図90を参照すると、一般的には、あるスパン「s」が与えられた場合に、ln2s(370)及びln2s+1(371)によって与えられる画像ピラミッドレベルを読み出すことが必要である。Ln2sは、sの上位ビットセットを復号化するだけである。ピラミッドの二つのレベル370、371の各々で画素値の値を決定するためバイリニア補間を実行し、レベル間で補間を実行しなければならない。
【0574】
図91に示されるように、最終的な出力値373を得るため、ピラミッドレベル間で補間を行う前に、最初に各画素ピラミッドレベルのX及びYに関して補間を行うことが必要である。
【0575】
画像ピラミッドアドレスモードは、ピラミッドレベルs及びs+1上の(x,y)における画素座標に対するアドレスを生成する。各レベルの画像ピラミッドは、xの方向に連続した画素を格納する。したがって、xに関する読み出しはキャッシュヒットする可能性が高い。
【0576】
適度なキャッシュヒットのコヒーレンスは、出力画像の局所領域が典型的に入力画像と局所的にコヒーレントである(おそらく、スケールは異なるが、同じスケールでコヒーレントである)ときに獲得される。入力画像と出力画像との関係を知ることはできないが、出力画素は、キャッシュコヒーレンスを最大限に利用するため、(垂直ストリップイタレータによって)確実に垂直ストリップに書き込まれる。
【0577】
トライリニア補間は、パイプラインとして4個の乗算ALU及び4個全てのアダーALUを使用し、メモリアクセスの必要がない場合を想定すると、平均的に2サイクル程度で完了し得る。しかし、全ての補間値は画像ピラミッドから得られるので、補間速度はキャッシュコヒーレンスに完全に依存する(その他のユニットはワープマップスケーリング及びスパン計算を実行するためビジーであることは言うまでもない)。できるだけ多数のキャッシュラインを画像ピラミッド読み出しのために利用できるべきである。最良の速度は、2個の乗算ALUを使用して8サイクルである。
【0578】
出力画素は、二つのキャッシュラインを使用する垂直ストリップ書き込みイタレータによってDRAMに書き込まれる。この速度は、従って、1出力画素当たりに8サイクルの最小値で制限される。ワープマップのスケーリングに必要なサイクルが8サイクル以下であるならば、全体的な速度は変化しない。さもなければ、スループットはワープマップをスケーリングするために要する時間である。殆どの場合に、ワープマップは写真のサイズと適合するまで拡大される。
【0579】
1画素当たりに必要なサイクル数が8サイクル以下のワープマップをスケーリングする場合、画像の1個のカラーコンポーネントを変換するための所要時間は0.12秒(1500*1000*8サイクル*1サイクル当たりに10ns)である。
【0580】
ヒストグラムコレクタ
ヒストグラムコレクタは、入力として画像チャンネルを取得し、出力としてヒストグラムを生成するマイクロコードプログラムである。チャンネルの画素の各々は、レンジ0−255に収まる値をとる。その結果として、ヒストグラムテーブルには全部で256画素が存在し、各エントリーは32ビットであり、1500×1000の全画像のカウントを十分に収容することができる。
【0581】
図92に示されるように、ヒストグラムは全画像の要約を表現するので、順次読み出しイタレータ378は入力として十分にである。ヒストグラム自体は、完全にキャッシュされ、32個のキャッシュライン(1K)を必要とする。
【0582】
マイクロコードは二つのパスを有し、初期化パスでは、全てカウントを0にセットし、次に、「カウント」ステージは、画像から読み出された各画素の適切なカウンタをインクリメントする。第1のステージは、アドレスユニットと単一のアダーALUとを必要とし、ヒストグラムテーブル377のアドレスを初期化する。
【0583】
【表65】
Figure 2004536736
第2のステージは、画像からの実際の画素を処理し、4個のアダーALUを使用する。
【0584】
【表66】
Figure 2004536736
アダー2のサイクル2からの零フラグは、入力画素が同じである間、マイクロコードアドレス2に留まるため使用される。入力画素が変化したとき、新しいカウントはマイクロコードアドレス3に書き出され、処理はマイクロコードアドレス2で再開する。マイクロコードアドレス4は最後に使用され、それ以上読み出される画素は存在しない。
【0585】
ステージ1は、256サイクル、即ち、2560nsを要する。ステージ2は、画素の値に応じて変わる。ルックアップテーブル置換のための最悪ケースの時間は、あらゆる画素がその近傍と同じではない場合に、1画像画素当たりに2サイクルである。単一カラーのルックアップに要する時間は0.03秒(1500×1000×1画素当たり2サイクル×1サイクル当たり10ns=30000000ns)である。3個のカラーコンポーネントに要する時間はこの量の3倍、即ち、0.09秒である。
【0586】
色変換
色変換は、
ルックアップテーブル置換、及び
色空間変換
の二つの主要な方法で実現される。
【0587】
ルックアップテーブル置換
図86に示されるように、画素の色を変換するための最も簡単な方法の一つは、任意に複雑な変換関数をルックアップテーブル380にエンコードすることである。画素のコンポーネントカラー値は、画素の新しいコンポーネント値をルックアップ381するため使用される。順次読み出しイタレータから読み出された画素毎に、その新しい値が新カラーテーブル380から読み出され、順次書き込みイタレータ383へ書き込まれる。入力画像は、メモリ帯域幅を効率的に利用するため、半分ずつ同時に処理される。以下のルックアップテーブルが使用される。
【0588】
【表67】
Figure 2004536736
総プロセスは、二つの順次読み出しイタレータ及び二つの順次書き込みイタレータを必要とする。二つの新カラーテーブルは、256バイト(1バイトからなる256個のエントリー)を保持するため、各々に8個のキャッシュラインが必要である。
【0589】
したがって、ルックアップテーブル置換に要する平均時間は1画像画素当たり1/2サイクルである。単一カラーのルックアップに要する時間は0.0075秒(1500×1000×1画素当たり1/2サイクル×1サイクル当たり10ns=7500000ns)である。三つのカラーコンポーネントのための所要時間はこの量の3倍、即ち、0.0225秒である。各カラーコンポーネントは、ソフトウェアの制御下で次々に処理される。
【0590】
色空間変換
色空間変換は、色空間の間を動くときに限り必要である。CCD画像はRGB色空間で撮影され、印刷はCMY色空間で行われ、一方、ACP31のクライアントは、Lab色空間で画像を処理する可能性が高い。入力色空間チャンネルの全ては、典型的に、各出力チャンネルのコンポーネント値を決定するために要求される。このような論理的プロセスが図94の385に示されている。
【0591】
簡潔に言うと、Lab、RGB及びCMYの間の変換は、かなり簡単である。しかし、特定の装置の個別の色プロファイルは著しく変化し得る。その結果として、将来のCCD、インク、及びプリンタを可能にさせるため、ACP31は、色空間変換ルックアップテーブルからのトライリニア補間によって色空間変換を実行する。
【0592】
色コヒーレンスは、線ベースではなく、エリアベースである傾向がある。トライリニア補間ルックアップ中にキャッシュコヒーレンスを補助するため、画像を垂直ストリップで処理することが最良である。このようにして、読み出しイタレータ386−388及び書き出しイタレータ389は、垂直ストリップイタレータである。
【0593】
トライリニア色空間変換
各出力カラーコンポーネントに対して、入力色空間を出力色空間へマッピングする単一の3次元テーブルが必要になる。例えば、CCD画像をRGBからLabへ変換するため、CCDの物理的特性に較正された3個のテーブル、即ち、
RGB->L
RGB->a
RGB->b
が必要になる。
【0594】
LabからCMYへ変換するため、インク/プリンタの物理的特性に較正された3個のテーブル、即ち、
Lab->C
Lab->M
Lab->Y
が必要になる。
【0595】
8ビット入力カラーコンポーネントは、変換テーブルへのインデックス付けのため、固定小数点数(3:5)として取り扱われる。整数の3ビットはインデックスを与え、小数の5ビットは補間として使用される。3ビットは8個の値を与えるので、3次元で512エントリー(8×8×8)が得られる。各エントリーのサイズは1ビットであり、1テーブル当たり512バイトが必要である。
【0596】
したがって、色空間変換プロセスは図95に示されるように実装され、以下のルックアップテーブルが使用される。
【0597】
【表68】
Figure 2004536736
トライリニア補間は、8個の値の間の補間を返す。ルックアップから各8ビット値を返すために1サイクルを要し、全部で8サイクルを要する。トライリニア補間は、1サイクル当たり2個の乗算ALUが使用されたとき、8サイクルを使用する。一般的なトライリニア補間情報はこの文書のALUセクションに記載されている。ルックアップテーブル用の512バイトは16個のキャッシュラインに詰め込まれる。
【0598】
画像の単一のカラーコンポーネントを変換するための時間は0.105秒(1500*1000*7サイクル*1サイクル当たり10ns)である。3コンポーネントを変換するため、0.415秒を要する。都合良く、プリントアウト用の色空間変換は、プリントアウト中にオンザフライ方式で行われる。
【0599】
カラーコンポーネントが別々に変換される場合、それらは入力色空間コンポーネントを上書きしなければならない。なぜならば、入力色空間からの全てのカラーコンポーネントは各コンポーネントを変換するために必要になるからである。
【0600】
補間を実行するために1個の乗算ユニットだけが使用されるので、Lab->CMY変換の全体を単一パスとして行うことが可能である。このためには、三つの垂直ストリップ読み出しイタレータと、三つの垂直ストリップ書き込みイタレータと、が必要であり、3個の変換テーブルに同時にアクセスする。その場合、入力画像へ書き戻し、余分なメモリを使用しないことも可能である。しかし、3個の変換テーブルへのアクセスは、各々に対するキャッシュ処理の1/3に相当し、プロセス全体では高いレイテンシーを生じることになる。
【0601】
アフィン変換
写真を用いて画像をコンポジットする前に、画像を回転、スケーリング、及び並進することが必要である。画像が並進だけされている場合、直接的なサブピクセル平行移動関数を使用する方が高速になる。しかし、回転、拡大、及び並進は、単一のアフィン変換に組み込むことができる。
【0602】
汎用アフィン変換は、加速関数として組み込みことが可能である。アフィン変換は2次元に制限され、縮小される場合、入力画像はスケール関数によって予めスケーリングされるべきである。汎用アフィン変換を備えることにより、出力画像を同時に1ブロックずつ構築することが可能になり、画像に対して多数の変換を実行するために要する時間を削減できる。なぜならば、多数の変換の全てを同時に適用できるからである。
【0603】
変換行列はクライアントによって与えられる必要があり、行列は、望まれる変換の逆行列でなければならない。即ち、その行列を出力画素座標に適用することによって入力座標が得られる。
【0604】
2次元行列は、通常、以下の3×3配列、即ち、
【0605】
【数1】
Figure 2004536736
によって表現される。
【0606】
第3列は常に[0,0,1]であるため、クライアントはそれを指定しなくてもよい。その代わりに、クライアントはa,b,c,d,e,fを指定する。
【0607】
左上画像画素の座標が(0,0)として表される入力画像内の座標(x,y)が与えられた場合、入力座標は、(ax+cy+e,bx+dy+f)によって指定される。入力座標が決定されると、入力画像は、その画素値に達するためサンプリングされる。入力画像画素のバイリニア補間は、計算された座標における画素の値を決定するため使用される。アフィン変換は平行線を保存するので、画像は、最高の平均入力画像キャッシュコヒーレンスを得るため32画素幅の出力垂直ストリップで処理される。
【0608】
3個の乗算ALUは、バイリニア補間を2サイクル内で実行するために必要である。乗算ALU1及び2は、線Y及び線Y+1のそれぞれについてXに関してリニア補間を実行し、乗算ALU3は、乗算ALU1及び2によって出力された値の間でYに関するリニア補間を実行する。
【0609】
Xに関して出力線を横切って右へ移動するとき、2個のアダーALUは、「a」を現在のX値に加算し、「b」を現在のY値に加算することによって、実際の入力画像座標を計算する。次の線(最大で32画素を処理した後の垂直ストリップ内の次の線、又は新しい垂直ストリップの最初の線)へ進んだとき、X及びYを所与のブロックに対する予め計算されたスタート座標値定数に更新する。
【0610】
入力座標を計算するプロセスは図96に示され、同図では、以下の定数がソフトウェアによってセットされる。
【0611】
画素計算
入力画像座標が得られると、入力画像をサンプリングする必要がある。ルックアップテーブルは、バイリニア補間の準備として指定された座標における値を返すため使用される。基本プロセスは図97に示され、以下のルックアップテーブルが使用される。
【0612】
【表69】
Figure 2004536736
アフィン変換は、全部で4個の乗算ALU及び全部で4個のアダーALUを必要とし、良好なキャッシュコヒーレンスがある場合、1出力画素当たり平均2サイクルでアフィン変換を実行できる。このタイミングは優れたキャッシュコヒーレンスを前提とし、この前提は画像に歪みが無い場合には成立する。最悪ケースでは、画像がかなり歪み、重要なVarkスクリプトが含まれている可能性は低い。
【0613】
128×128画像を変換するために要する時間は、0.00033秒(32768サイクル)である。これが4チャンネル(aチャンネルを含む)を備えたクリップ画像である場合、必要な総時間は0.00131秒(131072サイクル)である。
【0614】
垂直ストリップ書き込みイタレータは画素を出力するため必要である。読み出しイタレータは不要である。しかし、アフィン変換アクセラレータは、入力画像画素にアクセスするために要する時間によって制約されるので、できるだけ多数のキャッシュラインが入力画像からの画素の読み出しに割り付けられるべきである。少なくとも32が利用可能であり、好ましくは、64以上が利用可能である。
【0615】
スケーリング
スケーリングは、基本的に画像の再サンプリングである。画像の拡大はアフィン変換関数を用いて実行できる。縮小を含む一般化された画像のスケーリングは、ハードウェア加速型スケール関数によって行われる。スケーリングはX及びYに関して独立に行われるので、異なるスケール倍率を各次元で使用することができる。一般化されたスケールユニットは、位置合わせに関して、アフィン変換スケール関数と適合しなければならない。
【0616】
一般化されたスケーリングプロセスは図98に示されている。Xに関するスケールは図99に示されるようにFantの再サンプリングアルゴリズムによって達成される。
【0617】
以下の定数がソフトウェアによってセットされる。
【0618】
【表70】
Figure 2004536736
以下のレジスタは一時変数を保持するため使用される。
【0619】
【表71】
Figure 2004536736
Yに関するスケールプロセスは図100に示され、X画素の順番の処理を考慮するためFantの再サンプリングアルゴリズムの僅かに変更されたバージョンによっても実現される。
【0620】
以下の定数がソフトウェアによってセットされる。
【0621】
【表72】
Figure 2004536736
以下のレジスタが一時変数を保持するため使用される。
【0622】
【表73】
Figure 2004536736
以下のDRAM FIFOが使用される。
【0623】
【表74】
Figure 2004536736
画像モザイク処理
画像のモザイク処理はタイリングの一形態である。モザイク処理は、特別に設計された「タイル」を、水平方向及び垂直方向に複数回、第2の(通常はより大きい)画像空間へコピーする処理を含む。モザイク処理されたとき、小さいタイルは継ぎ目のないピクチャーを形成する。この一例は、レンガ壁の区画の小さいタイルである。それは、モザイク処理されたときに、完全なレンガ壁を形成するように設計される。尚、モザイク処理には、スケーリング、又はサブピクセル平行移動が含まれないことに注意すべきである。
【0624】
モザイク処理を行うために最もキャッシュコヒーレントな方法は、画像をライン毎に順次に出力し、同じ入力画像のラインを、そのラインの区間の間、繰り返すことである。ラインが終了したとき、入力画像は次のラインへ進められるべきである(出力ラインをはさんで複数回それを繰り返すべきである)。
【0625】
モザイク関数の概要は図101の390に示されている。順次読み出しイタレータ392は入力タイルの単一ラインを連続して読み出すようにセットアップされる(スタートラインは0であり、エンドラインは1である)。各入力画素は、書き込みイタレータ393−395の三つ全てに書き込まれる。アダーALUのカウンタ397は、出力ライン中の画素数をカウントダウンし、ラインの最後にシーケンスを終了する。
【0626】
ラインの処理の最後に、小さいソフトウェアルーチンは、マイクロコード及び順次読み出しイタレータ(これは、FIFOをクリアし、タイルのライン2を繰り返す)を再始動する前に、順次読み出しイタレータのスタートライン及びエンドラインレジスタを更新する。書き込みイタレータ393−395は更新されず、出力画像の対応した部分へ書き込み続けるだけである。正味の効果として、タイルが出力ラインをはさんで1ライン繰り返され、タイルが垂直方向に繰り返される。
【0627】
このプロセスはメモリ帯域幅を完全には使用しない。なぜならば、入力画像におけるキャッシュコヒーレンスは優れているが、モザイク処理を他のサイズのタイルと共に機能させることができないからである。このプロセスは、1個のアダーALUを使用する。3個の書き込みイタレータ393−395の各々が、画像の1/3に書き込む(画像をタイルサイズの境界に分割する)ならば、モザイクプロセスの全体は1出力画像画素当たり1/3サイクルの平均速度で行われる。1500×1000の画像の場合、これは、0.005秒(5000000ns)と一致する。
【0628】
サブピクセルトランスレータ
画像を背景とコンポジットする前に、X及びYの両方に関してサブピクセル量で画像を平行移動させることが必要である。サブピクセル平行移動は、各次元に1画素ずつ画像のサイズを増加することができる。画像の外側の領域の値は、定数値(例えば、黒色)又はエッジ画素繰り返しのようなクライアントによって決定される値である。典型的に、黒色を使用する方がよい。
【0629】
サブピクセル平行移動プロセスは図102に示されている。所定の次元のサブピクセル平行移動は、
Pixelout = Pixelin * (1-Translation) + Pixelin-1 * Translation
によって定義される。
【0630】
これは、補間の形式、即ち、
Pixelout= Pixelin-1 + (Pixelin - Pixelin-1) * Translation
として表現することができる。
【0631】
単一の乗算ALU及び単一のアダーALUを組み合わせて使用する単一(又は平均)サイクル補間エンジンの実装は簡単である。X及びYの両方に関するサブピクセル平行移動は、二つの補間エンジンを必要とする。
【0632】
Yに関するサブピクセル平行移動を行うため、二つの順次読み出しイタレータ400、401が必要になり(一方は、同じ画像から他の画像よりも進んでいるラインを読み出す)、一つの順次書き込みイタレータ403が必要になる。
【0633】
第1の補間エンジン(Yに関する補間)は、二つのストリームからのデータペアを受け取り、それらの間を線形に補間する。第2の補間エンジン(Xに関する補間)は、単一の1次元ストリームとしてそのデータを受け取り、値の間を線形に補間する。両方のエンジンは平均として1サイクルで補間を行う。
【0634】
各補間エンジン405、406は、平均的に1出力画素当たり1サイクルでサブピクセル平行移動を実行する能力を備えている。したがって、全体的な時間は1出力画素当たり1サイクルであり、2個の乗算ALUと2個のアダーALUが必要である。
【0635】
サブピクセル平行移動関数から32画素を出力するために要する時間は、平均で320ns(32サイクル)である。これは、DRAMへの完全な4個のキャッシュラインアクセスに十分な時間であり、3個の順次イタレータの使用はタイミング原価以内に十分に収まる。
【0636】
画像をサブピクセル平行移動するために要する総時間は、したがって、出力画像の1画素当たり1サイクルである。サブピクセル平行移動されるべき典型的な画像は、サイズ128*128のタイルである。出力画像サイズは129*129である。このプロセスは、129*129*10ns=166410nsである。
【0637】
画像タイル貼り関数もサブピクセル平行移動アルゴリズムを使用するが、サブピクセル平行移動処理されたデータを書き出す必要はなく、そのデータを更に処理する。
【0638】
画像タイルタイラー
画像をタイル貼りする上位レベルアルゴリズムはソフトウェアで実行される。タイルの配置が決定されると、適切な着色タイルを合成しなければならない。各タイルの画像への実際のコンポジット処理は、マイクロコード化されたALUによってハードウェアで行われる。タイルのコンポジット処理は、背景画像へのテクスチャ貼り付けとカラー貼り付けの両方を含む。ある種のケースでは、背景に加えられる実際のテクスチャ量と、予定されたテクスチャ量とを比較し、貼り付けられるカラーをスケーリングするためこれを使用することが望ましい。これらのケースでは、テクスチャを先に貼り付けることが必要である。
【0639】
カラー貼り付け機能及びテクスチャ貼り付け機能はある程度独立しているので、これらはサブ関数に分離される。
【0640】
種々のテクスチャスタイル及びカラーリングスタイルのための4チャンネルタイルコンポジット当たりのサイクル数は以下の表に要約されている。
【0641】
【表75】
Figure 2004536736
タイルカラーリング及びコンポジット処理
タイルは、(タイル全体に)一定色を具備するか、又は入力画像から各画素値を取るようにセットされる。これらの両方のケースは、不透明度を拡大縮小するため、テクスチャ処理ステージからのフィードバックがある(シニングペイントと同様)。
【0642】
4ケースに対するステップは以下のように要約できる:
−タイルの不透明度値をサブピクセル平行移動する;
−(テクスチャ貼り付けからのフィードバックが有効である場合)タイルの不透明度を選択的にスケーリングする;
−画素の色を(一定に、又は画像マップから)決定する;
−画素を背景画像上でコンポジットする。
【0643】
4ケースの各々は、関数を実行するために要する時間を最小限に抑えるため、別々に取り扱われる。単一カラーチャンネルのカラーコンポジット処理スタイル当たりの時間は以下の表に要約されている。
【0644】
【表76】
Figure 2004536736
一定色
この場合、タイルは、ソフトウェアによって決定された一定色を具備する。ACP31が一つのタイルを設置する間に、ソフトウェアは次のタイルの配置及びカラーリングを決定することができる。
【0645】
タイルの色は、タイル貼りされている画像をスケーリングした画像へのバイリニア補間によって決定することが可能である。スケーリングされた画像は、作成し、画像ピラミッドの所定の位置に保存することが可能であり、タイル演算の全体に対して1回だけ実行すればよい。サイズが128×128である場合、画像は、各次元に関して、128:1で縮小される。
【0646】
フィードバック無し
タイルのテクスチャ処理からのフィードバックが無いとき、タイルは、指定された座標に設置されるだけである。タイル色は、画素の色毎に使用され、コンポジットのための不透明度は、タイルのサブピクセル平行移動処理された不透明度チャンネルから由来する。このケースでは、カラーチャンネル及びテクスチャチャンネルは、タイル貼りパスの間に完全に独立して処理可能である。
【0647】
プロセスの概要は図103に示されている。タイルのサブピクセル平行移動410は、1出力画素当たり1サイクルの平均時間の場合、2個の乗算ALU及び2個のアダーALUを使用して実行することができる。サブピクセル平行移動からの出力は、背景順次読み出しイタレータからの背景画像で一定タイル色412をコンポジット処理411する際に使用されるべきマスクである。
【0648】
コンポジット処理は、1コンポジット当たり1サイクルの平均時間の場合、1個の乗算ALU及び1個のアダーALUを用いて実行できる。したがって、必要条件は、3個の乗算ALU及び3個のアダーALUである。4個の順次イタレータ413−416が必要であり、それらの内容を読み書きするために320nsを要する。サブピクセル並行移動及びコンポジットのために要する1画素当たりの平均サイクル数の場合、バッファを読み書きするための十分な時間がある。
【0649】
フィードバック付き
タイルのテクスチャ処理からのフィードバックがあるとき、タイルは指定された座標に配置される。タイル色は、画素の色毎に使用され、コンポジットのための不透明度は、フィードバックパラメータによってスケーリングされたサブピクセル平行移動処理された不透明度チャンネルから由来する。このようにして、テクスチャ値は、カラー値が貼り付けられる前に計算しなければならない。
【0650】
プロセスの概要は図97に示されている。タイルのサブピクセル平行移動は、1出力画素当たり1サイクルの平均時間の場合、2個の乗算ALU及び2個のアダーALUを使用して実行することができる。サブピクセル平行移動からの出力は、フィードバック順次読み出しイタレータ420から読み出されたフィードバックに応じてスケーリングされるべきマスクである。このフィードバックはスケーラ(1個の乗算ALU)421へ送られる。
【0651】
コンポジット処理426は、1コンポジット当たり1サイクルの平均時間の場合、1個の乗算ALU及び1個のアダーALUを用いて実行できる。したがって、必要条件は、4個の乗算ALU及び4個のアダーALUである。プロセス全体は、平均的に1サイクル内で完了可能であるが、ボトルネックはメモリアクセスである。なぜならば、5個の順次イタレータが必要になるからである。十分なバッファリングが行われる場合、平均時間は1画素当たり1.25サイクルである。
【0652】
入力画像からの色
タイルの画素に着色する一つの方法は、入力画像の画素から色を取り出すことである。ここでも、コンポジット処理には、テクスチャ処理からのフィードバック付きとフィードバック無しの二つの可能性がある。
【0653】
フィードバック無し
この場合、タイル色は、入力画像内の対応する画素から簡単にもたらされる。コンポジット処理用の不透明度は、サブピクセルシフトされたタイルの不透明度チャンネルに由来する。
【0654】
プロセスの概要は図105に示されている。タイルのサブピクセル平行移動425は、1出力画素当たり1サイクルの平均時間の場合、2個の乗算ALU及び2個のアダーAL
Uを使用して実行することができる。サブピクセル平行移動からの出力は、(入力画像428から読み出された)タイルの画素色を背景画像429とコンポジット処理426する際に使用されるべきマスクである。このフィードバックは、スケーラ(1個の乗算ALU)431へ送られる。
【0655】
コンポジット処理434は、1コンポジット当たり1サイクルの平均時間の場合、1個の乗算ALU及び1個のアダーALUを用いて実行できる。したがって、必要条件は、3個の乗算ALU及び3個のアダーALUである。プロセス全体は平均して1サイクル以内に完了可能であるが、ボトルネックはメモリアクセスである。なぜならば、5個の順次イタレータが必要になるからである。十分なバッファリングが行われる場合、平均時間は1画素当たり1.25サイクルである。
【0656】
フィードバック付き
この場合、タイル色は、やはり入力画像内の対応する画素から簡単にもたらされるが、コンポジット処理用の不透明度は、テクスチャ処理パス中に実際に適用されたテクスチャ高さの相対的な量による影響を受ける。このプロセスは図106に示されている。
【0657】
タイルのサブピクセル平行移動431は、1出力画素当たり1サイクルの平均時間の場合、2個の乗算ALU及び2個のアダーALUを使用して実行することができる。サブピクセル平行移動からの出力は、フィードバック順次読み出しイタレータ432から読み出されたフィードバックに応じてスケーリング431されるべきマスクである。
【0658】
コンポジット処理は、1コンポジット当たり1サイクルの平均時間の場合、1個の乗算ALU及び1個のアダーALUを用いて実行できる。
【0659】
したがって、必要条件は、4個の乗算ALU及び3個のアダーALUである。プロセス全体は平均して1サイクル以内に完了可能であるが、ボトルネックはメモリアクセスである。なぜならば、6個の順次イタレータが必要になるからである。十分なバッファリングが行われる場合、平均時間は1画素当たり1.5サイクルである。
【0660】
タイルテクスチャ処理
各タイルはそのテクスチャチャンネルによって定義される表面テクスチャを有する。テクスチャは、サブピクセルへ移行移動され、次に、出力画像に貼り付けられる。テクスチャコンポジット処理には、
テクスチャ配置と、
25%背景+タイルのテクスチャと、
平均高さアルゴリズムと、
の3種類のスタイルがある。
【0661】
更に、平均高さアルゴリズムはカラーコンポジット処理のためのフィードバックパラメータを節約する。
【0662】
テクスチャコンポジット処理スタイル毎に要する時間は以下の表に要約される。
【0663】
【表77】
Figure 2004536736
テクスチャ置換
このケースでは、タイルからのテクスチャは、図107に示されるように、画像のテクスチャチャンネルを置き換える。タイルのテクスチャのサブピクセル平行移動436は、1出力画素当たり1サイクルの平均時間で、2個の乗算ALU及び2個のアダーALUを使用して実行できる。サブピクセル平行移動からの出力は、順次書き込みイタレータ437へそのまま供給される。
【0664】
テクスチャ置換コンポジット処理に要する時間は1画素当たり1サイクルである。テクスチャ値の100%が常に背景に貼り付けられるので、フィードバックは無い。したがって、チャンネルを特定の順序で処理する必要はない。
【0665】
25%背景+タイルのテクスチャ
この例では、タイルからのテクスチャは既存テクスチャ値の25%に加えられる。新しい値は元の値以上でなければならない。その上、テクスチャチャンネルは8ビットしかないので、新しいテクスチャ値は255でクリップされる。利用されるプロセスは図108に示されている。
【0666】
タイルのテクスチャのサブピクセル平行移動440は、1出力画素当たり1サイクルの平均時間で、2個の乗算ALU及び2個のアダーALUを使用して実行できる。サブピクセル平行移動440からの出力は、アダー441へ供給され、背景テクスチャ値の1/4 442に加算される。最小値及び最大値関数444は、サブピクセル平行移動のために使用されない2個のアダーによって設けられ、出力は順次書き込みイタレータ445に書き込まれる。
【0667】
このスタイルのテクスチャコンポジット処理のために要する時間は1画素当たり1サイクルである。テクスチャ値の100%は、(たとえ、255でクリッピングされたとしても)背景に貼り付けられたと考えられるので、フィードバックは無い。したがって、チャンネルを特定の順序で処理する必要はない。
【0668】
平均高さアルゴリズム
このテクスチャ貼り付けアルゴリズムでは、タイルに基づいて平均高さが計算され、各画像の高さは平均高さと比較される。画素の高さが平均よりも小さい場合、ストローク高さが背景高さに加えられる。画素の高さが平均以上である場合、ストローク高さが平均高さに加えられる。このようにして、背景ピークはストロークを細くする。この高さは、背景がストローク貼り付けを0まで細くすることを避けるため、最小限の量で増加するように拘束される(しかし、最小限の量は0になり得る)。高さは、テクスチャチャンネルが8ビット解像度であるため、255で切り取られる。
【0669】
貼り付けられたテクスチャと貼り付けられる予測量との差のフィードバックが存在し得る。フィードバック量は、タイルの色の貼り付けの際に倍率として使用可能である。
【0670】
両方のケースで、平均テクスチャは、ソフトウェアによって提供され、スケーリングされたテクスチャマップに関するバイレベル補間を実行することにより計算される。ソフトウェアは、現在のタイルが貼り付けられている間に、次のタイルの平均テクスチャ高さを決定する。ソフトウェアは、付加する最小限の厚さを与え、この最小限の厚さは、典型的に、タイル貼り付けプロセスの全体で一定である。
【0671】
フィードバック無し
フィードバックが無い場合、テクスチャは、図109に示されるように、背景テクスチャに貼り付けられるだけである。
【0672】
4個の順次イタレータが必要であり、これは、プロセスが1サイクルの間でパイプライン化できるならば、メモリの高速性が遅れないために十分であることを意味する。
【0673】
タイルのテクスチャのサブピクセル平行移動450は、1出力画素当たり1サイクルの平均時間で、2個の乗算ALU及び2個のアダーALUを使用して実行できる。最小値及び最大値関数451、452は、1サイクル以内に全演算を完了するため、別個のアダーALUを必要とする。テクスチャのサブピクセル平行移動によって既に2が使用されているので、1サイクル平均時間のために十分な残り時間が無い。
【0674】
したがって、1画素のテクスチャを処理するための平均時間は2サイクルである。フィードバックが存在せず、コンポジット処理のカラーチャンネルの順序は無関係であることに注意する必要がある。
【0675】
フィードバック付き
これは、概念的にはフィードバック無しの場合と同じであるが、但し、標準的なテクスチャ貼り付けアルゴリズムの処理の他に、実際に貼り付けられたテクスチャの割合を記録しなければならない。この割合は、引き続きタイルの色を背景画像にコンポジット処理するための倍率として使用可能である。フローチャートは図110に示され、以下のルックアップテーブルが使用される。
【0676】
【表78】
Figure 2004536736
ソフトウェアで設けられた1/Nテーブル460の256個のエントリーの各々は16ビットであり、連続して保持するため16個のキャッシュラインが必要である。
【0677】
タイルのテクスチャのサブピクセル平行移動461は、1出力画素当たり1サイクルの平均時間で、2個の乗算ALU及び2個のアダーALUを使用して実行できる。最小値関数462及び最大値関数463の各々は、1サイクル以内に全演算を完了するため、別個のアダーALUを必要とする。テクスチャのサブピクセル平行移動によって既に2が使用されているので、1サイクル平均時間のために十分な残り時間が無い。
【0678】
したがって、1画素のテクスチャを処理するための平均時間は2サイクルである。フィードバックデータエリア(タイルサイズの画像チャンネル)のために十分な空間を割り付けるべきである。テクスチャは、タイルの色が貼り付けられる前に貼り付けられるべきである。なぜならば、フィードバックがタイルの不透明度をスケーリングするため使用されるからである。
【0679】
CCD画像インターポレータ
ISI83(図3)によってCCDから獲得される像は750×500画素である。像がISIによって撮影されたときのカメラの向きは、画像の上部が「上」に対応するように、画素を0、90、180又は270度回転させるために使用される。全ての画素は、(最大で3というよりも)R、G又はBカラーコンポーネントだけを有するので、これらが回転しているという事実は、画素値を解釈する際に考慮されなければならない。カメラの向きに応じて、2×2画素ブロックの各々は、図111に示されたコンフィギュレーションの何れかを有する。
【0680】
CCD撮影された像を処理のために有用な形式に変換するために、CCD撮影された像に以下の幾つかの処理を行うことが必要である:
−CCD像の低サンプルレートカラーコンポーネントのアップ補間(画素の正しい向きを解釈);
RGBから内部色空間への色変換;
−750×500から1500×1000へ内部空間画像をスケーリング;
−プレーナーフォーマットで像を書き込み。
【0681】
像のチャンネル全体は、ワーピングを可能にさせるため、同時に利用できることが必要である。小規模メモリモデル(8MB)の場合、一時的オブジェクトとして全解像度で単一のチャンネルを保持するための空間しかない。このため、色変換は単一のカラーチャンネルへの変換である。このプロセスに関する制約要因は色変換である。なぜならば、色変換は、RGBから内部色空間へのトライリニア補間を含み、このトライリニア補間は、1チャンネル当たり0.026ns(750×500×1画素当たり7サイクル×1サイクル当たり10ns=26250000ns)を要するプロセスだからである。
【0682】
内部色空間画像をスケーリングする前に色変換を実行することが重要である。なぜならば、これは、スケーリングされる画素数(したがって、全体のプロセス時間)を4の倍率で削減するからである。
【0683】
全ての変換に対する必要条件がALUスキームに当てはまる訳ではない。変換は、したがって、以下の二つのフェーズに分解される:
フェーズ1:CCD像の低サンプルレートカラーコンポーネントのアップ補間(画素の正しい向きを解釈);
RGBから内部色空間への色変換;
プレーナーフォーマットでの像の書き込み;
フェーズ2:750×500から1500×1000へ内部空間画像をスケーリング。
【0684】
スケール関数の分離は、小さい色変換後の画像は大きい画像と同時にメモリ内に存在すべきであることを意味する。フェーズ1からの出力(0.5MB)は、通常、画像ピラミッド(1MB)のために確保されたメモリエリアに安全に書き込まれる。フェーズ2からの出力は、一般的な拡大されたCCD像である。スケーリングの分離によって、更に、スケーリングをアフィン変換によって実現することが可能になり、これは、簡単な1:2の拡大ではない様々なCCD解像度を許容する。
【0685】
フェーズ1:低サンプルレートカラーコンポーネントのアップ補間
3カラーコンポーネント(R、G及びB)の各々は、所与の画素に対して色変換を実行するためアップ補間される必要がある。色変換は7サイクルを使用するので、補間を実行するため1画素当たりに7サイクルがある。
【0686】
Gの補間は簡単であり、図112に示されている。向きに応じて、実際の画素値Gは、
奇数ライン上の奇数画素及び偶数ライン上の偶数画素と、偶数ライン上の奇数画素及び奇数ライン上の偶数画素との間で交互に代わる。両方のケースで、リニア補間が要求される全てである。Rコンポーネント及びBコンポーネントの補間は、図113及び図113に示されるようにもっと複雑である。なぜならば、水平方向及び垂直方向において、同図から分かるように、3行の画素に同時にアクセスすることが要求されるので、3個の順次読み出しイタレータが必要であり、各順次読み出しイタレータは単一行によってオフセットされる。その上、各行のためのラッチを用いて、同じ行の前の画素へアクセスする。
【0687】
したがって、各画素は、CCDからの1個のコンポーネントと、他の2個のアップ補間されたコンポーネントと、を格納する。一方のコンポーネントがバイリニア補間されているとき、他方はリニア補間されている。補間係数は定数0.5であるため、補間は、加算及び1ビット右シフトによって(1サイクル以内に)計算することが可能であり、係数0.5のバイリニア補間は、3回の加算及び2ビット右シフト(3サイクル)によって計算可能である。必要な総サイクル数は、単一の乗算ALUを使用した場合4である。
【0688】
図115は、回転0の偶数ライン偶数画素(EL,EP)及び奇数ライン奇数画素(OL,EP)のケースを示し、図116は、回転0の偶数ライン奇数画素(EL,OP)及び奇数ライン偶数画素(OL,OP)のケースを示している。他の回転は、これらの2個の表現の少し異なる形式である。
【0689】
色変換
RGBからLabへの色空間変換は、汎用色空間変換関数に関して説明された方法と同じ方法を使用して実現され、1画素当たり8サイクルを要するプロセスである。フェーズ1の処理は図117を参照して説明される。
【0690】
RGBのアップ補間は4サイクル(1個の乗算ALU)を必要とするが、色空間の変換は、ルックアップ転送時間のため、1画素当たり8サイクル(2個の乗算ALU)を必要とする。
【0691】
フェーズ2
画像スケーリング
このフェーズは、CCD解像度(750×500)から作業用写真解像度(1500×1000)への画像のアップ補間と関係する。スケーリングは、1:2の縮尺のアフィン変換を実行させることにより行われる。汎用アフィン変換のタイミングは1出力画素当たり2サイクルであり、本ケースでは、0.03秒のスケーリング時間の経過を意味する。
【0692】
画像照明
画像が処理された後、画像を一つ以上の光源によって照明することができる。光源は以下の何れの型でもよい:
1.指向性型−無限の距離があるので、単一方向へ平行光を投じる;
2.オムニ型−全方向へ非焦点光を投じる;
3.スポット型−特定の目標点へ焦点ビームを投光する。スポット光に関連した円錐及び半影部が存在する。
【0693】
シーンは、反射角を変化させるため関連したバンプマップを有する。周辺光も選択的に照明されたシーンに存在する。
【0694】
加速された照明のプロセスでは、単一の光源によって一つの画像チャンネルを照明することに関心がある。多数の光源を、1光源当たりに1パスの多数のパスとして、単一の画像チャンネルに適用することが可能である。多数のチャンネルは、バンプマップがある場
合も無い場合も、同時に一つずつ処理可能である。
【0695】
ある画素における法線表面ベクトル(N)は、もし存在するならば、バンプマップから計算される。バンプマップが存在しない場合、デフォルト法線ベクトルは、画像面に垂直、即ち、N=[0,0,1]である。
【0696】
ビューイングベクトルVは、常に、画像平面に垂直、即ち、V=[0,0,1]である。
【0697】
指向性光源の場合、画素から光源への光源ベクトル(L)は、画像全体中で一定であり、画像全体に対して1回計算される。(有限の距離にある)オムニ光源の場合、光源ベクトルは、画素毎に独立に計算される。
【0698】
周辺光の画素の反射は、IakaOdに従って計算される。
【0699】
光源の画素の散乱及び鏡面反射は、Phongモデル:
fattIp[kdOd(N・L) + ksOs(R・V)n]
に従って計算される。
【0700】
光源が無限大である場合、光源強度は画像全体に亘って一定である。
【0701】
各光源は1画素当たりに3個の寄与度、即ち、
周辺光寄与度
散光寄与度
鏡面寄与度
を有する。
【0702】
光源は以下の変数を用いて定義される。
【0703】
【表79】
Figure 2004536736
同じ反射係数(k,k,k)がカラーコンポーネント毎に使用される。
【0704】
所与の画素の値は、周辺光寄与と、各光の拡散寄与及び鏡面寄与の合計との和に一致する。
【0705】
照明計算のサブプロセス
散光寄与度を計算するため、様々なその他の計算が必要である。それらの計算の中には、
1/ΔX


N・L
R・V
att
fcp
の計算が含まれる;
サブプロセスは、
周辺光
散光
鏡面
の寄与度を計算するためにも定義される。
【0706】
サブプロセスは、光源の全体的な照度を計算するために使用できる。4個の乗算ALUしか存在しないので、特定のタイプの光源に対するマイクロコードは、性能のため適切に混ぜられたサブプロセスを含み得る。
【0707】
1/√Xの計算
Vark照明モデルはベクトルを使用する。殆どの場合に、正規化の目的のため、ベクトルの長さの逆数を計算することが重要である。長さの逆数を計算するためには、1/([x]の平方根)の計算が必要である。
【0708】
論理的に、このプロセスは、図118に示されるような入力及び出力を有するプロセスとして表現可能である。図119を参照すると、この計算は、推定値をルックアップし、次に、以下の関数:
Vn+1 = 1/2 Vn(3-XVn 2)
を1回繰り返すことによって行うことが可能である。
【0709】
繰り返しの回数は、要求される精度に応じる。このケースでは、16ビットの精度が必要である。したがって、テーブルは、8ビットの精度であり、1回の繰り返しだけが必要である。以下の定数はソフトウェアによってセットされる。
【0710】
【表80】
Figure 2004536736
以下のルックアップテーブルが使用される。
【0711】
【表81】
Figure 2004536736
Nの計算
Nは表面法線ベクトルである。バンプマップが存在しない場合、Nは一定である。バンプマップが存在する場合、Nは画素毎に計算しなければならない。
【0712】
バンプマップ無し
バンプマップが無いとき、固定法線Nは、以下の性質、即ち、
N=[X,Y,Z]=[0,0,1]
||N||=1
1/||N||=1
正規化されたN=N
を有する。
【0713】
これらの性質は、具体的に法線ベクトル及び1/||N||を計算する代わりに使用することが可能であり、他の計算を最適化することができる。
【0714】
バンプマップ有り
図120に示されるように、バンプマップが存在する場合、Nは、X次元とY次元のバンプマップ値を比較することによって計算される。図120は、同じ行及び列における画素に関して画素P1に対するNの計算を示しているが、P1自体での値も含まれる。Nの計算は、スケール倍率(X及びYで同じ倍率)で乗算することにより、解像度に依存しないようにされる。このプロセスは、図121に示されるような入力及び出力(Zは常に1である)を有するプロセスとして表現できる。
【0715】
は常に1である。X及びYは未だ正規化されていない(なぜならば、Z=1である)。Nの正規化は、N.Lが計算されるまで遅延されるので、1/||N||による乗算は、3回ではなく1回である。
【0716】
Nを計算する実際のプロセスは図122に示されている。
【0717】
以下の定数がソフトウェアによってセットされる。
【0718】
【表82】
Figure 2004536736
Lの計算
指向性光
光源が無限遠であるとき、光源は実効的な一定光ベクトルLを有する。Lは、
L=[X, Y, Z
||L||=1
1/||L||=1
のようにソフトウェアによって正規化され、計算される。
【0719】
これらの性質は、具体的にL及び1/||L||を計算する代わりに使用することが可能であり、他の計算を最適化することができる。このプロセスは図123に示されている。
【0720】
オムニ光及びスポット光
光源が無限遠ではないとき、Lは現在点Pから光源PLまでのベクトルである。P=[X, Y, 0]であるため、Lは、
L=[X, Y, Z
=X−XPL
=Y−YPL
=−ZPL
によって与えられる。1/||L||を乗算することにより、X、Y、及びZの各々を正規化する。(後で正規化の際に使用される)1/||L||の計算は、
V=X +Y +Z
を計算し、次に、
−1/2
を計算することによって実行される。
【0721】
このケースでは、Lの計算は、図124に示されるような入力及び出力を有するプロセスとして表現可能である。
【0722】
及びYは照度が計算されている画像の座標である、Zは常に0である。
【0723】
Lを計算する実際のプロセスは図125に示されている。
【0724】
以下の定数がソフトウェアによってセットされる。
【0725】
【表83】
Figure 2004536736
N.Lの計算
ベクトルNとベクトルLの内積の計算は、
+Y+Z
によって定義される。
【0726】
バンプマップ無し
バンプマップが無いとき、Nは一定[0,0,1]である。したがって、N.LはZに簡約化される。
【0727】
バンプマップ有り
バンプマップが存在するとき、内積を直接計算する必要がある。正規化されたNコンポーネントを取り込むのではなく、正規化されていないNと正規化されたLの内積を得た後に正規化を行う。Lは、(一定であるとき)ソフトウェアによって正規化されるか、又はL計算プロセスによって正規化される。このプロセスは図126に示されている。
【0728】
Nは、1になるように定義されているので、入力として不要である。しかし、その代わりに、結果を正規化するために1/||N||が必要とされる。N.Lを計算する実際の一プロセスは、図127に示されている。
【0729】
R・Vの計算
R・Vは鏡面寄与度の計算への入力として必要である。V=[0,0,1]であるため、Zコンポーネントだけが必要である。したがって、R・Vは、
R・V=2ZN(N.L)−Z
に簡約化される。
【0730】
加えて、非正規化Z=1であるため、正規化Z=1/||N||である。
【0731】
バンプマップ無し
最も簡単な実装は、Nが一定(即ち、バンプマップ無し)のときである。N及びVは定数であるため、N.L及びR・Vは、
V=[0, 0, 1]
N=[0, 0, 1]
L=[X, Y, Z
N.L=Z
R・V=2Z(N.L)−Z
=2Z−Z
=Z
として簡単化される。
【0732】
Lが一定(指向性光源)であるとき、正規化Zは、R・Vが要求されるときに、定数の形で与えることができる。Lが変化するとき(オムニ光及びスポット光のとき)、正規化Zはオンザフライ方式で計算しなければならない。それは、L計算プロセスの出力として獲得される。
【0733】
バンプマップ有り
Nが一定ではないとき、R・Vを計算するプロセスは、一般化された式、即ち、
R・V=2Z(N.L)−Z
を実施するだけである。入力及び出力は図128に示され、実際の実装は図129に示されている。
【0734】
減衰定数の計算
指向性光
光源が無限遠であるとき、光の強度は画像一面で変化しない。したがって、減衰定数fattは1である。この定数は、無限遠光源の照明計算を最適化するために使用可能である。
【0735】
オムニ光及びスポット光
光源が無限遠ではないとき、光の強度は次式、
att=f+f/d+f/d
に従って変化する。
【0736】
係数f、f及びfを適切にセットすることにより、光強度を一定に、距離に関して線形に、或いは、距離の平方によって減衰させることができる。
【0737】
d=||L||であるため、fattの計算は、図130に示されるような入力及び出力を有するプロセスとして表現可能である。
【0738】
attを計算する実際のプロセスは図131に定義される。
【0739】
以下の定数がソフトウェアによってセットされる。
【0740】
【表84】
Figure 2004536736
円錐及び半影ファクタの計算
指向性光及びオムニ光
これらの二つの光源は集光されないので、円錐又は半影を持たない。円錐−半影スケーリングファクタfcpは1である。この定数は、指向性光源及びオムニ光源の照明計算を最適化するために使用できる。
【0741】
スポット光
スポット光は特定の目標点(PT)に集光する。スポット光の強度は、像の特定の点が円錐内にあるか、半影にあるか、又は円錐/半影領域の外側にあるかによって変化する。
【0742】
図132を参照すると、半影一に対するfcpのグラフが示されている。円錐の内部470でfcpは1であり、半影の外部471でfcpは0である。円錐のエッジから半影の終わりまで、光強度は3次関数472に従って変化する。
【0743】
半影475及び円錐476の計算のための様々なベクトルが図133及び図134に示されている。
【0744】
図134に示されているように1次元に関して像の表面を調べることにより、3個の角A、B及びCが定義される。Aは、目標点479と光源478と円錐の終端480の間の角度である。Cは、目標点479と光源478と半影の終端481の間の角度である。これらの両方は所与の光源に対して一定である。Bは、目標点479と光源478と計算対象一482の間の角度であり、像上で計算される点毎に変化する。
【0745】
ここで、レンジAからCを0から1に正規化し、Bが、次式、
(B−A)/(C−A)
によってその角度レンジの間に収まる距離を見つける。
【0746】
そのレンジは0から1のレンジに丸められ、この値は、fcpの3次近似のためのルックアップとして使用される。
【0747】
したがって、fattの計算は、図135に示されるような入力及び出力を有するプロセスとして表現可能であり、fcpを計算する実際のプロセスは図136に示され、以下の定数がソフトウェアによってセットされる。
【0748】
【表85】
Figure 2004536736
以下のルックアップテーブルが使用される。
【0749】
【表86】
Figure 2004536736
周辺光寄与の計算
像に当てられる光の数とは無関係に、周辺光寄与が各画素に対して1回ずつ実行され、バンプマップには依存しない。
【0750】
周辺光計算プロセスは図131に示されるような入力及び出力を備えたプロセスとして表現可能である。このプロセスを実装するためには、図138に示されるように入力画像からの各画素(O)を定数値(I)によって乗算することが必要であり、以下の定数がソフトウェアによってセットされる。
【0751】
【表87】
Figure 2004536736
散光寄与の計算
表面に当てられた各光は拡散照明を生じる。拡散照明は、次式、
散光=k(N.L)
によって表される。2種類の実装形態を考えることができる。
【0752】
実装例1−定数N及びL
N及びLの両方が定数であるとき(指向性光でバンプマップが無いとき)、
N.L=Z
である。したがって、
散光=k
である。
【0753】
だけが変数であるため、散光寄与を計算する実際のプロセスは図139に示されるようなものであり、以下の定数がソフトウェアによってセットされる。
【0754】
【表88】
Figure 2004536736
実装例2−非定数N及びL
N又はLの何れかが非定数であるとき(ビットマップ、又はオムニ光若しくはスポット光からの照明であるとき)、散光計算は、次式、
散光=k(N.L)
に従って直接実行される。
【0755】
散光計算プロセスは図140に示されるような入力を備えたプロセスとして表現可能である。N.Lは、N.L計算プロセスを使用して計算するか、又は定数として与えられる。散光寄与を計算する実際のプロセスは図141に示されるようなプロセスであり、以下の定数がソフトウェアによってセットされる。
【0756】
【表89】
Figure 2004536736
鏡面寄与の計算
表面に当てられた各光は鏡面照明を生ずる。鏡面照明は、次式、
鏡面光= k(R・V)
によって表される。ここで、
=ksc+(1−ksc)I
である。
【0757】
鏡面光計算プロセスは二つの実装形態がある。
【0758】
実装例1−定数N及びL
第1の実装例は、N及びLの両方が定数であるとき(指向性光でバンプマップ無し)である。N、L及びVは一定であるので、N.L及びR・Vも一定である:
V=[0, 0, 1]
N=[0, 0, 1]
L=[X, Y, Z
N.L=Z
R・V=2Z(N.L)−Z
=2Z−Z
=Z
このようにして、鏡面光計算は、
鏡面光=k
=k (ksc+(1−ksc)I
=ksc +(1−ksc)I
として簡略化される。
【0759】
鏡面光計算ではOだけが変数であるため、鏡面光寄与の計算は、図142に示されるような入力及び出力を備えたプロセスとして表現可能であり、鏡面光寄与を計算する実際のプロセスは図143に示され、以下の定数がソフトウェアによってセットされる。
【0760】
【表90】
Figure 2004536736
実装例2−非定数N及びL
この実装例は、N又はLの何れかが一定ではないとき(ビットマップ、又はオムニ光若しくはスポット光からの照明であるとき)である。これは、R・Vを与える必要があることを意味し、R・Vを計算しなければならない。
【0761】
鏡面光計算プロセスは、図144に示されるような入力及び出力を備えたプロセスとして表現可能である。図145は、鏡面光寄与を計算する実際のプロセスを表し、以下の定数がソフトウェアによってセットされる。
【0762】
【表91】
Figure 2004536736
以下のルックアップテーブルが使用される。
【0763】
【表92】
Figure 2004536736
周辺光が唯一の照明であるとき
周辺光寄与が唯一の光源である場合、このプロセスは非常に簡単である。なぜならば、図146に示されているようなプロセス全体で周辺光を加える必要がないからである。像は、垂直方向に二つの区画に分割し、周辺光ロジックを複製することにより、半分の各々を同時に処理することが可能である(このようにして、全部で2個の乗算ALU及び4個の順次イタレータを使用する)。したがって、タイミングは、周辺光を適用する1画素当たり1/2サイクルである。
【0764】
典型的な照明のケースは、一つ以上の光によって照らされるシーンである。これらのケースでは、周辺光計算は非常に手軽であるため、周辺光計算は各光源の処理と共に収容される。処理されるべき最初の光は、正確なI設定値を持つべきであり、後続の光は、Iの値を0にすべきである(多重の周辺光寄与を避けるため)。
【0765】
周辺光が別個のパスとして(第1のパスではなく)処理されるならば、周辺光を現在の計算値に加えることが必要である(同じアドレスへの読み書きが必要である)。プロセスの概要は図147に示されている。
【0766】
このプロセスは、3個の像イタレータと1個の乗算ALUを使用し、平均で1画素当たり1サイクルを要する。
【0767】
無限光源
無限光源のケースでは、像全体で一定の光源強度が得られる。L及びfattの両方は定数である。
【0768】
バンプマップ無し
バンプマップが無いとき、一定法線ベクトルN[0,0,1]が存在する。照明の複雑さは、N、L及びfattが一定であることによって著しく軽減される。バンプマップ無しの単一の指向性光を当てるプロセスは図147に示され、以下の定数がソフトウェアによってセットされる。
【0769】
【表93】
Figure 2004536736
単一の無限光源の場合、図148に示されるような論理演算を実行することが求められ、ここで、KからKは以下の値をもつ定数である。
【0770】
【表94】
Figure 2004536736
このプロセスは、K、K及びKが定数であるため簡単化することができる。基本的に(乗算ALUのうちの3個を使用する)鏡面光寄与と散光寄与の計算が複雑であるため、周辺光計算を4番目の乗算ALUとして安全に加えることが可能である。処理される第1の無限光源は、真の周辺光パラメータIを備え、後続の全ての無限光は、Iに0をセットすることができる。周辺光計算は実質的に無くなる。
【0771】
無限光源が照射される第1の光である場合、他の光源による既存の寄与度を取り込む必要はなく、その状況は図149に示され、定数は以下の値をとる。
【0772】
【表95】
Figure 2004536736
無限光源が照射される第1の光ではない場合、先行して処理された光によって生成された既存の寄与度を取り込む必要があり(同じ定数が当てはまる)、状況は図148に示されている。
【0773】
第1のケースでは、2個の順次イタレータ490、491が必要であり、第2のケースでは、3個の順次イタレータ490、491、492が必要である(余分のイタレータは先行の光の寄与度を読み出すために必要である)。両方のケースで、バンプマップ無しの無限光源の適用は1画素当たり1サイクルを要し、オプションとして周辺光の適用が含まれる。
【0774】
バンプマップ有り
バンプマップが存在するとき、法線ベクトルNは画素毎に計算することが必要であり、一定光源ベクトルLに適用される。1/||N||はR・Vを計算するために使用され、R・Vは鏡面光計算2プロセスへの入力として要求される。以下の定数がソフトウェアによってセットされる。
【0775】
【表96】
Figure 2004536736
バンプマップ順次読み出しイタレータ490は、バンプマップの現在ラインを読み出す役割を担う。現在ラインは、Xに関するスロープを決定するため入力として与えられる。バンプマップ順次読み出しイタレータ491、492は、現在ラインの上下のラインを読み出す役割を担う。それらはYに関するスロープを決定するため入力を提供する。
【0776】
オムニ光
オムニ光源のケースでは、光ベクトルL及び減衰定数fattは像の中で画素毎に変化する。したがって、L及びfattの両方は画素毎に計算しなければならない。
【0777】
バンプマップ無し
バンプマップが無いとき、一定法線ベクトルN[0,0,1]が存在する。Lは画素毎に計算しなければならないが、N.L及びR・Vの両方は、Zに簡単化される。バンプナップが無いとき、オムニ光の適用は図149に示されるように計算され、以下の定数がソフトウェアによってセットされる。
【0778】
【表97】
Figure 2004536736
このアルゴリズムは、オプションとして、先行の光源からの寄与を取り込み、周辺光計算を含む。周辺光は1回だけ取り込めばよい。他の全ての光パスに対して、周辺光計算プロセスにおける適切な定数は0にセットされるべきである。
【0779】
図示されるようなアルゴリズムは全部で19回の乗算/累算を必要とする。ルックアップのために必要な時間は、Lの計算中の1サイクルと、鏡面光寄与計算中の4サイクルである。したがって、5サイクルの処理時間が実現可能な最良のものである。その関数のためにALUを最適にマイクロコード化できない場合には、必要な時間は6サイクルまで増加する。オムニ光を関連したビットマップの無い像へ適用するための速度は1画素当たり6サイクルである。
【0780】
バンプマップ有り
オムニ光が関連したバンプマップを備えた像に照射されるとき、N、L、N.L及びR・Vの計算は全てが必要である。オムニ光を関連したバンプマップを備えた像に適用するプロセスは図150に示され、以下の定数がソフトウェアによってセットされる。
【0781】
【表98】
Figure 2004536736
このアルゴリズムは、オプションとして、先行の光源からの寄与を取り込み、周辺光計算を含む。周辺光は1回だけ取り込むことが必要である。他の全ての光パスに対し、周辺光計算プロセス内の適切な定数は0にセットされるべきである。
【0782】
図示されるようなアルゴリズムは全部で32回の乗算/累算を必要とする。ルックアップのために要する時間は、LとNの両方の計算中に1サイクルずつと、鏡面光寄与計算のための4サイクルである。しかし、NとLのために必要なルックアップは同じである(したがって、2個のLUが3個のLUを実装する)。8サイクルの処理時間が適切である。その関数のためのALUを最適にマイクロコード化できない場合、必要な時間は9サイクルまで延長される。オムニ光を関連したビットマップ付きの像に適用する速度は1画素当たり9サイクルである。
【0783】
スポット光
スポット光はオムニ光と類似しているが、減衰定数fattが、目標の周りに効率的に光を集める円錐/半影ファクタfcpによって変更されている点が相違する。
【0784】
バンプマップ無し
バンプマップが無いとき、一定法線ベクトルN[0,0,1]が存在する。Lは画素毎に計算しなければならないが、N.L及びR・Vの両方は、Zに簡単化される。図151は、像へのスポット光の照射の説明図であり、以下の定数がソフトウェアによってセットされる。
【0785】
【表99】
Figure 2004536736
このアルゴリズムは、オプションとして、先行の光源からの寄与を取り込み、周辺光計算を含む。周辺光は1回だけ取り込めばよい。他の全ての光パスに対して、周辺光計算プロセスにおける適切な定数は0にセットされるべきである。
【0786】
図示されるようなアルゴリズムは全部で30回の乗算/累算を必要とする。ルックアップのために必要な時間は、Lの計算中の1サイクルと、鏡面光寄与計算中の4サイクルと、円錐/半影計算における2組の4サイクルルックアップである。
【0787】
バンプマップ有り
スポット光が関連したバンプマップを備えた像に照射されるとき、N、L、N.L及びR・Vの計算は全てが必要である。単一のスポット光を関連したバンプマップを備えた像に適用するプロセスは図152に示され、以下の定数がソフトウェアによってセットされる。
【0788】
このアルゴリズムは、オプションとして、先行の光源からの寄与を取り込み、周辺光計算を含む。周辺光は1回だけ取り込むことが必要である。他の全ての光パスに対し、周辺光計算プロセス内の適切な定数は0にセットされるべきである。図示されるようなアルゴリズムは全部で41回の乗算/累算を必要とする。
【0789】
プリントヘッド44
図153は、論理的に8セグメントにより構成され、各々がページの一部分に2層のシアン、マゼンタ、及びイエローを印刷する単一のプリントヘッドの論理的レイアウトの説明図である。
【0790】
印刷用セグメントのローディング
何かを印刷する前に、プリントヘッドの8セグメントの各々は、最終出力画像における以下の相対的な行に対応した6行のデータがロードされなければならない:
行0=ラインN、イエロー、偶数ドット0、2、4、6,8、...
行1=ラインN+8、イエロー、奇数ドット1、3、5、7、...
行2=ラインN+10、マゼンタ、偶数ドット0、2、4、6,8、...
行3=ラインN+18、マゼンタ、奇数ドット1、3、5、7、...
行4=ラインN+20、シアン、偶数ドット0、2、4、6,8、...
行5=ラインN+28、シアン、奇数ドット1、3、5、7、...
各セグメントは、ページの異なる部分にドットを印刷する。各セグメントは、1色の750ドット、即ち、ある行に375個の偶数ドットと、別の行に375個の奇数ドットを印刷する。8個のセグメントは、位置に対応したドットを含む。
【0791】
【表100】
Figure 2004536736
各ドットは、プリントヘッドセグメントに1ビットで表現される。データは、データをセグメントのBitValue(ビット値)ピンに置くことによって、同時に1ビットだけロードされ、BitClock(ビットクロック)に従ってそのセグメントのシフトレジスタへクロック供給されなければならない。データは単一のレジスタにロードされるので、ビットをローディングする順序は正しい筈である。データは10MHzの最大レートでプリントヘッドにクロック供給することができる。
【0792】
全てのビットがロードされると、ビットはプリントヘッド出力バッファへ並列に転送され、印刷の準備が完了する。この転送はセグメントのParallelXferClockピン上の1個のパルスによって実行される。
【0793】
印刷制御
電力を節約するため、プリントヘッドの全てを必ずしも同時に印刷しなくてもよい。制御ラインの組は、特定のドットの印刷を可能にさせる。ACPのような外部コントローラは、速度及び/又は電力の必要条件に応じて、同時に印刷されるドット数、並びに、プリントパルスの間隔を変更することが可能である。
【0794】
各セグメントは、5本のNozzelSelect(ノズル選択)ラインを含み、ノズル選択ラインは1行当たり32組のノズルを選択するため復号化される。各行には375個のノズルがあるので、各組には12個のノズルがある。更に、色の偶数行と奇数行に1本ずつの、2本のBankEnable(バンクイネーブル)ラインが設けられる。最後に、各セグメントは、Cカラー、Mカラー及びYカラーの各々に1本ずつの、3本のColorEnable(カラーイネーブル)ラインを含む。あるColorEnableライン上のパルスは、カラーの指定行の指定されたノズルに印刷を行わせる。パルスは、典型的に、2 sの間隔である。
【0795】
全てのセグメントが、NozzelSelectラインと、BankEnableラインと、ColorEnableライン(プリントヘッドへ外部から配線されている)の同じ組によって制御される場合、以下の事項が成立する。
【0796】
奇数バンク及び偶数バンクの両方が同時に印刷をする場合(両方のBankEnableビットがセットされている場合)、1セグメント当たり24個のノズル、即ち、全部で192個のノズルが同時に発射し、5.7ワットを消費する。
【0797】
奇数バンクと偶数バンクが独立に印刷をする場合、1セグメント当たり12個のノズルだけが、即ち、全部で96個が同時に発射し、2.85ワットを消費する。
【0798】
印刷ヘッドインタフェース62
印刷ヘッドインタフェース62は、ACPをプリントヘッドに接続し、データと適切な信号の両方を外部プリントヘッドへ供給する。プリントヘッドインタフェース62は、VLIWプロセッサ74と、CPU上で実行されるソフトウェアアルゴリズムの両方と協働して動作し、約2秒のうちに写真を印刷する。
【0799】
プリントヘッドインタフェースへの入出力の概要は図154に示されている。アドレス及びデータバスがCPUによって使用され、プリントヘッドインタフェースの種々のレジスタのアドレスを指定する。単一のBitClock出力ラインは、プリントヘッド上の8セグメントの全てに繋がる。8本のDataBits(データビット)ラインは、1本ずつが各セグメントに接続され、(BitClockパルスに基づいて)プリントヘッドの8セグメントへ同時にクロックインされる。例えば、同時に、ドット0はセグメントへ転送され、ドット750はセグメント1へ転送され、ドット1500はセグメントへ転送され、以下同様である。
【0800】
VLIW出力FIFOは、ディザ処理された2レベルC、M及びYの6000×9000解像度印刷画像を、8本のDataBitsラインへ出力するために正しい順序で格納する。ParallelXferClockは、プリントヘッドの8セグメントの各々へ接続されるので、単一パルスによって、全てのセグメントがそれぞれのビットを同時に転送する。最後に、NozzleSelectライン、BankEnableライン及びColorEnableラインが8セグメントの各々へ接続され、プリントヘッドインタフェースは、C、M及びYドロップパルスの間隔、並びに、各パルスで印刷されるドロップの数を制御できるようになる。プリントヘッドインタフェースのレジスタは、0から6μsのパルス間隔、典型的に2μsの間隔を指定することができる。
【0801】
画像印刷
画像がArtcamのユーザの管理下に置かれる前に、以下の2フェーズ、即ち、
1.印刷されるべき画像の準備
2.準備された画像の印刷
を行うことが必要である。
【0802】
画像の準備は1回だけ実行すればよい。画像印刷は必要に応じて何回で実行できる。
【0803】
画像準備
印刷用の画像の準備には、
1.写真画像の印刷画像への変換
2.プリンタの向きの出力に揃えるために印刷画像(内部色空間)の回転
3.(必要に応じて)圧縮されたチャンネルのアップ補間
4.内部色空間から特定のプリンタ及びインクに適したCMY色空間への色変換
が含まれる。
【0804】
画像準備の最後に、4.5MBの正しく向きを決められた1000×1500CMY色空間画像の印刷準備が完了する。
【0805】
写真画像の印刷画像への変換
写真画像を印刷画像へ変換するためには、画像処理を実行するためVarkスクリプトを実行することが必要である。このスクリプトは、デフォルト画像強調スクリプト、又は現在挿入中のArtcardから取り出されたVarkスクリプトである。Varkスクリプトは、CPUによって実行され、VLIWベクトルプロセッサによって実行される関数で加速される。
【0806】
印刷画像の回転
メモリ内の画像は、最初、上端が上向きになるように方向を合わされる。これにより、Vark処理を簡単にすることができる。画像が印刷される前に、画像は、プリントロールの向きと揃えられなければならない。再アライメントは1回だけ実行すればよい。印刷画像の引き続くプリントは、予め適切に回転されているであろう。
【0807】
適用されるべき変換は、ユーザがArtcamの「撮像」ボタンを押したときに、CCDからの捕捉中に適用された変換の単に逆変換である。元の回転が0であるならば、変換は不要である。元の回転が+90度であるならば、印刷前に−90度(270度と同じである)回転する必要がある。この回転を適用するために使用される方法は、Vark加速されたアフィン変換関数である。アフィン変換エンジンは、各カラーチャンネルを独立に回転させるため呼び出される。カラーチャンネルは元の位置で回転できないことに注意する必要がある。その代わりに、カラーチャンネルは、拡大された単一チャンネル(1.5MB)のために先に使用されたスペースを利用することが可能である。
【0808】
図155は、Lab画像の回転の一例の説明図であり、aチャンネル及びbチャンネルは4:1に圧縮されている。Lチャンネルは、不要になったスペース(単一チャンネルエリア)へ回転させられ、次に、aチャンネルは、Lの後に残された空きスペースに回転させられ、最後に、bを回転させることができる。三つのチャンネルを回転するために要する総時間は0.09秒である。これは、最初の画像印刷の前に許容可能な時間の経過である。後続のプリントは、このオーバーヘッドを生じない。
【0809】
アップ補間及び色変換
Lab画像は、印刷前にCMYへ変換しなければならない。Lab画像のaチャンネル及びbチャンネルが圧縮されているかどうかに応じて、様々な処理が行われる。Lab画像が圧縮されているならば、aチャンネル及びbチャンネルは色変換が行われる前に伸長されなければならない。Lab画像が圧縮されていないならば、色変換は唯一の必要なステップである。Lab画像は、(aチャンネル及びbチャンネルが圧縮されているならば)アップ補間し、CMY画像へ変換される。スケール及び色変換を組み合わせた単一のVLIWプロセスを使用することができる。
【0810】
色変換を実行するために使用される方法は、Vark加速型色変換関数である。アフィン変換エンジンは、各カラーチャンネルを独立に回転させるため呼び出し可能である。カラーチャンネルはそのままの位置で回転できない。その代わりに、カラーチャンネルは拡大された単一チャンネル(1.5MB)のために先に使用されたスペースを利用することが可能である。
【0811】
画像印刷処理
画像印刷処理は、正しい向きに置かれた1000×1500CMY画像を取り込み、外部プリントヘッドへ送信されるべきデータ及び信号を生成することに関係する。このプロセスは、VLIWプロセス及びプリントヘッドインタフェースと協働するCPUを必要とする。
【0812】
Artcam内の画像の解像度は1000×1500である。印刷された画像は、6000×9000ドットの解像度があり、非常に簡単な関係:1画素=6×6=36ドットが得られる。図156に示されるように、各ドットは16.6μmであるため、6×6平方ドットは100平方μmである。各ドットは2レベルであるため、出力をディザ処理する必要がある。
【0813】
画像は約2秒で印刷されるべきである。9000行のドットの場合、これは、各行を印刷する間の時間が222μsの時間であることを意味する。プリントヘッドインタフェースは、この時間内に6000ドットを生成しなければならず、平均して1ドット毎に37nsである。しかし、各ドットは3色により構成されるので、プリントヘッドインタフェースは、約12ns内に、即ち、ACPの1クロックサイクル(100MHzで10ns)のうちに各カラーコンポーネントを生成しなければならない。一つのVLIWプロセスは、印刷されるべき次の6000ドットのラインを計算する役割を担う。奇数と偶数のC、M及びYドットは、6種類の1000×1500画像ラインからの入力をディザ処理することによって生成される。第2のVLIWプロセスは、先に計算された6000ドットのラインを取り込み、1回の転送でプリントヘッドインタフェースからプリントヘッドへ転送されるべき8個のセグメントのための8ビットのデータを正確に生成する役割がある。
【0814】
CPUプロセスは、プリントライン毎に3回ずつ(1カラーコンポーネント当たり1回ずつ=2秒間に27000回)第1のVLIWプロセス3内のレジスタを更新し、第2のVLIWプロセス内のレジスタをプリントライン毎に1回ずつ(2秒間に9000回)更新する。CPUは、これを行うために、VLIWプロセスよりも1ラインだけ先に進んでいる。
【0815】
最後に、プリントヘッドインタフェースは、VLIW出力FIFOから8ビットデータを取り込み、それをそのままプリントヘッドへ出力し、BitClock信号を適切に生成する。全てのデータの転送が終わった後、ParallelXferClock信号が次のプリントラインのデータをロードするため生成される。データのプリントヘッドへの転送と連動して、別個のタイマーが、プリントヘッドインタフェース内部レジスタによって指定されたNozzleSelectライン、ColorEnableライン及びBankEnableラインを使用して、プリントヘッドの異なるプリントサイクルのための信号を生成する。
【0816】
更に、CPUは、印刷プロセス中にパラレルインタフェースを介して種々のモーター及び裁断機を制御する。
【0817】
C、M及びYドット生成
このプロセスへの入力は、印刷のため正しい向きに置かれた1000×1500CMY画像である。この画像は圧縮されていない。図157に示されるように、VLIWマイクロコードプログラムは、CMY画像を取り込み、プリントヘッドインタフェースによって要求された、ディザ処理されるC、M及びY画素を生成する。
【0818】
このプロセスは、三つのカラーコンポーネントの各々に対して1回ずつの3回実行される。このプロセスは、並列に実行される二つのサブプロセスを含未、一方は奇数ドットを生成し、他方は偶数ドットを生成する。各サブプロセスは入力画像から1画素を取り込み、3個の出力ドットを生成する(なぜならば、1画素=6出力ドットであり、各サブプロセスは偶数ドットと奇数ドットの何れかに関連しているからである)。1個の出力ドットが1サイクル毎に生成されるが、入力画素は3サイクル毎に1回だけ読み出される。
【0819】
元のディザセルは64×64形のセルであり、各エントリーは8ビットである。この元のセルは、奇数セルと偶数セルに分割されるので、各々は64の高さのままであるが、32エントリーの幅しかない。偶数ディザセルは、元のディザセル画素0、2、4等を格納し、一方、奇数ディザセルは、元のディザセル画素1、3、5等を格納する。ディザセルはラインを超えて繰り返されるので、2個のディザセルの各々の単一の32バイトラインは、ライン全体の間に必要であり、したがって、完全にキャッシュすることができる。単一のプロセスラインのうちの奇数ライン及び偶数ラインは、8ドットラインだけ離して交互にされるので、奇数ディザセルの8ライン毎に回転させることが好都合である。したがって、奇数ディザセルと偶数ディザセルの両方に同じオフセットを使用することが可能である。この結果として、偶数ディザセルのラインは元のディザセルのラインLの偶数エントリーに対応し、奇数ディザセルのラインは元のディザセルのラインL+8の奇数エントリーに対応する。
【0820】
このプロセスは、カラーコンポーネントの各々に対して1回ずつの3回実行される。CPUソフトウェアルーチンは、奇数ライン及び偶数ライン用の順次読み出しイタレータがプリントヘッドに対応した正しい画像ラインを確実に指定しなければならない。例えば、1組の18000ドット(3組の6000ドット)を生成するため、
・イエロー偶数ドットライン=0、したがって、入力イエロー画像ライン=0/6=0
・イエロー奇数ドットライン=8、したがって、入力イエロー画像ライン=8/6=1
・マゼンタ偶数ドットライン=10、したがって、入力マゼンタ画像ライン=10/6=1
・マゼンタ奇数ドットライン=18、したがって、入力マゼンタ画像ライン=18/6=3
・シアン偶数ドットライン=20、したがって、入力シアン画像ライン=20/6=3
・シアン奇数ドットライン=28、したがって、入力シアン画像ライン=28/6=4
である。この後に続く入力画像ラインの組は、
・Y=[0,1], M=[1,3], C=[3,4]
・Y=[0,1], M=[1,3], C=[3,4]
・Y=[0,1], M=[2,3], C=[3,5]
・Y=[0,1], M=[2,3], C=[3,5]
・Y=[0,2], M=[2,3], C=[4,5]
である。
【0821】
しかし、ディザセルデータはカラーコンポーネント毎に更新しなくてもよい。3カラーのディザセルは同じになるが、コンポーネント毎に2ドットラインずつオフセットしている。
【0822】
ディザ処理された出力は順次書き込みイタレータに書き込まれ、奇数及び偶数のディザ処理されたドットは2個の別々の出力に書き込まれる。同じ2個の書き込みイタレータが3個の全てのカラーコンポーネントに対して使用されるので、それらは、奇数及び偶数ドットの分割の範囲内で連続的である。
【0823】
1組のドットがプリントラインに対して生成される間に、先に生成されたドットの組が、次のセクションで説明されるような第2のVLIWプロセスによって併合される。
【0824】
併合8ビットドット出力生成
このプロセスは、図158に示されるように、1ラインのディザ処理されたドットを取り込み、VLIW出力FIFOを介してプリントヘッドインタフェースへ出力するための8ビットのデータストリームを生成する。このプロセスは、ライン全体が準備されることを必要とする。なぜならば、このプロセスは、ディザ処理されたラインの殆どを同時に準ランダムアクセスする必要があるからである。以下の定数がソフトウェアによってセットされる。
【0825】
【表101】
Figure 2004536736
順次読み出しイタレータは、前に生成されたドットのラインを指定し、イタレータのレジスタは単一カラーコンポーネントへのアクセスを制限するためセットアップされている。後続の画素の間の距離は375であり、あるラインと次のラインとの間の距離は1バイトになるように与えられる。その結果として、8個のエントリーが「ライン」毎に読み出される。単一の「ライン」は、プリントヘッドへロードされる8ビットに対応する。画像の「ライン」総数は375にセットされる。少なくとも8個のキャッシュラインを順次読み出しイタレータに割り当てることにより、完全なキャッシュコヒーレンスが維持される。8ビットをカウントする代わりに、8個のマイクロコードステップが暗黙的にカウントを行う。
【0826】
生成プロセスは、最初に、偶数ドットから全てのエントリーを読み出し、8個のエントリーを1バイトに合成し、その1バイトをVLIW出力FIFOへ出力する。3000個の全部の偶数ドットが読み出された後、3000個の奇数ドットが読み出され、処理される。ソフトウェアルーチンは、1カラーコンポーネント毎に1回ずつ、即ち、1ライン毎に3回ずつ奇数及び偶数の順次読み出しイタレータのドットのアドレスを更新しなければならない。二つのVLIWプロセスは、全部で8個のALUとVLIW出力FIFOを必要とする。CPUが上述のように二つのプロセスでレジスタを更新できる限り、VLIWプロセッサは、プリンタに追従するために十分な速さでディザ処理された画像ドットを生成し得る。
【0827】
データカードリーダー
図159は、読み出すためArtcard9を挿入することができるカードリーダー500の一形態を示す図である。図158は図159のリーダーの分解斜視図である。カードリーダーはコンピュータシステムに相互連結され、CCD読み出し機構35を含む。カードリーダーは、挿入されたArtcard9を挟むピンチローラー506及び507を含む。一方のローラー、例えば、ローラー506は、二つのローラー506及び507の間のカード9を一様な速度で前進させるためのArtcardモーター37によって駆動される。Artcard9は、一連のLEDライト512の上を通過させられ、一連のLEDライトは、半円形の断面を有する透明なプラスチックモールド514内に収容される。この断面は、例えば、LED512からの光を、カード9がLED512の傍を通過するときに、カード9の表面に集める。その表面から、光は、約480dpiの解像度に構成された高解像度リニアCCD34へ反射される。Artcard9の表面は、約1600dpiのレベルまでエンコードされているので、リニアCCD34は、約3倍の乗数でArtcard表面をスーパーサンプルする。Artcard9は、リニアCCD34が1インチ当たり約4800回の読み出しのレートでArtcardの移動方向にスーパーサンプルできるような速度で更に駆動される。走査されたArtcardのCCDデータはArtcardリーダーからACP31へ送られ処理される。光センサにより構成できるセンサ49は、カード13の有無を検出するために機能する。
【0828】
CCDリーダーは、下側基板516と、透明な成形されたプラスチックを含む上側基板514と、を有する。二つの基板の間に、半導体製造プロセスによって製作された薄く長いリニアCCDアレイを含むリニアCCDアレイ34が挿入される。
【0829】
図160を参照すると、CCDリーダーユニットの一構成例の部分断面斜視側面図が示されている。一連のLED、例えば、LED512は、カード9がCCDリーダー34の表面を通過するときに発光するように動作する。放出された光は、上側基板523の一部分を透過する。この基板は、LED512から放出された光を、カード9上の表面上の点、例えば、点532に集めるように湾曲した周囲を有する部分、例えば、部分529を含む。焦点が合わされた光は、点532から、CCDアレイ34の方へ反射される。誇張されて示された一連のマイクロレンズ、例えば、マイクロレンズ534は、上側基板523の表面に形成される。マイクロレンズ523は、表面全体から受光した光を、CCDアレイ34の感光部に入射する光を検知するCCDリーダー34の表面上の点に対応した下の焦点536に集めるように作用する。
【0830】
上記の装置には多数の改良が考えられる。例えば、リニアCCD34上の感知デバイスは千鳥状でもよい。対応したマイクロレンズ34は、千鳥状のCCDセンサに対応するように、光を千鳥状の一連のスポットへ集光させるために相応に形成することができる。
【0831】
読み出しを助けるため、Artcard9のデータ表面エリアは、図38を参照して既に説明したように、チェッカー盤のようなパターンで変調させてもよい。その他の形態の高周波変調も実現可能である。
【0832】
Artcardプリンタが記憶装置Artcard上のデータをプリントアウトするものとして提供できることは明らかである。したがって、Artcardシステムは、Artcam装置の外部に情報を配信する一般的な形態として利用することが可能である。Artcardプリンタは、Artcardを高品質印刷面にプリントアウトすることが可能であり、多数のArtcardを同じ用紙に印刷し、後で分離することができる。Artcard9の第2の面には、引き続く記憶のために、Artcard9に記憶されたファイル等に関する情報を印刷することができる。
【0833】
したがって、Artcardシステムは、CD−ROM、磁気ディスク等の他の形態の記憶装置の代わりに使用するために適した簡単化された形態の記憶装置を可能にさせる。Artcard9は、大量生産可能であり、そのため、再分配用に実質的に低価格の形態で生産できる。
【0834】
プリントロール
図162には、Artcamのプリントロール42及びプリントヘッド部が示されている。用紙/フィルム611は、連続した「ウェブのような」プロセスで、印刷機構15へ送られ、印刷機構15は、更なるピンチローラー616−619、及びプリントヘッド44を含む。
【0835】
ピンチローラー613は、駆動機構(図示せず)に連結され、プリントローラー613の回転時に、フィルム611の形態の「用紙」は、印刷機構615の中へ通され、ピクチャー出力スロット6から出される。回転式裁断機構(図示せず)は、要求された写真サイズで用紙611のロールを切断するために利用される。
【0836】
したがって、プリンタロール42は、写真用にイメージ化されたピクチャーを印刷する印刷機構615に「用紙」611を供給する役割を果たすことが明白である。
【0837】
図163には、プリントロール42の分解斜視図が示されている。プリントロール42は、ピンチローラー612、613の動作の下で出力される出力プリンタ用紙611を含む。
【0838】
次に、図164には、「用紙」フィルムロールが除かれた図163のプリントロール42のより完全な分解斜視図が示されている。プリントロール42は、インク貯蔵セクション620、用紙ロールセクション622、623、及び外側ケーシングセクション626、627からなる三つの主要部品を含む。
【0839】
最初にインク貯蔵セクション620を参照すると、インクリザーバ又はインク供給セクション633が設けられている。印刷用インクは、三つのブラダー型の容器630から632に収容される。プリンタロール42は、フルカラー出力インクを提供するものとする。したがって、第1のインクリザーバ又はブラダー容器630はシアン色インクを収容する。第2のリザーバ631はマゼンタ色インクを収容し、第3のリザーバ632はイエロー色インクを収容する。リザーバ630から632の各々は、容積寸法が異なっているかもしれないが、実質的に同じ容積サイズを有するように設計される。
【0840】
インク貯蔵セクション621、633は、カバー624と共に、プラスチックセクションから製作することが可能であり、ヒートシール、紫外線照射等を用いて一体的にできるように設計される。サイズが等しくされたインクリザーバ630から632の各々は、対応したインクチャンネル639から641に連結され、リザーバ630から632より対応したインク出力ポート635から637へのインクの流れを可能にさせる。インクリザーバ632はインクチャンネル641及び出力ポート637を具備し、インクリザーバ631はインクチャンネル640及び出力ポート636を具備し、インクリザーバ630はインクチャンネル639及び出力ポート7637を具備する。
【0841】
動作中に、インクリザーバ630から632は、対応したインクで充たされ、セクション633はセクション621に接合される。インク貯蔵セクション630から632は、折り畳み可能なブラダーでもよく、インクがインクチャンネル639−641を行き来できるようにさせ、インク出力ポート635から637と流体的に連通される。更に、必要に応じて、空気取り入れ口が設けられ、インクチャンネルリザーバ630から632に関連した圧力を要求通りに維持することができる。
【0842】
キャップ624は、空気圧取り入れ口からアクセス可能な加圧型キャビティを形成するため、インク貯蔵セクション620に接合することができる。
【0843】
インク貯蔵セクション621、633及び624は、一体的なユニットとして一つに連結され、プリンタロールセクション622、623の内側へ挿入できるように設計される。プリンタロールセクション622、623は、対応したメス型部分(図示せず)と結合するオス型部分645から647を用いてスナップフィットによって一体的に結合されるように設計される。同様に、メス型部分654から656は、対応したオス型部分660から662と結合するように設計される。用紙ロールセクション622、623は、したがって、一体的にスナップで留められるように設計される。ロール内のフィルムの一端は、二つのセクション622、623が一つに接合されたとき、二つのセクション622、623の間で締め付けられる。プリントフィルムは、必要に応じて、プリントロールセクション622、625上で回転させることができる。
【0844】
前述の通り、インク貯蔵セクション620、621、633、624は、用紙ロールセクション622、623の内側に挿入できるように設計される。プリンタロールセクション622、623は、オンデマンドでフィルムを与えるため、静止したインク貯蔵セクション621、633及び624の周りで回転することができる。
【0845】
外側ケーシングセクション626及び627は、更に、プリントロールセクション622、623の周りで結合できるように設計される。更に、ピンチローラー、例えば、612、613のそれぞれの端は、カバー626、627内で対応したキャビティ、例えば、670に留められるように設計され、ローラー613は、プリントフィルムを供給し、プリントロールから排出するため外部(図示せず)から駆動される。
【0846】
最後に、キャビティ677は、プリントロール42に関連した情報を記憶するためのシリコンチップ集積回路型装置53を挿入し案内するため、インク貯蔵セクション620、621に設けることが可能である。
【0847】
図155及び図164に示されるように、プリントロール42は、Artcamカメラ装置に挿入され、カップリングユニット680と結合するように設計され、カップリングユニット680は、シリコンチップ53との配線を行うコネクタパッド681を含む。更に、コネクタ680は、インク供給ポート635から637との4個の接続用のエンドコネクタを含む。インク供給ポートは、次に、インク供給ライン、例えば、682へ接続され、インク供給ラインは、次に、プリントヘッド供給ポート、例えば、687へ相互連結され、必要に応じてインクをプリントヘッド44へ流す。
【0848】
ロールを形成するため利用される「メディア」611は、適当な画像を上に印刷するために設計された様々な材料により構成することが可能である。例えば、不透明な回転可能なプラスチック材料が利用され、透明なプラスチックシートを使用することにより透明性が使用され、メタリックシートフィルムの利用によってメタリック印刷が行われ得る。更に、プリンタロール42内に布を利用し、布に画像を印刷することも可能であるが、適当な剛性又は適当な裏当てを有する材料だけが利用できることに注意する必要がある。
【0849】
印刷メディアがプラスチックであるとき、インクを定着させ、吸収する層でその印刷メディアを覆うことが可能である。更に、幾つかのタイプの印刷メディア、例えば、不透明白色マット、透明フィルム、艶消し透明フィルム、3次元立体印刷用のレンチキュラーアレイフィルム、金属化フィルム、格子又はホログラムのようなエンボス方式の光学的に可変のデバイス、裏面に予め印刷が施されたメディア、及び磁気記録層を含むメディア、を使用できる。金属泊を利用するとき、金属泊は、ポリマーベースをもつことが可能であり、薄い(数ミクロンの)アルミニウム又はその他の金属の蒸着層で覆われ、次に、インクプリンタ機構を介してインクを受容するように適合した透明な保護層で覆われる。
【0850】
使用されるプリントロール42は、カメラ装置の内部に挿入され、要求に応じて画像の印刷用のインク及び用紙を提供できるように設計される。インク出力ポート635から637は、カメラ装置内の対応したポートと適合する。ピンチローラー672、673は、カメラ装置の制御下で用紙をカメラ装置へ供給できるように作動される。
【0851】
図164に示されるように、実装されたシリコンチップ53は、プリントロール42の一方の端に挿入される。図165では、認証チップ53がより詳細に示され、この認証チップ53は、チップ53からチップが挿入されている対応したカメラへ詳細を通信する4本の通信リード線680から683を含む。
【0852】
図165を参照すると、チップは、小型集積回路687をエポキシに入れ、ボンディングリード線、例えば、688を外部通信リード線680から683へ繋ぐことにより、単独で作成され得る。集積チップ687は、約400平方ミクロンであり、スクライブ境界は100ミクロンである。続いて、チップは、プリントロール42のキャビティの適切な表面に貼り付けられる。図165の装置の分解図である図166には、ボンディングパッド681、682に相互連結された集積回路67が示されている。
【0853】
図164Aから164Eにおいて、参照番号1100は、全体的にプリントカートリッジ1100を示す。プリントカートリッジ1100は、本発明によれば、インクカートリッジ1102を含む。
【0854】
プリントカートリッジ1100はハウジング1104を含む。図2により詳細に示されているように、ハウジング1104は、上側成形部品1106及び下側成形部品1108によって画成される。成形部品1106及び1108は、クリップ1110によって挟まれる。ハウジング1104はラベル1112によって被われ、ラベル1112はカートリッジ1100に魅力的な外観を与える。ラベル1112は、ユーザがカートリッジ1100を使えるようにするための情報を搭載する。
【0855】
ハウジング1104はチャンバー1114を画成し、チャンバー内にインクカートリッジ1102が収まる。インクカートリッジ1102は、ハウジング1104のチャンバー1114に固定して担持される。
【0856】
フォーマーに巻き付けられたフィルム/メディア1118のロール1126を含むプリントメディア1116の補給品はハウジング1104のチャンバー1114に収容される。フォーマー1120は、インクカートリッジ1102に摺動自在に収容され、インクカートリッジに対して回転自在である。
【0857】
図164Bに示されるように、上側成形部品1106及び下側成形部品1108は一体としてクリップされ、出口スロット1122が画成され、用紙1118の舌状部は出口スロットを通して排出される。
【0858】
カートリッジ1100はローラー組立体1124を含み、ローラー組立体1124は、用紙1118がロール1126から供給されるときに用紙1118のカールを取り除くために役立ち、スロット1122を介して用紙1118を押し出すために役立つ。ローラー組立体1124は、駆動ローラー1128と、2個の従動ローラー1130と、を含む。従動ローラー1130は、リブ1132に回転自在に支持され、リブ1132は、ハウジング1104の下側成形部品1108のフロア1134から盛り上がっている。ローラー1130は、駆動ローラー1128と一体となって、用紙1118がハウジング1104から排出されるときに、用紙1118の速度及び位置を制御するため、用紙1118に正のトラクションを与える。ローラー1130は、ポリスチレンのような適当な合成プラスチック材料の射出成形部品である。この点に関して、上側成形部品1106及び下側成形部品1108は、同様に、ポリスチレンのような適当な合成プラスチック材料の射出成形部品である。
【0859】
駆動ローラー1128は、ハウジング1104の上側成形部品1106及び下側成形部品1108の各々の側壁に画成された合わせリセス1138及び1140の間に回転自在式に係留されている駆動シャフト1136を含む。駆動ローラー1128の反対側の端1142は、ハウジング1140の上側成形部品1106と下側成形部品1108に適当な構成(図示せず)で回転自在に保持されている。
【0860】
駆動ローラー1128は、ツーショット射出成形部品であり、高衝撃ポリスチレン製のシャフト1136を含み、シャフト1136の上に、エラストマ又はゴムローラー部分1144の形をした軸受手段が成形されている。これらの部分1144は、用紙1118を確実に係止し、用紙1118がカートリッジ1100から供給されるときに、用紙1118の滑りを防止する。
【0861】
ハウジング1104から突起するローラー1128の端は、十字形構造体1146(図164A)の形をした係合体を有し、この十字形構造体は、プリントカートリッジ1100が取り付けられるカメラのような装置のプリントヘッド組立体の歯車付き駆動インタフェース(図示せず)と結合する。この構造体は、用紙1118がプリントヘッドに供給される速度を、プリントヘッドによる印刷と確実に同期させるので、インクが用紙1118上で正確に位置合わせされることを保証する。
【0862】
インクカートリッジ1102は、直円柱押出成形部品の形をした容器1148を含む。この容器1148は、ポリスチレンのような適当な合成プラスチック材料から押出成形される。
【0863】
本発明の好適な実施形態において、プリントカートリッジ1100が共に使用されるプリントヘッドは、多色プリントヘッドである。したがって、容器1148は、複数の、より詳細には、4個のコンパートメント、即ち、リザーバ1150に分割される。各リザーバ1150は、異なる色、又は異なるタイプのインクを収容する。一実施形態では、リザーバ1150に収容されるインクは、シアンインク、マゼンタインク、イエローインク、及びブラックインクである。本発明の他の実施形態では、3種類の有色インクであるシアンインク、マゼンタインク及びイエローインクがリザーバ1150のうちの3個に収容され、4番目のリザーバ1150は、赤外線スペクトルだけで可視化されるインクを収容する。
【0864】
図164C及び164Dに明瞭に示されているように、容器1148の一端は、エンドキャップ1152によって閉じられる。エンドキャップ1152は複数の開口1154が画成されている。開口1154は各リザーバ1150と関連付けられているので、エンドキャップ1152が設けられた容器1148の端でリザーバ1150内は大気圧で維持される。
【0865】
シール構造体1156は、エンドキャップ1152が設けられている端側で容器1148に設けられる。シール構造体1156は、各リザーバ1150に摺動自在に受容されたゲル状材料からなる四分円形ペレット1158を含む。ペレット1158のゲル状材料は、熱硬化性ゴムと炭化水素からなる化合物である。炭化水素は白色鉱物油である。熱硬化性ゴムは、ペレット1158が通常の動作温度でその形状を維持し、同時に、ペレット1158がその関連したリザーバ1150内で摺動できるように、鉱物油に十分な剛性を与える共重合体である。適当な熱硬化性ゴムは、シェル石油会社によって「Karton」(登録商標)の名前で販売されている熱硬化性ゴムである。共重合体は、ゲルのような粘度を各ペレット1158に与えるために十分な量でその化合物内に存在する。典型的に、共重合体は、使用されるタイプに応じて、約3%から20%の重量パーセントの量で存在するであろう。
【0866】
使用中に、この化合物は加熱され、その結果として流体になる。各リザーバ1150に特定のタイプのインクが詰められると、溶融状態の化合物は各リザーバ1150に注入され、化合物はペレット1158を形成するため固まる。ペレット1158の裏側の大気圧、即ち、エンドキャップ1152と向かい合うペレットの端における大気圧は、インクがリザーバ1150から引き出されるときに、自動注油式であるペレット1148が容器1148の反対側へ向かって滑ることを保証する。ペレット1158は、逆さにされた容器からインクが出て空になることを止め、リザーバ1150内のインクが汚れることを妨げ、リザーバ1150内のインクが乾燥することを妨げる。更に、ペレット1158は、リザーバ1150からのインクの漏れを防止するため疎水性である。
【0867】
容器1148の反対側の端は、インク鍔成形部品1160によって閉じられる。成形部品1160に支持されたバッフル1162は、エラストマーシール成形部品1164を受容する。疎水性であるエラストマーシール成形部品1164は、内部にシーリング幕1166が画成されている。各シーリング幕1166にはスリット1168が設けられているので、プリントヘッド組立体からの合わせピン(図示せず)は、スリット1168を通して挿入可能であり、容器1148のリザーバ1150と流体的に連通される。中空突起1170は、インク鍔成形部品1160の反対側から突起する。各突起1170は、関連したリザーバ1150とぴったり合うように成形され、インク鍔成形部品を容器1148の端に位置決めする。
【0868】
図164Cを参照すると、インク鍔成形部品1160は、キャリア又は隠し板成形部品1172によって正しい位置に維持される。隠し板成形部品1172には、四つ葉のクローバー形状の窓1174が画成され、この窓1174を介して、エラストマーシール成形部品1164へアクセスすることができる。隠し板成形部品1172は、ハウジング1104の上側成形部品1106と下側成形部品1108との間に係留される。隠し板成形部品1174と、ハウジング1104の上側成形部品1106及び下側成形部品1108のそれぞれの内面から延びるウェブ1176及び1178は、コンパートメント1180を画成する。エアーフィルタ1182はコンパートメント1180に収容され、端部成形部品1174によって正しい位置に保たれる。エアーフィルタ1182はプリントヘッド組立体と協働する。エアーは、プリントヘッド組立体のノズルガードの至る所へ吹き付けられ、ノズルガードのクリーニングを行う。このエアーは、隠し板1172内の入口側開口1184に収容されたピン(図示せず)を用いてエアーフィルタ1182を通して引き出すことによって濾過される。
【0869】
エアーフィルタ1182は、図164Eに更に詳細に示されている。エアーフィルタ1182はフィルタ媒体1192を含む。フィルタ媒体1192は、合成ファイバに基づくものであり、フィルタリング目的のため利用可能な表面積を増加させるため溝付きの形で配置される。紙ベースのフィルタ媒体1192の代わりに、他の繊維性芯材を使用してもよい。
【0870】
フィルタ媒体1192は密閉容器1194に収容される。密閉容器1194は、底成形部品1196及び蓋1198を含む。ハウジング1104のコンパートメント1180に収容するために、密閉容器1194は、部分的に環状、即ち、馬蹄形にされる。このようにして、密閉容器1194は、一対の対向端1200を有する。吸気開口1202が各端1200に画成される。
【0871】
排気開口1204は蓋1198に画成される。排気開口1204は、最初、フィルム、又は膜1206によって閉鎖されている。フィルタ1182がコンパートメント1180の正しい位置に取り付けられたとき、排気開口1204は隠し板成形部品1172の開口1184と位置合わせされる。プリントヘッド組立体からのピンがフィルム1206を貫通し、エアーがノズルガードとプリントヘッド組立体のプリントヘッドに吹き付けられる前に、エアーフィルタ1182を介して雰囲気からエアーを引き込む。
【0872】
底成形部品1194は、密閉容器1194の正しい位置にフィルタ媒体1192を設置するための位置決め構造体1208及び1210を含む。位置決め構造体1208は複数のピンの形をなし、一方、位置決め構造体1210は、フィルタ媒体1192の端1214を係止するリブの形をしている。
【0873】
フィルタ媒体1192が底成形部品1196の正しい位置に設置された後、蓋1198は、蓋1198で底成形部品1196を密閉するため超音波溶接、又は類似した方法によって、底成形部品1196に固定される。
【0874】
プリントカートリッジ1100が組み立てられたとき、膜又はフィルム1186は、窓1174を閉鎖するために隠れ板成形部品1172の外側端に被せられる。この膜又はフィルム1186は、使用するために、ピンによって孔を開けられ、又は破裂されられる。フィルム1186は、破片がインクリザーバ1150に侵入することを防止する。
【0875】
認証チップ1188の形の認証手段は、隠れ板成形部品1172の開口1190に収容される。認証チップ1188は、プリントカートリッジ1100が装置のプリントヘッド組立体と互換性があり、準拠していることを保証するため、プリントヘッド組立体1188による問い合わせを受ける。
【0876】
認証チップ
認証チップ53
好適な実施形態の認証チップ53は、正しく製造されたプリントロールだけがカメラシステムで利用されることを保証する責任がある。認証チップ53は、プリントロールシステムに限定されない任意の消耗品に関して利用されるときに一般的に有用である技術を利用する。消耗品を必要とする(トナーカートリッジを必要とするレーザープリンタのような)他のシステムの製造者は、消耗品を認証する問題で苦労し、成功のレベルは様々である。その殆どは、専用化されたパッケージングに頼っている。しかし、これは、家庭での詰め替え作業や複製品製造を抑えない。コピー作成を防止することは、不完全に製造された代用消耗品が基本システムを損傷することを防ぐために重要である。例えば、濾過が不十分なインクは、インクジェットプリンタのプリントノズルを詰まらせ、消費者はシステム製造者に責任を負わせ、許可されていない消耗品の使用を認めない。
【0877】
認証の問題を解決するために、認証チップ53は、認証コードと、コピー防止のために特別に設計された回路と、を含む。このチップは、標準的なフラッシュメモリ製造プロセスを使用して製造され、インク及びトナーカートリッジのような消耗品に組み込むことができる程度に低価格である。一旦プログラミングされると、認証チップは、後述するように、NSA持ち出し(エクスポート)ガイドラインに準拠する。認証は、非常に大規模であり、且つ常に成長している分野である。以下の説明は、消耗品の認証だけに関連している。
【0878】
記号名
以下の記号名が本実施形態の説明を通じて使用される。
【0879】
【表102】
Figure 2004536736
基本用語
Mで示されたメッセージは平文である。Mを、Mの実体が隠された暗号文Cに変換するプロセスは、暗号化と呼ばれる。CをMへ逆変換するプロセスは、復号化と呼ばれる。暗号化関数をEで表し、復号化関数をDで表すことにより、以下の恒等式:
E[M]=C
D[C]=M
が得られる。したがって、以下の恒等式:
D[E[M]]=M
が成り立つ。
【0880】
対称暗号化方式
対称暗号化アルゴリズムとは:
暗号化関数Eが鍵Kに依存する;
復号化関数Dが鍵Kに依存する;
はKから導出可能である;
はKから導出可能である;
というアルゴリズムである。
【0881】
殆どの対称アルゴリズムにおいて、Kは通常Kと等しい。しかし、KがKと等しくない場合であっても、一方の鍵がもう一方の鍵から導出可能であるならば、数学的な定義のためには単一の鍵があれば十分である。したがって、
[M]=C
[C]=M
と表せる。
【0882】
誰でも知っている教科書から洗練された現代のアルゴリズムまでの非常に多数の対称アルゴリズムが存在する。それらの殆どは、現在の暗号解読技術がKを導出し得る程度で攻撃に成功し得るという点において不確かである。特定の対称アルゴリズムの安全性は、通常、アルゴリズムの強度、及び鍵の長さからなる二つの事項の関数である。以下のアルゴリズムは、認証チップに利用するために適した特徴を含んでいる:
DES;
ブローフィッシュ(Blowfish);
RC5;
IDEA。
【0883】
DES
DES(データ暗号化規格)は米国及び国際規格であり、暗号化と復号化に同じ鍵が使用される。鍵の長さは56ビットである。これは、ハードウェアとソフトウェアで実装されるが、当初の設計はハードウェア専用であった。DESで使用される当初のアルゴリズムは、米国特許第3962539号に記載されている。トリプルDESの変形と称されるDESの変形はより安全性が高いが、3個の鍵:K、K及びKを必要とする。これらの鍵は、
K3[DK2[EK1[M]]]=C
K3[EK2[DK1[C]]]=M
という形で使用される。
【0884】
トリプルDESの主な利点は、既存のDESの実装を使用して単一鍵のDESよりも安全性を高くすることができる点である。特に、トリプルDESは、112ビットの鍵の長さと等価的な保護を与える。トリプルDESは、単純に期待されるような168ビット鍵(3×56)と等価的な保護を与えるものではない。トリプルDESの復号化及び/又は符号化を実行する機器は米国から持ち出すことができない。
【0885】
ブローフィッシュ(Blowfish)
Blowfishは、1994年にSchneierによって最初に提案された対称ブロック暗号方式である。これは、32ビットから448ビットまでの可変長鍵を使用する。更に、これはDESよりもかなり高速である。Blowfishアルゴリズムは、鍵拡張部と、データ暗号化部の二つの部分により構成される。鍵拡張は、最大で448ビットの鍵を、全部で4168バイトの複数のサブ鍵配列へ変換する。データ暗号化は、16ラウンドのFeistelネットワークによって行われる。全ての演算は、32ビット語上でのXORと加算であり、1ラウンド当たりに4回のインデックス配列ルックアップを含む。復号化は、サブ鍵が逆順に使用されることを除いて暗号化と同じである点に注意する必要がある。したがって、実装の複雑さは、このような対称性をもたない他のアルゴリズムよりも低減される。
【0886】
RC5
1995年にRon Rivestによって設計されたRC5は、ブロックサイズ、鍵のサイズ、及びラウンド回数が可変である。しかし、典型的に、RC5は、64ビットのブロックサイズと128ビットの鍵を使用する。RC5アルゴリズムは、鍵拡張部と、データ暗号化部の二つの部分により構成される。鍵拡張は、鍵を2r+2個のサブ鍵(ここで、r=ラウンド回数である。)に変換し、各サブ鍵はwビットである。64ビットのブロックサイズで、16回のラウンドの場合(w=32,r=16)、サブ鍵配列は全部で136バイトである。データ復号化は、モジュロー2の加算と、XORと、ビット回転と、を使用する。
【0887】
IDEA
1990年にLai及びMasseyによって開発されたIDEA暗号方式の最初の具体化された形はPESと呼ばれる。1991年にBiham及びShamirによって差分解読法が発見された後、このアルゴリズムは強化され、その結果は1992年にIDEAとして発表された。IDEAは、64ビットの平文ブロックを操作するために128ビット鍵を使用する。暗号化と復号化のために同じアルゴリズムが使用される。このアルゴリズムは、一般的に、現在利用可能な最も安全なブロックアルゴリズムであると考えられている。これは、1993年に発行された米国特許第5214703号に記載されている。
【0888】
非対称暗号化方式
他に使用できるアルゴリズムは非対称アルゴリズムである。非対称暗号化アルゴリズムとは:
暗号化関数Eが鍵Kに依存する;
復号化関数Dが鍵Kに依存する;
は合理的な時間内にKから導出不能である;
は合理的な時間内にKから導出不能である;
というアルゴリズムである。
【0889】
したがって、
K1[M]=C
K2[C]=M
である。
【0890】
これらのアルゴリズムは、一方の鍵Kが公開されるので、公開鍵とも称される。したがって、誰でも(Kを使用して)メッセージを暗号化し得るが、対応した復号鍵(K)を持っている人だけがそのメッセージを復号化して読むことができる。殆どの場合に、以下の恒等式:
K2[M]=C
K1[C]=M
が成立する。
【0891】
この恒等式は非常に重要である。なぜならば、公開鍵Kを所持する人は誰でもMを見ることができ、そのMはKの所有者からのものであることが分かるからである。他の人はCを生成することができない。なぜならば、Cを生成し得ることは、Kを知っていることを意味するからである。合理的な時間内にKからKを導出できないこと、並びに、その逆にKからKを導出できないことは、当然、合理的な時間という概念によって曖昧になる。再々実証されているように、長時間を要することが予想される計算は、より高速化されたコンピュータ、新しいアルゴリズム等の導入によって実現可能になる。非対称アルゴリズムの安全性は、大きい数(より具体的には、二つの大きい素数の積である大きい数)を素因数分解すること、及び有限において離散対数関数を計算することの困難さの二つの問題のうちの一方の困難さに基づいている。大きい数の素因数分解は、現代の数学の理解においては難問であることが推測される。しかし、素因数分解は予測されるよりも速く容易になっているということが問題である。Ron Rivestは、1977年に、125桁の素因数分解には40000兆年かかると言っていた。1994年に129桁の素因数分解が行われた。Schneierによれば、1980年代における512ビットの数から得られた安全性のレベルを現在得るためには、1024ビットの数が必要であるとされている。その鍵が数年続くとすると、1024ビットでも十分ではない。Rivestは1990年に鍵の長さの評価を改め、2005年まで高い安全性を維持するためには1628ビットを提唱し、2015年まで持ちこたえる高い安全性のためには1884ビットを提唱している。一方、Schneierは、2015年まで企業及び政府からの保護を得るためには2048ビットが必要であることを示唆している。
【0892】
多数の公開鍵暗号化アルゴリズムが存在する。その殆どは実際には実装不可能であり、その多くは、所与のMに対して非常に大きいCを生成するか、又は巨大な鍵を必要とする。更に、その他のものは、たとえ安全であるとしても、非常に低速であるため数年の間には実施できない。このため、多数の公開鍵システムは、ハイブリッド方式であり、公開鍵の仕組みは対称セッション鍵を送信するために使用され、セッション鍵が実際のメッセージのために使用される。全てのアルゴリズムは、鍵選択の点で問題がある。乱数はどうしても安全性が不十分である。大きい素数p及びqは慎重に選ぶことが必要であり、ある種の組み合わせは簡単に素因数分解できるという弱点がある(一部の弱い鍵は検査することができる)。しかし、それにもかかわらず、鍵選択は、例えば、単に、1024ビットをランダムに選択するというような単純なことではない。その結果として、鍵選択プロセスも安全でなければならない。
【0893】
公開の精査の下で使用中の実際的なアルゴリズムの中で、以下のアルゴリズム:
RSA;
DSA;
EIGamal;
は利用するために適している。
【0894】
RSA
Rivest、Shamir及びAdlemanの名前にちなんで命名されたRSA暗号システムは、最も広く使用されている公開鍵暗合システムであり、世界中の多くで事実上の標準である。RSAの安全性は、2個の素数(p及びq)の積である大きい数の素因数分解の困難さに依存していると考えられる。p及びqの生成には多数の制約がある。それらは、両方共に大きいことが必要であり、ビット数が同じであり、しかも、互いに近似していてはならない(そうでなければ、pqは√pqと近似する)。その上、多くの場合に、p及びqは強い素数でなければならないことが指摘されている。RSAアルゴリズムの特許は1983年に発行された(米国特許第4405829号)。
【0895】
DSA
DSA(デジタル署名規格)は、デジタル署名標準(DSS)の一部として設計されたアルゴリズムである。規定されているとおり、このアルゴリズムは一般的な暗号化には使用できない。その上、RSAに対して、DSAは署名検証の際に10から40倍速度が遅い。DSAは、SHA−1ハッシュアルゴリズム(以下の一方向関数の定義を参照せよ。)を明示的に使用する。DSA鍵生成は、qがp−1を割り切るような2個の素数p及びqの検出に依拠している。Schneierによれば、1024ビットのp値が長期間のDSA安全性のために必要である。しかし、DSA標準は、pの値が1024ビットよりも大きくなることを認めていない(pは、更に、64ビットの倍数でなければならない)。米国政府はDSAアルゴリズムを所有し、少なくとも一つの関連特許(1993年に発行された米国特許第5231688号)を保持する。
【0896】
EIGamal
EIGamal方式は、暗号化とデジタル署名の両方に使用される。その安全性は有界で離散対数関数を計算することの困難さに依拠している。鍵選択には、g及びxがpよりも小さくなるような、素数pと2個の乱数g及びxの選択が必要である。次に、y=gx mod pを計算する。公開鍵は、y、g及びpである。秘密鍵はxである。
【0897】
暗号によるチャレンジ−レスポンスプロトコル及びゼロ知識証明
チャレンジ−レスポンスプロトコルの一般的な原理は、カメラシステムに適したアイデンティティ認証を提供することである。チャレンジ−レスポンスの最も簡単な形態は秘密パスワードの形態をとる。AはBに秘密パスワードを尋ね、Bが正しいパスワードで応答したとき、AはBが真正であることを表明する。この種の簡単なプロトコルには三つの主要な問題点がある。第一に、一旦Bがパスワードを公表すると、任意のオブサーバCはパスワードが何であるかを知る。第二に、Aはパスワードを検証するためにパスワードを知ることが必要である。第三に、CがAになりすました場合、Bは(CがAであると思い)Cにパスワードを与え、これにより、Bを危険にさらす。著作権のあるテキスト(例えば、俳句)を使用することは、弱い代用である。なぜならば、(例えば、知的所有権が遵守されない国では)誰でもパスワードをコピーすることができると考えられるからである。暗号によるチャレンジ−レスポンスプロトコルの考え方は、唯一のエンティティ(要求者)が、そのエンティティに関して知られている秘密情報の知識を実証することによって、プロトコル中に秘密情報自体を検証者に明かすことなく、自分のアイデンティティを他者(検証者)へ渡すことである。暗号によるチャレンジ−レスポンスプロトコルの一般化されたケースでは、ある種の方式により検証者はその秘密情報を知り、それ以外の場合には、その秘密情報は検証者にさえ知られていない。この実施形態の説明は、特に認証に関係しているので、認証の試し要される実際の暗号によるチャレンジ−レスポンスプロトコルは、適当なセクションで詳述される。しかし、ゼロ知識証明の概念はここで説明する。最初に、Feige、Fiat及びShamirによって明らかにされたゼロ知識証明プロトコルは、認証目的用のスマートカードで広く使用されている。このプロトコルの有効性は、未知の素因数分解による大きい合成整数の平方根モジュローの計算がコンピュータの能力で実施不可能である、という仮定に基づいている。これは、おそらく、大きい整数の素因数分解が困難であるという仮定と等価であろう。尚、要求者は著しい計算パワーをもっていなくてもよいことに注意する必要がある。スマートカードは、数回のモジュロー乗算だけを使用してこの種の認証を実現する。ゼロ知識証明プロトコルは米国特許第4747668号に記載されている。
【0898】
一方向関数
一方向関数Fは、入力Xに作用し、XがF[X]から判定できないようなF[X]を返す。Xのフォーマットに制限が無く、F[X]がXよりも少ないビットを格納する場合、衝突が存在する筈である。衝突は、同じF[X]値を生ずる2個の異なるX値、即ち、X≠Xであり、しかも、F[X]=F[X]となるようなX及びXとして定義される。XがF[X]よりも多数のビットを格納する場合、入力は、出力を生成するために何らかの方法で圧縮されなければならない。殆どの場合に、Xは、特定のサイズのブロックに分割され、多数のラウンドに亘って圧縮され、あるラウンドの出力が次のラウンドへの入力である。このハッシュ関数の出力は、Xが使い尽くされた後の最後の出力である。圧縮関数CFの疑似衝突は、2個の異なる初期値V及びVとして定義され、2個の入力X及びX(同一であるかもしれない)は、CF(V,X)= CF(V,X)となるように与えられる。疑似衝突が存在しても、所与のXに対するXの計算が簡単になるわけではないことに注意する必要がある。
【0899】
高速に計算できる一方向関数だけに関心がある。更に、様々な実装において再現可能である決定論的な一方向関数だけに関心がある。一例として、F[X]がFの呼び出しの間の時間であるFを考える。所与のF[X]に対して、Xは決定可能である。なぜならば、XはFによって均等に使用されないからである。しかし、Fからの出力は様々な実装において異なる。したがって、この種のFに興味はない。
【0900】
本実施形態の認証チップの実装の説明の範囲では、以下の形式の一方向関数:
未知鍵を使用する暗号化;
乱数シーケンス;
ハッシュ関数;
メッセージ認証コード;
だけに関心がある。
【0901】
未知鍵を使用する暗号化
メッセージが未知鍵Kを使用して暗号化されたとき、暗号化関数Eは事実上一方向性である。この鍵が無い場合、E[M]からMをK無しに獲得することはコンピュータ能力的に実施不能である。暗号化関数は、鍵が隠されている限り一方向性である。暗号化アルゴリズムは衝突を生成しない。なぜならば、Eは、関数Dを使用してMを再構築できないようなE[M]を生成するからである。この結果として、F[X]は、一方向関数FがEであるならば、少なくともXと同数のビットを格納する(情報は失われない)。(上記の)対称暗号化アルゴリズムは、暗号化に基づく一方向関数を生成する非対称アルゴリズムよりも有利である。その理由は、
所定の強さの暗号化アルゴリズム用の鍵は、非対称アルゴリズムよりも対称アルゴリズムの方が短くなり、
対称アルゴリズムの方が高速に計算でき、必要なソフトウェア/シリコンが少ない、からである。
【0902】
優れた鍵の選択は選択された暗号化アルゴリズムに依存する。ある種の鍵は特定の暗号化アルゴリズムの場合に強くないので、全ての鍵の強さをテストすることが必要である。鍵選択のために実行されるべきテストの回数が増えるほど、その鍵が隠された状態を保つ可能性が低くなる。
【0903】
乱数シーケンス
乱数シーケンスR,R,...,R,Ri+1を考える。F[X]が乱数シーケンス内のX番目の乱数を返すような一方向関数を定義する。しかし、F[X]は様々な実装において所定のXに関して再現可能であることを保証しなければならない。したがって、乱数シーケンスは、本当の意味でランダムではない。その代わりに、乱数シーケンスは疑似乱数であり、生成器は特殊なシードを利用する。
【0904】
優れた乱数生成器の定義に関して多数の問題がある。Knuthは、生成器を「良くする」要因(統計的テストを含む)、生成器の構築に関する一般的な問題を説明している。大半の乱数生成器は、i−1番目の状態からi番目の乱数を生成し、i番目の数を決定するための唯一の方法は、0番目の数からi番目の数までを繰り返すことである。iが大きい場合、i回の繰り返しを待つことは実際的ではない。しかし、あるタイプの乱数生成器はランダムアクセスを許可しない。Blum、Blum及びShubは、理想的な生成器に関して、「短いシードから、校正なコインの連続的な反転によって完全に発生させられたように見える長い(ビットの)シーケンスを素早く生成するためには疑似ランダムシーケンス生成器が好ましい」のように定義している。彼らは、X mod n型の生成器、一般的には、BBS生成器と呼ばれる生成器を定義した。現在の暗号化方式が依拠しているある種の仮定を前提とした場合、BBS生成器は非常に厳しい統計的テストに合格することを示した。
【0905】
BBS生成器は、Blum整数であるnの選択に依拠している(n=pqであり、p及びqは大きい素数であり、p≠qであり、p mod 4=3であり、q mod 4=3である)。生成器の初期状態は、xによって与えられ、ここで、x=x mod nであり、xは、nよりも相対的に優良なランダム整数である。i番目の疑似ランダムビットは、xの最下位ビットであり、x=xi−1 mod nである。付加的な性質として、p及びqの知識は、x=x mod n、但し、y=2 mod ((p−1)(q−1))によって、シーケンス内のi番目の数の直接的な計算を可能にさせる。
【0906】
p及びqの知識がない場合、生成器は、繰り返しを実行しなければならない(計算の安全性は大きい数の素因数分解の困難さに依存する)。当初定義されたとき、BBS生成器に関する主要な問題は、単一の出力ビットのために必要な作業量であった。このアルゴリズムは、殆どのアプリケーションに対して遅すぎると考えられていた。しかし、モンゴメリ型リダクション演算の出現によって、より実際的な実装形態が生じた。その上、Vazirani及びVaziraniは、nのサイズに依存して、生成器の安全性を譲歩することなく、より多数のビットをxから安全に取り出せることを示した。x毎に1ビットだけが必要であるとするならば、Nビット(したがって、ビット生成器関数のN回の反復)がNビット乱数を発生させるために必要である。外部オブザーバーにとって、特定のビットの組が与えられた場合に、半々の確率以外で次のビットを決定する方法は無い。x、p及びqが秘密にされている場合、それらは鍵として作用し、出力ビットストリームを取り出し、x、p及びqを計算することはコンピュータ能力的に実施不能である。また、所定の疑似ランダムビットの組を発生させるために使用されたiの値を決定することは、コンピュータ能力的に実施不能である。この最後の特徴によって、生成器は一方向性になる。異なるiの値が、所定の長さの同じビットシーケンス(例えば、32ビットのランダムビット)を生じさせる可能性がある。たとえ、x、p及びqが既知であるとしても、予定のF[i]に対して、iは確率の組として導出できるだけであり、特定の値として導出できない。(勿論、iのドメインが既知であるならば、確率の組は更に限定される)。しかし、良好なp及びqと、良好なシードxの選択に関して問題がある。特に、Ritterは、xを選択する際の問題について記述している。この問題の性質は、BBS生成器が既知長さの単一のサイクルを生成しないことである。その代わりに、BBS生成器は、縮退(長さゼロ)サイクルを含む様々な長さのサイクルを生成する。このように、BBS生成器は、短いサイクルかもしれないランダム状態を用いて初期化することが不可能である。
【0907】
ハッシュ関数
ハッシュ関数として知られている特殊な一方向関数は、任意長さのメッセージを固定長さのハッシュ値へマップする。ハッシュ関数はH[M]のように表される。入力は任意長さであるため、ハッシュ関数は固定長さの出力を生ずるため圧縮コンポーネントを有する。また、ハッシュ関数は、衝突の検出を困難にさせ、H[M]からMに関する情報の決定を困難にさせるため、オブファスケイションコンポーネントを含む。衝突は実際に存在するので、殆どのアプリケーションは、所与のXに対して、H[X]=H[X]となるようなXを見つけることが困難であるという点で、ハッシュアルゴリズムが耐プレイメージ性であることを必要とする。その上、殆どのアプリケーションは、ハッシュアルゴリズムが耐衝突性である(即ち、H[X]=H[X]となるような2個のメッセージX及びXを見つけることが困難である)ことを要求する。耐衝突性のあるハッシュ関数が理想的な意味で存在し得るかどうかは、未確定の問題である。ハッシュ関数の主なアプリケーションは、デジタル署名アルゴリズムを適用する前に、入力メッセージをデジタル「指紋」に変形することである。デジタル署名との衝突の一つの問題は以下の例に示されている。
【0908】
Aは、「私はBに100ドルの借りがある。」という長いメッセージMを持っている。Aは、自分の秘密鍵を用いてH[M]を署名する。どん欲なBは、H[M]=H[M]であり、MがBにとって有利であるような衝突メッセージM、例えば、「私はBに100万ドルの借りがある。」を探索する。明らかに、このようなMを見つけることが困難であることを保証することはAの利益である。
【0909】
耐衝突性のある一方向ハッシュ関数の例は、SHA−1、MD5、及びRIPEMD−160であり、これらは全てMD4から導かれる。
【0910】
MD4
Ron Rivestは1990年にMD4を発表した。他の全ての一方向ハッシュ関
数はMD4から何らかの方法によって導出されるので、ここでは、MD4を説明する。MD4は、衝突を探索されるのではなく、計算可能であるという点で、現在では、完全に破られたと考えられている。上記の例において、Bは、元のメッセージMと同じハッシュ値を用いて、代わりのメッセージMを普通に発生させることができる。
【0911】
MD5
Ron Rivestは1991年に、安全性の高まったMD4として、MD5を発表した。MD4と同様に、MD5は128ビットのハッシュ値を生成する。Dobbertinは、最近の攻撃後のMD5の状態を説明している。彼は、MD5において疑似衝突を見つける方法を説明し、圧縮関数の弱点を指摘し、つい最近、衝突が発見された。即ち、MD5は、衝突の存在がひどい結果を招くデジタル署名スキームの圧縮に使用されるべきではない。しかし、MD5は、一方向関数として依然として使用することができる。その上、HMAC−MD5の構造は、これらの最近の攻撃による影響を受けない。
【0912】
SHA−1
SHA−1はMD5と非常に類似しているが、160ビットのハッシュ値を有する(MD5は128ビットのハッシュ値しかない)。SHA−1は、デジタル署名標準(DSS)で使用するため、NIST及びNSAによって設計され発表された。最初に発表された説明はSHAと呼ばれたが、その後直ぐに、おそらくSHAの安全性の欠陥を訂正するために改訂され、SHA−1となった(但し、NSAは変更の原因となった数学的な理由を発表していない)。SHA−1に対する暗号攻撃は知られていない。また、SHA−1は、単にハッシュ結果が長くなったという理由で、力ずくの攻撃に対する耐性がMD4又はMD5よりも強い。米国政府は、SHA−1及びDSAアルゴリズム(DSSの一部として定められたデジタル署名認証アルゴリズム)を保有し、少なくとも一つの関連特許(1993年に発行された米国特許5231688号)を保持する。
【0913】
RIPEMD−160
RIPEMD−160は、その前進であるRIPEMD(1992年に欧州委員会のRIPEプロジェクトのために開発された)から導出されたハッシュ関数である。その名前から分かるように、RIPEMD−160は、160ビットのハッシュ結果を生成する。32ビットアーキテクチャのソフトウェア実装のため合わされたRIPEMD−160は、10年間以上に亘って高いセキュリティレベルを提供することを予定されている。RIPEMD−160に対する攻撃の成功例は存在しないが、RIPEMD−160は比較的新しく、大規模に解読されていない。最初のRIPEMDアルゴリズムは、従来のMD4に対する暗号攻撃に対抗するために特に設計された。最近のMD5に対する攻撃は、RIPEMDの128ビットハッシュ関数においても類似した弱点を明らかにした。この攻撃は理論的な弱点を示しただけであるが、Dobbertin、Preneel及びBosselaersは、RIPEMDを新しいアルゴリズムRIPEMD−160へ更に強化した。
【0914】
メッセージ認証コード
メッセージ認証の問題は以下のようにまとめることができる:
Aは、Bからのメッセージであると推測されるメッセージが本当にBからのメッセージであることをどのようにして確信するか?
メッセージ認証はエンティティ認証とは異なる。エンティティ認証の場合、一つのエンティティ(要求者)は、自分のアイデンティティを他者(検証者)に対して照明する。メッセージ認証の場合、所定のメッセージが自分の思う人からのメッセージであることを保証すること、即ち、メッセージが発信元から宛先までの途中で改ざんされていないことを保証することに関係する。一方向ハッシュ関数はメッセージに対する保護が十分ではない。MD5のようなハッシュ関数は、元の入力を代表するハッシュ値を発生させ、元の入力がハッシュ値から導出できないことに基づいている。AとBの間にいるEからの簡単な攻撃は、Bからのメッセージを途中で盗み、自分のメッセージで置き換えることである。たとえ、Aが元のメッセージのハッシュを送信したとしても、Eは自分の新しいメッセージのハッシュで簡単に置き換えることができる。一方向ハッシュだけを使用した場合、AはBのメッセージが変更されたかどうかを知る方法がない。メッセージ認証の問題に対する一つのソリューションは、メッセージ認証コード、即ち、MACだえる。BがメッセージMを送信するとき、Bは、受信者にMが本当にBからのメッセージであることがわかるようにMAC[M]を送信する。これを実現するため、BだけがMのMACを生成可能であり、更に、AはMAC[M]と対照してMを検証し得ることが必要である。これは、Mを秘密にする必要がないときに、M−MACの暗号化が有効であることとは異なることに注意する必要がある。ハッシュ関数からMACを構築する最も簡単な方法は、対称アルゴリズムを用いてハッシュ値を暗号化すること、即ち、
入力メッセージをハッシュ化 H[M]
ハッシュを暗号化 E[H[M]]
である。
【0915】
これは、最初にメッセージを暗号化して、次に、暗号化されたメッセージをハッシュ化するよりも安全性が高い。任意の対称又は非対称暗号化関数を使用することができる。しかし、(上記のような)暗号化を使用する技術の代わりに、鍵依存型の一方向ハッシュ関数を使用する方が以下の幾つかの点で有利である:
速度:一方向ハッシュ関数は一般的に暗号化よりも高速に動作するため;
メッセージサイズ:E[H[M]]は少なくともMと同じサイズであるが、H[M]は固定サイズ(通常、Mよりもかなり小さい)であるため;
ハードウェア/ソフトウェア必要条件:鍵付きの一方向ハッシュ関数は、典型的に、それらの暗号ベースの代案よりも遙かに複雑さが抑えられている;
一方向ハッシュ関数の実装は、暗号化装置又は復号化装置であるとはみなされないので、米国の国外持ち出し規制の対象ではない。
【0916】
尚、ハッシュ関数は、当初は、鍵を格納したり、メッセージ認証をサポートしたりするためには設計されていなかったことに注意する必要がある。その結果として、メッセージを秘密プレフィックス、サフィックス、又は両方と連結する種々の関数を含む、メッセージ認証を実行するためにハッシュ関数を使用する、ある種のアドホックな方法が提案されている。これらのアドホックな方法の殆どは、洗練された手段によって巧く攻撃された。付加的なMACは、XORスキーム及びテプリッツ(Toeplitz)行列に基づいて提案されている(LFSRベース構造の特殊なケースを含む)。
【0917】
HMAC
特にHMAC構造は、インターネットメッセージ認証セキュリティプロトコル用のソリューションとして認められ始めている。HAMC構造は、基礎となるハッシュ関数をブラックボックス的に使用して、ラッパーとして作用する。ハッシュ関数の置換は、安全性又は性能上の理由から求められるならば、簡単に行われる。しかし、HMAC構造の主要な利点は、基礎となるハッシュ関数がある程度の合理的な暗号強度を有するならば、HMAC構造は安全であることが証明できること、即ち、HMACの強度は、ハッシュ関数の強度と直接的に関連していることである。HMAC構造はラッパーであるため、任意の反復ハッシュ関数をHMACで使用することが可能である。その例には、HMAC−MD5、HMAC−SHA1、HMAC−RIPEMD160等が含まれる。以下のような定義:
H=ハッシュ関数(例えば、MD5又はSHA−1)
n=Hから出力されたビット数(例えば、SHA−1の場合160ビット、MD5の場合128ビット)
M=MAC関数が適用されるべきデータ
K=2当事者によって共有される秘密鍵
ipad=0x36の反復64回
opad=0x5Cの反復64回
を与えると、HMACアルゴリズムは:
0x00バイトをKの最後に付加することによってKを64バイトへ拡張する;
(1)で作成された64バイト文字列をipadでXOR演算する;
(2)で作成された64バイトにデータストリームMを付加する;
(3)で発生されたストリームにHを適用する;
(1)で作成された64バイト文字列をopadでXOR演算する;
(4)からの結果Hを(5)からの結果である64バイトに付加する;
(6)の出力にHを適用し、結果を出力する;
のようになる。したがって、
HMAC[M]=H[(KAopad)|H[(KAipad)|M]]
である。
【0918】
推奨される鍵長さは少なくともnビットであるが、64バイト(ハッシュ化ブロックの長さ)よりも長くなってはならない。nビットよりも長い鍵は、関数の安全性を上乗せしない。HMACは、オプションとして、最終的な出力の丸め、例えば、160ビットから128ビットへの丸めを行うことできる。HMAC設計者の規約(RFC)は、このアルゴリズムが最初に発表された1年後の1997年に発行された。設計者は、HMACに対する既知の最強の攻撃は、ハッシュ関数Hに対する衝突の頻度に基づく攻撃であり、最低限度で適当なハッシュ関数に対して全く実際的ではないということを公表している。より最近では、リプレイ防止機能付きHMACプロトコルが、所定の時間内でのM、HMAC[M]コンビネーションの捕捉及び再生を防止するために規定されている。
【0919】
乱数及び時変性メッセージ
一方向関数としての乱数生成器の使用については既に説明した。しかし、乱数生成器の理論は、暗号法、セキュリティ、及び認証と非常に絡み合っている。優れた乱数生成器の定義に関して多数の問題がある。Knuthは、生成器をよくするもの(統計的テストを含む)、及び生成器の構築に関する一般的な問題を説明している。乱数の用法の一つは、メッセージが時間的に変化することを保証することである。Aがコマンドを暗号化し、それをBへ送信するシステムを想定する。暗号化アルゴリズムが所与の入力と同じ出力を生成する場合、攻撃者は、簡単にメッセージを記録し、Bを欺くためにそれを再生することが可能である。攻撃者は、暗号化機構を破壊する必要がなく、(Aになりすましている間に)Bに対して再生すべきメッセージがわかれればよい。その結果として、メッセージは、しばしば、そのメッセージ(したがって、その暗号化された対応部分)が常に変化することを保証するため、乱数及びタイムスタンプを含む。乱数生成器は、しばしば、鍵を生成するためにも使用される。したがって、現時点では、全ての生成器は、この目的のためには不確かであると言って差し支えない。例えば、Berlekamp−Masseyアルゴリズムは、LFSR乱数生成器に対する従来の攻撃法である。LFSRの長さがnであるならば、2nビットのシーケンスは、鍵生成器を構成するLFSRを決定するために十分である。しかし、乱数生成器の唯一の役目は、メッセージが時間的に変化することを保証することであるならば、生成器及びシードのセキュリティは、セッション鍵生成の場合のように重要ではない。しかし、乱数シード生成器が危険にさらされ、攻撃者が未来の「乱数」を計算可能であるならば、一部のプロトコルが攻撃者に対して開放されたままにされ得る。新しいプロトコルはこの状況に関して検討されるべきである。要求される実際のタイプの乱数生成器は、インプリメンテーションと、その生成器の使用目的と、に依存するであろう。生成器には、Ron RivestによるRC4のようなBlum、Blum、及びShubストリーム暗号、SHA−1及びRIPEMD−160のようなハッシュ関数、並びに、LFSR(線形フィードバックシフトレジスタ)及びそれらのより最近の対応物であるFCSR(キャリー付きフィードバックシフトレジスタ)のような従来の生成器が含まれる。
【0920】
攻撃
このセクションは、認証チップのような認証暗号システムを破るために行われる可能性のある様々なタイプの攻撃を説明する。攻撃は、物理的な攻撃と論理的な攻撃に大別される。物理的な攻撃は、暗号システムの物理的な実装を破壊する(例えば、鍵を取り出すためにチップを壊して開ける)方法を表し、論理的な攻撃は、実装に依存しない暗号システムへの攻撃を含む。論理的なタイプの攻撃は、プロトコル又はアルゴリズムに対して機能し、以下の三つのうちの何れかを実行しようとする:
認証プロセスを完全に回避する;
あらゆる質問に回答できるように、力ずく又は推論によって秘密鍵を取得する;
鍵を用いることなく各質問に正しい回答を与えるため、認証用の質問及び回答の性質を十分に検出する。
【0921】
次に、攻撃のスタイル及び形式を詳細に説明する。セキュリティチップによって使用されるアルゴリズム及びプロトコルとは無関係に、チップの認証部の回路は物理的な攻撃を受ける可能性がある。物理的な攻撃は、以下の4つの主要な形で現れるが、攻撃の形態は変化し得る:
認証チップを完全に回避する;
動作中にチップを物理的に検査する(破壊的及び非破壊的);
チップを物理的に分解する;
チップを物理的に改変する。
【0922】
次に、攻撃のスタイル及び形式を詳細に説明する。このセクションは、これらの攻撃に対するソリューションを提案するものではない。このセクションは、各攻撃タイプを説明するだけである。調査は、(インターネット認証のような他のある種のシステムではなく)あるシステムに取り付けられた認証チップ53の状況に限定されている。
【0923】
論理的な攻撃
これらの攻撃は、暗号システムの物理的な実装形態に依存しない。これらは、プロトコル、アルゴリズムの安全性、及び乱数生成器に作用する。
【0924】
暗号文だけの攻撃
これは、攻撃者が、全て同じアルゴリズムを使用して暗号化された一つ以上の暗号化メッセージをもつ場合である。攻撃者の目的は暗号化メッセージから平文メッセージを獲得することである。理想的には、鍵を復元することが可能であり、その結果、将来のすべてのメッセージを復元可能である。
【0925】
既知平文攻撃
これは、攻撃者が、平文と、平文の暗号化形式の両方をもつ場合である。認証チップの場合、既知の平文の攻撃は、攻撃者がシステムと認証チップの間のでーたフローを見ることができる場合である。入力及び出力は(攻撃者によって選別されることなく)観測され、弱点を見つけるため解析され得る(例えば、バースデー攻撃、又は区別の付く興味ある入力/出力のペアの探索によって)。既知平文攻撃は、選択平文攻撃よりも弱いタイプの攻撃である。なぜならば、攻撃者はデータフローしか観測できないからである。既知平文攻撃は、ロジックアナライザを、システムと認証チップの間の配線に接続することによって実行し得る。
【0926】
選択平文攻撃
選択平文攻撃は、暗号解読者が任意の選択されたメッセージを暗号システムへ送信し、その応答を観測できる能力を備えている場合である。暗号解読者がアルゴリズムを知っているならば、特定の出力を別の関数の入力へ供給することによって利用可能な入力と出力の間の関係があるであろう。内蔵型認証チップを使用するシステムでは、選択平文攻撃を防止することは難しい。なぜならば、暗号解読者は、論理的に自分がシステムであるふりをして、任意の選択されたビットパターンストリームを認証チップへ送信できるからである。
【0927】
適応的選択平文攻撃
このタイプの攻撃は選択平文攻撃と類似しているが、攻撃者が先行の試験の結果に基づいて後続の選択された平文テキストを変更し得る点で異なる。上述のシステム/認証チップのシナリオがコピー機及びトナーカートリッジのような消耗品のために利用されるときは、確実にこのケースである。なぜならば、特に、システムと消耗品の両方は誰でも入手できるようにされているからである。
【0928】
ブルートフォース攻撃
鍵ベースの暗号システムアルゴリズムを破るための保証付きの方法は、単純に全ての鍵を試してみることである。最終的に正しい鍵が見つけられるであろう。これは、ブルートフォース攻撃として知られている。しかし、鍵候補の数が増加すると、より多くの鍵を試してみる必要があり、正しい鍵を見つけるために(平均的に)要する時間が長くなる。N個の鍵がある場合、最大でN回の試行が必要である。鍵の長さがNビットであるならば、最大で2回の試行が必要であり、半分だけの試行(2N−1)後に鍵を見つけるチャンスは50%である。Nが長くなればなるほど、鍵を見つけるために要する時間が長くなるので、鍵の安全性が高まる。勿論、攻撃が最初の試行で鍵を当てる可能性はあるが、この可能性は鍵が長くなると共に低下する。ここで、56ビットの鍵長さを考える。最悪ケースでは、鍵を見つけるために全部で256回のテスト(7.2×1016回のテスト)を行わなければならない。1977年に、DiffieとHellmanは、100万個のプロセッサにより構成され、各プロセッサが毎秒100万回のテストを実行刷る能力を備えたDES解読専用機械を発表した。このような機械は任意のDESコードを破るためには20時間を要する。鍵長さが128ビットの場合を考える。最悪ケースでは、鍵を見つけるために全部で2128回のテスト(3.4×1038回のテスト)を行わなければならない。これは、各々が毎秒10億回のテストを実行する1兆個のプロセッサ上で10億年を要する。鍵長さが十分に長い場合、ブルースフォース攻撃は非常に長い時間を要するので、攻撃者の努力に値しない。
【0929】
推測攻撃
このタイプの攻撃は、攻撃者が単に鍵を「推測」しようとする場合である。攻撃としては、ブルースフォース攻撃と同じであり、成功の確率は鍵の長さにかかっている。
【0930】
量子コンピュータ攻撃
nビット鍵を解読するため、適切なアルゴリズムに埋め込まれたnキュビットを有する量子コンピュータ(NMR、オプティカル、又はケージドアトム)を構築しなければならない。量子コンピュータは、実効的に、2個の同時コヒーレント状態に存在する。デコヒーレントを生じることなく正しいコヒーレント状態を抽出することが要領である。今までのところ、これは、2キュビットのシステム(4コヒーレント状態で存在する)によって達成されている。数年の間に、これを6キュビット(64の同時コヒーレント状態をもつ)まで拡張することは可能であると思われる。
【0931】
残念なことに、キュビットを付加する毎に、鍵を表現する信号の相対強度が半分になる。これは、特に、暗号方式的に安全なシステムで使用される長い鍵の場合に、直ぐに鍵取り出しの重大な障害になる。その結果として、量子コンピュータを使用した、暗号方式的に安全な鍵(例えば、160ビット)に対する攻撃は、おそらく実施される可能性はなく、量子コンピュータが、認証チップの商業的な耐用年限中に50キュビット以上のキュビット数を達成する可能性は非常に低い。たとえ、50キュビットの量子コンピュータを使用しても、160ビット鍵を解読するために、2110回のテストが必要である。
【0932】
意図的なエラー攻撃
一部のアルゴリズムの場合、攻撃者は悪い入力の結果から有用な情報を収集することができる。有用な情報の範囲は、エラーメッセージ文から、エラーを発生させるために要した時間までに亘る。簡単な一例は、ユーザID/パスワードのスキームである。エラーメッセージが通常「間違ったユーザID」であるならば、攻撃者が「間違ったパスワード」というメッセージを取得したとき、ユーザIDが正しいことを知る。メッセージが常に「間違ったユーザID/パスワード」であるならば、攻撃者に与えられる情報は遙かに少ない。より複雑な例は、最近発表された、安全なウェブサイトから暗号コードを解読する方法である。この攻撃には、特定のメッセージをサーバーへ送信することと、エラーメッセージ応答を観測することとが含まれる。応答は、鍵を学習するために十分な情報を与え、応答が無くても何らかの情報が得られる。アルゴリズムの一例として、時間は、誤りのあるビットが入力メッセージ中に検出されたときに直ちにエラーを返すアルゴリズムの場合に知ることができる。ハードウェア実装形態に依存して、攻撃者が、応答の時間を計り、エラー応答に要した時間に基づいて1ビットずつ変更し、このようにして鍵を獲得することは、簡単な方法である。チップ実装形態の場合、必要な時間がインターネット経由の場合よりもかなり高い精度で観測できることは確実である。
【0933】
バースデー攻撃
この攻撃は、有名な「バースデーパラドックス」(実際には全くパラドックスではない)にちなんで命名された。ある人が他の人と同じ誕生日である確率は365分の1である(閏年は考えない)。したがって、室内の183人のうちの一人があなたと同じ誕生日である確率は50%よりも高い筈である。しかし、室内に23人の人がいれば、何れか二人の誕生日が同じである確率は50%を超える。その理由は、23人によって253通りのペアが生じるからである。バースデー攻撃は、ハッシングアルゴリズム、特に、ハッシングとデジタル署名を組み合わせるアルゴリズムに対する一般的な攻撃である。メッセージが生成され、既に署名されている場合、攻撃者は、同じ値にハッシュする衝突メッセージを探す必要がある(あなたと同じ誕生日の人を見つけることと類似している)。しかし、攻撃者がメッセージを生成可能であるならば、バースデー攻撃が作用し始める。攻撃者は、同じハッシュ値をもつ二つのメッセージを探し(何れか二人が同じ誕生日である場合と類似している)、一方のメッセージだけがそれに署名をした人に受け入れられ、もう一方は攻撃者の役に立つ。その人が元のメッセージに署名をし終えたならば、攻撃者は、その人は別のメッセージに署名をしたことを主張するだけでよく、数学的にどちらのメッセージが原本であるかを示す方法は無い。なぜならば、両方のメッセージは同じ値にハッシュするからである。ブルートフォース攻撃が一致を判定するための唯一の方法であるとすると、バースデー攻撃によるnビット鍵の脆弱化は2n/2である。バースデー攻撃を受ける可能性のある128ビットの長さの鍵は、事実上64ビットの長さしかない。
【0934】
連鎖攻撃
これらの攻撃は、ハッシュ関数の連鎖性に対して行われる攻撃である。連鎖攻撃は、ハッシュ関数の圧縮関数に的を絞る。このアイデアは、ハッシュ関数が一般的に任意の長さの入力をとり、入力nビットを同時に処理することによって、一定の長さの出力を生成する点に基づいている。1ブロックからの出力は次のブロックへの連鎖変数セットとして使用される。入力全体に対する衝突を見つけるのではなく、このアイデアは、入力連鎖変数セットが与えられた場合に、本来のメッセージと同じ出力連鎖変数を生じる代用ブロックを見つけることである。特定のブロックの選択数は、ブロックの長さに基づいている。連鎖変数がcビットであり、ハッシング関数はランダムマッピングのように挙動し、ブロック長さがbビットであるならば、このようなbビットブロックの個数は、約2b/2c個である。代用ブロックを見つけるためのチャレンジは、このようなブロックが考えられる全てのブロックのうちの疎部分集合であることである。SHA−1の場合、512ビットブロックの個数は、約2512/2160、即ち、2352個である。ブルートフォース検索によってブロックを見つける見込みは2160分の1である。
【0935】
完全ルックアップテーブルによる代用
チップへ送信された可能性のあるメッセージの数が少ない場合、鍵を解読するために複製品製造者は不要である。その代わりに、複製品製造者は、システムによって送信されたコードに対する純正チップからのレスポンスの全てを記録したROMをチップに組み込むことが可能である。鍵が長くなり、レスポンスが長くなると共に、このようなルックアップテーブルに必要な空間が大きくなる。
【0936】
疎ルックアップテーブルによる代用
チップへ送られたメッセージが、実効的にランダムではなく、ある程度予測可能であるならば、複製品製造者は完全ルックアップテーブルを提供しなくてもよい。例えば:
メッセージが単なるシリアル番号であるならば、複製品製造者は、過去及び未来の予測シリアル番号を格納するルックアップテーブルを提供すればよい。これらのシリアル番号が1019個を超える可能性は低い;
テストコードが単なる日付であるならば、複製品製造者はアドレスとして日付を使用してルックアップテーブルを生成することができる;
テストコードが、シリアル番号又は日付をシードとして用いる疑似乱数であるならば、複製品製造者は、まさに、システム内の疑似乱数生成器を解読する必要がある。これは、おそらく難しくはないであろう。なぜならば、複製品製造者はシステムのオブジェクトコードを入手できるからである。複製品製造者は、蓄積された認証コードへアクセスするためこれらのコードを使用して、内容アドレス可能メモリ(又は、その他の疎配列ルックアップ)を生成するであろう。
【0937】
差分暗号解読
差分暗号解読は、入力ストリームのペアが既知差分を用いて生成され、符号化ストリームの差分が解析される攻撃を表す。既知差分攻撃は、DES及びその他の同様のアルゴリズムで使用されるようなSボックスの構造にかなり依存している。HMAC−SHA1のような他のアルゴリズムはSボックスを持たないが、攻撃者は、
最小差分入力及びそれに対応した出力
最小差分出力及びそれに対応した入力
の統計的解析を行うことによって差分的な攻撃を実行し得る。
【0938】
殆どのアルゴリズムは、差分暗号解読のプロセスが記載された後、差分暗号解読に対して補強された。これは、各暗号化方式に専用のセクションで対称とされている。しかし、一部の密かに開発された近年のアルゴリズムは破られている。なぜならば、開発者がある種のスタイルの差分攻撃を考慮せず、自分のアルゴリズムを公開の精査の対象としなかったからである。
【0939】
メッセージ置換攻撃
ある種のプロトコルでは、媒介物はメッセージの一部又は全部を置換可能である。これは、真の認証チップが消耗品内の再使用可能な複製チップにプラグインされる場合である。複製チップは、システムと認証チップの間の全てのメッセージを盗み取り、多数の置換攻撃を実行し得る。ヘッダとその後に続く内容とを格納したメッセージを例として考える。攻撃者は有効ヘッダを生成し得ないが、特に、有効レスポンスが「はい、あなたのメッセージを受信しました。」のようなものであるならば、メッセージの固有の内容を置換することができる。たとえ、リターンメッセージが「はい、以下のメッセージを受信しました...」であったとしても、攻撃者は、肯定応答を本来の送信者へ返信する前に、元のメッセージを置換することができる。メッセージ認証コードは、殆どのメッセージ置換攻撃に対抗するために開発された。
【0940】
鍵生成器のリバースエンジニアリング
疑似乱数生成器が鍵を生成するため使用される場合、複製品製造者は、生成器プログラムを取得するか、又は使用されたランダムシードを推測する可能性がある。これは、ネットスケープのセキュリティプログラムが最初に破られたときの方法である。
【0941】
認証全体の回避
認証プロトコルには認証プロセス全体の回避を可能にする問題があり得る。この種の攻撃の場合、鍵は全く無関係であり、攻撃者は鍵を復元する、又は鍵を推定する必要がない。電源投入時に認証を行なうが、その他のときには認証しないシステムを例として考える。複製認証チップを含む再使用可能な消耗品は、真正認証チップを利用する場合もある。複製認証チップ53は、認証呼び出しのため真正チップを使用し、次に、その後の真正認証チップの状態データをシミュレーションする。認証を回避する別の例は、消耗品が使用された後に限りシステムが認証する場合である。複製認証チップは、消耗品の使用後で、認証プロトコルが完了する前に(或いは、開始される前に)コネクションの失敗をシミュレーションすることにより単純な認証回避を実行できる。「ケンタッキーフライドチップ」ハックと呼ばれる悪名の高い攻撃は、衛星テレビジョンシステム用のマイクロコントローラチップを置換する。加入者が受信料の支払いを停止したとき、システムは、「使用不能」メッセージを送出するであろう。しかし、新しいマイクロコントローラは、このメッセージを検出するだけで、それを消費者の衛星テレビジョンシステムへ渡さない。
【0942】
強盗/賄賂攻撃
鍵を知っている人は、それを他の誰かに教える可能性がある。この秘密の暴露は、強制(賄賂、強盗等)、報復(例えば、不満を抱いている従業員)、又は単に信条のために行われる。これらの攻撃は、通常、鍵を推測する他の試みよりも安価かつ容易である。一例として、Divx規格の開発に関わることを要求した多数の人々は、近年(1998年5/6月)、Divx仕様解読解読装置の開発に参加したいという趣旨で、即ち、信条によって、多種多様なDVDニュースグループで主張している。
【0943】
物理的攻撃
以下の攻撃は、攻撃者が物理的にアクセスできるシリコンチップに認証機構が実装されていることを前提としている。最初の攻撃であるROM読み出しは、鍵がROMに保存されているときの攻撃を表し、残りの攻撃は秘密鍵がフラッシュメモリに保存されることを前提としている。
【0944】
ROM読み出し
鍵がROMに保存されている場合、鍵を直接読み出すことが可能である。ROMは、このように(非対称暗号方式で使用するための)公開鍵を保持するため安全に使用することができるが、秘密鍵を保持するためには使用できない。対称暗号方式では、ROMは全く当てにならない。著作権付きテキスト(例えば、俳句)を鍵として使用することは不十分である。なぜならば、鍵の複製は、知的所有権が遵守されない国で行われることが想定されるからである。
【0945】
チップのリバースエンジニアリング
チップのリバースエンジニアリングでは、攻撃者は、チップを分解し、回路を解析する。回路が解析されてしまうと、チップのアルゴリズムの内部動作を復元することができる。ルーセント・テクノロジー社は、回路を映像化するため、TOBIC(ツー・フォトンOBICの略であり、OBICはOptical Beam Induced Current光ビーム誘導電流の頭文字である。)と呼ばれるアクティブな方法を開発した。主としてスタティックRAM解析のために開発されたプロセスは、全ての裏材を取り除き、裏面を鏡面仕上げまで磨き、表面に光を集光させる。励起波長は、特にICに電流を誘導しないように選択される。19世紀にケルクホフスは、アルゴリズムの内部動作がスキームの単なる秘密であるならば、スキームは解読されたも同然である、という暗号解読に関する基本的な仮説を立てた。ケルクホフスは、秘密性は完全に鍵の中に存在しなければならない、ということを明記している。その結果として、チップのリバースエンジニアリングに対する最良の保護策は、内部動作を無関係にすることである。
【0946】
認証プロセスの不当使用
あらゆる複製品製造者はシステムと消耗品の両方のデザインを入手していることを想定しなければならない。同じチャンネルが、システムと信頼できるシステム認証チップとの間、並びに、信頼できない消耗品認証チップとの間の通信のために使用されるならば、信頼できないチップが「正しい回答」を得るために信頼できるチップに問い合わせをする可能性がある。もしそうであるならば、複製品製造者は鍵を決定する必要がないであろう。彼らは、システム認証チップからの応答を使用してシステムをだますだけでよい。認証プロセスを不当使用する別の方法は、論理的攻撃「認証プロセスの回避」と同じ方法に従って、認証プロセスが行われるとき、システムとの接続の失敗をシミュレーションし、電源遮断等をシミュレーションする。
【0947】
システムの変更
この種の攻撃は、システム自体が複製消耗品を受け入れるように変更される攻撃である。攻撃は、システムROMの変更、消耗品の配線し直し、又は極端なケースでは、完全な複製システムである。この種の攻撃は、各個のシステムが変更されることが必要であり、殆どの場合に所有者の承諾が必要であろう。通常は、消費者がこのような変更を行うために明らかな利益が必要である。なぜならば、このような変更は、典型的に、保証を無効にさせ、殆どの場合に費用が掛かるからである。消費者にとって明らかな利益のあるこのような変更の一例は、固定リージョン型DVDプレーヤーをリージョンフリー型DVDプレーヤーに変更するソフトウェアパッチである。
【0948】
従来のプロービングによるチップ動作の直接視
チップ動作がSTM又は電子ビームを使用して直接監視できるならば、鍵は、内部不揮発性メモリから読み出され、作業レジスタへ取り込まれるときに記録できる。従来の3形態のプロービングは、ICの通電中にICの上面又は前面に直接アクセスすることが必要である。
【0949】
不揮発性メモリの直接視
チップが、フラッシュメモリのフローティングゲートを放電させることなく露出するためにスライスされているならば、鍵は、おそらく、STM又はSKM(走査ケルビン顕微鏡)を使用して直接監視できる。しかし、ゲートを放電させることなくこのレベルでチップをスライスすることはおそらく実施不可能である。湿式エッチング、プラズマエッチング、イオンミリング(集光イオンビームエッチング)、又は化学機械研磨は、ほぼ確実にフローティングゲート上に存在する小さい電荷を放出する。
【0950】
状態変化によって生じる光バーストの監視
ゲートの状態が変化するとき、少量の赤外線エネルギーが放出される。シリコンは赤外線透過性であるため、これらの変化はチップの下側から回路を注視することによって観測できる。放出プロセスは弱いが、天文学で使用するために開発された超高感度機器を用いて検出できる程度に輝いている。IBMによって開発されたこの技術は、PICA(ピコセコンド・イメージング・サーキット・アナライザ)と呼ばれる。レジスタの状態が時点tで既知であるならば、レジスタ切り替わり時間の監視によって、時点t+nにおける正確な値が明らかになり、データが鍵の一部分であるならば、その部分は解読される。
【0951】
EMIの監視
電子回路が動作しているときには、かならず微弱な電磁信号が放出される。比較的低価格(数千ドル)装置はこれらの信号を監視できる。これは、攻撃者が鍵を推測するために十分な情報を与える。
【0952】
dd 変動の監視
鍵を監視できないとしても、レジスタが状態を変化させるときにはかならず電流の変動が生じる。信号対雑音比が十分に高い場合、攻撃者は、ハイビット又はロービットをプログラミングするときに生じるIddの差を監視することができる。Iddの変化は鍵に関する情報を示し得る。このような攻撃は、スマートカードを解読するために既に使用されている。
【0953】
差分故障解析
この攻撃は、イオン化、マイクロ波放射、又は環境ストレスによってビット誤りが取り込まれることを前提としている。殆どのケースでは、このような誤りは、鍵を明らかにするであろう役に立つ変更ではなく、チップに悪影響を与える(例えば、プログラムコードを破壊させる)可能性が高い。ROM上書き、ゲート破壊等のような目標としている故障は、有用な結果を生じる可能性が更に低い。
【0954】
クロック誤作動攻撃
チップは、典型的に、一定のクロック速度レンジ内で適切に動作するように設計されている。一部の攻撃者は、チップを非常に高いクロック速度で動作させることによってロジックに故障を生じさせ、又は特定の間隔で特定の時間にクロック誤作動を生じさせることを試みる。このアイデアは、回路が適切に機能しない乱調状態を作ることである。一例として、ANDゲートは、(乱調状態のために)入力と入力の論理積ではなく、常に入力をスルーする。攻撃者がチップの内部構造を知っているならば、攻撃者は、アルゴリズム実行中の正確な時点で乱調状態を取り入れ、これにより、鍵に関する情報を明らかにすることができる(或いは、最悪ケースでは、鍵自体を明らかにする)。
【0955】
電源攻撃
クロック信号に誤動作を引き起こす代わりに、攻撃者は電源に誤動作を生じさせることができ、電力は動作電圧レンジを外れるように増加又は減少させられる。正味の効果はクロック誤動作の場合と同じであり、特定の命令の実行に誤りを生じさせる。このアイデアは、CPUが鍵をXOR演算することを停止させること、又はデータを1ビット位置だけシフトすることを停止させること等である。鍵に関する情報を明らかにするために、特定の命令が目標にされる。
【0956】
ROMの上書き
ROMの単一ビットは、レーザーカッター顕微鏡を使用して、ロジックの向きに応じて、1又は0に書き換えることができる。あるオペコード/オペランドのセットがある場合、攻撃者が条件付きジャンプを無条件ジャンプへ書き換えること、又はたぶんレジスタ転送の宛先を変更することは簡単なことである。目標命令が慎重に選択されたならば、鍵が明らかにされるであろう。
【0957】
EEPROM/フラッシュの変更
EEPROM/フラッシュ攻撃は、ROM攻撃と類似しているが、レーザーカッター顕微鏡技術が個別のビットのセットとリセットの両方に使用できる点で異なる。これは、アルゴリズムの変更の適用範囲を非常に拡大する。
【0958】
ゲート破壊
AndersonとKuhnは、BihamとShamirがDESに関する攻撃を発表した高速ソフトウェア暗号化に関する1997年のワークショップのランプセッションで、ゲート破壊を説明している。この攻撃は、従来のブロック暗号(DES)のハードウェア実装内の個々のゲートを破壊するためレーザーカッターを使用するものであった。この攻撃の正味の効果は、レジスタの特定のビットを強制的に「無価値」にすることである。BihamとShamirは、特定のレジスタに強制的にこのような影響を与えることの効果−丸め関数からの出力の最下位ビットが0にセットされる、を説明している。左半分と右半分の最下位6ビットを比較することにより、鍵の数ビットを復元することができる。このようにして多数のチップにダメージを加えると、完全な鍵の復元を容易に行うために、鍵に関する十分な情報を明らかにすることができる。このように変更された暗号化チップは、暗号化と復号化はもはや逆の関係ではなくなるという性質をもつであろう。
【0959】
上書き攻撃
フラッシュメモリを読み出す代わりに、攻撃者は、単に、レーザーカッター顕微鏡を用いて単一ビットをセットする。攻撃者が前の値を知らないとしても、新しい値がわかる。チップが動作し続けるならば、そのビットの元の状態は、新しい状態と同じであるはずである。チップが動作しなくなった場合、そのビットの元の状態は、現在の状態の論理否定NOTである。攻撃者は、鍵の各ビットに対してこの攻撃を実行し、最大でnチップを使用してnビット鍵を獲得することができる(新しいビットが古いビットと一致するならば、新しいビットは次のビットを決定するために必要ではない)。
【0960】
テスト回路攻撃
殆どの回路は、製造上の欠陥を検査するために特に設計されたテスト回路を備えている。これは、BIST(ビルト・イン・セルフ・テスト)とスキャンパスとを含む。非常に頻繁に、スキャンパス及びテスト回路は、内蔵された全てのラッチへのアクセス及びリードアウト機構を含む。一部のケースでは、テスト回路は特定のレジスタの内容に関する情報を与えるために使用される可能性がある。テスト回路は、しばしば、チップが全ての製造上のテストに合格すると、一部のケースではチップ内の特定の配線を切ることによって、無効状態にされる。しかし、やる気のある攻撃者は、テスト回路を再接続して、動作可能状態にし得る。
【0961】
残留メモリ
値は、電源が取り外された後、長期間RAMに残存するが、不揮発性とみなされるまで長期間残存することはない。攻撃者は、機密情報がRAM(例えば、作業用レジスタ)へ移された後、電源を取り外し、RAMから値を読み出そうとすることが可能である。この攻撃は、通常のRAMチップを有するセキュリティシステムに対して最も有効である。典型的な例として、セキュリティシステムは、コンピュータケースが開けられたときにトリガーされる自動電源遮断機能付きで設計されていた。攻撃者は、単にケースを開け、RAMチップを取り外し、メモリ残留を利用して鍵を取り出せばよかった。
【0962】
チップ窃盗攻撃
認証チップの耐用期間に多数のステージが存在する場合、これらのステージの各々は、チップが盗み取られた場合のセキュリティ用の派生問題の観点で調べる必要がある。例えば、情報が複数のステージでチップにプログラミングされる場合、ステージ間でチップを窃盗したならば、攻撃者は鍵情報を入手できるか、又は攻撃のための労力が軽減される可能性がある。同様に、チップが、製造直後であり、プログラミングの前に盗み取られた場合、攻撃者に論理的利益又は物理的利益があるだろうか?
必要条件
消耗品を認証する問題に対する従来のソリューションは、典型的に、物理的なパッケージングについての特許に依存している。しかし、これは、家庭での詰め替え作業や産業財産権の保護の弱い国における複製品製造を止められない。その結果、より高レベルの保護が必要である。したがって、認証メカニズムは、システムが消耗品を安全かつ容易に認証できるようにする認証チップ53内に構築される。ここでは、消耗品を認証するシステムだけに限定すると(システムを認証する消耗品については考えない)、次の2レベルの保護を考えることができる:
プレゼンスオンリー認証
この場合、認証チップが存在することだけがテストされる。認証チップは、最プログラミングすることなく、別の消耗品で再使用することができる;
消耗品ライフタイム認証
この場合、認証チップの存在がテストされるだけではなく、認証チップ53は、消耗品の耐用期間に限り持続しなければならない。チップを再使用する場合、チップは、完全に消去され、再プログラミングされなければならない。これらの二つの保護レベルは、異なる必要条件を取り扱う。ここでは、主に、大量生産消耗品の複製品を防止するため、消耗品ライフタイム認証に関心がある。このケースでは、各チップは、認証対象である消耗品に関するセキュア状態情報を保持しなければならない。尚、消耗品ライフタイム認証チップは、プレゼンスオンリー認証チップを必要とするあらゆる状況で使用できることに注意する必要がある。認証の必要条件、データ記憶完全性の必要条件、及び製造の必要条件は、別々に検討すべきである。以下のセクションは各々の必要条件を簡単に説明する。
【0963】
認証
プレゼンスオンリー認証と消耗品ライフタイム認証の両方に対する認証必要条件は、システムが消耗品を認証するケースに限定される。プレゼンスオンリー認証の場合、認証チップが物理的に存在することが保証されなければならない。消耗品ライフタイム認証の場合、状態データが実際に認証チップに由来すること、及び状態データが途中で改ざんされていないこと、が保証される必要がある。これらの問題は切り離すことができず、改ざんされたデータは新しい送信元からのものであり、送信元を判定できない場合、改ざんの問題を解決できない。機密性があり、セキュリティ専門家によって精査されていない自家製のセキュリティ法に基づく認証方法を提供するだけでは不十分である。したがって、主要な必要条件は、専門家の精査に耐えた手段による認証を提供することである。認証チップ53によって使用される認証スキームは、論理的手段による打破に抵抗できなければならない。論理的タイプの攻撃は費用が掛かり、次の三つの事柄:
認証プロセスを完全に回避する;
あらゆる質問に回答できるように、力ずく又は推論によって秘密鍵を取得する;
鍵を用いることなく各質問に正しい回答を与えるため、認証用の質問及び回答の性質を十分に検出する;
のうちの一つを実行しようとする。
【0964】
データ記憶完全性
認証プロトコルは、通信されるメッセージ中のデータ完全性の保証に対押しているが、データ記憶完全性も必要である。次の2種類のデータ:
秘密鍵のような認証データ;
シリアル番号及びメディア残量等の消耗品状態データ;
を認証チップ内に記憶しなければならない。
【0965】
これらの二つのデータタイプのアクセス必要条件は全く異なる。したがって、認証チップ53は、各タイプの完全性必要条件を考慮する記憶/アクセス制御メカニズムを必要とする。
【0966】
認証データ
認証データは機密保持されなければならない。認証データは、チップの耐用期間の製造/プログラミングステージの間にチップに記憶される必要があるが、それ以降、チップから取り出されることは許可されるべきではない。認証データは、不揮発性メモリから読み出されることに対抗できなければならない。認証スキームは鍵が推論によって取得できないことを保証する役目があり、製造プロセスは鍵が物理的手段によって取得できないことを保証する役目がある。認証データ記憶エリアのサイズは、必要な鍵、及び認証プロトコルによって義務づけられるような秘密情報を保持するために十分な大きさでなければならない。
【0967】
消耗品状態データ
各認証チップ53は、消耗品状態データのうちの256ビット(32バイト)を記憶できる。消耗品状態データは以下のタイプに分類される。アプリケーションに依存して、以下のタイプのデータ項目の各々の数は異なる。単一のデータ項目に対する最大数は32ビットであると仮定する:
リードオンリー;
リードライト;
デクリメントオンリー。
【0968】
リードオンリーデータは、チップの耐用期間の製造/プログラミングステージの間にチップに保存できなければならないが、それ以降、変更を許されるべきではない。リードオンリーデータの例は、消耗品バッチ番号及びシリアル番号である。
【0969】
リードライトデータは、変更可能な状態情報であり、例えば、特定の消耗品が使用された最後の時間である。リードライトデータ項目は、消耗品の耐用期間中、無制限の回数で読み書きをすることができる。それらは、消耗品に関するあらゆる状態情報を記憶するため使用できる。このデータに対する唯一の必要条件は、不揮発性メモリに保持されるべきである、ということである。攻撃者はシステムへのアクセス権を獲得し得るので(リードライトデータへの書き込みが可能であり)、攻撃者はこのタイプのデータフィールドを変更する可能性がある。このデータタイプは秘密情報のために使用されるべきではなく、不確かであると考えるべきである。
【0970】
デクリメントオンリーデータは、消耗品リソースの利用可能度をカウントダウンするため使用される。例えば、コピー機のトナーカートリッジは、デクリメントオンリーデータ項目としてトナー残量を記憶する。カラープリンタ用のインクカートリッジは、各インク色の量をデクリメントオンリーデータ項目として記憶し、3個(シアン、マゼンタ及びイエローの各々に1個ずつ)、又は5から6個のデクリメントオンリーデータ項目を必要とする。この種のデータ項目の必要条件は、一旦、製造/プログラミングステージで初期値を用いてプログラミングされると、値を減少させることだけが可能である、ということである。それは、最小値に達すると、それ以上は減少し得ない。デクリメントオンリーデータ項目は、消耗品ライフタイム認証だけで必要になる。
【0971】
製造
認証チップ53は、理想的には、低価格消耗品の認証メカニズムとして組み込むことができるように低製造コストであるべきである。認証チップ53は、フラッシュのような標準的な製造プロセスを使用すべきである。これは:
製造場所の非常に広範囲の選択を可能にさせること;
明確であり、且つ正常に動作するテクノロジーを使用すること;
コストを低減すること;
が必要である。
【0972】
使用される認証スキームとは無関係に、チップの認証部の回路は物理的攻撃に対抗できなければならない。物理的な攻撃は、以下の4つの主要な形で現れるが、攻撃の形態は変化し得る:
認証チップを完全に回避する;
動作中にチップを物理的に検査する(破壊的及び非破壊的);
チップを物理的に分解する;
チップを物理的に改変する。
【0973】
理想的には、チップは米国から持ち出せるべきであるので、認証チップ53をセキュア暗号化装置として使用可能であってはならない。これは優先度の低い必要条件である。なぜならば、他の国にも認証チップを製造し得る多数の企業が存在するからである。いずれにせよ、米国からの国外持ち出し規制は変わり得る。
【0974】
認証
消耗品を認証する問題に対する従来のソリューションは、典型的に、物理的なパッケージングについての特許に依存している。しかし、これは、家庭での詰め替え作業や産業財産権の保護の弱い国における複製品製造を止められない。したがって、より高レベルの保護が必要である。機密性があり、セキュリティ専門家によって精査されていない自家製のセキュリティ法に基づく認証方法を提供するだけでは不十分である。ネットスケープの最初の独自に開発したシステム、及び携帯電話で私用されるGSM不正防止ネットワークは、設計秘密主義によって生じたセキュリティの脆弱性である。両方のセキュリティシステムは、それらの企業がオープン設計プロセスに従っていたならば検出できたであろう従来の手段によって破られた。ソリューションは、専門家の精査に耐えた手段による認証を提供することである。多数のプロトコルを消耗品認証のために使用することが可能である。ここでは、公表されたセキュリティ方法だけを使用し、この新しい方法によって知られた動作を使用する。全てのプロトコルにおいて、スキームの安全性は、秘密アルゴリズムではなく、秘密鍵に依拠する。プロトコルの全ては、時変性チャレンジ(即ち、毎回異なるチャレンジ)に依存し、レスポンスはチャレンジと秘密情報に依存する。チャレンジは乱数を含むので、観測者は後続のアイデンティフィケーションに関する有益な情報を集めることができない。プレゼンスオンリー認証と消耗品ライフタイム認証の各々のために二つのプロトコルが提案される。プロトコルは認証プロセスのために必要な認証チップの個数が異なるが、全てのケースで、システムは消耗品を認証する。ある種のプロトコルは、1個又は2個のチップで動作するが、他のプロトコルは2個のチップだけで動作する。使用される認証チップが1個であるか2個であるかとは無関係に、システムは認証判定を行う役割を担う。
【0975】
シングルチップ認証
唯一の認証チップ53が認証プロトコルのために使用される場合、単一チップ(チップAと呼ぶ)は、システム(システムと呼ぶ)に対し、チップAが真正であることを伝える責任がある。プロトコルの開始時に、システムは、チップAの真正性を確信できない。システムは、チップAとチャレンジ−レスポンスプロトコルを実行し、チップの真正性を判定する。全てのプロトコルにおいて、消耗品の真正性は、チップの真正性に直接的に基づいている。即ち、チップAが真正であるとみなされるならば、消耗品も真正であるとみなされる。データフローは図167に示されている。シングルチップ認証プロトコルの場合、システムは、ソフトウェア、ハードウェア、又は両者の組み合わせのどれでもよい。重要なことは、システムは安全ではなく、攻撃者がROMを調べることによって、又は回路を調べることによって容易にリバースエンジニアリングをすることができる、ということである。システムは、それ自体で安全になるようには特に設計されていない。
【0976】
ダブルチップ認証
別のプロトコルでは、2個の認証チップが図168に示されるように必要になる。単一のチップ(チップA)は、システム(システムと呼ぶ)に対し、チップAが真正であることを伝える責任がある。認証プロセスの一部として、システムは、信頼できる認証チップ(チップTと呼ぶ)を利用する。ダブルチップ認証プロトコルでは、システムは、ソフトウェア、ハードウェア、又は両者の組み合わせのどれでもよい。しかし、チップTは物理的な認証チップでなければならない。あるプロトコルでは、チップT及びチップAは同じ内部構造を備え、他のプロトコルでは、チップT及びチップAは異なる内部構造を備えている。
【0977】
プレゼンスオンリー認証(不確かな状態データ)
このレベルの消耗品認証の場合、認証チップ53の存在を確認することだけに関心がある。認証チップは状態情報を格納し得るが、その状態情報の伝送は安全であるとは考えられない。二つのプロトコルが提案される。プロトコル1は2個の認証チップが必要であり、プロトコル2は1個又は2個の認証チップを使用して実現可能である。
【0978】
プロトコル1
プロトコル1はダブルチッププロトコルである(2個の認証チップが必要になる)。各認証チップは以下の値を格納する:
K F[X]用の鍵。秘密でなければならない;
R 現在の乱数。秘密でなくてもよいが、チップインスタンス毎に異なる初期値でシードされなければならない。Random関数の呼び出し毎に変化する。
【0979】
各認証チップは以下の論理関数を格納する:
Random[] Rを返し、Rをシーケンス内で次へ進める;
F[X] 一方向関数Fを秘密鍵Kに基づいてXに適用した結果であるF[X]を返す。
【0980】
プロトコルは以下の通りである:
システムはチップTからのRandom[]を要求する;
チップTはRをシステムへ返す;
システムはチップT及びチップAの両方からのF[R]を要求する;
チップTはFKT[R]をシステムへ返す;
チップAはFKA[R]をシステムへ返す;
システムは、FKT[R]をFKA[R]と比較する。それらが一致しているならば、チップAは有効であるとみなされる。一致しないならば、チップAは無効であるとみなされる。
【0981】
データフローは図169に示されている。システムは、F[R]メッセージを理解する必要がない。システムは、チップAからの応答とチップTからの応答が同じであることをチェックするだけでよい。したがって、システムは鍵を必要としない。プロトコル1の安全性は以下の2カ所にある:
F[X]の安全性。認証チップだけが秘密鍵を格納するので、
信頼できる認証チップ53(チップT)によって生成されたF[X]と一致するF[X]をXから生成し得るチップは真正に違いない;
全ての認証チップによって生成されたRのドメインは大きく、非決定論的である筈である。全ての認証チップによって生成されたRのドメインが小さいならば、複製品製造者は鍵を解読しなくてもよい。その代わりに、複製品製造者は、システムによって送信されたコードに対する純正チップからのレスポンスの全てが記録されたROMを自分のチップに組み込むことができる。Random関数は厳密に認証チップ内に収容しなくてもよい。なぜならば、システムは、同じ乱数シーケンスを生成する可能性を秘めているからである。しかし、それは、システムの設計を簡単化し、乱数生成器の安全性が認証チップを使用する全ての実装形態に対して同一であり、システム実装においてエラーが起こる可能性を減少させる。
【0982】
プロトコル1には複数の利点がある:
Kは認証プロセス中に明らかにされることがない;
Xが与えられたとき、複製チップは、Kを用いないで、又は実際の認証チップへアクセスしないで、F[X]を生成できない;
システムは、特に、インクジェットプリンタのような低価格システムにおいて容易に設計できる。なぜならば、暗号化又は復号化がシステム自体によって要求されないからである;
広範囲の鍵付き一方向関数が存在し、対称暗号化、乱数シーケンス、及びメッセージ認証コードが含まれる;
一方向関数は必要なゲート数が少なく、非対称アルゴリズムよりも簡単に検証することができる;
鍵付き一方向関数のための安全な鍵サイズは、非対称(公開鍵)アルゴリズムの場合と同程度に大きくする必要がない;
F[X]が対称暗号化関数であるならば、最小限の128ビットは、適切な安全性を提供することができる。
【0983】
しかし、このプロトコルには問題がある:
これは選択テキスト攻撃の対象になりやすい。攻撃者は、チップを自分専用のシステムにプラグインし、選択されたRを生成、出力を観測することができる。鍵を見つけるため、攻撃者は、特定のF[M]を生成するRを探索することも可能である。なぜならば、多数の認証チップを並列にテストできるからである;
選択された一方向関数に応じて、鍵生成は複雑化し得る。よい鍵を選択する方法は、使用されるアルゴリズムに依存する。ある種の鍵は一定のアルゴリズムに対して弱い;
鍵付き一方向関数の選択自体は重要ではない。特許保護に由来するライセンスを必要とする場合もある。
【0984】
媒介物は、平文メッセージMをチップAへ渡す前に平文メッセージMに作用することが可能であり、これは、チップAがMを見るまで媒介物がMを見ない場合には好ましい。媒介物がMを全く見ない場合にはより好ましい。
【0985】
Fが対称暗号化である場合、適切なセキュリティのために必要な鍵サイズのため、チップは米国から国外へ持ち出せない。なぜならば、チップは強い暗号化装置として使用できるからである。
【0986】
プロトコルが非対称暗号アルゴリズムとしてFを用いて実現されるならば、対称の場合を上回る利点は無く、鍵をより長くする必要があり、シリコン内の暗号化アルゴリズムがより高価になる。プロトコル1は、鍵の安全性を維持するため、2個の認証チップを用いて実現しなければならない。すなわち、各システムは認証チップが必要であり、各消耗品は認証チップが必要である。
【0987】
プロトコル2
あるケースでは、システムは大規模の処理能力を備えている。或いは、例えば、大量に製造されたシステムの場合、チップTをシステムに統合することは望ましい。非対称暗号アルゴリズムの使用によって、システムのチップT部を不確かにすることが許容される。したがって、プロトコル2は非対称暗号方式を使用する。このプロトコルの場合、各チップは以下の値を格納する:
K E[X]及びD[X]用の鍵である。チップA内で秘密にされるべきである。チップT内で秘密にする必要がない;
R 現在の乱数。秘密でなくてもよいが、チップインスタンス毎に異なる初期値でシードされなければならない。Random関数の呼び出し毎に変化する。
【0988】
以下の関数が定義される:
E[X] チップTだけ。E[X]を返す。但し、Eは非対称暗号化関数Eである;
D[X] チップAだけ。D[X]を返す。但し、Dは非対称暗号化関数Dである;
Random[] チップTだけ。R|E[R]を返す。RはシードSに基づく乱数である。乱数シーケンス内でRを次へ進める。
【0989】
公開鍵KはチップT内にあり、一方、秘密鍵KはチップAにある。KがチップTにあることは、チップTをソフトウェア又はハードウェアで実現できるという利点がある(但し、Rのシードはチップ又はシステム毎に異なる)。したがっって、プロトコル2は、シングルチッププロトコルとしてもダブルチッププロトコルとしても実現できる。認証のためのプロトコルは以下の通りである:
システムはチップTのRandom関数を呼び出す;
チップTはR|EKT[R]をシステムへ返す;
システムはチップAの関数Dを呼び出し、EKT[R]を渡す;
チップAは、DKA[EKT[R]]によって獲得されたRを返す;
システムは、チップAからのRとチップTによって生成された元のRを比較する。それらが一致しているならば、チップAは有効であるとみなされる。一致しないならば、チップAは無効であるとみなされる。
【0990】
データフローは図170に示されている。プロトコル2には次の利点がある:
(秘密鍵)は認証プロセス中に明らかにされることがない;
KT[X]が与えられたとき、複製チップは、Kを用いないで、又は実際のチップAへアクセスすることなく、Xを生成できない;
≠Kであるため、チップTは、完全にソフトウェアで、不確かなハードウェアで、又はシステムの一部として実現できる。チップA(消耗品内)だけが安全な認証チップであることを要求される;
チップTが物理的なチップであるならば、システムは容易に設計できる;
多数の十分に文書化され暗号解読された非対称アルゴリズムの中から、特許が開放されライセンスフリーであるソリューションを含む、インプリメンテーション用のアルゴリズムを選択することができる。
【0991】
しかし、プロトコル2には多数の固有の問題がある:
十分な安全性のため、各鍵は2048ビットにする必要がある(これに対して、プロトコル1の対称暗号方式の場合、最小値は128ビットである)。暗号化及び復号化アルゴリズムによって使用される関連した中間メモリは、相応に大きくなる;
鍵生成は重要である。乱数は優れた鍵ではない;
チップTがコアとして実装された場合、チップTを所与のシステムASICに連結することが難しい;
チップTがソフトウェアとして実装された場合、システムの実装がプログラミングエラー及び厳密ではないテストに対して無防備であるだけではなく、コンパイラ及び数学的プリミティブの完全性をシステムのインプリメンテーション毎に厳密にチェックしなければならない。これは、単純に十分にテストされたチップを使用する場合よりも複雑であり、且つコスト高である;
多数の対称アルゴリズムが特に差分暗号解読(選択テキスト攻撃に基づいている)に対抗するため強化されているにもかかわらず、秘密鍵Kは選択テキスト攻撃の対象になりやすい;
チップA及びチップTが同じ認証チップのインスタンスである場合、各チップは、非対称暗号化及び復号化の両方の機能を備える必要がある。その結果として、各チップは、プロトコル1のために必要なチップよりも大型化し、複雑化し、高価になる;
認証チップが、コストを節約し、設計/テストの複雑さを低減するため2個のチップに分割された場合、2個のチップを依然として製造する必要があり、スケールメリットが減少する。これは、システムの消耗品に対する相対的な個数によって相殺されるが、依然として考慮することが必要である;
プロトコル2の認証チップは、米国から国外へ持ち出すことができない。なぜならば、それらは、強力な暗号化装置であるとみなされるからである。
【0992】
たとえ、プロトコル2用の鍵を選択するプロセスが簡単であるとしても、プロトコル2は、(鍵サイズ及び機能的実装の両方の)シリコン実装のコストが高いため、現時点では実際的ではない。したがって、プロトコル1がプレゼンスオンリー認証のためのプロトコルとして選択される。
【0993】
本物の認証チップを使用する複製消耗品
プロトコル1及び2は、チップAが本物の認証チップであるかどうかをチェックするだけである。それらは、消耗品自体が有効であるかどうかを調べるためのチェックを行わない。認証に関する基本的な前提として、チップAが有効であるならば、消耗品は有効である。したがって、複製品製造者は本物の認証チップを複製消耗品に挿入することが可能である。以下の二つのケースを検討する:
状態データが認証チップに書き込まれないケースでは、チップは完全に再使用可能である。したがって、複製品製造者は、有効な消耗品を複製消耗品にリサイクルすることができる。これは、認証チップを消耗品の物理的パッケージングに融合することによって困難になるが、詰め替え作業者を止められないであろう;
状態データが認証チップに書き込まれるケースでは、チップは、新品か、部分的に使用されているか、又は完全に使い切られている。しかし、これは、複製品製造者によるピギーバック攻撃の使用を止められず、複製品製造者はピギーバックとして本物の認証チップを具備したチップを構築する。攻撃者のチップ(チップE)は、媒介物である。電源投入時、チップEは、本物の認証チップ53から固有のメモリへ全ての記憶状態値を読み込む。チップEは、次に、システムからの要求を検査し、要求に応じて様々な動作をとる。認証要求は、本物の認証チップ53へそのまま渡すことができ、一方、リード/ライト要求は、本物の認証チップの動作と似ているメモリによってシミュレーションされ得る。このようにして、認証チップ53は、常に、電源投入時に新品であるかのように見える。チップEがこれを行うことができるのは、データアクセスは認証されないからである。
【0994】
システムを欺いて、システムのデータアクセスが成功したと思わせるために、チップEは、依然として本物の認証チップを必要とし、第2のケースでは、複製チップが本物のチップの他に必要になる。その結果として、プロトコル1及び2が有効になるのは、複製品製造者が本物の認証チップ53を消耗品に埋め込むことの費用対効果がよくない場合である。消耗品をリサイクルできない、又は簡単に詰め替えできないならば、プロトコル1又はプロトコル2の使用によって十分な保護が得られる。複製動作を成功させるためには、各複製消耗品は、有効な認証チップを具備しなければならない。そのチップは、まとめて盗み取るか、又は古い消耗品から取り出さなければならない。これらの再生チップの量は(それらを再生する労力と共に)ビジネスの基盤とするためには不十分であり、セキュアデータ転送(プロトコル3及び4を参照)の保護を追加する実益はない。
【0995】
鍵の寿命
上記の二つのプロトコルの一般的な問題は、一旦、認証鍵が選択されると、それを変更することが容易ではない点である。ある種の状況では、鍵が危険にさらされることは問題ではないが、他の場合には、鍵を危うくすることは致命的である。例えば、車/車キーシステム/消耗品のシナリオでは、消費者は、1組の車/車キーだけを保有する。各車は異なる認証鍵を有する。その結果として、車キーの損失は個々の車を危うくするだけである。所有者がこのことを問題であると考えるならば、所有者は、車のエレクトロニクス内のシステムチップを交換することによって、新しい「車キー」を入手しなければならない。所有者の鍵は、新しい「車のシステム認証チップ」と連動するように再プログラミング/交換する必要がある。これに対して、大量消耗品市場(例えば、プリンタのインクカートリッジ)の鍵が危うくなることは、複製インクカートリッジ製造者が自分専用の認証チップを製造可能にさせる。既存のシステムに対する唯一のソリューションはシステム認証チップを更新することであり、これは、コストが掛かり、物流的に困難な課題である。いずれにしても、消費者のシステムは既に正常に機能し、既存の機器を妨害しようとする動機がない。
【0996】
消耗品ライフタイム認証
この消耗品認証のレベルでは、認証チップの存在を確認すること、並びに、認証チップが消耗品と同じ期間だけ確実に存続することに関心がある。認証チップが存在することを確認することに加えて、認証チップのメモリ空間の書き込み及び読み出しも同様に認証されなければならない。このセクションでは、認証チップのデータ記憶完全性は安全であると仮定し、メモリの一部はリードオンリーであり、他の一部はリード/ライトであり、その他はデクリメントオンリーである(より詳しくは、データ記憶完全性というタイトルの章を参照のこと)。二つのプロトコルが存在する。プロトコル3は2個の認証チップを必要とし、プロトコル4は1個又は2個の認証チップを使用して実現することができる。
【0997】
プロトコル3
このプロトコルはダブルチッププロトコルである(2個の認証チップが必要になる)。このプロトコルの場合、各認証チップは以下の値を格納する:
K1[X]を計算するための鍵。秘密にしなければならない;
K2[X]を計算するための鍵。秘密にしなければならない;
R 現在の乱数。秘密でなくてもよいが、チップインスタンス毎に異なる初期値でシードされなければならない。Test関数によって定義されるように認証が成功する毎に変化する;
M 認証チップ53のメモリベクトル。この空間の一部はチップ毎に異なるべきである(乱数でなくてもよい)。
【0998】
各認証チップは以下の論理関数を格納する:
F[X] 内部関数専用。一方向関数Fを鍵K又は鍵Kの何れかに基づいてXに適用した結果であるF[X]を返す;
Random[] R|FK1[R]を返す;
Test[X,Y] FK2[R|X]=Yであるならば、1を返しRを進める。そうでなければ、0を返す。0を返すために要する時間は、全ての不良な入力に対して同じでなければならない;
Read[X.Y] FK1[X]=Yであるならば、M|FK2[X|M]を返す。そうでなければ、0を返す。0を返すために要する時間は、全ての不良な入力に対して同じでなければならない;
Write[X] Mのうち正当に書き換え可能な部分にXを書き込む。
【0999】
チップAを認証し、チップAのメモリMを読み出すためには、
システムはチップTのRandom関数を呼び出し、
チップTはR|F[R]を生成し、これをシステムへ返し、
システムはチップAのRead関数を呼び出し、R、F[R]を渡し、
チップAはM及びF[R|M]を返し、
システムはチップTのTest関数を呼び出し、M及びF[R|M]を渡し、
システムはチップTからのレスポンスをチェックする。レスポンスが1であるならば、チップAは真正であるとみなされる。0であるならば、チップAは無効であるとみなされる。
【1000】
チップAのメモリMへのMnewの書き込みを認証するためには、
システムはチップAのWrite関数を呼び出し、Mnewを渡し、
読み出しのための認証手続きが実行され、
チップAが真正であり、Mnew=Mであるならば、書き込みは成功である。そうでなければ、書き込みは失敗した。
【1001】
読み出し認証のデータフローは図171に示されている。プロトコル3に関して最初に注意しなければならないことは、F[X]を直接呼び出せないことである。その代わりに、F[X]は、Random、Test及びReadによって間接的に呼び出される:
Random[]はFK1[X]を呼び出す。Xは呼び出し元によって選択されない。XはRandom関数によって選択される。攻撃者は、希望のX、FK1[X]のペアを獲得するためには、Random、Read、及びTestの複数回の呼び出しを使用してブルートフォース検索を実行しなければならない;
Test[X,Y]はFK2[X]を呼び出す。結果をそのまま返すのではなく、結果をYと比較し、1又は0を返す。所定のXに対してFK2[R|X]の様々な値を試して、Testを複数回呼び出すことによってKを推論しようとする試みは、Rが攻撃者によって選択できないブルートフォース検索まで軽減される;
Read[X,Y]はFK1[X]を呼び出す。X及びFK1[X]は、呼び出し元によって供給されなければならないので、呼び出し元は、前もってX、FK1[X]ペアが分かっていなければならない;
この呼び出しは、Y≠FK1[X]であるならば0を返すので、呼び出し元は、Kに対するブルートフォース攻撃のためRead関数を使用することができる;
Read[X,Y]はFK2[X|M]を呼び出す。Xは呼び出し元によって供給されるが、XはRandom関数によって既に与えられた値だけをとり得る(なぜならば、X及びYはKによって検証されている)。このため、選択テキスト攻撃は、最初に、Randomからペアを収集しなければならない(事実上、ブルートフォース攻撃である)。その上、Mの一部だけが選択テキスト攻撃で使用される。なぜならば、Mの一部は一定であり(リードオンリー)、Mのデクリメントオンリー部分は、消耗品毎に1回ずつ使用できる。次の消耗品で、Mのリードオンリー部分は異なる。
【1002】
[X]が間接的に呼び出されることは、認証チップへの選択テキスト攻撃を阻止する。攻撃者は、望ましいRが現れるまで、Random、Read、及びTestを複数回呼び出すことによって選択されたR、FK1[R]ペアしか獲得できないので、Kへのブルートフォース攻撃は、Kへの制限選択テキスト攻撃を実行するために必要である。Kへの選択テキスト攻撃における試みは制限されるであろう。なぜならば、テキストを完全に選択できないからであり、Mの一部はリードオンリーであり、依然として各認証チップに対して異なる。2番目に注意すべきことは、2個の鍵が使用されることである。小さいサイズのMが与えられた場合、2種類の鍵K及びKは、F[R]とF[R|M]の間に相関が無いことを保証するため使用される。したがって、Kは、差分攻撃からKを保護するために使用される。1個のより長い鍵を使用することは不十分である。なぜならば、Mは256ビットだけであり、Mの一部分しか消耗品の耐用期間中に変化しないからである。そうでなければ、攻撃者は、ある種の未発見の技術によって、限定されたMの変化が、特定のRのビット組み合わせに与える影響を判定し、FK1[X]に基づいてFK2[X|M]を計算できる可能性がある。付加的な事前計算として、チップAのRandom関数及びTest関数は無効にされるべきであり、その結果、R、F[R]のペアを生成するため、攻撃者は、チップTのインスタンスを使用する必要があり、その各々はチップAよりも高価である(なぜならば、システムは各チップTに対して獲得されなければならないからである)。同様に、Random、Read及びTestの呼び出しの間の遅れは最小限にされるべきであり、その結果として、攻撃者はこれらの関数を高速で呼び出すことができない。このようにして、各チップは、ある時間に、特定の個数のX、F[X]のペアだけを明らかにする。プロトコル3の唯一の特有のタイミング必要条件は、返り値0(不良な入力を示す)が、誤りが入力のどこに存在するかとは無関係に、同じ時間で生成されるべきである、ということである。したがって、攻撃者は、入力値に関する誤りが何であるかに関して学習できない。これは、RD関数とTST関数の両方に対しても成り立つ。
【1003】
プロトコル3に関して注意すべき別の事項は、チップAからのデータ読みだしにもチップAの認証が必要になる、ということである。システムは、FK2[R|M]が正しく返された場合に、メモリ(M)の内容はチップAが主張している内容そのものであることを確認できる。複製チップは、Mがある値であると偽る(例えば、消耗品が一杯詰まっているように見せかける)かもしれないが、複製チップは、システムによって渡された任意のRに対して、FK2[R|M]を返すことができない。このように、事実上の署名、FK2[R|M]は、認証チップAがMを送信したことだけではなく、MがチップAとシステムの間で改ざんされていないことをシステムに保証する。最後に、上述のWrite関数は書き込みを認証しない。書き込みを認証するため、システムは、各書き込みの後に読み出しを実行しなければならない。プロトコル3には幾つかの基本的な利点がある:
及びKは認証プロセス中に明らかにされることがない;
Xが与えられたとき、複製チップは、Kを用いないで、又は本物のチップAへアクセスすることなく、FK2[X|M]を生成できない;
システム自体によって暗号化又は復号化が必要ではないため、特に、インクジェットプリンタのような低コストシステムにおいて、システムは簡単に設計できる;
対称暗号方式、乱数シーケンス、及びメッセージ認証コードを含む広範囲の鍵ベースの一方向関数が存在する;
鍵付き一方向関数は必要なゲート数が少なく、非対称アルゴリズムよりも簡単に検証することができる。);
鍵付き一方向関数のための安全な鍵サイズは、非対称(公開鍵)アルゴリズムの場合と同程度に大きくする必要がない。F[X]が対称暗号化関数であるならば、最小限の128ビットで適切な安全性を提供することができる。
【1004】
したがって、プロトコル3の場合、チップAを認証する唯一の方法は、チップAのメモリの内容を読み出すことである。このプロトコルの安全性は、基本となるF[X]スキームと、すべてのシステムの組に亘るRのドメインと、に依存する。F[X]は鍵付き一方向関数であればよいが、それを非対称暗号として実現することに利点はない。鍵はより長くすることが必要であり、暗号化アルゴリズムはシリコン内でより高価になる。このため、非対称アルゴリズムと共に使用するための第2のプロトコル、即ち、プロトコル4が生じる。プロトコル3は、鍵を秘密のまま保つために2個の認証チップで実現する必要がある。即ち、各システムは認証チップを必要とし、各消耗品は認証チップを必要とする。
【1005】
プロトコル4
あるケースでは、システムは大規模の処理能力を備えている。或いは、例えば、大量に製造されたシステムの場合、チップTをシステムに統合することは望ましい。非対称暗号アルゴリズムの使用によって、システムのチップT部を不確かにすることが許容される。したがって、プロトコル4は非対称暗号方式を使用する。このプロトコルの場合、各チップは以下の値を格納する:
K E[X]及びD[X]用の鍵である。チップA内で秘密にされるべきである。チップT内で秘密にする必要がない;
R 現在の乱数。秘密でなくてもよいが、チップインスタンス毎に異なる初期値でシードされなければならない。Test関数によって定義されるように認証が成功する毎に変化する;
M 認証チップ53のメモリベクトル。この空間の一部はチップ毎に異なるべきである(乱数でなくてもよい)。
【1006】
Read関数で何かを検証する意味はない。なぜならば、誰でも公開鍵を使用して暗号化できるからである。したがって、以下の関数が定義される:
E[X] 内部関数だけ。E[X]を返す。但し、Eは非対称暗号化関数Eである;
D[X] 内部関数だけ。D[X]を返す。但し、Dは非対称暗号化関数Dである;
Random[] チップTだけ。E[R]を返す;
Test[X,Y] D[R|X]=Yであるならば、1を返しRを進める。そうでなければ、0を返す。0を返すために要する時間は、全ての不良な入力に対して同じでなければならない;
Read[X] M|E[R|M]を返す。但し、R=D[X]である(入力をテストしない);
Write[X] Mのうち正当に書き換え可能な部分にXを書き込む。
【1007】
公開鍵KはチップT内にあり、一方、秘密鍵KはチップAにある。KがチップTにあることは、チップTをソフトウェア又はハードウェアで実現できるという利点がある(但し、Rはシステム毎に異なる乱数でシードされる)。チップAを認証し、チップAのメモリMを読み出すためには、
システムはチップTのRandom関数を呼び出し、
チップTはEKT[R]を生成し、これをシステムへ返し、
システムはチップAのRead関数を呼び出し、EKT[R]を渡し、
チップAはM|EKA[R|M]を返し、最初にDKA[EKT[R]]によってRを獲得し、
システムはチップTのTest関数を呼び出し、M及びEKA[R|M]を渡し、
チップTはDKT[EKA[R|M]]を計算し、それをR|Mと比較し、
システムはチップTからのレスポンスをチェックする。レスポンスが1であるならば、チップAは真正であるとみなされる。0であるならば、チップAは無効であるとみなされる。
【1008】
チップAのメモリMへのMnewの書き込みを認証するためには、
システムはチップAのWrite関数を呼び出し、Mnewを渡し、
読み出しのための認証手続きが実行され、
チップAが真正であり、Mnew=Mであるならば、書き込みは成功である。そうでなければ、書き込みは失敗した。
【1009】
読み出し認証のデータフローは図172に示されている。有効なチップAだけにRの値がわかる。なぜならば、Rは認証関数に渡されないからである(それは暗号化された値として渡される)。RはE[R]を復号化することによって獲得しなければならず、これは、秘密鍵Kを使用することによってのみ行える。Rが獲得されると、RはMに付加され、結果が再符号化される。チップTは、復号化された形式のEKA[R|M]=R|Mを検証することができ、これにより、チップAは有効である。K≠Kであるため、EKT[R]≠EKA[R]である。プロトコル4には以下の利点がある:
(秘密鍵)は認証プロセス中に明らかにされることがない;
KT[X]が与えられたとき、複製チップは、Kを用いないで、又は実際のチップAへアクセスすることなく、Xを生成できない;
≠Kであるため、チップTは、完全にソフトウェアで、不確かなハードウェアで、又はシステムの一部として実現できる。チップAだけが安全な認証チップであることを要求される;
チップT及びチップAは異なる鍵を格納するので、チップTの激しいテストによってもKに関して何も明らかにならない;
チップTが物理的なチップであるならば、システムは容易に設計できる;
多数の十分に文書化され暗号解読された非対称アルゴリズムの中から、特許が開放されライセンスフリーであるソリューションを含む、インプリメンテーション用のアルゴリズムを選択することができる;
チップAの要求がチップTへ向けられるようにシステムを再配線できるとしても、K≠Kであるため、チップTはチップAに対して回答できない。攻撃は、認証プロトコルを回避するため、システムROM自体へ向けられるべきであろう。
【1010】
しかし、プロトコル4には多数の問題がある:
全ての認証チップは、非対称暗号化及び復号化の両方の機能を収容する必要がある。その結果として、各チップは、プロトコル3のために必要なチップよりも大型化し、複雑化し、高価格化する;
十分な安全性のため、各鍵は2048ビットにする必要がある(これに対して、プロトコル1の対称暗号方式の場合、最小値は128ビットである)。暗号化及び復号化アルゴリズムによって使用される関連した中間メモリは、相応に大きくなる;
鍵生成は重要である。乱数は優れた鍵ではない;
チップTがコアとして実装された場合、チップTを所与のシステムASICに連結することが難しい;
チップTがソフトウェアとして実装された場合、システムの実装がプログラミングエラー及び厳密ではないテストに対して無防備であるだけではなく、コンパイラ及び数学的プリミティブの完全性をシステムのインプリメンテーション毎に厳密にチェックしなければならない。これは、単純に十分にテストされたチップを使用する場合よりも複雑であり、且つコスト高である;
多数の対称アルゴリズムが特に差分暗号解読(選択テキスト攻撃に基づいている)に対抗するため強化されているにもかかわらず、秘密鍵Kは選択テキスト攻撃の対象になりやすい。
【1011】
プロトコル4の認証チップは、米国から国外へ持ち出すことができない。なぜならば、それらは、強力な暗号化装置であるとみなされるからである。
【1012】
プロトコル3の場合と同様に、プロトコル4の唯一の特有のタイミング必要条件は、返り値0(不良な入力を示す)が、誤りが入力のどこに存在するかとは無関係に、同じ時間で生成されるべきである、ということである。したがって、攻撃者は、入力値に関する誤りが何であるかに関して学習できない。これは、RD関数とTST関数の両方に対しても成り立つ。
【1013】
TST呼び出しの変化
2個の認証チップが使用される場合、理論的には、複製品製造者はシステム認証チップを、TSTの各呼び出しに1(成功)を返すもので置換することが可能である。システムは、多数回、間違ったハッシュ値を用いてN回に亘ってTSTを呼び出すことによってこれをテストし、その結果が0であることを予測することができる。TSTが最後に呼び出されたとき、チップAからの真の戻り値が渡され、その戻り値は信頼できる。TSTを呼び出す回数が問題になる。呼び出しの回数はランダムでなければならない。これにより、複製チップ製造者は前もって回数を知り得ない。システムがクロックを持っているならば、クロックからのビットは、間違ったTST呼び出しを何回行わなければならないかを決めるために使用される。それ以外の場合、チップAからの戻り値を使用できる。後者のケースでは、攻撃者は、依然として、複製チップTがチップAからの戻り値を監視できるようにするため、システムを書き換えることができ、これにより、正しいハッシュ値を知ることができる。最悪のケースは、勿論、システムが、認証された消耗品を必要としない複製システムによって完全に置き換えられた場合であり、これは、システムを書き換え、変更する限界のケースである。このため、TST呼び出しの変化はオプションであり、システム、消耗品、及び変更が行われる可能性に依存する。このようなロジックをシステムに追加することは、システムがより複雑になるので、(例えば、小型デスクトッププリンタの場合)それだけの価値があるとは考えられない。これに対して、このようなロジックをカメラに追加することは、それだけの価値があると考えられる。
【1014】
本物の認証チップを使用する複製消耗品
消耗品部分を使用する前に消耗品残量をデクリメントすることは重要である。消耗品が先に使用されると、複製消耗品は、特別の既知アドレスへの書き込みの間に、接触の不備のふりをして、新しい消耗品のように見えるからである。この攻撃は、依然として、各消耗品に本物の認証チップが必要であることが重要である。
【1015】
鍵の寿命
上記の二つのプロトコルの一般的な問題は、一旦、認証鍵が選択されると、それを変更することが容易ではない点である。ある種の状況では、鍵が危険にさらされることは問題ではないが、他の場合には、鍵を危うくすることは致命的である。
【1016】
プロトコルの選択
プロトコル2及び4の鍵の選択が簡単であるとしても、両方のプロトコルは、(鍵サイズと機能的な実装の両面で)シリコン実装のコストが高いため、現時点では実際的ではない。したがって、選択されるプロトコルは、プロトコル1及び3である。しかし、プロトコル1及び3は、多数の同じコンポーメントを含み、
どちらも書き込み及び読み出しアクセスが必要であり、
どちらも鍵付き一方向関数の実装が必要であり、
どちらも乱数生成機能が必要である。
【1017】
プロトコル3は付加的な鍵(K)が必要であると共に、ある種の最小限の状態機械の変化:
Random中にFK1[X]を呼び出せるような状態機械の変更と、
K2[X]を呼び出すTest関数と、
K1[X]及びFK2[X]を呼び出すために状態機械のRead関数への変更と、
が必要である。
【1018】
プロトコル3はプロトコル1に対して最小限の変更だけが必要である。プロトコル3の方が安全性が高く、プレゼンスオンリー認証(プロトコル1)が要求されるような全ての状況で使用可能である。したがって、それは特に優れたプロトコルである。プロトコル1及び3の両方が鍵付き一方向関数を使用する場合に、一方向関数の選択をより詳細に説明する。以下の表は、適用可能な選択肢の属性の概要を示している。属性は、その属性が利点であることが分かるように表されている。
【1019】
【表103】
Figure 2004536736
この表を検討することによって、事実上、3種類のHMAC構造とランダムシーケンスとの間で選択されることがわかる。鍵サイズ及び鍵生成の問題は、ランダムシーケンスを除外する。多数の攻撃が既にMD5に対して実行されていることを考えると、ハッシュ結果は128ビットに過ぎないので、HMAC−MD5も除外される。したがって、HMAC−SHA1とHMAC−RIPEMD160の間で選択を行うことになる。RIPEMD−160は比較的新しく、SHA1のようには大規模に暗号解読されていない。しかし、SHA−1はNSAによって設計されているので、これは、否定的な属性として見られることもある。
【1020】
両者の間に大差がないのであれば、SHA−1がHMAC構造用に使用されるであろう。
【1021】
乱数生成器の選択
上述の各プロトコル(1−4)は、乱数生成器を必要とする。生成器は、全てのシステムの耐用期間に亘って生成される乱数が予測不能であるという意味で「優良」でなければならない。乱数が各システムに対して同一であるならば、攻撃者は、簡単に、本物の認証チップからの正しいレスポンスを記録し、そのレスポンスを複製チップ用のROMルックアップに収容することが可能である。このような攻撃の場合、K又はKを獲得しなくてもよい。したがって、各システムからの乱数は、予測不能であるために、即ち、非決定論的であるために十分に異なることが必要である。このようにして、R(ランダムシード)の初期値は、特定のビットが1であるか、又は0であるかに関する情報が存在しない物理的にランダムな現象から収集された物理的に生成された乱数を用いてプログラミングされるべきである。Rのシードは、決して、コンピュータ上で実行される乱数生成器で生成してはならない。そうでなければ、生成器アルゴリズム及びシードが解読され、攻撃者は、全てのシステムの全てのRの組を生成し、知ることができるようになる。
【1022】
各認証チップのRシードが異なることは、最初のRはランダムであり、且つあらゆるチップで予測不能であるということである。したがって、各チップで後続のRをどのようにして生成するかが問題になってくる。
【1023】
基本的なケースでは、Rは全く変更されない。その結果としてR及びFK1[R]は、Random[]の各呼び出しに対して同じである。それらが同一である場合、FK1[R]は、計算されるのではなく、定数にすることができる。攻撃者は、有効なルックアップテーブルを生成するために、単一の有効認証チップを使用し、そのシステムのために特にプログラミングされた複製チップ内でそのルックアップテーブルを使用することが可能である。定数Rは安全ではない。
【1024】
Rを変化させる最も簡単な概念的な方法は、Rを1ずつインクリメントすることである。Rは乱数から始められるので、種々のシステムにおけるその値はランダムである可能性が高い。しかし、初期Rを与えると、後続の全てのR値は直接的に決定できる(10000回繰り返すまでもなく、RはRからR+10000までの値をとる)。Rをインクリメントすることは、定数Rに対する上記の攻撃を受ける心配はない。Rは常に異なるので、代用される複製チップと同数の認証チップを無駄にすること無しに、特定のシステムに対するルックアップテーブルを構築する方法がない。
【1025】
アダーを使用するインクリメントの他に、Rを変化させる別の方法は、それをLFSR(線形フィードバックシフトレジスタ)として実現することである。これは、アダーよりもシリコンが少ないという利点があり、また、LFSRの値ドメインは順次アクセスによって決定されるので、攻撃者が特定のシステムに対するRのレンジを直接的に決定できないという利点もある。所定の初期Rが生成する値を決定するためには、攻撃者は、可能性を反復し、それらを列挙しなければならない。Rを変化させることの利点は、LFSRソリューションの場合にも明白である。Rは常に相違するので、(特定のシステムに専用の)複製チップが置換する認証チップと同数の認証チップを使い果たすこと無しに、特定のシステムに対するルックアップテーブルを構築する方法がない。したがって、Rを変更するために、これ以上複雑な関数を導入する利点はない。関数とは無関係に、攻撃者は、常に、シミュレーションによって値の組を、耐用期間を通じて繰り返すことが可能である。本来の安全性は、Rの初期ランダム性にある。Rを変更するためLFSRを使用することは、(アダーよりもシリコン使用量が少ない点を別にして)連続した数値レンジに限定されないという利点があるだけである(即ち、R、Rを計算によって直接知ることができないので、攻撃者はLFSRをN回繰り返さなければならない)。
【1026】
したがって、認証チップ内の乱数生成器は、160ビットのLFSRである。最大周期LFSR用の160ビットのタップ選択(即ち、LFSRは、0が有効な状態ではないので、全部で2160−1状態を循環する)によって、図173にしめされるようなビット159、4、2及び1が得られる。LFSRは疎構造であり、多数のビットがフィードバックに使用されるわけではない(160ビットの中から4ビットだけが使用される)。これは、暗号アプリケーションの場合に問題であるが、非順次数生成のアプリケーションの場合には問題ではない。Rの160ビットシード値は0以外の任意の乱数をとり得る。なぜならば、0が詰められたLFSRは0の際限のないストリームを生成するからである。上述のLFSRは最大周期LFSRであるため、全ての160ビットをそのままRとして使用することができる。出力ビットbから順番に数を構築する必要がない。TSTの呼び出しが成功する毎に、乱数(R)はビット1、2、4及び159をXOR論理演算し、その結果を上位ビットへシフトすることによって進められる。新しいR及び対応したFK1[R]は、次のRandomへの呼び出しの際に取り出すことができる。
【1027】
論理的攻撃への対抗
プロトコル3は認証チップによって使用される認証スキームである。このため、論理的手段による無効化に対し耐性であるべきである。プロトコル3に対する様々なタイプの攻撃の効果を説明したが、このセクションでは、プロトコル3の観点から攻撃の各タイプを詳述する。
【1028】
ブルートフォース攻撃
ブルートフォース攻撃はプロトコル3を破ることが保証されている。しかし、鍵の長さは、攻撃者がブルートフォース攻撃を実行するために要する時間が非常に長いので労力に値しない、ということを意味する。攻撃者は、複製認証チップを構築するためKを破るだけでよい。Kは、その他の形態の攻撃に対してKを強化するために設けられているだけである。Kへのブルートフォース攻撃は、したがって、160ビット鍵を破らなければならない。Kに対する攻撃は、最大で2160回の試行が必要であり、2159回の試行後に鍵を検出する確率は50%である。1兆個のプロセッサのアレイを想定すると、各々が毎秒100万回のテストを実行すると、2159回(7.3×1047)のテストには2.3×1023年を要し、これは宇宙の寿命よりも長い。世界には1億台のパーソナルコンピュータしか存在しない。それらが攻撃の際に(例えば、インターネットを介して)接続されたとしても、その数は、上述の1兆個のプロセッサの攻撃よりも10000倍少ない。更に、1兆個のプロセッサの製造がナノコンピュータの時代に可能になったとしても、鍵を獲得するために要する時間は宇宙の寿命よりも長い。
【1029】
推測攻撃
攻撃者が単に「鍵を推測」することは理論的に可能である。実際上、十分な時間があり、あらゆる数を試すならば、攻撃者は鍵を獲得するであろう。これは、上述のブルートフォース攻撃と同じであり、50%の成功率を達成する前に、2159回の試行をしなければならない。ある人が最初の試行で単に鍵を推測する機会みは2160である。これに対して、ある人が米国宝くじで一等賞を獲得し、同じ日に稲光によって死亡する確率は、226分の1に過ぎない。ある人が最初の試行で鍵を推測する確率は、2160分の1であり、これは、地球上の全ての原子の中から二人が全く同一の原子を選択することに匹敵することであり、即ち、非常に可能性が低い。
【1030】
量子コンピュータ攻撃
を破るため、適切なアルゴリズムに組み込まれた160キュビットを含む量子コンピュータを構築することが必要である。160ビット鍵に対する攻撃は実施不可能である。量子コンピュータの可能性のぎりぎりの見込みは、50年以内に50キュビットを達成することである。50キュビット量子コンピュータを使用したとしても、160ビット鍵を解読するためには、2110回のテストが必要になる。1億台の50キュビット量子コンピュータのアレイを想定し、各量子コンピュータが1マイクロ秒に250回の鍵(現時点での最も乱暴な推定を超えている)を試すことができるとするならば、鍵を見つけるために平均で180億年を要する。
【1031】
暗号文だけの攻撃
攻撃者は、RND及びRDへの呼び出しを呼び出し監視することによってKに対する暗号文だけの攻撃に出ること、及びRD及びTSTへの呼び出しを監視することによってKに対する暗号文だけの攻撃に出ることが可能である。しかし、これらの全ての呼び出しが、平文と、平文のハッシュ形式を明らかにするならば、攻撃は、より強力な攻撃の形態、即ち、既知平文攻撃に変わるであろう。
【1032】
既知平文攻撃
ロジックアナライザを、システムと認証チップの間の配線に接続し、これにより、データのフローを監視することは容易である。このデータのフローは、既知平文と、平文のハッシュ形式とを生じ、KとKの両方に対する既知平文攻撃に出るため使用できる。Kに対する攻撃に出るため、RND及びTSTへの多数の呼び出しを行うことが必要である(TSTへの呼び出しが成功し、有効チップ上のRDへの呼び出しが必要になる)。これは簡単であり、攻撃者は、システム認証チップと消耗品認証チップの両方をもつことが必要である。K、X、HK1[X]の各ペアが明らかになると、K、Y、HK2[X]のペアも明らかになる。攻撃者は更なる解析のためこれらのペアを収集しなければならない。このデータを用いて意味のある攻撃に出るためには何個のペアを収集すべきであるかという問題が生じる。統計的解析のためのデータの収集を必要とする攻撃の一例は差分暗号解読である。しかし、SHA−1又はHMAC−SHA1に対する攻撃は知られていないので、現時点では、収集されたデータの使い道はない。
【1033】
選択平文攻撃
暗号解読者が先行の調査の結果に基づいて後続の選択平文を変更する能力を備えているならば、Kは、単純な選択平文攻撃よりも強い攻撃の形式である適応的選択平文攻撃の一部の形式に無防備である。選択平文攻撃はKに対しては起こり得ない。なぜならば、呼び出し元には、RND関数への入力として使用されるRを変更する方法がないからである(RNDはKによるハッシュ化の結果を与える唯一の関数である)。Rをクリアすることは、鍵をクリアする効果があるので有用ではなく、SSIコマンドは新しいR値を格納する前にCLRを呼び出す。
【1034】
適応的選択平文攻撃
このタイプの攻撃はKに対して起こり得ない。なぜならば、Kは選択平文攻撃を許さないからである。しかし、この攻撃の一部の形式はKに対して起こる可能性があり、特に、システムと消耗品の両方は、典型的に、攻撃者が入手可能であるからである(システムは、特定の車のようなある種の場合には攻撃者からアクセスできない)。HMAC構造は、選択平文攻撃のあらゆる形式に対して安全性を提供する。その理由は主として、HMAC構造が2個の秘密入力変数(元のハッシュの結果と秘密鍵)を有するからである。このようにして、入力変数が秘密であるときに、ハッシュ関数自体の衝突を検出することは、平文ハッシュ関数の衝突を見つけることよりも難しい。その理由は、前者は、SHA−1から入力/出力のペアを生成するため、SHA−1への直接アクセス(プロトコル3では許可されない)を必要とするからである。攻撃者によって収集できる唯一の値は、HMAC[R]及びHMAC[R|M]である。これらは、SHA−1ハッシュ関数自体への攻撃ではなく、収集されたデータ間の統計的差分を調べる差分暗号解読攻撃まで攻撃を低減させる。SHA−1又はHMACに対して知られている差分暗号解読攻撃がないとすれば、プロトコル3は適応的選択平文攻撃に対抗する。
【1035】
意図的なエラー攻撃
攻撃者は、TST関数及びRD関数に対しては意図的なエラー攻撃しか出すことができない。なぜならば、これらは、鍵に対する入力を検証する唯一の関数であるからである。TSTとRDの両方の関数の場合、0値は、入力にエラーが見つかったときに生成され、それ以上の情報は与えられない。その上、0結果を生成するために要する時間は入力に依存せず、攻撃者はどのビットにエラーが存在するかに関する情報を得られない。したがって、意図的なエラー攻撃は効果がない。
【1036】
連鎖攻撃
全ての形式の連鎖攻撃は、ハッシュされるべきメッセージが数ブロックに広がっているか、又は入力変数を何らかの方法でセットできることを前提としている。プロトコル3で使用されるHMAC−SHA1アルゴリズムは、同時に単一の512ビットのブロックしかハッシュできない。その結果として、連鎖攻撃はプロトコル3に対してはあり得ない。
【1037】
バースデー攻撃
HMACに対して知られている最強の攻撃は、ハッシュ関数の衝突の頻度に基づくバースデー攻撃である。しかし、これは、SHA−1のような必要最小限度で合理的なハッシュ関数には全く実際的でない。また、バースデー攻撃は、攻撃者が署名付きのメッセージを管理するときに限り実現可能である。プロトコル3は、デジタル署名の形式としてハッシングを使用する。システムは、有効人種チップからのレスポンスに組み込まれるべき数を送信する。認証チップはH[R|M]を用いて応答しなければならないが、入力値Rをコントロールできないので、バースデー攻撃は実現不能である。なぜならば、メッセージは、事実上、既に生成され、署名されているからである。その代わりに、攻撃者は、同じ値にハッシュした衝突メッセージを探索しなければならない(あなたと同じ誕生日の人を見つける場合と類似している)。したがって、複製チップは、Rのハッシュと選択されたMがH[R|M]と同じハッシュ値を生ずるような新しい値Rを見つけようとしなければならない。しかし、システム認証チップは正しいハッシュ値を明らかにしない(TST関数はハッシュ値が正しいかどうかに依存して1又は0を返すだけである)。したがって、(衝突を見つけるために)正しいハッシュ値を見つける唯一の方法は、本物の認証チップに問い合わせることである。しかし、正しい値を見つけることは、Mを更新することを意味し、Mのデクリメントオンリー部分、及びMのリードオンリー部分は変更できないので、複製消耗品は、衝突を見つけようとする前に、本物の消耗品を更新しなければならない。代案は、成功を見つけるためのTST関数へのブルートフォース攻撃探索である(各複製消耗品はシステム消耗品へアクセスできることが必要である)。ブルートフォース検索は、上述の通り、この例では認証毎に、宇宙の寿命よりも長い時間を要する。ハッシュ値を適時に収集することは本物の消耗品をデクリメントしなければならないことを意味するので、複製消耗品がこの種の攻撃を仕掛ける意味がない。
【1038】
完全ルックアップテーブルによる代用
各システムの乱数シードは160ビットである。認証チップの最悪ケースの状況では、状態データが変更されない。その結果、一定値がMとして戻される。しかし、複製チップは、160ビット値であるFK2[R|M]を返し続けなければならない。結果が160ビットの160ビットルックアップテーブルを想定すると、これは、7.3×1048バイト、即ち、6.6×1036テラバイトを必要とし、近い将来に実施可能である空間よりも間違いなく大きい。これは、勿論、ROMのための値を収集する方法さえを考慮していない。したがって、完全なルックアップテーブルは完全に実現不可能である。
【1039】
疎ルックアップテーブルによる代用
疎ルックアップテーブルは、認証チップへ送信されたメッセージが、実効的にランダムではなく、ある程度予測可能である場合に限り実施可能である。乱数Rは、自然界のランダム事象から収集された未知乱数でシードされる。複製品製造者は全てのしすてむに対して考えられるRのレンジを知る可能性はない。なぜならば、各ビットが1であるか、又は0である確率は50%であるからである。全てのシステムにおけるRのレンジは未知であるため、全てのシステムで使用可能な疎ルックアップテーブルを構築することは不可能である。したがって、一般的な疎ルックアップテーブルによる攻撃は考えられない。しかし、複製品製造者は、ある特定のシステムに対するRのレンジを知ることは可能である。これは、LFSRに、特定のシステム認証チップのRND関数への呼び出しからの現在の結果をロードし、将来に向けて数回繰り返すことによって実現できる。これが行われた場合、特定のRのレンジに対するレスポンスだけを格納した特別なROM、即ち、その特定のシステムの消耗品に専用のROMを構築できる。しかし、攻撃者は、正しい情報をROMに収容し続けなければならない。したがって、攻撃者は、有効認証チップを検出し、Rの値毎にそれを呼び出すことが必要である。
【1040】
複製認証チップが完全な消耗品をリポートし、接続のロスと新しい完全な消耗品の挿入をシミュレーションする前に1回だけ使用できる場合を想定する。複製消耗品は、完全な消耗品の認証に対するレスポンス、及び部分的に使用された消耗費にに対するレスポンスを格納しなければならない。最悪ケースで、ROMは、システムの耐用期間に亘るRに関して、完全な消耗品及び部分的に使用された消耗品のエントリーを格納する。しかし、有効認証チップは、情報を生成するために使用され、部分的にそのプロセスで使用されるべきである。所定のシステムがn個のR値だけを生成するならば、必要な疎ルックアップROMは、Mに対する異なる値の個数によって乗算された10nバイトである。ROMを構築するために要する時間は、RD呼び出しの間に課された時間に依存する。
【1041】
それにもかかわらず、複製品製造者は、詰め替えのため返品される消耗品に頼らざるを得ない。なぜならば、最初の場所にROMを構築するコストは1個の消耗品を消費するからである。このような状況における複製品製造者のビジネスは、結果的に詰め替えにある。時間及びコストは、Rのサイズと、ルックアップに組み込まれるべきMの値の種類の数と、に依存する。その上、カスタム複製ROMは、一つ一つのシステムに適合する必要があり、(完全なデータ及び部分的に使用されたデータを提供するため)異なる有効認証チップがシステム毎に使用されなければならない。システム内の認証チップの使用は、したがって、この種の攻撃が複製品製造者にとって価値があるかどうかを判定するために検査しなければならない。一例は、耐用期間に約10000プリントを有するカメラシステムである。単一のデクリメントオンリー値(残りプリント数)と、RDの呼び出しの間に1秒の遅延がある場合を想定する。このようなシステムにおいて、疎テーブルは、構築に約3時間を要し、100Kを消費する。ROMを構成するためには、有効認証チップを消費することが必要であるので、料金は、1個の消耗品と複製消耗品の合計よりも高くしなければならないことに注意すべきである。このようにして、1個の消耗品に対してこの機能を実行することは(複製消耗品が同等の多数の認証消耗品に何とかして収容されない限り)費用対効果がよくない。複製品製造者がシステムの所有者毎にカスタムROMを構築する労力を惜しまないのであれば、より簡単なアプローチは、認証チップを完全に無視するようにシステムを更新することであろう、したがって、この攻撃は、システム毎の攻撃として実現可能であり、所定のシステム/消耗品の組み合わせに対してこのようなことが起こる可能性を判定しなければならない。その可能性は、消耗品及び認証チップのコストと、消耗品の寿命と、消耗品の利益幅と、ROMを生成するために要する時間と、得られるROMのサイズと、顧客が同じ複製チップ等を使用する詰め替えのために複製品製造者へ戻ってくるかどうかと、に依存する。
【1042】
差分暗号解読
既知差分攻撃は、DES及びその他の同様のアルゴリズムで使用されるようなSボックスの構造にかなり依存している。プロトコル3で使用されるHMAC−SHA1のような他のアルゴリズムはSボックスを持たないが、攻撃者は、
最小差分入力及びそれに対応した出力
最小差分出力及びそれに対応した入力
の統計的解析を行うことによって差分的な攻撃を実行し得る。
【1043】
この性質の攻撃に出るため、入力/出力ペアの組が収集される。プロトコル3からの収集は、既知平文攻撃、又は部分適応的選択平文攻撃による。明らかに、後者が選ばれる方が有用である。一般的にハッシュ化アルゴリズムは差分解析に対抗するように設計されている。特に、SHA−1は、特に80語の拡張によって、強化されているので、入力における最小限の差は、(128ビットハッシュ関数と比較して)多数のビット位置が変わる出力を生成するであろう。その上、収集される情報は、HMACアルゴリズムの性質により、直接的なSHA−1入力/出力ではない。HMACアルゴリズムは、既知の値を、未知の値(鍵)でハッシュし、このハッシュの結果が次に別個の未知の値で再ハッシュされる。攻撃者は、秘密値も、最初のハッシュの結果もわからないので、SHA−1からの入力及び出力は不明であり、あらゆる差分攻撃を極めて難しくさせる。以下では、認証チップからの最小限度の差の入力及び出力をより詳細に説明する。
【1044】
最小限度の差の入力
この場合、攻撃者は、X値、F[X]値の組を取得し、X値が最小限度の差であり、出力F[X]の間の統計的な差を検査する。攻撃は、最小限度のビット数だけの差があるX値に依存する。F[X]値を比較するために最小限度の差のX値をどのようにして獲得するかが問題である。
【1045】
:Kの場合、攻撃者は、最小限度の差X、FK1[X]ペアを統計的に検査しなければならない。しかし、攻撃者は、X値を選択できず、関連したFK1[X]値を獲得できない。X、FK1[X]ペアは、システム認証チップ上のRND関数を呼び出すことによってのみ生成することができるので、攻撃者はRNDを複数回呼び出し、観測された各ペアをテーブルに記録する。次に、FK1[X]の統計的解析を行うため、観測された値の中で十分に最小限度の差X値を探索しなければならない。
【1046】
:Kの場合、攻撃者は、最小限度の差X、FK2[X]ペアを統計的に検査しなければならない。X、FK2[X]ペアを生成する唯一の方法は、RD関数によるものであり、所定のY、FK1[Y]ペアに対してFK2[X]を生成し、ここで、X=Y|Mである。これは、Yと、Mの変更可能部分が攻撃者によって限られた範囲で選択され得ることを意味する。選択の量は、したがって、できる限り多くされるべきである。
【1047】
攻撃者の選択を制限する第1の方法はYを制限することである。なぜならば、RDはフォーマットY、FK1[Y]の入力を要求するからである。有効なペアはRND関数から容易に獲得できるが、それは、RNDの選択によるペアである。攻撃者は、RNDから適切なペアを獲得した場合に限り、又はKを知っている場合に限り、固有のYを提供することが可能である。RNDから適切なペアを獲得するためには、ブルースフォース探索が必要になる。Kを知ることは、RND関数から獲得されたペアへの暗号解読を実行することによってのみ、即ち、事実上の既知テキスト攻撃によってのみ論理的に実現可能である。RNDは1秒当たりに呼び出せる回数は決まっているが、Kはシステムのチップで共通である。したがって、既知ペアは並列に生成できる。攻撃者の選択を制限する第2の方法は、Mを制限すること、又は少なくとも攻撃者のM選択能力を制限することである。Mの制限は、Mの一部をリードオンリーにさせ、認証チップ毎に相違させ、Mの他の部分をデクリメントオンリーにすることで実現される。Mのリードオンリー部分は、理想的には、認証チップ毎に異なるべきであるので、シリアル番号、バッチ番号、又は乱数のような情報でもよい。Mのデクリメントオンリー部分は、攻撃者が異なるMを試すとき、その回数だけMのその部分だけをデクリメントすることができ、Mのデクリメントオンリー部分が0まで低下した後、その部分は再度変更し得ない、ということを意味する。新しい認証チップ53を獲得すると、新しいMを与えるが、リードオンリー部分は、前の認証チップのリードオンリー部分とは異なり、したがって、攻撃者のMを選択する能力が更に低下する。その結果として、攻撃者は、Y及びMに対する値を選択するチャンスが少ししか高めることができない。
【1048】
最小限度の差の出力
この場合、攻撃者は、X値、F[X]値の組を取得し、F[X]値が最小限度の差を表し、X値の間の統計的な差を検査する。攻撃は、最小限度のビット数だけの差があるF[X]値に依存する。KとKの両方に対し、攻撃者は所与のF[X]に対するX値を生成する方法がない。そうするためには、Fは一方向関数であるという事実に違反するであろう。その結果として、攻撃者がこの性質をもつ攻撃を組み込む唯一の方法は、全ての観測されたX、F[X]ペアをテーブルに記録することである。検索は、X値の統計的解析を行うため十分に最小限度の差F[X]値を見つけるため観測値の中で行われる。これが(Mに関する制限及びRの選択に関する制限のために非常に限定されている)最小限度の差の入力攻撃よりも多くの作業を必要とするならば、この攻撃は無益である。
【1049】
メッセージ置換攻撃
この種の攻撃を実行するためには、複製物製造者は本物の認証チップ53を格納する必要があるが、それは減少しないので、事実上、再使用可能である。複製認証チップは、メッセージを盗み取り、それを自分のメッセージで置き換える。しかし、この攻撃は攻撃者にとって成功しない。複製認証チップは、WRコマンドを本物の認証チップへ渡さないように選択するかもしれない。しかし、後続のRDコマンドは(WRが成功したかのうよう)正しいレスポンスを戻さなければならない。正しいレスポンスを返すためには、特定のR及びMについてのハッシュ値がわかっていなければならない。バースデー攻撃のセクションで説明したように、攻撃者は、本物のチップ内のMを実際に更新しなければハッシュ値を決定できないが、攻撃者はこれを行うことを望まない。システムによって送信されたRを変更することさえ役に立たない。なぜならば、システム認証チップは引き続くTSTの間にRをマッチさせなければならないからである。したがって、メッセージ置換攻撃は成功しない。これは、システムが消耗品を使用する前に消耗品残量を更新する場合に限り成り立つ。
【1050】
鍵生成器のリバースエンジニアリング
疑似乱数生成器が鍵を生成するため使用される場合、複製品製造者は、生成器プログラムを取得するか、又は使用されたランダムシードを推測する可能性がある。これは、ネットスケープのセキュリティプログラムが最初に破られたときの方法である。
【1051】
認証全体の回避
プロトコル3は、システムが消耗品の使用前に消耗品状態データを更新し、(書き込みを認証するため)全ての書き込みの後に読み出しを続けることを要求する。このように、消耗品の使用毎に認証を要求する。システムがこれらの二つの簡単なルールに固執するならば、複製品製造者は(疎ROMルックアップのような)上述の方法により認証をシミュレーションしなければならない。
【1052】
認証チップの再使用
上述のように、プロトコル3は、システムが消耗品の使用前に消耗品状態データを更新し、(書き込みを認証するため)全ての書き込みの後に読み出しを続けることを要求する。このように、消耗品の使用毎に認証を要求する。消耗品が使い切られた場合、その認証チップの適切な状態データ値は0まで減少している。したがって、チップは別の消耗品で使用できない。このことが成り立つのは、デクリメントオンリーデータ項目を保持する認証チップの場合だけであることに注意する必要がある。使用される毎にデクリメントさせられる状態データが無い場合、チップの再使用を阻止するものはない。これは、プレゼンスオンリー認証と消耗品ライフタイム認証との間の基本的な差異である。プロトコル3はその両方を可能にさせる。結論として、消耗品がシステムによって使用されるデクリメントオンリーデータ項目を備えている場合、認証チップは、秘密鍵を知っている有効なプログラミングステーションによって完全に再プログラミングされない限り、再使用不能である。
【1053】
コスト節約のため認証を省略する経営上の判断
外部攻撃には限られないが、コストを節約するため将来のシステムでは認証を省略する判断は、様々なマーケットに種々の影響を与えるであろう。大量生産消耗品の場合、販売開始後に認証を導入することは極めて困難であるということに留意しなければならない。なぜならば、認証された消耗品を要求するシステムは、流通中の旧式の消耗品と連携しないからである。同様に、ある段階で認証を打ち切ることも非現実的である。なぜならば、旧式のシステムは、新しい認証されていない消耗品と連携しないからである。第2のケースでは、旧式のシステムは、システム認証チップを、同じプログラミングインタフェースを具備しているが、そのTST関数が常に成功する単純なチップで置換することによって、個別に改造することが可能である。勿論、そのシステムは、常に成功するTST関数をテストし、停止するようにプログラミングしてもよい。車/車キー、又は扉/扉の鍵、又はその他の類似した状況のような特殊化したペアの場合、将来のシステムで認証を省くことは重要ではなく影響もない。なぜならば、消費者は、システムと消耗品認証チップの組全体を同時に購入しているからである。
【1054】
強盗/賄賂攻撃
この形態の攻撃は、以下の二つの環境の何れかでしか成功しない:
、K、及びRはチッププログラマによって既に記録されているか、又は
攻撃者は、将来のK、K、及びRの値を強制的に記録させることができる。
【1055】
プログラミングステーションの外部の人間又はコンピュータシステムが鍵を知らないとき、暴力や賄賂をもってしてもそれらを明らかにできない。この種の攻撃に対する安全性のレベルは、究極的に、システム/消耗品所有者が望ましいサービスのレベルに応じて行う判断である。例えば、自動車会社は、製造した全てのキーの記録を保存しようとするので、その車のため新しいキーの作成を要求することができる。しかし、これは、キーデータベースの全体が危険にさらされる可能性があり、攻撃者は製造者の既存の車に対するキーを作成できるようになる。これは、攻撃者が新しい車キーを作成することを可能にさせない。勿論、キーデータベース自体は、別の鍵で暗号化され、キーデータベースにアクセスするためには、一定の人数の人のそれぞれの鍵部分を一つに組み合わせることが必要である。特定の車にどのキーが使用されているかについての記録が保存されていないならば、キーを紛失した場合に補助キーを作成する方法はない。この場合、所有者は自分の車の認証チップと自分の車キーの全てを交換しなければないであろう。これは、必ずしも困った状況ではない。これに対して、プリンタのインクカートリッジのような消耗品の場合、一つの鍵の組み合わせが全てのシステム及び全ての消耗品に対して使用される。勿論、鍵のバックアップが保存されていないならば、誰もその鍵がわからず、攻撃はあり得ない。しかし、バックアップの無い状況は、インクカートリッジのような消耗品の場合に望ましくない。なぜならば、鍵が失われた場合、それ以上消耗品を製造できないからである。したがって、製造者は鍵情報のバックアップを幾つかの部分に保存すべきであり、何人かの人は、鍵全体の情報を明らかにするため、それぞれの部分を一つに結合することが必要である。これは、チッププログラミングステーションに再ロードしなければならない場合に要求される。いずれにしても、これらの攻撃はプロトコル3自体に対する攻撃ではない。なぜならば、人が認証プロセスに関与していないからである。そのかわりに、これは、チップのプログラミングステージに対する攻撃である。
【1056】
HMAC−SHA1
認証のためのメカニズムは、HMAC−SHA1アルゴリズムであり、
HMAC−SHA1(R,K)又は
HMAC−SHA1(R|M,K
の一方に従って動作する。
【1057】
次に、HMAC−SHA1アルゴリズムをここまでの説明よりも詳しく検討し、本来の定義よりもメモリリソース必要量が少なくなるアルゴリズムの最適化を説明する。
【1058】
HMAC
HMACアルゴリズムは、以下の定義を前提として進む:
H=ハッシュ関数(例えば、MD5又はSHA−1);
n=Hから出力されるビット数(例えば、SHA−1の場合に160ビット、MD5の場合に128ビット);
M=MAC関数が適用されるデータ;
K=両当事者で共有される秘密鍵;
ipad=0x36の64回の繰り返し;
opad=0x5Cの64回の繰り返し。
【1059】
HMACアルゴリズムは次の通りである:
0x00バイトをKの最後に追加することによりKを64バイトに拡張する;
(1)で作成された64バイト文字列をipadでXOR論理演算する;
(2)で作成された64バイト文字列にデータストリームMを追加する;
(3)で生成されたストリームにHを適用する;
(1)で作成された64バイト文字列をopadでXOR論理演算する;
(4)からの結果Hを(5)から得られた64バイト文字列に追加する;
(6)の出力にHを追加し、その結果を出力する。
【1060】
これにより、
HMAC[M]=H[(KAopad)|H[(KAipad)|M]]
である;
HMAC−SHA1アルゴリズムは、単にH=SHA−1となるHMACである。
【1061】
SHA−1
SHA−1ハッシングアルゴリズムは以下で要約するアルゴリズムに規定される。
【1062】
9個の32ビット定数が定義される。5個の定数は連鎖変数を初期化するため使用され、4個の付加的定数がある。
【1063】
【表104】
Figure 2004536736
最適化されていないSHA−1は、全部で2912ビットのデータ記憶を必要とする:
5個の32ビット連鎖変数:H、H、H、H及びHが定義される;
5個の32ビット作業変数:A、B、C、D及びEが定義される;
1個の32ビット一時変数:tが定義される;
80個の32ビット一時レジスタ:X0−79が定義される。
【1064】
以下の関数はSHA−1のために定義される。
【1065】
【表105】
Figure 2004536736
ハッシングアルゴリズムは、最初に、512ビットの倍数になるまで入力メッセージをパディングし、連鎖変数H1−5をh1−5で初期化する。パッドされたメッセージは、次に、512ビットチャンクで処理され、出力ハッシュ値は、連鎖変数:H|H|H|H|Hの連結によって与えられる最後の160ビット値である。次に、SHA−1アルゴリズムのステップを詳細に説明する。
【1066】
ステップ1 処理
SHA−1の第1ステップは、以下のように入力メッセージを512ビットの倍数になるまで詰め込み、連鎖変数を初期化する。
【1067】
【表106】
Figure 2004536736
ステップ2 処理
詰め込まれた入力メッセージが処理可能である。512ビットのブロック内でメッセージを処理する。各512ビットのブロックは、16×32ビット語の形であり、InputWord0−15として表される。
【1068】
【表107】
Figure 2004536736
ステップ3 終了
詰め込まれた入力メッセージの全ての512ビットのブロックが処理された後、出力ハッシュ値は、H|H|H|H|Hによって与えられる最後の160ビット値である。
【1069】
ハードウェア実装用の最適化
SHA−1のステップ2の手続は、ハードウェアのために最適化されていない。特に、80個の一時的な32ビットレジスタは、ハードウェア実装上の貴重なシリコンを使い果たす。このセクションは、16個の一時レジスタだけを使用するSHA−1アルゴリズムへの最適化を説明する。シリコンの削減は、2560ビットから512ビットまでへの減少であり、2000ビット以上の節約になる。これは、一部のアプリケーションでは重要でないが、認証チップの場合、記憶スペースはできるだけ縮小されるべきである。最適化の基礎は、元の16ワードメッセージブロックが80ワードメッセージブロックに拡張されるが、80ワードはアルゴリズムの間に更新されないことにある。その上、ワードは、前の16ワードだけに依存しているので、拡張されたワードは、16ワードが後方参照のため保持される限り、処理中にオンザフライ方式で計算可能である。どのレジスタを使おうとしているかを追跡するために循環カウンタが必要になるが、その効果は大量の記憶量を節約することである。単一の値jでXをインデックス付けするのではなく、繰り返しを通してカウントするため5ビットのカウンタを使用する。これは、5ビットレジスタを16又は20で初期化し、0に達するまでそれをデクリメントすることによって実現される。16個の一時変数を80個であるかのようにして更新するため、4個のインデックスが必要であり、各インデックスは4ビットレジスタである。4個の全てのインデックスはアルゴリズムの途中(ラップアラウンド付きで)インクリメントされる。
【1070】
【表108】
Figure 2004536736
ラウンド0及び1Aの間のN、N及びNのインクリメントは随意的である。ソフトウェア実装は、時間を要するので、それらをインクリメントせずに、16巡のループの最後に、全4個のカウンタは元の値になる。ハードウェアの設計者は、制御ロジックを節約するため、全4個のカウンタを同時にインクリメントしようとする。呼び出し元が512ビットのX0−15をロードするならば、ラウンド0は完全に省くことができる。
【1071】
HMAC−SHA1
認証チップ実装の場合、HMAC−SHA1ユニットは、二つのタイプの入力:Kを使用するR、及びKを使用するR|Mにハッシングを実行するだけである。入力は2個の一定長さであるため、HMACとSHA−1をチップ上に別個のエンティティとして設けるのではなく、それらを合成し、ハードウェアを最適化することができる。SHA−1のステップ1におけるメッセージのパディング(1ビット、0ビットの文字列、及びメッセージの長さ)は、異なるメッセージがパディング後に同じように見えないことを保証するために必要である。2タイプのメッセージしか取り扱わないので、パディングは定数0でもよい。その上、SHA−1アルゴリズムの最適化バージョンが使用され、16個の32ビットワードだけが一時記憶のために使用される。これらの16個のレジスタは、最適化されたHMAC−SHA1ハードウェアによって直接ロードされる。9個の32ビット定数h−1−5及びy1−4は依然として必要であるが、それらが定数であることは、ハードウェア実装に有利である。ハードウェアの最適化されたHMAC−SHA−1は、全部で、以下の1024ビットのデータ記憶を必要とする:
5個の32ビット連鎖変数:H、H、H、H及びHが定義される;
5個の32ビット作業変数:A、B、C、D及びEが定義される;
一時記憶及び最終結果のための5個の32ビット変数:Buff1601−5が定義される;
1個の32ビット一時変数:tが定義される;
16個の32ビット一時レジスタ:X0−15が定義される。
【1072】
以下の2セクションは、HMAC−SHA1への2タイプの呼び出しのためのステップを説明する。
【1073】
H[R,K
を使用してRの鍵付きハッシュを生成するケースでは、元の入力メッセージRは、160ビットの一定長さである。したがって、処理中にこのことを有利に活用することができる。SHA−1アルゴリズムの最初の部分の間にX0−15をロードするのではなく、X0−15を直接ロードし、これにより、SHA−1の最適化プロセスブロック(ステップ2)のラウンド0を省く。擬似コードは次のステップを行う。
【1074】
【表109】
Figure 2004536736
H[R|M,K
を使用してR|Mの鍵付きハッシュを生成するケースでは、元の入力メッセージは
、416(256+160)ビットの一定長さである。したがって、処理中にこのことを有利に活用することができる。SHA−1アルゴリズムの最初の部分の間にX0−15をロードするのではなく、X0−15を直接ロードし、これにより、SHA−1の最適化プロセスブロック(ステップ2)のラウンド0を省く。擬似コードは次のステップを行う。
【1075】
【表110】
Figure 2004536736
データ記憶完全性
確認証チップは、認証プロトコル3によって要求される変数を保持するため、不揮発性メモリを含む。以下の不揮発変数が定義される。
【1076】
【表111】
Figure 2004536736
これらの変数がフラッシュメモリにあるならば、古い値を置き換えるため新しい値を書き込むことは簡単ではないことに注意する必要がある。メモリは、最初に消去され、次に、適切なビットをセットされる。これは、フラッシュメモリベースの変数を変更するため使用されるアルゴリズムに影響を与える。例えば、フラッシュメモリはシフトレジスタとして簡単に使用できない。汎用演算でフラッシュメモリ変数を更新するためには、以下のステップが必要になる:
Nビット値全体を汎用レジスタに読み込む;
汎用レジスタに演算を実行する;
変数に対応したフラッシュメモリを消去する;
汎用レジスタにセットされたビットに基づいてフラッシュメモリロケーションのビットをセットする。
【1077】
認証チップのリセットはこれらの不揮発性変数に影響を与えない。
【1078】
Mとアクセスモード
変数M[0]からM[15]は、シリアル番号、バッチ番号、及び消耗品残量のような消耗品状態データを保持するため使用される。各M[n]レジスタは16ビットであり、Mベクトル全体で256ビット(32バイト)になる。クライアントは個々のM[n]変数を読み書きできない。その代わりに、Mで表されるベクトル全体が単一論理アクセスによって読み出し、又は書き込みをされる。MはRD(リード)コマンドを使用して読み出され、WR(ライト)コマンドを使用して書き込まれる。これらのコマンドは、KとKの両方が確定し(SIWritten=1)、認証チップが消耗品の信頼できないチップ(IsTrusted=0)である場合に限り成功する。Mは多数の異なるデータタイプを格納するが、それらは書き込み許可が異なるだけである。各データタイプは常に読み出すことができる。一旦クライアントメモリに入ると、256ビットはクライアントによって選択された何らかの方法で解釈できる。Mの256ビット全体は、認証の章で説明したようにセキュリティの理由から少量ずつ読み出すのではなく、同時に読み出される。様々な書き込み許可が以下の表に列挙されている。
【1079】
【表112】
Figure 2004536736
書き込みに要求される保護を実現するため、2ビットアクセスモード値がM[n]毎に定められる。以下の表は、2ビットアクセスモードビットパターンの解釈を定義する。
【1080】
【表113】
Figure 2004536736
16個のM[n]レジスタのための16組のアクセスモードビットは、単一のアクセスモードAccessModeレジスタにまとめられる。32ビットのAccessModeレジスタは、以下のように、n付きのM[n]に対応する。
【1081】
【表114】
Figure 2004536736
各2ビット値は、上位/下位のフォーマットで記憶される。したがって、M[0−5]がアクセスモードMSRであり、M[6−15]がアクセスモードROであるならば、32ビットAccessModeレジスタは、
11−11−11−11−11−11−11−11−11−11−01−01−01−01−01−01
である。
【1082】
WR(ライト)コマンドの実行中に、AccessMode[n]は各M[n]について調べられ、新しいM[n]値が古い方を置き換えるかどうかを判断する。AccessModeレジスタは認証チップのSAM(セットアクセスモード)コマンドを使用してセットされる。デクリメントオンリー比較は符号無しであり、負のレンジを要求するデクリメントオンリー値は、正のレンジにシフトさせなければならない。例えば、−50から50のレンジのデクリメントオンリーデータ項目を含む消耗品は、そのレンジが0から100へシフトされる。システムは、そのレンジ0から100を−50から50として解釈する。尚、殆どの場合に、デクリメントオンリーレンジはNから0であり、レンジシフトは必要ない。デクリメントオンリーデータ項目の場合、データは、最上位16ビット量から最下位16ビット量の順にM[n]から前方へ並べられる。最上位16ビット(M[n]に記憶されている)に対するアクセスモードは、MSRにセットされるべきである。残りのレジスタ(M[n+1]、M[n+2]等)は、それらのアクセモードがNMSRにセットされるべきである。誤ってNMSRにセットされ、関連したMSR領域が無い場合、各NMSR領域は、倍精度比較ではなく、独立であるとみなされる。
【1083】

は認証プロトコル中にRを変換するため使用される160ビット秘密鍵である。Kは、SSI(秘密情報セット)コマンドでK及びRと共にプログラミングされる。Kは秘密にされなければならないので、クライアントはKを直接読み出し得ない。Kを利用するコマンドはRND及びRDである。RNDは、R、FK1[R]のペアを返し、Rは乱数であり、一方、RDは入力としてX、FK2[R]のペアを要求する。Kは鍵付き一方向ハッシュ関数HMAC−SHA1で使用される。したがって、Kは、物理的にランダムな現象から収集された、物理的に生成された乱数でプログラミングされるべきである。Kは、決して、コンピュータ上で実行される乱数生成器で生成してはならない。認証チップの安全性は、決定論的では無い方法で生成されたK、K及びRに依存する。例えば、Kをセットするため、ある人は公正なコインを160回トスし、表を1として記録し、裏を0として記録する。Kは、CLRコマンドの実行時に自動的に0にクリアされる。それは、SSIコマンドだけによって非零値にセットすることができる。
【1084】

は認証プロトコル中にM|Rを変換するため使用される160ビット秘密鍵である。Kは、SSI(秘密情報セット)コマンドでK及びRと共にプログラミングされる。Kは秘密にされなければならないので、クライアントはKを直接読み出し得ない。Kを利用するコマンドはRD及びTSTである。RDは、M、FK2[M|X]のペアを返し、Xはパラメータのうちの一つとしてRD関数へ渡される。TSTは入力としてM、FK2[M|R]のペアを要求し、Rは認証チップのRND関数から獲得された。Kは鍵付き一方向ハッシュ関数HMAC−SHA1で使用される。したがって、Kは、物理的にランダムな現象から収集された、物理的に生成された乱数でプログラミングされるべきである。Kは、決して、コンピュータ上で実行される乱数生成器で生成してはならない。認証チップの安全性は、決定論的では無い方法で生成されたK、K及びRに依存する。例えば、Kをセットするため、ある人は公正なコインを160回トスし、表を1として記録し、裏を0として記録する。Kは、CLRコマンドの実行時に自動的に0にクリアされる。それは、SSIコマンドだけによって非零値にセットすることができる。
【1085】
RとIsTrusted
Rは、SSI(秘密情報セット)コマンドでK及びRと共にプログラミングされる160ビットの乱数シードである。Rは秘密にする必要がない。なぜならば、それは、RNDコマンドによって自由に呼び出し元へ与えられるからである。しかし、Rを変更できるのは認証チップだけであり、呼び出し元によって任意の選択した値にセットできない。Rは、TSTコマンド中に使用され、前のRND呼び出しからのRが、信頼できない認証チップ(チップA)においてFK2[M|R]を生成するために使用されたことを保証する。RND及びTSTの両方は、信頼されている認証チップ(チップT)だけで使用される。
IsTrustedは1ビットフラグレジスタであり、認証チップが信頼されているチップ(チップT)であるかどうかを決定する:
IsTrustedビットがセットされているならば、チップは信頼されているチップであるとみなされるので、クライアントはRND関数及びTST関数を呼び出すことができる(RD又はWRではない);
IsTrustedビットがクリアされているならば、チップは信頼されているチップであるとみなされない。したがって、RND関数及びTST関数を呼び出すことができない(その代わり、RDとWRを呼び出しても構わない)。システムは、消耗品上のRND又はTSTを決して呼び出す必要がない(なぜならば、複製チップはTSTのような関数に1を返すだけであり、RNDに対して一定値を返すだけである)。
【1086】
IsTrustedビットは、攻撃者によって獲得できる利用可能なR、FK1[R]の個数を減少させる付加的な利点があり、しかも認証プロトコルの完全性を維持する。有効なR、FK1[R]のペアを獲得するため、攻撃者は、システム認証チップが必要であり、これは、消耗品よりも高価であり入手が困難である。R及びIsTrustedビットの両方はCLRコマンドによって0にクリアされる。これらは共に、SSTコマンドの発行によって書き込まれる。IsTrustedビットは、SSIコマンドによって、非零シード値をRに格納することによってのみセットすることができる(Rは有効なLFSR状態であるために非零であり、これは全く合理的である)。Rは、ビット1、2、4及び159にタップが付いた160ビットの最大限の周期のLFSRによって変更され、TSTへの呼び出しが成功したときだけに(1が返された場合)変更される。
【1087】
システムで信頼されているチップ(チップT)になることが予定されている認証チップは、プログラミング中にそのIsTrustedビットがセットされるべきであり、消耗品で使用される認証チップ(チップA)は(プログラミング中にSSIコマンドでRに0を格納することにより)そのIsTrustedビットがクリアのままにされるべきである。IsTrustedビットを直接読み書きするためのコマンドは存在しない。認証チップの安全性は、K及びKのランダム性、並びに、HMAC−SHA1アルゴリズムの強度だけに依存するわけではない。攻撃者が疎ルックアップテーブルを構築することを妨げるため、認証チップの安全性は、全てのシステムの耐用期間に亘るRのレンジにも依存する。したがって、Rは、物理的にランダムな現象から収集された、物理的に生成された乱数でプログラミングされるべきである。Rは、決して、コンピュータ上で実行される乱数生成器で生成してはならない。Rの生成は決定論的であってはならない。例えば、信頼できるシステムチップで使用するためのRを生成するため、ある人は公正なコインを160回トスし、表を1として記録し、裏を0として記録する。0は信頼できるRに対する唯一の有効でない初期値である(又は、IsTrustedビットはセットされない)。
【1088】
SIWritten
SIWritten(秘密情報書き込み(Secret Information Written)1ビットレジスタは、認証チップ内に記憶された秘密情報の状態を保持する。秘密情報はK、K及びRである。クライアントはSIWrittenビットに直接アクセスできない。その代わりに、SIWrittenビットはCLRコマンドによってクリアされる(このコマンドは、K、K及びRもクリアする)。認証チップが、SSIコマンド(書き込まれる値とは無関係に)を使用して秘密鍵及び乱数シードでプログラミングされたとき、SIWrittenビットは自動的にセットされる。Rは厳密には秘密ではないが、攻撃者が選択されたR、FK1[R]のペアを獲得するために自分の固有の乱数シードを生成し得ないことを保証するため、RはK及びKと一緒に書き込まなければならない。SIWritten状態ビットは、K、K又はRにアクセスする全ての関数によって使用される。SIWrittenビットがクリアされている場合、RD、WR、RND及びTSTの呼び出しはCLRの呼び出しとして解釈される。
【1089】
MINTICKS
攻撃者が短時間の間にTST及びRD関数への多数の呼び出しを生成できないようにする二つのメカニズムが存在する。第1のメカニズムは、内部クロックが特定の最大値(例えば、10MHz)を超える速度で動作することを妨げるクロック制限ハードウェアコンポーネントである。第2のメカニズムは32ビットのMinTicks(最小チック)レジスタであり、これは、鍵付き関数への呼び出しの間に経過しなければならない最小のクロックチック回数を指定するため使用される。MinTicks変数はCLRコマンドによって0にクリアされる。ビットは、SMT(MinTicksセット)コマンドによってセットされる。SMTへの入力パラメータは、MinTicksのどのビットをセットすべきであるかを表現するビットパターンを含む。実際の効果は、攻撃者がMinTicksの単位でしか値を増加し得ないことである(なぜならば、SMT関数はビットをセットするだけである)。その上、呼び出し元がこのレジスタの現在の値を読み出すことができる関数は設けられていない。MinTicksの値は、動作クロック速度と、鍵付き関数呼び出しの間の合理的な時間の定め方(アプリケーションに固有)と、に依存する。1チックの間隔は動作クロック速度に依存する。これは、入力クロック速度と認証チップのクロック制限ハードウェアの最大値である。例えば、認証チップのクロック制限ハードウェアは10MHzにセットされるが(これは変更できない)、入力クロックは1MHzである。このケースでは、1チックの値は10MHzではなく、1MHzが基準になる。入力クロックが1MHzではなく20MHzであるならば、1チックの値は10MHzが基準になる(なぜならば、クロック速度は10MHzで制限されている)。
【1090】
1チックの間隔がわかると、MinTicks値をセットすることができる。MinTicksの値は、鍵付きRD及びTST関数への呼び出しの間に経過することが要求されるMinTicks数である。この値は、リアルタイム数であり、動作チックの長さで除算される。入力クロック速度が10MHzの最大クロック速度と一致する場合を想定する。鍵付き関数の呼び出しの間に1秒の最小値を求めるならば、MinTicksの値は10000000にセットされる。攻撃者がRND、RD及びTSTを何回も呼び出すことによってX、FK1[X]のペアを収集しようとしている場合を考える。TSTへの呼び出しの間の時間が1秒になるようにMinTicks値がセットされているならば、各ペアを生成するために1秒が必要になる。225個のペア(1.25Gbの記憶量しか必要にならない)を生成するため、攻撃者は1年以上を必要とする。264個のペアが必要になる攻撃は、1個のチップを使用すると、5.84×1011年が必要になり、10億個のチップが使用されるならば、584年が必要になり、このような攻撃は時間的に全く非現実的になる(記憶必要量については言うまでもない!)。
【1091】
に関しては、MinTicks変数は攻撃者を遅くさせ、攻撃のコストを高くするだけである。なぜならば、MinTicksは攻撃者が多数のシステムチップを並列に使用することを止めるものではないからである。しかし、MinTicksは、本当にKへの攻撃をより困難にさせる。なぜならば、各消耗品は異なるMを有するからである(Mの一部はランダムなリードオンリーデータである)。差分攻撃に出るためには、最小限度の差の入力が必要であり、これは、単一の消耗品(Mの実効的に定数部を含む)によって実現できる。最小限度の差の入力は、攻撃者が単一チップを使用することを要求し、MinTicksは、単一チップの使用をスローダウンさせる。差分攻撃を始めるために値の検索を開始するためのデータを取得するだけに1年を要するのであれば、これは攻撃のコストを上昇させ、複製消耗品の実効的な販売期間を短縮する。
【1092】
認証チップコマンド
システムは簡単なオペレーションコマンドセットによって認証チップと通信する。このセクションは、プロトコル3の実装のために必要な実際のコマンド及びパラメータを詳述する。認証チップは、最低限の実装としてシリアルインタフェースによってシステムと通信するものとして定義される。より幅広いインタフェース(例えば、8、16又は32ビット)によって動作する等価的なチップを定義することは慣用的なことである。オペコードの解釈は、IsTrustedビットの現在の値と、IsWrittenビットの現在の値と、に依存し得る。以下のオペレーションが定義される。
【1093】
【表115】
Figure 2004536736
Op=オペコード、T=IsTrusted値、W=IsWrtten値、
Mn=ニューモニック、[n]=パラメータに必要なビット数。
【1094】
この表に定義されていないコマンドは、NOP(ノーオペレーション)として解釈される。その例には、(IsTrusted値又はIsWritten値とは無関係である)オペコード110及び111と、IsWritten=0のときのSSI以外のオペコードと、が含まれる。RD及びRNDのオペコードは同じであり、WR及びTSTのオペコードも同じであることに注意する必要がある。オペコードの受け取り後に動かされる実際のコマンドは、(IsWrittenが1である限り)IsTrustedビットの現在値に依存する。IsTrustedビットがクリアされているところでは、RD及びWR関数が呼び出される。IsTrustedビットがセットされると、RND及びTST関数が呼び出される。2組のコマンドは、信頼されている認証チップと信頼されていない認証チップとの間で相互に排他的であり、同じオペコードはこの関係を強いる。各コマンドは引き続くセクションで詳細に検討される。一部のアルゴリズムは具体的に設計される。なぜならば、フラッシュメモリが不揮発変数の実現形態として想定されるからである。
【1095】
【表116】
Figure 2004536736
CLR(クリア)コマンドは、全ての認証チップメモリの内容を完全に消去するため設計される。これは、全ての鍵及び秘密情報と、アクセスモードビットと、状態データと、を含む。CLRコマンドの実行後、認証チップは、新しく製造されたときと丁度同じように、プログラマブル状態になる。それは、新しい鍵として再プログラムして、再使用することができる。CLRコマンドは、CLRコマンドオペコードだけにより構成される。認証チップはシリアルであるため、これは同時に1ビットずつ転送される。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、CLRコマンドは、CLRオペコードのビット0から2として送られる。全部で3ビットが転送される。CLRコマンドはいつでも直ちに呼び出すことができる。消去の順序は重要である。SIWrittenbit値は、(RND、TST、RD及びWRのような)鍵アクセス関数への更なる呼び出しを禁止するため、最初に消去されなければならない。AccessModeビットがSIWrittenの前にクリアされると、攻撃者は、それらがクリアされた後のある時点で電源を取り外し、Mを操作し、これにより、部分選択テキスト攻撃で秘密情報を取り出すよい機会を得る。CLRコマンドは以下のステップで実現される。
【1096】
【表117】
Figure 2004536736
チップがクリアされると、チップは再プログラミングと再使用の準備が完了する。ブランクチップは攻撃者にとって無用である。なぜならば、Mに対して任意の値を作成することが可能であるとしても(Mは読み出し及び書き込みが可能である)、K及びKが間違っているので鍵付き関数は全く情報を提供しないからである。CLRがCLR以外の任意のオペコードのために要求されるならば、入力パラメータビットを費やす必要がない。攻撃者はチップをリセットするだけでよい。CLRを呼び出す理由は、全ての秘密情報が破壊され、チップが攻撃者にとって無用になることを保証するためである。
【1097】
SSI−秘密情報セット(SET SECRET INFORMATION)
入力:K、K、R=[160ビット,160ビット,160ビット]
出力:無し
変更内容:K、K、R、SIWritten、IsTrusted。
【1098】
SSI(秘密情報セット(Set Secret Information))コマンドは、K、K及びR変数にロードし、RND、TST、RD及びWRコマンドを後で呼び出すためSIWritten及びIsTrustedフラグをセットするため使用される。SSIコマンドは、SSIコマンドオペコードと、その後に続く、K、K及びRレジスタに格納されるべき秘密情報と、を含む。認証チップはシリアルであるため、これは同時に1ビットずつ転送されるべきである。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、SSIコマンドは、SSIオペコードのビット0−2と、その後に続く、Kに対する新しい値のビット0−159と、Kに対する新しい値のビット0−159と、最後に、Rに対するシード値のビット0−159として送られる。全部で483ビットが転送される。K、K、R、SIWritten、及びIsTrustedレジスタはCLRコマンドによって全て0にクリアされる。それらは、SSIコマンドを使用することによってのみセットすることができる。
【1099】
SSIコマンドは、データがK、K及びRにロードされた事実を格納するためフラグSIWrittenを使用する。SIWrittenフラグ及びIsTrustedフラグをクリアされているならば(これは、CLR命令後のケースである)、K、K及びRに新しい値がロードされる。何れかのフラグがセットされているならば、SSIの呼び出しの試みによって、CLRコマンドが実行される。なぜならば、攻撃者又は間違ったクライアントだけが、CLRを先に呼び出すことなく、鍵又はランダムシードを変更しようとするからである。また、SSIコマンドは、Rに対する値に依存してIsTrustedフラグをセットする。R=0であるならば、チップは信用できないとみなされ、したがって、IsTrustedは0のまま維持される。R≠0であるならば、チップは信用できるとみなされ、IsTrustedは1にセットされる。IsTrustedビットの設定は、SSIコマンドの間だけで行われることに注意する必要がある。認証チップが再使用されるならば、CLRコマンドは最初に呼び出されなければならない。その後、鍵は、SSIコマンドで安全にプログラムされ、新たな状態情報がSAM及びWRコマンドを用いてMへロードされる。SSIコマンドは以下のステップで実行される。
【1100】
【表118】
Figure 2004536736
RD−読み出し
入力:X、FK1[X]=[160ビット、160ビット、160ビット]
出力:M、FK2[X|M]=[256ビット、160ビット]
変更内容:R。
【1101】
RD(リード)コマンドは、信頼されない認証チップから状態データ(M)の256ビット全体を安全に読み出すために使用される。有効認証チップだけがRD要求に正しく応答する。RDコマンドからの出力ビットは、入力ビットとして、検証用の信頼された認証チップ上のTSTコマンドへ供給でき、最初の256ビット(M)は、TSTが(期待通りに)1を戻す場合に後で使用するため保存される。認証チップはシリアルであるため、コマンド及び入力パラメータは同時に1ビットずつ転送されるはずである。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、RDコマンドは、RDオペコードのビット0−2と、その後に続く、Xのビット0−159と、FK1[x]のビット0−159である。全部で320ビットが転送される。X及びFK1[X]は信頼された認証チップのRNDコマンドを呼び出すことによって獲得される。信頼されたチップのRNDコマンドから出力された320ビットは、したがって、信頼されないチップのRDコマンドへそのまま供給することが可能であり、それらのビットをシステムによって保存しなくてもよい。RDコマンドは、以下の条件が充たされたときに限り使用できる:
SIWritten=1 K、K、RがSSIコマンドによってセットアップされたことを示す;
IsTrusted=0 乱数シーケンスを生成することが許可されないのでチップは信頼されないことを示す。
【1102】
加えて、RDの呼び出しは、MinTicksRemainingレジスタが0に達するまで待たなければならない。そうなった後、レジスタには、MinTicksが再ロードされ、RDへの呼び出しの間に最小限度の時間が確実に経過する。MinTicksRemainingにMinTicksが再ロードされると、RDコマンドは入力パラメータが有効であることを検証する。これは、入力Xに対するFK1[X]を内部的に生成し、次に、得られた結果を入力FK1[X]と比較することによって行われる。この生成及び比較は、入力パラメータが正しいかどうかとは無関係に同じ時間を使用しなければならない。時間が同一ではない場合、攻撃者は、FK1[X]のどのビットが間違っているかに関する情報を得ることができる。入力パラメータが無効になるのは、間違ったシステム(誤ったビットを渡す)、間違ったシステムに間違った消耗品がある場合、不良の信頼されるチップ(不良なペアを生成する)、又は認証チップへの攻撃に限られる。一定値0は入力パラメータが間違っている場合に返される。0が返されるまでに要する時間は、あらゆる不良な入力に対して同じでなければならないので、攻撃者は何が無効であるかに関する情報を全く学習できない。入力パラメータが検証されると、出力値が計算される。Mの256ビットの内容は、M[0]のビット0−15、M[1]のビット0−15から、M[15]のビット0−15の順番に転送される。FK2[X|M]は計算され、ビット0−159として出力される。Rレジスタは、X、FK1[X]ペアの検証中に、値を格納するため使用される。その理由は、RNDとRDが相互に排他的であるためである。RDコマンドは以下のステップで実施される。
【1103】
【表119】
Figure 2004536736
RND−ランダム
入力:無し
出力:R、FK1[R]=[160ビット、160ビット]
変更内容:無し。
【1104】
RND(ランダム)コマンドは、RD及びTSTコマンドによって、後続の認証で使用するための有効R、FK1[R]ペアを獲得するためクライアントによって使用される。入力パラメータが無いので、RNDコマンドは単にRNDオペコードのビット0−2である。RNDコマンドは以下の条件が充たされた場合に限り使用できる:
SIWritten=1 KおよびRがSSIコマンドによってセットアップされたことを示す;
IsTrusted=1 チップは乱数シーケンスを生成することが許可されていることを示す。
【1105】
RNDは、RとFK1[R]の両方を呼び出し元へ返す。RNDコマンドの288ビット出力は、信頼されないチップのRDコマンドに入力パラメータとして供給することが可能である。クライアントはそれらを全く格納する必要が無い。なぜならば、それらは再度要求されないからである。しかし、TSTコマンドは、RDコマンドに渡された乱数が最初にRNDコマンドから取得されたものである場合に限り成功する。呼び出し元がRNDだけを複数回呼び出すならば、同じR、FK1[R]のペアが毎回返されるであろう。Rは、TSTへの呼び出しが成功であった後、シーケンス内の次の乱数へ進む。より詳しくはTSTの説明を参照せよ。RNDコマンドは以下のステップで実施される。
【1106】
【表120】
Figure 2004536736
TST−テスト(TEST)
入力:X、FK2[R|X]=[256ビット、160ビット]
出力:1又は0=[1ビット]
変更内容:M、R及びMinTicksRemaining(又は攻撃が検出されたならば全てのレジスタ)。
【1107】
TST(テスト(Test))コマンドは、信頼されない認証チップからのMの読み出しを認証するため使用される。TST(テスト)コマンドは、TSTコマンドオペコードと、その後に続く入力パラメータ:X及びFK2[R|X]と、により構成される。認証チップはシリアルであるため、これは同時に1ビットずつ転送されなければならない。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、TSTコマンドは、TSTオペコードのビット0−2と、その後に続く、Mのビット0−255と、FK2[R|M]のビット0−159である。全部で419ビットが転送される。最後の416入力ビットは、RDコマンドから信頼されない認証チップへの出力ビットとして獲得されるので、データ全体をクライアントが保存する必要はない。その代わりに、ビットは、信頼された認証チップのTSTコマンドへそのまま渡すことができる。Mのうちの256ビットだけがRDコマンドに秘密にされるべきである。TSTコマンドは、以下の条件が充たされたときに限り使用できる:
SIWritten=1 KおよびRがSSIコマンドによってセットアップされたことを示す;
IsTrusted=1 チップは乱数シーケンスを生成することが許可されていることを示す。
【1108】
加えて、TSTの呼び出しは、MinTicksRemainingレジスタが0に達するまで待たなければならない。そうなった後、レジスタには、MinTicksが再ロードされ、TSTへの呼び出しの間に最小限度の時間が確実に経過する。TSTは、内部M値を入力M値によって置き換えさせる。次に、FK2[M|R]が計算され、160ビット入力ハッシュ値と比較される。生成される単一出力ビットは、両者が同じであるならば1であり、両者が異なるならば0である。内部M値を使用することは、チップ上のスペースを節約し、RD及びTSTが相互に排他的なコマンドであることの理由である。出力ビットが1であるならば、Rはシーケンス内の次の乱数になるように更新される。これは、RD及びTSTテストが呼び出される毎に、呼び出し元に強制的に新しい乱数を使用させる。結果の出力ビットは、入力文字列全体が比較されるまでは出力されないので、TST関数内の比較を評価するために要する時間は常に同じである。このようにして、攻撃者は、実行時間、又は出力が与えられる前に処理されたビット数を比較できない。
【1109】
次の乱数は、160ビットの最大周期のLFSR(タップはビット159、4、2及び1で選択)を使用してRから生成される。Rの初期160ビット値はSSIコマンドによってセットアップされ、0以外のいかなる乱数でもよい(0で満たされたLFSRは際限のない0のストリームを生成する)。Rはビット1、2、4及び159をまとめてXOR論理演算し、XOR論理演算の結果をb159への入力として用いて160ビット全部を右へ1ビットシフトすることにより変換される。新しいRは次のRND呼び出しの際に返される。TSTから0を返すために要する時間は、全ての不良な入力に対して同じであり、攻撃者は無効な入力に関して何も学習し得ないことに注意する必要がある。
【1110】
TSTコマンドは以下のステップで実施される。
【1111】
【表121】
Figure 2004536736
尚、ステップ7では、単純にそのままRを進めることができない。なぜならば、Rはフラッシュメモリであり、セットされたビットが0になるためには消去しなければならないからである。電源が、古いRの値を消去した後で新しいRの値が書き込まれる前に、ステップ7の間に認証チップから取り外された場合、Rは消去されるが再プログラミングされない。したがって、IsTrusted=1でありながら、R=0であるという状況が生まれ、この状況が起こり得るのは攻撃者が原因となる場合だけである。ステップ4はこの事象を検出し、攻撃が検出された場合に動作する。この問題は、Rのための第2の160ビットフラッシュレジスタと有効性ビットとを設け、新しい値がロードされた後にトグル切替することで防ぐことができる。これは、スペースの理由で本実施形態には組み込まれていないが、チップ空間がそれを許容するならば、補助的な160ビットフラッシュレジスタがこの目的のために有用であろう。
【1112】
WR−書き込み(WRITE)
入力:Mnew=[256ビット]
出力:無し
変更内容:M。
【1113】
WR(書き込み(Write))コマンドは、認証チップ状態データを格納するMの書き込み可能な部分を更新するため使用される。WRコマンド自体は安全ではない。WRコマンドの後には、(RDコマンドによる)認証されたMの読み出しが続き、指定されたとおりに変更がなされたことを保証する。WRコマンドは、WRコマンドオペコードと、その後に続くMへ書き込まれるべき新しい256ビットのデータと、を渡すことによって呼び出される。認証チップはシリアルであるため、Mの新しい値は同時に1ビットずつ転送されなければならない。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、WRコマンドは、WRオペコードのビット0−2と、その後に続く、M[0]のビット0−15と、M[1]のビット0−15からM[15]のビット0−15まである。全部で259ビットが転送される。WRコマンドは、SIWritten=1のとき、即ち、K、K、RがSSIコマンドによってセットアップされたことを示すときに限り使用できる(SIWrittenが0であるならば、K、K、Rは未だセットアップされていないので、代わりにCLRコマンドが呼び出される)。特定のM[n]への書き込みの可能性は、AccesssModeレジスタに格納されているような対応したアクセスモードビットにより支配される。AccessModeビットはSAMコマンドを用いてセットできる。新しい値をM[n]へ書き込みとき、M[n]はフラッシュメモリであるということを考慮しなければならない。M[n]の全てのビットを消去した後、適切なビットをセットしなければならない。二つのステップが別々のサイクルで行われるので、攻撃の可能性は無防備のままである。攻撃者は、消去後、しかし、新しい値をプログラミングする前に、電源を取り外すことが可能である。しかしながら、攻撃者はこれを行っても利益がない:
この手段によってリード/ライトM[n]が0に変更されることは全く利益がない。なぜならば、攻撃者はWRコマンドを使用して任意の値を書き込めるからである;
この手段によってリードオンリーM[n]が0に変更されることによって、付加的なテキストペアを知ることができる(ここで、M[n]は元の値ではなく0である)。将来M[n]値を使用する場合、それらは既に0であるため、全く情報が与えられない;
デクリメントオンリーM[n]が0に変更されると、消耗品が使い切られる時間が早まるだけである。これは、消耗品を使用することによって得られるような何ら新しい情報を攻撃者に与えることはない。
【1114】
WRコマンドは以下のステップで実施される。
【1115】
【表122】
Figure 2004536736
SAM−アクセスモードセット(SET ACCESS MODE)
入力:AccessModenew=[32ビット]
出力:AccessMode=[32ビット]
変更内容:AccessMode。
【1116】
SAM(アクセスモードセット(Set Access Mode))コマンドは、AccessModeレジスタの32ビットをセットするため使用され、消耗品認証チップでの使用だけが有効である(IsTrustedフラグ=0の場合)。SAMコマンドは、SAMコマンドオペコードと、その後に続く、AccessModeレジスタにビットをセットするために使用される32ビット値と、を渡すことによって呼び出される。認証チップはシリアルであるため、データは同時に1ビットずつ転送されなければならない。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、SAMコマンドは、SAMオペコードのビット0−2と、その後に続く、AccessModeにセットされるビットのビット0−31と、である。全部で35ビットが転送される。AccessModeレジスタはCLRコマンドの実行時に限り0にクリアされる。00というアクセスモードはRW(リード/ライト)のアクセスモードを示すので、CLR後にAccessModeビットをセットしないことは、全てのMが読み書きできることを意味する。SAMコマンドだけがAccessModeレジスタのビットをセットする。したがって、クライアントは、32ビット語に適当なビットをセットし、入力パラメータとしての32ビット値を用いてSAMを呼び出すことにより、M[n]に対するアクセスモードビットをRWからRO(リードオンリー)へ変更可能である。これは、様々な時点での、おそらく製造プロセスの種々のステージにおけるアクセスモードビットのプログラミングを可能にさせる。例えば、リードオンリーランダムデータは、初期鍵プログラミングステージ中に書き込むことが可能であり、一方、消耗品シリアル番号のような項目のための第2のプログラミングステージが許可される。
【1117】
SAMコマンドはビットをセットするだけであるので、その効果は、M[n]に対応するアクセスモードビットをRWからMSR、NMSR又はROの何れかへ進行させ得ることである。尚、MSRのアクセスモードはROへ変更可能であるが、これは、攻撃者には役立たないことに注意する必要がある。なぜならば、不正に加工された認証チップへの書き込み後のMの認証は、書き込みが不成功であったことを検出し、オペレーションを中止するからである。ビットの設定は、フラッシュメモリが最も巧く機能する方法に対応する。AccessModeレジスタ内のビットをクリアする唯一の方法は、例えば、デクリメントオンリーM[n]をリード/ライトに変更するための唯一の方法は、CLRコマンドを使用することである。CLRコマンドは、AccessModeレジスタを消去(クリア)するだけではなく、鍵及び全てのMをクリアする。このようにして、M[n]に対応するAccessMode[n]ビットは、CLRコマンドの間で1回だけ有効に変更することができる。SAMコマンドは(適切なビットが入力パラメータによってセットされた後)AccessModeレジスタの新しい値を返す。入力パラメータを0としてSAMを呼び出すことにより、AccessModeは変更されず、したがって、AccessModeの現在値が呼び出し元へ返される。
【1118】
SAMコマンドは以下のステップで実施される。
【1119】
【表123】
Figure 2004536736
GIT−IsTrustedを取得(GET ISTRUSTED)
入力:無し
出力:IsTrusted=[1ビット]
変更内容:無し。
【1120】
GIT(IsTrusted取得(Get IsTrusted)コマンドは、認証チップ上のIsTrustedビットの現在値を読むため使用される。戻されるビットが1であるならば、認証チップは信頼できるシステム認証チップである。戻されるビットが0であるならば、認証チップは消耗品認証チップである。GITコマンドは、GITコマンドオペコードだけを含む。認証チップはシリアルであるため、これは同時に1ビットずつ転送されなければならない。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、SAMコマンドは、SAMオペコードのビット0−2として送信される。全部で3ビットが転送される。GITコマンドは以下のステップで実施される。
【1121】
【表124】
Figure 2004536736
SMT−MinTicksセット(SET MINTICKS)
入力:MinTicksnew=[32ビット]
出力:無し
変更内容:MinTicks。
【1122】
SMT(MinTicksセット(Set MinTicks))コマンドは、MinTicksレジスタのビットをセットし、TST及びRDへの呼び出しの間に経過すべきMinTicks数を定めるため使用される。SMTコマンドは、SMTコマンドオペコードと、その後に続く、MinTicksレジスタにビットをセットするために使用される32ビット値と、を渡すことによって呼び出される。認証チップはシリアルであるため、データは同時に1ビットずつ転送されなければならない。ビット順序は、各コマンドコンポーネントのLSBからMSBである。したがって、SMTコマンドは、SMTオペコードのビット0−2と、その後に続く、MinTicksにセットされるビットのビット0−31と、である。全部で35ビットが転送される。MinTicksレジスタはCLRコマンドの実行時に限り0にクリアされる。0という値は、鍵付き関数の呼び出しの間にチックを経過させなくてもよいことを示す。したがって、この関数は、クロック速度制限ハードウェアがチップに動作を許可する頻度で呼び出される。
【1123】
SMTコマンドはビットをセットするだけなので、その効果は、クライアントが値をセットできるようにさせ、更なる呼び出しが行われた場合に時間遅延を増大させるだけである。既にセットされたビットをセットすることは効果がなく、クリアされているビットをセットすることだけが、チップを更に遅くさせるために作用する。ビットの設定はフラッシュメモリが最も巧く機能する方法に対応する。MinTicksレジスタ内のビットをクリアする唯一の方法は、例えば、10チックの値を4チックの値に変更するための唯一の方法は、CLRコマンドを使用することである。しかし、CLRコマンドは、MinTicksレジスタを0にクリアするだけではなく、全ての鍵及びMをクリアする。したがって、それは攻撃者にとっては役に立たない。このようにして、MinTicksレジスタは、CLRコマンドの間で1回だけ有効に変更することができる。
【1124】
SMTコマンドは以下のステップで実施される。
【1125】
【表125】
Figure 2004536736
認証チップのプログラミング
認証チップは物理的に安全な環境内で論理的に安全な情報でプログラミングしなければならない。その結果として、プログラミング手続は論理的セキュリティと物理的セキュリティの両方を取り扱う。論理的セキュリティは、K、K、R及び乱数M[n]の値が、コンピュータではなく、物理的にランダムなプロセスによって生成されることを保証するプロセスである。また、それは、チップの部品のプログラミングされる順序が最も論理的に安全であることを保証するプロセスでもある。物理的セキュリティは、プログラミングステーションが物理的に安全であり、したがって、鍵生成ステージ期間と鍵の記憶の耐用期間の両方で、K及びKが秘匿されることを保証するプロセスである。その上、プログラミングステーションは、鍵を獲得又は破壊する物理的攻撃に対抗しなければならない。認証チップは、K及びKが秘匿されることを保証するための固有のセキュリティメカニズムを備えているが、プログラミングステーションはK及びKを安全に保持しなければならない。
【1126】
概要
製造後、認証チップは使用可能にされる前にプログラミングする必要がある。全てのチップにおいて、K及びKの値を確定しなければならない。チップがシステム認証チップを目的としているならば、Rの初期値を決めなければならない。チップが消耗品認証チップを目的としているならば、Rは0にセットし、M及びAccessModeの初期値も設定しなければならない。したがって、以下のステージが確認される:
システムと消耗品の間の繰り返しを決定する;
システム及び消耗品用の鍵を決定する;
システム及び消耗品用のMinTicksを決定する;
鍵、ランダムシート、MinTicks及び未使用Mをプログラムする;
状態データ及びアクセスモードをプログラムする。
【1127】
消耗品又はシステムが必要でなくなると、取り付けられた認証チップは再使用可能である。これは、もう一度ステージ4から始めて、チップを再プログラミングすることによって簡単に実現できる。各ステージは以下のセクションで説明する。
【1128】
ステージ0:製造
認証チップの製造は特別なセキュリティを必要としない。製造ステージでは、チップにプログラミングされている秘密情報はない。アルゴリズム及びチッププロセスは特別ではない。標準的なフラッシュプロセスが使用される。チップ製造者とプログラミングステーションの間での認証チップの盗難は、複製品製造者にブランクチップを与えることになるだけである。これは、認証チップの販売を危うくすることは殆どなく、認証チップによって何も認証されない。プログラミングステーションは、消耗品及びシステムのプロダクト鍵を含む唯一のメカニズムであるため、複製品製造者は、正しい鍵を用いてチップをプログラムできない。複製品製造者は、自分専用のシステム及び消耗品用にブランクチップをプログラミングすることは可能であるが、それらの品を見破られずに販売することは困難であろう。その上、1回の盗みではビジネスの基礎を置くことは難しいであろう。
【1129】
ステージ1:システムと消耗品の間の相互作用の決定
システムとは何か、及び消耗品とは何か、の判断は、認証チップのプログラミングが可能になる前に決定されるべきである。どの消耗品がどのシステムで使用可能であるかに関する判断をする必要がある。なぜならば、接続されるシステムと消耗品だけが同じ鍵情報を共有しなければならないからである。また、それらは、状態データの一部の解釈が未決定であっても、状態データ使用メカニズムを共有すべきである。簡単な例は、車と、車キーの場合である。車自体はシステムであり、車キーは消耗品である。各車には数個の車キーがあり、各キーは特定の車と同じ鍵情報を格納する。しかし、各車(システム)は(その車キーと共有される)異なる鍵をもつであろう。なぜならば、ある車の車キーが別の車で機能することが求められないからである。別の例は、特定のトナーカートリッジを必要とするコピー機の場合である。簡単に言えば、コピー機はシステムであり、トナーカットリッジは消耗品である。しかし、カートリッジとコピー機の間にどのような互換性があるかを判断する必要がある。この判断は、従来、トナーカートリッジの物理的パッケージングによって行われ、ある種のカートリッジは、新しいモデルのコピー機の設計判断に基づいて、その新しいモデルのコピー機に適合し、或いは、適合しない。認証チップが使用されるとき、連動すべきコンポーネントは同じ鍵情報を共有しなければならない。
【1130】
更に、消耗品はタイプ毎に、M(状態データ)の異なる分割方法が必要になる。Mの使用法は、アプリケーション毎に変化するものであり、M[n]及びAccessMode[n]の割付方法も同様である:
特定用途の消耗品状態データを定義する;
将来の使用のため(必要に応じて)一部のM[n]レジスタを確保する。それらを0にセットし、リードオンリーにセットする。値は互換性を保つためにシステムでテストすることができる;
残りのM[n]レジスタ(少なくとも1個、しかし、M[15]であってはならない)をリードオンリーにセットし、各M[n]の内容を完全にランダムにする。これによって、複製品製造者は認証鍵への攻撃がより困難になる;
以下の例は、状態データが編成される方法を示す。
【1131】
例1
車キーが付随した車を想定する。16ビット鍵番号は、所定の車の車キーを一意に識別するために十分足りる。Mの256ビットは以下の通り分割される。
【1132】
【表126】
Figure 2004536736
車製造者が全ての車の全ての論理的鍵を保持するならば、車キーを紛失したときに、新しい物理的な車キーを製造することは些細な問題である。新しい車キーは、M[0]に新しい鍵番号を格納するが、その車の認証チップと同じK及びKを含む。車システムは、特定の鍵番号を無効にすることができる(例えば、鍵を紛失したとき)。このようなシステムは、鍵0(マスター鍵)を最初に挿入し、次に全ての有効な鍵を挿入し、次に、鍵0をもう一度挿入することを要求するかもしれない。これらの有効な鍵だけが車と連動するようになる。最悪のケースでは、例えば、全ての車キーを紛失すると、その車に対する新しい論理的な鍵の組を生成し、必要に応じて、関連した物理的な車キーを生成することができる。カーエンジン番号は、その鍵を特定の車に結びつけるために使用される。将来用データは、レンタル情報、例えば、ドライバ/貸出者の詳細情報のような事項を格納する。
【1133】
例2
100000回のコピー毎に交換しなければならないコピー機画像ユニットの例を想定する。残りページ数を記憶するため32ビットが必要になる。Mの256ビットは次の通り分割される。
【1134】
【表127】
Figure 2004536736
10000回のコピー毎に交換しなければならない低品質画像ユニットが製作されたとき、32ビットのページカウントは、既存コピー機との互換性のためにそのまま使用される。これにより、数タイプの消耗品を同じシステムで使用できるようになる。
【1135】
例3
25枚の写真を格納するポラロイド型カメラの例を考える。残り写真数を記憶するためには16ビットのカウントダウンだけあればよい。Mの256ビットは次の通り分割される。
【1136】
【表128】
Figure 2004536736
M[2]の残り写真数は、同じカメラシステムと使用するための多数の消耗品タイプの構築を可能にさせる。例えば、写真数36の新しい消耗品は簡単にプログラムできる。カメラの発表後、2年が経過した場合を考えると、新しいタイプのカメラが発表されている。それは、古い消耗品を使用することが可能であるが、新しいフィルムタイプも処理できる。M[3]はフィルムタイプを定義するため使用できる。古いフィルムタイプは0であり、新しいフィルムタイプは他の新しい値である。新しいシステムはこれを利用することができる。元のシステムはM[3]に非零値を検出し、新しいフィルムタイプとの非互換性を認識する。新しいシステムは、M[3]の値を理解し、適切に応じる。古い消耗品との互換性を保つため、新しい消耗品及びシステムは、古いものと同じ鍵情報をもつことが必要である。新しいシステム及びその専用消耗品と完全に断ち切るためには、新しい鍵セットが必要になるであろう。
【1137】
例4
シアン、マゼンタ、及びイエローの三つのインクを格納するプリンタ消耗品の例を考える。各インク量は別々にデクリメントされるべきである。Mの256ビットは次の通り分割される。
【1138】
【表129】
Figure 2004536736
ステージ2:システム及び消耗品の鍵の決定
どのシステムとどの消耗品が同じ鍵を共有すべきであるかに関する決定がなされると、それらの鍵を定義しなければならない。したがって、K及びKの値が決定される。殆どのケースでは、K及びKは全体で1回だけ生成される。連動すべき(現在及び将来の)全てのシステム及び消耗品は、同じ鍵K及びKの値をもつ。したがって、K及びKは秘匿されなければならない。なぜならば、システム/消耗品の組み合わせに対するセキュリティメカニズム全体は、鍵が見られてしまうと、役に立たなくなるからである。鍵が暴露されると、その損害は、システム及び消耗品の数、並びに、それらを新たな暴露されていない鍵で再プログラミングすることの容易さに依存する。トナーカートリッジを用いるコピー機の場合、最悪のケースでは、複製品製造者は固有の認証チップを製造し(又は、さらに悪い場合には、それらを購入し)、判明した鍵でチップをプログラムし、固有の消耗品に挿入する。車キー付きの車のケースでは、各車は、異なる鍵の組をもつ。このことにより、2通りの一般的なシナリオが生まれる。第1のシナリオでは、車及び車キーがそれらの鍵を用いてプログラムされた後、K及びKが削除され、それらの値の記録が保持されず、即ち、K及びKを暴露する方法がない。しかし、その車のための予備の車キーは、車の認証チップを再プログラミングしない限り製作できない。第2のシナリオでは、車製造者はK及びKを保持し、その車のための新しいキーを製作可能である。K及びKの暴露は、ある者が特定の車専用の車キーを製作できることを意味する。
【1139】
したがって、認証チップで使用される鍵及びランダムデータは、非決定論的な手段によって生成されるべきである(完全にコンピュータで生成された疑似乱数は使用できない。なぜならば、それは、生成器のシードを知ることによって将来の全ての数が得られるという点で決定論的であるからである)。K及びKは、コンピュータではなく、物理的にランダムなプロセスによって生成されるべきである。しかし、ランダム性の自然発生源に基づくランダムビット生成器は、外因の影響を受けやすく、故障し易い。そのような装置は、統計的なランダム性を定期的にテストすべきであることが避けられない。
【1140】
簡単ではあるが、有用な乱数発生源は、SGIからのLavarand(登録商標)システムである。この生成器は、数分間隔で6個のラバランプを撮影するデジタルカメラを使用する。ラバランプは無秩序なタービュラント系を含む。得られたデジタル画像はSHA−1実装部に供給され、SHA−1実装部は、7方向のハッシュを生成し、デジタル化された画像から7バイト毎に160ビット値を生じる。7組の160ビットの合計は140バイトになる。この140バイトの値がBBS生成器に供給され、出力ビットストリームのスタート位置を決める。BBSからの出力160ビットは、鍵、又は認証チップ53である。
【1141】
非決定論的なランダムプロセスの極端な例は、クリーンルーム内で、Kのためにコインを160回トスし、Kのためにコインを160回トスすることである。それぞれの表又は裏に応じて、1又は0が鍵プログラマ装置のパネルに入力される。このプロセスは、(検証のための)数人の観測者が沈黙した状態(誰かが隠しマイクを持っているかもしれない)で行われる。重要なことは、安全なデータ入力及び記憶は、それほど簡単ではないということである。鍵プログラマ装置及び付随するプログラミングステーションの物理的セキュリティは、その固有の完全なドキュメントが必要である。鍵K及びKが決定された後、それらは、認証チップがその鍵を使用する必要のある限り保持されなければならない。最初の車/車キーのシナリオでは、K及びKは、単一のシステムチップ及び数個の消耗品チップがプログラムされた後に破壊されている。コピー機/トナーカートリッジのケースでは、K及びKは、トナーカートリッジがコピー機の役に立っている間に限り保持されなければならない。それらは秘匿されるべきである。
【1142】
ステージ3:システム及び消耗品のMinTicksの決定
MinTicksの値は、認証チップの動作クロック速度(システム固有)と、RD又はTST関数呼び出しの間の妥当な時間の根拠(アプリケーション固有)と、に依存する。単一チックの間隔は動作クロック速度に依存する。これは、入力クロック速度と認証チップのクロック制限ハードウェアの最大値である。例えば、認証チップのクロック制限ハードウェアは10MHzにセットされるが(これは変更できない)、入力クロックは1MHzである。このケースでは、1チックの値は10MHzではなく、1MHzが基準になる。入力クロックが1MHzではなく20MHzであるならば、1チックの値は10MHzが基準になる(なぜならば、クロック速度は10MHzで制限されている)。1チックの間隔がわかると、MinTicks値をセットすることができる。MinTicksの値は、鍵付きRD又はST関数への呼び出しの間に経過することが要求されるMinTicks数である。入力クロック速度が10MHzの最大クロック速度と一致する場合を想定する。TSTの呼び出しの間に1秒の最小値を求めるならば、MinTicksの値は10000000にセットされる。2秒のような値は、(1ページ当たりに1回の認証で、1ページが2から3秒毎に生成される)プリンタのようなシステムの場合には全く妥当な値である。
【1143】
ステージ4:鍵、ランダムシード、最終チック及び未使用Mのプログラム
認証チップは、製造後、状態が不明である。或いは、認証チップは、ある消耗品で既に使用済みであり、別の消耗品で使用するために再プログラムしなければならない。確認証チップの各々は、クリアされ、新しい鍵及び新しい状態データでプログラムされる。認証チップのクリア処理及びその後のプログラミングは、安全なプログラミングステーション環境で行われる。
【1144】
信頼されたシステム認証チップのプログラミング
チップが信頼されたシステムチップであるならば、Rのシード値が生成される。それは、物理的にランダムなプロセスから抽出された乱数であり、0ではない。以下のタスクは、以下の順に、安全なプログラミング環境で行われる:
リセット チップをリセット
CLR[]
Load R R(160ビットレジスタ)に物理的ランダムデータをロード
SSI[K,K,R]
SMT[MinTicksSystem]。
【1145】
ここで、認証チップはシステムへ挿入するための準備が完了している。認証チップは完全にプログラムされている。システム認証チップがこの時点で盗まれたならば、複製品製造者は、Kへの既知テキスト攻撃に出るために、又はKへの部分選択テキスト攻撃に出るために、R、FK1[R]のペアを生成すべくそれらを使用できる。これは、各々が信頼された認証チップを含む多数のシステムの購入と差がない。セキュリティは、認証プロトコルの強度と、K及びKのランダム性と、に依存する。
【1146】
信頼されない消耗品認証チップのプログラミング
チップが信頼されない消耗品認証チップである場合、プログラミングは信頼されたシステム認証チップのプログラミングとは少し異なる。最初に、Rのシード値は0である。それは、M及びAccessModeの値用の付加的なプログラミングを行う。未使用M[n]は0でプログラムされ、ランダムM[n]はランダムデータでプログラムされる。以下のタスクは、以下の順に、安全なプログラミング環境で行われる:
リセット チップをリセット
CLR[]
Load R R(160ビットレジスタ)に0をロード
SSI[K,K,R]
Load X X(256ビットレジスタ)に0をロード
Set 適当なM[n]に対応したXに物理的ランダムデータをセット
WR[X]
Load Y Y(32ビットレジスタ)に0をロード
Set 適当なM[n]に対応したYにリードオンリーアクセスモードをセット
SAM[Y]
SMT[MinTicksConsumable]。
【1147】
ここで、信頼されない消耗品チップは一般的な状態データでプログラムする準備が完了している。認証チップがこの時点で盗まれたならば、攻撃者は、制限選択テキスト攻撃を実行できる。最もよい状況では、Mの一部分はリードオンリー(0及びランダムデータ)であり、Mの残りは攻撃者によって(WRコマンドを用いて)完全に選択される。攻撃者による多数のRD呼び出しは、限定されたMに対するFK2[M|R]を獲得する。最悪の状況では、Mは攻撃者によって完全に選択される(なぜならば、256ビットの全てが状態データに使用されるためである)。しかし、どちらの場合でも、攻撃者はRの値を選択できない。なぜならば、RはRNDへの呼び出しによってシステム認証チップから供給されるためである。選択されたRを獲得する唯一の方法は、ブルートフォース攻撃である。ステージ4及び5が同じプログラミングステーションで実行された場合(好ましく、且つ理想的な状況)、認証チップはステージ間で取り外せないことに注意すべきである。この場合、認証チップがこの時点で盗まれる可能性はない。認証チップを1回でプログラムするか、又は2回でプログラムするかの決定は、システム/消耗品製造者の要求次第である。
【1148】
ステージ5:状態データ及びアクセスモードのプログラム
このステージは、消耗品認証チップの場合だけに必要である。なぜならば、M及びAccessModeレジスタはシステム認証チップ上では変更できないからである。M[n]の未使用及びランダム値は既にステージ4でプログラムされている。残りの状態データをプログラムする必要があり、関連したAccessMode値をセットする。このステージの速度は、MinTicksレジスタに格納された値によって制限されることに注意する必要がある。このステージは、ステージ4とステージ5が実行される場所/時間の物理的場所の違い又は時間の違いを考慮して、ステージ4から分離されている。理想的には、ステージ4及び5は同時に同じプログラミングステーションで実行される。ステージ4は有効認証チップを生成するが、それらに初期状態値(0以外)をロードしない。これは、チップのプログラミングを消耗品の生産ラインの運行と一致させることができる。ステージ5は何回も実行し、毎回、異なる状態データ値及びアクセスモード値を設定することが可能であるが、1回だけ実行され、残りの全ての状態データ値をセットし、残りの全てのアクセスモード値をセットする可能性の方が高い。例えば、生産ラインがセットアップされ、認証チップのバッチ番号及びシリアル番号が生産される物理的な消耗品に応じて生成される。これを一致させることは、状態データが物理的に異なる工場でロードされる場合にはかなり難しくなる。
【1149】
ステージ5のプロセスは、最初に、チップが有効消耗品チップであることを保証するために検査を行い、ここでは、認証チップからデータを収集するRDが含まれ、次に、初期データ値のWRが行われ、更に、新しいデータ値を永久的にセットするためSAMが行われる。これらのステップの概要を次に記載する:
IsTrusted=GIT[];
IsTrustedがセットされているならば、エラー(間違った種類のチップ!)で終了する;
有効な入力ペアを取得するため有効システムチップのRNDを呼び出し;
有効な入力ペアを渡して、プログラムされるべきチップのRDを呼び出し;
認証チップのRDからの結果をX(256ビットレジスタ)にロードする;
X及び消耗品チップが有効であることを保証するため有効システムチップのTSTを呼び
出し;
TSTが0を返したならば、エラー(システムに対し間違った消耗品チップ)で終了する。
Xのビットに初期状態値をセット;
WR[X];
Y(32ビットレジスタ)に0をロード;
新しい状態値のためのアクセスモードに対応したYのビットをセット;
SAM[Y]。
【1150】
勿論、検証(ステージ1から7)は、ステージ4及び5が同じプログラミングステーションで次々と行われる場合には行わなくてもよい。しかし、この検証は、ステージ5がステージ4とは別個のプログラミングプロセスとして実行される他の全ての状況では行われるべきである。これらの認証チップがここで盗まれた場合には、それらは既に特定の消耗品で使用するためにプログラムされている。攻撃者は、盗んだチップを複製消耗品に取り付けることができる。このような盗難は、複製された製品の個数を盗難されたチップの個数に制限する。1回の盗難では、複製品製造者が費用対効果に優れたビジネスを行うために十分な供給数が得られない。このチップの別の用途は、攻撃者が部分選択テキスト攻撃又はブルートフォース攻撃に出るために、認証チップ付きの同数の消耗品を購入しなくても済むことである。このような攻撃が行われても、鍵の特別な安全性の欠陥はない。
【1151】
製造
認証チップの回路は物理的攻撃に対抗できなければならない。製造インプリメンテーションガイドラインの概要を説明し、その後に、チップの物理的防御の仕様を(攻撃の順に)説明する。
【1152】
製造のガイドライン
製造に関する認証チップの実装用の一般的なガイドラインを以下に列挙する:
標準プロセス
最小サイズ(なるべく)
クロックフィルタ
雑音発生器
タンパー防止及び検出回路
タンパー検出付き保護メモリ
プログラムコードのローディング用ブート回路
鍵データパス用のFETの特殊実装
可能な場所でのポリシリコン層内のデータコネクション
過小過多電力検出ユニット
テスト回路無し。
【1153】
標準プロセス
認証チップは(フラッシュのような)標準的な製造プロセスで実装できる。これは、製造場所の非常に広範囲の選択を可能にさせること
明確であり、且つ正常に動作するテクノロジーを使用すること
コストを低減すること
を充たすために必要である。標準プロセスは物理的な保護メカニズムを可能にさせることに注意する必要がある。
【1154】
最小サイズ
認証チップ53は、低コスト消耗品のための認証メカニズムとして組み込むことができるように製造コストを低くしなければならない。したがって、チップサイズはできるだけ小さいままにすることが望ましい。各認証チップは、802ビットの不揮発性メモリが必要である。その上、最適化されたHMAC−SHA1に必要な記憶容量は1024ビットである。チップの残りの部分(状態機械、プロセッサ、CPU、又はプロトコル3を実施するために選択されたもの)は、トランジスタの個数が最小限に抑えられ、チップ当たりのコストが最小限になるように最低限に維持される。秘密鍵情報を保有する回路面積、また亜h、鍵に関する情報が漏れる虞のある回路面積も最小限に抑えられるべきである(特殊データパスのための以下のノンフラッシングCMOSを参照せよ)。
【1155】
クロックフィルタ
認証チップ回路は特定のクロック速度レンジで動作するように設計される。ユーザはクロック信号を直接供給するので、攻撃者は、処理中の特定の時点で回路に乱調状態を生じさせ用とする可能性がある。この一例は、高いクロック速度(回路が設計対象とした速度よりも高い)は、XORが適切に動作することを妨げ、2個の入力のうちの最初の入力がそのまま返される場合である。このようなスタイルの過渡現象障害攻撃は、秘密鍵情報を復元する際に非常に有効である。ここらか学ぶべきことは、入力クロック信号は信頼できないということである。入力クロック信号は信頼できないので、最大周波数までで動作するように制限されるべきである。これはいろいろな方法で実現できる。クロック信号をフィルタ処理する一つの方法は、「エッジオン」を遅延器へ渡すエッジ検出ユニットを使用することであり、次に、遅延によって入力クロック信号の通過を許可する。図174は、クロックフィルタ内のクロック信号フローの説明図である。遅延は、最大クロック速度が特定の周波数(例えば、4MHz)になるようにセットされる。この遅延はプログラマブルではなく、固定であることに注意すべきである。フィルタ処理されたクロック信号は、必要に応じて内部で更に分周される。
【1156】
雑音発生器
各認証チップは連続した回路雑音を発生する雑音発生器を含む。雑音は、チップの通常の動作からの他の電磁放射と干渉し、雑音をIdd信号に加える。雑音発生器の設置は、放射波長の長さのために認証チップに問題を起こさない。雑音発生器は、電子雑音、クロックサイクル毎の複数状態変化を発生し、タンパー防止及び検出回路用の疑似ランダムビットソースとして使用される。雑音発生器の簡単な実装は、非零の数でシードされた64ビットLFSRである。雑音発生器で使用されるクロックは、できるだけ多くの雑音を発生させるため、チップの最大クロックレートで動く。
【1157】
タンパー防止及び検出回路
1組の回路が認証チップへの物理的攻撃のテスト及び防止のために必要である。しかし、実際に攻撃として検出される者は、意図的な物理的攻撃ではないかもしれない。したがって、認証チップ内で以下の2タイプの攻撃、即ち、
物理的攻撃の出現を確信できる場合
物理的攻撃の出現を確信できない場合
を区別することが重要である。
【1158】
この2タイプの検出は、検出の結果として実行されることが違う。第1のケース、即ち、物理的攻撃の出現を確信できる場合、フラッシュメモリ鍵情報の消去が目的にかなった動作である。第2のケース、即ち、物理的攻撃の出現を確信できない場合、何かの間違いがあるかもしれない。動作を行うべきではあるが、秘密鍵情報を消去する動作ではない。第2のケースでとるべき適切な動作は、チップリセットである。検出されたものがチップに永久的な損傷を加える攻撃であるならば、次にも同じ状態が出現し、チップは再度リセットする。これに対して、検出されたものがチップの通常の動作環境の一部であるならば、このリセットは鍵を損ねない。
【1159】
回路が状況を理解できない事象の良い例は、電源誤動作である。この誤動作は、鍵に関する情報を暴こうとする意図的な攻撃かもしれない。しかし、それは、接続間違い、又は単に、電源遮断シーケンスの開始かもしれない。したがって、チップをリセットだけすることが最良であり、鍵を消去しない。チップが電源遮断中であれば、何も失われない。システムが故障している場合、リセットの繰り返しによって、消費者はシステムを修理する。両方のケースで、消耗品は損なわれていない。回路が状況を理解できる事象の良い例は、チップ内のデータラインの切断である。この攻撃が何らかの方法で検出された場合、これは、チップの故障(製造欠陥)、又は攻撃の結果に限られる。何れのケースでも、秘密情報の消去は、目的にかなった選択すべきステップである。
【1160】
この結果として、各認証チップは図示されるように2本のタンパー検出ラインを含む。一方は明確な攻撃用であり、もう一方は攻撃可能性のためのものである。これらのタンパー検出ラインには、多数のタンパー検出テストユニットが接続され、各ユニットは様々な形態のタンパーリングをテストする。その上、タンパー検出ライン及び回路自体は不正に手を加えられないことを保証したい。
【1161】
タンパー検出ラインの一方の端は、(一般的な動作回路よりも高速でクロッキングする)疑似ランダムビットのソースである。上記の雑音発生器回路は適当なソースである。生成されたビットは、2種類のパスを通り、一方のパスは原データを搬送し、他方は原データの反転を搬送する。これらのビットを搬送する配線は、一般的なチップ回路(例えば、メモリ、鍵操作回路等)よりも上の層にある。配線はランダムビット発生器もカバーする。ビットは、XORゲートによって多数の場所で再結合される。ビットが異なる場合(そうあるべきである)、1が出力され、特定のユニットによって使用される(例えば、メモリ読み出しからの各出力ビットはこのビット値とAND演算される)。ラインは、最終的に、フラッシュメモリ消去回路に集まり、そこで、XORからの0によって完全な消去がトリガーされる。ラインには多数のトリガーが取り付けられ、各々はチップ上の物理的攻撃を検出する。各トリガーは、GNDへ繋がれた大型nMOSトランジスタを有する。タンパー検出ラインは、このnMOSトランジスタを物理的に通る。テストが失敗したとき、トリガーはタンパー検出ラインを0にする。XORテストは、このクロックサイクル、又は次のクロックサイクル(平均的に)の何れかで失敗し、チップをリセット又は消去する。図175は、テストと、消去回路又はリセット回路の何れかに接続されたXORと、を用いるタンパー検出回路の基本原理の説明図である。
【1162】
タンパー検出ラインは、図176の大型nMOSトランジスタのレイアウトに示されているように、各Testの出力トランジスタのドレインを通る。タンパー検出ラインは切断できない。なぜならば、これは、ランダムソースからの1と0の流れを止めるからである。それにより、XORテストは失敗する。タンパー検出ラインは、各テストを物理的に通るので、タンパー検出ラインを切断することなく、特定のテストを除去することは不可能である。重要なことは、XORは、攻撃の機会を減らすため、タンパー検出ラインに沿って様々な場所からの値を取ることである。図177は、チップの様々な部分で使用されるタンパー検出ラインから多数のXORをとる状況を示している。これらのXORの各々は、各ユニット又はサブユニットで使用されるチップ正常ビットChipOKを生成しているとみなすことができる。
【1163】
サンプル用途としては、各ユニットにOKビットを設け、これを各サイクルで与えられたChipOKビットとAND演算することがある。OKビットはリセットで1がロードされる。OKビットが0であるならば、ユニットは次のリセットまで失敗(フェイル)である。タンパー検出ラインが正しく機能するならば、チップは、リセットを行うか、又は全ての鍵情報を消去する。リセット回路又は消去回路が破壊されているならば、このユニットは機能しないので、攻撃者を阻止する。リセットライン及び消去ライン、並びに、関連した回路の行き先は、非常に状況に敏感である。それは、個別のタンパーテストと非常に類似した方法で保護されるべきである。攻撃者がリセット回路に繋がる配線を簡単に切断できるのであれば、リセットパルスを生成しても意味がない。実際の実装形態は、リセットでクリアされるべき項目と、それらの項目をクリアする方法と、に依存する部分が大きい。
【1164】
最後に、図178は、タンパーラインがチップの雑音発生器回路を保護する様子を示す図である。発生器及びNOTゲートは同じ高さにあり、一方、タンパー検出ラインは発生器よりも高いところを通る。
【1165】
タンパー検出付き保護メモリ
秘密情報又はプログラムコードはフラッシュメモリに記憶するだけでは不十分である。フラッシュメモリ及びRAMは、プログラムコード又は鍵情報の特定のビットを変更(又はセット)使用とする攻撃者から保護されなければならない。使用されるメカニズムは、(上述の)タンパー検出回路で使用されているメカニズムに準拠する。ソリューションの第1の部分は、タンパー検出ラインが各フラッシュ又はRAMビットの直ぐ上を確実に通ることである。これは、攻撃者がフラッシュ又はRAMの内容をプローブできないことを保証する。配線の保護部の破損はタンパー検出ラインの切断である。この破損は、消去信号をセットするので、メモリの内容が消去される。タンパー検出ライン上の高周波雑音も受動的な観測の妨げになる。
【1166】
フラッシュに対するソリューションの第2の部分は、多重レベルデータ記憶装置を使用し、しかも、それらの多重レベルのうちのサブセットだけを有効ビット表現のために使用することである。一般的に、多重レベルフラッシュ記憶装置が使用されるとき、単一のフローティングゲートが2ビット以上を保持する。例えば、4電圧状態トランジスタは、2ビットを表現できる。最小電圧及び最大電圧がそれぞれ00及び11で表すことにすると、2個の中間電圧は01及び10を表す。認証チップの場合、単一ビットを表現するために2個の中間電圧を使用し、両端の2個は無効状態であるとみなす。攻撃者がゲートの回路を閉じる、又は切断することにより、ビットの状態を強制的にある方向又は別の方向にさせようとした場合に、無効電圧(従って、無効状態)が現れる。
【1167】
RAMに対するソリューションの第2の部分は、パリティビットを使用することである。レジスタのデータ部分は(攻撃後には一致しなくなる)パリティビットを使って検査できる。フラッシュ及びRAMから到来するビットは、共通タンパー検出ラインに接続された(1ビットに一つずつの)多数のテストユニットによって確認される。タンパー検出回路は、データが通過する最初の回路である(したがって、攻撃者によるデータラインの切断を阻止する)。
【1168】
プログラムコードのローディング用ブート回路
プログラムコードは、ROMではなく、多重レベルフラッシュに保持されるべきである。なぜならば、ROMはテストできない方法で変更されやすいからである。したがって、ブートメカニズムは、プログラムをフラッシュメモリに取り込むために必要である(フラッシュメモリは製造後中間状態になっている)。ブート回路はROM内には置かれず、小型の状態機械で十分である。そうでなければ、ブートコードは検出できない方法によって変更される。ブート回路は、全てのフラッシュメモリを消去し、消去が正しく動作したことを確認し、次に、プログラムコードをロードする。フラッシュメモリは、プログラムをローディングする前に消去しなければならない。そうでなければ、攻撃者はチップをブート状態に置き、既存の鍵を抽出しただけのプログラムをロードすることができる。状態機械は、新しいプログラムコードをロードする前に、全てのフラッシュメモリがクリアされていることを保証するため(攻撃者が消去ラインを切断していないことを保証するため)検査を行う。プログラムコードのローディングは、(鍵のような)秘密情報がロードされる前に、安全なプログラミングステーションによって行われる。
【1169】
鍵データパス用の特殊なFETの実装
CMOSインバータ(nMOSトランジスタと組み合わされたpMOSトランジスタを含む)場合の通常のFET実装の状況が図179に示されている。遷移中に、nMOSトランジスタとpMOSトランジスタの両方が中間的な抵抗値をもつ短い期間が存在する。その結果としての電源−グラウンド短絡回路は、電流を一時的に増大させ、実際上、CMOS装置によって消費される電流の大部分を占める。少量の赤外線光が短絡回路の期間に放出され、シリコン基板を介して観測することができる(シリコンは赤外線を透過する)。また、少量の光がトランジスタゲート容量と伝送ライン容量の充電中及び放電中に放出される。
【1170】
秘密鍵情報を操作する回路の場合、このような情報は秘匿されなければならない。代替的なノンフラッシングCMOS実装が、鍵、又はその鍵に基づいて部分的に計算された値を操作する全てのデータパスのため使用される。二つの重なり合わないクロックφ1及びφ2の使用によって、フラッシュしないメカニズムが得られる。φ1は全てのnMOSトランジスタの第2ゲートに接続され、φ2は全てのpMOSトランジスタの第2ゲートに接続される。遷移は、クロックと組み合わされた場合に発生する。φ1及びφ2は重なり合わないので、pMOS及びnMOSトランジスタは、同時に中間的な抵抗値をとることがない。その構成は図180に示されている。
【1171】
最後に、通常のCMOSインバータは、重要なノンフラッシングCMOSコンポーネントの近傍に配置することができる。これらのインバータは上記のタンパー検出ラインからそれらの入力信号を取り出す。タンパー検出ラインは通常の動作回路の何倍も高速に動作するので、正味の影響は、ノンフラッシングCMOSコンポーネントの各々の場所付近に高いレートで生じる光バーストである。明るい光は、付近の弱い光の観測を邪魔するので、観測者は、チップそのものでどのようなスイッチング動作が行われているかを検出し得ない。これらの通常のCMOSインバータは、回路雑音の量を効果的に増加させ、SN比を低下させ、役に立つEMIを覆い隠す。
【1172】
ノンフラッシングCMOSの使用によって多数の副作用が現れる:
チップの実効速度は、1クロックサイクル当たりのクロック立ち上がり時間の2倍だけ減少する。これは、認証チップの場合、問題にならない;
ノンフラッシングCMOSによって引き出される電流量が減少する(なぜならば、短絡回路が現れないからである)。しかし、これは、通常のCMOSインバータの使用によって相殺される;
クロックの配線によってチップ面積が増加し、特に、φ1及びφ2の多数のバージョンが様々な伝搬のレベルを考慮に入れるために要求されるからである。チップ面積の推定量は通常の実装の2倍である;
認証チップのフラッシュしないエリアの設計は、通常のCMOS設計を用いた場合よりも多少複雑になる。特に、標準的なセルコンポーネントが使用できず、そのエリアがフルカスタム化されるからである。これは、認証チップのように小さいものの場合、特に、チップ全体をこの方法で保護しなくても構わないときには、問題にならない。
【1173】
可能な場所でのポリシリコン層内の配線
どこでも可能であれば、鍵又は秘密データが流れる配線は、ポリシリコン層内に作られるべきである。必要であれば、メタル1に設けられるが、決して(タンパー検出ラインを含む)最上部のメタル層に設けるべきではない。
【1174】
過小過多電力検出ユニット
各認証チップは、電源攻撃を妨げるため、過小過多電力検出ユニットが必要である。過小過多電力検出ユニットは、電源誤動作を検出し、電源レベルがある許容範囲に収まることを保証するため、電圧基準に対して電源レベルをテストする。このユニットは、単一の電圧基準と、2個のコンパレータを含む。過小過多電力検出ユニットは、リセットタンパー検出ラインに接続してもよく、これにより、トリガーされたときにリセットを引き起こす。過小過多電力検出ユニットの副作用は、電源遮断中に電圧が降下したとき、リセットがトリガーされ、作業レジスタを消去することである。
【1175】
テスト回路無し
認証チップ上のテストハードウェアは簡単に脆弱性を持ち込み得る。その結果として、認証チップは、BIST又はスキャンパスを含むべきではない。したがって、認証チップは外部テストベクトルを用いてテスト可能にされる。これは、認証チップが複雑ではないので実現可能である。
【1176】
ROM読み出し
この攻撃は、鍵がアドレス指定可能なROMに記憶されていることに依存する。各認証チップはその認証鍵を、アドレス指定可能なROMではなく内部フラッシュメモリに記憶しているので、この攻撃は無関係である。
【1177】
チップのリバースエンジニアリング
チップのリバースエンジニアリングは、認証の安全性がアルゴリズムに由来している場合に限り有用である。しかし、本発明の認証チップは、アルゴリズムの秘密性ではなく、秘密鍵に依存している。これに対して、本発明の認証アルゴリズムは公開されていて、いずれにしても、大量生産消耗品の攻撃者は、チップの内部の詳細な設計図を獲得する可能性があったと考えられる。これらの要因から見て、チップ自体のリバースエンジニアリングは、記憶されたデータとは対照的に、脅威ではない。
【1178】
認証プロセスの不当使用
この攻撃がとり得る形態は幾つかあり、各々の形態は成功の程度に違いがある。全てのケースにおいて、複製品製造者はシステム設計と消耗品設計の両方を入手できると考えられる。ある攻撃者は、認証コードを生成するのではなく、システムを騙して有効なコードを返すチップを構築しようとする。この攻撃は以下の二つの理由から実現不可能である。第1の理由は、システム認証チップ及び消耗品認証チップは、物理的には同じであるとしても、別々にプログラムされている点にある。特に、RDオペコード及びRNDオペコードは同一であり、WRオペコードとTSTオペコードも同様である。システム認証チップはRDコマンドを実行できない。なぜならば、全ての呼び出しは、RDではなく、RNDへの呼び出しとして解釈されるからである。この攻撃が失敗する第2の理由は、別々のシリアルデータラインがシステムからシステム認証チップ及び消耗品認証チップへ設けられるからである。その結果として、どちらのチップも、もう一方へ送信される内容、或いは、もう一方から受信される内容を見ることができないからである。攻撃者が、(消耗品残量をデクリメントする)WRコマンドを無視する複製チップを構築した場合、プロトコル3は、その後のRDがWRは出現しなかったことを検出することを保証する。システムは、したがって、消耗品を使用しなくなり、攻撃者を阻止する。これは、攻撃者が認証前に接触の欠損をシミュレートした場合にも成り立ち、認証が行われないので、消耗品の使用は発生しない。したがって、攻撃者は、複製消耗品が受け付けられるように各システムを変更する範囲に制限される。
【1179】
システムの変更
変更の最も簡単な方法は、システムの認証チップを、TSTへの呼び出し毎に成功だけを通知するチップと置き換えることである。これは、認証毎に何回もTSTを呼び出し、最初の数回は偽の値を与え、TSTからの失敗の通知を要求するシステムによって妨げられる。TSTへの最後の呼び出しは成功することが予想される。TSTの偽の呼び出しの回数は、RD、又はシステムクロックから戻された結果の一部分から決定してもよい。残念ながら、攻撃者は、単に、システムを書き換えることができるので、新しいシステム複製認証チップ53は、消耗品チップ又はクロックから返された結果を監視できる。複製システム認証チップは、監視された値がそのTST関数へ与えられたときに、成功しか返さない。複製消耗品はRDのハッシュ結果として任意の値を返すことができ、複製システムチップはその値を有効であることを明らかにする。したがって、システムがシステム認証チップを何回も呼び出しても意味がない。なぜならば、書き換え攻撃は、全てのシステムに対してではなく、再配線されたシステムだけに対して正しく動作するからである。システムに対する類似した攻撃の形態は、システムROMの取り替えである。ROMプログラムコードは、認証が行われることの無いように変更可能である。これに関しては何もできない。なぜならば、システムは消費者の手にあるからである。勿論、これはあらゆる保証を無効にするが、消費者は、複製消耗品が非常に安価であり、且つ本物の品物よりも簡単に入手できるのであれば、変更する価値があると考えるであろう。
【1180】
システム/消耗品製造者は、したがって、この種類の攻撃がどの程度起こり得るかを判断しなければならない。このような調査は、システム及び消耗品の価格構成、システムサービスの頻度、物理的な変更を加えたときの消費者の利益、消費者がその変更を実行するために出向く場所を当然に含む。システムを変更する限界のケースは、複製品製造者が、複製消耗品を必要とする完全な複製システムを提供する場合である。これは、単なる競合、又は特許権の侵害である。いずれにしても、これは認証チップの目的の範囲外であり、複製される技術やサービスに依存する。
【1181】
従来のプロービングによるチップ動作の直接視
チップ動作を視察するためには、チップは動作していなければならない。しかし、タンパー防止及び検出回路は、鍵を処理又は保持するチップの区域を覆う。これらの区域を、タンパー防止ラインを通して見ることは不可能である。攻撃者は、単にタンパー防止層を通してチップをスライスできない。なぜならば、そうすることによって、タンパー検出ラインが破断し、電源投入時に全ての鍵を消去するからである。単に消去回路を破壊するだけでは不十分である。なぜならば、認証チップ内の多数のユニットに供給される多数のChipOKビット(このとき全て0)は、チップの通常の動作回路の機能を停止させるからである。攻撃のためにチップをセットアップするためには、攻撃者は、タンパー検出ラインを削除し、フラッシュメモリの消去を停止し、ChipOKラインを信頼していたコンポーネントを何とかして書き換えることが必要である。たとえ、この全てを実行できたとしても、チップをこのレベルまでスライスする動作は、鍵を保持する不揮発性メモリ内の電荷パターンを殆ど破壊し、プロセスを無益にするであろう。
【1182】
不揮発性メモリの直接視
認証チップがフラッシュメモリのフローティングゲートを露出させるようにスライスされ、それらを放電させない場合、鍵は、おそらくSTM又はSKMを用いて直接視できるであろう。しかし、ゲートを放電させずにチップをこのレベルまでスライスすることは、おそらく不可能である。湿式エッチング、プラズマエッチング、イオンミリング、又は化学機械研磨は、ほぼ確実にフローティングゲート上に存在する小さい電荷を放出する。これは、通常のフラッシュメモリの場合に成り立つが、多重レベルフラッシュメモリの場合にはより確かである。
【1183】
状態変化によって生じる光バーストの監視
秘密鍵情報を操作する回路の全ての区域は、上記のノンフラッシングCMOSに実現される。これは、大部分の光バーストの放出を阻止する。ノンフラッシングCMOSの直ぐ近くに配置された通常のCMOSインバータは、キャパシタの充電及び放電によって生じる僅かな放射を見えなくする。インバータはタンパー検出回路に接続されるので、インバータは、ノンフラッシングCMOSの状態変化毎に何回も(高いクロックレートで)状態を変化する。
【1184】
EMIの監視
上記の雑音発生器は回路雑音を誘起する。雑音は、チップの通常の動作からの他の電磁放射を妨害し、内部データ転送の有意な読み出しが曖昧になる。
【1185】
dd 変動の監視
この種の攻撃に対するソリューションは、Idd信号におけるSN比を減少させることである。これは、回路の雑音量を増大させ、信号量を減少させることにより実現される。雑音発生器回路(これは、EMI攻撃に対する防御としても機能する)は、Idd中の重要な情報を目立たなくするため、サイクル毎に十分な状態変化を引き起こす。その上、チップの鍵を伝搬するデータパスの特別なノンフラッシングCMOS実装は、状態変化が生じたときに電流が流れることを阻止する。これは、信号量を減少させる利点がある。
【1186】
差分故障解析
差分故障ビット誤りは、イオン化、マイクロ波放射、又は環境ストレスによって、目標とした形ではなく、取り込まれる。この種の攻撃の最も起こりやすい影響は、フラッシュメモリの変更(無効な状態を引き起こす)又はRAMの変更(不良パリティ)である。無効な状態及び不良なパリティは、タンパー検出回路によって検出され、鍵の消去を生じさせる。タンパー検出ラインは鍵操作回路を覆うので、鍵操作回路に取り込まれたあらゆる誤りは、タンパー検出ラインの誤りによって反映される。タンパー検出ラインが影響されるならば、チップは、継続的にリセットをするか、又は単にパワーアップ時に鍵を消去し、攻撃を無益にする。目標としていない攻撃に頼り、「チップのちょうど良い部分がちょうど良い方法で影響を受ける」ことを望むのではなく、攻撃者は、(上書き攻撃、ゲート破壊等の)目標とした故障を持ち込むことをやってみる方がよい。
【1187】
クロック誤作動攻撃
(上記の)クロックフィルタはクロック誤動作攻撃の実現性を除外する。
【1188】
電源攻撃
(上記の)過小過大電力検出ユニットは電源攻撃の実現性を除外する。
【1189】
ROMの上書き
認証チップは、プログラムコード、鍵、及び秘密情報を、ROMではなく、フラッシュメモリに格納する。したがって、この攻撃は可能性がない。
【1190】
EEPROM/フラッシュの変更
認証チップは、プログラムコード、鍵、及び秘密情報をフラッシュメモリに格納する。しかし、フラッシュメモリは、2本のタンパー防止及び検出ラインによって覆われている。これらのラインの何れか一方が(ゲートを破壊するプロセスにおいて)破断されると、攻撃はパワーアップ時に検出され、各チップは、(連続的に)リセットするか、又はフラッシュメモリから鍵を消去する。しかし、たとえ、攻撃者が何とかしてフラッシュメモリのビットへアクセスし、特定のビットを保持しているゲートを破壊するか、若しくは、省くことができるとしても、これは、そのビットを強制的に無充電、又はフル充電の状態にする。これらはどちらも、認証チップの多重レベルフラッシュメモリの使用法では無効状態である(二つの中間状態だけが有効である)。データ値がフラッシュから転送されたとき、検出回路は、消去タンパー検出ラインをトリガーさせ、これにより、フラッシュメモリの残りの部分を消去し、チップをリセットする。したがって、EEPROM/フラッシュメモリの変更攻撃は無益である。
【1191】
ゲート破壊攻撃
ゲート破壊攻撃は、単一ゲートを変更し、動作中にチップに情報を暴露させる攻撃者の能力に依存している。しかし、秘密情報を操作する回路は、2本のタンパー防止及び検出ラインの一方によって覆われている。これらのラインの何れか一方が(ゲートを破壊するプロセスにおいて)破断されると、攻撃はパワーアップ時に検出され、各チップは、(連続的に)リセットするか、又はフラッシュメモリから鍵を消去する。この種の攻撃に出るためには、攻撃者は、最初に、どのゲートを目標にすべきかを決定するためにチップをリバースエンジニアリングしなければならない。目標ゲートの場所が決定された後、攻撃者は、保護しているタンパー検出ラインを破断し、フラッシュメモリの消去を停止し、ChipOKラインを信頼していたコンポーネントを何とかして書き換えることが必要である。回路の書き換えはチップをスライスすることなく実行できず、たとえ、実行できたとしても、チップをこのレベルまでスライスする動作は、鍵を保持する不揮発性メモリ内の電荷パターンを殆ど破壊し、プロセスを無益にするであろう。
【1192】
上書き攻撃
上書き攻撃は、鍵の個々のビットを、その前の値を知ることなく、セットし得ることに依存している。それは、従来のプロービング攻撃と同じようにチップをプロービングし、ゲート破壊攻撃と同じようにゲートを破壊することに依存する。これらの両方の攻撃は(それぞれのセクションで説明したように)タンパー防止及び検出回路とChipOKラインを使用しているので成功しない。しかし、たとえ、攻撃者が何とかしてフラッシュメモリのビットへアクセスし、特定のビットを保持しているゲートを破壊するか、若しくは、省くことができるとしても、これは、そのビットを強制的に無充電、又はフル充電の状態にする。これらはどちらも、認証チップの多重レベルフラッシュメモリの使用法では無効状態である(二つの中間状態だけが有効である)。データ値がフラッシュから転送されたとき、検出回路は、消去タンパー検出ラインをトリガーさせ、これにより、フラッシュメモリの残りの部分を消去し、チップをリセットする。同じように、RAMから読み出された改ざんされている値のパリティチェックによって、消去タンパー検出ラインがトリガーされる。したがって、上書き攻撃は無益である。
【1193】
残留メモリ攻撃
認証チップ内の作業用レジスタ又はRAMは、電源が取り外されたとき、認証鍵の一部を保持している。作業用レジスタ及びRAMは、電源の取り外し後、ある時間その情報を保持し続ける。チップがスライスされ、レジスタ/RAMのゲートが、それらを放電させることなく露出されたとき、データは、STMを使用して、おそらく直接視できるであろう。第1の防御は、上述の電源誤動作攻撃に対する防御の説明からわかる。電源が取り外されると、リセット状態がメモリのクリアを引き起こすのとちょうど同じように、全てのレジスタ及びRAMがクリアされる。この攻撃が成功する見込みは、フラッシュメモリの読み出しの見込みよりもひくり。RAM電荷は(本質的に)フラッシュメモリよりも簡単に失われる。RAMを明らかにするためのチップのスライス化は、(電荷が、単に、メモリがリフレッシュされていないこと、及びスライス化を実行するために要する時間を原因として失われていないとしても)確実に電荷を失わせる。したがって、この攻撃は無益である。
【1194】
チップ窃盗攻撃
認証チップの耐用期間には、区別可能なフェーズが存在する。チップは、以下のステージの何れかのときに盗まれる可能性がある:
製造後、鍵をプログラミングする前;
鍵のプログラミング後、状態データをプログラミングする前;
状態データのプログラミング後、消耗品又はシステムに挿入する前;
システム又は消耗品に挿入された後。
【1195】
チップ製造とプログラミングステーションの間の盗難は、複製品製造者にブランクチップを与えるだけである。これは、認証チップの販売を危うくするだけであり、認証チップによって認証されるものはない。プログラミングステーションは、消耗品及びシステム製品鍵をもつ唯一のメカニズムであり、複製品製造者はチップを正しい鍵でプログラミングできない。複製品製造者は、自分専用のシステム及び消耗品用にブランクチップをプログラミングすることは可能であるが、それらの品を見破られずに販売することは困難であろう。盗難の第2の形態は、認証チップが2以上の別個のプログラミングフェーズを通るような状況だけで起こり得る。これは起こり得るが、可能性は低い。いずれにしても、最悪の状況は、状態データがプログラミングされておらず、全てのMがリード/ライトになっている場合である。このケースでは、攻撃者はチップに対して適応的選択テキスト攻撃に出ることが可能である。HMAC−SHA1アルゴリズムはこの攻撃に対抗できる。盗難の第3の形態は、プログラミングステーションと取付工場との間で行われる。認証チップは、既に特定のシステム用、又は特定の消耗品用にプログラムされている。これらのチップの唯一の用途として、泥棒はこれらを複製システム又は複製消耗品に収容する。複製システムは見当違いであり、複製システムは認証チップ53を必要とさえしないであろう。複製消耗品の場合、このような盗難は、複製品の数を盗み取られたチップの数に制限する。1回の窃盗は、複製品製造者が費用対効果に優れたビジネスを行うために十分な供給数が得られない。盗難の最後の形態は、システム又は消耗品自体の盗難である。盗難が製造者側で発生した場合、物理的セキュリティプロトコルを強化しなければならない。盗難が他の場所で行われた場合、それは、その品の所有者、及び警察又は保険会社だけの問題である。認証チップが使用するセキュリティメカニズムは、消耗品及びシステムが一般の人の支配下にあることを前提としている。その結果として、それらが盗まれても、鍵の安全性に重大な影響はない。
【1196】
認証チップ設計
認証チップは、物理的及び論理的外部インタフェースをもつ。物理的インタフェースは認証チップをどのように物理的システムに接続できるかを規定し、論理的インタフェースはシステムがどのように認証チップと通信できるかを規定する。
【1197】
物理的インタフェース
認証チップは、小型の4ピンCMOSパッケージである(実際の内部サイズは、0.25μmフラッシュプロセスを使用する約0.30mmである)。4ピンは、グランド(GND)、クロック(CLK)、パワー(Power)、及びデータ(Data)である。パワーは公称電圧である。電圧が公称電圧からある量以上変動すると、チップはリセットする。推奨されるクロック速度は4から10MHzである。内部回路は、クロック信号をフィルタ処理し、安全最大クロック速度を超えないことを保証する。データは、シリアルデータラインに沿って、同時に1ビットずつ送受信される。チップは、パワーアップ時、パワーダウン時にリセットを実行する。その上、チップ内のタンパー検出及び防止回路は、攻撃が検出された場合、(検出された攻撃に応じて)チップをリセットさせるか、又はフラッシュメモリを消去させる。特殊プログラミングモードは、CLK電圧を特定レベルに保持することによってイネーブル状態にされる。これは次のセクションで更に説明される。
【1198】
論理的インタフェース
認証チップは、ノーマルモードとプログラミングモードの二つの動作モードを有する。二つのモードが必要になる理由は、動作プログラムコードは、(安全性の理由から)ROMではなくフラッシュメモリに記憶されるからである。プログラミングモードは、製造後にテスト目的のため使用され、動作プログラムコードを詰め込み、一方、ノーマルモードは、その後のチップの使用のために用いられる。
【1199】
プログラミングモード
プログラミングモードはCLKライン上に特定電圧を所定の時間だけ維持することによって有効にされる。チップがプログラミングモードに入るとき、全てのフラッシュメモリは消去される(全ての秘密鍵情報及びプログラムコードを含む)。認証チップは、次に、消去を検証する。消去が成功であるならば、認証チップは、新しいプログラムコードに対応した384バイトのデータを受け取る。バイトは、バイトからバイト383の順に転送される。ビットは、ビットからビットの順に転送される。384バイト全部のプログラムコードがロードされると、認証チップはハングする。消去が成功しなかった場合、認証チップは全くデータをフラッシュメモリにロードすることなくハングする。チップがプログラムされた後、チップを再スタートすることができる。チップがCLKライン上の通常電圧でリセットされたとき、ノーマルモードに入る。
【1200】
ノーマルモード
認証チップは、プログラミングモードではないときには、ノーマルモードである。認証チップがノーマルモードでスタートアップしたとき(例えば、パワーアップリセット)、認証チップは、そのときフラッシュメモリのプログラムコード領域に格納されているプログラムを実行する。プログラムコードは、システムと認証チップの間に通信メカニズムを組み込み、システムからのコマンド及びデータを受け取り、出力値を生成する。認証チップはシリアル通信をするので、ビットは同時に1ビットずつ転送される。システムは、簡単なオペレーションコマンドセットによって認証チップと通信する。各コマンドは3ビットオペコードによって定義される。オペコードの解釈は、IsTrustedビット及びIsWrittenビットの現在値に依存する。
【1201】
以下のオペレーションが定義される。
【1202】
【表130】
Figure 2004536736
Op=オペコード、T=IsTrusted値、W=IsWritten値、
Mn=ニューモニック、[n]=パラメータに必要なビット数。
【1203】
この表に定義されていないコマンドは、NOP(ノーオペレーション)として解釈される。その例には、(IsTrusted値又はIsWritten値とは無関係である)オペコード110及び111と、IsWritten=0のときのSSI以外のオペコードと、が含まれる。RD及びRNDのオペコードは同じであり、WR及びTSTのオペコードも同じであることに注意する必要がある。オペコードの受け取り後に動かされる実際のコマンドは、(IsWrittenが1である限り)IsTrustedビットの現在値に依存する。IsTrustedビットがクリアされているところでは、RD及びWR関数が呼び出される。IsTrustedビットがセットされると、RND及びTST関数が呼び出される。2組のコマンドは、信頼されている認証チップと信頼されていない認証チップとの間で相互に排他的である。認証チップ上でコマンドを実行するため、(システムのような)クライアントは、コマンドオペコードと、その後に続く、そのオペコードに必要な入力パラメータと、を送る。オペコードは、最下位ビットから最上位ビットまで送られる。例えば、SSIコマンドを送るため、ビット1、0及び0がこの順に送られる。各入力パラメータも同じ方法で送られ、最初に最下位ビットから送られ、最後に最上位ビットまでが送られる。戻り値はこの方法で読み出され、最初に最下位ビットが読まれ、最後に最上位ビットが読まれる。クライアントは獲得するビット数がわかっていなければならない。
【1204】
一部のケースでは、あるチップのコマンドからの出力ビットは、別のチップのコマンドへの入力ビットとしてそのまま供給される。この一例は、RNDコマンドとRDコマンドである。信頼された認証チップ上のRNDへの呼び出しからの出力ビットはシステムによって保持されなくてもよい。その代わりに、システムは、その出力ビットをそのまま信頼されない認証チップのRDコマンドの入力へ転送することができる。各コマンドの説明は、それがその場合であるかを示している。各コマンドは後続のセクションで詳細に検討される。一部のアルゴリズムは、常駐レジスタがフラッシュメモリに保持されているので、特別に設計されている。
【1205】
レジスタ
認証チップ内のメモリは認証プロトコルによって要求される変数を記憶するため不揮発性メモリを含む。以下の不揮発性メモリ(フラッシュ)変数が定義される。
【1206】
【表131】
Figure 2004536736
アーキテクチャ概要
このセクション・章は、認証チップの必要な機能を実装することができる専用CPUの上位定義を与える。このCPUは汎用CPUではないことに注意する必要がある。認証ロジックを実装するためオーダーメードされている。WRITE、TST、RND等のような認証チップのユーザが目にする認証コマンドは、CPU命令セットでかかれた小型プログラムとして全て実装される。CPUは、32ビットのアキュムレータ(殆どのオペレーションで使用される)と、多数のレジスタと、を含む。CPUは、認証ロジックを実装するため専用に仕立てられた8ビット命令を含む。各8ビット命令は、典型的に、4ビットのオペコードと、4ビットのオペランドと、により構成される。
【1207】
動作速度
内部クロック周波数リミッタユニットは、チップが所定の周波数よりも速い速度で動作することを防止する。この周波数は、製造中にチップに組み込まれ、変更不可である。この周波数は約4から10MHzであることが推奨される。
【1208】
コンポジション及びブロック図
認証チップは以下のコンポーネントを含む。
【1209】
【表132】
Figure 2004536736
図181は認証チップの概略ブロック図である。タンパー防止及び検出回路は図示されない。雑音発生器、過小過大電力検出ユニット、及びプログラミングモード検出ユニットは、タンパー防止及び検出回路に接続され、残りのユニットへは接続されない。
【1210】
メモリマップ
図182はメモリマップの一例を示す図である。認証チップは外部メモリを持たないが、内部メモリを有する。内部メモリは9ビットによってアドレス指定され、32ビット幅又は8ビット幅である(アドレスに依存する)。32ビット幅メモリは不揮発性データ、HAMC−SHA1のため使用される変数、及び定数を保持するため使用される。8ビット幅メモリは、プログラムと、プログラムによって使用される様々なジャンプテーブルと、を保持するため使用される。アドレス分割(予備メモリレンジを含む)はアドレス生成及び復号化を最適化するため設計される。
【1211】
定数
図183は定数メモリマップの一例の説明図である。定数領域は32ビット定数により構成される。これらは、(32ビットの全部が0、及び32ビットの全部が1のような)単純な定数、HAMCアルゴリズムによって使用される定数、並びに、SHA−1アルゴリズムで使用するため必要な定数y0−3及びh0−4である。これらの値はリセットによって影響を受けない。定数を利用する唯一のオペコードはLDKである。このケースでは、オペランド及びメモリ配置は、アドレス生成及び復号化を最小限に抑えるため、密接に関連付けられている。
【1212】
RAM
図184はRAMメモリマップの一例の説明図である。RAM領域は、認証チップの汎用機能のために必要な32個のパリティチェック付き32ビットレジスタを含むが、チップの動作中だけである。RAMは揮発性メモリであり、一旦電源が取り外されると、値は失われる。実際上、メモリは、(メモリ残留のために)その値をパワーダウン後のある時間は維持するが、パワーアップ後に利用可能であるとは考えられない。これは、この文書の他のセクションで記載されているセキュリティの問題である。RAMは、HMAC−SHA1アルゴリズムで使用される変数、即ち、A−E、一時変数T、160ビット作業用ハッシュ値のためのスペースH、(HMACによって要求される)ハッシュ結果の一時記憶のためのスペースB160、及び拡張ハッシングメモリの512ビット用のスペースXを含む。全てのRAM変数は、リセット後に0にクリアされるが、プログラムコードはこれを当てにしてはならない。RAMアドレスを利用するオペコードは、LD、ST、ADD、LOG、XOR及びPRLである。全てのケースで、オペランド及びメモリ配置は、アドレス生成及び復号化を最小限に抑えるため、密接に関連付けられている(マルチワード変数は最上位ワードが先に格納される)。
【1213】
フラッシュメモリ−変数
図185はフラッシュメモリ変数メモリマップの一例の説明図である。フラッシュメモリ領域は、認証チップ内の不揮発性情報を格納する。フラッシュメモリは、電源の取り外し後もその値を維持し、次に電源が入れられたとき、変化していないことが期待できる。マルチステートフラッシュメモリに保持された不揮発性情報は、2個の160ビット鍵(K及びK)と、現在ランダム値(R)と、状態データ(M)と、MinTicks値(MT)と、AccessMode値(AM)と、IsWritten(ISW)フラグと、IsTrusted(IST)フラグと、を含む。フラッシュ値は、リセットによって変わらないが、プログラミングモードに入ったときに(0に)クリアされる。フラッシュアドレスを利用するオペレーションは、LD、ST、ADD、PRL、ROR、CLR及びSETである。全てのケースで、オペランド及びメモリ配置は、アドレス生成及び復号化を最小限に抑えるため、密接に関連付けられている。マルチワード変数K、K及びMは、アドレッシングの必要条件のため、最上位ワードから先に格納される。使用されるアドレッシングスキームは、Nで始まり、0で終わるインデックスによるベースアドレスオフセットである。このようにして、Mは最初にアクセスされるワードであり、Mは、ループ処理でアクセスされる最後の32ビットワードである。マルチワード変数Rは、同じインデキシングスキームを使用するLFSR生成を簡単にするため、最下位ワードから先に格納される。
【1214】
フラッシュメモリ−プログラム
図186はフラッシュメモリのプログラムメモリマップの一例の説明図である。第2のマルチステートフラッシュメモリ領域は、384×8ビットである。この領域は、JSR、JSI及びTBR命令のためのアドレステーブルと、DBRコマンド用のオフセットと、定数と、プログラム自体と、を格納する。フラッシュメモリは、リセットによって変わらないが、プログラミングモードに入ったときに(0に)クリアされる。一旦、プログラミングモードに入ると、8ビットフラッシュメモリに、新しい384バイトの組をロードすることができる。これが終了すると、チップはリセットされ、通常のチップ動作が行われる。
【1215】
レジスタ
多数のレジスタが認証チップに定義される。それらは、関数実行中に一時記憶として使用される。一部は算術関数用であり、他の一部はカウンティング及びインデキシングに使用され、その他はシリアルI/Oのため使用される。これらのレジスタは不揮発性(フラッシュ)メモリに保持しなくてもよい。それらは、(フラッシュメモリとは異なり)消去サイクル無しで読み出し又は書き込みをすることができる。秘密情報を格納する一時記憶レジスタは、タンパー防止及び検出回路並びにパリティチェックによって、物理的攻撃から保護されなければならない。全てのレジスタはリセット後に0にクリアされる。しかし、プログラムコードは特定の状態を前提とすべきではなく、レジスタ値を適切に設定すべきである。これらのレジスタは、タンパー防止及び検出回路のために定義された様々なOKビットを含まなくてもよいことに注意する必要がある。OKビットは種々のユニットに散在され、リセット後に1にセットされる。
【1216】
サイクル
1ビットサイクル値は、CPUがフェッチサイクル(0)であるか、実行サイクル(1)であるかを決める。サイクルは、実際には、前のサイクル値を保持する1ビットレジスタから得られる。サイクルは命令セットから直接アクセスできない。それは内部レジスタ専用である。
【1217】
プログラムカウンタ
6レベルの深さの9ビットプログラムカウンタアレイ(PCA)が定義される。それは、3ビットスタックポインタ(SP)によってインデキシングされる。現在プログラムカウンタ(PC)は、現在実行中命令のアドレスを格納し、事実上、PCA[SP]である。更に、9ビットAdrレジスタが定義され、(インデックス付きアクセス、又は間接メモリアクセスのための)現在メモリ基準の分解アドレスを格納する。PCA、SP及びAdrレジスタは、命令セットから直接アクセスできない。これらは内部レジスタ専用である。
【1218】
CMD
8ビットCMDレジスタは、現在実行中のコマンドを保持するため使用される。CMDレジスタレジスタは命令セットから直接アクセス不可であるが、内部レジスタ専用である。
【1219】
アキュムレータ及びZフラグ
アキュムレータは32ビット汎用レジスタである。これは、算術演算への入力の一つとして使用され、メモリレジスタ間で情報を転送するため使用されるレジスタである。Zレジスタは1ビットフラグであり、アキュムレータが書き込まれるときに更新される。Zレジスタはアキュムレータの零性を格納する。アキュムレータに最後に書き込まれた値が0であるならば、Z=1であり、最後に書き込まれた値が非0であるならば、Z=0である。アキュムレータとZレジスタの両方は命令セットから直接アクセス可能である。
【1220】
カウンタ
多数の専用カウンタ/インデックスレジスタが定義される。
【1221】
【表133】
Figure 2004536736
これらの全てのカウンタ・レジスタは、命令セットから直接アクセス可能である。これらに特定の値をロードするための専用命令が存在し、別の命令は、それらをデクリメント又はインクリメントし、或いは、特定のカウンタが零であるかどうかに応じて分岐する。2個の専用フラグ(レジスタではない)がC1及びC2に関連付けられ、これらのフラグはC1又はC2の零性を保持する。これらのフラグは、ループ制御のために使用され、以下に列挙される。これれのフラグはレジスタではないが、レジスタと同様にテストできる。
【1222】
【表134】
Figure 2004536736
フラグ
CPU動作モードに対応する多数の1ビットフラグが定義される。
【1223】
【表135】
Figure 2004536736
これらの全ての1ビットフラグは命令セットから直接アクセス可能である。専用命令がこれらのフラグをセット及びクリアするため設けられる。
【1224】
書き込み完全性のため使用されるレジスタ
【1225】
【表136】
Figure 2004536736
I/Oのため使用されるレジスタ
4個の1ビットレジスタがクライアント(システム)と認証チップの間の通信のため定義される。これらのレジスタは、InBit(入力ビット)、InBitValid(入力ビット有効)、OutBit(出力ビット)、及びOutBitValid(出力ビット有効)である。InBit及びInBitValidは、クライアントがコマンド及びデータを認証チップへ送るための手段を提供する。OutBit及びOutBitValidはクライアントが認証チップから情報を受けるための手段を提供する。クライアントは、コマンド及びパラメータビットを、同時に1ビットずつ認証チップへ送る。認証チップはスレーブ装置であるため、認証チップの観点では:
InBitからの読み出しは、InBitValidがクリアされている間はハングする。InBitValidは、クライアントが次の入力ビットをInBitに書き込むまでクリアされたままである。InBitの読み出しはInBitValidビットをクリアし、次のInBitをクライアントから読み出せるようになる。クライアントは、InBitValidビットがクリアされるまでビットを認証チップに書き込めない;
OutBitへの書き込みは、OutBitValidがセットされている間はハングする。OutBitValidは、クライアントがOutBitからビットを読み出すまでセットされたままである。OutBitの書き込みはOutBitValidビットをセットし、次のOutBitをクライアントが読み出せるようにする。クライアントは、OutBitValidビットがセットされるまで認証チップからビットを読み出せない。
【1226】
タイミングアクセスのため使用されるレジスタ
1個の32ビットレジスタがタイマーとして使用するため定義される。MTR(MinTicksRemaining)レジスタは、命令が実行されると、その都度デクリメントする。MTRレジスタが0になると、それは零に留まる。MTRは1ビットフラグMTRZに関連付けられ、MTRZはMTRの零性を格納する。MTRZが1であるならば、MTRレジスタは零である。MTRZが0であるならば、MTRレジスタは未だ零ではない。MTRは(リセット後、又は特定の鍵アクセス関数後)常にMinTicks値から始まり、最終的に0まで減少する。MTRをセットし、MTRZを専用命令でテストすることができるが、MTRの値は命令によって直接読み出せない。
【1227】
レジスタの要約
以下のテーブルは(レジスタ名の順に)全ての一時レジスタを要約する。そのテーブルは、レジスタ名と、サイズ(ビット単位)と、その指定されたレジスタがどこにあるかを列挙する。
【1228】
【表137】
Figure 2004536736
命令セット
CPUは、認証ロジックを実現するため特別に用意された8ビット命令で動作する。8ビット命令の大半は、4ビットオペコードと、4ビットオペランドと、により構成される。上位4ビットはオペコードを含み、下位4ビットがオペランドを含む。
【1229】
オペコード及びオペランド(要約)
オペコードは以下の表に要約されている。
【1230】
【表138】
Figure 2004536736
以下の表は、どのオペランドがどのオペコードと共に使用できるかを要約した表である。この表は、オペコードのニューモニックによってアルファベット順に並べられている。各オペランドのバイナリ値は、その次の表に示されている。
【1231】
【表139】
Figure 2004536736
以下のオペランド表は、4ビットオペランドの解釈を示し、全ての4ビットが直接解釈のため使用されている。
【1232】
【表140】
Figure 2004536736
以下の命令は、オペランドの最上位ビットに基づいて選択を行う。
【1233】
【表141】
Figure 2004536736
オペランドの下位3ビットは、オフセット(DBR,TBR)か、専用テーブル(SC)からの値であるか、LOGの場合のように、それらは論理演算のための第2の入力を選択する。解釈は、ADD、LD、及びSTオペコードの解釈と一致する。
【1234】
【表142】
Figure 2004536736
ADD−アキュムレータへの加算
ニューモニック: ADD
オペコード: 1000
用法: ADD 値。
【1235】
ADD命令は、指定されたオペランドを、モジュロー232の加法でアキュムレータに加算する。オペランドは、A、B、C、D、E、T、AM、MT、AE[C1]、H[C1]、B160[C1]、R[C1]、K[C1]、M[C1]、又はX[N4]のうちの一つである。また、Zフラグはこの演算中に、ロードされた値が零か非零かに応じてセットされる。
【1236】
CLR−ビットをクリア
ニューモニック: CLR
オペコード: 0110
用法: CLR フラグ/レジスタ。
【1237】
CLR命令は、指定された内部フラグ、又はフラッシュメモリレジスタをクリアさせる。フラッシュメモリのケースでは、CLR命令はある時間を要するが、次の命令は、フラッシュメモリの消去が終了するまで引き延ばされる。クリアできるレジスタは、WE及びK2MXである。クリアできるフラッシュメモリは、R、M[C1]、Group1、及びGroup2である。Group1は、IST及びISWフラグである。それらがクリアされると、唯一の有効な上位レベルコマンドはSSI命令である。Group2は、MT、AM、K1及びK2レジスタである。Rは別個に消去される。なぜならば、RはTSTへの呼び出し毎に更新されるからである。また、Mは、インデックスメカニズムによって消去され、Mの個々の部分を更新することができる。また、対応したSET命令がある。
【1238】
DBR−デクリメント及びブランチ
ニューモニック: DBR
オペコード: 0001
用法: DBR カウンタ、オフセット。
【1239】
この命令は、簡単なループを構築するメカニズムを提供する。オペランドのハイビットは、C1のテストか、C2のテスト(2個のカウンタ)を選択する。指定されたカウンタが非零であるならば、カウンタはデクリメントされ、所定のオフセットの値(符号拡張)がPCに加算される。指定されたカウンタが零であるならば、カウンタはデクリメントされ、処理はPC+1で継続する。8エントリーのオフセットテーブルがアドレス011000000(プログラムメモリの64番目のエントリー)に格納される。オフセットの8ビットは符号付き数として取り扱われる。このようにして、0xFFは−1として扱われ、0x01は+1として取り扱われる。典型的に、その値はループで使用するため負である。
【1240】
JSI−サブルーチン間接ジャンプ
ニューモニック: JSI
オペコード: 01001
用法: JSI(Acc)。
【1241】
JSI命令は、アキュムレータの現在値に依存したサブルーチンへのジャンプを可能にさせる。この命令は、現在PCをスタックへプッシュし、PCに新しい値をロードする。新しいPCの上位8ビットはジャンプテーブル2からロードされ(オフセットはアキュムレータの下位5ビットによって与えられる。)、PCの最下位ビットは0にクリアされる。このようにして、全てのサブルーチンは偶数アドレスでスタートしなければならない。スタックは、6個の実行レベル(5回のサブルーチン深さ)を提供する。プログラマは、この深さを超えないこと、又は戻り値が上書きされること(スタックがラップするため)を保証する責任がある。
【1242】
JSR−サブルーチンジャンプ
ニューモニック: JSR
オペコード: 001
用法: JSR オフセット。
【1243】
JSR命令は、最も一般的なサブルーチン構造の用法を提供する。この命令は、現在PCをスタックへプッシュし、PCに新しい値をロードする。新しいPCの上位8ビットはアドレステーブル1から与えられ、テーブルへのオフセットは5ビットオペランド(32通りのアドレスを実現できる)によって与えられる。PCの最下位ビットは0にクリアされる。このようにして、全てのサブルーチンは偶数アドレスでスタートしなければならない。スタックは、6個の実行レベル(5回のサブルーチン深さ)を提供する。プログラマは、この深さを超えないこと、又は戻り値が上書きされること(スタックがラップするため)を保証する責任がある。
【1244】
LD−アキュムレータへのロード
ニューモニック: LD
オペコード: 1011
用法: LD 値。
【1245】
LD命令は、指定されたオペランドからアキュムレータにロードする。オペランドは、A、B、C、D、E、T、AM、MT、AE[C1]、H[C1]、B160[C1]、R[C1]、K[C1]、M[C1]、又はX[N4]のうちの一つである。また、Zフラグはこの演算中に、ロードされた値が零か非零かに応じてセットされる。
【1246】
LDK−定数のロード
ニューモニック: LDK
オペコード: 1110
用法: LDK 定数。
【1247】
LDK命令は、アキュムレータに指定された定数をロードする。定数は、HMAC−SHA1のために必要な32ビット値と、汎用処理のために最も有用な全て0及び全て1と、である。したがって、
0x00000000
0x36363636
0x5C5C5C5C
0xFFFFFFFF
又は、C1でインデックス付けされたh及びy定数テーブルからの選択肢がある。hとyの定数テーブルは、HMAC−SHA1に必要な32ビットの表形式の定数を保持する。また、Zフラグはこの演算中に、ロードされた値が零か非零かに応じてセットされる。
【1248】
LOG−論理演算
ニューモニック: LOG
オペコード: 1001
用法: LOG 演算 値。
【1249】
LOG命令は、アキュムレータと指定された値に対して、32ビットのビット論理演算を実行する。LOG命令によってサポートされる2個の演算は、AND及びORである。ビットNOT及びXOR演算は、XOR命令によってサポートされる。アキュムレータとAND演算又はOR演算される32ビット値は、A、B、C、D、E、T、MT及びAMのうちの一つである。また、Zフラグはこの演算中に、(アキュムレータにロードされる)得られた32ビット値が零か非零かに応じてセットされる。
【1250】
ROR−右回転
ニューモニック: ROR
オペコード: 1100
用法: ROR 値。
【1251】
ROR命令は、アキュムレータを設定されたビット数だけ右へ回転する方法を提供する。アキュムレータの最上部に現れるビット(ビット31になる)は、アキュムレータの前のビット0の値でもよく、又は(フラグ、又はシリアル入力コネクションのような)外部1ビットフラグからでもよい。回転して溢れたビットはシリアルコネクションから出力してもよく、又は外部フラグと結合してもよい。許容されるオペランドは、InBit、OutBit、LFSR、RLFSR、IST、ISW、MTRZ、1、2、27、及び31である。また、Zフラグはこの演算中に、(アキュムレータにロードされる)得られた32ビット値が零か非零かに応じてセットされる。最も簡単な形式では、ROR命令用のオペランドは、アキュムレータを回転させるビット位置数を示す1、2,27、31のうちの一つである。これらのオペランドの場合、外部入力又は出力はなく、アキュムレータのビットが単に右へ回転させられる。オペランドがIST、ISW及びMTRZの場合、適切なフラグがアキュムレータの最上位ビットへ転送される。アキュムレータの残りの部分は、1ビット位置だけ右へシフトされ(ビット31がビット30になる等)、アキュムレータの最下位ビットはシフトされて溢れる。オペランドがInBitである場合、次のシリアル入力ビットがアキュムレータの最上位ビットへ転送される。次に、InBitValidビットはクリアされる。クライアントから入力ビットが得られない場合、実行は入力ビットが現れるまで一時停止される。アキュムレータの残りの部分は、1ビット位置だけ右へシフトされ(ビット31がビット30になる等)、アキュムレータの最下位ビットはシフトされて溢れる。
【1252】
オペランドがOutBitである場合、アキュムレータは右へ1ビット位置だけシフトされる。ビット0からシフトで送り出されたビットはOutBitフラグに格納され、OutBitValidフラグがセットされる。したがって、それは、クライアントによる読み出しの準備が完了する。OutBitValidフラグが既にセットされている場合、命令の実行は、OutBitがクライアントによって読み出される(そして、OutBitValidフラグがクリアされる)まで引き延ばされる。ビット31へシフトされた新しいビットはガーベッジ(実際には、現在のInBitレジスタの値)であると考えられる。最後に、RB及びXBRオペランドは、LFSRと倍精度シフトレジスタの実装を可能にさせる。RBの場合、シフトで送り出されたビット(形式的にビット0)は、RTMPレジスタに書き込まれる。RTMPレジスタの現在のレジスタはアキュムレータの新しいビット31になる。数個の32ビット値に複数のROR RBコマンドを実行すると、倍精度の右回転/シフトが実現される。XRBは、RBと同様に動作し、RTMPレジスタの現在値がアキュムレータオン新しいビット31になる。しかし、XRB命令の場合、形式的にビット0であることが分かっているビットは、(RB命令の用に)単純にRTMPを置き換えない。その代わりに、そのビットはXORとRTMP演算され、その結果がRTMPに格納される。これにより、認証プロトコルによって要求される長いLFSRを実現できる。
【1253】
RPL−ビット置換
ニューモニック: RPL
オペランド: 1101
用法: ROR 値。
【1254】
RPL命令は、上位レベルWRITEコマンドを認証チップに組み込むため設計された。この命令は、アキュムレータの上位16ビットを、(アクセスモード値に依存して)最終的にMアレイに書き込まれた値で置き換えることを予定している。この命令は、3個のオペランド:Init、MHI及びMLOをとる。Initオペランドは、全ての内部フラグをセットし、後続の処理のためALU内のRPLユニットを準備する。アキュムレータは内部AccessModeレジスタへ転送される。アキュムレータは、WRITEコマンドを実行する場合には、RPL Initへの呼び出しの前に、AMフラッシュメモリ場所からロードされるべきであり、TSTコマンドを実行する場合には、0でロードされるべきである。アキュムレータはそのまま変化しない。MHI及びMLOオペランドは、M[C1]の上位16ビット又は下位16ビットが(常に)アキュムレータの上位16ビットとの比較に使用されるかどうかを参照する。実行されるMHI及びMLO命令の各々は、初期化されたAccessMode値からの引き続く2ビットを使用する。最初のMHI又はMLOの実行は最下位2ビットを使用し、次の実行はその次の2ビットを使用し、以下同様である。
【1255】
RTS−サブルーチンからのリターン
ニューモニック: RTS
オペコード: 01000
用法: RTS。
【1256】
RTS命令は、直前に実行されたJSR又はJSI命令の後の命令で実行を再開させる。したがって、サブルーチンからの復帰と呼ばれる。実際には、この命令は、セーブされたPCをスタックからプルし、1を加え、得られたアドレスから実行を再開する。6個の実行レベル(5回のサブルーチン)が提供されるが、JSR及びJSI命令の各々と、RTSを合わせることはプログラマの責任である。先行するJSR無しに実行されたRTSは、スタックからプルされたアドレスから実行を開始させる。
【1257】
SC−カウンタセット
ニューモニック: SC
オペコード: 0101
用法: SC カウンタ 値。
【1258】
SC命令はカウンタに特定の値をロードするため使用される。オペランドは、カウンタC1とC2のうちのどちらにロードするかを決める。ロードされるべき値は、2、3、4、7、10、15、19及び31のうちの一つである。カウンタ値は、ループ処理及びインデックス処理のため使用される。C1とC2の両方は、(DBR命令と組み合わされたとき)ループ構造のため使用されるが、一方、C1だけが倍精度変数の32ビット部分をインデックス付けするため使用できる。
【1259】
SET−ビットセット
ニューモニック: SET
オペコード: 0111
用法: SET フラグ/レジスタ。
【1260】
SET命令は、特定のフラグ又はフラッシュメモリの設定を可能にさせる。また、対応したCLR命令がある。WEオペランド及びK2MXオペランドの各々は、後の処理のため指定されたフラグをセットする。ISTオペランド及びISWオペランドの各々は、フラッシュメモリの適切なビットをセットし、一方、MTRオペランドはアキュムレータの現在値をMTRレジスタへ転送する。SET Nxコマンドは、N1からN4に以下の定数をロードする。
【1261】
【表143】
Figure 2004536736
参照される各初期X[N]は、最適化されたSHA−1アルゴリズムのインデックスN1からN4に対する初期状態と一致することに注意すべきである。各インデックス値Nがデクリメントするとき、有効なX[N]がインクリメントする。なぜならば、X個のワードは、最上位ビットの方からメモリに格納されるからである。
【1262】
ST−アキュムレータを保存
ニューモニック: ST
オペコード: 1111
用法: ST ロケーション。
【1263】
ST命令は、アキュムレータの現在値を指定されたロケーションに格納する。ロケーションは、A、B、C、D、E、T、AM、MT、AE[C1]、H[C1]、B160[C1]、R[C1]、K[C1]、M[C1]、又はX[N4]のうちの一つである。X[N4]オペランドはN4インデックスを進める副作用がある。格納が行われた後、N4はXアレイの次の要素を指示する。N4は1ずつデクリメントされるが、Xアレイはハイからローへ並べられているので、インデックスをデクリメントすると、アレイ内の次の要素へ進む。格納先がフラッシュメモリである場合、ST命令の効果は、アキュムレータ内のビットに対応したフラッシュメモリのビットがセットされることである。アキュムレータからの正確な値が格納されることを保証するために、適切なメモリロケーションを先に消去するCLR命令を確実に使用すべきである。
【1264】
TBR−テスト及びブランチ
ニューモニック: TBR
オペコード: 0000
用法: TBR 値 インデックス。
【1265】
テスト及びブランチ命令は、アキュムレータが零か非零かをテストし、アキュムレータの現在状態がテスト相手の状態と一致しているならば、所与のアドレスへ分岐する。ZフラグがTRBテストと一致するならば、PCを9ビット値で置き換え、ここで、bit0=0であり、上位8ビットはMUから与えられる。そうでなければ、PCを1だけインクリメントする。値オペランドは0又は1である。0は、アキュムレータが零であることについてのテストであることを示す。1は、アキュムレータが非零であることについてのテストであることを示す。インデックスオペランドは、テストが成功したときに実行をジャンプさせる場所を示す。オペランドインデックスの残りの3ビットはジャンプテーブル1の最下位8エントリーをインデックス付けする。上位8ビットはテーブルから取り出され、最下位ビット(ビット0)は0にクリアされる。CMDはリセット時に0にクリアされる。0はTBR0として翻訳され、これは、アキュムレータ=0である場合に、アドレスオフセット0に格納されたアドレスへ分岐することを意味する。アキュムレータ及びZフラグもリセット時にクリアされるので、テストが真であり、正味の効果はジャンプテーブルの0番目のエントリーに格納されたアドレスへのジャンプである。
【1266】
XOR−排他的論理和
ニューモニック: XOR
オペコード: 1010
用法: XOR 値。
【1267】
XOR演算は、アキュムレータとの32ビットのビットXORを実行し、結果をアキュムレータに格納する。オペランドは、A、B、C、D、E、T、AM、MT、X[N1]、X[N2]、X[N3]又はX[N4]のうちの一つである。また、Zフラグは、結果に応じて(即ち、アキュムレータにロードされた値に応じて)、この演算中にセットされる。ビットNOT演算は、(LDK命令を用いて)アキュムレータを0xFFFFFFFFとXOR演算することによって実行される。X[N]オペランドは、(演算後に)適切なインデックスを次の値へ進める副作用がある。XORが行われた後、インデックスはXアレイの次の要素を指示する。N4は、ST X[N4]命令によって進められる。インデックスは1ずつデクリメントされるが、Xアレイはハイからローへ並べられているので、インデックスをデクリメントすると、アレイ内の次の要素へ進む。
【1268】
プログラミングモード検出ユニット
プログラミングモード検出ユニットは入力クロック電圧を監視する。クロック電圧が特定の値であるならば、消去タンパー検出ラインはトリガーされ、全ての鍵、プログラムコード、秘密情報等を消去し、プログラムモードに入る。プログラミングモード検出ユニットは通常のCMOSを用いて実装可能である。なぜならば、鍵はこのユニットを通過しないからである。このユニットはノンフラッシングCMOSで実現しなくてもよい。プログラミングモード検出ユニットをタンパー検出ラインで覆うべき特別の必要性はない。なぜならば、攻撃者は、CLR入力によってチップをプログラミングモードに移すことができるからである。プログラミングモードへ入るための信号として、消去タンパー検出ラインを使用することは、攻撃者が攻撃の一部としてプログラミングモードを使用したい場合に、消去タンパー検出ラインをアクティブにし、且つ機能させなければならないことを意味する。これは、認証チップへの攻撃を非常に困難にさせる。
【1269】
雑音発生器
雑音発生器は通常のCMOSで実現できる。なぜならば、鍵はこのユニットを通らないからである。このユニットはノンフラッシングCMOSで実現しなくてもよい。しかし、雑音発生器は、両方のタンパー検出及び保護ラインで保護されるべきであり、この結果として、攻撃者がこのユニットを改ざん使用とする場合、チップは、リセットするか、又は全ての秘密情報をクリアする。その上、LFSRのビットは、それらが改ざんされていないことを保証するため検証されるべきである(即ち、パリティチェック)。パリティチェックが失敗した場合、消去タンパー検出ラインがトリガーされる。最後に、雑音発生器の64ビット全部が単一ビットにOR演算される。このビットが0であるならば、消去タンパー検出ラインがトリガーされる。なぜならば、0はLFSRの無効状態だからである。OKビットセットアップを使用することは意味がない。なぜならば、雑音発生器はタンパー検出及び防止回路だけによって使用されるからである。
【1270】
状態機械
状態機械は、CPUの二つの動作サイクルを生成し、長いコマンドオペレーション中に引き延ばしを行い、オペレーティングサイクル中にオペコード及びオペランドを記憶する。状態機械は通常のCMOSで実現可能であり、その理由は、鍵がこのユニットを通らないからである。このユニットはノンフラッシングCMOSで実現しなくてもよい。しかし、オペコード/オペランドのラッチは、パリティチェックされるべきである。状態機械に格納されるロジック及びレジスタは、両方のタンパー検出ラインによって覆われるべきで
ある。これは、実行される命令が攻撃者によって変更されないことを保証する。
【1271】
認証チップは、汎用CPUの高速性及びスループットを要求しない。それは、認証プロトコルを実行できる速さで動作すればよく、それ以上に高速である必要はない。分岐制御を最適化し、又は次のオペコードをフェッチしている間にオペコードを実行する専用回路(及び、それに関連した全ての複雑さ)を具備するよりは、状態機械は、単純化した考え方を採用する。これは、設計時間を最小限に抑え、実装にエラーが起こる可能性を低減することに役立つ。
【1272】
状態機械の一般的な動作は、以下のサイクルの組を生成することである:
サイクル0:フェッチサイクル。これは、オペコードがプログラムメモリからフェッチされ、フェッチされたオペコードから実効アドレスが生成されるサイクルである;
サイクル1:実行サイクルこれは、オペランドが(サイクル0で)生成された実効アドレスによってルックアップされ(かもしれない)、オペレーション自体が実行されるサイクルである。
【1273】
正常な条件下で、状態機械は、サイクル:0、1、0、1、0、1...を生成する。しかし、あるケースでは、状態機械は、引き延ばしを行い、引き延ばし条件が終了するまで、各クロックチックでサイクル0を生成する。引き延ばし条件には、フラッシュサイクルの消去サイクル待ち、クライアントのシリアルデータの読み書きの待機、又は(タンパーリングによる)無効オペコード等が含まれる。フラッシュメモリがそのとき消去中であるならば、次の命令は、フラッシュメモリが消去され尽くすまで実行できない。これは、メモリユニットから送られるWait信号によって判定される。Wait=1であるならば、状態機械はサイクル0だけを生成する。シリアルI/O動作を原因とする引き延ばしには、2通りのケースがある:
オペコードがROR OutBitであり、既にOutBitValid=1であるケース。これは、現在オペレーションは、ビットをクライアントへ出力することを要求するが、クライアントは最後のビットを未だ読み出していないケースである;
オペレーションがROR InBitであり、InBitValid=0であるケース。これは、現在オペレーションがクライアントからのビットの読み出しを要求するが、クライアントが未だそのビットを供給していないケースである。
【1274】
両方のケースで、状態機械は、引き延ばし条件が終了するまで引き延ばしをしなければならない。したがって、次の「サイクル」は、古いサイクル又は前のサイクルと、CMD、Wait、OutBitValid、及びInBitValidの現在値と、に依存する。WaitはMUに由来し、OutBitValid及びInBitValidはI/Oユニットに由来する。サイクルが0であるとき、8ビットオペコードはメモリユニットからフェッチされ、8ビットCMDレジスタに収容される。CMDレジスタの書き込みイネーブルは、−サイクルである。このユニットからの二つの出力は、サイクルとCMDである。両方の値は、認証チップ内の他の全ての処理ユニットへ渡される。1ビットのサイクル値は、各ユニットにフェッチ又は実行サイクルが行われているかどうかを報せ、一方、8ビットのCMDは、各ユニットが特定のユニットに関連したコマンドのための適切な動作を行えるようにする。
【1275】
図187は、状態機械のコンポーネント間のデータフロー及び関係を示す図であり、同図では、
【1276】
【表144】
Figure 2004536736
である。
【1277】
Old及びCMDは、共にリセットで0にクリアされる。この結果によって第1のサイクルは1であり、これは、0CMDを実行させる。0はTBR 0として翻訳され、即ち、Accmulator=0ならば、アドレスオフセット0に格納されたアドレスへ分岐する。アキュムレータもリセットで0にクリアされるので、テストは真であり、正味の効果はジャンプテーブルの0番目のエントリーに格納されたアドレスへのジャンプである。2個のVALユニットがそれらを通過する値を検証するため設計される。各VALは、両方のタンパー防止及び検出ラインに接続されたOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー防止及び検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。VALの場合、チップが改ざんされたならば、実効サイクルは常に0である。このようにして、決してサイクル1にならないので、プログラムコードは実行されない。Oldが改ざんされたかどうかを検査する必要はない。なぜならば、攻撃者がOld状態を止めるならば、チップはそれ以上命令を実行しないからである。VALの場合、実効8ビットCMD値は、チップ改ざんされたならば、常に0であり、これは、TBR 0命令である。これは、あらゆるプログラムコードの実効を停止する。VALは、CMDが改ざんされていないことを保証するため、CMDからのビットにパリティチェックを行う。パリティチェックが失敗したならば、消去タンパー検出ラインがトリガーされる。
【1278】
I/Oユニット
I/Oユニットは外界とシリアル通信する。認証チップは、スレーブシリアル装置として動作し、クライアントからのシリアルデータを受け取り、コマンドを処理し、得られたデータをクライアントへシリアル送信する。I/Oユニットは通常のCMOSで実現できる。なぜならば、鍵がこのユニットを通らないからである。このユニットはノンフラッシングCMOSで実現しなくてもよい。更に、ラッチはパリティチェックしなくてもよい。なぜならば、攻撃者にとってそれらを破壊又は変更する利益がないからである。I/Oユニットは、タンパー検出ラインの何れかが破断された場合、0を出力し0を入力する。これは、攻撃者がリセット及び/又は消去回路を動作禁止状態にした場合に限り有効になる。なぜならば、タンパー検出ラインの何れかを破断することは、リセット又は全フラッシュメモリの消去を生じるからである。
【1279】
InBit、InBitValid、OutBit、及びOutBitValidの1ビットレジスタは、クライアント(システム)と認証チップとの間の通信のため使用される。InBit及びInBitValidは、クライアントがコマンド及びデータを認証チップへ送る手段を提供する。OutBit及びOutBitValidは、クライアントが認証チップから情報を得る手段を提供する。チップがリセットされたとき、InBitValid及びOutBitValidは共にクリアされる。クライアントは、同時に1ビットずつ、コマンド及びパラメータビットを認証チップへ送る。認証チップの観点では:
InBitからの読み出しは、InBitValidがクリアされている間はハングする。InBitValidは、クライアントが次の入力ビットをInBitに書き込むまでクリアされたままである。InBitの読み出しはInBitValidビットをクリアし、次のInBitをクライアントから読み出せるようになる。クライアントは、InBitValidビットがクリアされるまでビットを認証チップに書き込めない;
OutBitへの書き込みは、OutBitValidがセットされている間はハングする。OutBitValidは、クライアントがOutBitからビットを読み出すまでセットされたままである。OutBitの書き込みはOutBitValidビットをセットし、次のOutBitをクライアントが読み出せるようにする。クライアントは、OutBitValidビットがセットされるまで認証チップからビットを読み出せない。
【1280】
実際のコマンドの引き延ばしは、状態機械によって管理されるが、種々の通信レジスタ及び通信回路がI/Oユニットに存在する。
【1281】
図188はI/Oユニットのコンポーネント間のデータフロー及び関係を示す図である。
【1282】
【表145】
Figure 2004536736
シリアルI/Oユニットは、データピンを使って外界と外部的に通信する回路を含む。InBitUsed制御信号は、所定のクロックサイクル中にInBitを使用する何れかのユニットによってセットされるべきである(サイクルのあらゆる状態になり得る)。2個のVALユニットは、タンパー防止及び検出回路に接続された検証ユニットであり、各VALはOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー防止及び検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。
【1283】
VALの場合、チップが改ざんされたならば、チップからの実効ビット出力は常に0である。このようにして、攻撃者は有用な出力を生成できない。VALの場合、チップ改ざんされたならば、チップへの実効ビット入力は常に0である。このようにして、攻撃者は有用な入力を選択できない。I/Oユニットのレジスタを検証する必要はない。なぜならば、攻撃者はそれらを破壊又は変更することによる利益がないからである。
【1284】
ALU
図189は、算術論理ユニットの概略ブロック図である。算術論理ユニット(ALU)は、32ビットAcc(アキュムレータ)レジスタと、簡単な算術及び論理演算用の回路を含む。ALU及び全てのサブユニットは、ノンフラッシングCMOSで実現されるべきである。なぜならば、鍵がその中を通るからである。その上、アキュムレータはパリティチェックされる。ALUに収容されたロジック及びレジスタは、両方のタンパー検出ラインによってカバーされる。これは、鍵及び中間計算値が攻撃者によって変更されないことを保証する。1ビットのZレジスタは、アキュムレータの零性を格納する。Z及びアキュムレータレジスタの両方は、リセット後にクリアされる。Zレジスタはアキュムレータが更新されたときに更新され、アキュムレータは、LD、LDK、LOG、XOR、ROR、RPL及びADDの何れかのコマンドに対して更新される。各算術及び論理ブロックは、二つの32ビット入力、即ち、アキュムレータの現在値と、MUの現在32ビット出力と、に基づいて動作する。ここで、
【1285】
【表146】
Figure 2004536736
である。
【1286】
Acc及びZのWriteEnablesは、(Logicにより)CMD及びサイクルを考慮するので、これらの2ビットは、出力を選択するためにマルチプレクサMXにより要求されない。MXの出力選択は、CMDのビット6−3だけを要求するので、結果としてより簡単である。
【1287】
【表147】
Figure 2004536736
2個のVALユニットは、タンパー防止及び検出ラインに接続された検証ユニットであり、各VALはOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー防止及び検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。VALの場合、チップが改ざんされたならば、アキュムレータから出力された実効ビットは常に0である。これは、攻撃者がアキュムレータに関する何かを処理することを妨げる。VALはアキュムレータに対するパリティチェックを実行し、チェックが失敗したならば、消去タンパー検出ラインをセットする。VALの場合、アキュムレータの実効Z状態は、チップ改ざんされたならば、常に真である。このようにして、攻撃者はループ構造を作成できない。ALUの残りの機能ブロックは後述する。すべてがフラッシュしないCMOSで実現されるべきである。
【1288】
【表148】
Figure 2004536736
RPL
図190はRPLユニットの概略ブロック図である。RPLユニットはALU内のコンポーネントである。これは、認証チップのRPL CMP機能を実現するため設計されている。RPL CMPコマンドは、AccessModeの値に基づいて、フラッシュメモリMへの安全な書き込みに使用するため特に設計された。RPLユニットは、シフトパルス毎に2ビット右シフトを実行するAMT(AccessModeTemp)と呼ばれる32ビットシフトレジスタと、WR擬似コードのEqEncounteredフラグ及びDecEncounteredフラグに直接基づいているEE及びDEと呼ばれる1ビットレジスタと、を含む。全てのレジスタはリセット後に0にクリアされる。AMTは、PRL INITコマンドを用いて(アキュムレータを介して)32ビットAM値がロードされ、EE及びDEは、RPL MHIへの呼び出し及びRPL MLOへの呼び出しを用いて汎用書き込みアルゴリズムに従ってセットされる。EQブロック及びLTブロックはWRコマンド擬似コードに記載されている通りの機能を備えている。EQブロックは、2個の16ビット入力がビット一致であるならば、1を出力し、ビット一致でなければ、0を出力する。LTブロックは、アキュムレータから入力された上位16ビットがMXによってMUから選択された16ビット値よりも小さい場合に、1を出力する。比較は符号無しである。オペランドのビットパターンは組み合わせロジックがより簡単化されるように特に選択される。オペランドのビットパターンを利用するので、そのパターンをもう一度列挙する。
【1289】
【表149】
Figure 2004536736
MHI及びMLOは、ハイビットがセットされているので、Initのビットパターンと簡単に区別することができ、最下位ビットはMHIとMLOを区別するために使用できる。EEフラグ及びDEフラグは、RPLコマンドが発行されるたびに更新される。Initステージのため、2個の値を設定し、MHI及びMLOのため、EE及びDEの値を適切に更新する。したがって、EE及びDEのためのWriteEnableは以下の通りである。
【1290】
【表150】
Figure 2004536736
32ビットのAMTレジスタに関して、このレジスタには、RPL Initコマンドのときに、(MUから読み出された)AMの内容をロードし、RPL MLOコマンド及びRPL MHIコマンドのためにAMTレジスタを右へ2ビット位置シフトさせる。これは、RPLオペランドの最上位ビット(CMD)に対して簡単にテストできる。したがって、AMTレジスタのためのWriteEnable及びShiftEnableは、以下の通りである。
【1291】
【表151】
Figure 2004536736
Logicからの出力は、マルチプレクサMXへの入力としても有用である。なぜならば、それは、現在の2個のアクセスモードビット、又は00(これは、アクセスモードRWを表すので、DE及びEEレジスタをリセットさせる)の何れかを通すために使用されるからである。したがって、MXは次の通りである。
【1292】
【表152】
Figure 2004536736
RPLロジックは、アキュムレータの上位16ビットだけを置換する。下位16ビットはそのまま通過する。しかし、(M[0−15]のうちの一つに対応する)MUからの32ビットのうちの、上位又は下位16ビットだけが使用される。したがって、MXはMHIとMLOを区別するためにCMDをテストする。
【1293】
【表153】
Figure 2004536736
DEレジスタ及びEEレジスタを更新するロジックは、WRコマンドの擬似コードと一致する。AccessMode値が00(=RW、これはRPL INIT中に出現する)である入力は、DEとEEの両方に0(正しい初期値)をロードさせることに注意する必要がある。EEはLogicからの結果がロードされ、DEはLogicからの結果がロードされる。
【1294】
【表154】
Figure 2004536736
アキュムレータの上位16ビットはMへ書き込まれるべき値によって置き換えられる。したがって、LogicはWRコマンド擬似コードからのWEフラグと一致する。
【1295】
【表155】
Figure 2004536736
Logicからの出力は、マルチプレクサMXによる、アキュムレータからの元の16ビットと、M[0−15]からの値との間の選択を駆動するためそのまま使用される。アキュムレータからの16ビットが選択された場合(アキュムレータは変更されないで残される場合)、これは、アキュムレータ値がM[n]に書き込まれることを意味する。Mからの16ビット値が選択された場合(アキュムレータの上位16ビットを変更する場合)、これは、Mの16ビット値が変更されないことを意味する。したがって、MXは以下の形式をとる。
【1296】
【表156】
Figure 2004536736
AMTをパリティチェックする意味はない。なぜならば、攻撃者はMXへの入力を強制的に0にする方がよいからである(これにより、攻撃者は任意の値をMに書き込めるようになる)。しかし、攻撃者がチップ(全てタンパー検出テスト及び回路を含む)をレーザー切断する手間を選ぶならば、MXの入力を固定することにより制限選択テキスト攻撃を可能にさせるよりも優れたターゲットがある。
【1297】
ROR
図191は、ALUのRORブロックの概略ブロック図である。RORユニットは、ALU内のコンポーネントである。RORユニットは、認証チップのROR機能を実現するため設計される。RTMPという名前の1ビットレジスタは、RORユニットに格納される。RTMPはリセットで0にクリアされ、ROR RBコマンド及びROR XRBコマンド中にセットされる。RTMPレジスタは、任意のタップ構造をもつ線形フィードバックシフトレジスタの実装を可能にさせる。XORブロックは、2個の1ビット入力、1ビット出力のXORである。RORnは、ブロックが便宜上示されているが、実際には、マルチプレクサMXに配線接続される。なぜならば、各ブロックは、単に、右へNビットシフトされた、32ビットの書き換えである。3個全てのマルチプレクサ(MX、MX及びMX)は8ビットのCMD値に依存する。しかし、RORオペコードのビットパターンはロジック最適化の目的のために並べられる。オペランドのビットパターンを利用するので、このパターンを再度列挙する。
【1298】
【表157】
Figure 2004536736
Logicは、RTMPにWriteEnable信号を与えるために使用される。RTMPレジスタは、ROR RB及びROR XORコマンドの間だけ書き込まれるべきである。Logicは、InBitが使われたときならいつでも、制御信号を与えるために使用される。2個の組み合わせロジックブロックは次の通りである。
【1299】
【表158】
Figure 2004536736
マルチプレクサMXを用いて、RTMPに格納されるビットを選択する。Logicは、予めRBとXRBの一方へのCMD入力の範囲を限定する。したがって、これらの二つを区別するため、CMDをテストするだけでよい。以下の表は、CMDとMXから出力される値との間の関係を表現する。
【1300】
【表159】
Figure 2004536736
マルチプレクサMXを用いて、アキュムレータ入力のビット0を置換する予定の入力ビットを選択する。ここでは、少しの量の最適化を行う。なぜならば、個別の入力ビットは、典型的に、特定のオペランドに関係するからである。以下御表は、CMD3−0とMXから出力される値との間の関係を表現する。
【1301】
【表160】
Figure 2004536736
最後のマルチプレクサMXは32ビット値の最終的な回転を行う。再度、CMDオペランドのビットパターンが利用される。
【1302】
【表161】
Figure 2004536736
MinTicksユニット
図192は、MinTicksユニットのコンポーネント間のデータフロー及び関係を示す図である。MinTicksユニットは、認証チップ内の鍵付きオペレーションの間のプログラマブル最小遅延(カウントダウンを利用)の役目を担う。MinTicksユニットに収容されるロジック及びレジスタは、両方のタンパー検出ラインによってカバーする必要がある。これは、攻撃者が鍵付きの関数への呼び出しの間の時間を変更できないことを保証する。殆ど全てのMinTicksユニットは通常のCMOSで実現可能である。なぜならば、鍵は、殆どのこのユニットを通らないからである。しかし、アキュムレータは、SET MTR命令で使用される。その結果として、この回路のこの小さい区域は、ノンフラッシングCMOSで実現しなければならない。MinTicksユニットの残りの部分はノンフラッシングCMOSで実現しなくてもよい。しかし、MTRZラッチ(以下を参照)はパリティチェックしなければならない。
【1303】
MinTicksユニットは、MTR(MinTicks残量(MinTicksRemaining))という名前の32ビットレジスタを含む。MTRレジスタは、次の鍵付き関数を読み出せるまでの残りクロックチック数を格納する。各サイクルに、MTRの値は、その値が0になるまで1ずつ減少させられる。MTRが0に達すると、それ以上減少しない。MTRZ(MinTicks残量レジスタ零MinTicksRegisterZero)という名前の補助的な1ビットレジスタは、MTRレジスタの現在の零性を反映する。MTRZレジスタが0である場合、MTRZは1であり、MTRZレジスタが0ではない場合、MTRZは0である。MTRレジスタはリセットによってクリアされ、SET MTRコマンドを用いて新しいカウントにセットされ、アキュムレータの現在値をMTRレジスタへ転送する。
【1304】
ここで、
【1305】
【表162】
Figure 2004536736
であり、且つ
【1306】
【表163】
Figure 2004536736
である。
【1307】
サイクルはMTR及びMTRZのWriteEnableに接続されるので、これらのレジスタは実行サイクル中に、即ち、サイクル=1であるときに限り更新される。2個のVALユニットは、タンパー防止及び検出ラインに接続された検証ユニットであり、各VALはOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。VALの場合、MTRからの実効出力は0であり、これは、デクリメンターユニットからの出力が全て1であることを示し、これにより、MTRZは0のままであり、攻撃者が鍵付き関数を使用することは阻止される。また、VALは、MTRレジスタのパリティを検証する。パリティチェックが失敗した場合、消去タンパー検出ラインがトリガーされる。VALの場合、チップ改ざんされたならば、MTRZからの実効出力は0であり、MinTicksRemainingレジスタは未だ0に到達していないことを示し、これにより、攻撃者が鍵付き関数を使用することは阻止される。
【1308】
プログラムカウントユニット
図192は、プログラムカウントユニットのブロック図である。プログラムカウントユニット(PCU)は、9ビットのPC(プログラムカウンタ)と、分岐及びサブルーチン制御用のロジックと、を含む。プログラムカウントユニットは、通常のCMOSで実現できる。なぜならば、鍵はこのユニットを通らないからである。このユニットはノンフラッシングCMOSで実現しなくてもよい。しかし、ラッチはパリティチェックされる。その上、メモリユニットに収容されたロジック及びレジスタは、PCが攻撃者によって変更できないことを保証するため、両方のタンパー検出ラインで覆う必要がある。PCは実際には6レベル×9ビットのPCA(PCアレイ)として実装され、3ビットのSP(スタックポインタ)レジスタによってインデックス付けされる。PC及びSPレジスタはリセットで全てクリアされ、オペコードに従ってプログラム制御のフロー中に更新される。PCの現在値は、サイクル0(フェッチサイクル)の間にMUへ出力される。PCは、実行されるコマンドに基づいてサイクル1(実行サイクル)の間に更新される。殆どのケースで、PCは単に1ずつ増加する。しかし、(サブルーチン、又はその他のジャンプの形式により)分岐が現れたとき、PCはあ多らしい値で置き換えられる。新しいPC値を計算するメカニズムは、処理されるオペコードに依存する。
【1309】
ADDブロックはモジュロー2の単純なアダーである。入力は、PC値と、1(PCを1ずつ増加するため)、又は9ビットオフセット(ハイビットがセットされ、下位8ビットはMUから)の何れか一方である。“+1”ブロックは、3ビット入力を使用し、1ずつ増加する(ラップ付き)。“−1”ブロックは、3ビット入力を使用し、1ずつ減少する(ラップ付き)。種々のPC制御の形式は以下の通りである。
【1310】
【表164】
Figure 2004536736
JSRとJSI(ACC)に対して同じ動作がとられるので、Logicでそのケースを具体的に検出する。同じ考え方によって、LogicでJSI RTSを具体的にテストする。
【1311】
【表165】
Figure 2004536736
PCを更新するとき、PCが完全に新しい項目によって置き換えられるべきか、又はアダーの結果によって置き換えられるべきかを決定しなければならない。これは、JSR及びJSI(ACC)の場合に成り立つが、テストビットがアキュムレータの状態と一致する限り、TBRにも成り立つ。TBR以外の全ては、Logicによってテストされるので、LogicはLogicの出力を入力として含む。Logicからの出力は、次に、新しいPC値を得るため、マルチプレクサMXによって使用される。
【1312】
【表166】
Figure 2004536736
【1313】
【表167】
Figure 2004536736
9ビットアダーへの入力は、1ずつ増加するか(普通のケース)、又はMUから読み出されたオフセットを加算するか(DBRコマンド)に依存する。Logicはtestを生成する。Logicからの出力は、これに応じてマルチプレクサMXによってそのまま使用される。
【1314】
【表168】
Figure 2004536736
【1315】
【表169】
Figure 2004536736
最後に、どのPCエントリーを使用するかについての選択は、SPの現在値に依存する。サブルーチンに入るとき、SPインデックス値はインクリメントされ、サブルーチンから戻るとき、SPインデックス値はデクリメントされる。全てのケースで、且つコマンドをフェッチしたいとき(サイクル0)、SPの現在値を使用する。Logicは、サブルーチンに入るときを通知し、Logicはサブルーチンから戻るときを通知する。マルチプレクサ選択は、したがって、以下のように定義される。
【1316】
【表170】
Figure 2004536736
2個のVALユニットは、タンパー防止及び検出ラインに接続された検証ユニットであり、各VALはOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。両方のVALユニットは、データビットをパリティチェックし、それらが有効であることを保証する。パリティチェックが失敗した場合、消去タンパー検出ラインがトリガーされる。VALの場合、SPレジスタからの実効出力は、チップが改ざんされたならば、常に0である。これにより、攻撃者がサブルーチンを実行することは阻止される。VALの場合、実効PC出力は、チップが改ざんされたならば、常に0である。これにより、攻撃者がプログラムコードを実行することは阻止される。
【1317】
メモリユニット
メモリユニット(MU)は、認証チップの内部メモリを含む。内部メモリは、9ビットのアドレスによってアドレス指定され、9ビットのアドレスはアドレス生成器ユニットから渡される。メモリユニットは、アドレスに応じて、適切な32ビット及び8ビット値を出力する。また、メモリユニットは、特殊なプログラミングモードを担い、これにより、プログラムがフラッシュメモリに入力される。メモリユニット全体の内容は、タンパーリングから保護されるべきである。したがって、メモリユニットに収容されたロジック及びレジスタは、両方のタンパー検出ラインによって覆われるべきである。これは、プログラムコード、鍵、及び中間データ値が攻撃者によって変更できないことを保証する。全てのフラッシュメモリは、マルチステートであり、無効電圧で読み出されたときにチェックしなければならない。32ビットRAMもパリティチェックされるべきである。メモリユニットを通る32ビットデータパスは、ノンフラッシングCMOSで実現できる。なぜならば、鍵はそのデータパスに沿って送られるからである。8ビットデータパスは、通常のCMOSで実現できる。なぜならば、鍵はそのデータパスに沿って送られないからである。
【1318】
定数
定数メモリ領域のアドレスレンジは、000000000−000001111である。したがって、レンジは00000xxxxである。しかし、次の48アドレスが予備であるならば、これは復号化中に利用できる。定数メモリ領域は、アドレスの上位3ビット(Adr8−6=000)によって選択され、下位4ビットは組み合わせロジックへ供給され、その4ビットは、以下の通り、32ビット出力値にマッピングされる。
【1319】
【表171】
Figure 2004536736
RAM
32エントリーの32ビットRAMのアドレス空間は、001000000−001011111である。したがって、レンジは0010xxxxxである。RAMメモリ領域は、したがって、アドレスの上位4ビット(Adr8−5=0010)によって選択され、下位5ビットはアドレス指定する値を選択する。連続的な32エントリーのアドレス空間が与えられた場合、RAMは、単純な32×32ビットRAMとして簡単に実現できる。CPUは、特殊な方法でレンジ00000−11111からの各アドレスを取り扱うが、RAMアドレスデコーダ自体は、アドレスを特別に取り扱うわけではない。全てのRAM値はリセットで0にクリアされるが、プログラムコードはこのことを当てにしてはならない。
【1320】
フラッシュメモリ−変数
32ビット幅フラッシュメモリのアドレス空間は、001100000−001111111である。したがって、レンジは0011xxxxxである。フラッシュメモリ領域は、したがって、アドレスの上位4ビット(Adr8−5=0111)によって選択され、下位5ビットはアドレス指定する値を選択する。フラッシュメモリは特別な消去が必要である。フラッシュメモリの消去を完了するためにはかなり長い時間を要する。したがって、Wait信号は、CLRコマンドの受信時にフラッシュコントローラの内部にセットされ、要求されたメモリが消去されたときに限りクリアされる。内部的に、特定のメモリレンジの消去ラインは一つに結合され、その結果として、以下の表に示されるように、2ビットだけが要求される。
【1321】
【表172】
Figure 2004536736
フラッシュ値はリセットによって変更されないが、プログラムコードは、ガーベッジ以外では、(製造後に)フラッシュの初期値をとるべきではない。フラッシュアドレスを利用するオペレーションは、LD、ST、ADD、RPL、ROR、CLR及びSETである。全てのケースで、オペランド及びメモリ配置は、アドレス生成及び復号化を最小限に抑えるため、密接に連結される。フラッシュメモリの全変数区域は、プログラミングモードへ入ったとき、及び明確な物理的攻撃を検出したときに消去される。
【1322】
フラッシュメモリ−プログラム
384エントリーの8ビット幅プログラムフラッシュメモリのアドレスレンジは、010000000−111111111である。したがって、レンジは01xxxxxxx−11xxxxxxxである。ROMスタートアドレスとアドレスレンジが与えられるならば、復号化は簡単である。CPUはアドレスレンジの一部を特殊は方法で取り扱うが、アドレスデコーダ自体はアドレスを特別に取り扱うわけではない。フラッシュ値はリセットによって変わらず、プログラムモードへ入ることによってのみクリアされる。製造後、フラッシュ内容はガーベッジであると見なされるべきである。384バイトは、プログラミングモードにあるときに限り、状態機械によってロードされる。
【1323】
MUのブロック図
図193は、メモリユニットのブロック図である。図示されたロジックは、32ビットデータ及び8ビットデータが別々のコマンドによって要求され、その結果として、復号化のために必要なビットが少なくなるということを利用する。図示されるように、32ビット出力及び8ビット出力は常に生成される。認証チップの残りの適切なコンポーネントは、単に、実行されるコマンドに依存して、32ビット値又は8ビット値を使用する。マルチプレクサMXは、真理表定数、RAM、及びフラッシュメモリの選択から出力された32ビットを選択する。3出力の間で選択するためには、2ビットだけが、即ち、Adr及びAdrが要求される。このようにして、MXの形式は以下の通りである。
【1324】
【表173】
Figure 2004536736
32ビットフラッシュメモリの特定の部分を消去するロジックはLogicによって満たされる。消去部分制御信号は、サイクル=1の間に、メモリの正しい部分へのCLRコマンド中に限りセットされるべきである。単一のCLRコマンドがあるレンジのフラッシュメモリをクリアすることに注意する必要がある。AdrはCLRのためのアドレスレンジとして十分である。なぜならば、レンジは、有効オペランドに対して常にフラッシュの範囲内に治まり、有効ではないオペランドに対して0である。32ビット幅フラッシュメモリのレンジ全体は、(攻撃者によって、又は意図的にプログラミングモードに入ることによって)消去検出ラインがトリガーされたときに消去される。
【1325】
【表174】
Figure 2004536736
フラッシュメモリの特定の部分に書き込むためのロジックは、Logicによって満たされる。WriteEnable制御信号は、サイクル=1の間に、フラッシュメモリレンジへの適切なSTコマンド中に限りセットされるべきである。Adr6−5だけのテストが許容される。なぜならば、STコマンドだけがフラッシュまたはRAMへ有効に書き込むからである(Adr6−5が00であるならば、K2MXは0でなければならない。)。
【1326】
【表175】
Figure 2004536736
WE(WriteEnable)フラグは、SET WEコマンドとCLR WEコマンドの実行中にセットされる。Logicはこれらの二つのケースをテストする。WEに書き込まれる実際のビットはCMDである。
【1327】
【表176】
Figure 2004536736
メモリのRAM領域へ書き込むためのロジックは、Logicによって満たされる。WriteEnable制御信号は、サイクル=1の間に、RAMメモリレンジへの適切なSTコマンド中に限りセットされる。しかし、これは、X[N]への書き込みが許可されるかどうかを管理するWEフラグによって改ざんされる。X[N]レンジはRAMの上位半分であり、これは、Adrを使用してテストできる。RAMのフルアドレスレンジとしてAdr6−5だけをテストすることが容認できる。なぜならば、STコマンドはフラッシュ又はRAMだけに書き込むからである。
【1328】
【表177】
Figure 2004536736
3個のVALユニットは、タンパー防止及び検出ラインに接続された検証ユニットであり、各VALはOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー防止及び検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。VALユニットは、データビットをパリティチェックし、それらが有効であることを保証する。VAL及びVALは、各データビットの状態をチェックすることにより検証し、VALはパリティチェックを実行する。妥当性テストが失敗したとき、消去タンパー検出ラインがトリガーされる。VALの場合、プログラムフラッシュからの実効出力は、チップが改ざんされているならば、常に0である(TBR 0として解釈される)。これは攻撃者が有用な命令を実行することを阻止する。VALの場合、実効32ビットは、チップが改ざんされたならば、常に0である。これにより、攻撃者は、鍵、又は中間記憶値を入手できない。8ビットフラッシュメモリは、プログラムコード、ジャンプテーブル、及びその他のプログラム情報を保持するため使用される。384バイトのプログラムフラッシュメモリは、(アドレスレンジ01xxxxxxx−11xxxxxxxを使用して)完全な9ビットのアドレスにより選択される。プログラムフラッシュメモリは、(攻撃者によって、又はプログラミングモード検出ユニットが原因でプログラミングモードに入ることによって)消去検出ラインがトリガーされたときに限り消去される。消去検出ラインがトリガーされたとき、プログラムフラッシュメモリユニット内の小型状態機械は、8ビットフラッシュメモリを消去し、消去を検証し、シリアル入力から新しい内容(384バイト)にロードする。以下の擬似コードは、消去検出ラインがトリガーされたときに実効される状態機械ロジックを説明する:
Figure 2004536736
プログラミングモード状態機械実行中に、0が8ビット出力にセットされる。0コマンドは、認証チップの残りの部分に、コマンドをTBR 0として解釈させる。チップが全部で384バイトをプログラムフラッシュメモリへ読み込んだとき、チップはハングする(無限ループに入る)。次に、認証チップはリセットされ、プログラムは正常に使用される。消去は、8ビットプログラムフラッシュメモリの新しい内容をロードするために使用される8ビットレジスタによって検証されることに注意すべきである。これは、攻撃が成功する見込みを低下させるために役立つ。なぜならば、プログラムコードは、消去を認証するため使用されるレジスタが攻撃者によって破壊された場合に、適切にロードされ得ないからである。更に、状態機械全体は、両方のタンパー検出ラインによって保護される。
【1329】
アドレス生成器ユニット
アドレス生成器ユニットは、メモリユニット(MU)へアクセスするための実効アドレスを生成する。サイクル0において、PCは次のオペコードをフェッチするためMUへ渡される。アドレス生成器は、サイクル1の実効アドレスを生成するため、戻されたオペコードを解釈する。サイクル1において、生成されるアドレスはMUへ渡される。アドレス生成器ユニットに格納されたロジック及びレジスタは、両方のタンパー検出ラインによってカバーされる。これは、攻撃者が生成されたアドレスを変更し得ないことを保証する。殆ど全部のアドレス生成器ユニットは通常のCMOSで実現できる。なぜならば、鍵が殆どのこのユニットを通らないからである。しかし、アキュムレータの5ビットはJSIアドレス生成で使用される。この結果として、回路のこの小さい区域は、ノンフラッシングCMOSで実現される。アドレス生成器ユニットの残りの部分は、ノンフラッシングCMOSで実現しなくてもよい。しかし、カウンタ及び計算されたアドレスのラッチはパリティチェックされるべきである。タンパー検出ラインの何れかが破断しているならば、アドレス生成器ユニットは、各サイクルでアドレス0を生成し、全てのカウンタは0に確定される。これは、攻撃者がリセットを禁止状態にするか、及び/又は、消去回路を禁止状態にした場合に始めて効果がある。なぜならば、正常な状況下では、タンパー検出ラインの破断は、リセット又は全てのフラッシュメモリの消去を生じさせるからである。
【1330】
アドレス生成の背景
アドレス生成用ロジックは、種々のオペコードとオペランドの組み合わせを調べることが必要である。オペコード/オペランドと、アドレスとの関係はこのセクションで検討され、アドレス生成器ユニットの基礎として使用される。
【1331】
定数
下位4エントリーは、汎用用途、並びに、HMACアルゴリズムのための簡単な定数である。LDKオペランドの下位4ビットは、これらの4個の値、即ち、0000、0001、0010及び0011のメモリ内アドレスの下位3ビットにそのまま対応する。y定数及びh定数もLDKコマンドによってアドレス指定される。しかし、アドレスは、オペランドの下位3ビットをC1カウンタ値のインバースでOR演算し、そのままのオペランドの第4ビットを保持することによって生成される。このようにして、LDK yの場合、yオペランドは0100であり、LDK hの場合、hオペランドは1000である。反転したC1値は、yに対して000−011の範囲にあり、hに対して、000−100の範囲にあり、OR演算結果は正確なアドレスを与える。全ての定数に対して、最終アドレスの上位5ビットは常に00000である。
【1332】
RAM
変数A−Tは、それらのオペランド値の下位3ビットに直接関係したアドレスをもつ。即ち、LD、ST、ADD、LOG、及びXORコマンドのオペランド値0000−0101の場合、並びに、LOGコマンドのオペランド値1000−1101の場合、下位3ビットのオペランドアドレスビットは、最終アドレスを生成するため、001000の一定上位6ビットアドレスと共に使用される。残りのレジスタ値は、インデックス付きメカニズムによってアクセスできる。変数A−E、B160及びHは、C1カウンタ値によるインデックス付きとしてのみアクセス可能であり、Xは、N、N、N及びNによってインデックス付けされる。LD、ST及びADDコマンドの場合、C1によってインデックス付けされたAEのアドレスは、オペランドの下位3ビット(000)を取り、C1カウンタ値とOR演算することにより生成される。しかし、H及びB160のアドレスは、同じ方法では生成できない(そうでなければ、RAMアドレス空間は不連続になるであろう)。したがって、簡単な組み合わせロジックは、AEを0000に、Hを0110に、B160を1011に変換する。最終アドレスは、C1を4ビット値に加算し(4ビット値が得られる)、00100の一定上位5ビットアドレスを前に付加することによって得られる。最後に、レジスタのXレンジは、N、N、N及びNによるインデックス付きとしてのみアクセス可能である。XORコマンドの場合、インデックス付けのため任意のN1−4を使用可能であり、一方、LD、ST及びADDの場合、Nだけが使用可能である。LD、ST及びADDにおけるXのオペランドは、XN4オペランドと同じであるため、オペランドの下位2ビットは、使用すべきNを選択する。アドレスは、このようにして、00101の一定上位5ビット値と、選択されたNカウンタに由来する下位4ビットとして生成される。
【1333】
フラッシュメモリ−変数
変数MT及びAMのアドレスは、関連したコマンドのオペランドから生成される。オペランドの4ビットはそのまま使用され(0110及び0111)、00110の一定上位5ビットアドレスが前に付加される。変数R1−5、K11−5、K21−5、及びM0−7は、C1カウンタ値のインバースによるインデックス付きとしてのみアクセス可能である(付加的には、Rの場合には実際のC1値による)。簡単な組み合わせロジックは、R及びRFを00000に、K1又はK2がアドレス指定されているかどうかに応じてKを01000又は11000に、M(MHI及びMLOを含む)を10000に変換する。最終アドレスは、C1を5ビット値とOR演算(又は加算)し(RFの場合には、C1をそのまま使用し)、0011の一定上位4ビットを前に付加することによって獲得される。変数IST及びISWは各々が1ビット値に過ぎないが、任意のビット数によって実装できる。データは、0x00000000又は0xFFFFFFFFの何れかとして読み書きされる。それらは、ROR、CLR及びSETコマンドだけによってアドレス指定される。RORの場合、オペランドの下位ビットは、00111111の一定上位8ビット値と合成され、IST及びISWに対して、それぞれ、0011111110及び001111111が得られる。なぜならば、他のRORオペランドはメモリを使用せず、IST及びISW以外の場合には、返された値は無視できるからである。SET及びCLRの場合、IST及びISWは、0011の一定上位4ビットをIST(0100)から11110へのマッピング、及びISW(0101)から11111へのマッピングと組み合わせることによりアドレス指定される。IST及びISWは、RAMからのE及びTと同じオペランド値を共有するので、同じ復号化ロジックを下位5ビットのため使用することが可能である。最終アドレスは、ビット4、3及び1がセットされることを要求する(これは、オペランド値010xのテストの結果にOR演算することより行われる)。
【1334】
フラッシュメモリ−プログラム
プログラムフラッシュメモリ内でルックアップするためのアドレスは9ビットPC(サイクル0の場合)又は9ビットAdrレジスタ(サイクル1の場合)から直接もたらされる。TBR、DBR、JSR及びJSIのようなコマンドは、プログラムメモリ内の特定のアドレスでテーブルに記憶されたデータにしたがってPCを変更する。その結果として、アドレス生成は、一部の定数アドレスコンポーネントを利用し、コマンドオペランド(又はアキュムレータ)は実効アドレスの下位ビットを形成する。
【1335】
【表178】
Figure 2004536736
アドレス生成器ユニットのブロック図
図194はアドレス生成器ユニットの概略ブロック図である。アドレス生成器ユニットからの一次出力は、以下の表に示されるように、マルチプレクサMXによって選択される。
【1336】
【表179】
Figure 2004536736
CMDデータとMUからの8ビットを区別することが重要である:
サイクル0では、8ビットデータラインは、後のサイクル1で実行されるべき次の命令を保持する。この8ビットコマンド値は実効アドレスをデコードするため使用される。これに対して、CMDの8ビットデータは前の命令を保持するので、無視されるべきである;
サイクル1では、CMDラインは現在実行中の命令(サイクル0中に8ビットデータラインに保持されていた命令)を保持し、一方、8ビットデータラインは命令からの実効アドレスのデータを保持する。CMDデータはサイクル1中に実行されなければならない。
【1337】
したがって、MU又はCMDからの9ビットデータの選択は、以下の表に示されるようにマルチプレクサMXによって行われる。
【1338】
【表180】
Figure 2004536736
9ビットAdrレジスタはサイクル0毎に更新されるので、AdrのWriteEnableは〜サイクルに接続される。カウンタユニットはカウンタC1、C2(内部的に使用される)と、選択されたNインデックスを生成する。その上、カウンタユニットは、プログラムカウンタユニットによって使用されるフラグC1Z及びC2Zを出力する。様々な*GENユニットは、サイクル0中に、特有のコマンドタイプのアドレスを生成し、マルチプレクサMXは、PC(即ち、8ビットデータライン)によってプログラムメモリから読み出されるようなコマンドに基づいてそれらの間で選択を行う。生成された値は以下の通りである。
【1339】
【表181】
Figure 2004536736
マルチプレクサMXは以下の選択規準をもっている。
【1340】
【表182】
Figure 2004536736
VALユニットは、タンパー防止及び検出回路に接続された検証ユニットである。それはOKビットを含み、OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー防止及び検出ラインからのChipOK値とOR演算される。OKビットは、使用可能前の9ビットの実効アドレスとAND演算される。チップが改ざんされているならば、アドレス出力は常に0であり、これにより、攻撃者はメモリの他の部分へのアクセスが妨げられる。VALユニットは、実効アドレスビットにパリティチェックを実行し、それらが改ざんされていないことを保証する。パリティチェックが失敗であるならば、消去タンパー検出ラインがトリガーされる。
【1341】
JSIGEN
図195はJSIGENユニットの概略ブロック図である。JSIGENユニットはJSI ACC命令のためのアドレスを生成する。実効アドレスは、単に、
JSIテーブル(0101)用のアドレスの4ビット上位部分と、
アキュムレータ値の下位5ビットと、
の連結である。
【1342】
アキュムレータは他の時点(ジャンプアドレスが生成されないとき)で鍵を保持することがあるので、その値は秘匿されなければならない。その結果として、このユニットはノンフラッシングCMOSで実現される。マルチプレクサMXは、単に、コマンドがJSIGENであるかどうかに基づいて、アキュムレータからの下位5ビット又は0の間で選択を行う。マルチプレクサMXは以下の選択規準をもっている。
【1343】
【表183】
Figure 2004536736
JSRGEN
図196はJSRGENユニットの概略ブロック図である。JSRGENユニットはJSR及びTBR命令のためのアドレスを生成する。実効アドレスは、単に、
JSRテーブル(0100)用のアドレスの4ビット上位部分と、
オペランドからのテーブル内のオフセット(JSRコマンド用の3ビットと、TBR用の3ビット+定数0ビット)と、
の連結からもたらされる。ここで、Logicは実効アドレスのビット3を生成する。このビットはJSRの場合にはビット3であり、TBRの場合には0である。
【1344】
【表184】
Figure 2004536736
JSR命令はビット5に1があるので(これに対して、TBRはこのビットが0である)、これをビット3とAND演算することにより、JSRの場合にはビット3を生成し、TBRの場合には0を生成する。
【1345】
DBRGEN
図197は、DBRGENユニットの概略ブロック図である。DBRGENユニットはDBR命令のためのアドレスを生成する。実効アドレスは、
DBRテーブル(011000)用のアドレスの6ビット上位部分と、
オペランドの下位3ビットと、
の連結からもたらされる。
【1346】
LDKGEN
図198は、LDKGENユニットの概略ブロック図である。LDKGENユニットはLDK命令のためのアドレスを生成する。実効アドレスは、
LDKテーブル(00000)用のアドレスの5ビット上位部分と、
オペランドのハイビットと、
オペランドの下位3ビット(下位が定数の場合)、又はC1とOR演算されたオペランドの下位3ビット(インデックス付き定数の場合)と
の連結からもたらされる。
【1347】
ORブロックは、C1の3ビットを、MUからの8ビットデータ出力からの下位3ビットとOR演算するだけである。マルチプレクサMXは、オペランドの上位ビットがセットされているか、又はセットされていないかに基づいて、実際のデータビットと、C1がOR演算されたデータビットとの間で選択を行うだけである。マルチプレクサへのセレクタ入力は、簡単なORゲートであり、bitをbitとOR演算する。マルチプレクサMXは以下の選択規準をもっている。
【1348】
【表185】
Figure 2004536736
RPLGEN
図199は、RPLGENユニットの概略ブロック図である。RPLGENユニットはRPL命令のためのアドレスを生成する。K2MXが0であるとき、実効アドレスは定数000000000である。K2MXが1であるとき(Mからの読み出しが有効な値を返すことを示す)、実効アドレスは、
M(001110)用のアドレスの6ビット上位部分と、
C1の現在値の3ビットと、
の連結からもたらされる。
【1349】
マルチプレクサMXは、K2MXの現在値に基づいて、2個のアドレスの間で選択を行う。したがって、マルチプレクサMXは以下の選択規準をもっている。
【1350】
【表186】
Figure 2004536736
VARGEN
図200は、VARGENユニットの概略ブロック図である。VARGENユニットはLD、ST、ADD、LOG及びXOR命令のためのアドレスを生成する。K2MX 1ビットフラグは、Mからの読み出しが定数0アドレス(0を返すが、書き込み不可である)にマッピングされるか、オペランドがKを指定したとき、K1とK2のどちらがアクセスされるか、を決定するため使用される。4ビットアダーブロックは2組の4ビット入力をとり、モジュロー2の加法で、4ビットの出力を生成する。シングルビットレジスタK2MXは、CLR K2MX命令、又はSET K2MX命令の実行中だけに書き込まれる。Logicは、これらの条件に基づいてK2MX WriteEnableをセットする。
【1351】
【表187】
Figure 2004536736
SET命令中にK2MX変数に書き込まれるビットは1であり、CLR命令中は0である。入力ビットのソースとして、オペコードの下位ビット(bit)を使用するのが好都合である。アドレス生成中に、組み合わせロジックとして実装された真理表は、以下の通り、ベースアドレスの一部を決定する。
【1352】
【表188】
Figure 2004536736
真理表は5ビットの出力を生成するが、下位4ビットは4ビットアダーへ送られ、そこで、下位4ビットはインデックス値(C1、N又はオペランド自体の下位3ビット)に加算される。最上位ビットはアダーへ送られ、5ビット結果を生成するために、アダー結果からの4ビット結果の前に付加される。アダーへの第2の入力はマルチプレクサMXに由来し、マルチプレクサMXは、C1、N、及びオペランド自体の下位3ビットからインデックス値を選択する。C1は3ビットしかないが、4番目のビットは定数0である。マルチプレクサMXは以下の選択規準をもっている。
【1353】
【表189】
Figure 2004536736
実効アドレスの第6ビット(bit)は、RAMアドレスの場合に0であり、フラッシュメモリアドレスの場合に1である。フラッシュメモリアドレスは、MT、AM、R、K、及びMである。bitの計算はLogicによって与えられる。
【1354】
【表190】
Figure 2004536736
定数1ビットが表現され、実効アドレスは全部で7ビットになる。これらのビットは、K2MXが0でなく、命令がLD、ADD又はST M[C1]ではない限り、実効アドレスを形成する。後者では、実効アドレスは定数アドレス0000000である。両方のケースで、2個の0ビットが最終的な9ビットアドレスを形成するため前に追加される。この計算は、以下に示され、Logic及びマルチプレクサMXによって行われる。
【1355】
【表191】
Figure 2004536736
【1356】
【表192】
Figure 2004536736
CLRGEN
図201は、CLRGENユニットの概略ブロック図である。CLRGENユニットはCLR命令のためのアドレスを生成する。実効アドレスは常に、有効メモリアクセスオペランド用のフラッシュメモリにあり、無効オペランドに対して0である。CLR M[C1]命令は、(VARGENユニットに保持された)K2MXフラグの状態とは無関係に、常に、M[C1]を消去する。真理表は、単純な組み合わせロジックであり、以下の関係を実現する。
【1357】
【表193】
Figure 2004536736
真理表に必要なロジックを削減することは簡単である。なぜならば、全部で4種類の主要なケースにおいて、実効アドレスの最初の6ビットは00であり、その後にオペランド(bit3−0)が続く。
【1358】
BITGEN
図202は、BITGENユニットの概略ブロック図である。BITGENユニットはROR及びSET命令のためのアドレスを生成する。実効アドレスは常に、有効メモリアクセスオペランド用のフラッシュメモリにあり、無効オペランドに対して0である。ROR及びSET命令は、IST及びISWフラッシュメモリアドレスだけにアクセスし(オペランドの残りはレジスタにアクセスする)、簡単な組み合わせロジック真理表はアドレス生成に十分である。
【1359】
【表194】
Figure 2004536736
カウンタユニット
図Y37は、カウンタユニットの概略ブロック図である。カウンタユニットは、カウンタC1、C2(内部で使用)と、選択されたNインデックスと、を生成する。更に、カウンタユニットは、外部で使用するための出力フラグC1Z及びC2Zを出力する。レジスタC1及びC2は、DBR命令又はSC命令のターゲットであるときに更新される。オペランドのハイビット(実効コマンドのbit)は、C1とC2の間で選択を行う。Logic及びLogicは、それぞれ、C1及びC2のためのWriteEnableを判定する。
【1360】
【表195】
Figure 2004536736
シングルビットフラグC1Z及びC2Zは、それらのマルチビットC1及びC2の対応した部分のNOR演算によって生成される。このようにして、C1Zは、C1=0のときに1であり、C2Zは、C2=0のときに1である。DBR命令中に、C1又はC2の何れかの値が1ずつデクリメントされる(ラップ付き)。デクリメンターユニットへの入力は、以下の通り、マルチプレクサMXによって選択される。
【1361】
【表196】
Figure 2004536736
C1又はC2に書き込まれた実際の値は、DBR命令又はSC命令が実行されたかどうかに依存する。マルチプレクサMXは、デクリメンターからの出力(DBR命令用)と、真理表からの出力(SC命令用)との間で選択を行う。5ビット出力のうちの最下位3ビットだけがC1に書き込まれることに注意する必要がある。マルチプレクサMXは、したがって、以下の選択規準をもっている。
【1362】
【表197】
Figure 2004536736
真理表は、SC命令を用いて、C1及びC2へロードされるべき値を保持する。真理表は、以下の関係を実現する簡単な組み合わせロジックである。
【1363】
【表198】
Figure 2004536736
レジスタN1、N2、N3及びN4は、XOR命令によって参照されたとき、次の値−1(ラップ付き)によって更新される。レジスタN4は、ST X[N4]命令が実行されるときにも更新される。LD及びADD命令はN4を更新しない。その上、全部で4個のレジスタはSET Nxコマンド中に更新される。Logic4−7は、レジスタN1からN4のWriteEnableを生成する。どれもがLogicを使用し、Logicは、コマンドがSET Nxである場合に1を生成し、そうでなければ0を生成する。
【1364】
【表199】
Figure 2004536736
送出された、又はデクリメンターへの入力として使用された実際のインデックス値は、マルチプレクサMXがオペランドの下位2ビットを使用して簡単に選択する。
【1365】
【表200】
Figure 2004536736
インクリメンターは、(マルチプレクサMXによって選択された)入力値のうちの4ビットを取得し、1を加え、4ビット結果を生成する(モジュロー2の加法による)。最後に、マルチプレクサMXは4時点で、(N毎に異なり、SET Nxコマンド中にロードされる)定数値と、(XOR又はST命令中の)デクリメンターの結果と、の間で選択を行う。その値は、適当なWriteEnableフラグがセットされている場合に限り書き込まれ(Logic−Logicを参照せよ)、Logicはマルチプレクサのために安全に使用できる。
【1366】
【表201】
Figure 2004536736
SET Nxコマンドは、N1からN4に以下の定数をロードする。
【1367】
【表202】
Figure 2004536736
参照される各初期X[N]は、最適化されたSHA−1アルゴリズムのインデックスN1からN4の初期状態と一致する。各インデックス値Nがデクリメントするとき、実効X[N]はインクリメントする。その理由は、Xワードは最上位ワードから先にメモリに格納されているからである。3個のVALユニットは、タンパー防止及び検出回路に接続された検証ユニットであり、各VALはOKビットを含む。OKビットはリセットで1にセットされ、サイクル毎に両方のタンパー防止及び検出ラインからのChipOK値とOR演算される。OKビットはそのユニットを通過する各データビットとAND演算される。全てのVALユニットは、データビットをパリティチェックし、カウンタが改ざんされていないことを保証する。パリティチェックが失敗であるならば、消去タンパー検出ラインがトリガーされる。VALの場合、カウンタC1からの実効出力は、チップが改ざんされているならば、常に0である。これは、攻撃者が鍵の最初から最後までインデックス付けをするループ構造を実行することを阻止する。VALの場合、カウンタC2からの実効出力は、チップが改ざんされたならば、常に0である。これは、攻撃者がループ構造を実行することを阻止する。VALの場合、Nカウンタ(N1−N14)からの実効出力は、チップが改ざんされているならば、常に0である。これは、攻撃者がXの最初から最後までインデックス付けをするループ構造を実行することを阻止する。
【1368】
次に、図203を参照すると、フラッシュメモリ記憶装置701に格納された情報705が示されている。このデータには以下のものが含まれる。
【1369】
工場コード
工場コードは、プリントロールが製造された工場を示す16ビットコードである。これは、プリントロールテクノロジーの所有者に属する工場、又は許可を得てプリントロールを製造する工場を識別する。この数値の目的は、品質の問題がある場合に、プリントロールの由来する工場を追跡できるようにすることである。
【1370】
バッチ番号
バッチ番号は、プリントロールの製造バッチを示す32ビット番号である。この数値の目的は、品質の問題がある場合に、プリントロールの由来するバッチを追跡することである。
【1371】
シリアル番号
48ビットシリアル番号は、最大で28兆個まで各プリントロールを一意に識別できるようにするため設けられる。
【1372】
製造日
16ビット製造日は、有効期限が制限されている場合に、プリントロールの経年を追跡するため組み込まれる。
【1373】
メディア長さ
ロール上に残っているプリントメディアの長さはこの数値によって表される。この長さは、ミリメータ、又はプリントロールを使用するプリンタ装置の最小ドットピッチのような小さい単位で表現され、周知のC、H及びPの各フォーマット、並びに、印刷されるその他のフォーマットで残り写真数の計算を可能にさせる。この小さい単位を使用することによって、プレ印刷されたメディアとの同期を保つために高解像度が使用できることを保証する。
【1374】
メディアタイプ
メディアタイプデータはプリントロールに格納されているメディアを列挙する:
(1)透明
(2)乳白色
(3)不透明着色
(4)3次元レンチキュラー
(5)プレ印刷:長さ限定
(6)プレ印刷:非長さ限定
(7)金属箔
(8)ホログラフィック/光学的可変デバイス箔。
【1375】
プレ印刷メディア長さ
例えば、プリントロールの裏面に収容されているプレ印刷メディアの繰り返しパターンの長さがここに保存される。
【1376】
インク粘性
各インクカラーの粘性が8ビット数値として格納される。インク粘性数は、粘性を補償するためプリントヘッドアクチュエータ特性を調節する際に使用される(典型的に、粘性が高くなると、同じドロップボリュームを実現するためにはより長いアクチュエータパルスが必要になる)。
【1377】
1200dpi用の推奨ドロップボリューム
各インクカラーの推奨ドロップボリュームは8ビット数値として格納される。最も適切なドロップボリュームは、インク及び印刷メディア特性に依存する。例えば、要求されるドロップボリュームは、色素濃度又は吸収性が増加すると減少する。また、透明メディアは乳白色メディアの約2倍のドロップボリュームを必要とする。なぜならば、光は、透明メディアの場合、色素層を1回しか通過しないからである。
【1378】
プリントロールは、インクとメディアの両方を収容するので、顧客適合を実現することができる。ドロップボリュームは、推奨ドロップマッチに過ぎない。なぜならば、プリンタは1200dpiではないかもしれないし、また、プリンタは、印刷の明暗について調節されるかもしれないからである。
【1379】
インクカラー
染料色の各々のカラーが格納され、印刷前に画像に適用されるデジタル中間調を精細調整するために使用できる。
【1380】
残りメディア長さインジケータ
ロールに残っている印刷メディアの長さが数値によって表現され、カメラ装置によって更新される。長さは、C、H及びPの各フォーマット、並びに、印刷されるその他のフォーマットで残り写真数を計算できるように、小さい単位(例えば、1200dpiピクセル)で表現される。プレ印刷メディアとの同期を保つために高解像度を使用してもよい。
【1381】
著作権又はビットパターン
この512ビットパターンは、保存されたフラッシュメモリの内容を著作権保護可能にするために十分なASCII文字列を表現する。
【1382】
図204を参照すると、Artcam認証チップの記憶テーブル730が示されている。テーブルは、製造コード、バッチ番号、シリアル番号、及び日付を含み、上述のフォーマットと同じである。テーブル730は、更に、Artcam装置内のプリントエンジン上の情報731を含む。蓄積された情報は、プリンタエンジンタイプ、プリンタのDPI解像度、及びプリンタ装置によって作成されたプリント数のプリンタカウントを含む。
【1383】
更に、認証テスト鍵710が設けられ、これは、チップとチップの間でランダムに変化し、上述のアルゴリズムにおけるArtcamランダム識別コードとしても利用される。128ビットのプリントロール認証鍵713も設けられ、これはプリントロール内に保存されたキーと同等である。次に、512ビットパターンが保存され、その後に、Artcamの利用に適した120ビットの予備エリアが続く。
【1384】
上述のように、Artcamは、好ましくは、液晶ディスプレイ15を含み、液晶ディスプレイは、Artcamに格納されているプリントロールに残されたプリント数を示す。更に、Artcamは、3状態スイッチ17を含み、これにより、ユーザは、3種類の標準的なフォーマットC、H及びP(クラシック、HDTV及びパノラマ)を切り換えることが可能である。三つの状態間の切替後、液晶ディスプレイ15は、選択された特定のフォーマットが使用されるならば、プリントロールに残っている画像の枚数を反映するため更新される。
【1385】
液晶ディスプレイを正しく動作させるため、Artcamプロセッサは、プリントロールを挿入し、認証テストに合格した後、プリントロールチップ53のフラッシュメモリ記憶装置から読み出し、用紙残量を判定する。次に、出力フォーマット選択スイッチ17の値がArtcamプロセッサによって判定される。プリント長さを、選択された出力フォーマットの対応した長さで除算することにより、Artcamプロセッサは、プリント可能数を判定し、残りプリント数で液晶ディスプレイ15を更新する。ユーザが出力フォーマット選択スイッチ17を変更すると、Artcamプロセッサ31は、そのフォーマットに応じて出力ピクチャーの数を再計算し、再度、LCDディスプレイ15を更新する。
【1386】
プロセス情報をプリントロールテーブル705(図165)に保存することによって、Artcam装置はプロセスの変化、及びプリントロールのプリント特性の変化を利用することができる。
【1387】
特に、プリントヘッド内の各ノズルに加えられたパルス特性は、プロセス特性の変化を考慮するために変更可能である。図205を参照すると、Artcamプロセッサは、補助メモリROMチップに記憶されたソフトウェアプログラムを動かすために適合し得る。ソフトウェアプログラムであるパルスプロファイルキャラクタライザ771は、プリントロールから多数の変数を読み出すことができる。これらの変数には、プリントロール772上の残りロールメディア、プリンタメディアタイプ773、インクカラー粘性774、インクカラードロップボリューム775、及びインクカラー776が含まれる。これらの変数の各々は、パルスプロファイルキャラクタライザによって読み出され、対応した最も適しているパルスプロファイルは、従来の試行錯誤法によって決定される。パラメータは、インク出力の安定性を高めるために、各プリンタノズルで受け取られるプリンタパルスを変更する。
【1388】
明らかなように、認証チップは、重要かつ価値ある情報がプリンタロールと一体のプリンタチップに格納されている点で著しく進歩している。この情報は、対象となっているプリントロールのプロセス特性を、プリントロールのタイプ及びプリントロールに残っている用紙量と共に含む。
【1389】
更に、プリントロールインタフェースチップは、貴重な認証情報を提供し、耐タンパー性の形で構築することが可能である。また、このチップを利用する耐タンパー性のある方法が提供される。プリントロールチップの利用は、Artcam装置の迅速な出力フォームのために便利かつ効率的なユーザインタフェースを提供することができ、多数の写真フォーマットを出力でき、同時に、印刷装置に残っている写真の数のインジケータを提供することができる。
【1390】
プリントヘッドユニット
図206には、図162のプリントヘッドユニット615の分解斜視部分断面図が示されている。
【1391】
プリントヘッドユニット615は、像を形成するように要求に応じてインクドロップをプリントメディア611へ噴射するプリントヘッド44が中心に置かれる。プリントメディア611は、第1セット618及び616と、第2セット617及び619からなる2組のローラーの間に挟まれている。
【1392】
プリントヘッド44は電源、グランド、及び信号線810の制御下で動作し、電源、グランド、及び信号線810は、プリントヘッド44用の電源及び制御を提供し、テープ自動ボンディング(TAB)によってプリントヘッド44の表面に接合されている。
【1393】
重要なことは、適当に分離されたシリコンウェハー装置から構築することができるプリントヘッド44は、一連の異方性エッチ812に依拠し、ウェハーを介して、ほぼ垂直な側壁を有する。ウェハーを貫通するエッチ812は、後で取り出すためウェハーの裏側からインクをプリントヘッド表面に直接供給することができる。
【1394】
インクは、インクヘッド供給ユニット814を用いてインクジェットプリントヘッド44の裏側に供給される。インクジェットプリントヘッド44は、その表面に沿って、別々の色のインクを供給するため3つの別個の行をもつ。インクヘッド供給ユニット814は、インクチャンネルをシールする蓋815を含む。
【1395】
図207から図210には、インクヘッド供給ユニット814の多数の斜視図が示されている。図207から図210の各々は、長さに制限のないインクヘッド供給ユニットの一部だけを示し、図示された部分は典型的な細部を示す。図207には、底側斜視図が示され、図148は上側斜視図を示し、図209は拡大斜視部分断面図を示し、図210はインクチャンネルの詳細を示す上側斜視図であり、図211は上側斜視図であり、図212も同様である。
【1396】
インクヘッド供給ユニット814は、例えば、マイクロマシーン加工されたシリコンからではなく、射出成形プラスチックから形成する方がコスト的にかなり有利である。プラスチックインクチャンネルの製造コストは非常に低く、製造は十分に容易である。添付図面に示された設計は、所定の長さの1600dpiの3色モノリシックプリントヘッドを想定している。与えられた流速計算は、100mmフォトプリンタに対するものである。
【1397】
インクヘッド供給ユニット814は、必要な精細部の全てを含んでいる。蓋815(図206)は、インクヘッド供給ユニット814に永久的に接着されるか、又は超音波溶接され、インクチャンネルのシールを提供する。
【1398】
図209を参照すると、シアン、マゼンタ、イエローのインクが、インクインレット820−822に流入し、マゼンタインクはスルーホール824,825の中を流れ、マゼンタメインチャンネル826,827(図141)に沿って流れる。シアンインクは、シアンメインチャンネル830に沿って流れ、イエローインクはイエローメインチャンネル831に沿って流れる。図209に最もよく示されているように、シアンインクメインチャンネル内のシアンインクは、シアンサブチャンネル833に流れ込む。イエローサブチャンネル834は、同様に、イエローメインチャンネル831からイエローインクを受け取る。
【1399】
図210の最もよく示されているように、マゼンタインクもマゼンタメインチャンネル826,827からマゼンタスルーホール836,837へ流れる。図209に戻ると、マゼンタインクはスルーホール836,837から流出する。マゼンタインクは、マゼンタサブチャンネル、例えば、838に沿って流れ、次に、第2のマゼンタサブチャンネル、例えば、839に沿って流れ、その後、マゼンタトラフ840に流入する。マゼンタインクは、次に、マゼンタバイア、例えば、842を流れ、マゼンタバイアは、対応したインクジェットヘッドスルーホール(例えば、図166の812)と整列させられ、それらは、次に、インクをプリントアウト用のインクジェットノズルへ供給する。
【1400】
同様に、シアンサブチャンネル833内のシアンインクはシアンピットエリア849に流入し、それは、インクを二つのシアンバイア843,844に供給する。同様に、イエローサブチャンネル834は、イエローピットエリア46へ供給し、イエローピットエリアはイエローバイア847,848へ供給する。
【1401】
図210に示されるように、プリントヘッドは、プリントヘッドスロット850に収容できるように設計され、種々のバイア、例えば、851は、プリントヘッドウェハー内で対応したスルーホール、例えば、851と揃えられる。
【1402】
図206に戻ると、適切なインクがプリントヘッドチップ44の全体へ流れ、同時に、射出成形プロセスの制約を満たすように注意すべきである。プリントヘッドチップの裏側にあるインクスルーウェハーホール812のサイズは、約100μm×50μmであり、異なる色のインクを運ぶスルーホールの隙間は約170μmである。このサイズの形状は容易にプラスチック成形でき(コンパクトディスクはミクロンサイズの形状である)、理想的には壁の高さは、適当なスティフネスを維持するため、壁の厚さの数倍を超えてはならない。好適な実施形態は、少しずつ小さくなるインクチャンネルの階層構造を使用することによってこの問題を解決している。
【1403】
図211には、プリントヘッド44の表面の小部分870が示されている。表面は、シアン系列871、マゼンタ系列872、及びイエロー系列873からなる3系列のノズルに分割される。ノズルの各系列は、更に、2列、例えば、875、876に分割され、プリントヘッド44は、電源及び制御信号を接合する接合パッド878の系列を含む。
【1404】
プリントヘッドは、好ましくは、Artcam装置を含む用途のため創作された非常に多数のインクジェットの異なる形態に応じて構築される。これらのインクジェット装置は以下で詳述される。
【1405】
プリントヘッドノズルは、図206の異方性エッチホール812と同等のインク供給チャンネル880を含む。インクは、ウェハーの裏側から、供給チャンネル881を通り、次に、フィルタグリル882を通り、インクノズルチャンバー、例えば、883へ流れる。ノズルチャンバー883及びプリントヘッド44(図1)の動作は、既に説明した通りであり、上述の特許明細書に記載されている。
【1406】
インクチャンネル流体フロー解析
次に、インクフローの解析を説明すると、メインインクチャンネル826、827、830、831(図207、図141)は、約1mm×1mmであり、1色の全てのノズルに供給する。サブチャンネル833、834、838、839(図209)は約200μm×100μmであり、一つが約25のインクジェットノズルへ供給する。プリントヘッドスルーホール843、844、847、848及びウェハースルーホール、例えば、881(図221)は、100μm×50μmであり、プリントヘッドスルーホールのそれぞれの側で3個のノズルに供給する。各ノズルフィルタ882は8スリットを有し、各スリットは20μm×2μmの面積を有し、一つのノズルに供給する。
【1407】
上記のように構成されたインクジェットプリンタの圧力必要条件の解析を行った。解析は、写真印刷用の1600dpiの3色プロセスプリントヘッドに対するものである。プリント幅は100mmであり、1色毎に6250のノズルがあり、全部で18750のノズルがある。
【1408】
フルブラック印刷の場合に種々のチャンネルで必要な最大インク流速が重要である。これは、インクチャンネルに沿った圧力降下を決定し、したがって、プリントヘッドが表面張力だけで充満した状態を保つかどうか、保てない場合に、プリントヘッドを充満した状態に保つために必要なインク圧を決定する。
【1409】
圧力降下を計算するため、1600dpi動作に対して2.5pIのドロップボリュームを利用した。ノズルはもっと高速に動作する能力を備えているが、選択されたドロップ繰り返しレートは5kHzであり、これは、150mm長さの写真を2秒以内に印刷するために適当である。このようにして、極端なケースでは、プリントヘッドは、18750ノズルを有し、すべてが毎秒最大5000ドロップで印刷をする。このインクフローは、インクチャンネルの階層構造全体に広がる。各インクチャンネルは、全てのノズルが印刷をしているとき、事実上、一定数のノズルに供給する。
【1410】
圧力降下Δρは、Darcy−Weisbach式に従って計算した:
Δρ=ρUfL/2D
ここで、ρはインクの密度であり、Uは平均流速であり、Lは長さであり、Dは水力直径であり、fは無次元摩擦係数であり、以下の式で計算した:
f=κ/Re
ここで、Reはレイノルズ数であり、κは、チャンネルの断面積に依存する無次元摩擦係数であり、以下の式で計算した:
Re=UD/ν
ここで、νはインクの運動学的粘性である。
【1411】
矩形断面の場合、κは、
κ=64/(2/3+(11b/24a)(11b/24a)(2−b/a))
によって近似できる。
【1412】
式中、aは矩形断面の長辺であり、bは短辺である。矩形断面に対する水力直径Dは、
D=2ab/(a+b)
によって与えられる。
【1413】
インクは、チャンネルの長手方向の250点でメインインクチャンネルから抜かれた。インク粘性はチャンネルの先端から線形に降下し、チャンネルの終端で0まで降下するので、平均流速Uは最大流速の半分である。したがって、メインインクチャンネルに沿った圧力降下は、最大流速を用いて計算した圧力降下の半分である。
【1414】
これらの式を利用して、圧力降下を計算することにより、次の表が得られた。
【1415】
インクチャンネル寸法と圧力降下の表
【1416】
【表203】
Figure 2004536736
インクインレットからノズルまでの総圧力降下は、したがって、シアン及びイエローに関して約701Paであり、マゼンタに関して845Paである。これは、大気圧の1%未満である。勿論、印刷された画像がフルブラック未満の場合、インクフロー(したがって、圧力降下)はこれらの値よりも低下するであろう。
【1417】
インクヘッド供給ユニット用の金型製作
インクヘッド供給ユニット14(図1)は50μの外形と106mmの長さがある。射出成形ツールを従来の方法で加工することは実施不可能である。しかし、全体的な形状が複雑であるとしても、複雑な曲線は不要である。射出成形ツールは、メインインクチャンネル及びその他のミリメートルスケールの形状については従来のミリングを使用して製作可能であり、精細な形状はリソグラフ的に製作されたインセットを用いる。LIGAプロセスをインセットのために使用できる。
【1418】
単一の射出成形ツールは、簡単に50以上のキャビティを含む。ツールの複雑さの殆どはインセットにある。
【1419】
図206を参照すると、印刷システムはインク供給ユニット814及び蓋815を一体的に成形し、上述のようにそれらを一体的にシーリングする。次に、プリントヘッド44が対応したスロット850に設置される。粘着性シーリングストリップ852、853がマゼンタメインチャンネル上に置かれ、それらが適切にシールされることを保証する。テープ自動ボンディング(TAB)ストリップ810がインクジェットプリントヘッド44に接続され、タブボンディングワイヤはキャビティ855内に通る。図206、図207及び図212からよく分かるように、アパーチャスロット855から862は、ローラーの挿入の際のスナップのために設けられる。スロットは、ある程度の遊びをもってローラーを「クリッピングイン」し、次に、ローラーを容易に回転させる。
【1420】
図213から図217には、最終的に組み立てられたArtcam装置の内部の様々な斜視図が示され、装置には適当な番号が付されている:
・図213は、Artcamカメラの内部の上面側の斜視図であり、平らにされた部品が示されている;
・図214は、Artcamカメラの内部の底面側の斜視図であり、平らにされた部品が示されている;
・図215は、Artcamカメラの内部の第1の上面側の斜視図であり、Artcamに収容された部品が示されている;
・図216は、Artcamカメラの内部の第2の上面側の斜視図であり、Artcamに収容された部品が示されている;
・図217は、Artcamカメラの内部の第2の上面側の斜視図であり、Artcamに収容された部品が示されている。
【1421】
ポストカードプリントロール
図218を参照すると、好適な実施形態の一形態として、出力プリンタ用紙11は、画像が印刷されない面に、多数のプレ印刷された「ポストカード」型裏書き部分885を含む。ポストカード型セクション885は、プリペイド式郵便料金「スタンプ」886を含み、この「スタンプ」886は、関連した郵便当局からの印刷された認証により構成され、その当局の管轄区域内で、そのプリントロールが販売若しくは利用される。関連した管轄区域の郵便当局との合意によって、プリントロールは様々な郵便料金を利用できる。これは、特に、外国からの旅行者が国内の管轄内にいて、自国へ多数のポストカードを送る場合に便利である。更に、住所書式部分887が設けられ、通常のポストカードの形式で宛先発送の詳細を記入できる。最後に、メッセージ領域887が設けられ、私信を記入することができる。
【1422】
図218及び図219を参照して、カメラ装置の動作を説明すると、一連の画像890から892がプリントロールの第1面に印刷されたときの、対応した裏書き面が図218に示されている。したがって、各画像、例えば、891がカメラによって印刷されると、画像の裏面は、既にポストカード885になっているので、直ちに、管轄区域内の最も近い郵便ポストへ投函することができる。このように、パーソナル化されたポストカードを作成することができる。
【1423】
図219及び図220に示されるようなポストカードシステムを利用するとき、予め定められた画像サイズだけが可能であることは明白である。なぜならば、裏面のポストカード部分885と、表面の画像891との対応関係を維持しなければならないからである。これは、各ポストカードの裏書き書式シート885の長さの詳細を記憶するためプリントロール内に収容された認証チップのメモリ部分を利用することによって実現される。これは、各ポストカードのサイズを同じサイズにすること、又はそれぞれのサイズをプリントロールのオンボードプリントチップメモリに格納することによっても実現される。
【1424】
Artcamカメラ制御システムは、予め書式化されたポストカードを利用するとき、プリントロールは、各画像がポストカードの境界に収まるように画像を印刷するためだけに使用されることを保証することができる。勿論、多少の位置合わせ誤差を考慮できるように境界領域を各写真のエッジに設けることによってある程度の「遊び」が与えられる。
【1425】
図220から明らかであるように、ポストカードロールは、それを利用可能な特定の管轄区域内に旅行するとき、カメラユーザが事前に購入できる。ポストカードロールは、その外面に、購入国、各ポストカードの郵便料金、各ポストカードのフォーマット(例えば、C、H、P、又はこれらの画像モードの組み合わせ)、使用するのに適した国名、及びその日以降に郵便料金が不足になるかもしれない郵便料金期限を含む情報が印刷されている。
【1426】
したがって、カメラ装置のユーザは、関連したシーンに向けられた自分のハンドヘルドカメラを利用して、写真を撮影して、その画像が一方の面に掲載され、もう一方の面にはプリペイド式ポストカードの詳細が記載されている郵便で発送するためのポストカードを製作することが可能である。次に、このポストカードに宛先を指定し、短いメッセージを記入し、その後、直ぐに郵便で発送することができる。
【1427】
Artcam装置のソフトウェア動作に関して、種々のソフトウェア設計が可能であるが、ある設計では、各Artcam装置は、1組の緩く結合した機能モジュールにより構成され、これらの機能モジュールは、一つの埋め込み型アプリケーションによって連係した形で利用できるようにされ、装置の中心目的のために機能する。機能モジュールは、様々なクラスのArtcam装置において、異なる組み合わせで再使用され、アプリケーションはArtcamのクラスに特有である。
【1428】
殆どの機能モジュールは、ソフトウェアとハードウェアの両方のコンポーネントを含む。ソフトウェアは、ハードウェア抽象化レイヤによって、ハードウェアの細部からシールドされ、一方、モジュールのユーザは、抽象化ソフトウェアインタフェースによってソフトウェアインプリメンテーションからシールドされている。システムは、全体として、ユーザ始動、及びハードウェア始動のイベントによって駆動されるので、殆どのモジュールは、一つ以上の同期的なイベント駆動型プロセスを動かすことができる。
【1429】
一般的なArtcam装置を構成する殆どの重要なモジュールが図221に示されている。同図及びその後の図には、ソフトウェアコンポーネントが左側にsめされ、垂直点線901によって右側のハードウェアコンポーネントから分離されている。これらのモジュールのソフトウェアの面を次に説明する。
【1430】
ソフトウェアモジュール−Artcamアプリケーション902
ArtcamアプリケーションはArtcam装置の上位レベル機能を実現する。これは、通常、像の撮影、像に対する芸術的効果の適用、及び像の印刷を含む。カメラ指向のArtcam装置の場合、画像は、カメラマネージャ903によって捕捉される。プリンタ指向のArtcam装置の場合、画像は、ネットワークマネージャ904によって捕捉され、おそらく、この画像は他の装置によって送出された結果物である。
【1431】
芸術的効果は、ファイルマネージャ905によって管理される統合ファイルシステム内で行われる。芸術的効果は、スクリプトファイルとリソースのセット途により構成される。スクリプトは、画像処理マネージャ906によって翻訳され、画像に適用される。スクリプトは、通常、Artcardとして知られているArtCardsで出荷される。デフォルトとして、システムは、現在搭載されているArtcardに格納されているスクリプトを使用する。
【1432】
画像はプリントマネージャ908によって印刷される。
【1433】
Artcam装置がスタートアップしたとき、ブートストラッププロセスが、アプリケーションを開始する前に種々のマネージャプロセスを始動する。これにより、アプリケーションは、スタートしたときに、直ちに様々なマネージャからのサービスを要求できる。
【1434】
初期化後、アプリケーション902は、それ自体を以下に列挙されたイベントのハンドラーとして登録する。アプリケーションはイベントを受け取ったとき、表に記載された動作を実行する。
【1435】
【表204】
Figure 2004536736
カメラがディスプレイを含むとき、アプリケーションはユーザインタフェースマネージャ910によってグラフィカルユーザインタフェースを構築し、ユーザは現在日時、及びその他の編集可能なカメラパラメータを編集できるようになる。アプリケーションは、全ての常駐パラメータをフラッシュメモリに保存する。
【1436】
リアルタイムマイクロカーネル911
リアルタイムマイクロカーネルは、割込とプロセス優先順位に基づいて、予めプロセスをスケジューリングする。それは、プロセススケジューリングに非常に密接している統合プロセス間通信及びタイマーサービスを提供する。全ての他のオペレーティングシステム機能はマイクロカーネルの外部で行われる。
【1437】
カメラマネージャ903
カメラマネージャは、画像捕捉(撮像)サービスを提供する。それは、Artcamに組み込まれたカメラハードウェアを制御する。それは、抽象的カメラ制御インタフェースを提供し、カメラパラメータの問い合わせ及び設定、画像捕捉を可能にさせる。この抽象的インタフェースは、アプリケーションを他のカメラインプリメンテーションの細部から切り離す。カメラマネージャは以下の入力/出力パラメータ及びコマンドを利用する。
【1438】
【表205】
Figure 2004536736
【1439】
【表206】
Figure 2004536736
【1440】
【表207】
Figure 2004536736
カメラマネージャは、非同期イベント駆動型プロセスとして動く。それは、連結された状態機械の組を含み、各状態機械は一つの非同期オペレーションに対応する。それらは、オートフォーカス、フラッシュ充電、セルフタイマのカウントダウン、及び像の撮影を含む。初期化時、カメラマネージャはカメラハードウェアを既知状態にセットする。これは、通常の焦点距離の設定、及びズームの戻しを含む。カメラマネージャのソフトウェア構造は、図222に示されている。ソフトウェアコンポーネントは以下のサブセクションに記載されている。
【1441】
フォーカス固定913
ロックフォーカスは、フォーカス制御モード、露出制御モード、及びフラッシュモードに応じて、現在シーンに対して自動的にフォーカスと露出を調整し、必要に応じてフラッシュを動作可能状態にする。ロックフォーカスは、通常、ユーザが撮影ボタンを半押しすることによって始動される。これは、正常な像撮影シーケンスの一部であるが、ユーザが撮影ボタンを半押しのままにした場合、時間的に、実際の像の撮影からは分離される。これは、ユーザがスポットフォーかシング及びスポット測距をできるようにする。
【1442】
撮影914
撮影(像捕捉)は、現在シーンの像を撮影する。フラッシュモードがレッドアイ除去を含む場合、レッドアイランプを点灯し、シャッターを制御し、動作可能状態であれば、フラッシュをトリガーし、イメージセンサによって像を検知する。それは、カメラの向き、即ち、撮影像の向きを判定し、これにより、後の画像処理で、像は適切に向きを決められる。また、それは、後の画像処理中にブラーを取り除くため、撮像中にカメラの動きの有無を検出する。
【1443】
セルフタイム撮影915
セルフタイム撮影は、20秒タイマーのカウントダウン後に、現在シーンの像を撮影する。これは、カウントダウン中に、セルフタイマーLEDを用いて、ユーザにフィードバックを与える。最初の15秒間に、それは、LEDを点灯できる。最後の5秒間にLEDは点滅する。
【1444】
ビューシーン917
ビューシーンは、周期的に、イメージセンサを通して現在シーンを検知し、そのシーンをカラーLCDに表示させ、ユーザにLCDベースのビューファインダーを提供する。
【1445】
オートフォーカス918
オードフォーカスは、像の選択された領域が焦点が合っていると言えるまで十分に鮮明になるまで、焦点距離を変化させる。それは、イメージセンサの指定された領域から抽出された画像鮮明さメトリックが固定の閾値を超えた場合に領域の焦点が合うということを前提とする。それは、鮮明さの微分に関する勾配降下法を実行し、必要に応じて方向及びステップサイズを変えることによって、最適焦点距離を見つける。焦点制御モードがマルチポイントオートであるならば、視野全体に水平に配置された3個の領域が使用される。焦点制御モードがシングルポイントオートであるならば、視野の中心にある一つの領域が使用される。オートフォーカスは、フォーカスコントローラによって指定された有効焦点距離の範囲内で機能する。固定焦点装置の場合、これは、事実上、無効にされる。
【1446】
オートフラッシュ919
オートフラッシュは、シーンの照度がフラッシュを必要とする程度に薄暗いかどうかを判定する。これは、シーンの照度が所定の閾値以下であるならば、照度が十分に薄暗いとみなす。シーンの照度は、照度センサから獲得され、照度センサはイメージセンサの中央領域から照度メトリックを抽出する。フラッシュが必要であれば、フラッシュを充電する。
【1447】
自動露出920
シーン照度、絞り、および、シャッター速度は、撮影像の露出を決定する。望ましい露出は固定値である。露出制御モードがオートであるならば、自動露出は、所定のシーン照度に対して望ましい露出を生じる絞りとシャッター速度の組み合わせを決定する。露出制御モードが絞り優先であるならば、自動露出は、所定のシーン照度及び現在の絞りに対して望ましい露出を生じるシャッター速度を決める。露出制御モードがシャッター優先であるならば、自動露出は、所定のシーン照度及び現在のシャッター速度に対して望ましい露出を生じる絞りを決める。シーン照度は照度センサから取得され、照度センサはイメージセンサの中央領域から照度メトリックを抽出する。
【1448】
自動露出は、絞りコントローラ及びシャッター速度コントローラによって指定された有効絞り及びシャッター速度の範囲内で機能する。シャッター速度コントローラ及びシャッターコントローラは、殆どのArtcam装置では機械的シャッターの無いことを隠す。
【1449】
フラッシュが、マニュアル又はオートで有効にされている場合、実効的なシャッター速度はフラッシュの間隔であり、これは、典型的に、1/1000秒から1/10000秒である。
【1450】
画像処理マネージャ906(図221)
画像処理マネージャは、画像処理と芸術的効果サービスを提供する。これは、高速画像処理を実行するためArtcamに組み込まれたVLIWベクトルプロセッサを利用する。画像処理マネージャは、Vark画像処理言語で記述されたスクリプト用のインタープリタを具備する。したがって、芸術的効果は、Varkスクリプトファイルと、フォント、クリップ画像のような関連したリソースと、を含む。画像処理マネージャのソフトウェア構造は図223により詳細に示され、以下のモジュールを含む。
【1451】
画像の変換及び強調921
画像処理マネージャは、装置に依存しないCIE LAB色空間において、Artcamプリンタハードウェアの生成能力に適した解像度で、画像処理を実行する。撮影された像は、最初に、ノイズをフィルタ処理して強調される。それは、オプションとして、動きによって生じたブラー効果を取り除くために行われる。画像は、次に、装置に依存したRGB色空間から、CIE LAB色空間へ変換される。像は、撮影時のカメラ回転の影響を相殺するため回転させられ、作業用画像解像度へスケール変換される。画像は、そのダイナミックレンジを利用可能なダイナミックレンジへスケーリングすることによって強調される。
【1452】
顔検出923
顔は、色相及び局部的特徴解析に基づいて撮影された像内で検出される。検出された顔領域のリストは、ワーピング及び吹き出しの配置のような顔専用効果を適用するためVarkスクリプトによって使用される。
【1453】
Vark画像処理言語インタープリタ924
Varkは、豊富な画像処理のセットで拡張された汎用プログラミング言語を含む。それは、プリミティブデータタイプの範囲(整数、実数、ブール、文字)、より複雑なタイプを構築するための集合データタイプの範囲(配列、文字列、レコード)、算術演算及び論理演算の豊富な組、条件付き及び反復制御フロー(if−then−else、while−do)、及び再帰的関数及び手続を提供する。また、それは、画像処理データタイプの範囲(画像、クリップ画像、マット、カラー、カラールックアップテーブル、パレット、ディザ行列、コンボリューションカーネル、等)、グラフィックデータタイプ(フォント、テキスト、パス)、画像処理関数の組(カラー変換、コンポジット処理、フィルタ処理、空間変換及びワーピング、イルミネーション、テキスト設定及びレンダリング)、及び上位レベルの芸術的関数の組(タイリング、ペインティング、及びストローキング)を提供する。
【1454】
Varkプログラムは二つの意味でポータブルである。それは、インタープリットされるので、CPU及びホストの画像処理エンジンに依存しない。装置に依存しないモデル空間及び装置に依存しない色空間を使用するので、それは、入力色特性、ホスト入力装置の解像度、出力色特性、及びホスト出力装置の解像度に依存しない。
【1455】
Varkインタープリタ924は、Varkスクリプトを構成するソースステートメントを解析し、そのスクリプトの意味を表現するパースツリーを生成する。パースツリーのノードは、プログラムのステートメント、エクスプレッション、サブエクスプレッション、変数、及び定数に対応する。ルートノードはメインプロシジャーステートメントリストに対応する。このインタープリタは、パースツリーのルートステートメントを実行することにより、プログラムを実行する。パースツリーの各ノードはその子にそれ自体を適切に評価又は実行するように要求する。例えば、ifステートメントノードは、条件表現ノードと、thenステートメントノードと、elseステートメントノードの三つの子を持つ。ifステートメントは、条件表現ノードに、それ自体を評価し、返されたブール値に基づいて、thenステートメント又はelseステートメントにそれ自体を実行させる。それは、実際の条件表現又は実際のステートメントは知らない。
【1456】
殆どのデータタイプの演算はパースツリーの実行中に行われるが、画像データタイプの演算は、パースツリーの実行後まで、延期される。これにより、画像演算が最適化され、最終的な画像に寄与する中間画素だけが計算される。これは、最終画像を、空間細分によって多数のパスで計算することを可能にさせ、これにより、必要なメモリ量を減少させる。
【1457】
パースツリーの実行中に、各画像関数は画像グラフを返すだけであり、この画像グラフは、ノードが画像オペレータを表し、リーフが画像を表すものであり、対応した画像オペレータをルートとし、その画像パラメータをルートの子とすることによって構築される。画像パラメータは勿論それ自体が画像グラフである。このようにして、それぞれの逐次的な画像関数は、より深い画像グラフを返す。
【1458】
パースツリーの実行後、最終画像に対応した画像グラフが得られる。この画像グラフは、次に、(任意の表現ツリーと同じように)深さ優先方式で実行され、以下の2点で最適化される。(1)最終画像に寄与する画素だけが所定のノードで計算される。(2)ノードの子は、メモリ必要量を最小限に抑える順番で実行される。画像グラフ中の画像オペレータは、最終画像を生成するために最適化された順序で実行される。計算集約的な画像オペレータは、Artcam装置に組み込まれたVLIWプロセッサを使用して加速される。画像グラフを実行するために必要なメモリ量が利用可能なメモリを超えたとき、最終画像領域は、必要なメモリが利用可能なメモリを超えなくなるまで細分される。
【1459】
巧く構築されたVarkプログラムの場合、最初の最適化は特に大きな効果があるとは思えない。しかし、最終画像領域が細分された場合、最適化はかなりの効果を生ずる可能性がある。細分化がメモリ必要量を減少させる効果的な技術として使用することができることが、まさにこの最適化である。画像オペレーションの実行を遅らせることの結果の一つは、プログラム制御フローを画像内容に依存させられないことである。なぜならば、画像内容はパースツリー実行中には分からないからである。実際上、これはそれほど制約にはならないが、それにもかかわらず、言語設計中には注意しなければならない。
【1460】
画像オペレーションの延期実行(又は遅延評価)の考え方については、Guibas and Stolfiによって記載されている(Guibas, L.J,., and J. Stolfi, ''A Language for Bitmap Manupulation'', ACM Transactions on Graphics, Vol.1, No.3, July 1982, pp.191−214)。彼らは、プログラムの実行中に同様に画像グラフを構築し、後続のグラフ評価中に、最終画像に寄与しない画素の計算を回避するため、結果領域を逆伝搬させる。Shantzisは、更に、利用可能な画素を画像グラフ評価中に前方へ伝搬させる(Shantzis, M.A., ''A Model for Efficient and Flexible Image Computing'', Computer Graphics Proceedings, Annual Conference Series, 1994, pp.147−154)。Varkインタープリタは、Cameronによって提案された、より洗練されたマルチパス型ビットディレクショナル領域伝搬スキームを使用する(Cameron, S., ''Efficient Bounds in Constructive Solid Geometry'', IEEE Computer Graphics & Appkications, Vol.11, No.3, May 1991, pp.68−74)。メモリ使用量を最小限に押させるため実行順序を最適化する方法は、Shantzisに由来するが、標準的なコンパイラ理論に基づいている(Aho, A. V., R. Sehi, and J.D. Ullman, ''GeneratingCode from DAGs'', in Compilers: Principles, Techniques, and Tools, Addison−Wesley, 1986, pp.557−567)。Varkインタープリタは、Shantzisよりも洗練されたスキームを使用するが、可変サイズ画像バッファをサポートする。メモリ使用量を減少させるため、領域伝搬と組み合わせて結果領域を細分することは、Shantzisに由来している。
【1461】
プリンタマネージャ908(図221)
プリンタマネージャは画像プリンティングサービスを提供する。それは、Artcamに組み込まれたインクジェットプリンタハードウェアを制御する。それは、抽象的プリンタ制御インタフェースを提供し、プリンタパラメータの問い合わせと設定を可能にさせ、画像を印刷される。この抽象的インタフェースは、アプリケーションをプリンタインプリメンテーションの詳細から切り離し、以下の変数を含む。
【1462】
【表208】
Figure 2004536736
【1463】
【表209】
Figure 2004536736
【1464】
【表210】
Figure 2004536736
【1465】
【表211】
Figure 2004536736
プリンタマネージャは非同期イベント駆動型プロセスとして実行される。それは、連結された状態機械の組を含み、各状態機械は一つの非同期オペレーションに対応している。これらは、画像を印刷し、プリントロールを自動マウントする。プリンタマネージャのソフトウェア構造は図224に示されている。ソフトウェアコマンドは後述される。
【1466】
プリントイメージ930
プリントイメージは供給された画像を印刷する。これは、印刷用の画像を準備するためVLIWプロセッサ回路を使用する。VLIWプロセッサ回路は、画像色空間を装置固有CMYに変換し、プリントヘッドで期待されるフォーマットで中間調バイレベルデータを生成する。
【1467】
プリントの間に、プリントロールを取り外すことができるように、用紙はプリントロールのリップに引き込まれ、ノズルはインク漏れ及び乾燥を防ぐためにキャップを被せることができる。実際の印刷がスタートする前に、従って、ノズルはキャップを取り外され、きれいにされ、用紙はプリントヘッドへ進められる。印刷自体は、画像が完全に印刷されるまで、VLIWプロセッサからラインデータを転送し、ラインデータを印刷し、用紙を進める。印刷の終了後、用紙は裁断機で切断され、プリントロールに引き込まれ、ノズルにキャップが被せられる。残りメディア長さはプリントロールで更新される。
【1468】
プリントロール自動マウント131
プリントロール自動マウントは、プリントロールの装着と取り外しに応答する。それは、プリントロールの装着と取り外しのイベントを生成し、このイベントは、アプリケーションによって処理され、状態表示を更新するため使用される。プリントロールは、プリントロールに組み込まれた認証チップと、Artcamに組み込まれた認証チップとの間でプロトコルに従って認証される。プリントロールが認証を失敗した場合、プリントロールは拒絶される。種々の情報がプリントロールから抽出される。用紙及びインク特性は、印刷プロセス中に使用される。残りメディア長さ及びメディアの固定ページサイズは、いずれにしても、プリントマネージャにより公表され、アプリケーションによって使用される。
【1469】
ユーザインタフェースマネージャ910(図221)
ユーザインタフェースマネージャは図225により詳細に示され、ユーザインタフェース管理サービスを提供する。それは、状態表示及び入力ハードウェアを制御し物理的ユーザインタフェースマネージャ911と、カラーディスプレイ上の仮想グラフィカルユーザインタフェースを管理するグラフィカルユーザインタフェースマネージャ912と、を含む。ユーザインタフェースマネージャは、仮想及び物理的入力をイベントに翻訳する。各イベントはそのイベントのために登録されたプロセスのイベントキュー入れられる。
【1470】
ファイルマネージャ905(図222)
ファイルマネージャは、ファイルマネージメントサービスを提供する。それは、統合階層ファイルシステムを提供し、その中では、全てのマウントされたボリュームのファイルシステムが現れる。Artcamで使用される一次着脱式記憶媒体はArtCardである。Artcardは、2値のドットのブロックによって高解像度で印刷され、2値のドットのブロックは、誤差を許容するリード・ソロモン符号化2値データを直接表現する。ブロック構造は、(Artcamで初期には使用されていない)適当なリード−ライトArtCard装置における追記及び追記−書き換えをサポートする。より高いレベルでは、ArtCardは、拡張型追記−書き換え可能ISO9660準拠CD−ROMファイルシステムを含み得る。ファイルマネージャのソフトウェア構造、及び特に、ArtCard装置コントローラは、図226に示されている。
【1471】
ネットワークマネージャ904(図222)
ネットワークマネージャは、赤外線(IrDA)及び汎用シリアルバス(USB)を含む様々なインタフェース上での家電製品ネットワーキングサービスを提供する。これは、Artcamシステムが撮影された画像を共有し、印刷のための画像を受信できる。
【1472】
クロックマネージャ907(図222)
クロックマネージャは日付及び時刻のクロックサービスを提供する。それは、Artcamに組み込まれたバッテリバックアップ型リアルタイムクロックを利用し、ユーザが時刻をセットしたときに実行される自動キャリブレーションに基づいて、クロック変動を自動的に調節する程度までそれを制御する。
【1473】
パワーマネージメント
システムが使用されていないとき、システムは、入力イベントの周期的走査が行われる休止電力状態に入る。入力イベントは、ボタンの押下、又はArtCardの挿入を含む。入力イベントが検出されると直ぐに、Artcam装置は、動作電力状態に戻る。その後、システムは入力イベントをいつもの通りに取り扱う。
【1474】
システムが動作電力状態であるときでさえ、個々のモジュールに関連したハードウェアは、典型的に窮し電力状態にある。これは、全体的な電力消費を削減し、プリンタの用紙切断機のような特に浪費のもとになるハードウェアコンポーネントが動作中に電源を独占できるようする。カメラ指向のArtcam装置は、デフォルトで、画像撮影モードである。即ち、カメラは動作状態であり、プリンタのような他のモジュールは休止状態である。つまり、カメラ以外の機能が始動されたとき、アプリケーションはカメラモジュールを明白に一時停止させなければならない。他のモジュールは、待機状態になると、自発的に一時停止する。
【1475】
ウォッチドッグタイマー
システムは、周期的な優先度の高いウォッチドッグタイマー割込を生成する。割込ハンドラーは、システムが最後の割込以降、進んでいない、即ち、システムが故障していると判断した場合、システムをリセットする。
【1476】
代替プリントロール
他の一実施形態では、適切に簡単に一つにはめ込まれた射出成形プラスチック部品によって大部分を構築することができる改良された形態のプリントロールが提供される。改良された形態のプリントロールは、多少構造が単純化されると共に、インク貯蔵容量が増加している。画像が印刷されるべきプリントメディアは、構造を簡単化するため、プラスチック製スリーブフォーマーの周りに巻き付けられる。インク媒体リザーバは、インクが流れ出る可能性ができるだけ少なくなる構造にされた一連の通気孔を有する。更に、ラバーシールがインク出口孔に設けられ、ラバーシールはプリントロールをカメラシステムに挿入する際に穿刺される。更に、プリントロールは、プリントメディア排出スロットを含み、排出スロットは周囲に成形された表面を有し、その表面は、プリントメディア放出スロットが、印刷又はカメラシステム内のプリントヘッドに対して正確な位置に置かれるように補助する。
【1477】
次に、図227から図231を参照すると、図227には、組み付けられた形式のシングルポイントロールユニット1001が示され、部分的に切断されてプリントロールの内部が表されている。図228及び図229は、それぞれ、左側及び右側の分解斜視図である。図230及び図231は図227から図229の内部コア部1007の拡大斜視図である。
【1478】
プリントロール1001は、内部インク補充部を含む内部コア部1007の周りに構築される。コア部1007の外側にはフォーマー1008が設けられ、フォーマーの周りに、用紙又はフィルム補給品1009が巻き付けられる。用紙補給品の周りには、二つのカバー部品1010、1011が設けられ、プリントロールの周りで一体としてスナップ式に留まり、図227に示されるようにカバーユニットを形成する。下側カバー部品1011はスロット1012を含み、そのスロットを通って、プリントメディア1004の出力がカメラシステムと相互連結する。
【1479】
二つのピンチローラー1038、1039が用紙を駆動ピンチローラー1040に圧迫するため設けられるので、それらは、一体として、ローラー1040の周りで用紙のカールを取り去る。このカールの取り除きは、長期間に亘ってプリントロールの形で蓄えられている用紙に加わる強いカールを打ち消すように作用する。ローラー1038、1039は、カバーベース部1077の端部及びローラーとスナップ式にフィットするため設けられ、ローラー1040は、駆動用の歯車付きの端部1043を含み、上側カバー部品1010とスナップ式にフィットし、用紙1004を間でしっかりと締め付ける。
【1480】
カバー部品1011は、端部隆起又はリップ1042を含む。端部リップ1042は用紙の出口孔を、カメラシステム内の対応した印刷熱プラテン構造体と正確にアライメントするため設けられる。このようにして、既存の用紙は、近傍のプリントヘッドに対して、正確にアライメント又は位置決めされ、用紙をプリントヘッドへ完全に案内する。
【1481】
図230及び図231を参照すると、射出成形部品から形成可能である内部コア部の分解斜視図が示され、このコア部は、内部スポンジ部分1034から1036を有する3個のコアインクシリンダが中心に置かれている。
【1482】
コア部の一端には、一連の通気チャンネル、例えば、1014から1016が設けられる。各通気チャンネル1014から1016は、第1の孔、例えば、1018を外部接点1019と相互連結し、外部接点は雰囲気に相互連結される。通気チャンネル、例えば、1014が後に続く通路は、好ましくは、曲がりくねった性質があり、あちこちに曲がりくねっている。通気チャンネルは、シーリングテープ1020の一部分によってシールされ、シーリングテープはコア部の端に被せられる。シーリングテープ1020の表面は、好ましくは、疎水性を高めるため、疎水性的に処理されているので、流体部分が通気チャンネルに進入することを防ぐ。
【1483】
コア部1007の第2の端には、3個の厚くなった部分1024、1025及び1026を含むラバーシーリングキャップ1023が設けられ、厚くなった各部分は一連の疎らな孔が存在する。例えば、部分1024は、疎らな孔1029、1030及び1031を含む。疎らな孔は、別個の厚くなった部分の各々からの1個の孔は1本の直線に並ぶように配置される。例えば、疎らな孔1031、1032及び1033(図230)は、全てが1本の線に並び、各孔は別個の厚くなった部分に由来する。厚くなった部分の各々は、対応したインク供給リザーバと対になり、3個の孔が穿刺されたとき、対応したリザーバと流体連通する。
【1484】
端部キャップユニット1044は、コア部1007に取り付けられる。端部キャップ1044は、認証チップ1033を挿入するためのアパーチャ1046を含み、その上、3個の突起を含む延長されたアダプタ(図示せず)を含み、3個の突起は、対応した孔(例えば、1048)を貫通し、シール1023の厚くなった部分(例えば、1033)を穿刺し、対応したインクチャンバー(例えば、1035)と相互連結する。
【1485】
更に、端部1044には、認証チップ1033が挿入され、認証チップは、プリントロールのカメラシステムへのアクセスを認証するため設けられる。したがって、このコア部は、3個の別個のチャンバーに分割され、各チャンバーは、別の色のインクと、内部スポンジと、を収容する。各チャンバーは、第1の端にインク出口を含み、第2の端に通気孔を含む。シーリングテープ1020のカバーは通気チャンネルを覆うために設けられ、ラバーシール1023はインクチャンバーの第2の端をシールするため設けられる。
【1486】
内部インクチャンバースポンジ、及び疎水性チャンネルは、プリントロールを移動可能な環境、多種多様な向きでも利用できるようにさせる。更に、スポンジは、それ自体に疎水化処理をすることができるので、インクをコア部から順序正しく追い出すことができる。
【1487】
一連のリブ(例えば、1027)は、コア部1007とプリントロールフォーマー1008との間の摩擦的接触を最低限にさせるため、コア部の表面に設けることができる。
【1488】
プリントロールの殆どの部分は、射出成形プラスチックから構成することが可能であり、プリントロールは、大きい内部インク貯蔵容量をもつ。簡単化された構造は、用紙のカールを取り除くメカニズムと、漏れを最小限に抑えるインクチャンバー通気孔と、を含む。ラバーシールは、インク供給チャンバーとの間に効率的な通路を設けるので、動作的能力が高まる。
【1489】
Artcardは、勿論、それ以外の様々な環境で使用される。例えば、Artcardは、組み込み型及びパーソナルコンピュータ(PC)アプリケーションの両方で使用可能であり、大量のデータ又はコンフィギュレーション情報への使い勝手のよいインタフェースを提供する。
【1490】
この結果として、多数のアプリケーションが見込まれる。例えば、ArtCardリーダーはPCに取り付けてもよい。PCのアプリケーションは多種多様である。最も簡単なアプリケーションは、低コスト読み出し専用配布媒体である。ArtCardは印刷されるので、社内のデータ配布のため使用されるならば、監査の証跡を与える。
【1491】
更に、PCは、しばしば、クローズドシステムのベースとして使用されるが、多数のコンフィギュレーション上のオプションが存在する。複雑なオペレーティングシステムのユーザ用インタフェースに頼るのではなく、ArtCardをArtCardリーダーに単に挿入するだけで、あらゆるコンフィギュレーション上の必要条件を満たすことができる。
【1492】
ArtCardの裏面は、アプリケーションとは無関係に、同一の視覚的外観を備えているが(なぜならば、データを格納しているからである)、ArtCarの表面はアプリケーションに依存している。表面は、アプリケーションの状況においてユーザに理解される。
【1493】
したがって、図Z35の装置は、本、新聞、雑誌、技術マニュアル等の形で情報の効率的な配信を行う。
【1494】
更なるアプリケーションでは、図Z36に示されるように、Artcard80の表面は、サンプル画像に適用される芸術的な効果を含む画像を表示する。カード80の裏面にプログラムされたデータを読み出すカードリーダー82を含むカメラシステム81を準備し、アルゴリズム的なデータをサンプル画像83に適用して出力画像84を生成することが可能である。カメラユニット81は、オンボードインクジェットプリンタと、サンプル画像データを処理するために十分な処理手段と、を含む。ArtCardの構想の更なるアプリケーションは、BizCardと呼ぶものであり、会社情報を名刺に記憶させる。BizCardは、会社情報の新しいコンセプトである。bizCardの表面は、図Z37に示されるように、外観と機能の点で現在の普通の名刺と全く同じである。それは、写真と連絡先情報とを含み、名刺と同じように多種多様なカードスタイルがある。しかし、各biZCardの裏面は、黒色ドットと白色ドットの印刷された配列を含み、会社に関する1から2メガバイトの情報を保持する。その結果は、3.5インチ形ディスケットの記憶装置が各名刺に取り付けられていることと同じである。
【1495】
情報は、会社情報、特定製品シート、ウェブサイトポインタ、電子メールアドレス、経歴等、bizCardの所有者が望む情報であれば何でも構わない。BizCardは、USBポートを用いて標準的なPCに接続可能なPC付属型カードリーダーのような如何なるArtCardリーダーでも読むことが可能である。BizCardは、ドキュメントとして専用組み込み装置に表示させてもよい。PCの場合、ユーザはそのbizCardをリーダーに挿入するだけでよい。bizCarは、好ましくは、ウェブサイトと全く同様に、通常のウェブブラウザを使用してナビゲートされる。
【1496】
所有者の写真及びデジタル署名を、会社の公開鍵へのポインタと共に収容することによって、各biZCardは、その人が、本当にその人本人であり、且つ指定の会社のために実際に働いている人であることを電子的に検証するために使用できる。その上、会社の公開鍵を指すことにより、biZCardは、安全な通信を簡単に開始させることができる。
【1497】
TourCardと呼ばれる更なるアプリケーションは、ある都市への旅行者及び訪問者のための情報を格納したArtCardのアプリケーションである。tourCardがArtcardブックリーダーに挿入されると、情報は次の形式をとり得る:
*地図
*公共輸送機関時刻表
*名所
*郷土史
*行事及び催事
*レストラン案内
*ショッピングセンター
TourCardは、観光客用パンフレット、ガイドブック、及び街角案内の低コスト代替物である。製造コストがカード1枚当たりわずか1セントであれば、tourCardは、観光客案内所、ホテル、及び観光地で、最低限のコスト、又は広告による資金援助があれば無料で配布可能である。ブックリーダーの携帯性は、これを旅行者にとって完璧なソリューションにする。TourCardは、ArtCardリーダーを備わっているコンピュータが任意のウェブブラウザ上でtourCardに符号化された情報を復号化することができる情報キオスクでも使用可能である。
【1498】
ブックリーダーの双方向性は、tourCardを非常に多用途化する。例えば、地図に格納されたハイパーテキストリンクは、呼び物ビルディングの歴史的物語を表示するために選択可能である。このように、旅行者は、その都市のガイド付きツアーに出かけることが可能であり、関連した交通機関の路線図及び時刻表は何時でも利用可能である。tourCardは、地図と、ガイドブックと、時刻表と、レストラン案内と、を別々にする必要性を無くし、各個の旅行者に対する簡単なソリューションを作成する。勿論、データカードにはこの他にも多くの利用可能性がある。例えば、新聞、学習案内、ポップグループカード、ベースボールカード、時刻表、音楽データファイル、製品パーツ、広告、テレビガイド、映画ガイド、見本市情報、雑誌のクーポンカード、レシピ、求人広告、医療情報、プログラム及びソフトウェア、競馬新聞、電子新聞、年次報告書、レストランガイド、ホテルガイド、バケーションガイド、翻訳プログラム、ゴルフコース情報、ニュース放送、コミック、気象詳細等がある。
【1499】
例えば、ArtCardは、本の内容、又は新聞の内容を含み得る。このようなシステムの一例は図Z35に示され、ArtCard70は、一方の面に本のタイトルを含み、もう一方の面には本の符号化された内容が印刷されている。カード70はリーダー72に挿入され、リーダー72には、カードリーダー72の折り畳みを可能にさせるフレキシブルディスプレイ73が含まれ得る。カードリーダー72は表示制御部74を含み、表示制御部は、前ページへの移動、次ページへの移動、及びカードリーダー72のその他の制御を可能にさせる。
【図面の簡単な説明】
【1500】
【図1】好適な実施例によって構成されたArtcam装置の説明図である。
【図2】主要なArtcam電子コンポーネントの概略ブロック図である。
【図3】Artcam中央プロセッサの概略ブロック図である。
【図3(a)】VLIWベクトルプロセッサの詳細図である。
【図4】処理ユニットの詳細図である。
【図5】ALU188の詳細図である。
【図6】入力ブロックの詳細図である。
【図7】出力ブロックの詳細図である。
【図8】レジスタブロックの詳細図である。
【図9】クロスバー1の詳細図である。
【図10】クロスバー2の詳細図である。
【図11】読み出しプロセスブロックの詳細図である。
【図12】読み出しプロセスブロックの詳細図である。
【図13】バレルシフタブロックの詳細図である。
【図14】アダー/ロジックブロックの詳細図である。
【図15】乗算ブロックの詳細図である。
【図16】I/Oアドレス生成器の詳細図である。
【図17】画素蓄積フォーマットの説明図である。
【図18】順次読み出しイタレータプロセスの説明図である。
【図19】ボックス読み出しイタレータプロセスの説明図である。
【図20】ボックス書き込みイタレータプロセスの説明図である。
【図21】垂直ストリップ読み出し/書き込みイタレータプロセスの説明図である。
【図22】垂直ストリップ読み出し/書き込みイタレータプロセスの説明図である。
【図23】シーケンシャル生成プロセスの説明図である。
【図24】シーケンシャル生成プロセスの説明図である。
【図25】垂直ストリップ生成プロセスの説明図である。
【図26】垂直ストリップ生成プロセスの説明図である。
【図27】画素データ構造の説明図である。
【図28】画素処理プロセスの説明図である。
【図29】表示コントローラの概略ブロック図である。
【図30】CCD像編成の説明図である。
【図31】論理的画像用の蓄積フォーマットの説明図である。
【図32】内部画像メモリ蓄積フォーマットの説明図である。
【図33】画像ピラミッド蓄積フォーマットの説明図である。
【図34】Artcardをサンプリングするプロセスの時系列の説明図である。
【図35】スーパーサンプリングプロセスの説明図である。
【図36】回転したArtcardを読み取るプロセスの説明図である。
【図37】Artcardを復号化するために必要なステップのフローチャートである。
【図38】単一のArtcardの左隅の拡大図である。
【図39】検出用の単一ターゲットである。
【図40】ターゲットを検出するため使用される方法の説明図である。
【図41】二つのターゲット間の距離を計算する方法の説明図である。
【図42】重心ドリフトのプロセスの説明図である。
【図43】重心ルックアップテーブルの一形態を示す図である。
【図44】重心更新プロセスの説明図である。
【図45】好適な実施例において利用されるデルタ処理用ルックアップテーブルの説明図である。
【図46】Artcardのスクランブルを解除するプロセスの説明図である。
【図47】ドットの系列の拡大図である。
【図48】ドットカードのデータ面の説明図である。
【図49】単一データブロックの概略説明図である。
【図50】単一データブロックの説明図である。
【図51】図50のデータブロックの部分拡大図である。
【図52】図50のデータブロックの部分拡大図である。
【図53】単一ターゲット構造の説明図である。
【図54】データブロックのターゲット構造の説明図である。
【図55】データ領域のボーダークロック用領域に対するターゲットの位置関係の説明図である。
【図56】データブロックのオリエンテーションカラムの説明図である。
【図57】データブロックのドットのアレイの説明図である。
【図58】リード・ソロモン符号化のデータの構造の概略説明図である。
【図59】例示的なリード・ソロモン符号化プロセスの説明図である。
【図60】リード・ソロモン符号化プロセスの説明図である。
【図61】データブロック内の符号化されたデータのレイアウトの説明図である。
【図62】代替的なArtcardをサンプリングする際のサンプリングプロセスの説明図である。
【図63】回転した代替的なArtcardをサンプリングする一例の拡大図である。
【図64】スキャニングプロセスの説明図である。
【図65】スキャニングプロセスの起こり得るスキャニング分布の説明図である。
【図66】シンボル誤りとリード・ソロモンブロック誤りの確率の間の関係を示す図である。
【図67】復号化プロセスのフローチャートである。
【図68】復号化プロセスのプロセス稼働図である。
【図69】復号化におけるデータフローステップの説明図である。
【図70】読み出しプロセスの詳細図である。
【図71】代替的なArtcardの開始を検出するプロセスの詳細図である。
【図72】ビットデータ抽出プロセスの詳細図である。
【図73】復号化プロセスで利用されるセグメンテーションプロセスの説明図である。
【図74】ターゲットを見つける復号化プロセスの詳細図である。
【図75】ターゲットを見つける際に利用されるデータ構造の説明図である。
【図76】Lancos3関数構造の説明図である。
【図77】クロックマーク及びボーダー領域を示すデータブロックの部分拡大図である。
【図78】ビットイメージを復号化する際の処理ステップの説明図である。
【図79】ビットイメージを復号化する際のデータフローステップの説明図である。
【図80】好適な実施例のスクランブル解除プロセスの説明図である。
【図81】コンボルバの一実施形態の説明図である。
【図82】コンボルブプロセスの説明図である。
【図83】コンポジットプロセスの説明図である。
【図84】通常のコンポジットプロセスの詳細図である。
【図85】ワープマップを使用するワーププロセスの説明図である。
【図86】ワープバイリニア補間プロセスの説明図である。
【図87】スパン計算のプロセスの説明図である。
【図88】基本スパン計算プロセスの説明図である。
【図89】スパン計算プロセスの詳細な一実施形態の説明図である。
【図90】画像ピラミッドレベルを読み取るプロセスの説明図である。
【図91】バイリニア補間のためピラミッドテーブルを使用する方法の説明図である。
【図92】ヒストグラム収集プロセスの説明図である。
【図93】色変換プロセスの説明図である。
【図94】色変換プロセスの説明図である。
【図95】色空間変換プロセスの詳細図である。
【図96】入力座標を計算するプロセスの説明図である。
【図97】フィードバック付きコンポジット処理するプロセスの説明図である。
【図98】汎用スケーリングプロセスの説明図である。
【図99】Xスケーリングプロセスにおけるスケールの説明図である。
【図100】Yスケーリングプロセスにおけるスケールの説明図である。
【図101】モザイクプロセスの説明図である。
【図102】サブピクセル移動プロセスの説明図である。
【図103】コンポジットプロセスの説明図である。
【図104】フィードバック付きでコンポジットするプロセスの説明図である。
【図105】入力画像からの色でタイル貼りするプロセスの説明図である。
【図106】フィードバック付きでタイル貼りするプロセスの説明図である。
【図107】テクスチャ置換でタイル貼りするプロセスの説明図である。
【図108】入力画像からの色でタイル貼りするプロセスの説明図である。
【図108】入力画像からの色でタイル貼りするプロセスの説明図である。
【図109】フィードバック無しでテクスチャを与えるプロセスの説明図である。
【図110】フィードバック付きでテクスチャを与えるプロセスの説明図である。
【図111】CCD画素の回転のプロセスの説明図である。
【図112】緑色サブピクセルの補間のプロセスの説明図である。
【図113】青色サブピクセルの補間のプロセスの説明図である。
【図114】赤色サブピクセルの補間のプロセスの説明図である。
【図115】奇数画素行に対し0度回転のCCD画素補間のプロセスの説明図である。
【図116】偶数画素行に対し0度回転のCCD画素補間のプロセスの説明図である。
【図117】Lab色空間への色変換のプロセスの説明図である。
【図118】1/√Xの計算のプロセスの説明図である。
【図119】1/√Xの計算の実施例の詳細説明図である。
【図120】バンプマップによる法線計算のプロセスの説明図である。
【図121】バンプマップによる照度計算のプロセスの説明図である。
【図122】バンプマップによる照度計算のプロセスの詳細説明図である。
【図123】指向性ライトを使用するLの計算のプロセスの説明図である。
【図124】オムニライト及びスポットライトを使用するLの計算のプロセスの説明図である。
【図124】オムニライト及びスポットライトを使用するLの計算の一実施形態の説明図である。
【図126】N.L内積を計算するプロセスの説明図である。
【図127】N.L内積を計算するプロセスの詳細説明図である。
【図128】R.V内積を計算するプロセスの説明図である。
【図129】R.V内積を計算するプロセスの詳細説明図である。
【図130】減衰計算の入力及び出力の説明図である。
【図131】減衰計算の実際の実施形態の説明図である。
【図132】円錐ファクタのグラフの説明図である。
【図133】半影計算のプロセスの説明図である。
【図134】半影計算に利用される角の説明図である。
【図135】半影計算への入力及び出力の説明図である。
【図136】半影計算の実際の実施形態の説明図である。
【図137】周辺光計算への入力及び出力の説明図である。
【図138】周辺光計算の実際の実施形態の説明図である。
【図139】散光計算の実際の実施形態の説明図である。
【図140】散光計算への入力及び出力の説明図である。
【図141】散光計算の実際の実施形態の説明図である。
【図142】反射計算への入力及び出力の説明図である。
【図143】反射計算の実際の実施形態の説明図である。
【図144】反射計算への入力及び出力の説明図である。
【図145】反射計算の実際の実施形態の説明図である。
【図146】周辺光だけの独計算の実際の実施形態の説明図である。
【図147】光計算のプロセス概要の説明図である。
【図148】単一無限光源用の照明計算の一例の説明図である。
【図149】バンプマップを用いないオムニ光源用の照明計算の一例の説明図である。
【図150】バンプマップを用いるオムニ光源用の照明計算の一例の説明図である。
【図151】バンプマップを用いないスポットライト光源用の照明計算の一例の説明図である。
【図152】関連したバンプマップを用いて画像に単一スポットライトを当てるプロセスの説明図である。
【図153】単一プリントヘッドの論理的レイアウトの説明図である。
【図154】プリントヘッドインタフェースの構造の説明図である。
【図155】Lab画像の回転のプロセスの説明図である。
【図156】印刷画像の画素のフォーマットの説明図である。
【図157】ディザリングプロセスの説明図である。
【図158】8ビットドット出力を生成するプロセスの説明図である。
【図159】カードリーダーの斜視図である。
【図160】カードリーダーの展開斜視図である。
【図161】Artcardリーダーのクローズアップ図である。
【図162】プリントロール及びプリントヘッドの斜視図である。
【図163】プリントロールの第1の展開斜視図である。
【図164】プリントロールの第2の展開斜視図である。
【図164A】本発明によるプリントカートリッジの形のプリントロール及びプリントヘッドの別の実施例の3次元図である。
【図164B】図164Aのプリントカートリッジの3次元断面図である。
【図164C】図164Aのプリントカートリッジの3次元展開図である。
【図164D】図164Aのプリントカートリッジの一部を形成するインクカートリッジの3次元展開図である。
【図164E】図164Aのプリントカートリッジのエアーフィルタの3次元図である。
【図165】プリントロール認証チップの説明図である。
【図166】プリントロール認証チップの拡大図である。
【図167】一段階認証チップデータプロトコルの説明図である。
【図168】二段階認証チップデータプロトコルの説明図である。
【図169】第1のプレゼンスオンリープロトコルの説明図である。
【図170】第2のプレゼンスオンリープロトコルの説明図である。
【図171】第3のデータプロトコルの説明図である。
【図172】第4のデータプロトコルの説明図である。
【図173】最長期間LFSRの概略ブロック図である。
【図174】クロック制限フィルタの概略ブロック図である。
【図175】タンパー検出ラインの概略ブロック図である。
【図176】特大のnMOSトランジスタの概略ブロック図である。
【図177】タンパー検出ラインからの多数のXORの取り出しを説明する図である。
【図178】タンパーラインがノイズ発生回路を覆う状態の説明図である。
【図179】通常のFETの実施形態の説明図である。
【図180】好適な実施例の修正されたFETの実施形態の説明図である。
【図181】認証チップの略ブロックである。
【図182】メモリマップの一例の説明図である。
【図183】定数メモリマップの一例の説明図である。
【図184】RAMメモリマップの一例の説明図である。
【図185】フラッシュメモリ変数メモリマップの一例の説明図である。
【図186】フラッシュメモリプログラムメモリマップの一例の説明図である。
【図187】状態機械のコンポーネント間のデータフロー及び関係を示す図である。
【図188】I/Oユニットのコンポーネント間のデータフロー及び関係を示す図である。
【図189】算術論理ユニット(ALU)の概略ブロック図である。
【図190】RPLユニットの概略ブロック図である。
【図191】ALUのRORブロックの概略ブロック図である。
【図192】プログラムカウンタユニットのブロック図である。
【図193】メモリユニットの概略ブロック図である。
【図194】アドレス生成ユニットの概略ブロック図である。
【図195】JSIGENユニットの概略ブロック図である。
【図196】JSRGENユニットの概略ブロック図である。
【図197】DBRGENユニットの概略ブロック図である。
【図198】LDKGENユニットの概略ブロック図である。
【図199】RPLGENユニットの概略ブロック図である。
【図200】VARGENユニットの概略ブロック図である。
【図201】CLRGENユニットの概略ブロック図である。
【図202】BITGENユニットの概略ブロック図である。
【図203】プリントロール認証チップに記憶された情報を示す図である。
【図204】Artcam認証チップ内に記憶されたデータの説明図である。
【図205】プリントヘッドパルス特徴付けプロセスの説明図である。
【図206】プリントヘッドインク供給機構の拡大断面斜視図である。
【図207】インクヘッド供給ユニットの底面斜視図である。
【図208】インクヘッド供給ユニットの底面側の断面図である。
【図209】インクヘッド供給ユニットの上面斜視図である。
【図210】インクヘッド供給ユニットの上面側の断面図である。
【図211】プリントヘッドの一部分の斜視図である。
【図212】プリントヘッドユニットの拡大斜視図である。
【図213】Artcamカメラの内部の上面側の斜視図であり、平らにされた部品が示されている。
【図214】Artcamカメラの内部の底面側の斜視図であり、平らにされた部品が示されている。
【図215】Artcamカメラの内部の第1の上面側の斜視図であり、Artcamに収容された部品が示されている。
【図216】Artcamカメラの内部の第2の上面側の斜視図であり、Artcamに収容された部品が示されている。
【図217】Artcamカメラの内部の第2の上面側の斜視図であり、Artcamに収容された部品が示されている。
【図218】ポストカードプリントロールの裏書き部分の説明図である。
【図219】画像印刷後のポストカードプリントロールの対応した表画像の説明図である。
【図220】顧客が購入できる状態のプリントロールの形態の説明図である。
【図221】Artcamアプリケーション全体のソフトウェア/ハードウェアモジュールのレイアウトの説明図である。
【図222】カメラマネージャのソフトウェア/ハードウェアモジュールのレイアウトの説明図である。
【図223】画像処理マネージャのソフトウェア/ハードウェアモジュールのレイアウトの説明図である。
【図224】プリンタマネージャのソフトウェア/ハードウェアモジュールのレイアウトの説明図である。
【図225】画像処理マネージャのソフトウェア/ハードウェアモジュールのレイアウトの説明図である。
【図226】ファイルマネージャのソフトウェア/ハードウェアモジュールのレイアウトの説明図である。
【図227】代替的な形態のプリントロールの部分断面斜視図である。
【図228】図227のプリントロールの左側の拡大斜視図である。
【図229】単一プリントロールの右側の拡大斜視図である。
【図230】プリントロールのコア部分の部分断面拡大斜視図である。
【図231】プリントロールのコア部分の第2の拡大斜視図である。

Claims (28)

  1. ハウジングと、
    ハウジングに配置されて、カートリッジのシリアルナンバー、媒体および媒体顔料のうちの少なくとも一つに関するデータを運ぶメモリ回路を有している集積回路デバイスと、
    を備える印刷カートリッジ。
  2. 印刷カートリッジの媒体顔料を決める方法であって、前記方法は、印刷カートリッジのハウジングに配置されている集積回路デバイスのメモリ回路を読みとるステップを備えており、前記メモリ回路は媒体顔料に関するデータを運ぶ、方法。
  3. ハウジングと、
    ハウジング内に配置され、媒体顔料の供給を含んでいる媒体顔料供給設備と、
    ハウジングに配置されて、媒体顔料に関するデータを運ぶメモリ回路を有している集積回路デバイスと、
    を備える印刷カートリッジ。
  4. プロセッサに集積回路デバイスを電気的に接続する通信リード線を含んでいる、請求項3に記載の印刷カートリッジ。
  5. 集積回路デバイスは保護メカニズムを取り入れて集積回路デバイスの複製を阻止している、請求項3に記載の印刷カートリッジ。
  6. 集積回路デバイスは、媒体顔料に関する前記データを運ぶコードが格納されるよう事前にプログラムされている事前プログラムチップの形を成している、請求項3に記載の印刷カートリッジ。
  7. チップはフラッシュメモリ製造工程の製品である、請求項6に記載の印刷カートリッジ。
  8. チップは、媒体顔料に関する暗号化データを運ぶコードが格納されるよう事前にプログラムされている、請求項6に記載の印刷カートリッジ。
  9. チップは、以下の特徴群、媒体顔料を識別するシリアルナンバー、媒体顔料の種類、媒体顔料の粘度、媒体顔料の表面張力、媒体顔料の光学的特徴および媒体の種類に対応する最適なインク滴の量、から選択される少なくとも一つの特徴に関するデータを運ぶコードが格納されるよう事前にプログラムされている、請求項6に記載の印刷カートリッジ。
  10. 印刷カートリッジの媒体を決める方法であって、前記方法は、印刷カートリッジのハウジングに配置される集積回路デバイスのメモリ回路を読みとるステップを備えており、メモリ回路は印刷カートリッジの媒体に関するデータを運ぶ、方法。
  11. ハウジングと、
    ハウジング内に配置され、媒体の供給を含んでいる媒体供給設備と、
    ハウジングに配置されて、媒体に関するデータを運ぶメモリ回路を有している集積回路デバイスと、
    を備える、印刷カートリッジ。
  12. プロセッサに集積回路デバイスを電気的に接続する通信リード線を含んでいる、請求項11に記載の印刷カートリッジ。
  13. 集積回路デバイスは保護メカニズムを取り入れて集積回路デバイスの複製を阻止している、請求項11に記載の印刷カートリッジ。
  14. 集積回路デバイスは、媒体に関する前記データを運ぶコードが格納されるよう事前にプログラムされている事前プログラムチップの形を成している、請求項11に記載の印刷カートリッジ。
  15. チップはフラッシュメモリ製造工程の製品である、請求項14に記載の印刷カートリッジ。
  16. チップは、媒体に関する暗号化データを運ぶコードが格納されるよう事前にプログラムされている、
    請求項14に記載の印刷カートリッジ。
  17. チップは、以下の特徴群、媒体を識別するシリアルナンバー、媒体の種類および媒体の長さ、から選択される少なくとも一つの特徴に関するデータを運ぶコードが格納されるよう事前にプログラムされている、請求項14に記載の印刷カートリッジ。
  18. 印刷カートリッジの媒体および媒体顔料を決める方法であって、前記方法は、印刷カートリッジのハウジングに配置される集積回路デバイスのメモリ回路を読みとるステップを備えており、メモリ回路は印刷カートリッジの媒体顔料および媒体に関するデータを運ぶ、方法。
  19. ハウジングと、
    ハウジング内に配置され、媒体の供給および媒体顔料の供給をそれぞれが含んでいる、媒体供給設備および媒体顔料供給設備と、
    ハウジングに配置されて、媒体顔料および媒体に関するデータを運ぶメモリ回路を有している集積回路デバイスと、
    を備える、印刷カートリッジ。
  20. プロセッサに集積回路デバイスを電気的に接続する通信リード線を含んでいる、請求項19に記載の印刷カートリッジ。
  21. 集積回路デバイスは保護メカニズムを取り入れて集積回路デバイスの複製を阻止している、請求項19に記載の印刷カートリッジ。
  22. 集積回路デバイスは、媒体顔料および媒体に関する前記データを運ぶコードが格納されるよう事前にプログラムされている事前プログラムチップの形を成している、請求項19に記載の印刷カートリッジ。
  23. チップはフラッシュメモリ製造工程の製品である、請求項22に記載の印刷カートリッジ。
  24. チップは、媒体に関する暗号化データを運ぶコードが格納されるよう事前にプログラムされている、請求項22に記載の印刷カートリッジ。
  25. チップは、以下の特徴群、媒体を識別するシリアルナンバー、媒体顔料を識別するシリアルナンバー、媒体の長さ、媒体の種類、媒体顔料の粘度、媒体顔料の表面張力、媒体顔料の光学的特徴および媒体の種類に対応する媒体顔料の最適なインク滴の量、から選択される少なくとも一つの特徴に関するデータを運ぶコードが格納されるよう事前にプログラムされている、請求項22に記載の印刷カートリッジ。
  26. 印刷カートリッジの認証チップであって、前記印刷カートリッジは、ハウジングと、ハウジング内に配置され且つ媒体顔料の供給を含んでいる媒体顔料供給設備と、ハウジングに配置され媒体顔料を印字機構に送る送り機構とを有しており、前記認証チップは、
    ハウジングに取り付け可能であって、媒体顔料に関するデータを取り入れるメモリ回路を有している集積回路デバイス
    を備えている、印刷カートリッジの認証チップ。
  27. 印刷カートリッジの認証チップであって、前記印刷カートリッジは、ハウジングと、ハウジング内に配置され且つ媒体の供給を含んでいる媒体供給設備と、ハウジングに配置され媒体を印字機構に送る送り機構とを有しており、前記認証チップは、
    ハウジングに取り付け可能であって、媒体に関するデータを取り入れるメモリ回路を有している集積回路デバイス
    を備えている、印刷カートリッジの認証チップ。
  28. 印刷カートリッジの認証チップであって、前記印刷カートリッジは、ハウジングと、ハウジング内に配置され且つ媒体顔料の供給および媒体の供給を含んでいる媒体顔料供給設備および媒体供給設備と、ハウジングに配置され媒体顔料および媒体を印字機構に送る送り機構とを有しており、前記認証チップは、
    ハウジングに取り付け可能であって、媒体顔料および媒体に関するデータを取り入れるメモリ回路を有している集積回路デバイス
    を備えている、印刷カートリッジの認証チップ。
JP2003518836A 2001-08-06 2002-07-09 集積回路デバイスを有する印刷カートリッジ Pending JP2004536736A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/922,036 US6547364B2 (en) 1997-07-12 2001-08-06 Printing cartridge with an integrated circuit device
PCT/AU2002/000914 WO2003013865A1 (en) 2001-08-06 2002-07-09 Printing cartridge with an integrated circuit device

Publications (1)

Publication Number Publication Date
JP2004536736A true JP2004536736A (ja) 2004-12-09

Family

ID=25446393

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003518836A Pending JP2004536736A (ja) 2001-08-06 2002-07-09 集積回路デバイスを有する印刷カートリッジ

Country Status (11)

Country Link
US (7) US6547364B2 (ja)
EP (1) EP1425178A4 (ja)
JP (1) JP2004536736A (ja)
KR (2) KR100601836B1 (ja)
CN (1) CN1299913C (ja)
AU (1) AU2002344712B2 (ja)
CA (1) CA2456739A1 (ja)
IL (1) IL160258A (ja)
NZ (1) NZ531183A (ja)
WO (1) WO2003013865A1 (ja)
ZA (1) ZA200400868B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007116215A (ja) * 2005-10-18 2007-05-10 Fuji Electric Holdings Co Ltd 耐タンパーモジュール装置
JP2010042629A (ja) * 2008-08-15 2010-02-25 Sony Corp 液体吐出装置及び液体吐出方法

Families Citing this family (125)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7280251B1 (en) 1996-02-26 2007-10-09 Rah Color Technologies System and method for calibrating color printers
US6786420B1 (en) 1997-07-15 2004-09-07 Silverbrook Research Pty. Ltd. Data distribution mechanism in the form of ink dots on cards
US6618117B2 (en) 1997-07-12 2003-09-09 Silverbrook Research Pty Ltd Image sensing apparatus including a microcontroller
US6547364B2 (en) * 1997-07-12 2003-04-15 Silverbrook Research Pty Ltd Printing cartridge with an integrated circuit device
US6624848B1 (en) 1997-07-15 2003-09-23 Silverbrook Research Pty Ltd Cascading image modification using multiple digital cameras incorporating image processing
US6985207B2 (en) 1997-07-15 2006-01-10 Silverbrook Research Pty Ltd Photographic prints having magnetically recordable media
AUPO802797A0 (en) 1997-07-15 1997-08-07 Silverbrook Research Pty Ltd Image processing method and apparatus (ART54)
US7110024B1 (en) 1997-07-15 2006-09-19 Silverbrook Research Pty Ltd Digital camera system having motion deblurring means
AUPO850597A0 (en) 1997-08-11 1997-09-04 Silverbrook Research Pty Ltd Image processing method and apparatus (art01a)
US6690419B1 (en) 1997-07-15 2004-02-10 Silverbrook Research Pty Ltd Utilising eye detection methods for image processing in a digital image camera
US6195150B1 (en) * 1997-07-15 2001-02-27 Silverbrook Research Pty Ltd Pseudo-3D stereoscopic images and output device
US6879341B1 (en) 1997-07-15 2005-04-12 Silverbrook Research Pty Ltd Digital camera system containing a VLIW vector processor
US7551201B2 (en) 1997-07-15 2009-06-23 Silverbrook Research Pty Ltd Image capture and processing device for a print on demand digital camera system
AUPP702098A0 (en) 1998-11-09 1998-12-03 Silverbrook Research Pty Ltd Image creation method and apparatus (ART73)
AUPQ056099A0 (en) 1999-05-25 1999-06-17 Silverbrook Research Pty Ltd A method and apparatus (pprint01)
US7099028B2 (en) * 2001-07-20 2006-08-29 Hewlett-Packard Development Company, L.P. Systems and methods for providing restricted web site access to users of certain brands of printing device replaceable components
US20050162455A1 (en) * 2001-08-06 2005-07-28 Kia Silverbrook Printing cartridge with an integrated circuit device
US7052117B2 (en) 2002-07-03 2006-05-30 Dimatix, Inc. Printhead having a thin pre-fired piezoelectric layer
US7589850B2 (en) * 2002-12-30 2009-09-15 Lexmark International, Inc. Licensing method for use with an imaging device
US7182445B2 (en) * 2003-04-25 2007-02-27 Hewlett-Packard Development Company, L.P. Replaceable printer component
US7240995B2 (en) * 2003-05-06 2007-07-10 Lexmark International, Inc. Method of authenticating a consumable
US7434053B2 (en) * 2003-08-28 2008-10-07 Hewlett-Packard Development Company, L.P. Methods and systems for providing an identification key to a printing device
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7424620B2 (en) * 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7934494B1 (en) * 2003-10-10 2011-05-03 Donna Gail Schneider Collapsible heating apparatus
US20050157125A1 (en) * 2004-01-21 2005-07-21 Silverbrook Research Pty Ltd Inkjet printer cartridge with integral shield
US20050157112A1 (en) * 2004-01-21 2005-07-21 Silverbrook Research Pty Ltd Inkjet printer cradle with shaped recess for receiving a printer cartridge
US7198352B2 (en) * 2004-01-21 2007-04-03 Kia Silverbrook Inkjet printer cradle with cartridge stabilizing mechanism
US20050157000A1 (en) * 2004-01-21 2005-07-21 Silverbrook Research Pty Ltd Inkjet printer cradle with end data and power contacts
US7364263B2 (en) * 2004-01-21 2008-04-29 Silverbrook Research Pty Ltd Removable inkjet printer cartridge
US7469989B2 (en) * 2004-01-21 2008-12-30 Silverbrook Research Pty Ltd Printhead chip having longitudinal ink supply channels interrupted by transverse bridges
US7360868B2 (en) * 2004-01-21 2008-04-22 Silverbrook Research Pty Ltd Inkjet printer cartridge with infrared ink delivery capabilities
US7097291B2 (en) * 2004-01-21 2006-08-29 Silverbrook Research Pty Ltd Inkjet printer cartridge with ink refill port having multiple ink couplings
US7364264B2 (en) * 2004-01-21 2008-04-29 Silverbrook Research Pty Ltd Inkjet printer cradle with single drive motor performing multiple functions
US7328985B2 (en) * 2004-01-21 2008-02-12 Silverbrook Research Pty Ltd Inkjet printer cartridge refill dispenser with security mechanism
US7448734B2 (en) * 2004-01-21 2008-11-11 Silverbrook Research Pty Ltd Inkjet printer cartridge with pagewidth printhead
US20050157128A1 (en) * 2004-01-21 2005-07-21 Silverbrook Research Pty Ltd Pagewidth inkjet printer cartridge with end electrical connectors
US7645025B2 (en) * 2004-01-21 2010-01-12 Silverbrook Research Pty Ltd Inkjet printer cartridge with two printhead integrated circuits
US7367647B2 (en) * 2004-01-21 2008-05-06 Silverbrook Research Pty Ltd Pagewidth inkjet printer cartridge with ink delivery member
US7731327B2 (en) * 2004-01-21 2010-06-08 Silverbrook Research Pty Ltd Desktop printer with cartridge incorporating printhead integrated circuit
US7524016B2 (en) * 2004-01-21 2009-04-28 Silverbrook Research Pty Ltd Cartridge unit having negatively pressurized ink storage
US7121655B2 (en) * 2004-01-21 2006-10-17 Silverbrook Research Pty Ltd Inkjet printer cartridge refill dispenser
US7425050B2 (en) * 2004-01-21 2008-09-16 Silverbrook Research Pty Ltd Method for facilitating maintenance of an inkjet printer having a pagewidth printhead
US7374355B2 (en) * 2004-01-21 2008-05-20 Silverbrook Research Pty Ltd Inkjet printer cradle for receiving a pagewidth printhead cartridge
US7441865B2 (en) * 2004-01-21 2008-10-28 Silverbrook Research Pty Ltd Printhead chip having longitudinal ink supply channels
US7083273B2 (en) * 2004-01-21 2006-08-01 Silverbrook Research Pty Ltd Inkjet printer cartridge with uniform compressed air distribution
US7303255B2 (en) * 2004-01-21 2007-12-04 Silverbrook Research Pty Ltd Inkjet printer cartridge with a compressed air port
US7232208B2 (en) * 2004-01-21 2007-06-19 Silverbrook Research Pty Ltd Inkjet printer cartridge refill dispenser with plunge action
US8491076B2 (en) 2004-03-15 2013-07-23 Fujifilm Dimatix, Inc. Fluid droplet ejection devices and methods
US7281778B2 (en) 2004-03-15 2007-10-16 Fujifilm Dimatix, Inc. High frequency droplet ejection device and method
US7738137B2 (en) * 2004-03-23 2010-06-15 Lexmark International, Inc. Inkjet print head synchronous serial output for data integrity
US7387370B2 (en) * 2004-04-29 2008-06-17 Hewlett-Packard Development Company, L.P. Microfluidic architecture
US20050243118A1 (en) * 2004-04-29 2005-11-03 Ward Jefferson P Consumable cartridge theft deterrence apparatus and methods
US7293359B2 (en) * 2004-04-29 2007-11-13 Hewlett-Packard Development Company, L.P. Method for manufacturing a fluid ejection device
US8099791B1 (en) 2004-06-25 2012-01-17 Lexmark International, Inc. Method of authenticating a consumable in an imaging device
US8587798B2 (en) * 2004-07-30 2013-11-19 Hewlett-Packard Development Company, L.P. Replacement component for a printing device
US8281132B2 (en) * 2004-11-29 2012-10-02 Broadcom Corporation Method and apparatus for security over multiple interfaces
US9116641B2 (en) * 2004-11-30 2015-08-25 Panduit Corp. Market-based labeling system and method
US7280772B2 (en) * 2004-12-29 2007-10-09 Lexmark International, Inc. Method for detecting whether a cartridge installed in an imaging apparatus is potentially counterfeit
JP5004806B2 (ja) 2004-12-30 2012-08-22 フジフィルム ディマティックス, インコーポレイテッド インクジェットプリント法
US20060190324A1 (en) * 2005-02-24 2006-08-24 Lexmark International, Inc. Method for providing reduced cost imaging to customers
WO2007030504A2 (en) 2005-09-07 2007-03-15 Retail Inkjet Solutions System and method for refilling inkjet cartridges
US7441102B2 (en) * 2006-02-28 2008-10-21 Freescale Semiconductor, Inc. Integrated circuit with functional state configurable memory and method of configuring functional states of the integrated circuit memory
EP2016593B1 (en) * 2006-04-20 2014-11-05 NVE Corporation Enclosure tamper detection and protection
US20070255966A1 (en) * 2006-05-01 2007-11-01 Vincenzo Condorelli Cryptographic circuit with voltage-based tamper detection and response circuitry
US7739323B2 (en) * 2006-06-20 2010-06-15 International Business Machines Corporation Systems, methods and computer program products for providing a combined moduli-9 and 3 residue generator
US7987615B2 (en) * 2006-11-08 2011-08-02 Lg Electronics Inc. Exhaust structure for clothes dryer in apartment building
TWI320754B (en) * 2006-11-10 2010-02-21 Ind Tech Res Inst A print data processing mothod and device therefor
US7988247B2 (en) 2007-01-11 2011-08-02 Fujifilm Dimatix, Inc. Ejection of drops having variable drop size from an ink jet printer
EP2135254B1 (en) 2007-03-09 2016-05-25 NVE Corporation Stressed magnetoresistive tamper detection devices
KR100906404B1 (ko) * 2007-07-13 2009-07-09 삼성에스디에스 주식회사 소모품의 복제 방지 장치 및 방법
WO2009014971A1 (en) * 2007-07-20 2009-01-29 Bigfoot Networks, Inc. Client authentication device and methods thereof
US7944047B2 (en) * 2007-09-25 2011-05-17 Qimonda Ag Method and structure of expanding, upgrading, or fixing multi-chip package
KR100997239B1 (ko) * 2008-03-03 2010-11-29 삼성전자주식회사 Crum 유닛, 교체가능유닛 및 이를 이용하는 화상형성장치와, 그 인증 및 암호화 데이터 통신 방법
JP5038229B2 (ja) * 2008-05-09 2012-10-03 キヤノン株式会社 画像処理装置、画像処理方法並びに画像処理プログラム及びそれを記録する記録媒体
US8172140B2 (en) * 2008-07-29 2012-05-08 International Business Machines Corporation Doped implant monitoring for microchip tamper detection
US9003559B2 (en) * 2008-07-29 2015-04-07 International Business Machines Corporation Continuity check monitoring for microchip exploitation detection
US8332659B2 (en) 2008-07-29 2012-12-11 International Business Machines Corporation Signal quality monitoring to defeat microchip exploitation
US8214657B2 (en) * 2008-07-29 2012-07-03 International Business Machines Corporation Resistance sensing for defeating microchip exploitation
US8332661B2 (en) * 2008-09-11 2012-12-11 Mostovych Andrew N Method and apparatus for prevention of tampering, unauthorized use, and unauthorized extraction of information from microdevices
JP5391635B2 (ja) * 2008-10-06 2014-01-15 富士通株式会社 解析装置、データ保存方法およびデータ保存プログラム
US8938590B2 (en) * 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
US8236247B2 (en) * 2008-12-23 2012-08-07 Intercat Equipment, Inc. Material withdrawal apparatus and methods of regulating material inventory in one or more units
US8242790B2 (en) * 2009-02-23 2012-08-14 Lewis James M Method and system for detection of tampering related to reverse engineering
US8598890B2 (en) * 2009-02-23 2013-12-03 Lewis Innovative Technologies Method and system for protecting products and technology from integrated circuits which have been subject to tampering, stressing and replacement as well as detecting integrated circuits that have been subject to tampering
WO2011156021A2 (en) * 2010-03-01 2011-12-15 The Trustees Of Columbia University In The City Of New York Systems and methods for detecting design-level attacks against a digital circuit
US8539254B1 (en) * 2010-06-01 2013-09-17 Xilinx, Inc. Method and integrated circuit for protecting against differential power analysis attacks
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
CN102173229B (zh) * 2011-01-07 2012-10-31 珠海天威技术开发有限公司 芯片及其认证方法
US10412235B2 (en) 2011-09-30 2019-09-10 Hewlett-Packard Development Company, L.P. Identification bit memory cells in data storage chip
US8635467B2 (en) 2011-10-27 2014-01-21 Certicom Corp. Integrated circuit with logic circuitry and multiple concealing circuits
US8334705B1 (en) 2011-10-27 2012-12-18 Certicom Corp. Analog circuitry to conceal activity of logic circuitry
US8909942B1 (en) * 2012-03-30 2014-12-09 Western Digital Technologies, Inc. MRAM-based security for data storage systems
US9218477B2 (en) 2012-04-13 2015-12-22 Lewis Innovative Technologies Electronic physical unclonable functions
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
USD845978S1 (en) * 2013-01-23 2019-04-16 Yandex Europe Ag Display screen with graphical user interface
US9357102B2 (en) 2013-09-25 2016-05-31 Lexmark International, Inc. Systems and methods of securing operational information associated with an imaging device
US9218235B2 (en) 2013-09-25 2015-12-22 Lexmark International, Inc. Systems and methods of verifying operational information associated with an imaging device
US11888844B2 (en) * 2014-02-18 2024-01-30 Secuve Co., Ltd. Electrical circuit testing device and method
EP3201003B1 (en) * 2014-10-31 2019-12-04 Hewlett-Packard Development Company, L.P. Encryption of fluid cartridges for use with imaging devices
KR20160082794A (ko) * 2014-12-29 2016-07-11 삼성디스플레이 주식회사 타이밍 제어 회로 및 이를 포함하는 표시 장치
US9996857B2 (en) 2015-03-17 2018-06-12 Dow Jones & Company, Inc. Systems and methods for variable data publication
USD787587S1 (en) * 2015-04-03 2017-05-23 Seiko Epson Corporation Tape cartridge for a label printer
USD787588S1 (en) * 2015-04-03 2017-05-23 Seiko Epson Corporation Tape cartridge for a label printer
JP1543547S (ja) * 2015-04-03 2016-02-08
USD788844S1 (en) * 2015-04-03 2017-06-06 Seiko Epson Corporation Tape cartridge for a label printer
USD787590S1 (en) * 2015-04-03 2017-05-23 Seiko Epson Corporation Tape cartridge for a label printer
US9898286B2 (en) * 2015-05-05 2018-02-20 Intel Corporation Packed finite impulse response (FIR) filter processors, methods, systems, and instructions
CN105346256B (zh) * 2015-11-09 2017-03-22 杭州旗捷科技有限公司 一种打印机芯片、墨盒、和打印机芯片存储分配方法
US9969165B2 (en) * 2016-01-08 2018-05-15 Canon Kabushiki Kaisha Liquid discharge head and liquid discharge apparatus
US10118696B1 (en) 2016-03-31 2018-11-06 Steven M. Hoffberg Steerable rotating projectile
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
CN107154041B (zh) * 2017-05-16 2019-08-09 武汉精测电子集团股份有限公司 一种用于显示面板缺陷分类的学习方法
EP3652666B1 (en) 2018-01-30 2022-08-31 Hewlett-Packard Development Company, L.P. Verification by replaceable printer components
CN108537113B (zh) * 2018-03-02 2019-01-04 黄润梓 眼睛伤害度评估方法
US11712637B1 (en) 2018-03-23 2023-08-01 Steven M. Hoffberg Steerable disk or ball
US10733327B2 (en) * 2018-06-26 2020-08-04 Taiwan Semiconductor Manufacturing Co., Ltd. Method and apparatus for protecting a PUF generator
MX2021009111A (es) 2019-02-06 2021-11-04 Hewlett Packard Development Co Circuitos integrados con bits de personalizacion.
CN110321103B (zh) * 2019-06-27 2021-05-11 北京信息科技大学 一种基于物理设备的真随机数生成方法及设备
US11630784B2 (en) 2019-11-20 2023-04-18 Raytheon Company Low-cost physical tamper detection and response for cryptographically secure sanitization
CN112622448B (zh) * 2020-12-17 2021-08-13 上海坚芯电子科技有限公司 支持循环加墨的墨盒芯片设计的方法和系统

Family Cites Families (162)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE1982369U (de) 1967-08-04 1968-03-28 Elbe Kamera Gmbh Verpackungskoerper.
US3748939A (en) 1971-08-11 1973-07-31 Borden Inc Traversing film cutter
US4000239A (en) 1971-12-13 1976-12-28 Teijin Limited Process for spinning naphthalate polyester fibers
OA04528A (fr) 1972-04-27 1980-03-30 Granger Maurice Dispositif de distribution et coupe simultannées de bandes de matériaux enroulés.
CA974408A (en) * 1973-02-07 1975-09-16 C And C Yachts Manufacturing Ltd. Stanchion base
JPS595273B2 (ja) 1974-03-08 1984-02-03 サトウ シゲオ 孔と空間で煙の不純物を完全に析出冷却しタバコを甘く楽しくする、安価な吸口
US4405829A (en) 1977-12-14 1983-09-20 Massachusetts Institute Of Technology Cryptographic communications system and method
DE3024672A1 (de) 1980-06-30 1982-01-28 Jens Ing.(grad.) 6458 Rodenbach Drefahl Dachabdeckung
US4494862A (en) 1980-09-30 1985-01-22 Minolta Camera Kabushiki Kaisha Computerized information processing system equipped with copying apparatus
US4488563A (en) 1982-04-29 1984-12-18 Mitsubishi Acetate Co., Ltd. Filter plug
US4783823A (en) 1985-09-16 1988-11-08 Omron Tateisi Electronics, Co. Card identifying method and apparatus
DE3687345T2 (de) 1985-12-26 1993-07-29 Asahi Glass Matex Co Ltd Betonbewehrungseinheit.
EP0237940B1 (en) 1986-03-19 1993-09-08 Sharp Kabushiki Kaisha Manual copying apparatus
US4748668A (en) 1986-07-09 1988-05-31 Yeda Research And Development Company Limited Method, apparatus and article for identification and signature
US4845770A (en) 1986-11-20 1989-07-04 Oki Electric Industry Co., Ltd. Method and apparatus for processing embossed card
US4914452A (en) 1987-05-08 1990-04-03 Ricoh Company, Ltd. Ink sheet/recording paper cassette
US4791443A (en) 1987-06-12 1988-12-13 Eastman Kodak Company Photographic processor with auxiliary power supply
JPH07118755B2 (ja) 1987-08-19 1995-12-18 株式会社日立製作所 メ−ルシステム
US4987030A (en) 1987-10-07 1991-01-22 Toray Industries, Inc. High-tenacity conjugated fiber and process for preparation thereof
NL8800053A (nl) 1988-01-11 1989-08-01 Philips Nv Videoprocessorsysteem, alsmede afbeeldingssysteem en beeldopslagsysteem, voorzien van een dergelijk videoprocessorsysteem.
US4920548A (en) * 1988-09-28 1990-04-24 Westinghouse Electric Corp. Source range neutron flux count rate system incorporating method and apparatus for eliminating noise from pulse signal
US4902880A (en) 1988-09-30 1990-02-20 Peripheral Dynamics, Inc. Card reader system and method with printing and verification capability
US4937676A (en) * 1989-02-10 1990-06-26 Polariod Corporation Electronic camera system with detachable printer
US5049898A (en) 1989-03-20 1991-09-17 Hewlett-Packard Company Printhead having memory element
DE69028038T2 (de) 1989-05-17 1997-01-30 Minolta Camera Kk Aufnahme- und Reprokamera
JPH07101840B2 (ja) * 1989-08-01 1995-11-01 三菱電機株式会社 ディジタル雑音信号発生回路
ES2252908T3 (es) 1989-08-05 2006-05-16 Canon Kabushiki Kaisha Aparato de impresion por chorros de tinta y cartucho de tinta para el aparato.
US6070003A (en) 1989-11-17 2000-05-30 Texas Instruments Incorporated System and method of memory access in apparatus having plural processors and plural memories
JPH03261276A (ja) 1990-03-12 1991-11-21 Seiko Epson Corp 電子カメラおよびその画像印刷方法
JP3093781B2 (ja) 1990-11-09 2000-10-03 オリンパス光学工業株式会社 合焦位置検出装置
US5493409A (en) 1990-11-29 1996-02-20 Minolta Camera Kabushiki Kaisha Still video camera having a printer capable of printing a photographed image in a plurality of printing modes
JP2990306B2 (ja) 1991-05-14 1999-12-13 富士ゼロックス株式会社 カラー画像記録装置のマーカドット検出方式
JPH04358291A (ja) 1991-06-04 1992-12-11 Hitachi Ltd 色彩画像変更方法
US5231688A (en) 1991-10-07 1993-07-27 Siecor Corporation Furcation kit
US5463470A (en) 1991-10-09 1995-10-31 Fuji Photo Film Co., Ltd. Methods of collecting photometric image data and determining light exposure by extracting feature image data from an original image
US5467118A (en) 1993-12-21 1995-11-14 Hewlett-Packard Company Ink cartridge for a hard copy printing or plotting apparatus
US5581773A (en) 1992-05-12 1996-12-03 Glover; Michael A. Massively parallel SIMD processor which selectively transfers individual contiguously disposed serial memory elements
US5262944A (en) * 1992-05-15 1993-11-16 Hewlett-Packard Company Method for use of color and selective highlighting to indicate patient critical events in a centralized patient monitoring system
US5398131A (en) * 1992-08-13 1995-03-14 Hall; Dennis R. Stereoscopic hardcopy methods
US5604537A (en) 1992-09-10 1997-02-18 Canon Kabushiki Kaisha Imaging apparatus having an automatic focusing means
FR2698195B1 (fr) 1992-11-19 1994-12-16 Gemplus Card Int Procédé et circuit de cryptage et d'authentification pour carte à mémoire synchrone.
US5398315A (en) 1992-12-30 1995-03-14 North American Philips Corporation Multi-processor video display apparatus
JP3686684B2 (ja) 1993-05-19 2005-08-24 富士通株式会社 エアブラシ方法
GB2278480A (en) 1993-05-25 1994-11-30 Sharp Kk Optical apparatus
KR950003362A (ko) 1993-07-21 1995-02-16 마에다 가츠노스케 섬유강화 열가소성수지구조물과 그 제조방법 및 압출기
JPH07123317A (ja) 1993-10-21 1995-05-12 Canon Inc 防振機能付き撮影装置
US5562353A (en) 1993-11-02 1996-10-08 Casio Computer Co., Ltd. Tape printing apparatus that calculates character sizes and line lengths
US6116768A (en) 1993-11-30 2000-09-12 Texas Instruments Incorporated Three input arithmetic logic unit with barrel rotator
GB9325076D0 (en) 1993-12-07 1994-02-02 The Technology Partnership Plc Electronic camera
US5621545A (en) 1993-12-08 1997-04-15 Motta; Ricardo J. Image production using color error diffusion
JPH07220035A (ja) * 1993-12-22 1995-08-18 Xerox Corp 光学的読み取り可能レコード
US6182901B1 (en) * 1993-12-22 2001-02-06 Xerox Corporation Orientational disambiguation for self-clocking glyph codes
US5682191A (en) * 1994-01-24 1997-10-28 Iris Graphics Inc. Ink jet printing apparatus having modular components
JPH07219689A (ja) * 1994-01-31 1995-08-18 Hitachi Ltd プリンタおよびこれを用いるシステム
US5726435A (en) 1994-03-14 1998-03-10 Nippondenso Co., Ltd. Optically readable two-dimensional code and method and apparatus using the same
WO1996005061A1 (en) 1994-08-09 1996-02-22 Encad, Inc. Printer ink cartridge
US5812156A (en) * 1997-01-21 1998-09-22 Hewlett-Packard Company Apparatus controlled by data from consumable parts with incorporated memory devices
US6203147B1 (en) * 1994-12-22 2001-03-20 Hewlett-Packard Company Electrical and fluidic interface for an ink supply
JPH08186757A (ja) 1994-12-28 1996-07-16 Canon Inc 電子カメラ
US5642226A (en) 1995-01-18 1997-06-24 Rosenthal; Bruce A. Lenticular optical system
US5792249A (en) 1995-01-25 1998-08-11 Canon Kabushiki Kaisha Liquid composition, ink set, image-forming method and apparatus using the same
DE19549376A1 (de) 1995-03-07 1996-09-26 Francotyp Postalia Gmbh Anordnung zur Ermittlung einer Farbbandrestmenge für Thermotransferdruckverfahren
JP3542397B2 (ja) 1995-03-20 2004-07-14 キヤノン株式会社 撮像装置
WO1996032265A1 (en) 1995-04-12 1996-10-17 Eastman Kodak Company A color video printer and a photocd system with integrated printer
US5768482A (en) 1995-06-14 1998-06-16 Hewlett-Packard Company Resolution-triggered sharpening for scaling of a digital-matrix image
US5999697A (en) 1995-07-21 1999-12-07 Sony Corporation Apparatus for recording and/or reproducing still images
US5999203A (en) 1995-08-18 1999-12-07 Ttp Group, Plc Printer assembly with easily loaded paper cartridge
US5847836A (en) 1995-08-29 1998-12-08 Canon Kabushiki Kaisha Printer-built-in image-sensing apparatus and using strobe-light means electric-consumption control method thereof
JPH09116843A (ja) 1995-10-20 1997-05-02 Canon Inc プリンター付撮影装置
US5613175A (en) 1995-08-31 1997-03-18 Xerox Corporation Anisotropic imaging member
JP3313952B2 (ja) 1995-09-14 2002-08-12 キヤノン株式会社 インクジェット記録装置
EP0763930B1 (en) 1995-09-15 2002-10-16 Agfa-Gevaert Method for calculating color gamuts
US5917963A (en) 1995-09-21 1999-06-29 Canon Kabushiki Kaisha Image processing apparatus and image processing method
US5757394A (en) 1995-09-27 1998-05-26 Lexmark International, Inc. Ink jet print head identification circuit with programmed transistor array
US5745175A (en) 1995-10-02 1998-04-28 Flashpoint Technologies, Inc. Method and system for providing automatic focus control for a still digital camera
US5634730A (en) 1995-11-06 1997-06-03 Bobry; Howard H. Hand-held electronic printer
US5717197A (en) * 1995-12-21 1998-02-10 Xerox Corporation Tiled embedded data block-types for generic embedded data block systems
US5992994A (en) 1996-01-31 1999-11-30 Hewlett-Packard Company Large inkjet print swath media support system
US5995772A (en) 1996-02-16 1999-11-30 Lexmark International Inc. Imaging apparatus cartridge including an encoded device
US6009188A (en) 1996-02-16 1999-12-28 Microsoft Corporation Method and system for digital plenoptic imaging
JPH09232435A (ja) * 1996-02-22 1997-09-05 Oki Electric Ind Co Ltd 半導体集積回路
US5963104A (en) * 1996-04-15 1999-10-05 Vlsi Technology, Inc. Standard cell ring oscillator of a non-deterministic randomizer circuit
JP3423532B2 (ja) 1996-05-24 2003-07-07 キヤノン株式会社 画像読取装置
US6074042A (en) * 1997-06-04 2000-06-13 Hewlett-Packard Company Ink container having a guide feature for insuring reliable fluid, air and electrical connections to a printing system
US5961226A (en) 1996-08-16 1999-10-05 Ricoh Company, Ltd. Printing apparatus
US5866253A (en) 1996-08-19 1999-02-02 Isorca, Inc. Synthetic reinforcing strands with spaced filaments
JPH10129049A (ja) 1996-10-31 1998-05-19 Sony Corp プリントメディアカートリッジ及びプリンタ
JP3031613B2 (ja) 1996-11-12 2000-04-10 株式会社つくばソフト研究所 カラー/濃淡画像入力出力装置と入力出力方法
US6222452B1 (en) 1996-12-16 2001-04-24 Confidence International Ab Electronic identification tag
US5788388A (en) * 1997-01-21 1998-08-04 Hewlett-Packard Company Ink jet cartridge with ink level detection
US5860363A (en) 1997-01-21 1999-01-19 Hewlett-Packard Company Ink jet cartridge with separately replaceable ink reservoir
US6573927B2 (en) 1997-02-20 2003-06-03 Eastman Kodak Company Electronic still camera for capturing digital image and creating a print order
US5894309A (en) 1997-02-27 1999-04-13 Mitsubishi Electric Information Technology Center America, Inc. System for modifying lighting in photographs
US6421050B1 (en) 1997-02-27 2002-07-16 Mitsubishi Electric Research Laboratories, Inc. User interface for creation of image generation and transformation functions
US6786420B1 (en) * 1997-07-15 2004-09-07 Silverbrook Research Pty. Ltd. Data distribution mechanism in the form of ink dots on cards
AUPO799197A0 (en) * 1997-07-15 1997-08-07 Silverbrook Research Pty Ltd Image processing method and apparatus (ART01)
US6227643B1 (en) 1997-05-20 2001-05-08 Encad, Inc. Intelligent printer components and printing system
US6416154B1 (en) 1997-07-12 2002-07-09 Silverbrook Research Pty Ltd Printing cartridge with two dimensional code identification
US6702417B2 (en) * 1997-07-12 2004-03-09 Silverbrook Research Pty Ltd Printing cartridge with capacitive sensor identification
US6547364B2 (en) * 1997-07-12 2003-04-15 Silverbrook Research Pty Ltd Printing cartridge with an integrated circuit device
US6803989B2 (en) * 1997-07-15 2004-10-12 Silverbrook Research Pty Ltd Image printing apparatus including a microcontroller
US6618117B2 (en) * 1997-07-12 2003-09-09 Silverbrook Research Pty Ltd Image sensing apparatus including a microcontroller
US6565181B2 (en) 1997-07-12 2003-05-20 Silverbrook Research Pty Ltd Printing cartridge with switch array identification
US7077515B2 (en) 1997-07-15 2006-07-18 Silverbrook Research Pty Ltd Media cartridge for inkjet printhead
US6879341B1 (en) * 1997-07-15 2005-04-12 Silverbrook Research Pty Ltd Digital camera system containing a VLIW vector processor
US6665454B1 (en) 1997-07-15 2003-12-16 Silverbrook Research Pty Ltd Dot adjacency compensation in optical storage systems using ink dots
AUPO798697A0 (en) 1997-07-15 1997-08-07 Silverbrook Research Pty Ltd Data processing method and apparatus (ART51)
US6217165B1 (en) * 1997-07-15 2001-04-17 Silverbrook Research Pty. Ltd. Ink and media cartridge with axial ink chambers
US6918654B2 (en) 1997-07-15 2005-07-19 Silverbrook Research Pty Ltd Ink distribution assembly for an ink jet printhead
US7246897B2 (en) 1997-07-15 2007-07-24 Silverbrook Research Pty Ltd Media cartridge for inkjet printhead
AUPO802797A0 (en) 1997-07-15 1997-08-07 Silverbrook Research Pty Ltd Image processing method and apparatus (ART54)
US6195150B1 (en) * 1997-07-15 2001-02-27 Silverbrook Research Pty Ltd Pseudo-3D stereoscopic images and output device
US7410243B2 (en) 1997-07-15 2008-08-12 Silverbrook Research Pty Ltd Inkjet nozzle with resiliently biased ejection actuator
US6727948B1 (en) 1997-07-15 2004-04-27 Silverbrook Research Pty Ltd Utilizing autofocus information for image processing in a digital camera
US6985207B2 (en) 1997-07-15 2006-01-10 Silverbrook Research Pty Ltd Photographic prints having magnetically recordable media
US7284843B2 (en) 1997-07-15 2007-10-23 Silverbrook Research Pty Ltd Ink distribution assembly for an ink jet printhead
US7050143B1 (en) 1998-07-10 2006-05-23 Silverbrook Research Pty Ltd Camera system with computer language interpreter
AUPO801997A0 (en) 1997-07-15 1997-08-07 Silverbrook Research Pty Ltd Media processing method and apparatus (ART21)
US7578582B2 (en) 1997-07-15 2009-08-25 Silverbrook Research Pty Ltd Inkjet nozzle chamber holding two fluids
AUPO850597A0 (en) 1997-08-11 1997-09-04 Silverbrook Research Pty Ltd Image processing method and apparatus (art01a)
US7110024B1 (en) 1997-07-15 2006-09-19 Silverbrook Research Pty Ltd Digital camera system having motion deblurring means
AUPO850097A0 (en) 1997-08-11 1997-09-04 Silverbrook Research Pty Ltd Image processing method and apparatus (art31)
AUPP398798A0 (en) 1998-06-09 1998-07-02 Silverbrook Research Pty Ltd Image creation method and apparatus (ij43)
US6459495B1 (en) * 1997-07-15 2002-10-01 Silverbrook Research Pty Ltd Dot center tracking in optical storage systems using ink dots
IL121640A (en) * 1997-08-27 2000-06-01 Scitex Corp Ltd Ink cartridge
JP4093618B2 (ja) * 1997-10-08 2008-06-04 富士通株式会社 デジタルコード信号を記録した記録担体の発行/読取装置および記録担体
US5923942A (en) 1997-11-14 1999-07-13 Ricoh Company, Ltd. Printer and paper tray having a user programmable paper size
JPH11160734A (ja) * 1997-11-28 1999-06-18 Semiconductor Energy Lab Co Ltd 液晶電気光学装置
JPH11196359A (ja) 1997-12-27 1999-07-21 Konica Corp 画像形成装置
JP3487576B2 (ja) 1997-12-29 2004-01-19 キヤノン株式会社 インクジェット記録装置
US6014008A (en) 1998-01-22 2000-01-11 Ericsson, Inc. Battery identification system
JPH11254700A (ja) * 1998-03-10 1999-09-21 Canon Inc インクジェット記録装置及びメディアカートリッジ
US7083108B2 (en) * 1998-07-10 2006-08-01 Silverbrook Research Pty Ltd Redundantly encoded data structure for encoding a surface
ES2297940T3 (es) * 1998-06-03 2008-05-01 Scott Laboratories, Inc. Aparato para proporcionar a un paciente consciente alivio del dolor y la ansiedad asociados con procedimiento medicos o quirurgicos.
US6161915A (en) 1998-06-19 2000-12-19 Lexmark International, Inc Identification of thermal inkjet printer cartridges
US6816968B1 (en) * 1998-07-10 2004-11-09 Silverbrook Research Pty Ltd Consumable authentication protocol and system
DE19832269A1 (de) 1998-07-17 2000-01-20 Herhof Umwelttechnik Gmbh Geschlossener Behälter zum Kompostieren von Rottegut
DE19832369A1 (de) 1998-07-18 2000-01-20 Tally Computerdrucker Gmbh Verfahren und Einrichtung zum Messen des Tintenvolumens eines Tintenvorratsbehälters in einem Tintendrucker, insbesondere eines auswechselbaren Tintenvorratsbehälters
JP3829900B2 (ja) 1998-12-24 2006-10-04 セイコーエプソン株式会社 インクジェットプリンタ及びインクカートリッジ交換検出方法
US6304825B1 (en) 1999-01-19 2001-10-16 Xerox Corporation Rotary encoder error compensation system and method for photoreceptor surface motion sensing and control
US6658276B2 (en) * 1999-01-25 2003-12-02 Masimo Corporation Pulse oximeter user interface
US6267522B1 (en) 1999-04-19 2001-07-31 Hewlett-Packard Company Media holding apparatus, media size detector and method for detecting size of media for a document-generating device
DE29908918U1 (de) * 1999-05-20 1999-07-29 Feodor Burgmann Dichtungswerke GmbH & Co, 82515 Wolfratshausen Gleitringdichtungsanordnung
AUPQ056099A0 (en) * 1999-05-25 1999-06-17 Silverbrook Research Pty Ltd A method and apparatus (pprint01)
US6547363B1 (en) 1999-07-14 2003-04-15 Seiko Epson Corporation Ink cartridge, ink jet type printing apparatus using the same, and ink cartridge change control method in the apparatus
JP2001092255A (ja) 1999-09-27 2001-04-06 Hitachi Maxell Ltd 電子写真式記録装置、情報媒体及び印刷方法
JP2001096760A (ja) 1999-09-30 2001-04-10 Ricoh Co Ltd インクジェット記録装置及びインクカートリッジ
JP3582471B2 (ja) 1999-10-04 2004-10-27 セイコーエプソン株式会社 半導体集積回路、この半導体集積回路を有するインクカートリッジ、及び、このインクカートリッジを装着したインクジェット記録装置
JP2001117743A (ja) 1999-10-15 2001-04-27 Seiko Epson Corp カートリッジ情報表示構成およびカートリッジ情報表示プログラムが記録されたコンピュータ読み取り可能な記憶媒体
US6304684B1 (en) 2000-02-15 2001-10-16 Cyberecord, Inc. Information processing system and method of using same
GB0011917D0 (en) 2000-05-17 2000-07-05 Cambridge Consultants Printing
WO2002002333A1 (en) * 2000-06-30 2002-01-10 Silverbrook Research Pty Ltd Print cartridge with air filtering means
US6425661B1 (en) 2000-06-30 2002-07-30 Silverbrook Research Pty Ltd Ink cartridge
WO2002002940A1 (de) * 2000-07-06 2002-01-10 Luk Fahrzeug-Hydraulik Gmbh & Co. Kg Sicherheitseinrichtung für klimakompressor
US6547354B1 (en) * 2000-07-28 2003-04-15 Hewlett-Packard Company Printing system that utilizes print masks with resolutions that are non-integral multiples of each other
GB2354202B (en) 2000-08-07 2002-09-18 Dynamic Cassette Int A printer cartridge kit and method
US6924835B1 (en) * 2000-10-20 2005-08-02 Silverbrook Research Pty Ltd Method and apparatus for fault tolerant data storage on photographs
US6822564B2 (en) * 2002-01-24 2004-11-23 Masimo Corporation Parallel measurement alarm processor
US7468032B2 (en) * 2002-12-18 2008-12-23 Cardiac Pacemakers, Inc. Advanced patient management for identifying, displaying and assisting with correlating health-related data
US6958207B1 (en) 2002-12-07 2005-10-25 Niyaz Khusnatdinov Method for producing large area antireflective microtextured surfaces
US7403834B2 (en) * 2003-05-08 2008-07-22 Regents Of The University Of California Methods of and apparatuses for controlling process profiles
JP2005193384A (ja) 2003-12-26 2005-07-21 Ricoh Co Ltd 画像処理方法、装置、および画像形成装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007116215A (ja) * 2005-10-18 2007-05-10 Fuji Electric Holdings Co Ltd 耐タンパーモジュール装置
JP2010042629A (ja) * 2008-08-15 2010-02-25 Sony Corp 液体吐出装置及び液体吐出方法
JP4582225B2 (ja) * 2008-08-15 2010-11-17 ソニー株式会社 液体吐出装置及び液体吐出方法

Also Published As

Publication number Publication date
US20120113293A1 (en) 2012-05-10
WO2003013865A1 (en) 2003-02-20
US20020030712A1 (en) 2002-03-14
US6953235B2 (en) 2005-10-11
US20040004651A1 (en) 2004-01-08
US20050146583A1 (en) 2005-07-07
US6547364B2 (en) 2003-04-15
KR20040045421A (ko) 2004-06-01
US20080087736A1 (en) 2008-04-17
CN1299913C (zh) 2007-02-14
US7527209B2 (en) 2009-05-05
CN1558829A (zh) 2004-12-29
KR100629216B1 (ko) 2006-09-27
CA2456739A1 (en) 2003-02-20
KR20040053107A (ko) 2004-06-23
IL160258A0 (en) 2004-07-25
US20050151777A1 (en) 2005-07-14
US20090251737A1 (en) 2009-10-08
EP1425178A4 (en) 2006-04-19
US8098285B2 (en) 2012-01-17
ZA200400868B (en) 2005-01-26
US7193482B2 (en) 2007-03-20
IL160258A (en) 2006-10-05
AU2002344712B2 (en) 2004-10-21
EP1425178A1 (en) 2004-06-09
NZ531183A (en) 2005-08-26
KR100601836B1 (ko) 2006-07-19
US7275800B2 (en) 2007-10-02

Similar Documents

Publication Publication Date Title
KR100629216B1 (ko) 집적 회로 장치가 구비된 프린팅 카트리지
KR100574290B1 (ko) 마이크로제어기를 포함하는 이미지 프린팅 장치
JP4309954B2 (ja) 向きの検知を伴うカメラデバイス、及び方法
WO1999004368A1 (en) A camera with internal printing system
IL160172A (en) Print cartridge with barcode recognition
IL160256A (en) Print cartridge with pressure sensor array detection
AU2002344712A1 (en) Printing cartridge with an integrated circuit device
WO2003013862A1 (en) A printing cartridge with capacitive sensor identification
AU2002317636A1 (en) A printing cartridge with capacitive sensor identification
WO2003015395A1 (en) Image sensing apparatus including a microcontroller
AU2002317629A1 (en) Image sensing apparatus including a microcontroller
AU2002319008A1 (en) A printing cartridge with pressure sensor array identification
IL160175A (en) Print cartridge with radio frequency detection and print cartridge media determination method
AU2002317630A1 (en) Image printing apparatus including a microcontroller
EP1425180A2 (en) Printing cartridge with two dimensional code identification
AU2002317030A1 (en) Printing cartridge with two dimensional code identification
AU2002317029A1 (en) Printing cartridge with radio frequency identification
IL174357A (en) Printing facility
JP2001523900A5 (ja)

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070501

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070515

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071023

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080318