KR100601836B1 - 스위치 어레이 식별확인을 구비한 프린팅 카트리지 - Google Patents
스위치 어레이 식별확인을 구비한 프린팅 카트리지 Download PDFInfo
- Publication number
- KR100601836B1 KR100601836B1 KR1020047002033A KR20047002033A KR100601836B1 KR 100601836 B1 KR100601836 B1 KR 100601836B1 KR 1020047002033 A KR1020047002033 A KR 1020047002033A KR 20047002033 A KR20047002033 A KR 20047002033A KR 100601836 B1 KR100601836 B1 KR 100601836B1
- Authority
- KR
- South Korea
- Prior art keywords
- array
- switch
- media
- data
- image
- Prior art date
Links
- 238000007639 printing Methods 0.000 title claims abstract description 140
- 239000000049 pigment Substances 0.000 claims abstract description 54
- 238000000034 method Methods 0.000 claims description 599
- 230000008569 process Effects 0.000 claims description 499
- 238000004519 manufacturing process Methods 0.000 claims description 62
- 230000007246 mechanism Effects 0.000 claims description 61
- 238000005516 engineering process Methods 0.000 claims description 26
- 230000003287 optical effect Effects 0.000 claims description 22
- 239000003086 colorant Substances 0.000 claims description 12
- 230000003213 activating effect Effects 0.000 claims description 5
- 238000001053 micromoulding Methods 0.000 claims description 4
- 238000003491 array Methods 0.000 abstract description 7
- 230000015654 memory Effects 0.000 description 329
- 230000006870 function Effects 0.000 description 273
- 238000004422 calculation algorithm Methods 0.000 description 194
- 239000000976 ink Substances 0.000 description 186
- 238000012360 testing method Methods 0.000 description 179
- 238000001514 detection method Methods 0.000 description 150
- 238000012545 processing Methods 0.000 description 133
- 238000004364 calculation method Methods 0.000 description 131
- 230000008859 change Effects 0.000 description 76
- 239000013598 vector Substances 0.000 description 60
- 230000000875 corresponding effect Effects 0.000 description 59
- 230000000694 effects Effects 0.000 description 55
- 238000006243 chemical reaction Methods 0.000 description 53
- 238000010586 diagram Methods 0.000 description 51
- 238000007792 addition Methods 0.000 description 49
- 238000003860 storage Methods 0.000 description 48
- 230000015572 biosynthetic process Effects 0.000 description 42
- 238000013515 script Methods 0.000 description 41
- 238000003786 synthesis reaction Methods 0.000 description 39
- 238000000465 moulding Methods 0.000 description 38
- 230000008901 benefit Effects 0.000 description 37
- 238000013461 design Methods 0.000 description 36
- 230000009467 reduction Effects 0.000 description 36
- 239000010408 film Substances 0.000 description 35
- QRBVCAWHUSTDOT-UHFFFAOYSA-N Methyridine Chemical compound COCCC1=CC=CC=N1 QRBVCAWHUSTDOT-UHFFFAOYSA-N 0.000 description 32
- 230000004044 response Effects 0.000 description 31
- 238000005286 illumination Methods 0.000 description 26
- 230000002829 reductive effect Effects 0.000 description 26
- 238000012546 transfer Methods 0.000 description 25
- 210000004027 cell Anatomy 0.000 description 23
- 235000021251 pulses Nutrition 0.000 description 23
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 21
- 230000009471 action Effects 0.000 description 21
- 239000000872 buffer Substances 0.000 description 21
- 229910052710 silicon Inorganic materials 0.000 description 21
- 239000010703 silicon Substances 0.000 description 21
- 238000004891 communication Methods 0.000 description 20
- 238000013478 data encryption standard Methods 0.000 description 20
- 238000003780 insertion Methods 0.000 description 19
- 229920003023 plastic Polymers 0.000 description 19
- 230000001960 triggered effect Effects 0.000 description 19
- 230000037431 insertion Effects 0.000 description 18
- 238000005259 measurement Methods 0.000 description 18
- 239000000243 solution Substances 0.000 description 18
- 238000012795 verification Methods 0.000 description 18
- 239000004033 plastic Substances 0.000 description 17
- 238000004458 analytical method Methods 0.000 description 16
- 230000006378 damage Effects 0.000 description 15
- 230000002441 reversible effect Effects 0.000 description 15
- 238000005070 sampling Methods 0.000 description 15
- 230000009466 transformation Effects 0.000 description 15
- 230000007423 decrease Effects 0.000 description 14
- 238000012217 deletion Methods 0.000 description 14
- 230000037430 deletion Effects 0.000 description 14
- 238000011068 loading method Methods 0.000 description 14
- 238000013507 mapping Methods 0.000 description 13
- 230000001343 mnemonic effect Effects 0.000 description 13
- 238000005457 optimization Methods 0.000 description 13
- 239000000758 substrate Substances 0.000 description 13
- 235000012431 wafers Nutrition 0.000 description 13
- 229910052799 carbon Inorganic materials 0.000 description 12
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 11
- 238000013500 data storage Methods 0.000 description 11
- 230000004048 modification Effects 0.000 description 11
- 238000012986 modification Methods 0.000 description 11
- 239000008188 pellet Substances 0.000 description 11
- 238000013519 translation Methods 0.000 description 11
- 238000007906 compression Methods 0.000 description 10
- 230000006835 compression Effects 0.000 description 10
- 239000000203 mixture Substances 0.000 description 10
- 230000007704 transition Effects 0.000 description 10
- 241000238876 Acari Species 0.000 description 9
- 239000000284 extract Substances 0.000 description 9
- 239000000463 material Substances 0.000 description 9
- 238000001444 catalytic combustion detection Methods 0.000 description 8
- 229910052739 hydrogen Inorganic materials 0.000 description 8
- 230000002265 prevention Effects 0.000 description 8
- 238000000926 separation method Methods 0.000 description 8
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 7
- 230000001427 coherent effect Effects 0.000 description 7
- 238000012937 correction Methods 0.000 description 7
- 229920001971 elastomer Polymers 0.000 description 7
- 238000000605 extraction Methods 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 7
- 238000011084 recovery Methods 0.000 description 7
- 230000029058 respiratory gaseous exchange Effects 0.000 description 7
- 239000005060 rubber Substances 0.000 description 7
- 230000006399 behavior Effects 0.000 description 6
- 238000013479 data entry Methods 0.000 description 6
- 230000036961 partial effect Effects 0.000 description 6
- 238000007789 sealing Methods 0.000 description 6
- 238000012952 Resampling Methods 0.000 description 5
- 230000003044 adaptive effect Effects 0.000 description 5
- 230000001174 ascending effect Effects 0.000 description 5
- 230000001680 brushing effect Effects 0.000 description 5
- 238000010367 cloning Methods 0.000 description 5
- 150000001875 compounds Chemical class 0.000 description 5
- 239000012141 concentrate Substances 0.000 description 5
- 230000003111 delayed effect Effects 0.000 description 5
- 238000007599 discharging Methods 0.000 description 5
- 238000009826 distribution Methods 0.000 description 5
- 238000011156 evaluation Methods 0.000 description 5
- 238000001914 filtration Methods 0.000 description 5
- 238000007667 floating Methods 0.000 description 5
- 238000003384 imaging method Methods 0.000 description 5
- 230000033001 locomotion Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 229910052698 phosphorus Inorganic materials 0.000 description 5
- 238000003825 pressing Methods 0.000 description 5
- 238000007619 statistical method Methods 0.000 description 5
- 238000000844 transformation Methods 0.000 description 5
- WPNJAUFVNXKLIM-UHFFFAOYSA-N Moxonidine Chemical compound COC1=NC(C)=NC(Cl)=C1NC1=NCCN1 WPNJAUFVNXKLIM-UHFFFAOYSA-N 0.000 description 4
- 239000004793 Polystyrene Substances 0.000 description 4
- 241001441724 Tetraodontidae Species 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 238000011109 contamination Methods 0.000 description 4
- 230000001276 controlling effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 239000013078 crystal Substances 0.000 description 4
- 230000007123 defense Effects 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 4
- 230000001066 destructive effect Effects 0.000 description 4
- 230000001976 improved effect Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 238000002347 injection Methods 0.000 description 4
- 239000007924 injection Substances 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 239000004973 liquid crystal related substance Substances 0.000 description 4
- 239000003550 marker Substances 0.000 description 4
- 230000005055 memory storage Effects 0.000 description 4
- 229910052751 metal Inorganic materials 0.000 description 4
- 239000002184 metal Substances 0.000 description 4
- 101150083561 nop-1 gene Proteins 0.000 description 4
- 238000004806 packaging method and process Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 229920002223 polystyrene Polymers 0.000 description 4
- 238000002360 preparation method Methods 0.000 description 4
- 239000002096 quantum dot Substances 0.000 description 4
- 238000006467 substitution reaction Methods 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- NCGICGYLBXGBGN-UHFFFAOYSA-N 3-morpholin-4-yl-1-oxa-3-azonia-2-azanidacyclopent-3-en-5-imine;hydrochloride Chemical compound Cl.[N-]1OC(=N)C=[N+]1N1CCOCC1 NCGICGYLBXGBGN-UHFFFAOYSA-N 0.000 description 3
- WHXSMMKQMYFTQS-UHFFFAOYSA-N Lithium Chemical compound [Li] WHXSMMKQMYFTQS-UHFFFAOYSA-N 0.000 description 3
- 241000593989 Scardinius erythrophthalmus Species 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 239000002131 composite material Substances 0.000 description 3
- 230000001010 compromised effect Effects 0.000 description 3
- 229920001577 copolymer Polymers 0.000 description 3
- 238000005520 cutting process Methods 0.000 description 3
- 230000003247 decreasing effect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 238000009792 diffusion process Methods 0.000 description 3
- 239000011888 foil Substances 0.000 description 3
- 238000005755 formation reaction Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 239000007788 liquid Substances 0.000 description 3
- 229910052744 lithium Inorganic materials 0.000 description 3
- 239000012528 membrane Substances 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 229910052757 nitrogen Inorganic materials 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 201000005111 ocular hyperemia Diseases 0.000 description 3
- 230000008447 perception Effects 0.000 description 3
- 238000005498 polishing Methods 0.000 description 3
- 229910021420 polycrystalline silicon Inorganic materials 0.000 description 3
- 229920005591 polysilicon Polymers 0.000 description 3
- 238000012805 post-processing Methods 0.000 description 3
- 230000005855 radiation Effects 0.000 description 3
- 230000008672 reprogramming Effects 0.000 description 3
- 238000012552 review Methods 0.000 description 3
- 229910052709 silver Inorganic materials 0.000 description 3
- 239000004332 silver Substances 0.000 description 3
- -1 silver halides Chemical class 0.000 description 3
- 238000000528 statistical test Methods 0.000 description 3
- 239000000126 substance Substances 0.000 description 3
- 238000010200 validation analysis Methods 0.000 description 3
- 101710113783 Candidapepsin-3 Proteins 0.000 description 2
- 240000003473 Grevillea banksii Species 0.000 description 2
- 101001103036 Homo sapiens Nuclear receptor ROR-alpha Proteins 0.000 description 2
- 241000238370 Sepia Species 0.000 description 2
- 208000027418 Wounds and injury Diseases 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 2
- 230000002238 attenuated effect Effects 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 235000013361 beverage Nutrition 0.000 description 2
- 239000011449 brick Substances 0.000 description 2
- 235000019646 color tone Nutrition 0.000 description 2
- 238000004040 coloring Methods 0.000 description 2
- 238000005336 cracking Methods 0.000 description 2
- 238000013075 data extraction Methods 0.000 description 2
- 238000001035 drying Methods 0.000 description 2
- 239000000428 dust Substances 0.000 description 2
- 238000003708 edge detection Methods 0.000 description 2
- 230000006353 environmental stress Effects 0.000 description 2
- 238000005530 etching Methods 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 210000003195 fascia Anatomy 0.000 description 2
- 238000011049 filling Methods 0.000 description 2
- 239000012530 fluid Substances 0.000 description 2
- 229930195733 hydrocarbon Natural products 0.000 description 2
- 150000002430 hydrocarbons Chemical class 0.000 description 2
- 230000002209 hydrophobic effect Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 239000002480 mineral oil Substances 0.000 description 2
- 238000010422 painting Methods 0.000 description 2
- 230000001575 pathological effect Effects 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 230000000704 physical effect Effects 0.000 description 2
- 238000013031 physical testing Methods 0.000 description 2
- 238000001020 plasma etching Methods 0.000 description 2
- 239000002985 plastic film Substances 0.000 description 2
- 239000010453 quartz Substances 0.000 description 2
- 238000001454 recorded image Methods 0.000 description 2
- 230000008054 signal transmission Effects 0.000 description 2
- VYPSYNLAJGMNEJ-UHFFFAOYSA-N silicon dioxide Inorganic materials O=[Si]=O VYPSYNLAJGMNEJ-UHFFFAOYSA-N 0.000 description 2
- 230000007480 spreading Effects 0.000 description 2
- 238000003892 spreading Methods 0.000 description 2
- 238000000992 sputter etching Methods 0.000 description 2
- 229920002725 thermoplastic elastomer Polymers 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 230000003313 weakening effect Effects 0.000 description 2
- 238000001039 wet etching Methods 0.000 description 2
- 230000003245 working effect Effects 0.000 description 2
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 1
- FGRBYDKOBBBPOI-UHFFFAOYSA-N 10,10-dioxo-2-[4-(N-phenylanilino)phenyl]thioxanthen-9-one Chemical compound O=C1c2ccccc2S(=O)(=O)c2ccc(cc12)-c1ccc(cc1)N(c1ccccc1)c1ccccc1 FGRBYDKOBBBPOI-UHFFFAOYSA-N 0.000 description 1
- 238000010146 3D printing Methods 0.000 description 1
- 241000251468 Actinopterygii Species 0.000 description 1
- 101100316753 Arabidopsis thaliana VAL2 gene Proteins 0.000 description 1
- 241001061225 Arcos Species 0.000 description 1
- 206010003497 Asphyxia Diseases 0.000 description 1
- 241000288673 Chiroptera Species 0.000 description 1
- 241000196324 Embryophyta Species 0.000 description 1
- 239000004593 Epoxy Substances 0.000 description 1
- 101001103039 Homo sapiens Inactive tyrosine-protein kinase transmembrane receptor ROR1 Proteins 0.000 description 1
- 101001103033 Homo sapiens Tyrosine-protein kinase transmembrane receptor ROR2 Proteins 0.000 description 1
- 102100039615 Inactive tyrosine-protein kinase transmembrane receptor ROR1 Human genes 0.000 description 1
- 101100217298 Mus musculus Aspm gene Proteins 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 240000007320 Pinus strobus Species 0.000 description 1
- 241000872198 Serjania polyphylla Species 0.000 description 1
- 102100030140 Thiosulfate:glutathione sulfurtransferase Human genes 0.000 description 1
- 102100039616 Tyrosine-protein kinase transmembrane receptor ROR2 Human genes 0.000 description 1
- 230000035508 accumulation Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 229910052782 aluminium Inorganic materials 0.000 description 1
- XAGFODPZIPBFFR-UHFFFAOYSA-N aluminium Chemical compound [Al] XAGFODPZIPBFFR-UHFFFAOYSA-N 0.000 description 1
- 230000003667 anti-reflective effect Effects 0.000 description 1
- 239000010953 base metal Substances 0.000 description 1
- 230000000740 bleeding effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 210000003850 cellular structure Anatomy 0.000 description 1
- 230000000739 chaotic effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000007596 consolidation process Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000012888 cubic function Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000008021 deposition Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 238000007865 diluting Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000005670 electromagnetic radiation Effects 0.000 description 1
- 238000010894 electron beam technology Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000004049 embossing Methods 0.000 description 1
- 230000009969 flowable effect Effects 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 238000003306 harvesting Methods 0.000 description 1
- 230000013632 homeostatic process Effects 0.000 description 1
- 238000007373 indentation Methods 0.000 description 1
- 238000002329 infrared spectrum Methods 0.000 description 1
- 238000001746 injection moulding Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000010884 ion-beam technique Methods 0.000 description 1
- 230000001678 irradiating effect Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 238000003698 laser cutting Methods 0.000 description 1
- 238000001459 lithography Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 1
- 230000005389 magnetism Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 230000013011 mating Effects 0.000 description 1
- 239000011104 metalized film Substances 0.000 description 1
- 238000002493 microarray Methods 0.000 description 1
- 238000000386 microscopy Methods 0.000 description 1
- 235000010446 mineral oil Nutrition 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 239000002991 molded plastic Substances 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 239000003973 paint Substances 0.000 description 1
- 230000029553 photosynthesis Effects 0.000 description 1
- 238000010672 photosynthesis Methods 0.000 description 1
- 229920006255 plastic film Polymers 0.000 description 1
- 239000002574 poison Substances 0.000 description 1
- 231100000614 poison Toxicity 0.000 description 1
- 229920000642 polymer Polymers 0.000 description 1
- 238000013404 process transfer Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000011514 reflex Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000005316 response function Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000006748 scratching Methods 0.000 description 1
- 230000002393 scratching effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 239000012209 synthetic fiber Substances 0.000 description 1
- 229920002994 synthetic fiber Polymers 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 230000003685 thermal hair damage Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 229910052721 tungsten Inorganic materials 0.000 description 1
- 239000010981 turquoise Substances 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
- 238000003466 welding Methods 0.000 description 1
- 238000004804 winding Methods 0.000 description 1
Images
Classifications
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/14—Structure thereof only for on-demand ink jet heads
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J11/00—Devices 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/0005—Curl smoothing, i.e. smoothing down corrugated printing material, e.g. by pressing means acting on wrinkled printing material
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J15/00—Devices 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/04—Supporting, feeding, or guiding devices; Mountings for web rolls or spindles
- B41J15/044—Cassettes or cartridges containing continuous copy material, tape, for setting into printing devices
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/14—Structure thereof only for on-demand ink jet heads
- B41J2/14427—Structure of ink jet print heads with thermal bend detached actuators
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1623—Manufacturing processes bonding and adhesion
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1626—Manufacturing processes etching
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1626—Manufacturing processes etching
- B41J2/1628—Manufacturing processes etching dry etching
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1626—Manufacturing processes etching
- B41J2/1629—Manufacturing processes etching wet etching
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1631—Manufacturing processes photolithography
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1632—Manufacturing processes machining
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1635—Manufacturing processes dividing the wafer into individual chips
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/1637—Manufacturing processes molding
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/164—Manufacturing processes thin film formation
- B41J2/1642—Manufacturing processes thin film formation thin film formation by CVD [chemical vapor deposition]
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/164—Manufacturing processes thin film formation
- B41J2/1645—Manufacturing processes thin film formation thin film formation by spincoating
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/16—Production of nozzles
- B41J2/1621—Manufacturing processes
- B41J2/164—Manufacturing processes thin film formation
- B41J2/1646—Manufacturing processes thin film formation thin film formation by sputtering
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
- B41J2/17503—Ink cartridges
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
- B41J2/17503—Ink cartridges
- B41J2/17513—Inner structure
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
- B41J2/17503—Ink cartridges
- B41J2/17526—Electrical contacts to the cartridge
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
- B41J2/17503—Ink cartridges
- B41J2/17543—Cartridge presence detection or type identification
- B41J2/17546—Cartridge presence detection or type identification electronically
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
- B41J2/17503—Ink cartridges
- B41J2/17553—Outer structure
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J29/00—Details of, or accessories for, typewriters or selective printing mechanisms not otherwise provided for
- B41J29/38—Drives, motors, controls or automatic cut-off devices for the entire printing mechanism
- B41J29/393—Devices for controlling or analysing the entire machine ; Controlling or analysing mechanical parameters involving printing of test patterns
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J3/00—Typewriters or selective printing or marking mechanisms characterised by the purpose for which they are constructed
- B41J3/44—Typewriters or selective printing mechanisms having dual functions or combined with, or coupled to, apparatus performing other functions
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B82—NANOTECHNOLOGY
- B82Y—SPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
- B82Y30/00—Nanotechnology for materials or surface science, e.g. nanocomposites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting 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/79—Protecting 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/86—Secure or tamper-resistant housings
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K1/00—Methods or arrangements for marking the record carrier in digital fashion
- G06K1/12—Methods or arrangements for marking the record carrier in digital fashion otherwise than by punching
- G06K1/121—Methods or arrangements for marking the record carrier in digital fashion otherwise than by punching by printing code marks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record 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/06009—Record 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/06037—Record 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record 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/06009—Record 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/06046—Constructional details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record 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/067—Record 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/07—Record 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/073—Special arrangements for circuits, e.g. for protecting identification code in memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods 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/1404—Methods for optical code recognition
- G06K7/1408—Methods for optical code recognition the method being specifically adapted for the type of code
- G06K7/1417—2D bar codes
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/56—Digital 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
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L23/00—Details of semiconductor or other solid state devices
- H01L23/57—Protection from inspection, reverse engineering or tampering
- H01L23/576—Protection from inspection, reverse engineering or tampering using active circuits
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03B—GENERATION 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/00—Generation of noise currents and voltages
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/00127—Connection 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/00326—Connection 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/0035—User-machine interface; Control console
- H04N1/00405—Output means
- H04N1/00408—Display of information to the user, e.g. menus
- H04N1/0044—Display of information to the user, e.g. menus for image preview or review, e.g. to help the user position a sheet
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/00962—Input arrangements for operating instructions or parameters, e.g. updating internal software
- H04N1/00965—Input arrangements for operating instructions or parameters, e.g. updating internal software using a plug-in memory module, e.g. memory card, memory stick
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/21—Intermediate information storage
- H04N1/2104—Intermediate information storage for one or a few pictures
- H04N1/2112—Intermediate information storage for one or a few pictures using still video cameras
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/21—Intermediate information storage
- H04N1/2104—Intermediate information storage for one or a few pictures
- H04N1/2112—Intermediate information storage for one or a few pictures using still video cameras
- H04N1/2154—Intermediate 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/32—Circuits 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/32101—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N1/32128—Display, 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/32133—Display, 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N23/00—Cameras or camera modules comprising electronic image sensors; Control thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/222—Studio circuitry; Studio devices; Studio equipment
- H04N5/262—Studio 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/2628—Alteration of picture size, shape, position or orientation, e.g. zooming, rotation, rolling, perspective, translation
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/135—Nozzles
- B41J2/165—Prevention or detection of nozzle clogging, e.g. cleaning, capping or moistening for nozzles
- B41J2/16585—Prevention or detection of nozzle clogging, e.g. cleaning, capping or moistening for nozzles for paper-width or non-reciprocating print heads
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/17—Ink jet characterised by ink handling
- B41J2/175—Ink supply systems ; Circuit parts therefor
- B41J2/17596—Ink pumps, ink valves
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters 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/01—Ink jet
- B41J2/015—Ink jet characterised by the jet generation process
- B41J2/04—Ink jet characterised by the jet generation process generating single droplets or particles on demand
- B41J2002/041—Electromagnetic transducer
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2202/00—Embodiments of or processes related to ink-jet or thermal heads
- B41J2202/01—Embodiments of or processes related to ink-jet heads
- B41J2202/21—Line printing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing 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/2129—Authenticate client device independently of the user
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L2924/00—Indexing scheme for arrangements or methods for connecting or disconnecting semiconductor or solid-state bodies as covered by H01L24/00
- H01L2924/0001—Technical content checked by a classifier
- H01L2924/0002—Not covered by any one of groups H01L24/00, H01L24/00 and H01L2224/00
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/00127—Connection 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2101/00—Still video cameras
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits 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/3201—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N2201/3212—Display, 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/3222—Display, 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits 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/3201—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N2201/3261—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of multimedia information, e.g. a sound signal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits 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/3201—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N2201/3261—Display, 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/3264—Display, 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits 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/3201—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N2201/3269—Display, 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits 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/3201—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N2201/3274—Storage or retrieval of prestored additional information
- H04N2201/3276—Storage or retrieval of prestored additional information of a customised additional information profile, e.g. a profile specific to a user ID
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits 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/3201—Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
- H04N2201/328—Processing 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)
- Printers Characterized By Their Purpose (AREA)
- Accessory Devices And Overall Control Thereof (AREA)
Abstract
프린팅 카트리지는 하우징을 포함한다. 스위치 액츄에이터들의 어레이는 하우징 상에 위치한다. 스위치 액츄에이터들의 어레이는, 스위치 어레이가 스위치 액츄에이터들의 어레이에 의하여 작동될 때, 상기 데이터를 나르는 신호가 생성되도록, 카트리지의 일련번호, 매체, 매체 색소 중의 적어도 하나와 관련하는 데이터를 나타낸다.
프린팅 카트리지, 스위치 액츄에이터, 스위치 어레이, 매체, 매체 색소
Description
본 발명은 프린터 기술 분야에 관한 것이며, 이미지 프린터 또는 그와 같은 것에 이용하기 위한 프린팅 카트리지를 개시한다. 특히, 본 발명은 스위치 어레이 식별확인을 주입한 프린팅 카트리지를 개시한다.
최근에, 디지털 프린팅 기술은 전통적인 카메라 및 포토그래픽 필름기술들의 적합한 대체기술로서 제안되어 왔다. 전통적인 필름 및 포토그래픽 기술들은, 렌즈 시스템(lensing system)을 지나서 그려진 미리 포맷된 음화들(pre-formatted negatives)을 가지고 그 렌즈 시스템에 의해 찍힌 영상의 음화가 그 위에 이미지화된 다수의 예비 필름 롤에 의존한다.
불행히도, 그런 시스템은 다수의 중요한 결점들을 갖는다. 우선, 이용되는 화학물질들은 빛에 대단히 민감하고 필름 롤에 작용하는 어떤 빛은 필름의 노출을 야기할 것이다. 그것들은 따라서 그 빛 이미징(light imaging)이 완전히 제어되는 광(光) 민감성 환경에서 작동하도록 요구된다. 이것은 성가신 공학적 요구들로 인하여 비용의 증가를 야기한다. 더욱이, 필름 프로세싱 기술들은 "음화(negative)"의 이용과, 캐미컬 프로세싱의 이용 및 할로겐화 은 합성물(complex silver halide) 등의 이용을 통한 "양화(positive)" 필름 페이퍼상의 후행공정을 필요로 한다. 이것은 일반적으로 매우 성가시고 복잡하며 비용이 든다. 게다가, 그런 시스템이 대중화됨에 따라서 어떤 필름 사이즈의 표준화가 야기되고 통상 전술한 기술들로 인하여 그 융통성이 최소화되는 것이다.
최근에, 많은 디지털 카메라들이 소개되어 왔다. 이들 카메라 장치들은 보통 전하결합소자(charged coupled device, CCD), 또는 분리가능한 마그네틱 카드의 형태를 가질 수 있는 미디어 기억 장치(media storage device)를 제어하고 차례대로 연결되는 프로세싱 칩에 연결되는, 포토센서의 다른 형태를 이용한다. 이러한 타입의 장치에서, 이미지는 CCD에 의해 기록(captured)되고, 마그네틱 기억 장치에 저장된다. 다음으로, 기록된 이미지 또는 이미지들은 컴퓨터 장치에 다운로드 되며 출력용으로 프린트 된다. 디지털 카메라는, 이미지들에 대한 액세스가 직접적으로 이루어지는 것이 아닌(non-immediate) 단점이 있으며 나아가 컴퓨터 시스템으로의 로딩하는 후행 공정 단계가 필요하고, 더욱이 후행 공정은 적절한 이용과 준비에 자주 방해가 되는 불리함이 있다.
따라서, 편리하고 단순하며 효과적으로 작동하는 카메라 사진 이미지 제작 장치의 개선된 형태에 대한 보편적인 필요가 존재한다. 나아가 휴대할 수 있는 간단한 형태로서, 이미지들이 효과적으로 재생될 수 있는 직접적인 프린팅 매체(print media)에 대한 필요가 또한 존재한다.
부출원(parent application)에서, 카트리지에 공급되는 매체 색소(media colorant) 및 프린팅 매체에 관련되는 정보를 제공하는 인증 칩(authentication chip)의 이용이 개시되어 있다.
상기 출원은 매체 및 매체 색소의 중 하나, 또는 양자에 관계되는 정보가 카트리지와 함께 공급될 수 있는 수단을 제공하는 것이 매우 바람직함을 증명하였다. 이러한 이유는 프린팅 메커니즘의 작동을 더욱 강화하기 위한 상기 장치의 프로세서 의해서, 적당한 형태 안에서, 이용될 수 있기 때문이다. 프린팅 메커니즘들은 매체 및 매체 색소의 다른 유형에 따라 다르게 작동할 필요가 있다. 프린팅 메커니즘의 작동이 특별한 매체 및 매체 색소에 적합하도록 자동적으로 조절될 수 있도록 프린팅 메커니즘의 제어기에 매체 및 매체 색소에 관한 정보를 제공하는 것은 유용하다.
적절한 인코드 기술을 통해서, 이것은 소모품 시장(after-market)에서의 리필(refilling)을 억제하는 데에 이용될 수 있을 것이다. 프린팅 기술 분야에서 잘 알려져 있는 것처럼, 그러한 소모품 시장에서의 리필은 프린팅산업에서 중요한 문제의 원인이 되었다.
출원인은 마이크로 전자-기계 장치들의 제조를 위한 집적회로 제조 기술들의 발전분야에 있어서 실질적인 전문기술을 발전시켰다. 이러한 전문기술들은 1600dpi 까지의 해상도를 가진 이미지들을 생성할 수 있는 잉크 젯 프린트 헤드들의 제작에 맞추어져 있다. 그러한 해상도의 달성을 위하여, 출원인은 84,000 노즐 장치들에 까지 내장하는 페이지 위드스(path width) 프린트 헤드를 발전시켰다
상기 노즐 장치들내 구성요소들은 필요한 밀도를 달성하기 위하여 마이크로스코픽 스케일(microscopic scale)에 기초하여 제작된다. 나아가, 구성요소들은 시종일관 높은 해상도들의 프린팅를 달성하기 위하여 고정확도의 레벨로 제작될 필요가 있다.
출원인은 그러한 프린트 헤드들의 제조를 위하여 이용되는 기술들이 프린팅 카트리지에 적절한 식별확인카드(identification data)가 제공될 수 있도록 하는 수단을 달성하는 데 적용될 수 있는 방법을 확인하였다.
본 발명의 제1 관점에 따라서,
하우징과;
스위치 엑츄에이터들의 어레이가 상기 하우징 상에 위치하고, 상기 스위치 엑츄에이터들은 카트리지의 일련번호, 매체 및 매체 색소 중 적어도 하나와 관련되는 데이터를 나타내기 위치하는 것으로서, 이를 통하여 스위치 엑츄에이터들이 상기 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이 내에서 미리 결정된 스위치들의 결합을 작동시킬 수 있는 것을, 포함하는 프린팅 카트리지가 제공된다.
본 발명의 제2 관점에 따라서,
프린팅 장치를 프린팅 카트리지에 연결하는 것에 따라, 상기 프린팅 장치들 안에서 스위치들의 어레이 내 스위치들의 결합을 작동시키는 단계를 포함하는 프린팅 카드리지의 매체 색소를 결정하는 방법으로서, 상기 스위치들의 어레이는, 미리 결정된 스우치들의 결합이, 작동될 때, 상기 매체 색소에 관련하는 데이터를 나르는 각각의 신호들을 생성하도록 형성되는 것인, 프린팅 카드리지의 매체 색소를 결정하는 방법이 제공된다.
본 발명의 제3 관점에 따라서,
하우징과;
매체 색소의 공급을 포함하고 상기 하우징 내에 위치하는 매체 색소 공급 장치; 및
상기 하우징 상에 위치하는 것으로서, 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이내 미리 결정된 스위치들의 결합을 작동시킬 수 있도록 상기 매체 색소와 관련하는 데이터를 나타내기 위하여 위치되는 스위치 액츄에이터들을, 포함하는 프린팅 카트리지가 제공된다.
본 발명의 제4 관점에 따라서,
프린팅 장치를 프린팅 카트리지에 연결하는 것에 따라 상기 프린팅 장치들 안에서 스위치들의 어레이 내 스위치들의 결합을 작동시키는 단계를 포함하는 프린팅 카드리지의 매체를 결정하는 방법으로서, 상기 스위치들의 어레이는, 미리 결정된 스위치들의 결합이, 작동될 때, 상기 매체에 관련하는 데이터를 나르는 각각의 신호들을 생성하도록 형성되는 것인, 프린팅 카드리지의 매체를 결정하는 방법이 제공된다.
본 발명의 제5 관점에 따라서,
하우징과;
매체의 공급을 포함하고 상기 하우징 내에 위치하는 매체 공급 장치; 및
상기 하우징 상에 위치하는 것으로서, 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이내 미리 결정된 스위치들의 결합을 작동시킬 수 있도록 상기 매 체와 관련하는 데이터를 나타내기 위하여 위치되는 스위치 액츄에이터들을, 포함하는 프린팅 카트리지가 제공된다.
본 발명의 제6 관점에 따라서,
프린팅 장치를 프린팅 카트리지에 연결하는 것에 따라, 상기 프린팅 장치들 안에서 스위치들의 어레이내 스위치들의 결합을 작동시키는 단계를 포함하는 프린팅 카드리지의 매체 및 매체 색소를 결정하는 방법으로서, 상기 스위치들의 어레이는, 미리 결정된 스위치들의 결합이, 작동될 때, 상기 매체 및 매체 색소에 관련하는 데이터를 나르는 각각의 신호들을 생성하도록 형성되는 것인, 프린팅 카드리지의 매체 색소를 결정하는 방법이 제공된다.
본 발명의 제7 관점에 따라서,
하우징과;
각각 매체의 공급 및 매체 색소의 공급을 포함하고 상기 하우징 내에 위치하는 매체 및 매체 색소 공급 장치들; 및
상기 하우징 상에 위치하는 것으로서, 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이 내 미리 결정된 스위치들의 결합을 작동시킬 수 있도록 상기 매체 및 매체 색소와 관련하는 데이터를 나타내기 위하여 위치되는 스위치 액츄에이터들을, 포함하는 프린팅 카트리지가 제공된다.
본 발명의 제8 관점에 따라서,
하우징과, 상기 하우징내 위치하고 매체 색소의 공급을 포함하는 매체 색소 공급 장치와, 상기 하우징 상에 위치하고, 상기 매체 색소와 완련되는 데이터를 나 타내는 스위치 액츄에이터들의 어레이를 가지는 프린팅 카트리지에 연결 될 수 있는, 몸체;
매체 색소 공급 메커니즘 및 프린팅 메커니즘의 작동을 제어하기 위하여 상기 몸체 내에 위치하는 프로세서; 및
상기 몸체 내에 위치하는 스위치 어레이를 포함하는 프린팅 장치로서, 상기 스위치 어레이는, 상기 스위치 어레이 내 미리 결정된 스위치들의 결합들이, 작동될 때, 매체 색소에 관련된 데이터를 나르는 신호들을 생성하도록 형성되며, 상기 스위치 어레이 내 상기 미리 결정된 스위치들의 결합은 상기 스위치 어레이가 프린팅 카트리지의 매체 색소와 관련하는 상기 데이터를 나르는 신호를 생성하도록 상기 몸체가 상기 프린팅 카트리지에 연결되어진 때 상기 프린팅 카트리지의 하우징 상에 위치하는 스위치 액츄에이터들의 어레이에 의해서 실행될 수 있는 것인, 프린팅 장치가 제공된다.
본 발명의 제9 관점에 따라서,
하우징과, 상기 하우징내 위치하고 매체의 공급을 포함하는 매체 공급 장치와, 상기 하우징 상에 위치하고, 상기 매체와 완련되는 데이터를 나타내는 스위치 액츄에이터들의 어레이를 가지는 프린팅 카트리지에 연결될 수 있는, 몸체;
매체 공급 메커니즘 및 프린팅 메커니즘의 작동을 제어하기 위하여 상기 몸체 내에 위치하는 프로세서; 및
상기 몸체 내에 위치하는 스위치 어레이를 포함하는 프린팅 장치로서, 상기 스위치 어레이는, 상기 스위치 어레이 내 미리 결정된 스위치들의 결합들이, 작동 될 때, 매체에 관련된 데이터를 나르는 신호들을 생성하도록 형성되며, 상기 스위치 어레이 내 상기 미리 결정된 스위치들의 결합은 상기 스위치 어레이가 프린팅 카트리지의 매체와 관련하는 상기 데이터를 나르는 신호를 생성하도록 상기 몸체가 상기 프린팅 카트리지에 연결되어진 때 상기 프린팅 카트리지의 하우징 상에 위치하는 스위치 액츄에이터들의 어레이에 의해서 실행될 수 있는 것인, 프린팅 장치가 제공된다.
본 발명의 제10 관점에 따라서,
하우징과, 상기 하우징내 위치하고 매체 색소 및 매체의 공급을 포함하는 매체 색소 및 매체 공급 장치들과, 상기 하우징 상에 위치하고, 상기 매체 색소 및 매체와 완련되는 데이터를 나타내는 스위치 액츄에이터들의 어레이를 가지는 프린팅 카트리지에 연결될 수 있는, 몸체;
매체 색소 및 매체 공급 메커니즘들 및 프린팅 메커니즘의 작동을 제어하기 위하여 상기 몸체 내에 위치하는 프로세서; 및
상기 몸체 내에 위치하는 스위치 어레이를 포함하는 프린팅 장치로서, 상기 스위치 어레이는, 상기 스위치 어레이 내 미리 결정된 스위치들의 결합들이, 작동될 때, 매체 색소 및 매체에 관련된 데이터를 나르는 신호들을 생성하도록 형성되며, 상기 스위치 어레이 내 상기 미리 결정된 스위치들의 결합은 상기 스위치 어레이가 프린팅 카트리지의 매체 색소 및 매체와 관련하는 상기 데이터를 나르는 신호를 생성하도록 상기 몸체가 상기 프린팅 카트리지에 연결되어진 때 상기 프린팅 카트리지의 하우징 상에 위치하는 스위치 액츄에이터들의 어레이에 의해서 실행될 수 있는 것인, 프린팅 장치가 제공된다.
본 발명은 첨부된 도면을 참조하여 실시예로서 이제 상세히 설명된다. 이하의 상세한 설명의 특유한 기술사상은 어떤 경우에도 상기 요약의 대략적인 특징으로 한정되어 해석되어서는 아니 된다.
본 발명의 범위 내에서 어떤 다른 형태들이 표현될 수 있음에도 불구하고, 단지 실시예로서, 본 발명의 바람직한 형태들이 다음의 첨부되는 도면을 참조하여 설명될 것이다.
도 1은 바람직한 실시예에 따라 구성된 아트캠(Artcam) 장치를 도시한다.
도 2는 메인 아트캠 전자 컴포넌트들의 개략적인 블록도이다.
도 2A는 스위치 엑츄에이터들의 어레이에 의한 작동을 위한 마이크로 전자-기계 스위치 어레이를 포함하는, 메인 아트캠 구성들의 개략적인 블록도이다.
도 3은 아트캠의 중앙 프로세서의 개략적인 블록도이다.
도 3(a)는 VLIW 벡터 프로세서를 보다 상세하게 도시하고 있다.
도 3A는 스위치 엑츄에이터들의 어레이에 의한 작동을 위한 마이크로 전자-기계 스위치 어레이를 주입하는 아트캠 중앙 프로세서의 개략적인 블록도이다.
도 4는 프로세싱 유닛(Processing Unit)을 보다 상세하게 도시하고 있다.
도 5는 ALU 188을 보다 상세하게 도시하고 있다.
도 6은 인 블록(In block)을 보다 상세하게 도시하고 있다.
도 7은 아웃 블록(Out block)을 보다 상세하게 도시하고 있다.
도 8은 레지스터 블록(Registers block)을 보다 상세하게 도시하고 있다.
도 9는 크로스바1(Crossbar1)를 보다 상세하게 도시하고 있다.
도 10은 크로스바2(Crossbar2)를 보다 상세하게 도시하고 있다.
도 11은 판독 프로세스 블록(read process block)을 보다 상세하게 도시하고 있다.
도 12는 판독 프로세스 블록을 보다 상세하게 도시하고 있다.
도 13은 배럴 쉬프터 블록(barrel shifter block)을 보다 상세하게 도시하고 있다.
도 14는 가산기/논리 블록(adder/logic block)을 보다 상세하게 도시하고 있다.
도 15는 곱셈기 블록(multiply block)을 보다 상세하게 도시하고 있다.
도 16은 I/O 어드레스 생성 블록(I/O address generator block)을 보다 상세하게 도시하고 있다.
도 17은 픽셀 스토리지 포맷(pixel storage format)을 도시한다.
도 18은 순차 판독 반복 프로세스(sequential read iterator process)를 도시한다.
도 19는 박스 판독 반복 프로세스(box read iterator process)를 도시한다.
도 20은 박스 기록 반복 프로세스(box write iterator process)를 도시한다.
도 21은 수직 스트립 판독/기록 반복 프로세스를 도시한다.
도 22는 수직 스트립 판독/기록 반복 프로세스를 도시한다.
도 23은 순차 생성 프로세스(generate sequential process)를 도시한다.
도 24는 순차 생성 프로세스(generate sequential process)를 도시한다.
도 25는 수직 스트립 생성 프로세스(generate vertical strip process)를 도시한다.
도 26은 수직 스트립 생성 프로세스(generate vertical strip process)를 도시한다.
도 27은 픽셀 데이터 구성을 도시한다.
도 28은 픽셀 프로세싱 프로세스를 도시한다.
도 29는 디스플레이 제어기의 개략적인 블록도를 도시한다.
도 30은 CCD 이미지 구성을 도시한다.
도 31은 논리 이미지(logical image)를 위한 스토리지 포맷(storage format)을 도시한다.
도 32는 내부 이미지 메모리 저장 포맷을 도시한다.
도 33은 이미지 피라미드 저장 포맷을 도시한다.
도 34는 아트카드(Artcard)를 샘플링하는 프로세스의 타임선(time line)을 도시한다.
도 35는 슈퍼 샘플링 프로세스를 도시한다.
도 36은 회전되는 아트카드를 판독하는 프로세스를 도시한다.
도 37은 아트카드를 디코드하는 데 필요한 단계들의 플로우챠트를 도시한다.
도 38은 한 개의 아트카드의 왼쪽 코너의 확대도를 도시한다.
도 39는 검출용 한 개의 타깃(target)을 도시한다.
도 40은 타깃들을 검출하기 위하여 이용되는 방법을 도시한다.
도 41은 두 타깃 간의 거리를 계산하는 방법을 도시한다.
도 42는 센트로이드 드리프트(centroid drift)의 프로세스를 도시한다.
도 43은 센트로이드 검색 표(centroid lookup table)의 한 형태를 도시하고 있다.
도 44는 센트로이드 업데이트 프로세스를 도시한다.
도 45는 바람직한 실시예에서 이용되는 델타 프로세싱 검색 표을 도시한다.
도 46은 아트카드 데이터를 언스크램블하는 프로세스를 도시한다.
도 47은 일련의 도트(dot)들의 확대도를 도시한다.
도 48은 도트 카드(dot card)의 데이터 표면을 도시한다.
도 49는 한 개의 데이터 블록의 레이아웃을 개략적으로 도시한다.
도 50은 한 개의 데이터 블록을 도시한다.
도 51 및 도 52는 도 50의 데이터 블록의 부분들의 확대도를 도시한다.
도 53은 한 개의 타깃(target) 구조를 도시한다.
도 54는 데이터 블록의 타깃 구조를 도시한다.
도 55는 데이터 영역의 경계 클록킹 영역들(border clocking regions)에 관련되는 타깃들의 위치적인 관계를 도시하고 있다.
도 56은 데이터 블록의 방위열(orientation column)들을 도시한다.
도 57은 데이터 블록의 도트들의 배열을 도시한다.
도 58은 리드-솔로몬 인코딩(Reed-Solomon encoding)을 위한 데이터 구조를 개략적으로 도시하고 있다.
도 59는 리드-솔로몬 인코딩의 예를 도시한다.
도 60은 리드-솔로몬 인코딩 프로세스를 도시한다.
도 61은 데이트 블록 내의 인코드된 데이터의 레이아웃을 도시한다.
도 62는 대체적 아트카드를 샘플링하는 데 있어서의 샘플링 프로세스를 도시한다.
도 63은 회전되는 대체적 아트카드를 샘플링하는 예를 과장된 형태로 도시하고 있다.
도 64는 스캐닝 프로세스를 도시한다.
도 65는 스캐닝 프로세스의 적절한 스캐닝 분포를 도시한다.
도 66은 심볼 에러들의 확률과 리드-솔로몬 블록 에러들 간의 관계를 도시한다.
도 67은 디코딩 프로세스의 플로우챠트를 도시한다.
도 67은 디코딩 프로세스의 프로세스 활용 다이어그램을 도시한다.
도 69는 디코딩에서의 데이터 플로우 스텝들을 도시한다.
도 70은 판독 프로세스를 보다 상세하게 도시하고 있다.
도 71은 대체적 아트카드의 개시의 검출의 프로세스를 보다 상세하게 도시하고 있다.
도 72는 비트 데이터 프로세스의 추출을 보다 상세하게 도시하고 있다.
도 73은 디코딩 프로세스에서 이용되는 분할 프로세스(segmentation process)를 도시한다.
도 74는 타깃들 발견의 디코딩 프로세스를 보다 상세하게 도시하고 있다.
도 75는 타깃들을 위치 지우는 데에 이용되는 데이터 구조들을 도시한다.
도 76은 Lanczos 3 함수 구조를 도시한다.
도 77은 시간표시 및 경계지역을 도시하는 데이터 블록의 확대부분을 도시한다.
도 78은 비트 이미지를 디코딩하는 데 있어서의 프로세싱 단계들을 도시한다.
도 79는 비트 이미지를 디코딩하는 데 있어서의 데이터 플로우 단계들을 도시한다.
도 80은 바람직한 실시예의 언스크램블(unscrambling) 프로세스를 도시한다.
도 81은 컨볼버(convolver)의 실행의 일 형태를 도시한다.
도 82는 컨볼루션(covolution) 프로세스를 도시한다.
도 83은 합성 프로세스를 도시한다.
도 84는 통상의 합성 프로세스를 보다 상세하게 도시하고 있다.
도 85는 워프 맵(warp map)을 이용하는 워핑의 프로세스를 도시한다.
도 86은 워핑 쌍선형 보간법(warping bi-linear interpolation) 프로세스를 도시한다.
도 87은 스팬(span) 계산의 프로세스를 도시한다.
도 88은 기본적인 스팬 계산 프로세스를 도시한다.
도 89는 스팬 계산 프로세스의 상세한 실행의 한 형태를 도시한다.
도 90은 이미지 피라미드 레벨들을 판독하는 프로세스를 도시한다.
도 91은 쌍선형 보간법을 위한 피라미드 표을 이용하는 것을 도시한다.
도 92는 히스토그램(histogram) 콜렉션 프로세스를 도시한다.
도 93은 컬러 변형(transform) 프로세스를 도시한다.
도 94는 컬러 변환(conversion) 프로세스를 도시한다.
도 95는 컬러 스페이스 변환 프로세스를 보다 상세하게 도시하고 있다.
도 96은 입력 좌표를 계산하는 프로세스를 도시한다.
도 97은 피드백 합성 프로세스를 도시한다.
도 98은 개괄적인 스케일링 프로세스를 도시한다.
도 99는 X 스케일링 프로세스에서의 스케일을 도시한다.
도 100은 Y 스케일링 프로세스에서의 스케일을 도시한다.
도 101은 테셀레이션(tessellation) 프로세스를 도시한다.
도 102는 서브-픽셀 번역 프로세스를 도시한다.
도 103은 합성 프로세스를 도시한다.
도 104는 피드백 합성 프로세스를 도시한다.
도 105는 입력 이미지로부터 컬러 타일링(tiling)하는 프로세스를 도시한다.
도 106은 피드백 타일링 프로세스를 도시한다.
도 107은 텍스처 교체(texture replacement) 타일링 프로세스를 도시한다.
도 108은 입력 이미지로부터 컬러 타일링 프로세스를 도시한다.
도 109는 피드백없이 텍스처를 적용하는 프로세스를 도시한다.
도 110은 피드백을 가지고 텍스처를 적용하는 프로세스를 도시한다.
도 111은 CCD 픽셀들의 회전 프로세스를 도시한다.
도 112는 Green 서브픽셀들의 보간(interpolation) 프로세스를 도시한다.
도 113은 Blue 서브픽셀들의 보간 프로세스를 도시한다.
도 114는 Red 서브픽셀들의 보간 프로세스를 도시한다.
도 115는 홀수 픽셀 라인들에 있어서 O도 회전을 갖는 CCD 픽셀 보간 프로세스를 도시한다.
도 116은 짝수 픽셀 라인들에 있어서 O도 회전을 갖는 CCD 픽셀 보간 프로세스를 도시한다.
도 117은 랩(Lab) 컬러 스페이스에로의 컬러 변환 프로세스를 도시한다.
도 118은 1/√X의 계산 프로세스를 도시한다.
도 119는 1/√X의 계산 실행을 보다 상세하게 도시하고 있다.
도 120은 범프 맵(bump map) 노멀(Normal) 계산의 프로세스를 도시한다.
도 121은 범프 맵 일루미네이션(illumination) 계산의 프로세스를 도시한다.
도 122는 범프 맵 일루미네이션 계산을 보다 상세하게 도시하고 있다.
도 123은 방향 라이트(directional light)를 이용한 L의 계산의 프로세스를 도시한다.
도 124는 옴니 라이트(Omni light)들과 스포삼트(spotlight)들을 이용한 L계 산의 프로세스를 도시한다.
도 125는 옴니 라이트들과 스포삼트들을 이용한 L의 계산의 실행의 한 형태를 도시한다.
도 126은 N.L 도트 곱(dot product)을 계산하는 프로세스를 도시한다.
도 127은 N.L 도트 곱을 계산하는 프로세스를 보다 상세하게 도시하고 있다.
도 128은 R.V 도트 곱을 계산하는 프로세스를 도시한다.
도 129는 R.V 도트 곱을 계산하는 프로세스를 보다 상세하게 도시하고 있다.
도 130은 감쇠 계산 입력들과 출력들을 도시한다.
도 131은 감쇠 계산의 실제적인 실행을 도시한다.
도 132는 콘(cone) 팩터의 그래프를 도시한다.
도 133은 반영 계산(penumbra calculation)의 프로세스를 도시한다.
도 134는 반영 계산에서 이용된 각들을 도시한다.
도 135는 반영 계산에로의 입력들과 출력들을 도시한다.
도 136은 반영 계산의 실제적인 실행을 도시한다.
도 137은 주변 계산(ambient calculation)에로의 입력들과 출력들을 도시한다.
도 138은 주변 계산의 실제적인 실행을 도시한다.
도 139는 확산 계산(diffusion calculation)의 실제적인 실행을 도시한다.
도 140은 확산 계산에로의 입력들과 출력들을 도시한다.
도 141은 확산 계산의 실제적인 실행을 도시한다.
도 142는 스페큘러 계산(specular calculation)에로의 입력들과 출력들을 도시한다.
도 143은 스페큘러 계산의 실제적인 실행을 도시한다.
도 144는 스페큘러 계산에로의 입력들과 출력들을 도시한다.
도 145는 스페큘러 계산의 실제적인 실행을 도시한다.
도 146은 주변 계산만의 실제적인 실행을 도시한다.
도 147은 광계산의 프로세스 개요를 도시한다.
도 148은 한 개의 무한 광원에 있어서의 일루미네이션 계산의 일예를 도시한다.
도 149는 범프 맵 없는 옴니 라이트 광원에 있어서의 일루미네이션 계산의 일예를 도시한다.
도 150은 범프 맵을 구비된 옴니 라이트 광원에 있어서의 일루미네이션 계산의 일예를 도시한다.
도 151은 범프 맵이 없는 스포삼트 광원에 있어서의 일루미네이션 계산의 일예를 도시한다.
도 152는 관련된 범프 맵으로 이미지 위로 한 개의 스포삼트를 가하는 프로세스를 도시한다.
도 153은 단일 프린트 헤드(printhead)의 논리 레이아웃을 도시한다.
도 154는 프린트 헤드 인터페이스의 구조를 도시한다.
도 155는 랩 이미지의 회전의 프로세스를 도시한다.
도 156은 프린트된 이미지의 픽셀의 포맷을 도시한다.
도 157은 디더링(dithering) 프로세스를 도시한다.
도 158은 8 비트 도트 출력을 생성하는 프로세스를 도시한다.
도 159는 카드 판독기의 사시도를 도시한다.
도 160은 카드 판독기의 분리사시도를 도시한다.
도 161은 아트카드 판독기(Artcard reader)의 상세도를 도시한다.
도 162는 프린트 롤 및 프린트 헤드의 사시도를 도시한다.
도 163은 프린트롤의 제1 분리사시도를 도시한다.
도 164는 프린트롤의 제2 분리사시도를 도시한다.
도 164A는 본 발명에 따른 프린팅 카트리지 형태에 있어서 프린트 롤과 프린트 헤드의 또 다른 실시예의 입체도를 도시한다.
도 164B는 도 164A의 프린팅 카트리지의 3차원 단면도를 도시한다.
도 164C는 도 164A의 프린팅 카트리지의 3차원 분해도를 도시한다.
도 164D는 도 164A의 프린팅 카트리지의 한 부분인 잉크 카트리지의 3차원 분해도를 도시한다.
도 164E는 도 164A의 프린팅 카트리지의 에어 필터의 입체도를 도시한다.
도 164F는 아트캠 장치의 스위치 어레이와 결합하는 스위치 액츄에이터들의 어레이를 내장하는 인쇄 카트리지의 또 다른 실시예의 입체도를 나타낸다.
도 164G는 도 164F의 스위치 액츄에이터들의 다수의 상세도를 나타낸다.
도 164H는 아트캠 장치의 스위치 어레이의 개략적인 측면도를 나타낸다.
도 164I는 아트캠 장치의 스위치 어레이의 개략적인 평면도를 나타낸다.
도 164J는 아트캠 장치의 프로세서에 의하여 전해지는 참조 알고리즘 및 스위치 어레이의 작동을 표시하는 단순도를 나타낸다.
도 165는 프린트 롤 인증 칩을 도시한다.
도 166은 프린트 롤 인증 칩의 확대도를 도시한다.
도 167은 단일 인증 칩 데이터 프로토콜을 도시한다.
도 168은 이중 인증 칩 데이터 프로토콜을 도시한다.
도 169는 제1 존재 유일 프로토콜(presence only protocol)을 도시한다.
도 170은 제2 존재 유일 프로토콜을 도시한다.
도 171은 제3 데이터 프로토콜을 도시한다.
도 172는 제4 데이터 프로토콜을 도시한다.
도 173은 최대 주기(maximal period) LFSR의 개략적인 블록도를 도시한다.
도 174는 시간 제한 필터의 개략적인 블록도를 도시한다.
도 175는 탬퍼 검출 라인들의 개략적인 블록도를 도시한다.
도 176은 확대된 nMOS 트랜지스터를 도시한다.
도 177은 탬퍼 검출 라인(Tamper Detect Line)으로부터 복수의 XOR들의 획득을 도시한다.
도 178은 탬퍼 라인들이 노이즈 생성 회로를 담당하는 방법에 대해 도시한다.
도 179는 FET 실행의 통상의 형태를 도시한다.
도 180은 바람직할 실시예로서 FET 실행의 수정된 형태를 도시한다.
도 181은 인증 칩의 개략적인 블록 다이어그램을 도시한다.
도 182는 메모리 맵의 예를 도시한다.
도 183은 상수 메모리 맵의 예를 도시한다.
도 184는 RAM 메모리 맵의 예를 도시한다.
도 185는 플래쉬 메모리 변수 메모리 맵의 예를 도시한다.
도 186은 플래쉬 메모리 프로그램 메모리 맵의 예를 도시한다.
도 187은 State Machine의 컴포넌트들 사이의 관계 및 데이터 플로우를 도시한다.
도 188은 I/O 유닛의 컴포넌트들 사이의 관계 및 데이터 플로우를 도시한다.
도 189는 산술 논리 유닛(Arithmetic Logic Unit)의 개략적인 블록 다이어그램을 도시한다.
도 190은 RPL 유닛의 개략적인 블록 다이어그램을 도시한다.
도 191은 ALU의 ROR 블록의 개략적인 블록 다이어그램을 도시한다.
도 192는 프로그램 카운터 유닛(Program Counter Unit)의 블록 다이어그램을 도시한다.
도 193은 메모리 유닛(Memory Unit)의 블록 다이어그램을 도시한다.
도 194는 어드레스 생성기 유닛(Address Generator Unit)에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 195는 JSIGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 196은 JSRGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 197은 DBRGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 198은 LDKGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 199는 RPLGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 200은 VARGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 201은 CLRGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 202는 BITGEN Unit에 있어서의 개략적인 블록 다이어그램을 도시한다.
도 203은 프린트 롤 인증 칩 상에 저장되는 정보를 설명하고 있다.
도 204는 아트캠 인증 칩 내에 저장되는 데이터를 나타낸다.
도 205는 프린트 헤드 펄스 특성(print head pulse characterization)들을 도시한다.
도 206은 프린트 헤드 잉크 공급 메커니즘의 분해 단면사시도이다.
도 207은 잉크 헤드 공급 유닛의 저부 사시도이다.
도 208은 잉크 헤드 공급 유닛의 저부측 단면도이다.
도 209는 잉크 헤드 공급 유닛의 상부 사시도이다.
도 210은 잉크 헤드 공급 유닛의 상부측 단면도이다.
도 211은 프린트 헤드의 소부분의 사시도를 도시한다.
도 212는 프린트 헤드 유닛의 분리사시도를 도시한다.
도 213은 아트캠 카메라의 내부들의 상부측 사시도로서, 각 부분들을 수평으로 펼쳐 도시하고 있다.
도 214는 아트캠 카메라의 내부들의 저부측 사시도로서, 각 부분들을 수평으로 펼쳐 도시하고 있다.
도 215는 아트캠 카메라의 내부들의 제1 상부측 사시도로서, 각 부분들이 아트캠 케이스 안으로 삽입되어져 있음이 도시되어 있다.
도 216은 아트캠 카메라의 내부들의 제2 상부측 사시도로서, 각 부분들이 아트캠 케이스 안으로 삽입되어져 있음이 도시되어 있다.
도 217은 아트캠 카메라의 내부들의 제2 상부측 사시도로서, 각 부분들이 아트캠 케이스 안으로 삽입되어져 있음이 도시되어 있다.
도 218은 포스트카드(postcard) 프린트 롤의 배면부를 도시한다.
도 219는 이미지들을 프린트한 후에 포스트카드 프린트 롤 상의 대응 전면 이미지를 도시한다.
도 220은 시장에서의 판매용으로 준비된 프린트 롤의 형태를 도시한다.
도 221은 전체 아트캠 어플리케이션의 소프트웨어/하드웨어 모듈들의 레이아웃을 도시한다.
도 222는 Camera Manager의 소프트웨어/하드웨어 모듈들의 레이아웃을 도시한다.
도 223은 Image Processing Manager의 소프트웨어/하드웨어 모듈들의 레이아웃을 도시한다.
도 224는 Printer Manager의 소프트웨어/하드웨어 모듈들의 레이아웃을 도시한다.
도 225는 Image Processing Manager의 소프트웨어/하드웨어 모듈들의 레이아웃을 도시한다.
도 226은 File Manager의 소프트웨어/하드웨어 모듈들의 레이아웃을 도시한다.
도 227은 대안적인 형태의 프린트 롤의 부분단면 사시도를 도시한다.
도 228은 도 227의 프린트 롤의 좌측 분해사시도를 도시한다.
도 229는 단일 프린트 롤의 우측 분해사시도를 도시한다.
도 230은 프린트 롤의 중심부의 부분단면 분해사시도를 도시한다.
도 231은 프린트 롤의 중심부의 제2 분해사시도를 도시한다.
바람직한 실시예에 따라 구성되는 디지털 이미지 프로세싱 카메라 시스템은 도 1에서 도시되어 있다. 아트캠 유닛(1)은 통합 프린트 롤(integral print roll)(도시되어 있지 않음)의 삽입을 위한 수단들을 포함한다. 아트캠 유닛(1)은 카메라에 의해 캡쳐되는 이미지(3)를 감지하는 영역 이미지 센서(area image sensor)(2)들을 포함할 수 있다. 선택적으로, 또한 이미지(3)를 감지하고 입체적인 출력효과의 생성을 위하여 선택적으로 제공하도록, 제 2 영역 이미지 센서가 제공될 수 있다.
아트캠 유닛(1)은 영역 이미지 센서(2)에 의하여 감지되는 이미지의 디스플레이를 위하여 임의의 컬러 디스플레이(5)가 포함될 수 있다. 단일 이미지가 디스플레이(5)상에 디스플레이되고 있을 때, 버튼(6)은 아트캠 유닛(1)에 의해 프린트된 이미지(8)가 출력되도록 눌러질 수 있다. 일련의 카드들(이하부터는 “아트카드들(Artcards)(9)”이라고 한다)은 정보가 인코드된 한 면 및 다른 면을 포함하고, 아트카드(9)에 의해 만들어지는 특수한 효과로 인하여 왜곡되는 이미지를 포함한다. 아트카드(9)는 아트캠 유닛(1)의 측면에 아트카드 판독기(10)안에 삽입되고, 이 삽입에 의해, 출력 이미지(8)이 아트카드(9)의 표면상에 나타나는 왜곡(distortion)과 같은 방법으로 왜곡되게 된다. 그러므로, 이러한 간단한 사용자 인터페이스에 의해서 특별한 효과를 만들기를 바라는 사용자는 아트카드 판독기(10) 안으로 많은 아트카드(9) 중에서 하나를 삽입할 수 있고 대응하는 왜곡된 출력 이미지(8)로 귀착되는 이미지(3)의 사진을 찍기 위하여 버튼(19)을 이용할 수 있다.
아트캠 유닛(1)은, 카메라 유닛의 내부 프린트 롤 상에 남겨진 프린트아웃들의 수를 포함하는 정보를 디스플레이하기 위하여 간단한 LCD 출력 디스플레이(15)에 부가하여 다수의 다른 제어 버튼(13)(14)을 포함할 수 있다. 나아가, 다른 출력 포맷들이 CHP 스위치(17)에 의해 제어될 수 있다.
이제 도 2로 넘어가면, 아트캠 유닛(1)의 내부 하드웨어가 개략적으로 도시되어 있다. 이 내부 하드웨어는 아트캠 중앙 프로세서 유닛(이하, ACP)(31) 주변에 있다.
아트캠 중앙 프로세서(Artcam Central Processor)(31)
아트캠 중앙 프로세서(31)는 이 시스템의 심장부를 형성하는 많은 기능들을 제공한다. ACP(31)은 바람직하게는 하나의 칩 상의(on-a-chip) 복합 고속 CMOS 시스템으로서 실행된다. 풀 커스텀(full custom) 영역들을 갖는 표준 셀 디자인을 이용하는 것이 추천된다. 0.25 마이크론 CMOS 프로세스상의 구성은 적당한 스몰 다이 영역(small die area)과 함께 필요한 밀도와 속도를 제공할 것이다.
ACP(31)에 의해 제공되는 기능들은 아래 사항들을 포함한다.
1. 영역 이미지 센서(2)의 디지털화 및 제어. ACP의 3D 입체적인 버젼은 입체적인 효과들을 제공하는 옵션의 제2 이미지 센서(4)를 갖는 2개의 영역 이미지 센서 인터페이스들을 필요로 한다.
2. 영역 이미지 센서 보상, 재포맷 및 이미지 향상
3. 메모리 인터페이스와 메모리 저장부(33)로의 프로세스
4. 아트카드(9)들로부터 데이터를 판독하기 위해 제공되는 아트카드 판독기 선형 이미지 센서(34)의 아날로그로부터 디지털로의 변환, 인터페이스 및 제어
5. 디지털화되고 인코드된 아트카드 이미지로부터 아트카드의 원본데이터의 추출.
6. 리드솔로몬(Reed-Solomon) 에러 검출 및 인코드된 아트카드 데이터의 수정. 아트카드(9)의 인코드된 표면은 아트카드(9)의 왜곡된 이미지 표면상에 디스플레이되는 효과들을 제공하기 위하여 이미지를 프로세스하는 방법에 관한 정보를 포함한다. 이 정보는 스크립트의 형태내로 존재하며, 이하에서는 "바크 스크립트(Vark script)"라고 한다. 바크 스크립트는 소망되는 효과를 생성하기 위하여 ACP(31)내에서 작동되는 해석기에 의해 이용된다.
7. 아트카드(9)상의 바크 스크립트(Vark script)의 해석.
8. 바크 스크립트에 의해 지정되는 이미지 프로세싱 계산들을 수행.
9. 페이퍼 전송 모터(36), 줌 모터(38), 자동 포커스 모터(39) 및 아트카드 모터(37)를 제어.
10. 프린트 롤(42)로부터 사진들(8)의 절단하기 위한 길로틴(guillotine)(41) 작동용 길로틴 액추에이터(40)의 제어.
11. 프린트를 위한 이미지 데이터의 망판작업(half-toning).
12. 적절한 시간에 프린트 헤드(44)에 프린트 데이터를 제공.
13. 프린트 헤드(44) 제어.
14. 프린트 헤드(44)로의 잉크 주입압을 제어.
15. 옵션 플래쉬 유닛(56) 제어.
16. 카메라 방위센서(orientation sensor)(46), 자동포커스(47) 및 아트카드 삽입 센서(49)를 포함하여, 카메라에서의 여러 가지 센서들에 대한 판독 및 작동.
17. 사용자 인터페이스 버튼(6)(13)(14)들에 대한 판독 및 작동.
18. 상태 디스플레이(status display)(15) 제어.
19. 컬러 디스플레이(5)에 뷰파인더(viewfinder)와 미리보기 이미지들을 제공.
20. 전력 프로세스 회로(51)를 통한 ACP 전력 소비를 포함하여, 시스템 전력 소비의 제어.
21. 통상의 컴퓨터들과의 외부 통신(52)(USB부를 이용함)을 제공.
22. 프린트 롤 인증 칩(53) 내에서 정보의 판독 및 저장.
23. 카메라 인증 칩(54) 내에서 정보의 판독 및 저장.
24. 텍스트 수정을 위한 옵션 미니키보드(57)와의 커뮤니케이션.
쿼츠 크리스탈(Quartz crystal)(58)
쿼츠 크리스탈(58)은 시스템 클록을 위한 주파수 레퍼런스로서 이용된다. 시스템 클록은 매우 높기 때문에, ACP(31)은 크리스탈(58)로부터 유도되는 주파수를 증가시키기 위해 위상 고정된 루프 클록 회로를 포함한다.
이미지 감지(Image Sensing)
영역 이미지 센서(2)(Area image sensor)
영역 이미지 센서(2)는 렌즈를 통해서 이미지들을 전기적 신호로 변환한다. 그것은 전하 결합 소자(charge coupled device, CCD) 또는 능동 픽셀 센서(active pixel sensor, APS) CMOS 이미지부가 될 수 있다. 현재, 이용될 수 있는 통상의 CCD는 높은 화질을 갖지만, CMOS 이미저(imagers)들에서 많은 개발이 이루어지고 있다. CMOS 이미저들은 결과적으로, 보다 작은 픽셀 영역들을 갖는 CCD들의 이미저들보다 실질적으로 더 저렴한 것으로 기대되어지고, 드라이브 회로 소자 및 신호 프로세싱을 일체화할 수 있다. 그것들은 CMOS 제조로 만들어 질 수 있으며, 이는 12" 웨이퍼들로 전이되어지고 있다. CCD의 경우는 통상 6" 웨이퍼 제조로 만들어지고, 경제적으로 12" 제조으로의 변환이 허용되기 어렵다. 따라서, CCD와 CMOS 이미저 사이의 가공비용의 차이는 CMOS 이미저들에 대한 선호를 증가시킬 것으로 보인다. 그러나, 현재는, CCD가 아마 가장 좋은 옵션일 것이다.
아트캡 유닛은 1,500×1,000 영역 이미지 센서일 때 적절한 결과들을 제공한다. 그러나, 보다 작은 센서들, 가령 750×500이 많은 시장에 알맞을 것이다. 아트캠은 종래의 디지털 카메라들 보다 이미지 센서 해상도(resolution)에 덜 예민하다. 이것은 아트카드(9)들 상에 포함된 다양한 스타일들이 해상도의 부족을 무색하게 하는 것과 같은 방법으로 이미지를 프로세스하기 때문이다. 예컨대, 이미지가 인상적인 그림으로 변환되는 효과를 시뮬레이션하도록 왜곡되면, 낮은 소스 이미지 해상도(low source image resolution)가 최소한의 효과를 가지고 이용될 수 있다. 나아가 낮은 해상도의 입력 이미지들이 대체로 알려지지 않을 예의 경우는 고왜곡 이미지들, 이미지의 다수의 소형 카피들(특히 여권사진들), 가령 양각의 기초 메탈 룩을 위한 범프 맵핑(bump mapping)같은 구성 프로세싱 및 구성된 장면 안으로 사진합성을 제공하는 이미지 워프들(image warps)을 포함한다.
낮은 해상도의 이미지 센서들의 이러한 용인성(tolerance)은 아트캠 유닛(1) 카메라의 제조비용을 감소시키는 데 중요한 요소가 될 것이다. 저비용의 750×500 이미지 센서를 가지는 아트캠은 훨씬 비싼 1,500×1,000 이미지 센서를 가지는 종래의 디지털 카메라보다 더 월등한 결과들을 자주 제공할 것이다.
입체적인 3D 이미지 센서(4) 옵션
아트캠 유닛(1)의 3D 버전들은, 입체적인 작동을 위하여 이미지 센서(4)를 추가적으로 가진다. 이 이미지 센서는 메인 이미지 센서와 동일하다. 이미지 센서 옵션을 가동하는 회로 소자는 가중되는 디자인 비용을 경감시키기 위해서 ACP 칩(31)의 표준 부분으로서 포함될 수 있다. 대안적으로, 분리형 3D 아트캠 ACP가 디자인 될 수 있다. 이러한 옵션은 주류인 한 개의 센서 아트캠의 제조비용을 경감시킬 것이다.
프린트 롤 인증 칩(53)
소형 칩(53)은 각각의 프린트 롤(42)안에 포함된다. 이 칩은 어드밴스트 포토 시스템(Advanced Photo Systems, APS) 필름 카트리지와 같은 카메라 필름 유닛들의 형태에서의 바코드, 광학 센서와 휠, 및 ISO/ASA 센서들의 기능을 대신한다.
이 인증 칩은 또한 다음과 같은 특징들을 제공한다.
1. 오히려 APS 롤들로부터 기계적으로 그리고 광학적으로 감지되는 데이터 스토리지.
2. 고해상도로 정확한 잔존 매체 길이 표시(remaining media length indication).
3. 열악한 프린트 롤 카피들을 방지하기 위한 인증정보.
인증 칩(53)은 플레쉬 메모리 1024 비트를 포함하고, 그 중 128 비트는 인증키이며, 512비트는 인증정보이다. 또한 인증키가 직접적으로 액세스될 수 없음을 보증하기 위한 인코드 회로가 포함된다.
프린트 헤드(44)
아트캠 유닛(1)은 프린트 롤과 조화되면서 충분히 작고, 낮은 전력에, 빠르고, 높은 품질 및 낮은 비용의 컬러 프린트 기술을 이용할 수 있다. 관련되는 프린트 헤드들은 특별히 후술될 것이다.
이 잉크 젯 헤드의 상세사항은 다음과 같다.
이미지 타이프 | Bi-level, dithered |
색상 | CMY Process Color |
해상도 | 1600 dpi |
프린트 헤드 길이 | Print head length |
프린트 속도 | 2 seconds per photo |
옵션 잉크 압력 제어기(도시되어 있지 않음)
잉크 압력 제어기의 기능은 아트캠 안에 넣어진 잉크젯 프린트 헤드(44)에 의존한다. 여러종류의 잉크젯에 있어서, 잉크 압력은 단순한 공기압이기 때문에, 잉크 압력 제어기의 이용은 삭제될 수 있다. 프린트 헤드의 다른 종류들은 실용적으로 디자인된 잉크 압력을 요구한다. 이 경우에, 잉크 압력 제어기는 펌프와 압력 변환기로 구성된다.
다른 프린트 헤드들은 대체적으로 대략 100KHz 주파수들로 잉크 압력 내에 규칙적인 진동을 일으키는 초음파 변환기를 필요로 하는 경우도 있다. 이 경우에, ACP(31)는 주파수 위상과 이 진동들의 크기를 제어한다.
페이퍼 전송 모터(36)
페이퍼 전송 모터(36)는 비교적 일정한 비율로 프린트 롤(42)안으로부터 프린트 헤드를 지나 페이퍼를 이송시킨다. 페이퍼 전송 모터(36)는 종이를 이동시키는 드라이브 롤러들에 적절한 스피드로 기동시키는 소형 모터이다. 기계적인 소음이나 기타 떨림들이 프린트된 도트 열의 배치에 영향을 주기 때문에, 높은 품질의 모터와 기계적인 기어들이 고 이미지 품질을 얻기 위하여 필요하다.
페이퍼 전송 모터 드라이버(60)
모터 드라이버(60)는 APC(31)로부터 페이퍼 전송 모터(36)를 운전하는 데 알맞은 레벨들로의 디지털 모터 제어 신호들을 증폭하는 소형 회로이다.
페이퍼 당김 센서(paper full sensor)
페이퍼 당김 센서(50)는 프린트과정 동안에 카메라로부터 사진을 뽑으려고 하는 사용자의 시도를 검출한다. APC(31)은 이 센서(50)를 판독하고, 상기 시도상황이 있다면 길로틴(41)을 활성화시킨다. 상기 페이퍼 당김 센서(50)은 카메라의 동작을 더욱 간단하게('foolproof') 하기 위해 조립된다. 만일 사용자가 프린트 동안에 페이퍼를 강제로 뺄려고 한다면, 프린트 메커니즘(44)이 (극단적인 경우) 손상될 수 있다. 페이퍼가 완전히 배출되기 이전에 폴라로이드 타입의 카메라으로부터 '꼬투리(pod)'를 빼는 것이 허용될 수 있기 때문에, 사람들은 이와 같이 행하도록 '훈련'되어 왔던 것이다. 따라서, 그들은 페이퍼를 뽑지 말라고 하는 사용설명서에 유의하지 않는 경향이었다.
바람직하게도 아트캠은 당김 감지 후 길로틴(41)이 페이퍼를 절단한 후 사진 프린트 프로세스를 재개시한다.
상기 당김 센서는 스트레인 게이지(strain guage) 센서, 또는 페이퍼가 당겨질 때 페이퍼 드라이브 롤러들 상에 발생하는 토크에 의해 구부러지는 소형 플라스틱 플래그(flag)를 검출하는 광학 센서로서 실행될 수 있다. 후자의 실행은 저비용으로서 추천되어진다.
페이퍼 길로틴 액추에이터(40)
페이퍼 길로틴 액추에이터(40)는 길로틴(41)이 사진의 단부 또는 상기 페이퍼 당김 센서(50)이 활성화 될 때 페이퍼를 절단하도록 하게 하는 소형 액추에이터이다.
길로틴 액추에이터(40)는 APC로부터 상기 액추에이터(41)에 의하여 필요한 레벨까지 길로틴 제어 신호를 증폭하는 소형 회로이다.
아트카드(9)
아트카드(9)는 아트캠 유닛용 프로그램 저장 매체이다. 앞에서 표시한 것 처럼, 그 프로그램들은 바크 스크립트(Vark script)들의 형태로 존재한다. 바크는 아트캠 유닛을 위하여 특수하게 개발된 강력한 이미지 프로세싱 언어이다. 각 아트카드(9)는 한 개의 바크 스크립트를 포함하고, 그것에 의하여 한 개의 이미지 프로세싱 스타일이 정의된다.
바람직하게, 바크 언어는 높은 이미지 프로세싱 특성을 갖는다. 높은 이미지 프로세싱 특성이 있기 때문에, 카드 상에 세부 사항을 저장하는 데 필요한 저장 용량이 실질적으로 감소된다. 더욱이, 향상된 효과들을 포함하면서도 새로운 프로그램들이 안출될 때의 용이함이 또한 실질적으로 증가된다. 바람직하게, 상기 언어는 이미지 워핑, 워프 맵, 회선(컨볼류션, convolution), 색상 참조표(color lookup table)들, 포스터라이징, 이미지에 노이즈 애딩(adding), 이미지 화질 향상 필터들, 페인팅 알고리즘들, 브러쉬 지터링(brush jittering)과 빠른 조작의 에지 검출 필터들(edge detection filters), 타일링, 광원들을 통한 일루미네이션, 범프 맵들, 텍스트, 얼굴 검출 및 대상 검출 특성, 입체 폰트들을 포함한 폰트(font)들, 및 임의의 콤플렉시티(complexity) 미리 정제된 아이콘들을 포함하는 많은 이미지 프로세싱 기능들을 다루는 데 편의를 포함한다. 나아가 바크 언어 해석기의 작용의 상세한 내용은 후술되어 진다.
그러므로, 새로 안출된 언어에 의해 정의된 것으로서 언어 구성들을 이용하는 것을 통하여, 임의의 이미지들에 대한 새로운 영향들이 아트캠의 경제적인 저장수단에 새로 만들어지고 구성될 수 있으며, 결과적으로 카메라 소유자들에게 이익이 된다. 게다가, 그 카드의 한쪽 표면위에 카드의 다른 쪽 표면상에 저장되는 특별한 바크 스크립트가 캡쳐된 임의의 이미지들에 대해서 갖게 되는 효과를 설명하는 예시가 제공될 수 있다.
그러한 시스템을 이용하는 것에 의해서, 카메라 기술은 낙후된 큰 기어를 구비할 필요없이 분포되어질 수 있는 바, 즉 제공된 바크 해석기가 카메라 장치에 조립되어 있고, 장치의 독립적 동작 시나리오가 제공되어 근본기술이 완전히 달라지게 될 수 있는 것이다. 나아가, 바크 스크립트들은, 예컨대 카드판독용 간단한 카드들을 통해서 새로운 필터들이 경제적인 방법으로 새로 만들어지고 제공되기 때문에, 업데이트 될 수 있다.
아트카드(9)는 크레디트 카드(86mm 길이, 54mm 넓이)와 같은 형식으로 얇고 백색의 플라스틱 조각이다. 아트카드(9)는 고 해상도 잉크젯 프린터를 이용하여 양 면들상에 프린트된다. 잉크젯 프린터 기술은 1600 dpi(63mm) 해상도로 아트캠에서 이용되었던 것과 동일할 것이다. 아트카드(9)의 주요한 특성은 낮은 제작비용이다. 아트카드들은 플라스틱 필름의 넓은 웨브(web)으로서 고스피드에서 제작 될 수 있다. 그 플라스틱 웨브는 양 면들에 친수성 염료 고정 층으로 코팅된다. 웨브는 '페이지너비' 컬러 잉크젯 프린터를 이용하여 양 면들 위에 동시에 프린트된다. 카드의 한 표면은 아트카드(9)가 장면 이미지에 대해 갖는 효과로서 사람이 읽을 수 있는 화상이 프린트된다. 이것은 카드의 뒷면 상에 저장되는 바크 스크립트를 이용하여 프로세스된 단순히 표준 이미지일 수 있다.
카드의 뒷면상에 이미지 프로세싱 시퀀스를 정의하는 바크 스크립트 안으로 디코드될 수 있는 도트들의 배열이 프린트된다. 이 프린트영역은 전체 15,876,000 도트들로서 80mm×50mm 이다. 도트들의 이러한 배열은 적어도 데이터의 1.89M 바이트를 나타낼 것이다. 높은 안정성을 얻기 위하여, 대규모의 에러 검출 및 정정이 도트들의 배열 안으로 주입된다. 이것은 카드의 실질적인 부분이 오염되거나, 훼손, 낡아짐, 마모 등이 되더라도 데이터 보전에 아무런 영향이 생기지 않도록 해 준다. 이용되는 데이터 코딩은 데이터의 절반이 에러 정정에 쓰이도록 되는 리드-솔로몬 코딩이다. 이것은 각 아트카드(9)에서 정정된 에러 데이터의 967 Kbytes 의 저장을 허용한다.
선형 이미지 센서(34)
아트카드 선형 이미지 센서(34)는 전술한 아트카드 데이터 이미지를 전기적 신호들로 변환한다. 영역 이미지 센서(2,4)에서와 같이, 선형 이미지 센서는 CCD 또는 APS CMOS 기술을 이용하여 제조될 수 있다. 선형 이미지 센서(34)의 엑티브 길이는 아트카드(9)상의 데이터 배열의 길이와 동일한 50mm이다. Nyquist의 샘플링 정리를 만족하기 위해서, 선형 이미지 센서(34)의 해상도는 적어도 이미지 센서에 도달하는 아트카드 광학적 이미지의 가장 높은 공간 주파수보다 두 배가 되어야만 한다. 실제로, 이미지 센서 해상도가 실질적으로 이 이상이면 데이터 검출은 더 쉽다. 전체 9,450 픽셀들로서 4800 dpi (189dpmm)의 해상도가 선택되어 진다. 이러한 해상도는 5.3㎛의 픽셀 센서 피치를 필요로 한다. 이것은 20㎛ 픽셀 센서들의 4개의 스태커 열(staggered row)들을 이용하는 것에 의해 쉽게 달성될 수 있다.
선형 이미지 센서는 광-파이프(도시되어 있지 않음)를 통해서 아트카드(9)를 비추는 LED(65)를 포함하는 별도의 패키지에 탑재된다.
아트카드 판독기 광-파이프는 다수의 기능들을 갖는 몰드된 광-파이프일 수 있다:
1. 전체 내부 반사면들을 이용하여 카드의 폭을 향하여 LED로부터의 광을 발산한다.
2. 통합 원통 렌즈(integrated cylindrical lens)를 이용하여 아트카드(9)의 16㎛ 와이드 스트립 상에 광을 집중시킨다.
3. 마이크로 렌즈의 몰드된 배열을 이용하여 선형 이미지 센서 픽셀들 상에 아트카드로부터 반사된 광을 집중시킨다.
아트카드 판독기의 작동은 이하에서 더 상술될 것이다.
아트카드 모터(37)
아트카드 모터는 비교적 일정한 비율로 선형 이미지 센서(34)를 통해 아트카드를 나아가게 한다. 아트카드 판독기에 과도 정밀 기계 소자들을 포함하는 것은 비용면에서 효과적이지 않을 것으로 보이기 때문에, 아트카드 모터(37)는 아트카드(9)를 이동시키는 한 쌍의 롤러들을 구동하는 데 적절한 스피드로 감속기어되는 표준 세밀소형 모터이다. 속도의 변화, 덜거덕 거리는 소음, 및 기타 떨림들은, 아트카드 데이터를 안정적으로 판독하는 데에서의 영향들에 대한 광범위한 보상을 포함하는 APC(31)내의 회로 소자인 원본 이미지 데이터에 영향을 미칠 것이다.
상기 아트카드 모터(37)는 아트카드가 배출되어질 때에 역으로 구동되어 진다.
아트카드 모터 드라이브(61)
아트카드 모터 드라이브는 APC(31)로부터의 디지털 모터 제어 신호들을 아트카드 모터(37)를 구동하는 데 알맞은 레벨들로 증폭하는 소형 회로이다.
카드 삽입 센서(49)
카드 삽입 센서(49)는 카드 판독기 안으로 카드가 삽입되어지는 때에 카드의 존재를 검출하는 광학 센서이다. 이 센서(49)로부터의 신호를 통해서, APC(31)는, 아트카드 모터(37)의 활성화를 포함하여, 카드 판독 프로세스를 개시한다.
카드 배출 버튼(16)
카드 배출 버튼(16)(도 1)은 다른 카드가 삽입되어질 수 있도록, 현재의 카드를 배출하는 데에 사용자에 의해 이용된다. APC(31)은 버튼의 압력을 검출하고, 카드를 배출하기 위해 아트카드 모터(37)를 역전시킨다.
카트 상태 표시기(66)
카드 상태 표시기(66)은 사용자에게 아트카드 판독 프로세스의 상태에 대한 신호를 제공한다. 이것은 표준 쌍색(적색/녹색) LED가 될 수 있다. 카드가 성공 적으로 판독되고, 데이터 무결성(integrity)이 검증된 경우, LED는 계속 녹색광을 비춘다. 카드가 잘못된다면, 그때 LED는 적색광을 띤다.
카메라가 3V 배터리 대신에 1.5V 전원이 공급된다면, 전력 공급 전원은 녹색 LED의 순방향 전압 강하 보다 적고, LED는 켜지지 않을 것이다. 이 경우에, 적색 LED들이 이용될 수 있거나, LED는 더 높은 전압을 필요로 하는 아트캠 내의 다른 회로들에게도 전원을 공급하는 전압 펌프로부터 전원이 공급될 수 있다.
64Mbit DRAM(33)
다양한 범위의 이미지 프로세싱 효과들을 수행하기 위하여, 카메라는 메모리(33)의 8Mbytes를 이용한다. 이것은 한 개의 64Mbit 메모리 칩에 의해 제공될 수 있다. 물론, 메모리 기술의 변화가 크기 때문에 D램 저장 사이즈들은 바뀔 수도 있다.
메모리 칩으로의 고속 액세스가 요구된다. 이것은 램버스 D램(초당 500Mbytes의 비율로 액세스를 시도하는) 또는 두 배의 데이터 속도율의 (DDR)SDRAM이나 SyncLink D램과 같은 새롭게 선보이는 규격들을 이용한 칩을 이용하는 것에 의해 달성될 수 있다.
카메라 인증 칩
카메라 인증 칩(54)은, 그 안에 다른 정보들이 저장된다는 것을 제외하고는, 프린트 롤 인증 칩(53)과 동일한 것이다. 카메라 인증 칩(54)은 3 가지 주요한 목적들을 갖는다:
1. 인증 코드들과 프린트 롤 인증 칩과 비교하는 안전한 수단을 제 공하는 것.
2. 카메라의 일련번호와 같은, 제조 정보용 스토리지를 제공하는 것.
3. 사용자의 정보의 저장을 위한 소량의 비활성 메모리를 제공하는 것.
디스플레이들
아트캠은 컬러 디스플레이(5) 옵션과 소형 상태 디스플레이(15)를 포함한다. 가장 저렴한 소비자용 카메라들은, 디지털 카메라와 캠코더들에서 알려진 것과 유사한 소형 TFT LCD(5)와 같은 컬러 이미지 디스플레이를 포함할 수도 있다. 컬러 디스플레이(5)는 이러한 버전의 아트캠의 주된 비용 요소이고, 그 디스플레이(5) 백 라이트(후면발광기능)는 주요한 전력 소비의 원인이다.
상태 디스플레이(15)
상태 디스플레이(15)는 요즘 할로겐화 은 및 디지털 카메라들에서 제공되는 것과 유사한, LCD에 기초를 둔 소형 수동 세그먼트이다. 그것의 주요한 기능은, 플래쉬 및 배터리 상태와 같은, 프린트 롤(42)안에 남아 있는 프린트들의 수와 여러 가지 표준 카메라 특성들을 위한 아이콘들을 표시하는 것이다.
컬러 디스플레이(5)
컬러 디스플레이(5)는, 뷰파인더로서, 프린트될 이미지의 검증으로서, 또한 사용자 인터페이스 디스플레이로서 동작하는 풀 모션 이미지(full motion image) 디스플레이이다. 디스플레이(5)의 비용은 대략 그것의 영역에 비례하고, 따라서 큰 디스플레이 유닛(말하자면 대각선 4")은 고가(高價) 버전들의 아트캠 유닛으로 제한될 것이다. 예컨대 대략 1"의 컬러 캠코더 뷰파인더 TFT의 디스플레이와 같이, 보다 소형의 디스플레이들은 중간 수준의 아트캠들에 효과적일 것이다.
줌 렌즈(도시되지 않음)
아트캠은 줌 렌즈를 포함할 수 있다. 이것은 표준 전자식 카메라에 이용될 듯한 것과 동일하고, 휴대용 카메라 줌 렌즈들과 유사한 것으로서, 전자적으로 콘트롤되는 표준 줌 렌즈들일 수 있다. 아트캠 유닛의 참조되는 버전은 호환 가능한 일반적인 35mm SLR 렌즈를 포함할 것이다.
자동 포커스 모터(39)
자동 포커스 모터(39)는 줌 렌즈의 포커스를 변화시킨다. 그 모터는 자동 포커스 메커니즘을 구동하는 데 적절한 속도로 감속 기어되는 세밀소형 모터이다.
자동 포커스 모터 드라이버(63)
자동 포커스 모터 드라이버는 APC(31)로부터 상기 자동 포커스 모터(39)를 구동하는 데 알맞은 레벨들로의 디지털 모터 제어 신호들을 증폭하는 소형 회로이다.
줌 모터(38)
줌 모터(38)는 줌 전면 렌즈들을 안팎으로 이동시킨다. 그 모터는 줌 메커니즘을 구동하는 데 적절한 속도로 감속 기어되는 세밀소형 모터이다.
줌 모터 드라이버(62)
줌 모터 드라이버(62)는 APC(31)로부터의 디지털 모터 제어 신호들을 상기 모터를 구동하는 데 알맞은 레벨들로 증폭하는 소형 회로이다.
통신들(Communications)
ACP(31)는 퍼스널 컴퓨터들과 연결하기 위한 범용 직렬 버스(universal serial bus, USB) 인터페이스(52)를 포함한다. 모든 아트캠 모델들이 USB 커넥터를 포함하도록 되어 있는 것은 아니다. 그러나, USB 회로(52)용으로 요구되는 실리콘 영역은 작기 때문에, 상기 인터페이스는 일반적인 ACP에 포함될 수 있다.
옵션 키보드(57)
아트캠 유닛은 아트카드에 의해 설명되는 텍스트를 주문입력하기 위한 소형 키보드(57) 옵션을 포함할 것이다. 아트카드 이미지안에 나타나는 어떤 텍스트는, 그것이 복잡한 메탈릭 3D 폰트 안에 있을지라도, 편집될 수 있다. 이 소형 키보드는 원본 텍스트와 편집된 텍스트를 디스플레이하기 위한 단일 라인의 문자 숫자를 다 프로세스할 수 있는 LCD를 포함한다. 키보드는 표준 악세사리일 것이다.
ACP(31)는 소형 키보드로 또한 소형 키보드로부터 데이터를 이송하기 위한 직렬 통신 회로를 포함한다.
전력 공급
아트캠 유닛은 배터리(48)를 사용한다. 아트캠 옵션들에 따라서, 이것은 3V 리튬 셀, 1.5V AA 알카라인 셀들, 또는 다른 배터리 장치이다.
전력 관리 유닛(51)
전력 소비는 아트캠에서 중요한 디자인 제한요소이다. 표준 카메라 배터리들(가령 3V 리튬 배터리들) 또는 표준 AA 혹은 AAA 알카라인 셀들이 이용되는 것이 바람직하다. 아트캠의 전자적 복잡성은 35mm 사진기들보다 더 극적이지만, 전력 소비는 그 정도로 더 높게 될 필요는 없다. 아트캠 내의 전력은 사용되지 않을 때에 모든 유닛들이 꺼져 있게 함으로서 유의깊게 관리될 수 있다.
가장 중요한 전류 배출들은 각각 다음과 같은 부분으로 다루어지는 ACP(31), 영역 이미지 센서(2, 4), 프린터(44), 다양한 모터들, 플래쉬 유닛(56), 및 옵션 컬러 디스플레이(5)들이다:
1. ACP: 0.25㎛ CMOS 및 1.5V 환경에서 제조되면, ACP 전력 소비는 상당히 낮게 될 수 있다. ACP 칩의 다양한 부분들에의 클록들이 상당히 낮게 될 수 있다. ACP 칩의 다양한 부분들에의 클록들은 사용되지 않을 때에는 오프(off)될 수 있어, 대기 전류 소비를 사실상 제거한다. ACP는 단지 각 사진이 출력되기 위한 대략 4초 동안에만 완전히 이용될 것이다.
2. 영역 이미지 센서: 전력은 사용자가 버튼에 자기 손을 갖다댈 때에만 영역 이미지 센서에 공급된다.
3. 프린터 전력은 실제적으로 프린트될 때에만 프린터에 공급된다. 이는 각 사진을 위하여 소요되는 대략 2초 동안의 시간이다. 더욱이 더 낮은 전력 소비로 프린트가 될 수도 있을 것이다.
4. 아트캠에서 필요로되는 모터들은 모두 저전력 소형 모터들이고, 일반적으로 사진 당 몇 초 동안에만 활동한다.
5. 플래쉬 유닛(45)은 어떤 사진들에서만 이용된다. 그것의 전력 소비는 통상적인 배터리 수명 동안에 3V 리튬 배터리에 의해 쉽게 제공될 수 있다.
6. 컬러 디스플레이(5) 옵션은 두 가지 이유로 주요 전류 소비로이 다: 카메라가 사용되는 전체 시가 동안 온(on)될 것이고, 만일 LCD가 이용된다면 백 라이트가 필요로 될 것이다. 컬러 디스플레이를 내장한 카메라들은 만족스러운 배터리 수명을 위하여 보다 큰 배터리를 필요로 할 것이다.
플래쉬 유닛(56)
플래쉬 유닛(56)은 소비자의 카메라들을 위해서 일반적인 소형 전자 플래쉬가 될 수 있다.
ACP(31)에 대한 개관
도 3은 아트캠 중앙 프로세서(Artcam Central Processor, ACP)를 보다 상세하게 도시하고 있다. 아트캠 중앙 프로세서는 아트캠을 위한 프로세싱 전력의 전체를 제공한다. 그것은 대략 150만개의 트랜지스터와 대략 50㎟의 영역을 갖는 0.25 마이크론 CMOS 프로세스용으로 디자인된다. ACP(31)는 복잡한 디자인이지만, 디자인의 수고는 데이터 경로 편집 기술들, 매크로셀들(macrocells), 및 IP 코어들에 의하여 경감될 수 있다. ACP(31)은 다음과 같은 것을 포함한다:
RISC CPU 코어(72)
4 방향 병렬 VLIW 벡터 프로세서(74)
다이렉트 램버스 인터페이스(81)
CMOS 이미지 센서 인터페이스(83)
CMOS 선형 이미지 센서 인터페이스(88)
USB 직렬 인터페이스(52)
적외선 키워드 인터페이스(55)
다수의 LCD 인터페이스(84), 및
컬러 TET LCD 인터페이스(88)
프로그램 저장장치(70)를 위한 4 Mbyte 플래쉬 메모리(70)
RISC CPU, 다이렉트 램버스 인터페이스(81), CMOS 이미지 센서 인터페이스(83) 및 USB 직렬 인터페이스(52)는 밴더(vendor)에 의해 공급될 수 있는 주요부들이다. ACP(31)는 전력 소비를 최소화하기 위하여 외부적으로는 3V와 내부적으로 1.5V에 의해 200MHz의 클록 스피드로 작동되도록 의도된다. CPU 코어는 단지 100MHz에서 작동되도록 할 필요가 있다. 다음의 두개의 블록 다이어 그램은 ACP(31)의 두 가지 개관을 제공한다:
개별적으로 ACP(31)의 개관
아트캠 하드웨어의 나머지 부분과 연결되는 ACP(31)의 고레벨 개관을 나타내는 예시적인 아트캠.
이미지 액세스
앞에서 설명되어진 것 처럼, DRAM 인터페이스(81)는 ACP 칩의 다른 클라이언트 부분들과 램버스 DRAM 사이를 인터페이스하는 것을 책임진다. 실제적으로 DRAM 인터페이스 내부의 각 모듈은 어드레스 생성기이다.
ACP에 의해서 프로세스되는 이미지들의 세 가지 논리적인 유형들이 있다. 그것들은:
-CCD 이미지, 그것은 CCD로부터 캡쳐된 입력 이미지(Input Image)들이다.
-내부 이미지(Internal Image) 포맷 - 아트캠 장치에 의해서 내부적으로 이용되는 이미지 포맷.
-프린트 이미지(Print Image) - 아트캠에 의해 프린트되는 출력 이미지(Output Image) 포맷이다.
이 이미지들은 카메라 마다 다양할 수 있는 출력 및 입력 컬러 스페이스들, 해상도, 컬러 스페이스들의 점에서 일반적으로 차이가 있다. 예컨대, 저급(low-end) 카메라에서의 CCD 이미지는 고급(high-end)에서 이용되는 카메라와는 해상도 또는 색상 특성들이 다를 것이다. 그러나 내부 이미지 포맷들은 모든 카메라들을 막론하고 컬러 스페이스 점에서 동일한 포맷이다.
더욱이, 상기 세가지 이미지 유형들은 방향이 '업(up)'되는 것과 관련하여 변할 수 있다. 카메라의 물리적인 방위는 인물사진이나 경치 이미지의 관념을 불러 일으키고, 이것은 전체 프로세싱 과정에 걸쳐 유지되어야 한다. 이러한 이유 때문에, 프린트 작동 동안에 내부 이미지는 항상 올바르게 정렬되고, CCD로부터 얻어진 이미지들에 대해 로테이션(회전)이 수행된다.
CPU 코어(CPU)(72)
ACP(31)는 바크 이미지 프로세싱 언어 해석기를 작동시키고 아트캠의 일반적인 작동 시스템을 제대로 수행하기 위한 32 비트 RISC CPU(72)를 내장한다. CPU 코어들의 광범위한 다양성은 적절하다: 그것은 소비자들의 기대에 부응하기에 충분히 빠른 기능들을 제어하고 필요한 핵심 계산들을 수행하기 위하여 충분한 프로세싱 파워를 갖는 프로세서 코어가 될 수 있다. 적절한 CPU의 코어들의 예들로서: LSI 로직으로부터의 MIPS R4000 코어, StrongARM 코어가 있다. 다른 아트캠 모델들 사이의 연속성을 세트하는 지시를 유지할 필요가 없다. 바크 해석기가 간단하게 각각의 새로운 지시 세트를 위하여 다시 컴파일되기 때문에, 아트카드 호환성은 장차 프로세서의 진보들이나 변화들에 상관없이 유지된다. 따라서 ACP(31) 아키텍쳐는 진화에 자유롭다. 다른 ACP(31) 칩 디자인들은 상기 CPU 코어에 대한 라이센스 등을 필요로 할 필요없이 다른 제작자들에 의해 제작될 수도 있다. 이러한 장치 비의존성은 가령 인텔사와 같이 PC 시장에서 발생된 칩 벤더 록인(Vendor lock-in) 현상을 피하게 된다. 상기 CPU는 10ns의 단일 사이클 타임으로 100MHz에서 작동한다. 그것은, 비록 VLIW 벡터 프로세서(74)가 대부분의 시간-임계(time-critical) 계산들을 담당하고 있음에도 불구하고, 바크 해석기를 작동하는 데 충분히 빠름에 틀림없다.
프로그램 캐쉬(PROGRAM CACHE)(72)
프로그램 코드가 온칩(on-chip) 플래쉬 메모리(70)에 저장되더라도, 잘 꾸려진(well packed) 플래쉬 메모리(70)가 CPU에 의해 요구되는 10ns 사이클 시간에서 작동될 수 있을 것으로 보기 어렵다. 결과적으로 소형 캐쉬는 좋은 성능을 위해 필요로 된다. 512바이트 전체에 있어서, 32 바이트의 16 캐쉬 라인들은 각각 충분한 양이다. 프로그램 캐쉬(72)는 '프로그램 캐쉬(72)'라고 표제가 붙여진 장에서 명확하게 밝혀진다.
데이터 캐쉬(76)
소형 데이터 캐쉬(76)는 좋은 성능을 위해 필요로 된다. 이러한 필요는 거의 의례적으로 램버스 DRAM의 사용에 의하고, 이는 버스트(burst)에서 고스피드 데이터를 제공할 수 있으나, 단일 바이트 액세스들에 있어서는 효율적이지 않다. CPU는 CPU 데이터 캐쉬(76) 사이즈들의 유연한 조정이 허용되는 메모리 캐쉬 시스템에 액세스를 갖는다. 16 캐쉬 라인들의 (512 바이트) 최소값은 좋은 성능을 위해 추천된다.
CPU 메모리 모델
아트캠의 CPU 메모리 모델은 32MB 영역으로 구성된다. 그것은, 오프칩(off-chip) 메모리의 16MB까지 제공되는, 아트캠의 기본 모델에서의 물리적인 RDRAM의 8MB으로 구성된다. 프로그램 저장을 위해서는 ACP(31) 상의 4MB 플래쉬 메모리(70)가 존재하고, ACP(31)의 제어 및 다양한 레지스터들에 매핑되는 4MB 어드레스 스페이스가 있다. 아트캠에 있어서의 메모리 맵은 다음과 같다:
항목 | 크기 |
Base Artcam DRAM | 8 MB |
Extended DRAM | 8 MB |
Program memory (on ACP 31 in Flash memory 70) | 4 MB |
Reserved for extension of program memory | 4 MB |
ACP 31 registers and memory-mapped I/O | 4 MB |
Reserved | 4 MB |
TOTAL | 32 MB |
어드레스들을 디코딩하는 것 직접적인 방법은 어드레스 비트(23-24)을 이용하는 것이다:
비트(24)가 클리어(clear)되면, 어드레스는 더 낮은 16-MB 범위이고, 그러므로 DRAM과 데이터 캐쉬(76)으로부터 만족될 수 있다. 이 더 많은 경우에 있어 DRAM은 단지 8MB가 될 것이지만 16MB는 더 높은 메모리 모델 아트캠들에 제공하기 위해 할당된다.
비트(24)가 세트(set)되고, 비트(23)가 클리어되면, 어드레스는 플래쉬 메모리(70) 4Mbyte 범위를 도시하고 프로그램 캐쉬(72)에 의해 만족된다.
비트(24)=1 및 비트(23)=1인 경우에, 상기 어드레스는, CPU 메모리 디코더(68)에 의해 ACP 내의 요청된 구성 요소로의 저속 버스를 통한 액세스로 번역된다.
플래쉬 메모리(70)
ACP(31)은 아트캠 프로그램을 저장하기 위한 4Mbyte 플래쉬 메모리(70)를 포함한다. 플래쉬 메모리(70)는 마스크된 롬보다 고밀도 패킹율을 가질 것이고, 카메라 프로그램 코드를 테스트하는 데 더 큰 용이함을 보일 것임은 주지의 사실이다. 플래쉬 메모리의 불리한 점은 액세스 시간으로서, CPU의 100MHz 작동 스피드(10ns 사이클 타임)에 충분하도록 빠리지는 않을 것으로 보인다. 따라서 빠른 프로그램 명령 캐쉬(77)는 CPU와 보다 느린 플래쉬 메모리(70) 사이의 인터페이스로서 작동한다.
프로그램 캐쉬(72)
소형 캐쉬는 우수한 CPU 성능을 위해 필요하다. 이러한 필요는 프로그램 코드를 저장하는 저속 플래쉬 메모리(70)에 기인한다. 전체 512 바이트에 있어서, 32바이트의 16 캐쉬 라인들은 각 충분한 양이다. 프로그램 캐쉬(72)는 단지 판독(read)만 할 수 있는 캐쉬이다. CPU 프로그램들에 의해서 이용되는 데이터는 CPU 메모리 디코더(68)를 통해서 오고, 만일 어드레스가 DRAM 내에 있다면, 통상의 데이터 캐쉬(76)를 통해서 온다. 그러한 분리는 CPU를 VLIW 벡터 프로세서(74)에 독립적으로 작동하도록 한다. 소정의 프로세스에 대하여 데이터 필요가 낮다면, 그것은 결과적으로 완전히 캐쉬없이 작동할 수 있다.
결국, 프로그램 캐쉬(72)는 순수하게 프로그램 명령들에서 보다는 CPU에 의한 데이터로서 판독될 수 있다. 이것은 VLIW를 위한 표들, 마이크로 코드 등이 플래쉬 메모리(70)로부터 로드되도록 한다. 비트(24)는 세트되고 비트(23)는 클리어되는 경우의 어드레스들은 프로그램 캐쉬(72)로부터 만족되어진다.
CPU 메모리 디코더(68)
CPU 메모리 디코더(68)은 CPU 데이터 액세스들을 만족하기 위한 간단한 디코더이다. 디코더는 데이터 어드레스들을 내부 저속 버스를 통해서 내부 ACP 레지스터 액세스들로 번역되고, 따라서 ACP 레지스터들의 I/O가 맵핑된 메모리가 허용된다. CPU 메모리 디코더(68)은 단지 세트인 비트(24)와 클리어인 비트(23)을 갖는 어드레스들을 해석한다. CPU 메모리 디코더(68)에는 캐쉬가 없다.
DRAM 인터페이스(81)
아트캠에서 사용되는 DRAM은 1.6GB/sec로 동작하는 단일 채널 64메가비트(8MB) 램버스 RDRAM이다. RDRAM 액세스들은 단일 채널 (16비트 데이터 경로) 제어에 의한다. RDRAM은 또한 저전력 동작을 위한 수개의 유용한 동작모드를 가진다. 램버스의 상세설명서가 95% 보다 더 대단한 효율을 이룰 수 있는 것으로서의 랜덤 32 바이트 이송을 갖는 시스템이라고 표현된다 하더라도, 32바이트의 부분만 이용된다면 이것은 진실이 아니다. 동일한 장치에 두 번 판독하고 두 번 기록하는 것은 86% 이상의 효율을 가져온다. 1차 레이턴시(latency)는 기록에서 판독으로 가는 턴-어라운드(turn-around) 버스에서 필요로 되고, 지연 기록 메커니즘(Delayed Write mechanism)이 있기 때문에, 효율은 보다 개선될 수 있다. 기록에 있어서, 기록 마스크(Write Mask)는 바이트들의 특정의 부분들에 기록될 수 있도록 한다. 이 기록 마스크들은 내부 캐쉬 "오염된 비트들(dirty bits)"를 통해 세트될 것이다. 램버스 다이렉트 RDRAM의 궁극적인 결론은, 1GB/sec 이상의 프로세스량이 쉽게 달성될 수 있는 것과, 모든 기록(대부분의 프로세스들) 에 있어서의 다중 판독들이 32 바이트 지식 전송의 우수한 사용을 만드는 인텔리전트 알고리즘과 결합되어 있기 때문에, 1.3GB/sec 이상의 전송율들이 기대되는 것이다. 모두 10ns, 16 바이트가 코어로 전송되거나 또는 전송되어 올 수 있다.
DRAM 구성
기본 모델 (8MB RDRAM) 용 DRAM 구성은 다음과 같다:
항목 | 크기 |
Program scratch RAM | 0.50MB |
Artcard data | 1.00MB |
Photo Image, captured from CMOS Sensor | 0.50MB |
Print Image (compressed) | 2.25MB |
1 Channel of expanded Photo Image | 1.50MB |
1 Image Pyramid of single channel | 1.00MB |
Intermediate Processing | 1.25MB |
TOTAL | 8MB |
주:
압축되지 않는 경우에, 프린트 이미지는 4.5MB(채널당 1.5MB)를 필요로 한다. 8MB 모델에 있어서 다른 목적들을 수용하기 위해서, 프린트 이미지는 압축될 필요가 있다. 색상신호(chrominance) 채널들이 4:1로 압축된다면, 그것들은 단지 각 0.375MB만을 필요로 한다.
여기에서 표현된 메모리 모델은 한개의 8MB RDRAM로 가정한다. 아트캠의 다른 모델들은 더 많은 메모리를 가질 수 있으며, 그러므로 프린트 이미지의 압축이 필요하지 않는 것이다. 게다가, 더 많은 메모리를 통해서 마지막 이미지의 더 큰 부분이 동시에 작업될 수도 있으며, 스피드개선의 제공이 가능해질 것이다.
아트카드를 삽입하거나 또는 배출하는 것은, 이미지 피라미드, 확장된 포토 이미지의 1 채널, 및 프린트 이미지를 유지하는 5.5MB 영역을 무효화 시킴을 유의하라. 이 스페이스는 아트카드를 디코딩하기 위한 아트카드 인터페이스에 의해 안전하게 이용될 수 있을 것이다.
데이터 캐쉬(76)
ACP(31)는 제공된 CPU 명령 캐쉬(77)와 일반 데이터 캐쉬(76)를 포함한다. 데이터 캐쉬(76)은, CPU, VLIW 벡터 프로세서(74), 및 디스플레이 제어기(88)로부터 모든 DRAM 요청들(데이터의 판독들과 기록들)을 취급한다. 이들 요청들은 메모리 사용 및 알고리즘적 타이밍 조건들의 점에서 다른 프로파일들을 가질 것이다. 예컨대, VLIW 프로세스는 선형 메모리 안에서 이미지와, 이미지 내의 각 값에 대응하는 표 내 참조값을 프로세싱 하는 것이 될 것이다. 이것들은 이미지의 많은 부분을 캐쉬할 필요는 거의 없지만, 현실적인 메모리 액세스가 필요되지 않도록 전체 참조표을 캐쉬하는 것이 바람직할 것이다. 이들 다른 조건들 때문에, 데이터 캐쉬(76)는 지능형 정의 캐쉬(intellingent definition of caching)로 고려될 것이다.
램버스 DRAM 인터페이스(81)가 초고속 메모리 액세스를 할 수 있다고 하더라도(25ns에서의 32바이트의 평균 프로세스량), 한 개의 바이트 요청들을 프로세스하는 데에서는 효과적이지 않다. 효과적으로 메모리 레이턴시를 경감시키기 위해서, ACP(31)은 128 캐쉬 라인들을 포함한다. 각 캐쉬 라인은 32 바이트의 폭을 갖는다. 그러므로 데이터 캐쉬(76)의 전체 양은 4096 바이트(4KB)이다. 상기 128 캐쉬 라인들은 16 프로그램가능한 사이즈의 그룹으로 형성되어 있다. 16 그룹은 캐쉬라인들의 연속적으로 인접하는 세트임이 틀림없을 것이다. CPU는 각 캐쉬 라인들을 각 그룹에 어떻게 할당할 것인지를 결정하는 책임을 맡는다. 각 그룹 내에서 캐쉬 라인들은 간단한 페이지 교체 알고리즘(Least Recently Used algorithm, LRU)에 따라서 채워진다. CPU 데이터 요청들에 있어서, 데이터 캐쉬(76)는 클리어인 어드레스 비트(24)를 갖는 메모리 액세스 요청들을 취급한다. 비트(24)가 클리어되면, 어드레스는 더 낮은 16MB 범위내에 있고, 그러므로 DRAM과 데이터 캐쉬(76)으로부터 만족될 수 있다. 대부분의 경우에서 DRAM은 단지 8MB가 될 것이지만, 16MB가 더 높은 메모리 모델 아트캠들에 제공하기 위해 할당된다. 비트(24)가 세트이면, 어드레스는 데이터 캐쉬(76)에 의해 무시된다.
모든 CPU 데이터 요청들은 캐쉬 그룹(0)으로부터 만족된다. 비록 CPU가 캐쉬 라인들의 (예외 없이) 얼마든지를 캐쉬 그룹(0)으로 할당하더라도, 16 캐쉬 라인들의 최소값은 우수한 CPU 성능을 위해 추천되어 진다. 남아있는 캐쉬 그룹(1 내지 15)들은 현재 조건들에 따라서 할당된다. 이것은 VLIW 벡터 프로세서(74) 프로그램이나 또는 디스플레이 제어기(88)로의 할당을 의미할 수 있을 것이다. 예를 들면, 영구히 이용될 수 있도록 된 256 바이트 참조표은 8 캐쉬 라인들을 필요로 할 것이다. 순차적인 이미지를 기록(writing out)하는 것은 단지 2-4 캐쉬 라인들만 필요로 할 것이다(이는 생성된 레코드 사이즈 또는 라이트 요청들이 사이클들의 중요한 항목으로서 기록 지연(Write Delayed)될지 아닐지에 의존한다). 관련된 각 캐쉬 라인 바이트는 오염된 비트(dirty bit)로서, DRAM으로 메모리가 기록될 때 기록 마스크(Write Mask)를 새로 만들기 위하여 이용된다. 관련된 각 캐쉬 라인은 또 다른 오염된 비트로서, 어떤 캐쉬 라인 바이트들이 기록될지 아닐지를 나타낸다(그러므로 상기 캐쉬 라인은 재사용될 수 있기 전에 DRAM으로 기록될 것이다). 두 개의 서로 다른 캐쉬 그룹들이 메모리 내의 동일한 어드레스를 액세스하거나 동시에 나오는 것이 가능함을 유의하라. VLIW 프로그램 라이터는 이것이 생 성되지 않도록 보호하는 책임을 맡는다. 예컨대, 이미지의 판독을 맡는 캐쉬 그룹, 및 메모리로 되돌리는 변화된 이미지의 기록을 맡는 또 다른 캐쉬 그룹를 갖는 것은 매우 적절하게 될 것이다. 만일 이미지들이 순차적으로 판독되거나 기록된다면 이와 같은 방법으로 할당된 캐쉬 라인들에 많은 이익이 있을 것이다. 전체 8 버스(182)는 VLIW 벡터 프로세서(74)를 데이터 캐쉬(76)에 연결한다. 각 버스는 I/O 어드레스 생성기에 연결된다. (프로세싱 유닛(178) 당 2개의 I/O 어드레스 생성기들(189)(190)이 있고, VLIW 벡터 프로세서(74) 내에 4개의 프로세싱 유닛들이 있다. 버스들의 전체 수는 그러므로 8이 된다.)
어떤 주어진 사이클 안에서, CPU의 캐쉬 그룹(그룹 0)으로의 단일 32비트 (4 바이트)액세스에 부가하여, 잔존 캐쉬 그룹들로의 16 비트(2 바이트)의 4개의 동시적인 액세스들이 8개의 VLIW 벡터 프로세서(74) 버스들 상에서 허용된다. 어떤 주어진 사이클에 있어서, 특정의 캐쉬 그룹으로의 단지 1개의 요청이 프로세스될 것이다. VLIW 벡터 프로세서(74) 안에서 8개의 어드레스 생성기들 (189) (190)이 주어짐에 따라서, 이들의 각각은 개별 캐쉬 그룹에 의존하게 될 가능성이 있다. 그러나 2개 또는 그 이상의 어드레스 생성기(189)(190)가 동일한 캐쉬 그룹에 액세스하는 것이 가능하며 때때로 합리적이다. CPU는 상기 캐쉬 그룹들이 올바른 캐쉬 라인들에 할당된 것과, VLIW 벡터 프로세서(74) 내의 다양한 어드레스 생성기들(189)(190)은 특정한 캐쉬 그룹들을 올바르게 참조하는 것을 확인하는 것을 담당한다.
이미 설명된 데이터 캐쉬(76)는 디스플레이 제어기(88)와 VLIW 벡터 프로세 서(74)가 동시에 활성화되도록 한다. 만일 이 두 구성들의 작동이 동시에 발생되는 일이 절대 없을 것으로 간주되는 경우, 전체 9개의 캐쉬 그룹들이면 족할 것이다. 이 경우에, 캐쉬 그룹이 특별한 요청을 만족하도록 정의하는 (4 비트보다는 오히려) 단지 3비트를 필요로 하면서, CPU는 캐쉬 그룹 0을 이용할 것이고, VLIW 벡터 프로세서(74) 및 디스플레이 제어기(88)는 남아있는 8개의 캐쉬 그룹들을 분배하게 될 것이다.
JTAG 인터페이스(85)
표준 JTAG(Joint Test Action Group) 인터페이스는 테스트 목적들을 위해 ACP(31)가 포함된다. 칩의 복잡ㆍ복합성으로 인하여, BIST(Built In Self Test)와 기능적 블록 분리(functional block isolation)들을 포함하여 다양한 테스트 기술들이 필요로 된다. 칩영역의 10%는 전체 칩을 위한 테스팅 회로 소자로 되어 있다. 이 테스트 회로 소자는 본 발명의 범위를 넘어서는 것이다.
직렬 인터페이스들(Serial Interfaces)
USB 직렬 포트 인터페이스(52)
이것은 표준 USB 직렬 포트로서, 내부 칩 저속 버스에 연결되며 CPU가 이를 제어한다.
키보드 인터페이스(65)
이것은 표준 저속 직렬 포트이고, 내부 칩 저속 버스에 연결되며, 그에 의해 CPU가 이를 제어하도록 허용한다. 간단한 데이터 입력이 프린트들을 커스터마이즈할 수 있도록 하기 위해 키보드에 선택적으로 연결되는 것이 디자인된다.
인증 칩 직렬 인터페이스(64)
이것들은 2개의 표준 저속 직렬 포트들이고, 내부 칩 저속버스에 연결되며 CPU가 이들을 제어한다. 2개의 포트를 갖는 이유는 서로 분리된 라인을 이용하여 온 카메라(on-camera) 인증 칩 및 프린트 롤 인증 칩 모두에 연결되도록 하기 위함이다. 단지 1 라인을 이용하는 것은 카피 프린트 롤을 만드는 제작자가, 인증 코드를 생성하는 것 대신에, 카메라 내 인증칩에 의하여 생성되는 코드를 이용하여 속임수를 통해서 칩을 디자인하는 것이 가능해지는 것이다.
병렬 인터페이스(67)
병렬 인터페이스는 개별적인 정전기 신호들로 ACP(31)에 연결된다. CPU는 저속 버스를 통해서 I/O 맵핑된 메모리로서 이 연결들을 각 제어할 수 있다. 다음 표은 병렬 인터페이스 연결수단들의 리스트이다.
연결수단 | 방향 | 핀수 |
Paper transport stepper motor | Out | 4 |
Artcard stepper motor | Out | 4 |
Zoom stepper motor | Out | 4 |
Guillotine motor | Out | 1 |
Flash trigger | Out | 1 |
Status LCD segment drivers | Out | 7 |
Status LCD common drivers | Out | 4 |
Artcard illumination LED | Out | 1 |
Artcard status LED (red/green) | In | 2 |
Artcard sensor | In | 1 |
Paper pull sensor | In | 1 |
Orientation sensor | In | 2 |
Buttons | In | 4 |
TOTAL | 36 |
VLIW 입력과 출력 FIFO들(78)(79)
VLIW 입력과 출력 FIFO들은 프로세스들과 VLIW 벡터 프로세서(74) 사이의 통신에 이용되는 8 비트 넓이의 FIFO들이다. 양 FIFO들은 VLIW 벡터 프로세서 (74)의 제어를 받게 되지만, CPU에 의하여 (특별히 상태에 대한) 질의(쿼리, Query) 또는 클리어 등이 될 수 있다.
VLIW 입력 FIFO들(78)
클라이언트가 VLIW 벡터 프로세서(74)에 의하여 프로세스되는 데이터를 갖기 위하여 VLIW 입력 FIFOs(78)에 8 비트 데이트를 기록한다. 클라이언트는 이미지 센서 인터페이스, 아트카드 인터페이스, CPU를 포함한다. 이러한 각 프로세스들은 FIFO에 데이터를 간단하게 기록하고, VLIW 벡터 프로세서(74)로 하여금 모든 작업을 하도록 함으로써 프로세싱을 업로드할 수 있다. VLIW 입력 FIFO들(78)의 클라이언트의 이용을 활용하는 예는 이미지 센서 인터페이스(ISI(83))이다. ISI(83)은 이미지 센서로부터 데이터를 가지고 오고 FIFO(78)에 그것을 기록한다. VLIW 프로세스는 FIFO로부터 그것을 가지고 오고, 그것을 올바른 이미지 데이터 포맷으로 변환하며, DRAM에 그것을 기록한다. 상기 SIS(83)은 결과적으로 훨씬 단순하게 된다.
VLIW 출력 FIFO(79)
VLIW 벡터 프로세서(74)는 클라이언트들이 판독할 수 있는 장소인 VLIW 출력 FIFO(79)에 8 비트 데이터를 기록한다. 클라이언트들은 프린트 헤드 인터페이스와 CPU를 포함한다. 이 양 클라이언트들은 FIFO로부터 이미 프로세스된 데이터를 간단하게 판독하고, VLIW 벡터 프로세서(74)로 하여금 모든 작업을 하도록 함으로써 프로세싱을 업로드할 수 있다. FIFO를 연속적으로 폴링(polling)하기 보다는 그것이 이용될 수 있도록 될 때 데이터를 단지 프로세스하도록 하는 것에 따라서, CPU는 데이터가 VLIW 출력 FIFO(79) 안으로 위치될 때마다 또한 인터럽트될 수 있다. VLIW 출력 FIFO(79)의 클라이언트의 이용을 활용하는 예는 프린트 헤드 인터페이스(PHI(62))이다. VLIW 프로세스는 이미지를 취하여, 그것을 올바른 방위로 회전시키며, 색변환, 그리고 프린테 헤드 조건들에 따라서 결과된 이미지를 디 더링한다. 상기 PHI(62)는 VLIW 출력 FIFO(79)로부터 디더링된 포맷인 8 비트 데이터를 판독하고, 그것을 ACP(31)의 외부인 프린트 헤드로 간단하게 패스한다. PHI(62)는 결과적으로 훨씬 단순하게 된다.
VLIW 벡터 프로세서(74)
아트캠의 높은 프로세싱 필요조건들을 달성하기 위하여, ACP(3)는 VLIW(Very Long Instruction Word) 벡터 프로세서를 포함한다. VLIW 프로세서는 크로스바 스위치(183)를 통해 연결되고 병렬로 작동하는 동일한 프로세싱 유닛들 (PU (특히,178))의 세트이다. 각 PU(특히 178)들은 각 사이클 내에서 다양한 논리 계산들과, 4개의 8비트 곱셈들, 8개의 8비트 덧셈들, 3개의 32비트 덧셈들, I/O 프로세싱을 수행할 수 있다. 예컨대 특히 178와 같은 상기 PU들은 마이크로코드되어지고, 각각 데이터 프로세싱을 위한 유용한 사이클들의 완전한 이용이 허용되는 2개의 어드레스 생성기(189)(190)를 가진다. 예컨대 특히 178와 같은 4개의 PU(특히 178)는 통상적으로 VLIW 프로세서를 타이트하게 상호작용하는 것을 제공하기 위하여 동조화된다. 200MHz에서의 클록킹, VLIW 벡터 프로세서(74)는 12 곱스(Gops, 초당 12억개의 연산)에서 가동된다. 명령들은 이미지 프로세싱 기능들, 예컨대 워핑, 예술적인 브러쉬, 복합 일루미네이션, 색변조, 이미지 필터링, 합성 등을 위하여 조정된다. 이것들은 데스크톱 컴퓨터들에 대한 2 가지 크기의 명령에 의하여 가속된다.
도 3에서 상세하게 도시되어 있는 바와 같이, VLIW 벡터 프로세서(74)는 크로스바 스위치(183)에 의하여 연결되는 4개의 PU(특히 178)들이며, 각 PU(특히 178)는 상기 크로스바 스위치(183)에 2개의 입력과 2개의 출력을 갖도록 되어 있다. 2개의 상용 레지스터들은 상기 PU(특히 178)를 위한 제어 및 동조 메커니즘을 형성한다. 8개의 캐쉬 버스(182)들은 각 PU(특히 178)으로 가는 2개의 버스(I/O 어드레스 생성기 마다 1 버스)를 통해서, 데이터 캐쉬(76)을 거쳐 DRAM과 연결되도록 한다. 각 PU(특히 178)는 ALU(188)(데이터를 프로세싱하기 위한 다수의 레지스터와 연산논리를 포함), 마이크로 코드 램(196), 외부와 연결수단(다른 ALU들을 포함)으로 구성된다. 로컬 PU 스테이트 머신은 마이크로코드 내에서 기동되고, PU(특히 178)가 제어되도록 하는 수단이다. 각 PU(특히 178)는 DRAM(데이터 캐쉬(76)을 거쳐)과 ALU(188)(입력 FIFO와 출력 FIFO를 거쳐) 사이에서 흐르는 데이터를 제어하는 2개의 I/O 어드레스 생성기들(189)(190)를 포함한다. 이 어드레스 생성기는 참조표들 뿐만 아니라 데이터(특히 다양한 포맷의 이미지들)의 판독 및 기록을 할 수 있다. 상기 포맷들은 소프트웨어 제어하에서 주문입력이 가능하지만, 마이크로코드되지는 않는다. 데이터 캐쉬(76)로부터 가져온 데이터는 16 비트 크기의 입력 FIFO를 거쳐 ALU(188)로 전송된다. 출력 데이터는 16 비트 크기의 출력 FIFO에 기록되며 그곳에서부터 데이터 캐쉬(76)까지이다. 결국 모든 PU(특히 178)는 한 개의 8 비트 VLIW 입력 FIFO(78)과 한 개의 8 비트 VLIW 출력 FIFO(79)를 분담한다. 저속 데이터 버스 연결은, CPU가 VLIW 벡터 프로세서(74) 내의 모든 PU(특히 178)에 의해서 분담되는 공통 레지스터들 뿐만 아니라, PU(특히 178) 내의 레지스터들, 업데이트 마이크로코드의 판독 및 기록할 수 있도록 해 준다. 이제 도 4로 넘어가면, 한 개의 PU(특히 178)의 내부들이 상세하게 도시되어 있으며, 이하에 서 순서대로 상세하게 설명되는 컴포넌트들과 제어신호들을 포함하고 있다.
마이크로코드(MICROCODE)
각 PU(특히 178)는 특별한 PU(특히 178)를 위한 프로그램을 유지하는 마이크로코드 RAM(196)을 포함한다. ROM 내에 마이크로코드를 갖는 것 보다는, CPU가 로딩을 높이는 것을 맡게 하면서, 마이크로코드는 RAM 내에 존재하게 된다. 칩상의 같은 스페이스이기 때문에, 이러한 교환은 어떤 한 기능의 최대 사이즈를 RAM 사이즈 수준으로 경감시키지만, 수 많은 기능들이 마이크로코드 내에 제한없이 기록될 수 있다. 마이크로코드를 이용하여 실행되는 기능들은 바크 액셀레이션, 아트카드 판독, 프린트를 포함한다. VLIW 벡터 프로세서(74) 구성은 ACP(3) 케이스를 위한 다수의 장점들을 갖는다:
하드웨어 디자인의 복잡성이 경감된다.
상기 복잡성의 경감으로 발생될 하드웨어 위험이 경감된다.
하드웨어 디자인 시간이 실리콘 안에서 실행되는 전체 바크 기능들에 의존하지 않는다.
칩의 스페이스가 전체적으로 경감된다(프로세스들의 많은 수가 마이크로코드로써 실행될 수 있기 때문).
기능성(functionality)은 하드웨어 디자인 시간들과 충돌되지 않으면서도 바크(마이크로코드를 거쳐)에 덧붙여 질 수 있다.
사이즈 및 콘텐츠
각 PU(특히 178)를 제어하기 위한 마이크로코드 RAM(196)이 저장되어 있는 CPU는 128 워드들이고, 각 워드는 96비트 크기로 이루어져 있다. PU(특히 178)의 다양한 유닛들의 제어를 위한 마이크로코드 크기의 요약은 아래 표에 나타나 있다:
프로세스 블록 | 크기 (bits) |
Status Output | 3 |
Brandching (microcode control) | 11 |
In | 8 |
Out | 6 |
Registers | 7 |
Read | 10 |
Write | 6 |
Barrel Shifter | 12 |
Adder/Logical | 14 |
Multiply/Interpolate | 19 |
TOTAL | 96 |
128개의 명령 언어들을 가지는, PU(특히 178) 당 전체 마이크로코드 RAM(196)은 12,288 비트들이거나, 또는 정확하게 1.5KB이다. VLIW 벡터 프로세서(74)는 4개의 동일한 PU(특히 178)로 구성되기 때문에 이것은 6,144 바이트와 같고, 정확하게는 6KB이다. 마이크로코드 워드 내의 어떤 비트들은 비트들을 제어하는 것으로 직접적으로 이용되지만, 다른 것들은 디코드된다. 마이크로 워드의 비트들 각각의 해석을 설명하고 있는 발명의 상세한 설명의 다양한 부분들을 참조하라.
PU(특히 178)들 사이의 동기화(Sychronization)
각 PU(특히 178)는 4 비트 동기 레지스터(197)를 포함한다. 그것은 PU(특히 178)들이 함께 동작하도록 결정하는 데 이용되는 마스크이며, 한 개의 프로세스로서 작용하는 대응 PU(특히 178) 각각에 있어서의 한 개의 비트 세트를 갖는다. 예컨대, 만일 PU(특히 178)들 전체가 한 개의 프로세스로서 작용이라면, 4 동기 레지스터(197)들 각각은 모두 4 비트 세트를 가질 것이다. 만일 2개의 PU(특히 178)들 각각의 프로세스들이 비동기라면, 2개의 PU(특히 178)들은 그것들의 (그것들 스스로 대응하는) 동기 레지스터(197)안에서 2 비트 세트를 갖게 되고, 다른 2개는 (그것들 스스로 대응하는) 동기 레지스터(197)안에서 다른 2 비트 세트를 가질 것이다.
동기 레지스터(197)은 2가지 기본적인 방법들로 이용된다:
동기 내의 주어진 프로세스를 시작 및 중단
프로세스 안에서 실행의 일시중지
중단 및 시작 프로세스들
CPU는 마이크로코드 RAM(196)를 로딩하고 제1 명령(일반적으로 0)을 위한 실행 어드레스를 로딩하는 것을 책임진다. CPU가 실행 마이크로코드를 시작할 때, 그것은 특정한 어드레스에서 시작된다.
마이크로코드의 실행은 단지 동기 레지스터(197)들의 모든 비트가 공통 동기 레지스터(197) 내에서 세트될 때 발생한다. 따라서 CPU는 PU(특히 178)들 모두를 세트 업하고, 공통 동기 레지스터(197)로의 하나의 기록으로 프로세스들을 시작 또는 중단한다.
이러한 동기 구조는 다중 프로세스들이 PU(특히 178)들에서 비동기적으로 구 동되도록 하며, 하나의 PU(특히 178)보다는 프로세스들로서 동시에 시작되거나 중단되게 된다.
프로세스 안에서 실행의 일시 중지(Suspending Execution within a Process)
주어진 사이클 내에서, PU(특히 178)는 FIFO(현재 마이크로 명령의 오프코드(opcode)에 기초한) FIFO에로 기록하거나 또는 FIFO로부터 판독될 수 있을 것이다. 만일 FIFO가 판독 요청상에서 비어 있다면, 또는 기록 요청 상에서 가득 채워져 있다면, FIFO 요청은 완성될 수 없다. 따라서 PU(특히 178)는 그것의 서스펜드프로세스(SuspendProcess) 제어 신호(198)를 어서트(assert)한다. 모든 PU(특히 178)들로부터의 서스펜드 프로세스 신호들은 모든 PU(특히 178)들로 피드백된다. 동기 레지스터(197)는 4 서스펜드 프로세스 비트들과 앤드연산되고(ANDed), 만일 그 결과가 0이 아니면, 어떤 PU(특히 178)의 레지스터 WriteEnables 또는 FIFO 스트로브도 세트되지 않을 것이다.
결과적으로 태스크(task)를 완성할 수 없었던 PU(특히 178)와 동일한 프로세스 그룹을 형성하는 어떤 PU(특히 178)도 그 사이클 동안 그것들의 레지스터 또는 FIFO들을 가지지 않을 것이다. 이러한 간단한 기술은 동기 내의 주어진 프로세스 그룹을 유지한다. PU(특히 178)의 스테이트 머신의 각 순차적인 사이클은 동일한 어드레스에서 마이크로코드 명령을 재실행하려고 시도할 것이며, 이 작업은 성공이 될 때까지 계속 실행할 것이다. 물론 공통 동기화 레지스터(197)는 필요하다면 전체 프로세스를 중단하기 위하여 CPU에 의해 기록될 수 있다. 이러한 동기화 구조는, 각 그룹이 판독 또는 기록을 위한 준비가 되어 있지 않은 데이터로부터 비롯 된 일시중지에 관해서 그 동료 대상체들(co-workers)에 작용함으로써, PU(특히 178)의 어떤 조합들이 함께 동작하도록 할 것이다.
제어 및 분기(Branching)
각 사이클 동안에, PU(특히 178)의 ALU(188)(Read, Adder/Logic, Muliply/Interpolate, and Barrel Shifter) 내의 4개의 기본 입력 및 계산 유닛들의 각각은 두 개의 상태 비트(상태 비트, status bit)들을 생산한다: 그 사이클 동안의 작동의 결과가 0 또는 네거티브(음수)이었는지 여부를 나타내는 제로 플래그 및 네거티브(음수) 플래그. 그 4개의 상태 비트들 중의 1개 사이클은 마이크로코드 명령들에 의하여 PU(특히 178)로부터 출력되도록 선택된다. 상기 4개의 상태 비트들(PU(특히 178)의 ALU(188) 당 1개)은 4 비트 공통 상태 레지스터(200)안으로 결합된다. 다음 사이클 동안에, 각 PU(특히 178)의 마이크로코드 프로그램은 공통 상태 레지스터(Common Status Register)(200)로부터 상기 비트들 중 한 개가 선택될 수 있으며, 상기 상태 비트의 값에 의존하는 다른 마이크로코드 어드레스에 분기될 수 있다.
상태 비트(Status bit)
각 PU(특히 178)의 ALU(188)은 다수의 입력 및 계산 유닛들을 포함한다. 각 유닛들은 2개의 상태 비트들-네거티브 플래그와 제로 플래그를 생산한다. 이들 상태 비트들은, 특정한 유닛이 1-비트 트리-스테이트(1-bit tri-state) 상태 비트 버스상으로 그 값을 어써트할 때, PU(특히 178)로부터 출력된다. 한 개의 상태 비트는 PU(특히 178)로부터 출력되고, 그 때 공통 상태 레지스터(200)을 업데이트 하기 위하여 다른 PU(특히 178) 상태 비트들과 결합된다. 출력 상태 비트를 결정하기 위한 마이크로코드는 다음의 형태를 갖는다:
#Bits | 내용 |
2 | Select unit whose status bit is to be output 00 = Adder unit 01 = Multiply/Logic unit 10 = Barrel Shift unit 11 = Reader unit |
1 | 0 = Zero flag 1 = Negative flag |
3 | TOTAL |
상기 ALU(188) 내에서, 2-비트 셀렉트 프로세서 블록(Select Processor Block) 값은 4개의 1-비트 이네이블 비트들(enable bits)로 디코드되며, 이 때 다른 이네이블 비트는 각 프로세서 유닛 블록들로 보내진다. 상태 셀렉트 비트(제로인지 네거티브인지 선택하는)는, 비트가 상기 상태 비트 버스 상으로 출력될 것인지 여부를 판정하는 모든 유닛들로 패스된다.
마이크로코드 내에서의 분기(Branching)
각 PU(특히 178)는 현재 실행되는 마이크로코드 어드레스를 유지하는 7 비트 프로그램 카운터(Program Counter, PC)를 포함한다. 통상의 프로그램 실행은, 한 사이클에서는 어드레스 N으로부터 이동하고 다음 사이클에서는 어드레스 N+1로 이동하게 되는, 선형성을 갖는다. 각 사이클은, 그러나, 마이크로코드 프로그램이 다른 위치로 분기할 수 있는 능력이 있으며, 또는 상기 공통 상태 레지스터(200)로 부터 상태 비트를 테스트하고 분기할 수 있다. 차기 실행 어드레스를 판정하기 위한 마이크로코드는 다음의 형태를 갖는다:
#Bits | 내용 |
2 | 00 = NOP (PC = PC+1) 01 = Branch alwatys 10 = Branch if status bit clear 11 = Branch if status bit set |
2 | Select status bit from status word |
7 | Address to branch to (absolute address, 00-7F) |
11 | TOTAL |
ALU(188)
도 5는 ALU(188)을 보다 상세하게 설명하고 있다. ALU(188)의 내부는 마이크로코드 프로그램에 의해서 제어되는 다수의 특정된 프로세싱 블록들이 있다. 상기 특정된 프로세싱 블록들은 다음과 같은 것들을 포함한다:
입력 FIFO들로부터 데이터를 수용하기 위한 판독 블록(Reed Block, 202).
출력 FIFO들을 거쳐 데이터를 밖으로 보내는 기록 블록(Write Block, 203).
덧셈 & 뺄셈, 비교 및 논리 연산들을 위한 가산기/논리 블록(Adder/Logical block, 204).
보간들과 곱셈기/누산들의 다중 타이프들을 위한 곱셈기/보간 블록(Multiply/Interpolate, 205).
필요시 데이터를 쉬프팅하기 위한 배럴 쉬프트 블록(Barrel Shift block, 206).
외부 크로스바 스위치(183)으로부터 데이터를 수용하는 인 블록(In block, 207).
외부 크로스바 스위치(183)으로부터 데이터를 보내는 아웃 블록(Out block, 208).
임시 스토리지에 데이터를 보관하기 위한 레지스터 블록(Registers block, 215).
4개의 특정 32 비트 레지스터들은 4개의 메인 프로세싱 블록들의 결과를 유지한다:
M 레지스터(209)는 곱셈기/보간 블록의 결과를 유지한다.
L 레지스터(209)는 가산기/논리 블록의 결과를 유지한다.
S 레지스터(209)는 배럴 쉬프터 블록의 결과를 유지한다.
R 레지스터(209)는 판독 블록(202)의 결과를 유지한다.
더욱이, 데이터 전송을 위한 두 개의 내부 크로스바 스위치들(213, 214)이 존재한다. 상기 다양한 프로세스 블록들은 다음 섹션에서 각 블록에 관계되는 마이크로코드 정의들과 함께 더욱 넓혀질 것이다. 마이크로코드는 다양한 유닛들로 제어신호를 제공하기 위한 블록들 안에서 디코드된다.
예컨대 178와 같은 PU들 간의 데이터 전송들
각 PU(특히 178)는 외부 크로스바를 거쳐 데이터를 주고받을 수 있다. PU(특히 178)는 외부 크로스바로 두 개의 입력들과 두 개의 출력들을 가져간다. 이러한 방법으로 프로세싱을 위한 2개의 연산수들은 하나의 사이클 안에서 얻어질 수 있지만, 사실상 다음 사이클까지 연산에서 이용될 수는 없다.
In 207
이 블록은 도 6에서 도시되어 있으며, 외부 크로스바로부터 데이터를 수용하는 In1 와 In2의 두 개의 레지스터들을 포함한다. 그 레지스터들은 각 사이클에서 로드될 수 있거나 불변상태로 남을 수 있다. 8개의 입력들 중으로부터 선택하기 위한 섹션 비트들(section bits)들은 외부 크로스바 스위치(183)에 출력된다. 마이크로코드는 다음과 같은 형태를 갖는다:
#Bits | 내용 |
1 | 0 = NOP 1 = Load In1from crossbar |
3 | Select Input 1 from external crossbar |
1 | 0 = NOP 1 = Load In2from crossbar |
3 | Select Input 2 from external crossbar |
8 | TOTAL |
Out 208
In을 실행하는 것은 Out(208)이다. 아웃 블록은 도 7에서 보다 상세하게 나타나 있다. 아웃은, 다른 각 PU(특히 178)에 의하여 이용되기 위한 외부 크로스바 각 사이클에 출력되는 Out1와 Out2 두 개의 레지스터들을 포함한다. 기록 유닛은 상기 ALU(188)에 붙여지는 출력 FIFO들의 하나에 Out1 또는 Out2의 하나를 기록할 수 있다. 결국, 양 레지스터들은 크로스바1(213)로의 입력들로써 이용될 수 있으며, 따라서 상기 레지스터 값들을 상기 ALU(188) 내의 다른 유닛들로의 입력들로써 이용될 수 있게 한다. 상기 두 레지스터들의 각 하나의 사이클은 마이크로 셀렉션에 따라 업데이트될 수 있다. 특정 레지스터로 저장되는 데이터는, D0-D3(크로스바1(213)으로부터 선택됨) 중의 하나, M, L, S 및 R(크로스바2(214)로부터 선택됨) 중의 하나, 2개의 프로그램 상수들 중의 하나, 또는 고정값 0 이나 1이 될 수 있다. 아웃을 위한 마이크로코드는 다음과 같은 형태를 갖는다:
#Bits | 내용 |
1 | 0 = NOP 1 = Load Register |
1 | Select Register to load[Out or Out] |
4 | Select input[In1,In2,Out1,Out2,D0,D1,D2,D3,M,L,S,R,K1,K2,O,1] |
6 | TOTAL |
ALU(188) 내의 데이터 전송들과 로컬 레지스터들
앞에서 설명된 바와 같이, 상기 ALU(188)은 4개의 메인 프로세싱 블록들의 결과들을 유지하는 4개의 특정화된 32비트 레지스터들을 포함한다:
M 레지스터(209)는 곱셈/보간 블록의 결과를 유지한다.
L 레지스터(209)는 가산기/논리 블록의 결과를 유지한다.
S 레지스터(209)는 배럴 쉬프터 블록의 결과를 유지한다.
R 레지스터(209)는 판독 블록(202)의 결과를 유지한다.
CPU는 이들 레지스터들로의 직접적인 액세스를 갖고, 다른 유닛들은 크로스바2(214)를 거친 입력들로써 그것들을 선택할 수 있다. 때때로 하나 또는 그 이상의 사이클들을 위하여 연산을 지연하는 것이 필요하다. 상기 레지스터들의 블록은 프로세싱 동안에 임시적인 변수들을 유지하기 위한 4개의 32-비트 레지스터 D0-D3를 포함한다. 상기 레지스터들 중의 하나의 각 사이클은, 모든 레지스터들이 크로스바1(213)(또한 In1, In2, Out1, 및 Out2를 포함)를 거쳐 이용되는 다른 유닛들을 향하여 출력되는 동안에, 업데이트 된다. CPU는 이들 레지스터들로의 직접적인 액세스를 갖는다. 지정된 레지스터로 로드되는 데이터들은 D0-D3(크로스바1(213)으로부터 선택됨) 중의 하나, M, L, S 및 R(크로스바2(214)로부터 선택됨) 중의 하나, 2개의 프로그램 상수들 중의 하나, 또는 고정값 0 이나 1이 될 수 있다. 레지스터들의 블록(215)는 도 8에서 보다 상세하게 도시되어 있다. 레지스터들을 위한 마이크로코드는 다음의 형태를 갖는다.
#Bits | 내용 |
1 | 0 = NOP 1 = Load Register |
2 | Select Register to load[D0-D3] |
4 | Select input[In1,In2,Out1,Out2,D0,D1,D2,D3,M,L,S,R,K1,K2,O,1] |
7 | TOTAL |
크로스바1(213)
크로스바1(213)는 도 9에서 상세하게 나타나 있다. 크로스바1(213)은 입력 들 In1, In2, Out1,Out2, D0-D3 로부터 선택되어진다. 7개의 출력들이 크로스바1(213)으로부터 다음으로 생성된다: 3개는 곱셈기/보간 유닛으로, 2개는 덧셈유닛으로, 1개는 레지스터 유닛으로, 그리고 1개는 출력유닛으로이다. 크로스바1(213)를 위한 제어신호들은 크로스바 입력들을 이용하는 다양한 유닛들로부터 오게 된다. 크로스바1(213)를 위한 별도의 특정 마이크로 코드는 존재하지 않는다.
크로스바2(214)
크로스바2(214)는 도 10에서 상세하게 나타나 있다. 크로스바2(214)는 일반적 ALU(188) 레지스터들 M, L, S 및 R로부터 선택하기 위해 사용된다. 6개의 출력들은 크로스바1(213)으로부터 다음으로 생성된다: 2개는 곱셈기/보간 유닛으로, 2개는 덧셈유닛으로, 1개는 레지스터 유닛으로, 그리고 1개는 출력유닛으로이다. 크로스바2(214)를 위한 제어신호들은 크로스바 입력들을 이용하는 다양한 유닛들로부터 오게 된다. 크로스바2(214)를 위한 별도의 특정 마이크로코드는 존재하지 않는다.
PU(특히 178)와 DRAM 또는 외부 프로세스들 사이에서의 데이터 전송들
도 4로 되돌아가서, PU(특히 178)는 외부 크로스바를 통해서 직접적으로 데이터를 상호 배분한다. 그들은 또한 데이터를 DRAM 뿐만 아니라 외부 프로세스들로 전송하고 전송받는다. 각 PU(특히 178)는 DRAM으로부터 데이터를 주고받기 위하여 2개의 I/O 어드레스 생성기(189,190)를 갖는다. PU(특히 178)는 I/O 어드레스 생성기의 출력 FIFO(특히 186)를 거쳐 DRAM에 데이터를 보낼 수 있으며, I/O 어드레스 생성기의 입력 FIFO(187)을 거쳐 DRAM으로부터 데이터를 받을 수 있다. 이 들 FIFO들은 PU(특히 178)로 로컬된다. 모든 ALU들 사이에서 배분되면서, 공통 VLIW 입력 FIFO(78) 및 공통 VLIW 출력 FIFO(79)의 형태 안에서 외부 프로세서들과 데이터를 주고받는 메커니즘이 존재한다. 상기 VLIW 입력 및 출력 FIFO들은 단지 8 비트 크기이고, 프린트, 아트카드 판독, CPU 등으로의 데이터 전송을 위하여 이용된다. 상기 로컬 입력 및 출력 FIFO들은 16비트이다.
판독
도 5의 판독 프로세스 블록(202)는 ALU(188)의 R 레지스터(209)를 업데이트하는 것을 책임지며, 외부 입력 데이터를 VLIW 마이크로코드 프로세스로 나타낸다. 판독 유닛의 각 사이클은 공통 VLIW 입력 FIFO(78)(8비트) 또는 두 개의 로컬 입력 FIFO들의 하나(16비트)로부 판독될 수 있다. 32-비트 값이 생성되고, 그 데이터의 전부 또는 일부가 상기 R 레지스터(209)에 전송된다. 상기 프로세스는 도 11에 보여질 수 있다. 판독을 위한 마이크로코드는 다음 표안에서 설명되어진다. 비트 패턴들의 해석들이 디코딩을 보조하기 위하여 신중히 선택된다.
#Bits | 내용 |
2 | 00 = NOP 01 = Read from VLIW Input FIFO(78) 10 = Read from Local FIFO1 11 = Read from Local FIFO 2 |
1 | How many significant bits 0 = 8 bits (pad with o or sign extend) 1 = 16 bits (only valid for Local FIFO reads) |
1 | 0 = Treat data as signed (sign extend when reading from FIFO)r |
2 | How much to shift data left by: 00 = 0 bits (no charge) 01 = 8 bits 10 = 16 bits 11 = 24 bits |
4 | Which bytes of R to update (hi to lo order byte) Each of the 4 bits represents 1 byte WriteEnable on R |
10 | TOTAL |
기록
기록 프로세스 블록은 공통 VLIW 출력 FIFO(79) 또는 두 개의 로컬 출력 FIFO들의 각 사이클의 하나로 기록할 수 있다. 1개의 FIFO 만이 주어진 사이클 안에서 기록되기 때문에, 한 개의 16-비트 값만이 모든 FIFO들로 출력되며, 낮은 8비트들은 VLIW 출력 FIFO(79)로 가도록 된다. 마이크로코드는 그 값에서의 FIFO의 게이트들 제어한다. 데이터 선택의 프로세스는 도 12에서 보다 상세하게 나타나 있다. 소스값 Out1와 Out2는 상기 아웃 블록에서 온다. 그것들은 단순한 두 개의 레지스터들이다. 기록을 위한 마이크로코드는 다음의 형태를 갖는다.
#Bits | 내용 |
2 | 00 = NOP 01 = Write VLIW Output FIFO(79) 10 = Write local Output FIFO 1 11 = Write local Output FIFO 2 |
1 | Select Output Value [Out1 or Out2] |
3 | Select part of Output Value to write(32 bits = 4 bytes ABCD) 000 = 0D 001 = OD 010 = 0B 011 = 0A 100 = CD 101 = BC 110 = AB 111 = 0 |
6 | TOTAL |
연산블록들(Computational Blocks)
각 ALU(188)는 요컨대 덧셈/논리 프로세스 블록(204) 및 곱셈/보간 프로세스 블록(205)인, 두 개의 연산 프로세스 블록들을 갖는다. 더욱이 이러한 연산 블록들을 돕기 위하여 제공되는 배럴 쉬프터 블록이 존재한다. 레지스터 블록(215)으로부터의 레지스터들은 연산들이 진행되는 동안 임시 저장소로 이용될 수 있다.
배럴 쉬프터(Barrel Shifter)
배럴 쉬프터 프로세스 블록(206)은 도 13에서 보다 상세하게 나타나 있고, 가산기/논리 또는 곱셈기/보간 프로세스 블록들 또는 그 블록들로부터의 앞의 사이클의 결과값들(ALU 레지스터들 L과 M)의 출력으로부터 입력을 받는다. 선택된 32비트들은 둘 중의 하나의 방향 안에서 다수의 비트들을 변경시킨 배럴이며(필요하다면 싸인 확장(sign extension)을 가지며), ALU(188)의 S 레지스터(209)로의 출력 이다. 배럴 쉬프트 프로세스 블록을 위한 마이크로코드는 다음 표에서 서술된다. 비트 패턴들의 해석들은 디코딩을 보조하기 위하여 신중히 선택된다.
#Bits | 내용 |
3 | 000 = NOP 001 = Shift Left (unsigned) 010 = Reserved 011 = Shift left (signed) 100 = Shift right (unsigned, no rounding) 101 = Shift right (unsigned, with rounding) 110 = Shift right (signed, no rounding) 111 = Shift right (signed, with rounding) |
2 | Select Input to barrel shift: 00 = Multiply/Interpolate result 01 = M 10 = Adder/Logic result 11 = L |
5 | # bits to shift |
1 | Ceiling of 255 |
1 | Floor of 0 (signed data) |
12 | TOTAL |
가산기/논리(Adder/Logic (204))
가산기/논리 프로세스 블록은 도 14에서 보다 상세하게 도시되어 있으며, 간단한 32-비트 덧셈/뺄셈, 비교들 및 논리 연산들을 위하여 디자인된다. 하나의 사이클 안에서, 하나의 덧셈, 비교, 또는 논리 연산들은, ALU(188)의 L 레지스터(209) 안에 저장된 결과를 이용하여, 실행될 수 있다. 이들은, 4개의 상수 레지스터들로부터 또는 2개의 크로스바들 중으로부터 선택되어지는 2개의 기본 연산수로서의, A와 B이다. 하나의 크로스바 선택은, 두 번째 크로스바가 해당 ALU(188) 또는 다른 ALU(188)에 의하여 이미 계산된 연산수에 액세스하는 동안에, 앞 사이클의 연산의 결과들이 이용되도록 한다. CPU는 네 개의 상수들(K1-K4)들로의 기록 액세스를 갖는 유일한 유닛이다. (A+B)×4와 같은 연산이 요구된 경우에, 상기 가산기로부터의 직접적인 출력은 배럴 쉬프터의 입력으로서 이용될 수 있으며, 그러므로 상기 L 레지스터(209) 안으로 래치될 필요없이 남은 2개의 지점으로 변경될 수 있다. 상기 가산기로부터의 출력은 또한 곱셈기-축적 연산을 위한 곱셈기 유닛으로 이용되도록 만들어질 수 있다. 곱셈기/논리 프로세스 블록을 위한 마이크로코드는 다음 표에서 서술된다. 몇가지 비트 패턴들의 해석들은 디코딩을 보조하기 위하여 신중히 선택되어진다. 가산기/논리 유닛을 위한 마이크로코드 비트 해석.
#Bits | 내용 |
4 | 0000 = A+B (carry in = 0) 0001 = A+B (carry in = carry out of previous operation) 0010 = A+B+1 (carry in = 1) 0011 = A+1 (increments A) 0100 = A-B-1 (carry in = 0) 0101 = A-B (carry in = carry out of previous operation) 0110 = A-B (carry in = 1) 0111 = A-1 (decrements A) 1000 = NOP 1001 = ABS(A-B) 1010 = MIN(A,B) 1011 = MAX(A,B) 1100 = A AND B (both A & B can be inverted, see below) 1101 = A OR B (both A & B can be inverted, see below) 1110 = A XOR B (both A & B can be inverted, see below) 1111 = A (A can be inverted, see below) |
1 | If logical operation: 0 = A = A 1 = A = NOT(A) IF Adder operation: 0 = A is unsigned 1 = A is signed |
1 | If logical operation: 0 = B = B 1 = B = NOT(B) If Adder operation 0 = B is unsigned 1 = B is signed |
4 | Select A [In1,In2,Out1,Out2,D0,D1,D2,D3,M,L,S,R,K1,K2,K3,K4] |
4 | Select B [In1,In2,Out1,Out2,D0,D1,D2,D3,M,L,S,R,K1,K2,K3,K4] |
14 | TOTAL |
곱셈기/보간(205)
곱셈기/보간 프로세스 블록은 도 15에서 상세하게 도시되어 있으며, 한 사이클 당 4개의 개별 8×8 보간을 수행할 수 있거나, 한 개의 16×16 곱셈을 수행할 수 있도록 결합될 수 있는 4개의 8×8 보간 유닛들의 세트이다. 이것은, 한 사이클 안에서의 4개의 선형 보간들, 하나의 쌍선형(bi-linear) 보간, 또는 트리-선형(tri-linear) 보간의 절반까지 수행될 가능성을 제공한다. 상기 보간 또는 곱셈의 결과는 ALU(188)의 M 레지스터(209) 안에 저장된다. 곱셈기/보간 프로세스 블록 안으로의 4개의 프로그램 상수로부터 또는 상기 ALU(188) 내의 일반적인 레지스터들의 어느 하나로부터 선택되어지는, 2개의 기본 연산자, A 및 B가 존재한다. 각 보간기 블록은 간단한 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이 되도록 요구하는 동안에, 다른 팩터 및 총합된 결과에 의하여 곱셈되어질 것이다. 곱셈기/보간 프로세스 블록을 위한 마이크로코드는 다음 표에서 서술된다. 몇가지 비트 패턴들의 해석들이 디코딩을 보조하기 위하여 조심스럽게 선택된다.
같은 4개의 비트들은, V에 대한 마지막 4개의 옵션들은 일반적으로 f 값처럼 검지되지 않을지라도, V 및 f의 선택에 이용된다. 1 또는 0 팩터로 보간하는 것은 무의미하며, 앞의 곱셈 또는 현재의 결과들이 f에 대한 의미있는 값이 되지는 않을 것이다.
I/O 어드레스 생성기들(189, 190)
I/O 어드레스 생성기들은 도 16에서 보다 상세하게 도시되어 있다. VLIW프로세서는 직접 DRAM에 액세스하지는 않는다. 액세스는, 입력 및 출력 FIFO를 각각 구비하는 두 개의 I/O 어드레스 생성기들을 거쳐 이루어진다. PU(특히, 178)는 두 개의 로컬 입력 FIFO들의 하나로부터 데이터를 판독하며, 두 개의 로컬 출력 FIFO들의 하나로 데이터를 기록한다. 각 I/O 어드레스 생성기는, DRAM으로부터 데이터를 판독하며 PU(특히, 178)에 의하여 판독될 수 있는 입력 FIFO로 데이터를 위치하도록 하며, 출력 FIFO(PU(특히, 178)에 의해 위치됨)로부터 데이터를 가져오고 DRAM으로 기록하는 것을 맡는다. 상기 I/O 어드레스 생성기는 어드레스들을 생성하고 데이터 캐쉬(76)를 거쳐 DRAM 안의 데이터 검색 및 저장을 위한 제어를 맡는 상태 기계(state machine)이다. 그것은 CPU 소프트웨어 제어 하에서 커스터마이즈될 수 있으나, 마이크로코드될 수는 없다. 상기 어드레스 생성기는 두 개의 카테고리안에서 어드레스들을 생성한다:
다양한 방법들에 있어서의 이미지의 픽셀들을 통해 (판독, 기록 또는 이 양자)를 반복하는 데 이용되는, 이미지 반복기들(Image Iterators).
이미지들의 픽셀들, 표들의 데이터를 랜덤하게 액세스하고 DRAM 내에 서 FIFO들을 시뮬레이트하는데 이용되는, I/O 표.
각 I/O 어드레스 생성기들(189, 190)은, PU(특히, 178) 당 2개의 버스, 전체 VLIW 벡터 프로세서(74)에 대해 전체 8개의 버스연결을 만들면서, 데이터 캐쉬(76)에 연결되는 자신의 버스를 갖는다. 상기 데이터 캐쉬(76)는 PU(특히, 178) 각 사이클로부터 최대 8개의 요청들의 4개를 서비스할 수 있다. 입력 및 출력 FIFO들은 8개의 출구의 16-비트 FIFO들이다. 어드레스 생성의 다양한 타입들(이미지 반복기들 및 I/O 표)은 다음 섹션들에서 상세히 설명된다.
레지스터들(Registers)
상기 I/O 어드레스 생성기는 어드레스 생성을 제어하는 데 이용되기 위한 레지스터들의 세트이다. 어드레싱 모드는 또한 데이터가 어떻게 포맷되고 어떻게 로컬 입력 FIFO로부터 보내지는지, 데이터가 로컬 출력 FIFO로부터 어떻게 해석되는지를 결정한다. CPU는 저속 버스를 거쳐 I/O 어드레스 생성기의 레지스터들을 액세스할 수 있다. 레지스터들의 제1 세트는 I/O 생성기를 위한 하우스키핑(housekeeping) 파라미터들을 정의한다:
레지스터 명 | #bits | 내용 |
Reset | 0 | 어떤 동작의 중지를 나타내는 레지스터, I/O 생성기의 모든 데이터 레지스터에 0들을 기록하며, 입력 및 출력 FIFO들은 클리어되지 않는다. |
Go | 0 | 현재의 셋업에 따라서 카운터들에 기록한다. 만일 I/O 생성기가 판독 반복기라면, 반복기는 현재 이미지를 지나는 도중이고, 다시 이미지의 시작점에서 판독을 시작하라고 기록한다. |
Halt | 0 | 어떤 현재의 행위를 중지시키는 레지스터, 상태 레지스터의 활동적인 비트를 클리어한다. 만일 활동적인 비트가 이미 클리어되어 있다면, 이 레지스터로의 기록은 아무런 효과가 없다. |
Continue | 0 | 현재의 셋업으로부터 I/O 생성기를 계속 진행시키는 레지스터. 카운터들을 리셋되지 않으며, FIFO는 클리어되지 않는다. I/O가 활동되고 있는 동안에는 이 레지스터에로의 기록은 효과가 없다. |
ClearFIFOsOnGo | 1 | 0 = Don`t clear FIFOs on a write to the Go bit. 1 = Do clear FIFOs on a write to the Go bit. |
Status | 8 | Status flags |
상태 레지스터는 다음의 값들을 갖는다.
레지스터 명 | #bits | 내용 |
Active | 1 | 0 = Currently inactive 1 = Currently active |
Reserved | 7 | - |
캐쉬(Caching)
몇몇의 레지스터들은, 입력들, 출력들 등을 위하여 이용하는는 캐쉬 그룹을 지정하는 것에 의하여, 캐쉬 메커니즘을 제어하는 데 이용된다. 캐쉬 그룹들에 대한 보다 많은 정보에 대해서는 데이터 캐쉬(76)에 대한 섹션을 참조하라.
레지스터 명 | #bits | 내용 |
CacheGroup1 | 4 | Defines cache group to read data from |
CacheGroup2 | 4 | Defines which cache group to write data to, and in the case of the ImagePyramidLookup I/O mode, defines the cashe to use for reading the Level Information Table. |
이미지 반복기들 = 픽셀들에 대한 순차적 자동 액세스
소프트웨어 및 하드웨어 알고리즘을 위한 기본 이미지 픽셀 액세스 방법은 이미지 반복기들을 거친다. 이미지 반복기들은 모든 어드레싱을 수행하고, 이미지 채널 내에서 픽셀들의 캐쉬들에 액세스하며, 그들의 클라이언트를 위하여 픽셀들을 판독, 기록 또는 판독하거나 기록 및 판독을 수행한다. 판독 반복기들은 그들의 클라이언트들을 위한 특정한 명령 내에서 픽셀들을 판독하고, 기록 반복기들은 그들의 클라이언트들을 위한 특정한 명령 내에서 픽셀들을 기록한다. 반복기들의 클라이언트들은 로컬 입력 FIFO로부터 픽셀들을 판독하거나, 로컬 출력 FIFO를 거쳐 픽셀들을 기록한다.
출력 FIFO.
판독 이미지 반복기들은, 특별한 명령 내에서 로컬 입력 FIFO안으로 픽셀 데이터를 위치지우면서, 이미지를 통하여 판독한다. 매시간 클라이언트는 입력 FIFO로부터 픽셀을 판독하며, 기록 반복기들은 이미지들을 (데이터 케쉬(76)을 거쳐) 상기 FIFO 안으로 다음 픽셀을 위치시킨다.
기록 이미지 반복기들은 전체 이미지를 기록해 내기 위한 특정한 명령 내에서 픽셀들을 기록한다. 클라이언트들은 기록 이미지 반복기에 의해서 차례대로 판 독되고 데이터 캐쉬(76)를 거쳐 DRAM에 기록되는 출력 FIFO로 픽셀들을 기록한다. 일반적으로 VLIW 프로세스는 판독 반복기에 결합된 입력과, 동일한 기록 반복기에 결합된 출력을 가질 것이다. PU(특히 178) 마이크로코드 프로그램의 관점으로부터, 상기 FIFO는 DRAM으로 효과적인 인터페이스이다. (데이터의 로컬 명령은 별문제라 하고) 스토리지를 수행하는 실제적인 방법은 걱정되지 않는다. FIFO가 길이 면에서 사실상 제한되지 않을 것으로 이해된다 하더라도, 실제적으로 FIFO는 제한된 길이를 가지고, 특히 약간의 메모리 액세스들이 경합되면, 데이터를 저장하고 검색하는 데 지연이 있을 수 있다. 다양한 이미지 반복기들은 이미지 프로세싱 알고리즘들의 대부분의 공통 어드레싱 조건들을 프로세스하기 위해서 존재한다. 대부분의 경우에서 각 판독 반복기에 대한 기록 반복기는 동일하다. 다른 반복기들은 다음 표에서 리스트되어 있다.
판독 반복기들 | 기록 반복기들 |
Sequential Read | Sequential Write |
Box Read | - |
Vertical Strip Read | Vertical Strip Write |
4개의 비트 어드레스 모드 레지스터는 복합기 유형을 결정하는 데 이용된다:
Bit# | 어드레스 모드 |
3 | 0 = This addressing mode is an Iterator |
2 to 0 | Iterator Mode 001 = Sequential Iterator 010 = Box [read only] 100 = Vertical Strip remaining bit patterns are reserved |
액세스 특정 레지스터들은 다음과 같이 사용된다:
어드레스 명 | 로컬 명 | 내용 |
AccessSpecific1 | Flags | 판독 및 기록에 이용되는 플래그들 |
AccessSpecific2 | XBoxsize | 박스 리드의 X내의 사이즈를 결정. 유효한 값은 3, 5, 7. |
AccessSpecific3 | YBoxsize | 박스 리드의 X내의 사이즈를 결정. 유효한 값은 3, 5, 7. |
AccessSpecific4 | BoxOffset | 박스 리드만의 동안에, 하나의 픽셀 중심과 다음간의 오프셋. 통상의 값은 1, 그러나 다른 유용한 값은 2, 4, 8...을 포함한다. 보다 상세한 것은 박스 리드를 참조하라 |
상기 플래그 레지스터(AccessSpecific1)는 데이터의 기록 및 판독에 영향을 주는 팩터들을 결정하는 데 이용되는 다수의 플래그들을 포함한다. 상기 플래그 레지스터는 다음과 같은 구성을 가진다.
라벨 | #bits | 내용 |
ReadEnable | 1 | Read data from DRAM |
WriteEnable | 1 | Write data to DRAM [not valid for Box mode] |
PassX | 1 | Pass X (pixel) ordinate back to Input FIFO |
PassY | 1 | Pass Y (row) ordinate back to Input FIFO |
Loop | 1 | 0 = Do not loop through data 1 = Loop through data |
Reserved | 11 | Must be 0 |
ReadEnable 및 WriteEnable에 대한 주:
ReadEnable이 세트되는 경우, I/O 어드레스 생성기는 판독 반복기로 동작하고, 따라서 입력 FIFO안으로 픽셀들을 위치시키면서, 특별한 명령 내에서 이미지를 판독한다.
WriteEnable이 세트되는 경우, I/O 어드레스 생성기는 기록 반복기로 동작하고, 출력 FIFO로부터 픽셀들을 가지고 오면서, 특별한 명령 내에서 이미지를 기록한다.
ReadEnable 및 WriteEnable 모두 세트되는 경우, 입력 FIFO 안으로 픽셀들을 판독하고, 출력 FIFO로부터 픽셀들을 기록하면서, 상기 I/O 어드레스는 판독 반복기 및 기록 반복기로 동작한다. 픽셀들은 단지 그들이 판독된 후에 기록된다(즉, 기록 반복기가 판독 반복기보다 절대 빠르게 진행하지는 않을 것이다). 이 모드가 이용될 때 마다, VLIW 마이크로코드에 의한 출입 프로세싱 간의 밸런스를 확실하게 하기 위한 주의가 필요하다. 개별적인 캐쉬 그룹들은 캐쉬그룹1 및 캐쉬그룹2 내에서 다른 값들을 로딩하는 것에 의하여 판독들과 기록들에 대해 특정될 수 있다.
PassX 및 PassY에 대한 주:
PassX 및 PassY가 모두 세트되는 경우, Y축이 X축에 앞서 입력 FIFO 내로 위치된다.
상기 ReadEnable 비트가 클리어되는 경우 PassX 및 PassY는 단지 세트되도록 의도된다. 좌표들이 어드레스 생성기로 나아가는 것 대신에, 상기 좌표들은 직접 입력 FIFO들 안으로 위치된다. 상기 좌표들은, FIFO로부터 그들이 제거될 때, 나아간다.
WriteEnable 비트가 세트되는 경우, 기록들은 단지 상기 축들에서 발생하기 때문에(위 ReadEnable 및 WriteEnable에 대한 주를 참조할 것), VLIW 프로그램 유닛은, 입력 FIFO로부터의 좌표들의 판독들과 출력 FIFO에로의 기록들의 밸런스가 유지되도록 확실히 보증해야 한다.
Loop에 대한 주:
상기 루프(Loop) 비트가 세트되면, 판독들은, [EndPixel, EndRow]에 도달하자마자 [SrartPixel, StartRow]에서 재개될 것이다. 이것은, 데이터를 반복적으로 판독할 수 있는, 회선 커널(convolution kernel) 또는 디더 행렬(dither cell matrix)과 같은 구조를 프로세싱하는 데 있어 이상적이다.
ReadEnable 및 WriteEnable 세트로 루핑하는 것은 한 개의 라인 이력(histroy)을 유지하는 환경에서는 유용할 수 있으나, 이는 단지 기록되기 전에 판독을 발생시키는 데에 있어서만 유용한 것이다. FIFO 효과(억제된 형태의 길이내에서 판독되기 전에 기록이 발생하는 장소)에 있어서, 이미지 반복기 대신에 적당한 I/O 어드레싱 모드 표을 이용한다.
단지 WriteEnable 세트로 루핑하는 것은 마지막 N 픽셀들의 기록된 윈도우를 새롭게 만들어낸다. 이것은 상기 윈도우로부터 데이터를 판독하는 비동기 프로세스로 이용된다. 아트카드 판독 알고리즘은 이 모드를 이 모드의 이용을 만들어 낸다.
순차적인 판독 및 기록 반복기들
도 17은 픽셀 데이터 포맷을 나타낸다. 가장 간단한 이미지 반복기들은 순 차적인 판독 반복기이며 이는 순차적인 기록 반복기와 동일하다. 상기 순차적인 판독 반복기들은, 최상부부터 최하부까지 동시에 채널 한 라인으로부터 픽셀들을 내어 주고, 라인 내에서, 픽셀들은 왼쪽에서 오른쪽으로 건네진다. 패딩(padding) 바이트들은 클라이언트에게 건네지지 않는다. 그것은, 이미지로부터 각 픽셀에 대한 어떤 프로세스를 수행하지만 프로세스되는 상기 픽셀들의 명령에 대하여 걱정을 하지 않거나, 또는 이 명령들 내에서 명확하게 데이터를 요구하지 않는, 알고리즘들에 매우 유용하다. 순차적인 판독 반복기를 실행하는 것은 순차적인 기록 반복기이다. 클라이언트는 출력 FIFO에 픽셀들을 기록한다. 순차적인 기록 반복기는 다음으로 적당한 캐슁 및 적당한 패딩 바이트들을 이용하여 유효한 이미지들을 기록해 낸다. 각 순차적인 반복기는 두 캐쉬 라인들에 대한 액세스를 필요로 한다. 판독일 때, 32개의 픽셀들이 하나의 캐쉬 라인으로부터 건네지는 동안에, 다른 캐쉬라인은 메모리로부터 로드될 수 있다. 기록일 때, 32개의 픽셀들이 하나의 캐쉬 라인에 가득 채워지는 동안에, 다른 캐쉬 라인들은 메모리에 기록되어질 수 있다. 이미지의 각 픽셀에 대한 연산을 독립적으로 수행하는 프로세스는 일반적으로 픽셀들을 얻기 위하여 순차적인 판독 반복기를 이용할 것이며, 새로운 픽셀 값을 목적 이미지 내의 그들의 동일한 위치들로 기록하기 위한 순차적인 기록 반복기를 이용할 것이다. 그러한 프로세스는 도 18에 도시되어 있다.
대부분의 경우에서, 소스 및 목적 이미지들은 다르고, 두 개 I/O 어드레스 생성기들(189, 190)에 의해 표현된다. 그러나 주어진 입력 픽셀은 한 번 이상 판독되지 않기 때문에, 소스 이미지 및 목적 이미지를 동일하게 되도록 하는 것이 효 과적이지 않다. 이런 경우에 있어서, 동일한 반복기가, ReadEnable 및 WriteEnable 레지스터들을 적절하게 세트하는 것에 의해서, 입력 및 출력에 이용될 수 있다. 최대의 효율을 위하여, 두 다른 캐쉬 그룹들은 이용되어야 한다(-판독을 위해서 하나, 기록을 위해서 하나). 데이터가 순차적인 기록 반복기를 거쳐 기록되는 VLIW 프로세스에 의해 새로 만들어진다면, 상기 PassX 및 PassY 플래그들이 입력 FIFO로 전해지는 좌표들을 생성하는 데 이용될 수 있다. 상기 VLIW 프로세스는 이들 좌표들을 이용할 수 있으며 적절하게 출력 데이터를 생성할 수 있다.
박스 판독 반복기(Box Read Iterator)
박스 판독 반복기는 일반적인 목적의 필터들 및 컨볼브(convolve) 같은 연산들을 수행하는 데 매우 유용한 명령들 내로 픽셀들을 내어 주는 데 이용된다. 반복기들은 순차적인 판독 픽셀들 주위의 사각 박스에 픽셀 값들을 제공한다. 상기 박스는 X 및 Y(XBoxSize 및 YBoxSize-그것들은 동일한 값이 되거나 또는 한 차원내에서의 1 및 다른 차원 내에서의 3, 5, 또는 7이 된다) 내의 1, 3, 5 또는 7 픽셀들의 폭이 되도록 제한된다. 상기 프로세스는 도 19에서 도시되어 있다:
BoxOffset: 이 특별한 목적의 레지스터는 입력 픽셀들이 상기 박스의 중심으로서 이용될 것이라는 점에 의하여 서브샘플링(sub-sampling)을 결정하는 데 이용된다. 통상의 값은 1이고, 이것은 각 픽셀이 상기 박스의 중심으로서 이용됨을 의미한다. 값 “2”는 이미지 피라미드를 만드는 경우로서 4:1로 이미지를 축소하는 스케일링 내에서 유용할 것이다. 앞의 다이어그램으로부터 픽셀 어드레스들을 이 용할 때에, 픽셀 0, 다음으로 2, 8, 10이 상기 박스의 중심이 될 것이다. 상기 박스 판독 반복기는 최대 14(2×7) 캐쉬 라인들에 액세스하는 것을 필요로 한다. 픽셀들이 7개 라인들의 한 세트로부터 건네지는 동안에, 다른 캐쉬 라인들은 메모리로부터 로드될 수 있다.
박스 기록 반복기
단지 입력에 대해서 픽셀들의 카피가 요구되기 때문에, 동일한 박스 기록 반복기는 존재하지 않는다. 입력에 대한 박스 판독 반복기를 이용하는 프로세스는, 양 반복기들이 동기를 이루기 때문에, 출력을 위한 순차적인 기록 반복기를 이용할 것으로 보인다. 컨볼버(convolver)가 그 좋은 예이며, 그곳에서 N 입력 픽셀들이 한개의 출력 픽셀을 연산하기 위하여 판독된다. 그 프로세스 플로우는 도 20에 나타나 있다. 이미지들의 순차적인 라인들이 오리지널(새롭게 연산되지 않은) 값들을 필요로 하기 때문에, 소소 및 목적 이미지들은 박스 판독 반복기들을 이용할 때 동일한 메모리를 차지하면 안 된다.
수직 스트립 (Vertical-Strip) 판독 및 기록 반복기들
몇가지 예에서, 출력 픽셀 순서대로 이미지를 기록하는 것이 필요하지만, 출력 픽셀들에 관련된 입력 픽셀들 내의 일관성 방향(direction of coherence)에 관한 지식은 존재하지 않는다. 이에 대한 일예는 회전(rotation)이다. 이미지가 90도 회전한다면, 우리는 출력 픽셀들을 수평으로 프로세스할 것이며, 캐쉬 일관성(cache coherence)의 완전한 손실이 있다. 이에 반해서, 우리가 픽셀들의 1 캐쉬 라인들의 넓이로 출력 이미지를 동시에 프로세스하고 그후 다음 라인으로 나 아가면(동일 라인상의 픽셀들의 다음 캐쉬-라인의 너비로 나아가는 것보다 오히려), 우리는 우리의 출력 이미지 픽셀들을 위한 캐쉬 일관성을 얻을 것이다. 그것은 또한 입력 픽셀들 내의 ‘블록(block)’ 코히런스(가령 컬러 코히런스(color coherence)으로 알려지는 경우도 있을 수 있으며, 그 경우에 판독은 프로세싱 순서를 관장하고, 동기화되어 있는 기록은 다음 픽셀 정렬에 따라야 한다. 입력(수직 스트립 판독)으로서 건네지고, 출력(수직 스트립 기록)으로서 기대되는 픽셀들의 정렬은 동일하다. 상기 정렬은, 이미지의 모든 라인들에 있어서, 라인 0으로부터 픽셀 0에서 31, 다음으로 라인 1에서 픽셀 0에서 31 등이며, 그 다음 라인 0의 픽셀 32에서 63, 라인 1의 픽셀 32에서 63 등이다. 마지막 수직 스트립 내에서, 정확하게 32 픽셀 와이드가 되지 않을 수도 있다. 이 경우에 이미지 내에서의 단지 실제적인 픽셀들은 입력으로서 건네지거나 또는 기대되어 진다. 이 프로세스는 도 21에 나타나 있다.
단지 수직 스트립 기록 반복기를 필요로 하는 프로세스는 일반적으로 출력 픽셀 좌표가 주어진 입력 픽셀 좌표들을 매핑하는 한 방법을 가질 것이다. 이 매핑에 따라서 입력 이미지 픽셀들을 액세스 할 것이며, 코히런스는, 입력 이미지를 위한 ‘랜덤-액세스’ 판독기(reader) 상에 충분한 캐쉬 라인들을 가지는 것에 의하여 결정되어진다. 상기 좌표들은, 일반적으로 수직 스티립 기록 반복기 상에 상기 PassX 및 PassY 플래그들을 세팅하는 것에 의하여 생성되며, 이에 대한 프로세스의 개략은 도 22에 도시되어 있는 바와 같다.
기록 판독기를 순차적인 판독 반복기 또는 박스 판독 반복기와 쌍을 이루도 록 하는 것은 의미가 있는 것이 아니지만, 수직 스트립 기록 반복기는 입력 및 출력 좌표들간의 별다른 매핑이 존재하지 않을 때의 실행에 있어서 중요한 개선점을 제공한다.
수직 스트립 판독 반복기와 수직 스트립 기록 판독기 쌍은 큰 의미가 있을 수 있다. 이 경우에 있어서, 입력 및 출력 이미지들이 동일하다면 한 개의 ALU(188)로 양자를 모두 할당하는 것이 가능하다. 만일 좌표들이 필요하다면, 나아가 반복기는 PassX 및 PassY 플래그 세트를 가지고 이용될 것이 틀림없다. 상기 수직 스트립 판독/기록 반복기들은 입력 FIFO에 픽셀들을 내어 주고, 출력 FIFO로부터 출력 픽셀들을 수용한다. 적절한 패딩 바이트들은 상기 기록에 삽입될 것이다. 입력 및 출력은 각각의 바람직한 실행을 위하여 최소 2 캐쉬 라인들을 필요로 한다.
표 I/O 어드레싱 모드(Table I/O Addressing Modes)
표(table) 안에서 값(가령 이미지)들을 참조하는 것이 자주 필요하다. 표 I/O 어드레싱 모드들은, 클라이언트에게 출력 FIFO 안으로 인덱스(index/es)로서 위치하는 것을 요구하면서, 이러한 기능성을 제공한다. 이때 I/O 어드레스 생성기는 상기 인덱스들을 프로세스하며, 적당하게 데이터들을 참조하고, VLIW 클라이언트에 의한 순차적인 프로세싱을 위하여 입력 FIFO 내의 참조값으로 리턴한다.
보간법에서 타깃된 특별한 모드들을 가지고, 1D, 2D, 3D 표들이 지원된다. VLIW 클라이언트 측의 복잡성을 감소시키기 위하여, 상기 인덱스 값들은, 고정소수점을 정의하고 따라서 비트들이 상기 인덱스의 정수부분으로서 취급되어질 AccessSpecific 레지스터들을 가지면서, 고정소수점 수(fixed-point numbers)들로서 취급되어 진다. 데이터 포맷들은 일반적인 이미지 지표 (Image Characteristics)의 형태로 제한되는데, 즉 PixelOffset 레지스터는 무시되고, 데이터는 열 내에서 인접하며, 데이터 요소 당 단지 8 또는 16 비트들(1또는 2 바이트들)이 될 수 있는 것이다. 4 비트 어드레스 모드 레지스터는 I/O 타이프를 결정하는 데 이용된다:
Bit# | 어드레스 모드 |
3 | 1 = This addressing mode is Table I/O |
2 to 0 | 000 = 1D Direct Lookup 001 = 1D Interpoate (linear) 010 = DRAM FIFO 100 = 2D Interplolate (bi-linear) 101 = Reserved 110 = 3D Interpolate (tri-linear) 111 = Image Pyramid Lookup |
액세스 특정 레지스터(access specific registers)들은:
어드레스명 | 로컬 명 | #Bits | 내용 |
AccessSpecific1 | Flags | 8 | 판독 및 기록을 위한 일반적인 플래그들. 더욱 상세한 정보는 아래를 참조하라. |
AccessSpecific2 | FractX | 8 | X 인덱스 내의 분수 비트들의 수 |
AccessSpecific3 | FractY | 8 | Y 인덱스 내의 분수 비트들의 수 |
AccessSpecific4 (low 8 bits/next 12 or 24 bits) | FractZ | 8 | Z 인덱스 내의 분수 비트들의 수 |
ZOffset | 12 or 24 | 밑을 참조하라 |
FractX, FractY, FractZ는 인덱스들에 기초한 어드레스들을 생성하고, 중요 비트들 및 정수/분수 성분들의 관점에서 상기 인덱스의 포맷을 해석하는 데 이용된다. 다양한 파라미터들은 단지 인덱스된 표 안의 여러 차원에 의해 요구되는 것으로서 정의된다. 1D 표은 오직 FractX를 필요로 하고, 2D 표은 FractX 및 FractY를 필요로 한다. 각 Fract_ 값은 대응하는 인덱스에서의 분수 비트들의 수로 구성된다. 예컨대 X 인덱스는 5:3 형식일 수 있는 것이다. 이는 정수의 5비트와 분수의 3비트를 나타낸다. FractX는 따라서 3으로 세트된다. 간단한 1D 참조는 요컨대 어떤 분수성분도 갖지 않는 8:0 포맷을 수 있을 것이다. FractX는 그러므로 0이 된다. ZOffset은 단지 3D 참조를 필요로 하고, 두개의 다른 해석들을 채용한다. 그것은 3D 참조표 섹션에서 더욱 상세하게 설명되어진다. 플래그 레지스터(AccessSpecific1)은 데이터의 판독(어떤 경우에는, 기록)에 영향을 미치는 팩터들을 결정하는 데 이용되는 다수의 플래그들을 포함한다. 상기 플래그들 레지 스터는 다음의 구성을 갖는다:
라벨 | #bits | 설명 |
ReadEnable | 1 | Read data from DRAM |
WriteEnable | 1 | Write data to DRAM [only valid for 1D direct lookup] |
DataSize | 1 | 0 = 8 bit data 1 = 16 bit data |
Reserved | 5 | Must be 0 |
1D 직접 참조(Direct Lookup) 및 DRAM FIFO를 제외하고, 모든 표 I/O 모드는 판독만을 지원하고, 기록을 지원하지 않는다. 따라서 이들 두 가지 모드들과 다른 모든 I/O 모드들을 위하여 ReadEnable 비트는 세트될 것이고 WriteEnable 비는 클리어될 것이다. 1D 직접 참조는 3가지 모드들을 지원한다:
판독만의 모드, ReadEnable 비트가 세트되고 WriteEnable 비트는 클리어된다.
기록만의 모드, ReadEnable 비트는 클리어되고 WriteEnable 비트는 클리어된다.
판독-수정-기록의 모드, ReadEnable 및 WriteEnable 비트들 모두 세트된다.
다른 모드들은 밑의 1D 직접 참조 섹션에서 설명된다. DRAM FIFO 모드는 단지 1개의 모드를 지원한다:
기록-판독 모드, ReadEnable 및 WriteEnable 비트들이 세트된다.
이 모드는 밑의 DRAM FIFO 섹션에서 설명된다. DataSize 플래그들은 표의 각 데이터 요소들의 사이즈가 8비트인지 16비트인지를 결정한다. 단지 두 가지 데이터 사이즈들만이 지원된다. 32비트 요소들은 아래 프로세스의 조건들에 의존하는 2가지 방법 중 하나 내에서 산출될 수 있다:
2개의 16비트 표들로부터 동시적인 판독 및 그 결과의 결합. 이것은 타이밍이 이슈되는 경우에 편리하지만, 2개의 I/O 어드레스 생성기들(189,190)을 소비하는 단점을 가지며, 각 32비트 요소는 32비트 실체로서 CPU에 의하여 판독되지 않는다.
한 개의 16비트 표로부터 두 번의 판독 및 그 결과의 결합, 이것은, 다른 인데스들이 생성되어지고 상기 참조(look up)안으로 보내지더라도, 단지 1개의 참조가 이용되기 때문에 편리하다.
1 차원 구조들(1 Dimensional Structures)
직접 참조(Direct Lookup)
직접 참조는 1 차원 참조표 안으로의 간단한 인덱싱(indexing)이다. 클라이언트들은 플래그 레지스터내에서 적절한 비트들을 세팅하는 것에 의해 3개의 액세스 모드들 사이에서 선택할 수 있다.
판독만의 모드
기록만의 모드
판독-수정-기록 모드
판독만의 모드
클라이언트는 고정소수점 인덱스 X를 출력 FIFO 안으로 보내고, 표[Int(X)] 에서 8비트 또는 16비트 값이 입력 FIFO 안으로 리턴된다. 인덱스의 분수성분은 완전히 무시된다. 만일 상기 인덱스가 범위를 넘었다면, DuplicateEdge 플래그는 단부 픽셀(edge pixel)이 리턴될지 또는 ConstantPixel이 리턴될지를 결정한다. 어드레스 생성은 간단하다:
만일 DataSize가 8비트를 나타내면, X는 우측으로 배럴-쉬프트 된 FractX 비트이고, 그 결과는 상기 표의 베이스 어드레스 ImageStart에 덧붙여진다.
만일 DataSize가 16 비트를 나타내면, X는 우측으로 배럴-쉬프트 된 FractX 비트이고, 1 비트 좌측으로 쉬프트된(비트0은 0이 된다) 결과는 상기 표의 베이스 어드레스 ImageStart로 덧붙여진다.
결과 어드레스(resultant address)에서의 8비트 또는 16비트 데이터 값은 입력 FIFO안으로 위치된다. 어드레스 생성은 1 사이클을 가지고, 또한 1 사이클을 가지는 출력 FIFO으로 (캐쉬 히트를 가정) 요청된 데이터를 전송한다. 예컨대, 우리가 각 엔트리마다 16비트들인 256-엔트리(entry) 표 내에서 값들을 참조하고 있다고 가정하면, 상기 인덱스는 8:4의 12 비트 고정소수점 포맷이다. FractX는 4, DataSize는 1이 되어야 한다. 인덱스가 상기 참조로 넘겨지는 경우, 우리는 우측 4 비트를 옮기고, 그 다음에 좌측 1 비트 옮겨진 결과를 ImageStart로 더한다.
기록만의 모드
클라이언트는 상기 고정 소수점 인덱스 X를, 표에서 특정 위치로 기록되는 8 비트 또는 16 비트에 의하여 뒤따르는 출력 FIFO 안으로 넘긴다. 완전한 전송은, 어드레스 생성을 위한 1 사이클과 FIFO로부터 DRAM으로 데이터를 전송하기 위한 1 사이클, 최소 2 사이클을 가진다. 인덱스를 FIFO 안으로 위치시키는 VLIW 프로세스와 상기 FIFO 안으로 기록되는 값 사이의 임의 개수의 사이클이 존재할 수 있다. 어드레스 생성은 판독만의 모드와 같은 방법 내에서 발생하지만, 어드레스로부터 판독되는 데이터 대신에, 출력 FIFO로부터 데이터가 어드레스에 기록된다. 만일 어드레스가 표 범위 밖이라고 한다면, 데이터는 FIFO로부터 제거되지만 DRAM에 기록되지 않는다.
판독-수정-기록 모드
클라이언트는 고정 소수점 인덱스 X를 출력 FIFO로 넘기고, 표[Int(X)]에서의 8비트 또는 16비트 값이 입력 FIFO에서 리턴된다. 출력 FIFO 안으로 위치되는 다음 값은, 먼저 리턴된 값을 대신하면서, 표[Int(X)]에 기록된다. 일반적인 프로세싱 루프는, 프로세스가 로케이션(location)으로부터 판독하고, 값을 수정하고, 그것을 기록하여 회신하는 것이다. 전체 시간은 4 사이클이다:
인덱스로부터 어드레스를 생성
표로부터 값을 리턴
어떤 방법으로 값을 수정
그것을 표에 다시 기록
클라이언트가 플래그 안으로 넘기는 “X로부터의 판독”, “X에 기록”으로 말해지는 특별한 판독/기록 모드는 존재하지 않는다. 클라이언트는 오리지널 값을 기록하는 것에 의해 “X로부터의 판독”을, 단순히 되돌아온 값을 무시하는 것에 의해 “X에 기록”을 시뮬레이션 할 수 있다. 그러나 상기 모드의 그러한 이용은, 각 동작이 최소 3 사이클들을 소비하고(상기 수정은 필요하지 않다), 특정한 판독 및 기록 모드들에 제공되는 것으로써 1 액세스 대신에 2 데이터 액세스들 소비하기 때문에, 장려되지는 않는다.
보간 표
이것은, 한 개 대신에 두 개의 값들이 주어진 고정 소수점 인덱스 X를 향해리턴된다는 것은 제외하고, 판독 모드 내에서의 직접 참조와 같다. 상기 리턴된 값는 표[Int(X)], 및 표 [Int(X+1)]이다. 만일 둘 중 하나의 인덱스가 한계를 넘는다면, DuplicateEgdg 플래그는 단부 픽셀이 리턴되는지 또는 CountPixel 리턴되는지를 결정한다. 어드레스 생성은, 제2 어드레스가 단순히 어드레스1+1이고 또는 8비트 또는 16 비트 데이터에 대한 2개의 의존한다는 것을 제외하고는, 직접 참조와 같다. 2개의 8 비트 값들이 사실상 한 개의 16-비트 피치 내에서 캐쉬로부터 어드레스 생성기로 리턴되더라도, 출력 FIFO에로 요청된 데이터를 전송하는 것은 2 사이클을 가진다(캐쉬 히트를 가정한다).
DRAM FIFO
판독/기록 1D 표의 특정 경우는 DRAM FIFO이다. DRAM을 이용하여 주어진 길이의 시뮬레이트된 FIFO를 가지고 캐쉬와 연관되는 것이 자주 필요하다. DRAM FIFO 때문에, 클라이언트가 표 내로 명백하게 인덱스하는 것이 아니라 마치 FIFO의 한 단부였던 것처럼 출력 FIFO로 기록하는 것이며, 그것이 동일 논리 FIFO의 다른 단부였던 것처럼 입력 FIFO로부터 판독되는 것이다. 2 개의 카운터들은 시뮬레이트된 FIFO내에서 입력 및 출력 위치들의 트랙을 유지하며, 필요로되는 DRAM에로 캐쉬한다. 클라이언트들은 플래그 레지스터들 안에서 ReadEnable 및 WriteEnable 비트들을 모두 세트할 필요가 있다.
DRAM FIFO의 이용의 일 예는 어떤 값의 한 개의 라인의 이력을 유지하는 것이다. 최초 이력은 프로세싱이 시작되기 전에 기록된다. 일반적인 프로세스가 라인을 통하여 진행됨에 따라서, 이전 라인의 값은 FIFO로부터 회복되고, 이 라인의 값이 FIFO 안으로 위치하게 된다(이 라인은 우리가 다음 라인을 프로세스할 때에 이전 라인이 될 것이다). 입력 및 출력들이 각각 평균적으로 매치되는 한, 출력 FIFO은 항상 가득 채워질 것이다. 결과적으로 FIFO의 이런 유형에 있어서 어떠한 액세스 지연도 존재하지 않게 된다(만일 전체 FIFO 길이가 - 말하자면 3 또는 4 바이트들 - 처럼 매우 작다면 상기 FIFO의 목적을 좌절시킬 정도로 ).
2 차원 표들
직접 참조(Direct Lookup)
2차원 직접 참조는 지원되지 않는다. 2D 참조들의 모든 경우들은 쌍선형 보간(bi-linear interpolation)을 위하여 액세스되도록 기대되기 때문에, 특별한 쌍선형 참조가 실행되어진다.
쌍선형 참조
이러한 종류의 참조는 2D 표로부터 데이터의 쌍선형 보간을 위하여 필요하다. 고정 소수점 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]
리턴된 값들의 순서는 가장 좋은 캐쉬 코히런스를 제공한다. 만일 데이터가 8비트이면, 2개의 값이 제1 데이터 요소가 되는 낮은 순서의 바이트를 통해 2 사이클들에 대한 각 사이클로 리턴된다. 만일 데이터가 16비트이면, 상기 4개의 값들은 사이클 당 1개로 엔트리하는 것으로서 4 사이클들 안으로 리턴된다. 어드레스 생성은 2개의 사이클들을 가진다. 제1 사이클은 RowOffset에 의하여 곱셈되는 우측 FractY 비트들로 배럴 쉬프트되는 인덱스(Y)를 가지며, 이는 ImageStart로 더해지는 결과를 수반한다. 제2 사이클은 FractX 비트에 의하여 X 인덱스를 우측으로 옮기며, 그때 그 결과(8비트 데이터의 경우의) 또는 1비트 좌측으로 옮겨진 결과가 제1사이클로부터의 결과에 더해진다. 이것은 우리에게 어드레스 Adr = 표[Int(X), Int(Y)]의 어드레스인 것을 제공한다:
Adr = ImageStart
+ShiftRight(Y, FractY)*RowOffset)
+ShiftRight(X, FrcatX)
우리는 순차적인 엔트리를 가져오도록 이용하기 위한 AdrOld에서의 Adr의 카피를 유지한다.
만일 데이터가 8 비트들이라면, 타이밍은 어드레스 생성의 2 사 이클들이며, 리턴되는 데이터의 2 사이클이 뒤따른다(사이클 당 2개의 표 엔트리).
만일 데이터가 16 비트들이라면, 타이밍은 어드레스 생성의 2 사이클들이며, 리턴되는 데이터의 4 사이클이 뒤따른다(사이클 당 1개의 엔트리).
다음 2개의 표들은 8 및 16 비트 데이터 사이즈들을 위한 어드레스 계산의 방법을 보여준다.
사이클 | Adr로부터 2 x 8 비트 데이터 엔트리들을 페칭하는 동안의 계산 |
1 | Adr = Adr+RowOffset |
2 | <preparing next lookup> |
사이클 | Adr로부터 1 x 16비트 데이터 엔트리들을 페칭하는 동안의 계산 |
1 | Adr = Adr+2 |
2 | Adr = AdrOld+RowOffset |
3 | Adr = Adr+2 |
4 | <preparing next lookup> |
양 경우에 있어서, 어드레스 생성의 제1 사이클은, X 인덱스의 삽입을 FIFO 안으로 오버랩시킬 수 있으므로, 효과적인 타이밍이 어드레스 생성을 위한 1 사이클만큼, 그리고 리턴 데이터의 4 사이클들 만큼, 낮게 될 수 있다. 만일 인덱스들의 생성이 상기 결과들보다 2 단계 앞서게 되면, 그때에는 효과적인 어드레스 생성 시간은 존재하지 않게 되고, 데이터들은 단지 적절한 비율(세트당 2 또는 4 사이클들)로 생성된다.
3차원 참조(3 Dimensional Lookup)
직접 참조(Direct Lookup)
2D 참조들의 모든 경우들이 트리-선형 보간(tri-linear interpolation)을 위하여 액세스되도록 기대되기 때문에, 두개의 특별한 트리-선형 참조들이 수행되어진다. 첫 번째는 간명한 참조표이며, 반면에 두 번째는 이미지 피라미드로부터 삼선형(Tri-linear) 보간을 위한 것이다.
삼-선형 참조(Tri-linear lookup)
이러한 유형의 참조는 컬러 변환 표들과 같은, 데이터의 3D 표들에 유용하다. 일반적인 이미지 파라미터들은 데이터의 단일 XY 평면을 정의한다. 즉, 각 평면이 ImageHeight 열들로 구성되고, 각 열은 RowOffset 바이트들을 포함한다. 대부분의 상황에 있어서, 접촉되는 평면들을 가정할 때, 한 개의 XY 평면은 다른 한 개 이후의 ImageHeight x RowOffset 바이트들이 될 것이다. 이 오프셋(offset)을 가정하거나 계산하기 보다는, 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]
리턴된 값들의 상기 순서는 가장 좋은 캐쉬 코히런스를 제공한다. 만일 데이터가 8비트이면, 2개의 값이, 제1 데이터 요소가 되는 낮은 순서의 바이트를 통해 4 사이클들에 대한 각 사이클로 리턴된다. 만일 데이터가 16비트이면, 상기 4개의 값들은 사이클 당 1개로 엔트리하는 것으로서 8 사이클들 안으로 리턴된다. 제1 사이클은, 12비트 ZOffset에 의해 곱셉되는 우측 FractZ 비트들로 배럴-쉬프트되는 인덱스(Z)를 가지며 ImageStart로 덧셈된다. 제2 사이클은 RowOffset에 의해 곱셈되는 우측 FractY 비트들로 배럴-쉬프트되는 인덱스(Y)를 가지며, 그 결과가 전 사이클의 결과에 덧셈되는 것이 수반된다. 제2 사이클은 FractX 비트들에 의하여 상기 X 인덱스를 오른쪽으로 옮기고(shigt), 그 다음에, 결과(8비트 데이터의 경우의) 또는 1 비트 좌측으로 옮겨진 결과(16비트 데이터의 경우의)가 제2 사이클로부터의 결과에 덧셈된다. 이것은 우리에게 어드레스 Adr = 표[Int(X), Int(Y), Int(Z)]의 어드레스인 것을 제공한다:
Adr = ImageStart
+(ShiftRight(Z, FractZ)*ZOffset)
+(ShiftRight(Y, FractY)*RowOffset)
+ShiftRight(X, FractX)
우리는 순차적인 엔트리들을 페칭하는 사용을 위해 AdrOld에서의 Adr의 카피를 유지한다.
만일 데이터가 8 비트들이라면, 타이밍은 어드레스 생성의 2 사이클들이며, 리턴되는 데이터의 2 사이클이 뒤따른다(사이클 당 2개의 표 엔트리).
만일 데이터가 16 비트들이라면, 타이밍은 어드레스 생성의 2 사이클들이며, 리턴되는 데이터의 4 사이클이 뒤따른다(사이클 당 1개의 엔트리).
다음 2개의 표들은 8 및 16 비트 데이터 사이즈들을 위한 어드레스 계산의 방법을 보여준다.
사이클 | Adr로부터 2 x 8 비트 데이터 엔트리들을 페칭하는 동안의 계산 |
1 | Adr = Adr+RowOffset |
2 | Adr = AdrOld+ZOffset |
3 | Adr = Adr+RowOffset |
4 | <preparing next lookup> |
Cycle | Adr로부터 1 x 16 비트 데이터 엔트리들을 페칭하는 동안의 계산 |
1 | Adr = Adr+2 |
2 | Adr = AdrOld+RowOffset |
3 | Adr = Adr+2 |
4 | Adr, AdrOld = AdrOld+Zoffset |
5 | Adr = Adr+2 |
6 | Adr = AdrOld+RowOffset |
7 | Adr = Adr+2 |
8 | <preparing next lookup> |
양 경우에 있어서, 어드레스 생성의 싸이클들은 FIFO들 안으로 인덱스들의 삽입을 오버랩할 수 있으므로, 한 개의 원 오프(one-off) 참조를 위한 효과적인 타이밍이 어드레스 생성을 위한 1 사이클만큼, 그리고 리턴 데이터의 4 사이클들 만큼 낮게 될 수 있다. 만일 인덱스들의 생성이 상기 결과들에 2 단계 앞서 있다면, 효과적인 어드레스 생성 시간은 존재하지 않고, 데이터는 단순히 적절한 비율에서 생산될 것이다(세트 당 4 또는 8 사이클)
이미지 피라미드 참조
브러싱(brushing), 타일링(tiling), 워핑(warping) 동안에 한 이미지 안에서 특별한 영역의 평균 색상을 계산하는 것이 필요하다. 주어진 각 영역을 위한 값을 계산하기 보다는, 세 기능들은 이미지 피라미드를 이용한다. 이미지 피라미드에 대한 설명 및 구성은 이 명세서의 DRAM 인터페이스 내에서의 내부 이미지 포맷에 관한 섹션에서 상세하게 설명될 것이다. 여기에서는 3개의 고정 소수점 인 덱스들(레벨 (Z), Y, X의 순서의)의 관점에서의 피라미드 내에 주어진 픽셀들을 어드레싱하는 방법에 관한 것이다. 이미지 피라미드 참조는 8 비트 데이터 엔트리들을 가정하므로, DataSize 플래그는 완전히 무시된다. Z, Y, X의 열거 후에, 다음 8개의 픽셀들이 입력 FIFO를 거쳐 리턴된다:
The pixel at [Int(X), Int(Y)], level Int(Z)
The pixel at [Int(X)+1, Int(Y)], level Int(Z)
The pixel at [Int(X), Int(Y)+1], level Int(Z)
The pixel at [Int(X)+1, Int(Y)+1], level Int(Z)
The pixel at [Int(X), Int(Y)], level Int(Z)+1
The pixel at [Int(X)+1, Int(Y)], level Int(Z)+1
The pixel at [Int(X), Int(Y)+1], level Int(Z)+1
The pixel at [Int(X)+1, Int(Y)+1], level Int(Z)+1
상기 8개의 픽셀들은, X 및 X+1 엔트리들이 hi/lo를 결합하는 것을 통해서, 4×16 비트 엔트리들로서 리턴된다. 예컨대, 만일 스케일된 (X, Y) 좌표가 (10.4, 12.7)이었다면 첫 번째 4개의 리턴된 픽셀들은 (10, 12), (11, 12), (10, 13), (11, 13)이 될 것이다. 좌표가 유효한 범위 밖인 경우에, 클라이언트들은 DuplicatieEdgePixels 및 ConstantPixel 레지스터들(단지 낮은 8비트들이 이용된다)을 거쳐 상수 색상 값의 복귀(returning) 또는 데두리 픽셀 카피의 선택을 갖는다. 이미지 피라미드가 구성되는 경우에, 레벨 0축으로부터 레벨 Z 축들에로의 간단한 매핑이 존재한다. 그 방법은 단순히 Z 비트들에 의하여 X 및 Y 축을 오른쪽으 로 옮기는 것(shift)이다. 이는 좌표의 정수 부분을 회복시키기 위하여 이미 쉬프트된 비트들에 덧붙여서 수행되어질 것이다(즉, X 및 Y 축을 위하여 FractX 및 FractY를 각각 쉬프트하는 것). 상기 이미지 피라미드의 주어진 레벨을 위한 ImageStart 및 RowOffset 값을 검출하기 위하여, 24비트 ZRowOffset 레지스터는 레벨 정보 표(Level Information Table)에 포인터(pointer)로서 이용되어진다. 이 표은, 레벨 넘버에 의하여 정렬되고, 각각 상기 피라미드의 주어진 레벨을 표시하는 기록(record)들의 배열이다. 각 기록은 ImageStart로부터 피라미드의 상기 레벨로의 16 비트 오프셋 ZOffset(오프셋의 보다 낮은 6 비트들로서의 64 바이트 할당된 어드레스는 현존하지 않는다)과, 상기 레벨을 위한 12 비트 ZRowOffset으로 구성된다. 상기 표의 요소 0은, 0의 ZOffset을 포함하며, 완전한 사이즈의 이미지를 가르키기 때문에, ZRowOffset은 일반적인 레지스터 RowOffset과 동일하다. 상기 표의 요소 N에서의 ZOffset 값은, 이미지 피라미드의 레벨 N의 효과적인 ImageStart를 가져오기 위하여, ImageStart에 더해져야만 한다. 상기 표의 요소 N안에서의 RowOffset 값은 레벨 N을 위한 RowOffset 값을 포함한다. CPU 상에서 동작되는 소프트웨어는 이 어드레싱 모드를 이용하기에 앞서서 상기 표을 적절하게 셋업해야 한다. 실제적인 어드레스 생성은 각 사이클에 따라 여기에서 대략적인 윤곽이 그려진다:
사이클 | 로컬 레지스터 | 어드레스로부터 | 다른 계산 |
0 | - | - | ZAdr = ShiftRight(Z, FractZ)+ZOffset ZInt = ShiftRight(Z, FractZ) |
1 | ZOffset | ZAdr | ZAdr+=2 YInt = ShiftRight(Y, FractY) |
2 | ZRowOffset | ZAdr | ZAdr+=2 YInt = ShiftRight(YInt, ZInt) Adr = ZOffset+ImageStart |
3 | ZOffset | ZAdr | ZAdr+=2 Adr+=ZrowOffset*YInt XInt = ShiftRight(X, FractX) |
4 | ZAdr | ZAdr | Adr+= ShiftRight(XInt, ZInt) ZOffset+=ShiftRight(XInt, 1) |
5 | FIFO | Adr | Adr+= ZrowOffset ZOffset+= ImageStart |
6 | FIFO | Adr | Adr = (ZAdr*ShiftRight(Yint, 1)+ZOffset |
7 | FIFO | Adr | Adr+= ZAdr |
8 | FIFO | Adr | <Cycle o for net retrieval> |
설명된 바와 같은 어드레스 생성은 24 비트들을 내주는 한 개의 16×16 곱셈/뎃셈 유닛, 하나의 배럴 쉬프터 및 두 개의 가산기들을 이용하여 달성된다. 어떤 사이클은 두 개의 쉬프트들을 가짐에도, 그들은 어느 한 개의 동일한 쉬프트 값(즉 배럴 쉬프터의 출력이 두 번 이용된다)이거나 또는 상기 쉬프트는 1 비트이며, 고정 배선(hard wired)될 수 있다. 뒤따르는 내부 레지스터들이 요구된다:ZAdr, Adr, ZInt, YInt, XInt, ZRowOffset, ZImageStart. 상기 _Int 레지스터들은 단지 최대 8 비트들이 되는 것이 필요하지만, 반면에 다른 것들은 24비트들까지 올라갈 수 있다. 이 액세스 방법은 오직 판독하고, 이미지 피라미드들에 기록하지는 않으므로, CacheGroup(2)가 이미지 피라미드 어드레스 표(ZAdr을 거쳐서)를 참조하는 데 이용된다. CacheGroup(1)은 이미지 피라미드 자체(Adr을 거쳐서)에 대한 참조들로서 이용된다. 상기 어드레스 표은 각 4 바이트인 대략 22개의 엔트리들이다(원본 이미지 사이즈에 의존한다). 따라서 3 또는 4개의 캐쉬 라인들이 CacheGroup(2)에 할당되어야 하고, 반면에 가능한 많은 캐쉬 라인들이 CacheGroup(1)에 할당되어야 한다. 타이밍은 데이터 세트의 복귀(returning)를 위한 8 사이클들이며, 사이클 8과 사이클 0이 계산에서 오버랩, 즉 사이클 8 동안에 다음 요청되는 사이클 0이 발생하는 것이 가정되어 있다. 이것은, 사이클 0이 메모리 액세스를 가지고 있지 않기 때문에, 그리고 사이클 8은 어떤 특정한 계산들을 갖지 않기 때문에 만족할 만한 결과이다.
VLIW 벡터 프로세서(74)를 이용하는 좌표들의 생성
기록 반복기들에 링크되는 어떤 함수들은, 프로세싱 경로의 한 부분에서 프로세스되는 현재 픽셀의 X 및/또는 Y 좌표들을 필요로 한다. 특별한 프로세싱은 또한 각 열의 또는 프로세스되는 행의 단부에서 발생하는 것이 필요할 것이다. 많은 경우에, PassX 및 PassY 플래그들은 모든 좌표들을 완전하게 생성하기에 충분하여야한다. 그러나, 만일에 특별한 조건들이 있다면, 뒤따르는 함수들이 이용될 수 있다. 계산은 하나의 사이클 생성 동안에 다수의 ALU들에 펼쳐질 수 있으며, 또는 다중 사이클 생성동안에 하나의 ALU(188) 안에서 될 수 있다.
순차적 [X, Y] 생성(Generate Sequential [X, Y])
프로세스가 순차적인 판독 반복기에 따라서 순차적인 순서로 픽셀들을 프로세싱할 때(또는 픽셀들을 생성하고 그것들을 순차적인 기록 반복기로 기록회신), 다음 프로세스는 도 23에 도시되어 있는 바와 같이 PassX/PassY 대신에 X, Y 좌표 들을 생성하는 데 이용될 수 있다.
좌표 생성기는 X 좌표내의 ImageWidth로 카운트되며, ImageWidth 당 하나씩 픽셀들이 Y 좌표를 증가시킨다. 실제적인 프로세스는 도 24에 나타나 있으며, 다음 상수들이 소프트웨어로서 세트된다:
상수 | 값 | |
K1 | ImageWidth | |
K2 | ImageHeight(optional) |
다음 레지스터들은 임시 변수들을 유지하기 위해 이용된다:
변수 | 값 |
Reg1 | X (starts at 0 each line) |
Reg2 | Y (starts at 0) |
조건들이 다음과 같이 요약된다:
조건들 | *+ | + | R | K | LU | Iterators |
General | 0 | 3/4 | 2 | 1/2 | 0 | 0 |
TOTAL | 0 | 3/4 | 2 | 1/2 | 0 | 0 |
수직 스트립 [X, Y] 생성
프로세스가 픽셀들을 수직 스트립 기록 반복기로 기록하기 위하여 픽셀들을 프로세싱하는 경우, PassX/PassY 플래그들을 이용할 수 없는 어떤 이유가 있기 때문에, 도 25에서 나타나 있는 상기 프로세스는 X, Y 좌표들을 생성하는 데 이용될 수 없다. 좌표 생성기는 단순히 X 좌표 안에서 ImageWidth에 까지 카운트하며, ImageWidth 당 하나 씩 픽셀들은 Y 좌표를 증가시킨다. 실제적인 프로세스는 도 26에 나타나 있으며, 다음 상수들이 소프트웨어로서 세트된다:
상수 | 값 |
K1 | 32 |
K2 | ImageWidth |
K3 | ImageHeight |
다음 레지스터들은 임시 변수들을 유지하기 위하여 이용된다:
변수 | 값 |
Reg1 | StartX(starts at 0, and is incremented by 32 once per vertical strip) |
Reg2 | X |
Reg3 | EndX(starts at 32 and is incremented by 32 to a maximum of ImageWidth) once per vertical strip) |
Reg4 | Y |
조건들이 다음과 같이 요약된다:
조건들 | *+ | + | R | K | LU | Iterators |
일반 | 0 | 4 | 4 | 3 | 0 | 0 |
총계 | 0 | 4 | 4 | 3 | 0 | 0 |
수직 스트립(그 중 하나는 연관된 MIN를 가지는, 두 개의 덧셈) 당 한 번 발생하는 계산들은, 그것들이 각각의 픽셀 타이밍의 진정한 부분이 아니기 때문에, 일반적인 타이밍 통계 안에 포함되지 않는다. 그러나 그것들은 특별한 함수를 위 한 마이크로코드의 프래그램에 대해 고려할 필요는 있다.
이미지 센서 인터페이스(ISI 83)
이미지 센서 인터페이스(ISI, 83)는 CMOS 이미지 센서로부터 데이터를 가져오고 그것을 DRAM 내의 저장장치로서 이용될 수 있도록 한다. 상기 이미지 센서는 3:2의 방위비율을 가지며, 375K(픽셀 당 8 비트들)의, 750×500의 일반적인 해상도를 수반한다. 각 2×2 픽셀 블록은 도 27에서 나타나 있는 바와 같은 구성(configuration)을 갖는다. 상기 ISI(83)은, 이미지를 판독하기 위하여 프레임 동기 펄스들과 픽셀 클록 펄스들을 포함하면서, 제어 정보를 이미지 센서에 보내는 상태 기계이다. 픽셀들은 이미지 센서로부터 판독되며, VLIW 입력 FIFO(78) 안으로 위치된다. 그 때 VLIW는 픽셀들을 프로세스 및/또는 저장한다. 이것은 도 28에서 나타나 있다. 상기 ISI(83)은 DRAM 내에서 감지된 사진 이미지들을 저장하는 VLIW 프로그램과 함께 이용된다. 프로세싱은 두 단계들 내에서 발생한다:
소형 VLIW 프로그램은 FIFO로부터 픽셀들을 판독하고, 그것들을 순차적인 기록 반복기를 거쳐서 DRAM으로 기록한다.
DRAM 내의 사진 이미지는 사진이 찍혔을 때 카메라의 방위에 따라서 90, 180, 또는 270도들로 회전한다.
만일 회전이 0도라면, 그때 스텝 1은 단지 사진 이미지를 마지막 사진 이미지 위치로 기록해 내고 스텝 2는 수행되지 않는다. 만일 회전이 0도가 아니라면, 이미지는 임시 영역(예컨대 프린트 이미지 메모리 영역 안으로)으로 기록하여 내어지고, 그때 스텝 2 동안에 마지막 사진 이미지 위치 안으로 회전된다. 스텝 1은, VLIW 입력 FIFO(78)로부터 데이터를 가져오고 그것을 순차적인 기록 반복기로 기록하게 되는, 매우 간단한 마이크로코드이다. 스텝 2의 회전은 가속된 바크 아핀 변환 함수(Vark Affine transform fuction)를 이용하는 것에 의하여 수행된다. 상기 프로세싱은 디자인의 복잡성을 경감시키고 이미지들을 위하여 이미 필요로 되는 바크 아핀 변환 회전 로직을 재이용하기 위하여 2 단계들 안에서 수행되는 것이다. 이것은, 양 단계들이 아트캠의 조작자에게 감지될 수 없는 시간인 대략 0.03초안에서 완결되기 때문에 바람직하다. 그러므로, 심지어 판독 프로세스는, 전체 프레임을 판독하는 데에 0.02초, 이미지를 회전시키는 데 대략 0.01초를 한계 속도를 갖는 센서이다.
방위는, R, G, B 픽셀들의 상대적인 위치가 방위를 갖고 변화되기 때문에, 감지된 사진 이미지 및 내부 포맷 이미지 사이를 변환하는 데 있어서 중요하다. 프로세스된 이미지는 또한 프린트를 위한 올바른 방위 내에 존재하기 위하여 프린트 프로세스 동안에 회전되어야 할지도 모른다. 아트캠의 3D 모델은, 한 개의 ISI(83)로 곱셈되는 입력되도록 하면서 (마이크로 코드는 다르지만, ACP(31)는 같은) 2개의 이미지를 갖는다. 각 센서는 프레임 스토리지이기 때문에, 양 이미지들을 동시에 가져올 수 있으며, 그때 이미지들은 동시에 메모리로 전송된다.
디스플레이 제어기(88)
아트캠상의 “Take” 버튼이 절반 정도 눌려질 때, TFT는 상기 이미지 센서(간단한 VLIW 프로세스를 거쳐 변환된)로부터 현재의 이미지를 디스플레이한다. “Take” 버튼이 완전히 눌려지게 되면, 찍힌 이미지가 디스플레이된다. 사용자가 프린트 버튼을 누르고 이미지 프로세싱을 시작할 때, TFT는 오프된다. 이미지가 프린트되면 TFT는 다시 온된다. 디스플레이 제어기(88)는 평평한 패널 디스플레이가 내장된 아트캠 모델에서 이용된다. 디스플레이의 일예는 240×160 픽셀들의 해상도를 갖는 TFT LCD이다. 상기 디스플레이 제어기(88)의 구조는 도 29에서 나타나 있다. 디스플레이 제어기(88) 상태 기계는 동기 생성기의 타이밍을 제어하는 레지스터들을 포함하며, 그곳에서부터 디스플레이 이미지가 얻어지고(DRAM 내에서 데이터 캐쉬(76)를 거치고 특정 캐쉬 그룹을 거쳐), 그 순간에 TFT가 활동될지 아닐지(TFT Enable을 거쳐)를 결정한다. CPU는 이들 레지스터들에 저속 버스를 거쳐 기록할 수 있다. RGB TFT 상에서 240×160 픽셀 이미지를 디스플래이하는 것은 픽셀 당 3개의 컴포넌트를 필요로 한다. DRAM에서부터 가져온 이미지는, 각각 R, G, B 출력 신호들인 3DAC들을 거쳐 디스플레이된다. 초당 30 프레임의 이미지 활성화율(refresh rate)에서(초당 60 필드들) 상기 디스플레이 제어기(88)는 다음과 같은 데이터 전송비율을 필요로 한다:
초당 240×160×3×30 = 3.5MB
이 데이터 비율은 시스템의 나머지와 비교할 때 낮은 비율이다. 그러나 그것은 집중적인 이미지 프로세싱 동안에 VLIW 프로그램들을 좀 늦추도록 하기에는 충분하다. TFT 작동의 일반적인 원리들은 이것을 반영하여야 한다.
이미지 데이터 포맷들
앞에서 진술된 바와 같이, DRAM 인터페이스(81)은 ACP 칩의 다른 클라이언트 부분들과 램버스 DRAM 사이의 인터페이스를 맡는다. 요컨대, 디램 인터페이스 내의 각 모듈은 어드레스 생성기이다.
ACP에 의하여 조작되는 세가지의 논리적인 이미지 유형들이 있다. 그것들은:
- CCD 이미지, 입력 이미지는 CCD로부터 캡쳐된다.
- 내부 이미지 포맷 - 내부 이미지 포맷들은 아트캠 장치에 의해 이용된다.
프린트 이미지 - 아트캠에 의해 프린트되는 출력 이미지 포맷이다.
이들 이미지들은 일반적으로 카메라마다 다양화시킬 수 있는 출력 및 입력 색상 스페이스들, 해상도, 색상 스페이스에 있어서 차이가 있다. 예컨대 저급(low-end) 카메라 상의 CCD 이미지는, 고급(high-end) 카메라에서 이용되는 색상 특성들(characteristics)과 차이가 있거나 다른 해상도를 가질 것이다. 그러나 모든 내부 이미지 포맷은 색상 스페이스의 관점에 있어서 모든 카메라들과 동일한 포맷이다.
더욱이, 상기 세 이미지 유형들은 방향이 “업(up)”되는 것과 관련하여서 다양화될 수 있다. 카메라의 물리적인 방위는 인물사진이나 풍경사진 이미지의 인식을 야기하며, 이것은 전체 프로세싱을 통해서 유지될 것이다. 이런 이유로, 상기 내부 이미지는 프린트 작동 동안에 항상 올바르게 방위되고, 회전은 CCD로부터 얻어지는 이미지에 대해 수행될 것이다.
CCD 이미지 구성
비록 많은 다른 CCD 이미지 센서들이 이용될 수 있을지라도, CCD 자체는 375,000 바이트들(픽셀 당 8 비트들), 750×500 이미지 센서이다. 각 2×2 픽셀 블록은 도 30에서 도시된 바와 같은 구성들을 갖는다.
디램 안에서 저장되는 것으로서의 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...등으로 될 것이다.
모든 색상 컴포넌트들이 내부 이미지 포맷으로 변환하기 위하여 필요로 되기 때문에, 픽셀들은 삽입 방식(interleaved fashion)으로 저장된다.
ACP(31)은, 이미지들을 위한 실제적인 CCD들이 카메라마다 다양하고, 시대에 따라 변하기 때문에, CCD 픽셀 포맷에 관한 어떤 전제도 만들지 않는다. 하드웨어를 거쳐 발생하는 모든 프로세싱은 ACP(31)의 유용성을 확장하려는 시도안에서 주요 마이크로코드에 의해 제어된다.
내부 이미지 구성
내부 이미지들은 일반적으로 다수의 채널들로 구성된다. 바크 이미지들은 다음과 같은 것들을 포함할 수 있으나, 그것에 한정되지는 않는다:
Lab
Labα
LabΔ
αΔ
L
L, a, b는 상기 Lab 컬러 스페이스의 컴포넌트에 대응하며, α는 합성을 위해 이용되는 매트(matte) 채널이고, Δ는 범프 맵 채널(브러싱(brushing), 타일링(tiling), 일루미네이션(illuminaing)에 이용됨)이다.
VLIW 프로세서(74)는 평면구성 안에서 이미지들을 구성하는 것을 필요로 한다. 그러므로 Lab 이미지는 3개의 개별적인 메모리 블록들로서 저장될 수 있을 것이다:
L 채널을 위한 일 블록
a 채널을 위한 일 블록
b 채널을 위한 일 블록
각 채널 블록 내에서, 픽셀들을 주어진 열(패딩 바이트들의 어떤 옵션들)을 향해 인접하면서 저장되며, 열들은 번갈아 가며 차례로 저장된다.
도 31로 되돌아가면, 논리적 이미지(100)의 저장장치의 일 형태가 나타나 있다. 상기 논리적 이미지(100)는 잇따라 저장되는 L(101), a(102), b(103) 컬러 컴포넌트를 가지는 평면방식으로 저장된다. 선택적인 것으로서, 상기 논리적 이미지(100)는 압축되지 않은 L 컴포넌트(101)과 압축된 A 및 B 컴포넌트(105, 106)를 갖는 압축된 형식 포맷 안으로 저장될 수 있다.
도 32로 되돌아가면, 라인 n(110)을 위한 픽셀은 라인 n+1(111)을 위한 픽셀 들 전에 함께 저장되고, 그 이미지는 단일 채널내의 연속적인 메모리로 저장된다.
8MB-메모리 모델에 있어서, 모든 프로세싱이 종료된 후의 첫 번째 프린트는 크로미넌스(chrominance, 색신호) 채널들에서 압축될 필요가 있다. 크로미넌스 채널들의 압축은 4:1이 될 수 있으며, 이는 12:6 또는 2:1의 전체 압축을 야기한다.
최종 프린트 이미지 이외에, 아트캠 안에서의 이미지들은 일반적으로 압축되지 않는다. 메모리 제약들 때문에, 소프트웨어는 크로미넌스 채널들을 2:1로 스케일링하는 것에 의해 크로미넌스 채널들내의 최종 프린트 이미지를 압축하는 것을 선택할 지도 모른다. 만일 이와 같은 것이 행해졌다면, 이미지를 프린트하는데 이용되는 프린트 바크 함수(PRINT Vark function)는 압축된 상기 특정 크로미넌스 채널들을 취급하도록 요청될 것이다. 상기 프린트 함수는 압축된 크로미넌스를 다루는 방법을 알고 있는 유일한 함수이며, 그것은 단지 고정된 2:1 압축율로 프로세스될 수도 있다.
비록 이미지를 압축하고 그 다음에 최종 프린트 이미지를 산출해내기 위하여 압축된 이미지에 대해 작용한다고 하더라도, 해상도에서의 손실로 인하여 추천되지는 않는다. 나아가, 이미지는 단 한 번 압축되어야만 할 것이다. 즉, 프린트되 나오기 전의 마지막 단계로서 말이다.
클립 이미지 구성
아트캠들에 저장되는 클립 이미지들은 ACP(31)에 의한 명백한 지원을 가지고 있지 않다. 소프트웨어는 현재의 아트카드로부터 어떤 이미지를 가져오는 것과 ACP에 의해 알려진 형태안으로 데이터를 구성하는 것을 책임진다. 만일 이미지들 이 아트카드상에 압축되어 저장된다면, 아트카드 이미지의 압축을 풀기위한 특별한 하드웨어 지원이 없기 때문에, 소프트웨어가 그것들의 압축해제를 맡게 되는 것이다.
이미지 피라미드 구성
이미지를 조작하는 데 브러싱, 타일링, 워핑 프로세서들이 이용되는 동안에, 이미지 내의 특별한 영역의 평균 색상을 계산하는 것이 자주 필요하다. 주어진 각 영역들을 위한 값을 계산하기 보다는, 이 함수들은 이미지 피라미드를 이용한다. 도 33에서 나타나 있는 바와 같이, 이미지 피라미드는 효과적인 다중-해상도픽셀-맵이다. 원본 이미지(115)는 1:1로 표시되어져 있다. 각 차원안에서 2:1로의 서브-샘플링(sub-sampling) 및 로우 패스 필터링(low-pass filtering)은 1/4 원본 사이즈(116)을 제공한다. 이 프로세스는 전체 이미지가 한 개의 픽셀에 의해서 표시될 때까지 계속 진행한다. 이미지 피라미드는 원본 내부 포맷 이미지로부터 구성되며, 원본 이미지에 의해 수렴 프로세스되는(1/4+1/16+1/64+...) 사이즈의 1/3을 소모한다. 1500×1000 대응 이미지 피라미드의 원본 이미지는 대략 1/2MB이다. 이미지 피라미드는 특정 바크 함수에 의해 구성되며, 다른 바크 함수들에 대한 파라미터로서 이용된다.
프린트 이미지 구성
전체 프로세스된 이미지는 그것을 프린트하기 위하여 동일시간에 필요로된다. 그러나 프린트 이미지 출력은 CMY 디더링된 이미지를 포함할 수 있으며, 프린트 이미지 전체 기능성내에서 이용되는 것으로서, 단지 일시적인 이미지 형식이다. 그러나, 색상 변환은 내부 컬러 스페이스로부터 프린트 컬러 스페이스로 발생되는 것이 필요하다는 것이다. 나아가, 색상 변환은 특별히 다른 잉크특성들을 가지는 카메라 안의 다른 프린트 롤들에 있어서 다르게 조정될 수 있다. 세피아(Sepia) 출력은 특별하게 세피아로 조색된 아트카드를 이용하거나, 또는 세피타색으로 조색된 프린트 롤(따라서 모든 아트카드들은 세피아톤으로 동작할 것이다)을 이용함으로써 이뤄질 수 있다.
컬러 스페이스들(Color Spaces)
전술한 바와 같이, 아트캠에는 3가지 색상 이미지들이 이용되며, 이는 다른 이미지 유형들에 대응하도록 되어 있다.
ACP는 특별한 색상 스페이스에 대한 직접적인 인지를 갖고 있지 않다. 대신에, 그것은 CCD, 내부장치(internal), 프린터 컬러 스페이스들 사이를 변환시키기 위한 클라이언트 컬러 스페이스 변환 표들에 의존한다:
CCD:RGB
Internal:Lab
프린터:CMY
ACP(31)로부터 컬러 스페이스 변환을 제거하는 것은 다음을 허용한다:
-다른 카메라들 내에 이용되는 다른 CCD들
-동일한 카메라 내에서 이용되는 다른 잉크들(오버 타임된 다른 프린트 롤들)
-ACP 디자인 경로로부터의 CCD 선택의 분리
-정확한 컬러 프로세싱을 위한 잘 규정된 내부 컬러 스페이스
아트카드 인터페이스(87)
아트카드 인터페이스(AI)는, 아트카드가 선형 이미지 센서 아래에서 건네지는 동안에 그 선형 이미지 센서로부터 데이터를 가지고 오며, 그 데이터를 DRAM 내에 저장될 수 있도록 한다. 이미지 센서는, 4800dpi에서 아트카드를 샘플링하면서, 스캔라인 당 11,000개의 8 비트 샘플들을 생산한다. 상기 AI는, 이미지를 판독하기 위하여 LineSync 펄스들 및 PixelClock 펄스들을 포함하면서, 선형 센서로 제어정보를 보내는 상태 기계이다. 픽셀들은 선형 센서로부터 판독되며, 상기 VLIW 입력 FIFO(78)안으로 위치한다. VLIW는 그때 픽셀들을 프로세스 및/또는 저장할 수 있다. 상기 AI는 약간의 레지스터들을 갖는다:
레지스터명 | 내용 |
NumPixels | 센서 라인 내 픽셀들의 수(대략 11,000) |
Status | 프린트 헤드 인터페이스의 상태 레지스터 |
PixelsRemaining | 현재 라인에 남아있는 바이트들의 수 |
Actions | |
Reset | 이 레지스터는 AI를 리세트하고, 스캐닝을 종료시키며, 모든 레지스터를 0으로 저장한다. |
Scan | 이 레지스터는 0이 아닌 값을 가질때 상태 레지스터의 스캐닝 비트를 세트하며, 아트카드 인터페이스 스캔 사이클이 시작되도록 한다. 0의 값을 가진 이 레지스터는 스캐닝 프로세스를 중지시키고, 상태 레지스터 내의 스캐닝 비트를 클리어한다. 스캔 사이클은, PixelClock 신호들을 적절하게 생산하면서, AI로 하여금 NumPixels 바이트들을 센서로부터 VLIW 입력 FIFO(78)로 전송하도록 한다. NumPixels 바이트들의 완료를 통해서, LineSync 펄스가 주어지며 스캔 사이클을 재시작한다. PixelRemaining 레지스터는 픽셀들의 수가 현재 스캔라인 상에서 판독되기 위하여 남아있도록 유지한다. |
CPU는 스캔을 초기화하기 전에 상기 VLIW 입력 FIFO(78)을 클리어해야 함을 유의하라. 상태 레지스터(상태 레지스터)는 다음과 같은 비트 해석들을 갖는다:
비트명 | 비트들 | 내용 |
Scanning | 1 | 만일 세트되면, 상기 AI는 현재 스캐닝하고 있으며, 다수의 픽셀들이 PixelRemaining 내에 기록된 현재 라인으로부터 전송되기 위해 남아 있다. 만일 클리어되면, AI는 현재 스캐닝하고 있지 않으며, 따라서 VLIW 입력 FIFO(78)들로 픽셀들이 전송되지 않는다. |
아트카드 인터페이스(87)
아트카드 인터페이스(AI)(87)는 아트카드 판독기로부터 아트카드 이미지를 가져오며, 그것을 원본 데이터로 (바크 스크립트를 이용하여) 디코딩하는 것을 담당한다. 특별히 AI(87)는 아트카드 스캐너 선형 CCD(34)들로부터 신호들을 받아들이며, 카드상의 프린트된 비트 패턴을 검출하고, 에러를 정정하면서 상기 비트 패턴 을 원본 데이터로 변환한다.
어떤 아트카드(9)도 삽입되지 않게 되는 경우, 아트캠으로부터 프린트된 이미지는 단순히 통상적인 이미지 프로세싱 루틴들에 의해 프로세스된 사진 이미지에 불과하다. 상기 아트카드(9)는 사용자가 그것을 프린트출력하기 전에 사진을 수정할 수 있는 수단이다. 아트캠 안으로 특별한 아트카드(9)를 삽입하는 단순한 일을 통해서, 사용자는 사진 이미지에 대하여 수행되는 복합적인 이미지 프로세싱을 정의할 수 있다.
어떤 아트카드도 삽입되지 않게 되는 경우에 사진 이미지는 프린트 이미지를 만들어내는 통상적인 방법안에서 프로세스된다. 아트캠 안으로 한 개의 아트카드(9)가 삽입되는 때에, 그 아트카드의 효과가 프린트 이미지를 생성하기 위한 사진 이미지에 적용되어진다.
아트카드(9)가 제거되는(배출되는) 경우에, 프린트된 이미지는 통상적인 방법에서 프로세스되는 사진 이미지로 되돌아간다. 사용자가 아트카드를 배출하기 위하여 버튼을 눌렀을 경우에, 아트캠 중앙 프로세서(31) 상에서 동작하고 있는 작동 시스템에 의해 유지되는 작업순서에 따라 그 이후의 사건(event)들이 진행되게 된다. 그 이벤트가 프로세스되는 때(예컨대 현재의 프린트에서 발생하게 되면), 그 다음의 일들이 뒤따라 발생하는 것이다.
만일 현재 아트카드가 유효하다면, 그때 프린트 이미지는 유효하지 않은 것으로서 표시되며, ‘통상의 프로세스(Process Standard)’ 이벤트가 이벤트 순서에 따라 위치하게 된다. 상기 이벤트가 결과적으로 프로세스되는 때에, 그것은 프린트가미지를 생산하기 위하여 사진이미지 상에 통상의 이미지 프로세싱 작업들을 수행할 것이다.
모터는 아트카드를 배출하기 위하여 시작되며, 특정시간의 ‘Stop-Motor' 이벤트가 상기 이벤트 순서에 더해질 것이다.
아트카의 삽입
사용자가 아트카드(9)를 삽입할 때, 아트카드 센서(49)는 그것을 검출하고 ACP(72)로 통지한다. 이것은 ‘삽입된 아트카드’ 이벤트를 정해진 이벤트 순서로 삽입하는 소프트웨어로 귀착된다. 상기 이벤트이 프로세스도는 경우 다음과 같은 일들이 발생한다:
현재의 아트카드가 유효하지 않은 상태로서 표시된다(‘none'에 반대되는 것이다).
프린트 이미지가 유효하지 않은 상태로서 표시된다.
아트카드 모터(37)가 상기 아트카드를 로드하기 위하여 작동한다.
아트카드 인터페이스(87)가 상기 아트카드를 판독하라고 명령한다.
상기 아트카드 인터페이스(87)는 아트카드 스케너 선형 CCD(340로부터 신호들을 수용하고, 카드에 프린트된 비트 패턴을 검출하며, DRAM 내에서 유효한 아트카드 데이터 블록을 생산하면서, 검출된 비트 패턴 내의 에러들을 정정한다.
아트카드 CCD로부터 데이터의 판독-일반적인 고찰들
도 34에 나타나 있는 바와 같이, 데이터 카드 판독 프로세스는 픽셀 데이터가 카드로부터 판독되는 동안에 작동되는 4개의 단계를 갖는다. 그 단계는 다음과 같다:
단계 1. 아트카드상의 데이터 영역을 검출
단계 2. CCD 픽셀들에 기초한 아트카드로부터의 비트 패턴의 검출 및 바이트들로서의 기록
단계 3. 바이트-패턴에 대한 언스크램블 및 XOR
단계 4. 데이터 디코드(리드 솔로몬 디코드)
도 35에 나타나 있는 바와 같이, 아트카드(9)는 Nyquist의 정리를 만족시키 기 위하여 적어도 2배의 프린트된 해상도에서 샘플링되어야 한다. 실제적에 있어서 이 보다 더 높은 비율로 샘플링하는 것이 더 좋다. 바람직하게는, 픽셀들은, 하나의 도트를 정의하기 위하여 9개의 픽셀들을 필요로 하면서, 각 차원에서 프린트된 도트 보다 3배의 해상도에서 230으로 샘플링된다. 그러므로 만일 아트카드(9)의 해상도가 1600 dpi이고, 센서(34)의 해상도가 4800 dpi 라면, 50mm CCD 이미지 세서를 이용하는 것은 행(column) 당 9450 픽셀들로 귀착된다. 따라서 만일 우리가 도트 데이터의 2MB를 필요로 한다면(도트 당 9개의 픽셀들), 그 때 이것은 2MB*8*9/9450 = 15,978 행들 = 대략 16,000 행들을 필요로 하게 되는 것이다. 물론 만일 도트가 샘플링 CCD로 정확하게 할당되지 않으면, 가장 안 좋고 가장 많이 발생되는 경우는 도트가 16개의 픽셀 영역 (4×4) 231에 대해 감지될 것이라는 것이다.
아트카드(9)는 열손상에 기인하여 약간 왜곡되고, 아트카드 판독기안으로 삽입되는 데 있어서의 어떤 차이들에 의해 약간 회전(말하자면 1도 정도까지)될 수 있을지도 모르며, 아트카드 모터(37)의 스피드에서의 변동에 기인하여 진짜 데이터 비율에 있어서의 약간의 차이를 가질 수 있다. 이러한 변화들은 카드로부터 데이터의 행들이 픽셀 데이터의 대응 행들로서 판독되지 않게 만들 것이다. 도 36에 나타나 있는 바와 같이, 아트카드(9)에서의 1도 회전은 픽셀들을 카드상의 행으로부터 166 행들을 가로지르는 픽셀들로서 판독되도록 할 수 있다:
마지막으로, 아트카드(9)는 조작하는 사람과 관련하여 합리적인 시간양 안에서 판독되어져야 한다. 아트카드의 데이터는 아트카드 표면의 대부분에 커버되어 있으므로, 관계되는 타이밍은 아트카드 데이터 자체에 제한될 수 있다. 1.5초의 판독시간은 아트카드 판독에 있어서 적절하다.
아트카드는 1.5초 안에서 로드되져야 한다. 그러므로 픽셀 데이터의 전체 16,000 행들은 1.5초 안에 CCD(34)로부터 판독되어져야 한다. 즉 이는 초당 10,667 행들이 판독되는 것이다. 따라서 하나의 행을 판독하는 데 이용될 수 있는 시간은 1/10667 초이거나 93,747ns가 된다. 픽셀 데이터는 동시에 한 행을 DRAM으로 기록돼 내어질 수 있으며, 이는 픽셀 데이터를 판독하는 어떤 프로세스들로부터 완전히 독립적으로 이루어진다.
DRAM으로 데이터의 하나의 행을 기록하는 데 걸리는 시간(판독이 픽셀당 4비트들이 되고, 바이트 당 2×4 비트 픽셀를 주기 때문에, 9450/2)은 8 캐쉬 라인들을 이용하는 것에 의하여 경감된다. 만일 4개의 라인들이 한번에 기록돼 내어진다면, 4개의 뱅크들이 독립적으로 기록될 수 있으며, 그때 오버랩 레이턴시(overlap latency)가 경감된다. 그러므로 4725 바이트들이 11,840ns(4725/128*320ns) 시간안에서 기록되어질 수 있다. 그러므로 DRAM으로 주어진 행의 데이터를 기록해 내는 데 걸리는 시간은 단지 이용 가능한 대역폭의 13% 이하를 이용하는 것이다.
아트카드 디코딩
데이터 사이즈들에 대하여 간략하게 살펴보면, 만일 선형 CCD(34)에 의해 판독되는 것으로서의 전체 아트카드 픽셀 데이터가 유지된다면 메모리(33)의 8MB 안으로 프로세스를 맞추는 것은 불가능함을 보여준다. 이러한 이유 대문에, 선형 CCD의 판독, 비트맵(bitmap)의 디코딩, 및 언-비트맵(un-bitmap) 프로세스는 실시간(아트카드(9)가 선형 CCD(34)을 지나 움직이는 동안)에서 발생하여야 하며, 이러한 프로세스들은 전체 데이터 저장장치를 이용할 필요 없이 효과적으로 동작하여야 한다.
아트카드가 삽입되는 경우, 그 이전에 저장된 프린트 이미지 및 확대된 사진 이미지는 무효가 된다. 새로운 아트카드(9)는 현재 캡쳐된 사진 이미지에 기초한 새로운 이미지를 창출하기 위한 지시들을 포함한다. 구(舊) 사진 이미지는 무효로 되고, 판독 프로세스 동안에 삭제된 메모리로서 이용될 수 있는 5MB 이상을 남기면서, 확대된 사진 이미지 및 이미지 피라미드를 유지하는 영역도 무효화 된다. 정확하게 말하자면, 아트카드의 열(列) 데이터가 기록되어지는 1MB 영역은, 최종 리드 솔로몬 디코드가 발생하는 시간까지에 있어서의 아트카드 판독 프로세스 동안에, 삭제된 데이터로서 이용될 수 있으며, 그 1MB 영역은 다시 공백으로 남는 것이다. 여기에서 설명되는 판독 프로세스는 초과 1 MB 영역을 이용하지 않는다(데이터의 최종 목적지는 제외한다).
언스크램블(unscrambling) 프로세스는, 언스크램블하는 것이 적소에 발생될 수 없기 때문에 두 개의 메모리의 2MB 영역들의 세트를 필요로 한다는 것이 유의되어져야 한다. 다행히 5MB 삭제 영역은 이 프로세스에 있어서 충분한 공간을 포함하고 있다.
이제 도 37로 넘어가면, 아트카드 데이터를 디코드하기 위하여 필요한 스템들의 플로우차트(220)가 도시되어 있다. 이들 단계들은 아트카드(221) 내에서의 판독을 포함하며, 인코드되고 XOR된 대응 변조 비트맵 데이터(223)를 생산하기 위하여 판독 데이터를 디코딩한다. 다음 바둑판 모양으로 늘어놓아진 XOR이 인코드되는 변조 데이터(224)를 생산하기 위해 데이터에 적용된다. 그 다음에 이 데이터는, 데이터가 원본 열(烈) 데이터(226)를 생산하기 위한 리드 솔로몬 디코딩에 제공되기 앞에서, 데이터(225)를 생산하기 위하여 언스크램블된다(227). 선택적인 것으로서, 언스크램블 및 XOR 프로세스는, 데이터의 개별적인 경로를 요구하지 않기 때문에, 함께 발생할 수 있다. 위 단계들의 각각은 이하에서 더 상세하게 토론될 것이다. 도 37에 대한 앞서서의 참조와 같이, 아트캠 인터페이스는, 따라서, 첫 번째 2개 시간임계(time-critical)인 4개의 단계들을 가지며, 픽셀 데이터가 CCD로부터 판독되고 있는 동안에 발생하여야 한다:
단계 1 아트카드상의 데이터 영역을 검출
단계 2. CCD 픽셀들에 기초한 아트카드로부터의 비트 패턴의 검출 및 바이트들로서의 기록
단계 3. 바이트-패턴에 대한 언스크램블 및 XOR
단계 4. 데이터 디코드(리드 솔로몬 디코드)
상기 4개의 단계들에 대한 보다 상세한 설명은 아래와 같다:
단계 1. 아트카드(9)가 CCD를 지나가면서 이동할 때, AI는 아트카드상의 특정한 타깃들을 데이터 영역의 좌측으로 착실하게 검출하는 것에 의하여 데이터 영역의 시작을 검출하여야 한다. 만일 이들이 검출될 수 없다면, 그 카드는 유효하지 않은 것으로 표시된다. 검출은, 아트카드(9)가 CCD(34)를 지나 이동하는 동안 에 실시간으로 행해져야한다.
필요하다면, 로테이션 인베리언스(rotation invariance)가 제공될 수 있다. 이 경우에, 타깃들은 아트카드의 우측 사이드 상에서 반복되지만, 상부 코너 대신에 하부 우측 코너에 관계된다. 이러한 방법에서, 타깃들은, 만일 카드가 "잘못된 방법"으로 삽입되어진다면, 올바른 방위에 이르게 한다.
단계 2. 데이터 영역이 한 번 결정되어지게 되면, 메인 판독 프로세스 시작되고, CCD로부터 “아트카드 데이터 창문(window)”안으로 픽셀 데이터를 위치시키며, 이 창문을 통해서 비트들을 검출하고, 검출된 비트들을 바이트로 조합하며, DRAM 안으로 바이트-이미지를 구성한다. 이것은 아트카드가 CCD를 지나 움직이는 동안에 모두 행해져야 한다.
단계 3. 모든 픽셀들이 아트카드 데이터 영역들로부터 판독되어지게 되자마자, 아트카드 모터(37)는 중지될 수 있고, 바이트 이미지들은 해도되며 XOR된다. 비록 실시간으로 수행될 필요는 없으나, 그 프로세스는 조작하는 사람을 기분 나쁘게 하지 않을 정도로 충분히 빠르게 되어야 한다. 프로세스는 변조 비트-이미지의 2MB를 가져야 하며, 그리고 언스크램블되고/XOR된 비트-이미지를 개별 2MB 이미지로 기록하여야 한다.
단계 4. 아트카드 판독 프로세서의 마지막 단계는 리드 솔로몬 디코딩 프로세스이며, 2MB 비트-이미지는 1MB의 유효 아트카드 E이터 영역으로 디코드된다. 이 또한 실시간으로 수행될 필요는 없으나, 조작하는 사람과 관련하여 빠르게 디코드할 필요는 있다. 만일 디코드 프로세스가 유효하면, 카드는 유효한 것으로서 표 시된다. 만일 디코드가 실패하게 되면, 비트-이미지 내에서의 데이터 카피가 디코드되기 위해 시도되며, 성공할 때까지 또는 비트 이미지에서 데이터의 카피가미지가 더 이상 남아 있지 않을 때까지, 이 프로세스가 반복적으로 행해진다.
상기 네 개의 단계 프로세스는 DRAM의 4.5MB를 필요로 한다. 2MB는 단계 2 출력을 위해 지정되며, 0.5MB는 단계 1, 2 동안에 데이터를 스크레치(scratch)하기 위해 지정되고, 남아있는 2MB는 행 당 4725 바이트에서 440 개의 행들 이상을 유지할 수 있다. 실제적으로 판독되는 픽셀은 단계 1의 알고리즘에 앞서는 몇 개의 행이 있으며, 가장 안 좋은 경우에 있어서, 대략 단계 2 뒤의 180개의 행들이 있으나, 이것들은 상기 440 개의 행 제한 이내로서 안전하다.
각 단계의 사실적인 동작에 대한 보다 상세한 설명이 이제 제공될 것이다.
단계 1- 아트카드상의 데이터 영역을 검출
이 단계는 아트캠(9) 상의 데이터 영역의 왼쪽 측면을 강하게 검출하는 것과 관련된다. 데이터 영역의 정확한 검출은 카드의 왼쪽 측면상에 프린트된 특별한 타깃들의 정확한 검출에 의하여 달성된다. 이들 타깃들은 심지어 1도까지 회전되더라도 쉽게 검출되도록 특별하게 디자인되어 있다.
도 38로 돌아가서, 아트카드(9)의 왼쪽 측면의 확대가 도시되어 있다. 이 카드의 상기 측면은 이 16개의 대역(241)로 나뉘어져 있으며, 각 대역의 중앙에 위치되어 있는 타깃(특히 241)들이 구비되어 있다. 이 대역들은 논리적이며, 즉 각 개별적인 대역들에 그려진 라인은 존재하지 않는다. 도 39로 넘어가면, 한 개의 타깃(241)이 도시되어 있다. 상기 타깃(241)은, 한 개의 흰색 도트를 포함하고 있는 프린트된 검은 사각구획이다. 이러한 디자인은 가능한 한 많은 타깃(241)들을 우선 검출하는 것이고, 다음에 한 개의 논리적인 선형 안으로 적어도 8개의 검출된 흰색 도트 위치들을 결합하는 것이다. 만일 이와 같이 행해진다면, 데이터 영영(243)의 시작은 이 논리적인 라인들로부터 고정된 거리에 있게 된다. 만일 그것이 실행되지 않으면, 그때 카드는 유효하지 않은 것으로서 거절된다.
도 38에서 도시되어 있는 바와 같이, 카드(9)의 높이는 3150 도트들이고, 타깃(Target0)(241)은, 데이터 영역의 상부 좌측 코너(244)로부터 떨어진 24개의 도트들의 고정 거리에 위치되며, 이는, 그것이 카드의 마지막 픽셀 영역 내에서 타깃이 가지고 있는 않은 192개 도트들(576 픽셀들)의 첫 번째 16개 동일한 사이즈의 영역들 내에 잘 내려오도록 하기 위함이다. 타깃(241)은 검출하기 쉽게 충분히 큰 사이즈여야 하지만, 카드가 1도 회전되는 경우 상기 영역들의 높이를 벗어나지 않을 정도로 충분히 작아야 한다. 타깃의 알맞은 크기는 흰색 도트(242)를 가지는 31×31 도트(93×93 감지된 픽셀들)의 검은색 사각구획(241)이다.
1도의 가장 나쁜 회전에서, 1 행 쉬프트는 각 57 픽셀들마다 발생한다. 따라서 590개의 픽셀 크기의 대역에 있어서, 우리는 꼭대기나 바닥에 우리의 심볼의 어느 부분도 또는 상기 대역의 어느 부분도 위치할 수 없거나 또는 상기 카드가 회전된 매우 나쁜 경우에 그것들은 CCD 판독 시간에 부적당한 대역 안에서 검출될 수 있을 것이다.
따라서, 만일 직사각형의 검은 부분이 57 픽셀들의 높이(19도트들)라면 우리는 적어도 9.5 검은 픽셀들은 CCD에 의해서 동일한 행 안으로 판독될 것이라고 확 신할 수 있다(매우 나쁜 경우에서 픽셀들의 절반은 하나의 행에 있고 나머지 절반은 다음의 행에 있다). 동일한 행 안에서 적어도 10개의 검은 도트들을이 확실하게 판독되기 위해서, 우리는 20 도트들의 높이를 가져야 한다. 검은 색 도트들의 시작의 가장자리상에 잘못된 검출을 위한 여유를 제공하기 위해서, 타깃들의 로컬 좌표 (15, 15)에 흰색 도트의 다른 측면상에 15개를 가지면서, 우리는 도트들의 수를 31까지 증가시킨다. 31도트들은 91 픽셀들이고, 대부분 행 안에서 3개의 픽셀 쉬프트를 허용하며, 이는 576 픽셀 대역 안의 범위 안에서의 용이한 것이다.
그러므로 각 타깃은 각 다음과 같은 조합을 갖는 31×31 도트들(93×93 픽셀들)의 블록이다:
각 31개의 검은 색 도트들의 15개의 행들(93 픽셀들의 행폭에서 45 픽셀).
1개의 흰색 도트(3픽셀들)과 그 다음의 15개 검은 색 도트들(15 픽셀들)이 뒤따르게 되는 각 15개의 검은 색 도트들(45 픽셀들)의 1개의 행들.
각 31개의 검은 색 도트들의 15개의 행들(93 픽셀들의 행폭에서 45 픽셀).
타깃들의 검출
타깃들은, 도트들을 검출하는 것이라기보다는 동시에 한 행을 검출하는 것으로서, 픽셀들의 행들을 판독하는 것에 의해 검출된다. 타깃의 좌측을 만들기 위하여 인접하는 많은 수의 검은 픽셀들로 구성되는 다수의 행들을 위하여 주어진 대역 내를 바라보는 것이 필요하다. 다음으로 검은 행들의 중심부 내의 흰색 영역과, 그리고 마지막으로 타겟 중심부의 왼쪽에 검은 행들을 보게 될 것이다.
8개의 캐쉬 라인들이 픽셀의 판독을 잘 수행하는 데 필요로 된다. 각 논리 적 판독은 4개의 서브-판독들을 거쳐 4개의 캐쉬 라인들을 채우며, 반면에 다른 4개의 캐쉬 라인들은 이용되지고 있다. 이것은 이용 가능한 DRAM 대역폭의 13%까지 효과적으로 이용할 수 있다.
도 40에서 나타나 있는 바와 같이, 상기 타깃들을 검출하기 위한 검출 메커니즘 FIFO는, 필터(245), 런 랭스(run-length) 인코더(246), 및 램던 액세스를 위한 정상의 3개 요소들(S1, S2, S3)의 특별한 배선을 필요로 하는 FIFO(247)를 이용한다.
입력 픽셀들의 행들은, 모든 타깃들이 발견될 때가지 또는 특정된 다수의 행들이 프로세스될 때까지, 동시에 하나씩 프로세스된다. 행을 프로세스하기 위하여, 픽셀들은 DRAM에서 판독되고, 0 또는 1을 검출하기 위한 필터(245)를 통해 건네지며, 그 다음에는 런 랭스 엔코드(246)된다. 비트 값 및 동일 값의 접촉되는 비트들의 수는 FIFO(247) 안에 위치된다. FIFO(249)의 각 엔트리는 8비트들이며, 런-랭스를 유지하기 위하여 7비트 250, 검출된 비트의 값을 유지하기 위하여는 1비트 249이다.
런 랭스 인코더(246)는 단지 576 픽셀(192 도트) 영역 내에서 인접하는 픽셀들만 인코드한다.
상기 FIFO(247) 내의 톱 3개 요소들은 랜덤한 순서로 252 액세스될 수 있다. 이들 엔트리들의 런 랭스(픽셀들 내)(run length, 실행길이)는 3개의 값들 안으로 필터된다: 쇼트, 미디엄, 롱은 다음 표와 관계된다:
Short | 흰색 도트를 검출하는 데 이용됨 | RunLength<16 |
Medium | 타깃의 중심부 안에서의 아래의 흰색 도트 또는 위의 검은 색의 도트의 실행을 검출하는 데 이용. | 16<=RunLength<48 |
Long | 타겟의 중심부 도트의 좌측 및 우측으로의 검은색 실행 길이들을 검출하는 데 이용 | RunLength>=48 |
FIFO(247) 내의 톱 세 개의 엔트리들을 살펴보면, 3개의 특별한 케이스가 존재한다:
케이스 1 | S1 = white long S2 = black long S3 = white medium/long | 우리는 흰색 중앙 도트의 왼쪽 또는 오른쪽으로 타깃의 검은색 행을 검출하였다. |
케이스 2 | S1 = white long S2 = black medium S3 = white short 이전 8개의 행들은 케이스1이었다. | 만일 우리가 케이스1들의 일련의 행들을 프로세싱하여 왔다면, 그때 우리는 아마도 이 행에서 흰색 도트를 검출할 것이다. 우리는 다음 엔트리가 검은 색이 될 것이지만(또는 흰색 S3 엔트리내에 포함될 것이다), 다수의 검은 색 픽셀들이 이 케이스의 문제라는 것을 알고 있다. 다음 FIFO가 진전된 후에 체크하는 것에 의해서 확인하는 것이 필요하다. |
케이스 3 | 이전 = 케이스 2 S3 = black med | 우리는 흰색 도트 부분을 검출했다. 우리는 이들 중 대략 3, 그 다음으로 케이스1의 행들 이상의 것을 기대한다. |
바람직하게도, 영역 대역 당 다음 정보가 유지된다:
TargetDetected | 1 비트 |
BlackDetectCount | 4 비트 |
WhiteDetectCount | 3 비트 |
PrevColumnStartPixel | 15 비트 |
TargetColumn ordinate | 16비트 (15:1) |
TargetRow ordinate | 16 비트(15:1) |
TOTAL | 7 바이트(쉬운 어드레싱을 위해 8 바이트까지 올라갈 수 있다. |
전체 7 바이트들이 주어진다. 만일 전체가 8 바이트가 된다면 어드레스 생 성이 보다 쉬워질 것이다. 그러므로 16 엔트리들은 16*8 = 128 바이트들를 필요로 하며, 이것은 4 캐쉬 라인들에 적합하다. 상기 어드레스 범위들은, 다른 단계들이 남아있는 4MB 데이터 영역을 이용하기 때문에, 스크래치 0.5MB DRAM 영역 안에 있어야 한다.
주어진 픽셀 행에 프로세스가 시작되는 때, 레지스터 값 S2StartPixel(254)는 0으로 리세트된다. S2로부터 S1까지의 FIFO 진전 내에서의 엔트리들에 따라서, 그들은 또한 존재하는 S2StartPixel 값에 255가 더해지고, S2 안에서 현재 정의된 실행의 정확한 픽셀 위치가 제공된다. FIFO 내 중요한 3 가지 경우의 각각을 보게 되면, S2StartPixel은 타깃의 검은 영역의 시작을 결정하는 데 이용될 수 있으며(케이스 1 및 2), 타깃의 중앙부의 흰색 도트들의 시작을 또한 결정하는 데 이용될 수 있다(케이스 3).
행들을 프로세싱하기 위한 알고리즘은 다음과 같을 수 있다:
1 | TargetDetected[0-15]:= 0 BlackDetectCount[0-15]:= 0 WhiteDetectCount[0-15]:= 0 TargetRow[0-15]:= 0 TargetColoumn[0-15]:= 0 PrevColStarPixel[0-15]:= 0 CurrentColumn:=0 |
2 | Do ProcessColumn |
3 | CurrentColumn++ |
4 | If(CurrentColumn<=LastValidColumn) Goto 2 |
행을 프로세싱하는(프로세스 행) 데 관련되는 단계들은 다음과 같다:
1 | S2StartPixel:= 0 FIFO:= 0 BlackDetectCount:= 0 WhiteDetectCount:= 0 ThisColumnDetected:= FALSE PrevCaseWasCase2:= FALSE |
2 | If(!TargetDetected[Target])&(!ColumnDetected[Target]) ProcessCases EndIf |
3 | PreCaseWasCase2:= Case= 2 |
4 | Advance FIFO |
상기 3 케이스들의 각각의 프로세싱은 다음과 같다:
케이스 1:
BlackDetectCount[target]<8 OR WhiteDetectCount[Target]=0 | Δ:= ABS(StartPixel-PrevColStartPixel[Target]) If(0<=Δ<2) BlackDetectCount[Target]++(max value=8) Else BlackDetectCount[Target]:=1 WhiteDetectCount[Target]:=0 EndIf PrevColStartPixel[Target]:=S2StartPixel ColumnDetected[Target]:= TRUE BitDetected=1 |
BlackDetectCount[target]>=8 WhiteDetectCount[Target]!=0 | PrevColStartPixel[Target]:= S2StartPixel ColumnDetected[Target]:= TRUE BitDetected = 1 TargetDetected[Target]:=TRUE TargetColumn[Target]:= CurrentColumn-8- (WhiteDetectCount[Target]/2) |
케이스 2 :
동일한 케이스 3을 위한 'PrevCaseWasCase2' 플래그를 세팅하기 위한 것을 제외하고는 특별한 프로세싱이 기록되지 않는다(위에서 설명된 행에 대한 프로세싱의 단계 3을 참조하라).
케이스 3:
PrevCaseWasCase2 = TRUE BlackDetectCount[Target]>= 8 WhiteDetectCount= 1 | If (WhiteDetectCount[Target]<2) TargetRow[Target] = S2StartPixel+(SeRunLength/2) EndIf Δ:=ABS(S2StartPixel[Target]) If(0<=Δ<2) WhiteDetectCount[Target]++ Else WhiteDetectCount[Target]:= 1 EndIf PrevColStartPixel[Target]:=S2StartPixel ThisColumnDetected:= TRUE BitDetected= 0 |
주어진 행에 대한 프로세싱의 끝에서, 타깃 검출을 위한 행들의 최대 수와 현재의 행과의 비교가 만들어진다. 만일 행들의 수가 초과된다면, 얼마나 많은 타깃들이 발견되었는지 체크할 필요가 있다. 만일 8개 보다 적은 수로 발견되었다면, 그 카드는 유효하지 않은 것으로 고려된다.
타깃들에 대한 프로세스(Process targets)
타깃들이 검출된 후에, 그들은 프로세스되어야 한다. 모든 타깃들이 이용될 수 있거나 단순히 일부만 이용될 수 있도 있다. 또한 어떤 타깃들은 잘못 검출될 수도 있다.
프로세싱의 단계는 가능한 한 많은 타깃들의 중앙을 통해서 지나가는 수학적인 라인을 결정하는 것이다. 라인들이 통해서 지나가는 타깃들이 많으면 많을수록, 확실히 더 많은 타깃 위치가 발견된다. 한계는 8 타깃들로 세트된다. 만일 라인이 적어도 8개의 타깃들을 통해서 지나간다면, 그때 그것은 오른쪽으로 보내진다.
그렇게 하는 시간이 존재하기 때문에(밑을 참조) 브루트 포스(brute-force) 그러나 간단한 접근을 가지는 것은 모두 오른쪽이며, 복잡성을 낮추는 것은 테스트를 보다 수월하게 만든다. 타깃 0과 1 사이의 라인을 결정하는 것이 필요하며(만일 두 타깃들이 유효한 것으로 고려된다면) 그때 이 라인상으로 얼마나 많은 타깃들이 흐르는지 결정하는 것이 필요하다. 다음으로 우리는 타깃 0과 2 사이를 결정하며, 상기 프로세스를 반복한다. 결과적으로 우리는 타깃 1과 2, 1과 3 등의 라인을 위하여 동일한 것을 수행하며, 마지막으로 타깃 14와 타깃 15 사이의 라인을 위한 프로세스를 수행한다. 모든 타깃들이 발견되었다고 가정하면서, 우리는 계산의 15+14+13+...= 90 세트들을 수행할 필요가 있으며(계산들의 각 세트는 16 테스트들 = 1440인 사실적인 계산들을 필요로 하기 때문에), 그리고 라인을 따라 발견되는 타깃들의 최대 숫자를 가지는 라인을 선택할 필요가 있다. 타깃 위치를 위한 알고리즘은 다음과 같이 될 수 있다.
TargetA:= 0
MaxFound:= 0
BestLine:= 0
While(TargetA<15)
If(TargetA is Valid)
TargetB:= TargetA+1
While(TargetB<= 15)
If(TargetB is valid)
CurrentLine:= line between TargetA and TargetB
TargetC:= 0;
While(TargetC<= 15)
If(TargetC valid AND TargetC on line AB)
TargetHit++
EndIf
If(TargetHit>MaxFound)
MaxFound:= TargetHit
BestLine:= CurrentLine
EndIf
TargetC++
EndWhile
EndIf
TargetB++
EndWhile
EndIf
TargetA++
EndWhile
If(MaxFound<8)
Card is Invalid
Else
Store expected centroids for rows based on BestLine
EndIf
위 알고리즘에 있어서, 도 34에 나타나 있는 바와 같이, 타깃 A(261) 및 타깃 B로부터 CurrentLine(260)을 결정하기 위하여 타깃들(261)(262)과 타깃A의 위치 사이의 Δrow(264) 및 Δcolumn(263)을 계산하는 것이 필요하다. 그때 Δrow 및 Δcolumn를 더하는 것에 의하여 타깃 0으로부터 타깃 1까지 이동하는 것이 가능하다. 타깃 N의 발견 위치(실제적으로 발견되었다면)는 라인상의 타깃 N의 계산된 기대위치와 비교될 수 있으며, 만일 그것이 인정될 수 있는 범위 내에 떨어진다면, 그때 타깃 N은 라인상 존재하는 것으로 결정될 수 있다.
Δrow 및 Δcolumn을 계산하기 위해서:
Δrow = (rowTargetA-rowTargetB)/(B-A)
Δcolumn = (columnTargetA-columnTargetB)/(B-A)
그 다음에 우리는 타깃0의 위치를 계산한다:
row = rowTargetA-(A*Δrow)
column = columnTargetA-(A*Δcolumn)
그리고 실제적인 rowTarget0 및 columnTarget0에 대한 (row, column)을 비교한다. 기대되는 한 개의 타깃으로부터 다음으로 이동하기 위해서(예컨대 타깃0에서 타깃1 로), 우리는 간단하게 Δrow 및 Δcolumn을 각각 row와 column에 덧셈할 수 있다. 각 타깃이 라인 상에 있는지를 체크하기 위하여, 우리는 타깃0의 기대위치를 계산하여야 하며, 그 다음에 각 타깃 좌표에 있어서 하나를 더하고 하나를 비교하는 것을 수행한다.
최대 90개 라인들에 대한 모두 16개의 타깃들의 비교의 목적에서, 그 결과는 유효한 타깃들을 통하는 베스트 라인 것이다. 만일 라인이 적어도 8개의 타깃들(특히,MaxFound>=8)을 통해서 지나게 되면, 라인을 형성하는 데 충분한 타깃들이 발견되었다고 말할 수 있고, 그러므로 카드는 프로세스될 수 있다. 만일 베스트 라인이 8보다 작은 라인을 통해서 지나가게 되면, 카드는 유효하지 않다고 고려된다.
뒤따르는 알고리즘은 Δrow 및 Δcolumn를 계산하기 위한 180 나눔, 타겟0의 위치를 계산하기 위한 180 곱셈/덧셈을 가지며, 그 다음에 2880 덧셈/비교를 갖는다. 우리가 이 프로세싱을 수행하는 데 갖는 시간은 픽셀 데이터의 36행들 판독하는 데 걸리는 시간 = 3,374,892ns이다. 분할보다 덧셈이 시간이 덜 걸린다는 사실을 밝히지 않는다 하더라도, 3,374,892ns에서 3240 수학적인 계산들이 수행될 필요가 있다. 이것은 대략 하나의 계산당 1040ns 또는 104 사이클들이다. CPU는 따라서, 다지인의 복잡성을 경감하면서, 타깃들의 전체 프로세싱을 안전하게 수행할 수 있다.
데이터 테두리 경계 및 클록마크에 기초한 센트로이드 업데이트(Update centroids based on data edge border and clocknarks)
스텝 0: 데이터 영역의 위치를 알아 내기
타깃 0(도 138의 241)으로부터 데이터 영역의 상부 좌측 경계로의 행들과 열들에 있어서의 고정 거리가 미리 결정되며, 그 다음으로 수직 클록마크들(276)까지 그 이상의 1 도트 행에서의 거리가 미리 결정된다. 그래서 우리는, 앞에서 서술된 것으로서 타깃 0에 있어서의 기대 위치 또는 센트로이드(Centroid)를 계산하기 위하여 타깃A, Δrow 및 Δcolumn를 이용한다.
고정된 픽셀은 타깃 0으로부터 데이터까지 옵센(offset)된 고정 픽셀이 타깃들 사이의 거리에 관련되기 때문에(타깃들 사이에서는 192 도트들, 타깃 0과 데이터 영역(243) 사이에서는 24 도트들), 간단히 Δrow/8을 타깃 0의 중심(센트로이드) 행 좌표에 더한다(도트의 가로세로의 영상비(aspect ratio)는 1:1). 그러므로 상부 좌표는 다음과 같이 정의될 수 있다:
(columnDotColunnTop= columnTarget0+(Δrow/8)
(rowDotColunnTop=rowTarget0+(Δcolumn/8)
다음 Δrow 및 Δcolumn는 타깃들 사이의 다수의 도트들에 의해 픽셀들을 나누는 것에 의해 하나의 행 내의 도트들 사이(타깃들 사이를 대신해서)의 다수의 픽셀들을 주기 위하여 업데이트된다:
Δrow = Δrow/192
Δcolumn = Δcolumn/192
우리는 또한 currentColumn 레지스터를 -1로 세트시키고, 단계 2 후, 단계 2가 시작될 때, 상기 currentColumn 레지스터는 -1부터 0까지 증가할 것이다.
스텝 1: 초기 센트로이드 델타(Δ) 및 비트 이력을 기록해내기
이것은 단계 2에 필요한 셋업정보의 기록을 수반한다.
이것은 각 열에 있어서의 모든 Δrow 및 Δcolumn 엔트리들 및 비트 이력에 0들을 기록하는 것에 의해 달성된다. 비트 이력은, 클록 마크 행(276)의 좌측이 행(277)과의 경계이고, 그 전에는, 흰색 영역인 것으로 밝혀지기 때문에, 실제적으로 예상된 비트 이력이다. 따라서 비트 이력은 011, 010, 011, 010 등이다.
스텝 2: 실제적인 픽셀들의 기록에 기초하여 센트로이드들을 업데이트하기
비트 이력은 예상된 클록 마크들과 데이터 경계에 따라서 스텝 1에서 셋업된다. 각 도트 열에 대한 실제적인 센트로이드들은 실제적인 픽셀 값들에 대해 예상된 데이터를 비교함으로써 더욱 정확하게 세트될 수 있다(그들은 0으로 초기화되었다). 메커니즘을 업데이트하는 센트로이드는 단계 2의 스텝 3을 간단하게 수행함으로써 달성된다.
단계 2 - 픽셀들 판독에 기초한 아트카드로부터의 비트 패턴의 검출 및 바이트들로서의 기록.
아트카드(9)로부터의 도트는 3 개의 행들에 대해 최소 9개의 감지된 픽셀들이 나타나도록 되는 것을 필요로 하기 때문에, 매 감지된 픽셀 행 마다 도트 검출 계산들을 수행하는 것은 별로 이익이 되지 못한다. 평균 도트 발생에 대한 프로세싱에 있어 필요로 되는 시간을 평균내고, 그러므로 가장 많은 이용할 수 있는 프로세싱 시간을 만들어 내는 것이 보다 좋다. 이것은, 제 시간 안에 아트카드(9)로부 터 도트들의 행에 대한 프로세싱이, 아트카드로부터 데이터의 3 행들을 판독할 수 있도록 해 준다. 비록 가장 많은 경우가 도트를 나타내는 데 4 행들을 가지게 되더라도, 4th 행은 한 도트의 마지막 행이 되며 그리고 다음 도트의 최초 행이 되는 것이다. 따라서 프로세싱은 단지 3행들로 제한될 것이다.
CCD로부터의 픽셀들이 이용할 수 있는 시간의 13% 안에서 DRAM으로 기록됨에 따라서, 시간의 83%는 도트들의 1행의 프로세싱을 위해 이용가능하다. 즉, (93,747*3)의 83%=282,241ns의 83%=233,430ns이다.
이용가능한 시간 안에서, 3150 도트들을 검출하고, 메모리의 열 데이터 영역 내로 그들의 비트 값들을 기록하는 것이 필요하다.
따라서 상기 프로세싱은 다음과 같은 스텝들을 필요로 한다:
아트카드 상에 있는 도트들의 각 행들에 있어서:
스텝 0: 다음 도트 행으로의 진행
스텝 1: 아트카드 도트 행의 상부 및 저부의 검출(클록 마크들을 체크)
스텝 2: 비트들을 검출하고 그것들을 적절하게 저장하면서, 도트 행에 대한 프로세스
스텝 3: 센트로이들을 업데이트
우리가 아트카드의 논리적인 도트 행들을 프로세스하고 있고, 이들은 165 픽셀들 이상 옮겨질 수(shift) 있기 때문에, 가장 나쁜 경우는 적어도 165 행들이 DRAM 내로 판독되어질 때까지 첫 번째 행을 프로세스 할 수 없다는 것이다. 단계 2는 그러므로 판독 프로세스가 종결된 후에 동일양의 시간을 끝맺게 될 것이다. 가장 나쁜 경우의 시간은 165*93,747ns = 15,468,255ns 또는 0.015 초이다.
스텝 0: 다음 도트 행으로의 진행
도트들의 다음 행으로의 진행을 위하여, 우리는 행의 상부에서 도트의 센트로이드를 우리에게 제공해 주는 dotColumnTop에 Δrow 및 Δcolumn를 덧셈한다. 우리가 이를 행하는 첫 번째 시간, 우리는 현재 행 276을 비트 이미지 데이터 영역의 좌측으로 표시하는 시계에 있는 것이며, 따라서 우리는 데이터의 첫 번째 행으로 나아간다. Δrow 및 Δcolumn가 행 안의 도트들 사이의 거리를 나타내기 때문에, 도트 행들 사이의 이동을 위하여 columndotColumnTop에 Δrow를 rowdotColumnTop에 Δcolumn을 더하는 것이 필요하다.
열 수(column number)가 프로세스 되는 것의 트랙을 유지하기 위하여, 행수는 CurrentColumn라 불리는 레지스터안에 기록되어진다. 증가되는 첫 번째 시간에 있어서, 그것은 -1로부터 0으로 증가된다(단계 1의 단계 0을 참조). 상기 CurrentColumn 레지스터는 언제 판독 프로세스가 종료되는지(언제 maxColumns에 도달하는지)를 결정하고, 또한 8비트들 모두가 바이트에 기록되자마자(모든 8도트 행들) 바이트 정보의 다음 행으로의 DataOut Point로 진전되는 데 이용된다. 보다 낮은 3 비트들은 어떤 바이트들이 현재의 바이트 안에 이르게 되는지를 결정한다. 그것은 전체 행들을 위해 기록되는 동일한 비트가 될 것이다.
스텝 1: 아트카드 도트 행의 상부 및 저부의 검출
아트카드로부터 도트 행을 프로세스하기 위하여, 행의 상부 및 저부를 검출 하는 것이 필요하다. 행은 행의 상부와 저부 사이의 일선형 라인을 형성하여 한다(로컬 워핑 등을 제외하고는). 최초에 dotColumnTop은 클록 마크 행(276)을 가리킨다. 우리는 예상된 값을 간단하게 토글(toggle)시키며, 그것을 비트 이력 안으로 기록해 내고, 단계 2로 이동시키는데, 그 첫 번째 작업은 행의 첫 번째 데이터 도트에 도달하기 위해서 dotColumnTop에 Δrow 및 Δcolumn를 더하는 것이 될 것이다.
스텝 2: 아트카드의 도트 행에 대한 프로세스
픽셀 좌표들 내의 행의 상부 및 저부의 센트로이드가 주어질 때, 워핑 등에 기인한 가능한 작은 변동을 가지면서, 행은 그들 사이에 일선형의 라인을 형성을 형성해야 한다.
상기 프로세싱이 행의 상부(상부 센트로이드 좌표)에서 시작하고 행의 저부로 하강하게 됨을 가정한다면, 순차적인 기대 도트 센트로이드들은 다음과 같이 주어진다:
rownext = row+Δrow
columnnext= column+Δcolumn
이것은 우리에게 행의 다음 도트를 위한 예상된 센트로이드의 어드레스를 제공한다. 그러나 로컬 워핑 및 에러를 설명하기 위하여 우리는 주어진 열 안에서 도트를 발견한 마지막 시간을 기초로 하여 또 다른 Δrow 및 Δcolumn를 더한다. 이 방법에서 우리는 행의 상부를 저부에 결합하는 선형 라인으로부터 어떤 비율의 최대 드리프트 안으로 모이는 작은 드리프트(drift)들을 설명할 수 있다.
따라서 우리는 각 열 마다 두 개의 값들을 유지하지만, 열 이력(row history)이 이 단계의 스텝 3에서 이용되기 때문에 개별적인 표들 안에 그것들을 저장한다.
*Δrow 및 Δcolumn (2 @ 4 비트들 각각 = 1바이트)
* 열 이력(열 당 3비트들, 2개의 열이 바이트 당 저장된다)
각 열에 있어서 우리는 센트로이드로의 변화를 결정하기 위하여 Δrow 및 Δcolumn를 판독할 필요가 있다. 상기 판독 프로세스는 대역폭의 5% 및 두 개의 캐쉬라인들을 가진다:
76*(3150/32)+2*3150 = 13,824ns = 대역폭의 5%
일단 센트로이드가 결정되게 되면, 센트로이드 주변의 픽셀들은 도트의 상태를 검출하기 위해 조사될 필요가 있으며, 그러부터 비트의 값이 나오게 된다. 가장 나쁜 경우에 있어서 도트는 4×4 픽셀 영역을 커버한다. 그러나 우리가 도트의 해상도를 3 배로 샘플링하고 있는 사실 덕분에, 다수의 픽셀들이 도트의 상태를 검출하는 데 필요로 되고, 따라서 비트 값은 이보다 훨씬 적은 값이 된다. 우리는 단지 한번에 픽셀 행들의 3개의 행들에 액세스하는 것이 필요할 뿐이다.
1% 회전에 연유한 픽셀 드리프트의 가장 나쁜 경우에서, 센트로이드들은 매 57 픽셀 열들마다 1 행 쉬프트될 것이지만, 도트가 직경 내에 3개의 픽셀들이기 때문에, 주어진 행은 171개의 픽셀 열(3*57)들에 있어서 유효하게 될 것이다. 바이트는 2개의 픽셀들을 포함하고 있기 때문에, 각 버퍼된 판독 내에서 (4개의 캐쉬 라 인들) 유효한 다수의 바이트들은 86의 가장 나쁜 경우가 될 것이다(out of 128 read).
일단 비트들이 검출되게 되면, 곧 그것은 DRAM으로 기록될 것이다. 우리는 DRAM 지연을 최소화하기 위하여 인접하는 바이트들의 세트로서 8개의 행들로부터 비트들을 저장한다. 주어진 도트 행으로부터 모든 비트들이 데이터 바이트 내의 다음 비트 위치에 대응될 것이기 때문에, 우리는 상기 바이트에 있어서의 예전 값을 판독할 수 있으며, 새로운 비트 내로 쉬프트 및 OR, 그리고 바이트를 기록 회신할 수 있는 것이다.
판독/쉬프트&OR/기록 프로세스는 2개의 캐쉬 라인들을 필요로 한다.
업데이트할 때, 우리는 주어진 열에 있어서의 비트 이력을 판독하고 기록할 필요가 있다. 우리는, 한 개의 바이트내 2개의 이력의 열을 저장하도록 하면서, 단지 열 당 이력의 3비트들을 필요로 할 뿐이다. 판독/쉬프트&OR/기록 프로세스는 2개의 캐쉬 라인들을 필요로 한다.
비트 검출 및 저장에 필요한 전체 대역폭은 다음 표로 요약되어 진다.
판독 센트로이드 Δ | 5% |
픽셀데이터의 3 행 판독 | 19% |
바이트 버퍼 안으로 검출비트의 판독/기록 | 10% |
비트 이력의 판독/기록 | 5% |
TOTAL | 39% |
도트 검출
주어진 센트로이드의 도트의 값에 대한 검출 프로세스는 3개의 픽셀값들을 조사하고 참조표로부터 결과를 얻는 것에 의해 성취된다. 이 프로세스는 상당히 간단하며 도 42에 나타나 있다. 도트(290)는 대략 1.5 픽셀들의 반경을 갖는다. 따라서 픽셀 내의 센트로이드의 실제적인 위치에 상관없이, 센트로이드를 유지하는 픽셀(291)은 도트 값의 100%가 되어야 한다. 만일 센트로이드가 정확하게 픽셀(291)의 중앙에 존재하면, 그때 좌측으로의 픽셀들(294) 및 센트로이드 픽셀의 우측(295) 뿐만 아니라, 상부 픽셀(292) 및 하부 센트로인드 픽셀(293)들은 도트 값의 대부분을 포함할 것이다. 세트로이드가 픽셀(295)의 정 중앙으로부터 더 멀어지면 질수록, 중앙 픽셀들은 도트에 의하여 더욱 100% 적용범위에 가까워질 것이다.
도 42가 단지 중앙의 위와 아래에 따라 달라지는 센트로이드들을 보여주고 있을 지라도, 동일한 관계가 위의 센트로이드들 및 중앙의 오른쪽에 따르는 것에 효력이 분명하게 있다. 케이스 1에서, 센트로이드는 가운데 픽셀(295)의 정 주앙에 위치하여 있다. 중앙 픽셀(295)는 도트에 의하여 완전히 커버되며, 위, 아래, 오른쪽, 왼쪽 픽셀들은 또한 도트에 의하여 잘 커버되어진다. 케이스 2에서는, 센트로이드가 가운데 픽셀(291)의 중앙의 좌측에 있다. 중앙 픽셀은 역시 도트에 의해 완전히 커버되어 있으며, 중앙의 좌측으로의 픽셀(294)이 현재 도트에 의하여 완전히 커버되어 있다. 케이스 3에서는, 센트로이드가 가운데 픽셀(291)의 중앙 아래에 있다. 중앙 픽셀(291)은 도트(291)에 의하여 역시 완전히 커버되어 있으며, 픽셀의 중앙 아래도 현재 완전히 도트에 의하여 커버되어 있다. 중앙의 왼쪽(291) 및 오른쪽(295) 픽셀들은 여전히 도트에 의하여 잘 커버되어 있다. 케이스 4에서는, 센트로이드가 가운데 픽셀의 중앙 좌측 및 아래에 있다. 중앙 픽셀(291)이 도트에 의하여 여전히 완벽하게 커버되어 있으며, 중앙의 좌측 픽셀(294) 및 중앙의 아래 픽셀 모두 도트에 의하여 완전히 커버되어 있다.
센트로이드를 업데이트하기 위한 알고리즘은, 3개의 대표적인 픽셀들을 선택하고 그러므로 도트의 값을 결정하기 위하여 가운데 픽셀(291)의 중앙으로부터 센트로이드의 거리를 사용한다:
픽셀 1: 센트로이드를 포함한는 픽셀
픽셀 2: 만일 센트로이드의 X 좌표(행 값)이 < 1/2 이면 픽셀 1의 왼쪽 픽셀이고, 그렇지 않으면 픽셀 1의 오른쪽 픽셀.
픽셀 3: 만일 센트로이드의 Y 좌표(열 값)이< 1/2 이면 픽셀 1의 위쪽 픽셀이고, 그렇지 않으면 픽셀 1의 아래 픽셀.
도 43에 도시되어 있는 바와 같이, 각 픽셀의 값은 미리 계산된 참조표(31)로의 출력이다. 상기 3개의 픽셀들은 12 비트 참조표에 넣으며, 도트의 값을 지시하는 한 개의 비트를 생산한다--온 또는 오프(on or off). 상기 참조표(301)은 칩 정의 시간(chip definition time)에서 구성되고, 대략 500 게이트들 안으로 컴파일될 수 있다. 상기 참조표은, 중앙 픽셀(픽셀 1)이 더욱 무겁게 가중되는 것을 제외하고는, 간단한 문턱치 표(threshold table)가 될 수 있다.
스텝 3: 행내의 각 열에 있어서의 센트로이드 Δs의 업데이트
Δs 프로세싱의 디자인은 현재의 행 내 각 열에 있어서의 예상된 센트로이드 위치에서 "완벽한" 도트를 생성하기 위하여 이전의 비트 이력을 이용한는 것이다. 실제적인 픽셀들(CCD로부터)은 예상된 "완벽한" 픽셀들과 비교된다. 만일 두 개가 서로 대등하다면, 그때 실제적인 센트로이드 위치는 정확하게 예상된 위치 내에 존재할 것이 틀림없으며, 그러므로 센트로이드 Δs는 유효하게 되며 업데이트될 필요가 없을 것이다. 그렇지 않다면, 센트로이드 Δs를 변화시키는 프로세스가 예상된 센트로이드 위치를 실제적인 데이터에 가장 적합하도록 하기 위해서 필요하다. 새로운 센트로이드 Δs는 다음 행내에서 도트를 프로세싱하는 데 이용될 것이다.
센트로이드 Δs를 업데이트하는 것은 다음과 같은 이유로 단계 2로부터 순차적인 프로세스로서 행해진다:
디자인의 복잡성을 경감시키기 위하여, 그래서 단계 1의 단계 2로서 수행될 수 있으며, 그리고 그곳에는 DRAM 버퍼들의 재용을 허용할 수 있을 정도로 충분한 여분의 대역폭이 있다. 그리고,
센트로이드 업데이트를 위해 필요로 되는 모든 데이터가 특별한 파이프라이닝(pipelining) 없이 상기 프로세스의 시작에서 이용될 수 있음을 확실하게 하기 위하여.
센트로이드 Δ는 복잡성을 경감시키기 위한 각각 Δcolumn 및 Δrow으로서 프로세스된다.
비록 주어진 도트가 지름에 있어 3개의 픽셀들이라고 하여도, 4×4 픽셀 영역 내에서 발생할 것으로 보인다. 그러나 결과적으로 하나의 도트의 데두리는 다음 도트의 에지(edge)와 같은 픽셀 내에서 존재할 것이다. 이러한 이유로 인하여, 센트로이드 업데이트는 주어진 하나의 도트에 관한 간단한 정보 이상의 것을 필요로 한다.
도 44는 주어진 센트로이드(311)를 가진 이전 행으로부터의 하나의 도트(310)을 보여준다. 이 예에 있어서, 도트(310)는 4 개의 픽셀 칼럼들(312-315) 이상으로 Δ를 확장하고, 실제, 이전의 행의 도트의 부분이(좌표=(이전의 행, 현재의 열)) 현재의 열 상의 도트를 위하여 현재의 행을 기입한다. 만일 현재의 열과 행 내의 도트들이 흰색이었다면, 이전 행의 도트로부터(현재의 도트는 흰색이다)의 유일한 도트 정보가 있기 때문에, 우리는 이전의 도트 행으로부터 가장 오른편의 픽셀 행(314)이 낮은 값이 될 것으로 기대할 것이다. 이로부터 우리는 이 픽셀 행(315)내에 픽셀 값이 높으면 높을수록, 센트로이드는 보다 오른쪽으로 갈 것임을 알 수 있다. 물론, 만일 오른쪽의 도트가 또한 검은색이었다면, 하위 픽셀 (sub-pixel)의 정보를 얻을 수 없기 때문에 센트로이드를 조절할 수 없다. 동일한 내용이 도트 좌표들(PrevColumn, CurrentRow)에서 도트 왼쪽, 위, 아래에도 해당된다.
이로부터, 우리는 최대 5개의 픽셀 행들과 열들이 필요로 된다고 말할 수 있다. 행 및 열 센트로이드 Δs의 경우를 개별적으로 가지고, 그것들을 동일한 문제로 취급하며, 단지 90도 회전하는 것에 의해서 상기 상태를 단순화하는 것이 가능하다.
수평적인 경우에 있어서 먼저, 만일 예상된 픽셀들이 검출된 픽셀들에 대응되지 않는다면 행 센트로이드 Δs를 변화시키는 것이 필요하다. 비트 이력으로부터, 현재의 도트 행 내의 현재 열(Current Row)에 대해 발견된 비트들의 값, 이전의 도트 행, 그 이전의 이전의(previous-1) 도트 행은 알려져 있다. 예상된 센트 로이드 위치는 또한 알려져 있다. 이들 두 가지 정보를 이용할 때, "완벽하게" 판독될 20 비트로 예상되는 비트 패턴을 생성하는 것이 가능하다. 이 20비트 비트 패턴은 수평 차원을 가로지르는 5개의 픽셀들의 각각에 대하여 예상된 Δ 값을 나타낸다. 제 1 니블(nibble)은 가장 왼쪽의 도트의 가장 오른쪽의 픽셀을 나타낼 것이다. 다음 3 니블들은 이전 행으로부터 도트의 중심(310)을 가로지르는 3 픽셀들을 나타내며, 마지막 니블은 가장 오른쪽 니블(현재 행으로부터)의 가장 왼쪽 픽셀(317)이 될 것이다.
예상된 센트로이드가 픽셀의 중앙에 있다면, 우리는 다음 표에 기초한 20 비트 패턴을 예상할 수 있다.
비트 이력 | 예상된 픽셀들 |
000 001 010 011 100 101 110 111 | 00000 0000D 0DFD0 0DFDD D0000 D000D DDFD0 DDFDD |
중앙 도트의 좌측 및 우측의 픽셀들은 비트가 0이었는지 1이었는지에 따라서 각각 0 또는 D이다. 상기 중앙 세 개의 픽셀들은 비트가 0이었는지 1이었는지에 따라서 각각 000 또는 DFD이다. 이들 값들은 주어진 픽셀을 위하여 도트에 의해 가져진 물리적인 영역에 기초한다. 픽셀의 정확한 중앙으로부터 센트로이드의 거리에 따라서, 우리는 약간 쉬프트된 데이터를 예상할 것이며, 이는 단지 중앙 픽셀의 어느 한 측면 픽셀에 영향을 미칠 것이다. 16개의 가능성이 있기 때문에, 상기 중앙으로부터의 거리를 16으로 나누는 것이 가능하고 예상된 픽셀들을 쉬프트하는 양 을 이용하는 것이 가능하다.
일단 20 비트 5개 픽셀 예상 값이 결정되면, 실제적인 픽셀들 판독과 비교될 수 있다. 이것은 픽셀 원칙에 의하여 어느 한 픽셀상에서 판독된 실제적인 픽셀로부터 예상된 픽셀들을 빼는 것에 의하여 프로세스 될 수 있으며, 마지막으로 예상된 Δ값들로부터 거리를 얻기 위하여 그 차이들을 덧셈을 하는 것이다.
도 45는 픽셀 차이(327)를 생산하기 위하여 중앙 픽셀 입력(326)으로부터 뺄셈 되는(321) 20 비트 수에 대응하는 출력들(324)과 중앙 분수 요소(323)과 비트 이력(322)를 받아들이는 참조표(320)를 포함하는 위 알고리즘의 실행의 한 형태를 나타낸다.
이 프로세스는 예상된 센트로이드를 향하여 실행되며, Δcolumn 내에서 한번에 1 만큼 센트로이드 왼쪽 및 오른쪽으로 쉬프트된다. 실제적인 픽셀들의 가장 작은 차이를 갖는 센트로이드는 "winner"로 여겨지며, 그에 따라서 Δcolumn이 업데이트된다(요망하기로 "no change"인). 결과적으로 Δcolumn은 각 도트 행에서 1 보다 더 크게 변화될 수는 없다.
상기 프로세스는 수직 픽셀들에 있어서도 반복되며, Δrow는 결과적으로 업데이트된다.
평행관계에 있어서 여기에서는 큰 양의 범위가 있다. ACP 유닛(31)을 위해 선택된 클록의 비율에 따라서, 이들 유닛들은 직렬로 위치될 수 있으며(그러므로 3개의 다른 Δ의 테스트는 연속적인 클록 사이클들 내에서 발생할 수 있을 것이다), 또는 평행안에서 3개 모두 동시에 테스트될 수 있다. 만일 클록 비율이 충분히 빠 르다면, 평행관계에 대한 필요도 덜할 것이다.
대역폭 이용(Bandwidth utilization)
Δs의 구(old)Δ를 판독하는 것이 필요하며, 그것을 다시 기록해 내는 것이 필요하다. 이것은 대역폭의 10%를 가진다:
2*(76(3150/32)+2*3150) = 27,648ns = 대역폭의 10%
우리가 그것의 Δs를 업데이트할 때, 주어진 열을 위한 비트 이력이 판독될 필요가 있다. 각 바이트들은 두 개의 열의 비트 이력들을 포함하며, 그러므로 대역폭의 2.5%를 가진다.
76((3150/2)/32)+2*(3150/2) = 4,085ns = 대역폭의 2.5%
1% 회전에 기인한 픽셀 드리프트의 최악의 경우에, 센트로이드들은 매 57 픽셀 열들마다 1 행 쉬프트될 것이지만, 도트는 지름내에서 3개의 픽셀이기 때문에, 주어진 픽셀 행은 171개의 픽셀 열들에 있어서 유효하게 될 것이다(3*57). 바이트가 2개의 픽셀들을 포함하기 때문에, 캐쉬된 판독 안에서 유효한 바이트들의 수는 86개의 최악의 경우가 될 것이다(out of 128 read). 5개의 행들에 있어서의 최악의 타이밍은 따라서 31% 대역폭이다.
5*(((9450/(128*2))*320*128/86) = 88,112ns = 대역폭의 31%이다.
센트로이드Δ를 업데이트 하는데 필요한 전체 대역폭은 다음 표에서 요약되어 있다.
판독/기록 센트로이드 Δ | 10% |
비트 이력 판독 | 2.5% |
픽셀 데이터의 5개 행들의 판독 | 31% |
TOTAL | 43.5% |
단계 2에 있어서의 메모리 이용
:
2MB 비트-이미지 DRAM 영역은 단계 2 프로세싱 동안에 그로부터 판독되거나 기록된다. 2MB 픽셀-데이터 DRAM 영역은 판독된다.
0.5MB 스크래치 DRAM 영역은 열 데이터를 저장하는 데 이용되며, 즉:
센트로이드 어레이 | 24비트(16:8)*2*3150 = 18,900 바이트 |
비트 이력 어레이 | 3비트*3150 엔트리들(바이트 당 2) = 1575 바이트 |
단계 3 - 열 데이터에 대한 XOR 및 언스크램블(Unscramble)
도 37로 되돌아가서, 디코딩에서의 다음 단계는 열 데이터를 언스크램블하고 XOR하는 것이다. 아트캠으로부터 가져오는 것으로서, 2MB 바이트 이미지는 스크램블되고 XOR된 형태내로 존재한다. 그것은, 단계 4에서 리드 솔로몬 디코더에 있어 필요한 비트 이미지를 회복하기 위하여 언스크램블되고 다시 XOR되어야 한다.
도 46으로 넘어가서, 언스크램블링 프로세스(330)는 2MB 스크램블된 바이트 이미지(331)을 가지며, 언스크램블된 2MB 이미지(332)를 기록한다. 상기 프로세스는 인 플레이스(in-place)로 적당하게 실행될 수는 없다. 그래서 2MB 영역들의 2 세트가 이용된다. 스크램블 데이터(331)는 16×16 어레이 내에서 배열된 심볼 블 록 순서 안에 존재하며, 심볼 블록0(334)은 랜덤한 순서내에서 모든 코드 워드들로부터 모든 심볼 0의 것을 갖는다. 심볼 블록 1은 랜덤한 순서 내에서 모든 코드 워드들로부터 모든 심볼 1의 것을 갖는다. 오직 255개의 심볼들만이 존재하기 때문에, 256th 심볼 블록은 현재 이용되지 않는다.
선형 피드백 쉬프트 레지스터는 심볼 블록(특히 334) 내의 위치와 그것이 산출되었던 코드 워드(특히 355) 사이의 관계를 결정하는 데 이용된다. 가능한 한 같은 원인이 되는 이 작업은 원본 아트카드 이미지들을 생성하는 때에 이용된다. 각각 선택적으로 0xAA 및 0x55를 갖는 소스 라인으로부터의 바이트들의 XOR은, 시간의 보틀넥(bottleneck)이 DRAM이 비순차적인 어드레스들에 판독/기록을 준비하기 위해 대기하고 있으므로, 효과적으로 공백인 상태이다.
언스크램블링 XOR 프로세스의 시간은 효과적으로는 2MB의 랜덤 바이트-판독들, 2MB의 램덤 바이트-기록들이며, 즉 2*(2MB*76ns+2MB*2ns) = 327,155,712ns 또는 대략적으로 0.33초이다. 이 시간은 어떠한 캐쉬도 가정하지 않는다.
단계 4- 리드 솔로몬 디코드
이 단계는 루프이고, 성공적인 디코드가 만들어지거나 더 이상 디코드할 복사본들이 없을 때까지, 비트 이미지 내 데이터들의 복사본들을 통해서 반복되며, 그것들을 리드 솔로몬 디코드 모듈에 건넨다.
상기 리드 솔로몬 디코더는, 적절하게 프로그램되어 있는 VLIW 프로세서 또는, 선택적으로, 가령 LSI 논리의 L64712와 같은 개별의 하드와이어된 코어일 수 있다. L64712는 초당 50M 비트의 프로세스량을 가지므로(약 초당 6.25MB), 시간은 2MB 판독 및 1MB 기록 메모리 액세스 시간(순차적인 액세스들에 있어서 500MB/sec)보다도 리드 솔로몬 디코더의 스피드에 의하여 한계될 것이다. 가장 나쁜 경우에 있어서 걸리는 시간은 그러므로 2/6.25s = 대략 0.32 초이다.
단계 5 - 바크 스크립트의 작동
아트카드(9)를 판독하고 그것을 디코드하는 데 걸리는 전체 시간은 따라서 약 2.15 초이다. 아크카드는 1.5초 후에 이동을 멈추기 때문에, 사용자에게 명백하게 보이는 지연은 실제적으로 단지 0.65초이다(단계 3 및 4의 전체).
일단 아트카드가 로드되면, 아트바크 스크립트가 해석되어야만 한다. 상기 스크립트가 즉시 동작하기 보다는, 스크립트는 오직 “프린트” 버튼(13)(도 1)의 눌러짐에 의하여 작동된다. 작동되도록 되면 스크립트는 스크립트의 복합성에 의존하면서 변화될 것이며, 프린트 버튼이 눌려지는 것과 실제 프린트 버튼 및 실제의 프린트 사이의 감지되는 지연이 고려되어야만 한다.
대체적 아트카드 포맷
물론, 아트카드의 다른 포맷이 가능하다. 다수의 바람직한 특성을 갖는 그런 하나의 대체적 아트카드 포맷이 이제 설명될 것이다. 이후에 설명되어지는 것은 대체적 아트카드 데이터 포맷, 대체적 아트카드 상의 도트들로 사용자의 데이터를 맵핑하기 위한 메커니즘, 및 자원들이 부족한 임베디드 시스템(embedded system)들 내에서 사용자를 위한 빠른 선택 아트카드 판독 알고리즘이 될 것이다.
대체적 아트카드의 개괄
대체적 아트카드들은 많은 양의 데이터 또는 구성정보로 사용자에게 친숙한 인터페이스 제공하는 임베디드 및 PC 유형의 어플리케이션들 모두에서 이용될 수 있다.
대체적 아트카드의 뒷면은 어플리케이션에 상관없이(데이터를 저장하기 때문에) 같은 외관을 갖는 반면에, 대체적 아트카드의 앞면은 어플리케이션에 의존적이다. 그것은 어플리케이션의 환경에서 사용자에게 인지되어야 한다.
대체적 아트카드 기술은 또한 프린팅 해상도와는 독립적일 수 있다. 카드 상에 도트들로서 데이터를 저장하는 개념은, 만일 동일 공간에 더 많은 도트들을 집어 넣는 것이 가능하다면(해상도를 증가시키는 것에 의해서) 그러한 도트들이 더 많은 데이터를 나타낼 수 있음을 의미하는 것이다. 바람직한 실시예는 샘플 카드로서 86mm×55 카드 상에서 1600dpi 프린팅의 이용을 가정하지만, 다른 카드 크기들 및/또는 다른 프린트 해상도를 위하여 동일한 레이아웃 및 데이터 사이즈들을 대체적으로 결정하는 것은 간단하다. 프린트 해상도에 관계없이, 판독 기술은 동일하다. 모든 디코딩 및 다른 오버헤드(overhead)가 고려된 후에, 대체적 아트카드들은 1600dpi까지의 프린트 해상도에서 1 메가바이트 데이터까지의 저장을 할 수 있다. 대체적 아트카드들은 1600dpi보다 더 큰 프린트 해상도에서 수 메가 바이트들의 데이터를 저장할 수 있다. 다음 두개의 표들은 어떤 프린트 해상도들에 있어서의 효과적인 대체적 아트카드 데이터 저장장치 용량을 요약한다:
대체적 아트카드의 포맷
대체적 아트카드상의 데이터 구조는 따라서 데이터의 복원을 원조하기 위해 특별하게 디자인된다. 이 섹션은 대체적 아트카드의 데이터 면(뒷면)의 포맷을 설명한다.
도트들
대체적 아트카드의 데이터면 상의 도트들은 흑백일 수 있다. 예컨대, 미리 결정되어 디자인된 프린트 해상도에서 흰색 바탕에 검은색 도트들이 프린트된다. 결과적으로 "검은색 도트"는 물리적으로 "흰색 도트"와 구별된다. 도 47은 검은색 및 흰색 도트들의 확대된 도의 다양한 일예를 나타낸다. 흰색 배경에 검은색 도트들의 흑백구성은 블러리(blurry) 판독 환경들내에서 동적인 범위를 최대화하도록 선택되는 것이 바람직하다. 비록 검은색 도트들이 특별한 피치(pitch, 특히 1600dpi)에서 프린트되어 있다고 하더라도, 도트들 자체는, 도트들이 인접하게 프린트될 때 인접한 라인들을 새롭게 만들어내기 위하여 약간 더 크게 된다. 도 47의 이미지예들에 있어서, 도트들은 블리딩(bleeding) 기술의 결과로서 실제에서 발생되는 것 만큼 합쳐지지는 않는다. 검은색 인덴테이션들(indentations)들을 더욱 펼쳐주어야 할 것이다. 비록 바람직한 실시예에서 설명되는 대체적 아트카드 시스템이 다른 도트 크기들을 유연하게 허용해준다 하더라도, 특별한 프린트 기술을 위한 정확한 도트 크기들 및 잉크/프린트 작용들은 더욱 좋은 결과를 얻기 위하여 보다 상세하게 연구되어야 한다.
이 아트카드 실시예를 설명하는 데 있어서, 도트라는 것은 대체적 아트카드 상의 물리적으로 프린트된 도트(잉크, 열, 전자사진, 할로겐화 은 등)을 나타낸다. 대체적 아트카드 판독기가 대체적 아트카드를 스캔하는 때, 상기 도트들은 나이퀴스트 정리를 만족시키기 위하여 프린트된 해상보다 적어도 두 배로 샘플되어야 한다. 픽셀이라는 것은 대체적 아트카드 장치로부터의 샘플 값을 나타낸다. 예컨대 1600dpi 도트들이 4800dpi에서 스캔되는 경우에 도트의 각 차원 내에 3개의 픽셀들이 있거나, 또는 도트 당 9개의 픽셀들이 있다. 샘플링 프로세스는 밑에서 보다 자세하게 설명될 것이다.
도 48으로 넘어가면, 대체적 아트카드 샘플의 데이터 표면(1101)이 도시되어 있다. 각 대체적 아트카드는 흰색 경계 영역(1103)에 의하여 둘러싸인 "활동" 영역(1102)로 구성된다. 상기 흰색 경계(1103)는 어떤 데이터 정보도 포함하지 않지 않으나, 흰색 레벨들을 조정하기 위한 대체적 아트카드 판독기에 의하여 이용될 수 있다. 상기 활동 영역은, 8개의 흰색 도트(특히 1106)의 갭에 의하여 각각의 데이터 블록이 그 다음블록으로부터 분리되어 있는, 데이터 블록(특히 1104)의 배열들이다. 프린트 해상도에 의존하여, 대체적 아트카드상의 데이터 블록들의 수는 변할 것이다. 1600dpi 대체적 아트카드에 있어서, 상기 배열은 8×8이 될 수 있다. 각 데이터 블록(1104)는 627×394 도트들의 차원들을 갖는다. 8 개의 흰색 도트들의 내부 블록 갭(1106)을 가지면서, 대체적 아트카드의 활동 영역은 따라서 5072×3208 도트들(1600dpi에서의 8.1mm×5.1mm)이다.
데이터 블록들
도 49로 넘어가면, 하나의 데이터 블록(1107)이 도시되어 있다. 대체적 아 트카드의 활동 영역은 데이터 블록들(1107)들로 동일하게 구조된 배열로 구성된다. 각 데이터 블록들은 다음의 구조를 갖는다: 클록-마크들(1109), 경계들(1110), 타깃들(1111)에 의하여 둘러싸인 데이터 영역(1108). 데이터 영역은 적당하게 인코드된 데이터를 유지하는 반면에, 클록 마크들 경계들, 타깃들은 상기 데이터 영역을 위치하는 데 도움을 주고 상기 영역 내로부터 데이터의 정확한 회복을 보증하기 위하여 특별하게 존재한다.
각 데이터 블록(1107)은 627×394 도트들의 차원을 갖는다. 이것의, 595×384 중심 영역은 데이터 영역이다(1108). 주위의 도트들은 클록 마크들, 경계들, 타깃들을 유지하는 데 이용된다.
경계들과 클록마크들
도 50은 데이터 블록을 나타내며, 도 51 및 도 52는 도 50의 테두리 부분의 확대도이다. 도 541 및 도 52에서 나타난 바와 같이, 각 데이터 블록 내에 2개의 5 도트 고(high)경계 및 클록마크 영역들(1170, 1177)들이 존재한다: 데이터 영역 위의 하나와 아래의 하나. 예컨대 상부 5 도트 하이영역은 외부 블록 도트 경계 라인(1112)(데이터 블록의 길이를 스크래치하는), 흰색 도트 분리 라인(1113)(경계 라인이 독립적임을 확실하게 해 주기 위한), 클록마크들의 3 도트 하이세트로 구성된다. 상기 클록 마크들은 흰색 및 검은색 열 사이에서 선택적이며, 데이터 블록의 한쪽 끝으로부터 8개의 행에서 검은색 클록마크를 가지고 시작되다. 데이터 영역내에서 도트들과 클록마크 도트들 사이의 분리는 존재하지 않는다.
클록 마크들은, 만일 대체적 아트카드가 180도 회전되어 삽입된다면 동일한 관련 경계/클록마크 영역들이 마주치게 되는 점에서, 상호 대칭적이다. 경계 (1112, 1113)는, 데이터가 데이터 영역들로부터 판독될 때 수직적인 트래킹을 유지하기 위하여 대체적 아트카드 판독기에 의해 이용되도록 의도된다. 클록마크들 (1114)는 데이터가 데이터 영역들로부터 판독될 때 수직적 트래킹을 유지하도록 의도된다. 도트들의 흰색 라인에 의한 경계와 클록마크들간의 분리는 판독동안에 발생하는 블러링(blurring)의 결과로서 바람직하다. 상기 경계는 그러므로 한 측면상의 흰색을 가진 검은색이 되고, 판독에 있어서 우수한 주파수 반응을 만들어 낸다. 흰색과 검은색간에서 선택적인 클록마크들은, 수직 차원보다 수평차원내에서를 제외하고, 유사한 결과를 가진다. 어떤 대체적 아트카드 판독기는 만일 그것이 트래킹을 목적으로 이용되는 것이라면 상기 클록마크들 및 경계를 발견해야 한다. 다음 섹션은 타깃들을 다루며, 그것은 클록마크들, 경계, 데이터에 길을 지시하기 위하여 디자인된다.
타깃 영역에서의 타깃들
도 54에 도시되어 있는 바와 같이, 두 개의 15-도트 와이드 타깃 영역들(1116,1117)들이 각 데이터 블록 내에 존재한다: 데이터 영역의 왼쪽에 하나, 오른쪽에 하나. 타깃 영역들은 방위정렬을 위하여 이용되는 도트들의 하나의 행에 의해 데이터 영역들로부터 분리되어 있다. 타깃 영역들(1116, 1117)의 목적은 클록마크들, 경계 및 데이터 영역들에 길을 지시해주는 것이다. 각 타깃 영역은 대체적 아트카드 판독기에 의해 발견되기 쉽도록 디자인된 6개의 타깃들(특히 1118)이 포함된다. 이제 도 53으로 넘어가면, 하나의 타깃(1120)의 구조를 보여준 다. 각 타깃(112)은, 중심 구조(1121)와 런-랭스 인코드된 타깃 넘버(1122)를 가진 15×15 도트 검은색 사각형이다. 중심 구조(1121)는 간단한 흰색 십자가 모양이고, 티깃 넘버 컴포넌트의 각 부분에 있어서의 2 도트들의 길이를 갖는, 흰색 도트들의 간단한 행들이다. 그러므로 타깃 넘버 1의 타깃 id (1122)는 2 도트 길이이고, 타깃 넘버 2의 타깃 id(1122)는 4 도트 와이드 등이다.
도 54에 도시되어 있는 바와 같이, 상기 타깃들은 그들이 카드 삽입과 관련하여 회전 불변을 가지도록 배열되어 있다. 이것은 왼쪽 타깃 및 오른쪽 타깃들이 180도 회전되었다는 것을 제외하고, 동일하다는 것을 의미한다. 왼쪽 타깃 영역(1116)에 있어서, 상기 타깃들은 타깃 1부터 6까지 각각 상부에서 하부까지 위치하도록 배열되어 있다. 오른쪽 타깃 영역에 있어서, 상기 타깃들은 타깃넘버 1부터 6까지 각각 하부에서 상부로 위치되어 있도록 배열되어 있다. 상기 타깃넘버 id는 언제나 데이터 영역에 절반쯤 박혀 있다. 도 54의 확대된 부분은 오른쪽 타깃들이 180도 회전되었다는 것을 제외하고는 왼쪽 타깃들과 명백하게 동일함을 명확하게 보여주고 있다.
도 55에서 도시되어 있는 바와 같이, 타깃들(1124, 1125)들은 중심 55 도트 분리를 가진 타깃 영역내에 특별하게 위치되어 있다. 나아가 상부 클록 영역내에는 타깃1의 중심(1124)으로부터 첫 번째 클록마크 도트(1126)까지의 55도트들의 거리가 존재하며, 하부 클록마크 영역(도시되어 있지 않음)내에는 타깃의 중심으로부터 첫 번째 클록마크 도트까지의 55 도트들의 거리가 존재한다. 두 영역들의 제 1 블록 클록마크는 타깃 중심 을 가진 라인 안에서 직접적으로 시작된다(8번째 도트 위치는 15도트 와이드 타깃의 중심이다).
도 55의 단순화되고 개략적인 예시는, 상부 경계/클록마크 영역들 내에서 타깃 1(1124)로부터 상부 경계/클록마크 영역들 내의 첫 번째 검은색 클록마크의 첫 번째 도트까지의 거리 뿐만 아니라 타깃들의 중심들간의 거리를 나타내고 있다. 상부 및 하부의 양 타깃들로부터 클록마크들까지의 55 도트들의 거리가 존재하고, 대체적 아트카드의 양 면들은 서로 대칭적이기 때문에(180도 회전된), 카드는 온쪽에서 오른쪽으로 또는 오른쪽에서 왼쪽으로 판독될 수 있다. 판독되는 방향에 관계없이, 방위는 데이터 영역으로부터 데이터를 추출하기 위하여 결정될 필요가 있다.
방위 행들(Orientation columns)
도 56에 나타나 있는 바와 같이, 각 데이터 블록안에는 2개의 1 도트 와이트 방위 행들(Orientation Column)이 존재한다: 하나는 데이터 영역의 왼쪽으로 하나는 오른쪽으로. 상기 방위 행들은 대체적 아트카드로 방위정보를 제공하기 위해서 주어진다: 데이터 영역의 왼쪽 측면위는(좌측 타깃들의 오른쪽으로) 흰색 도트들(1127)의 하나의 행이다. 데이터 영역의 오른쪽 측면위는(우측 타깃들의 왼쪽으로) 검은 도트(1128)들의 하나의 행이다. 상기 타깃들은 회전 불변이기 때문에, 도트들의 이들 행들은 대체적 아트카드 판독기가 대체적 아트카드의 방위를 결정하도록 한다-카드가 올바른 방향으로 삽입되었는지, 또는 뒤가 앞으로 되었는지. 상기 대체적 아트카드 판독기의 관점으로부터, 도트들에 대한 어떤 기능퇴보 없다고 가정한다면, 2가지의 가능성이 존재한다:
* 만일 데이터 영역의 왼쪽에 있는 도트들의 행이 흰색이고, 데이터 영역의 오른쪽에 있는 행이 검은색이면, 상기 판독기는 그것이 기록되어 있는 것과 동일한 방법으로 삽입되었다고 인식할 것이다.
* 만일 데이터 영역의 왼쪽에 있는 도트들의 행이 검은색이고, 데이터 영역의 오른쪽에 있는 행이 흰색이라면, 상기 판독기는 거꾸로 삽입되었다고 인식할 것이며, 데이터 영역은 적당하게 회전된다. 상기 판독기는 대체적 아트카드로부터 정보를 올바르게 복원하기 위하여 적절한 동작을 해야만 한다.
데이터 영역
도 57에서 도시되어 있는 바와 같이, 데이터 블록의 데이터 영역은 각 384 도트들의 595 행들로 구성되며, 전체 228,480 도트들이다. 이 도트들은 원본 데이터를 가져오기 위하여 해석되고 디코드되어야만 한다. 각 도트는 하나의 비트를 나타내며, 228,480 도트들은 228,480 비트들을 나타내며, 또는 28,560 바이트이다. 각 도트들의 해석은 다음과 같이 될 수 있다:
검은색 | 1 |
흰색 | 0 |
비트들의 실제적인 해석은 도트들로부터 얻지만, 그러나, 대체적 아트카드의 데이터 영역들 내에서 원본 데이터로부터 도트들로의 맵핑에 대한 이해가 필요로 된다.
데이터 영역 도트들로 원본 데이터를 맵핑
최대 크기 910,082 바이트의 원본 데이터 파일을 가져오고 그것을 1600dpi 대체적 아트카드 상의 64개 데이터 블록의 데이터 영역들 내 도트들로 맵핑하는 프로세스가 이제 설명될 것이다. 대체적 아트카드 판독기는 대체적 아트카드 상의 도트들로부터 원본 데이터를 추출하기 위하여 상기 프로세스를 거꾸로 반복할 것이다.
일견하여, 도트들 상의 맵 데이터(map data)가 사소하게 보일 수 있다 : 2진수 데이터는 1들과 0들로 구성되므로, 카드 상의 검정 및 흰 도트들로 간단하게 기록할 수 있다. 그러나, 이 스킴(scheme)은 잉크가 사라질 수 있고, 카드의 부분들이 먼지, 때, 또는 스크래치들로 손상입을 수 있다는 사실을 허용하지 않는다. 에러 검출 인코딩(error-detection encoding)없이, 카드로부터 회수된 데이터가 올바른지를 검출할 방법이 없다. 매핑(mapping) 프로세스의 목적은, 보다 강한 데이터 복원을 만들고, 또한 대체 아트카드 판독기가 데이터를 올바르게 판독하도록 하는 능력을 제공한다.
원본 데이터를 데이터 영역 도트들에 매핑하는데에 관련된 3가지 기본 단계들이 있다:
* 원본 데이터를 여분 인코드(Redundancy encode)
* 국부의 대체 아트카드 손상의 영향을 줄이기 위한 결정적인 방법으로 인코드된 데이터를 뒤섞음
* 대체 아트카드 상에 데이터 블럭들에 도트들로써 뒤섞이고 인코드된 데이터를 기록
각각의 3 스텝들은 다음의 부분들에서 상세히 설명된다.
리드-솔로몬 인코딩을 사용한 여분 인코드
대체 아트카드 도트들에 데이터 매핑은 사용되는 여분 인코딩의 방법과 관련된다. 리드-솔로몬 인코딩은 최소한의 여분을 이용하여 에러들을 효과적으로 검출하고 보정하여, 버스트(burst) 에러들을 다루는 능력으로 바람직하게 선택된다. 리드-솔로몬 인코딩은 IEEE 출판사에서 1994년에 출판된 Wicker, S. 및 Bhagava, V.가 쓴 리드-솔로몬 코드들과 그 응용(Reed-Solomon Codes and their Application), McGraw-Hill에서 1996년에 출판된 Rorabaugh, C가 쓴, 에러 코딩 쿡북(Error Coding CookBook), Dr. Dobb's Journal에서 1997년 1월(22판, 발행물 1)에 출판된 Lyppens, H가 쓴 리드-솔로몬 에러 코렉션(Reed-Solomon Error Correction)이라는 책에서와 같은 기준 텍스트들에서 설명된다.
리드-솔로몬 인코딩으로 다른 심볼 크기들과 다른 여분의 레벨들을 포함하는, 다양한 다른 파라미터들이 사용될 수 있다. 바람직하게, 다음의 인코딩 파라미터들이 사용된다:
* m = 8
* t = 64
m = 8인 것은 심볼 사이즈가 8 비트(1 바이트)인 것을 의미한다. 또한 각 리드-솔로몬 인코드된 블럭 크기 n은 255 바이트(28-1 심볼들)이다. t 심볼들로 보정하기 위해, 마지막 블럭 크기인 2t 심볼들은 여분의 심볼들로 남겨두어야 한다. t = 64인 것은 64 바이트(심볼들)가 에러인지 아닌지로 블럭마다 보정될 수 있다. 각 255 바이트 블럭은 128(2 ×64)개의 여분의 바이트들을 가지고, 나머지 127 바이트(k=127)는 원본 데이터를 저장하고 있다. 따라서:
* n = 255
* k = 127
실제 결과는 127 바이트의 원본 데이터가 255 바이트 블럭의 리드-솔로몬 인코드된 데이터로 되도록 인코드된다는 것이다. 인코드된 255 바이트의 블럭들은 대체 아트카드 상에 저장되고 후에 대체 아트카드 판독기에 의해 다시 원본 127 바이트로 디코드된다. 데이터 블럭의 데이터 영역의 단일 열의 384 도트들은 48 바이트(384/8)에 저장될 수 있다. 595개의 열들은 28,560 바이트를 저장할 수 있다. 이는 112개의 리드-솔로몬 블럭들(각 255바이트를 가지는 블럭)에 도달한다. 복합된 대체 아트카드의 64개의 데이터 블럭들은 7168개의 리드-솔로몬 블럭들(1,827,840 바이트, 리드-솔로몬 블럭마다 255 바이트일 때)의 총합을 저장할 수 있다. 7,168개의 리드-솔로몬 블럭들 중 2개는 정보를 제어하도록 지정되고, 나머지 7166개는 데이터를 저장하게 된다. 각 리드-솔로몬 블럭이 127 바이트의 실제 데이터를 저장하기 때문에, 대체 아트카드 상에 저장될 수 있는 데이터의 총량은 910,082 바이트(7166 ×127)이다. 원본 데이터가 이 양의 이하라면, 데이터는 리드-솔로몬 블럭들의 정확한 갯수에 맞추기 위해 인코드될 수 있고, 그리고 나서 인코드된 블럭들이 7166개 모두가 사용될 때까지 반복될 수 있다. 도 58은 인코딩 이용의 전반적인 형태를 나타낸다.
2개의 제어 블럭들(1132, 1133) 각각은 나머지 7,166개의 리드-솔로몬 블럭들을 디코딩하는데 요구되는 동일한 인코드된 정보를 포함한다:
완전한 메시지(lo/hi가 저장되는 16 비트)로 리드-솔로몬 블럭들의 수, 및
메시지(8 비트)의 마지막 리드-솔로몬 블럭에 데이터 바이트들의 수
이 2개의 갯수들은 나머지 31 바이트들이 예약되고 0으로 세트되면서 32번(96 바이트를 소비) 반복한다. 각 제어 블럭은 그 후 리드-솔로몬 인코드되고, 255개의 리드-솔로몬 인코드된 데이터 안으로 제어 정보의 127 바이트들로 변화된다.
제어 블럭(control block)은 생존(surviving)의 큰 기회가 2번 주어지도록 저장된다. 게다가, 제어 블럭 내에서 데이터의 반복은 리드-솔로몬 인코딩을 사용할 때 특별한 중요성을 가진다. 오류없는 리드-솔로몬 인코드된 블럭에서, 처음의 127 바이트의 데이터는 정확히 원본 데이터이고, 제어 블럭이 디코딩을 실패한 경우(64 심볼들 이상이 오류) 원본 메시지를 복원하려는 시도로 보여질 수 있다. 따라서, 제어 블럭이 디코딩을 실패하면, 2개의 디코딩 파라미터들로 가장 가능성있는 값들을 결정하는 노력으로 3 바이트의 세트들을 결정할 수 있다. 복원되어질 보장이 없더라도, 여분을 통한 더 좋은 기회를 가진다. 마지막 159 바이트의 제어 블록이 파괴된다면, 처음의 96 바이트는 완벽히 괜찮다. 처음의 96 바이트를 보는 것이 반복하는 세트의 갯수들을 나타낼 수 있을 것이다. 이 갯수들은 나머지 7,166개의 리드-솔로몬 블럭들로 메시지의 나머지를 현저히 디코드할 수도 있다.
예를 들어, 정확히 9,967 바이트들의 데이터를 포함하는 데이터 파일을 가정하자. 요구되는 리드-솔로몬 블럭들의 갯수는 79개이다. 제 1 의 78개의 리드-솔로몬 블럭들이 완전히 사용되고, 9,906 바이트(78 ×127)를 소비한다. 79번째 블럭은 단지 61 바이트의 데이터를 가진다(나머지 66 바이트가 모두 0일 때).
대체 아트카드는 7,168개의 리드-솔로몬 블럭들로 구성된다. 처음의 2개의 블럭들은 제어 블럭들이고, 그 다음의 79개는 인코드된 데이터이며, 그 다음의 79개는 인코드된 데이터 등의 또 다른 복제물이다. 79개의 리드-솔로몬 블럭들을 90번 저장한 후, 나머지 56개의 리드-솔로몬 블럭들은 인코드된 데이터의 79개의 블럭들로부터 제 1 의 56개의 블럭들의 또 다른 복제물이다(인코드된 데이터의 마지막 23개의 블럭들은 대체 아트카드 상의 룸이 충분하지 않아서 또 다시 저장될 수 없다). 리드-솔로몬 인코드되기 전의 각 제어 블럭 데이터에서 127 바이트의 6개의 표현은 도 59에서 나타난 것이다.
인코드된 데이터 스크램블(scramble)
모든 인코드된 블럭들이 메모리에서 연속하여 저장되었다고 가정하면, 최대 1,827,840 바이트의 데이터는 대체 아트카드(2개의 제어 블럭들과 7,166개의 정보 블럭들, 총 7,168개의 리드-솔로몬 인코드된 블럭들) 상에 저장될 수 있다. 바람직하게, 데이터는 이 상태에서 대체 아트카드 상에 직접 저장되지 않거나, 또는 하나의 리드-솔로몬 블럭의 모든 255 바이트가 카드 상에 함께 있을 수 있다. 카드에 물리적인 손상을 야기시키는 어떠한 먼지, 때 또는 얼룩은 블럭이 복원될 수 없도록 만드는, 단일의 리드-솔로몬 블럭에서 64 바이트 이상을 손상시킬 수 있다. 그 리드-솔로몬 블럭의 복제물이 없다면, 전체의 대체 아트카드는 디코드될 수 없을 수 있다.
그 해결책은 대체 아트카드 상에 대량의 바이트들이 있고, 대체 아트카드가 적절한 물리적인 크기를 가진다는 사실을 이용하는 것이다. 그러므로 데이터는 단일의 리드-솔로몬 블럭으로부터 심볼들이 서로와 근접한 부근에 있지 않도록 스크램블될 수 있다. 물론 카드 하락의 병리적인 경우들이 리드-솔로몬 블럭들을 회복불가능하도록 야기시킬 수 있지만, 평균적으로, 데이터의 스크램블링(scrambling)은 카드를 더욱 강하게 만든다. 선택된 스크램블링 스킴은 간단하고 도 14에서 개략적으로 나타내진다. 각 리드-솔로몬 블럭으로부터 모든 바이트의 0들이 함께 위치되고(1136), 그 후 모든 바이트의 1들이 위치된다. 그러므로 7,168 바이트의 0들이고, 그리고 나서 7,168 바이트의 1들일 것이다. 대체 아트카드 상의 각 데이터 블럭은 28,560 바이트들을 저장할 수 있다. 따라서 대체 아트카드 상의 64개의 데이터 블럭들 각각에서 각 리드-솔로몬 블럭으로부터 대략 4 바이트들이다.
이 스크램블링 스킴하에서, 대체 아트카드 상의 16개의 전체 데이터 블럭들의 완전한 손상이 리드-솔로몬 블럭마다 64개의 심볼 에러들을 초래할 것이다. 이것은 대체 아트카드에 다른 손상이 없더라도, 비록 데이터 복제가 없더라도, 전체의 데이터가 완전히 복원될 수 있음을 의미한다.
대체 아트카드로 스크램블되고 인코드된 데이터의 기록
일단 원본 데이터는 리드-솔로몬 인코드되고, 복제되고 스크램블되면, 대체 아트카드 상에 저장되어질 데이터의 1,827,840 바이트들이 있다. 대체 아트카드 상의 64 데이터 블럭들 각각은 28,560 바이트들을 저장한다.
데이터는 대체 아트카드 데이터 블럭들에 간단히 기록되므로 제 1 데이터 블럭은 처음의 28,560 바이트의 스크램블된 데이터를 포함하고, 제 2 데이터 블럭은 그 다음의 28,560 바이트 등을 포함한다.
도 61에서 나타낸 것처럼, 데이터 블럭 내에서, 데이터는 열방향으로 왼쪽에서 오른쪽으로 기록된다. 따라서, 데이터 블럭 내의 맨 왼쪽의 열은 28,560 바이트의 스크램블된 데이터 중 처음의 48 바이트들을 포함하고, 마지막 열은 28,560 바이트의 스크램블된 데이터 중 마지막의 48 바이트들을 포함한다. 열 내에서, 바이트들은 상부에서 하부로 기록되고, 비트 7에서 시작하여 비트 0에서 끝난다. 비트가 set(1)이면, 검정 도트가 대체 아트카드 상에 위치되고, 비트가 clear(0)이면, 어떠한 도트도 배치되지 않으며, 그것을 카드의 흰색 배경 색상으로 남겨둔다.
예를 들어, 1,827,840 바이트의 데이터 세트가 대체 아트카드 상으로 저장되어지도록 7,168개의 리드-솔로몬 인코드된 블럭들을 스크램블함에 의해 생성될 것이다. 처음의 28,560 바이트의 데이터는 제 1 데이터 블럭에 기록된다. 처음 28,560 바이트의 제 1 48 바이트는 데이터 블럭의 제 1 열로 기록되고, 다음 열의 그 다음 48 바이트는 그 다음 데이터 블럭에, 그렇게 계속된다. 28,560 바이트 중 처음 2개의 바이트들이 hex D3 5F라 가정하자. 그 처음의 2개의 바이트들은 데이터 블럭의 열 0에 저장될 것이다. 바이트 0의 비트 7은 처음에 저장될 것이고, 그 다음은 비트 6, 그렇게 계속된다. 바이트 1의 비트 7은 바이트 1의 비트 0을 통해 저장될 것이다. 각 "1"이 검정 도트로, 각 "0"은 흰색 도트로 저장되기 때문에, 2개의 바이트들은 대체 아트카드 상에 다음의 도트들의 세트로 나타내어질 것이다:
* D3(1101 0011) : 검정, 검정, 흰색, 검정, 흰색, 흰색, 검정, 검정
* 5F(0101 1111) : 흰색, 검정, 흰색, 검정, 검정, 검정, 검정, 검정
대체 아트카드의 디코딩
이 부분은 대체 아트카드로부터의 원본 데이터를 정확하고 강력한 방법으로 추출하는 것에 대해 다룬다. 특히, 이전 장에서 설명되어진 것과 같은 대체 아트카드 포맷(format)이 가정되고, 대체 아트카드로부터 원본 이전-인코드된 데이터를 추출하는 방법이 설명된다.
대체 아트카드를 디코딩하기 위한 가정들의 일부로 많은 일반적인 고찰들이 있다.
사용자
대체 아트카드의 목적은 다른 응용들에 사용하기 위한 데이터를 저장하는 것이다. 사용자는 대체 아트카드를 대체 아트카드 판독기에 삽입하고, "적절한 시간"이 걸려 데이터를 기대한다. 사용자의 시각으로부터, 모터 운송이 대체 아트카드를 대체 아트카드 판독기 안으로 이동한다. 대체 아트카드가 움직이기 때문에 확실하지 않은 지연으로 감지되지 않는다. 대체 아트카드가 멈춰진 후 어느 정도는 지연으로 감지되고, 다른 대체 아트카드 판독 스킴에 최소화될 수 있다. 이상적으로, 전체의 대체 아트카드가 움직이는 동안 판독되어지고, 따라서 카드가 이동을 멈춘 후의 감지된 지연이 없게 된다.
바람직한 실시예를 위하여, 물리적으로 로드(load)되어질 대체 아트카드를 위한 적절한 시간은 1.5초로 정의된다. 이는 대체 아트카드가 이동을 멈춘 후에 부가적인 디코딩을 위한 최소한의 시간이다. 대체 아트카드의 활동 영역(acrive region)이 대체 아트카드 표면의 대부분이기 때문에, 그 영역에 관하여 우리의 타 이밍을 제한할 수 있다.
샘플링 도트들
대체 아트카드 상의 도트들은 CCD 판독기 등에 의해 나이퀴스트 이론(Nyquist's Theorem)을 만족하기 위한 최소한 2배의 프린트된 해상도(resolution)으로 샘플해야만 한다. 실제로, 이보다 더 높은 비율로 샘플하는 것이 좋다. 대체 아트카드 판독기 환경에서, 각 치수의 프린트된 해상도에서 3번 샘플하는 것이 바람직하고, 도트들은 단일 도트를 정의하는 9개의 픽셀들을 요구한다. 대체 아트카드 도트들의 해상도가 1600dpi인 경우, 대체 아트카드 판독기들의 이미지 센서는 4800dpi로 픽셀들을 스캔해야만 한다. 물론, 도트가 샘플링 센서로 정확히 정렬되지 않은 경우에, 도 62에서 나타내어진 것처럼 최악 및 대부분의 경우는 도트가 4x4 픽셀 영역을 감지하게 된다.
각 샘플된 픽셀은 1 바이트(8비트들)이다. 각 픽셀의 가장 낮은 2 비트는 아주 큰 노이즈(noise)를 포함할 것이다. 디코딩 알고리즘(decoding algorithm)들은 노이즈를 견뎌야한다.
정렬/회전
사용자가 대체 아트카드를 대체 아트카드 판독기에 회전없이 완벽히 정렬되도록 삽입하는 것은 불가능하다. 판독기 입구에서 특정한 물리적인 제약과 모터 운송 그립들(grips)이 삽입되는 순간 도움을 줄 것이고, 대체 아트카드는 CCD와 관련된 삽입의 원래 각으로 유지될 것이다. 바람직하게 도 63에서 나타내어진, 회전의 각은 최대 1도이다. 판독 프로세스 동안에 지터(jitter)와 모터 럼블(rumble)에 기 인하여, 그 각은 약간의 탈선이 될 수 있지만, 1도의 범위 안에서 유지되어진다.
대체 아트카드의 물리적인 차원들은 86mm x 55mm이다. 1도 회전은 86mm가 CCD(86 sin1°)를 통과하도록, 요구된 CCD 길이에 작용하는, 카드의 효과적인 높이에 1.5mm를 더한다.
대체 아트카드 판독의 1도 회전의 효과는 CCD로부터 단일 스캔라인이 대체 아트카드로부터 많은 다른 열들의 도트들을 포함할 수 있다는 것이다. 이는 픽셀들의 열들을 가로지르는 도트들의 드리프트(drift)를 나타내는 도 63에서 과장된 형태로 도시된다. 비록 다이어그램에서 과장되더라도, 실제 드리프트는 모든 57개의 픽셀들에서의 최대 1개의 픽셀 열 이동이다.
대체 아트카드가 회전되지 않으면, 도트들의 단일 열은 3개의 픽셀 스캔라인들로 판독될 수 있다. 대체 아트카드가 회전되면 될수록, 로컬(local) 효과도 커진다. 도트들이 판독될수록, 회전 효과가 더 길게 적용된다. 이러한 요소들 중 어느 요소가 증가되면, 다수의 픽셀 스캔라인들이 커지는 것이 대체 아트카드 상의 단일 열로부터 주어진 도트들의 세트를 산출하는 판독에 필요하다. 다음의 표는 얼마나 많은 픽셀 스캔라인들이 특정한 대체 아트카드 구조에서 도트들의 단일 열을 위해 요구되는 지를 나타낸다.
전체의 대체 아트카드 판독을 위해, 87mm(1°회전으로 인해 86mm + 1mm)를 판독할 필요가 있다. 4800dpi에서 이는 16,252개의 픽셀 열들을 이행한다.
CCD(또는 다른 선형 이미지 센서) 길이
CCD의 길이가 고려되어야 한다:
- 대체 아트카드의 물리적인 높이(55mm),
- 물리적인 대체 아트카드 삽입 상의 수직의 슬롭(slop)(1mm)
- 1도 정도의 삽입 회전(86 sin1°= 1.5mm)
이 요소들은 총 길이 57.5mm로 형성되도록 결합된다.
대체 아트카드 판독기의 대체 아트카드 이미지 센서 CCD가 4800dpi로 스캔되는 경우, 단일 스캔라인은 10,866 픽셀들이다. 단순성을 위해, 이 형상은 11,000 픽셀들로 반올림한다. 대체 아트카드의 활동 영역은 9,624 픽셀들을 이행하는, 3208 도트들의 높이이다. 데이터 영역은 1,152 픽셀들을 이행하는, 384 도트들의 높이이다.
DRAM 크기
대체 아트카드 판독 및 디코딩을 위해 요구되는 메모리의 양은 최소화된다. 대체 아트카드 판독기의 일반적인 위치는 메모리 리소스들이 귀중한 내부의 시스템이다. 이는 회전의 효과들에 의해 더 확실하지 않을 수 있다. 위에서 설명된 것처럼, 대체 아트카드가 더 많이 회전되면, 더 많은 스캔라인들이 효과적으로 원본 도트들을 복원하도록 요구된다.
계산의 복잡성, 사용자 감지 지연들, 세기 및 메모리 사용량사이의 교환이 있다. 가장 간단한 판독기 알고리즘 중 하나는 모든 대체 아트카드를 간단히 스캔 하는 것이고, 그리고 나서 실시간 제약없이 모든 데이터를 프로세스하는 것이다. 이는 메모리의 많은 여분을 요구할 뿐만 아니라, 대체 아트카드 판독 프로세스에서 동시에 발생되는 판독 알고리즘보다 더 길어진다.
대체 아트카드의 판독 및 디코딩을 위해 요구되는 메모리의 실제 양은 스크래치 공간(1-2KB)의 양을 포함하여, 인코드된 데이터를 저장하기 위해 요구된 공간 양의 2배이다. 1600dpi 대체 아트카드에서, 이는 4MB의 메모리 요구를 가진다. 메모리의 실제 사용량은 다음의 알고리즘 설명으로 상세히 설명된다.
이동률(Transfer rate)
특히 대체 아트카드 판독기들이 내부의 시스템의 일부이기 때문에, DRAM 대역폭 가정들은 타이밍 고려를 하고, 특정한 범위에 영향을 주는 연산 디자인이 필요하다.
1997년 10월, Rambus Inc.에서 나온 Direct Rambus Thchnology Disclosure에서 정의된 것처럼, 스탠다드 램버스 다이렉트(standard Rambus Direct) RDRAM 구조는 1.6GB/초의 피크 데이터 이동률로 가정된다. 75%의 효과(쉽게 도달되는)를 가정하면, 평균적으로 1.2GB/초의 데이터 이동률을 가진다. 16바이트의 블럭을 액세스사는 데 걸리는 시간은 12ns이다.
오염 데이터(Dirty date)
물리적으로 손상된 대체 아트카드들이 판독기 안으로 삽입되어질 수 있다. 대체 아트카드들이 스크래치되거나, 먼지나 더러움으로 더럽혀질 수 있다. 대체 아트카드 판독기는 완벽하게 모두를 판독할 수는 없다. 오염 데이터의 결과는 블러링 이 더 심해질 수 있고, 오염 데이터가 주변의 깨끗한 도트들에 영향을 줄 수 있다는 것이다.
블러링 환경(Blurry Environment)
대체 아트카드 판독 환경안으로 도입되는 블러링은 2가지 방법들이 있다:
* CCD의 거리의 환경에 기인하여 대체 아트카드로부터 자연적인 블러링
* 대체 아트카드의 워핑(warping)
대체 아트카드 이미지의 자연적인 블러링은 CCD로부터 감지된 데이터의 오버랩(overlap)이 있을 때 일어난다. 오버랩이 감지된 데이터에서 높은 주파수가 아니고, CCD에 의해 잃는 데이터가 없다면 블러링을 사용할 수 있다. 그러나, CCD 픽셀에 의해 덮인 영역이 너무 넓다면, 더 많은 블러링이 있을 수 있고 데이터를 복원하도록 요구되는 샘플링이 되지 않을 수 있다. 도 64는 감지된 데이터의 오버랩핑의 개략적인 설명도이다.
블러링의 또 다른 형태는 대체 아트카드가 열 손상에 의해 약간 워프될 때 일어난다. 워핑이 수직 치수에서 있다면, 대체 아트카드와 CCD 사이의 거리가 일정하지 않을 수 있고, 블러링의 레벨이 다른 영역들에 걸쳐 일어날 수 있다.
검정 및 흰색 도트들은 대체 아트카드들을 위해 흐릿한 판독 환경들에서 최상의 동작 범위를 제공하도록 선택된다. 블러링은 주어진 도트가 검정 또는 흰색인지를 결정하는 데에 시도되는 문제들을 야기시킬 수 있다.
블러링이 증가되면, 주어진 도트들이 더 많이 주변의 도트들에 의해 영향받게 된다. 따라서 특정한 도트를 위한 동작 범위가 감소된다. 흰색의 도트와 검정 도트를 고려하면, 각각은 모든 가능한 도트들의 세트들에 의해 둘러쌓여진다. 9개의 도트들이 흐려지고, 중심 도트가 샘플된다. 도 65는 검정 및 흰색 도트들을 위한 중심 도트 값들의 결과의 분포를 나타낸다.
그 다이어그램은 대표저인 블러링을 의도한다. 0에서 180까지의 커브(1140)는 검정 도트들의 범위를 나타낸다. 75에서 250까지의 커브(1141)는 흰 도트들의 범위를 나타낸다. 그러나 블러링이 커질수록, 두개의 커브들이 범위의 중심을 향해 더 많이 이동하고, 그러므로 교차 영역이 많아지며, 이는 주어진 도트가 검정인지 흰색인지를 결정하기가 더 힘들어진다는 것을 의미한다. 교차의 중심점에서 픽셀 값은 모호하다 - 도트가 검정 또는 흰색일 가능성이 동일하다.
블러링이 증가될수록 , 판독 비트 에러의 가능성이 커진다. 운좋게도, 리드-솔로몬 디코딩 알고리즘은 t 심볼 에러들로 이것을 극복할 수 있다. 도 65는 주어진 특정한 심볼 에러율로 복원할 수 없는 대체 아트카드 리드-솔로몬 블럭들의 예상되는 수의 그래프이다. 리드-솔로몬 디코딩 스킴(scheme)이 얼마나 잘 수행되는지를 보고 그 후 실질적으로 선명도가 떨어진다. 만일 리드-솔로몬 블럭 복제가 없다면, 단지 1개의 블럭이 데이터를 위해 복원할 수 없는 에러를 필요로 한다. 물론, 블럭 복제로, 대체 아트카드 디코딩의 기회가 증가된다.
도 66는 에러로 리드-솔로몬 블럭들의 갯수에 대응하는 심볼(바이트) 에러들을 나타낸다. 극복할 수 있는, 프로세스가 완료된 카드 손상량과 비교하여 블러링의 양 사이의 변환이다. 모든 에러 검출과 보정이 리드-솔로몬 디코더에 의해 수행되기 때문에, 극복되어질 수 있는 리드-솔로몬 데이터 블럭마다 한정된 수의 에러 들이 있다. 블러링을 통해 도입된 에러들이 많을수록, 대체 아트카드 손상에 기인하여 극복될 수 있는 에러들의 갯수가 줄어든다.
대체 아트카드 디코딩의 개요
이전에 나타낸 것처럼, 사용자가 대체 아트카드를 대체 아트카드 판독기 유닛 안으로 삽입할 때, 모터 수송이 대체 아트카드를 흑백의 선형 CCD 이미지 센서를 지나서 운반된다. 카드는 프린트된 해상도에서 3번씩 각 치수에서 샘플된다. 대체 아트카드 판독 하드웨어와 소프트웨어는 1도 이상 회전, 모터 수송에 기인한 지터 및 진동, 대체 아트카드와 CCD 거리의 변수들에 기인한 블러링을 위해 보상된다. 데이터의 디지털 비트 이미지는 여기서 설명된 복잡한 방법들에 의해 샘플된 이미지로부터 추출된다. 리드-솔로몬 디코딩은 대체 아트카드 상의 행 데이터의 25% 이상의 임의로 분포된 데이터를 보정한다. 보정된 데이터의 대략 1MB가 1600dpi 카드로부터 추출된다.
디코딩을 포함하는 단계들은 도 67에서 나타내어진다.
디코딩 프로세스는 다음의 단계들을 요구한다.
* 대체 아트카드를 3배의 프린트된 해상도로 스캔(114)(즉, 1600dpi 대체 아트카드를 4800dpi로 스캔)
* 카드 상의 스캔된 도트들로부터 데이터 비트맵(bitmap)을 추출(1145)
* 대체 아트카드가 뒤쪽에서 삽입된다면 비트맵을 보존(1146)
* 인코드된 데이터를 언스크램블(1147)
* 리드-솔로몬은 비트맵으로부터 데이터를 디코드한다(1148)
알고리즘의 개요
단계 1 - 실시간 비트 이미지 추출
이용가능한 메모리(4MB) 및 1600dpi 대체 아트카드를 위해 스캔된 모든 픽셀들을 저장하도록 요구되는 메모리(172.5MB) 사이의 간단한 비교는 카드가 여러번(실제 선택이 아닌) 판독되지 않더라도, 대체 아트카드가 CCD를 지나 이동되어지는 동안, 실시간으로, 픽셀 데이터로부터의 비트맵의 추출이 플라이(fly) 상에서 완료되어지는 것이 나타난다. 2개의 태스크(task)들은 이 단계에서 이루어진다:
* 4800dpi로 대체 아트카드를 스캔
* 카드 상에 스캔된 도트들로부터 데이터 비트맵을 추출
비트 이미지의 회전과 언스크램블링이 모든 비트 이미지가 추출되어질 때까지 발생되지 않을 수 있다. 그러므로, 추출된 비트 이미지를 저장하는 메모리 영역을 정렬할 필요가 있다. 비트 이미지는 추출 프로세스에서 사용되어진 2MB를 남겨두고, 2MB 내에서 쉽게 맞춰진다.
CCD로부터의 픽셀들의 현재 스캔라인에서만 보여지는 동안 비트 이미지를 추출하는 것보다, 마지막 N 스캔라인들의 판독을 저장하여, 대체 아트카드 상에 윈도우로써 활동하는 버퍼(buffer)를 할당하는 것이 가능하다. 메모리 요구들은 이 방법(172.5MB가 요구됨)으로 저장되어질 전체의 대체 아트카드를 허용하지 않을 뿐만 아니라, 190개의 픽셀 열들(각 스캔라인은 11,000 바이트들 이하로)을 저장하는 2MB를 할당하는 것이 비트 이미지 추출 프로세스를 간단하게 만든다.
그러므로 4MB 메모리는 다음과 같이 사용된다:
* 추출된 비트 이미지를 위한 2MB
* 스캔된 픽셀들을 위한 ~2MB
* 단계 1의 스크래치 데이터를 위한 1.5KB(알고리즘에 의해 요구되어짐)
이는 대체 아트카드로 CCD와 물리적인 로드(load)들을 지나는 데 걸리는 시간이 있기 때문에, 단계 1에서 걸리는 시간이 1.5초이다.
단계 2 - 비트 이미지로부터 데이터 추출
일단 비트 이미지가 추출되면, 언스크램블되고 실질적으로 180°회전되어진다. 그리고 나서 디코드되어진다. 단계 2는 대체 아트카드가 움직임을 멈추어야 하므로, 실시간 요구들은 아니고, 경과 시간의 사용자의 지각에 관계된다. 그러므로 단계 2는 대체 아트카드를 디코딩하는 여분의 태스크들을 포함한다:
* 대체 아트카드가 뒷쪽에서 삽입되어 보존되는, 비트 이미지를 재구성
* 인코드된 데이터를 언스크램블
* 리드-솔로몬은 비트 이미지로부터 데이터를 디코드한다.
단계 2의 입력은 2MB 비트 이미지 버퍼이다. 언스크램블과 회전이 원 상태로 수행되지 않을 수 있으므로, 제 2의 2MB 버퍼가 요구된다. 단계 1에서 스캔된 픽셀들을 저장하는 데 사용되는 2MB 버퍼는 더이상 요구되지 않고, 회전된 언스크램블된 데이터를 저장하여 사용될 수 있다.
리드-솔로몬 디코딩 태스크는 언스크램블된 비트 이미지이고 910,082 바이트들로 디코드한다. 디코딩이 원 상태로 수행될 수 있거나, 특정한 위치가 될 수 있 다. 디코딩 프로세스는 부가적인 메모리 버퍼들을 요구하지 않는다.
그러므로 4MB 메모리는 다음으로 사용된다:
* 추출된 비트 이미지를 위한 2MB(단계 1로부터)
* 비트 이미지를 언스크램블하고, 실질적으로 회전하기 위한 ~2MB
* 단계 2의 스크래치 데이터를 위한 <1KB(알고리즘에 의해 요구됨)
단계 2에 걸리는 시간은 독립적인 하드웨어이고, 리드-솔로몬 디코딩을 위해 걸리는 시간에 의해 바운드된다. LSI 로직의 L64712와 같은 전용 코어를 사용하거나, 등가의 CPU/DSP 결합을 사용하여, 단계 2는 0.32초가 걸리는 것이 측정된다.
단계 1 - 비트 이미지 추출
이것은 알고리즘의 실시간 단계이고, CCD에 의해 스캔되어진 것처럼 대체 아트카드로부터 비트 이미지를 추출하는 것과 관련된다.
도 68에서 나타낸 것처럼 단계 1은 2개의 비동기화 프로세스 흐름들로 나뉠 수 있다. 이 흐름들의 제 1은 DRAM에 픽셀들을 기록하는, CCD로부터의 대체 아트카드 픽셀들의 간단한 실시간 판독기이다. 제 2 흐름은 픽셀들을 보는 것과 비트들을 추출하는 것에 관련된다. 제 2 프로세스 흐름은 2개의 프로세스들로 나뉘게 된다. 제 1 프로세스는 대체 아트카드의 시작을 위치하는 것과 관련된, 전체 프로세스가다. 제 2 프로세스는 적절한 비트 이미지 추출이다.
도 69는 데이터/프로세스 투시로부터의 데이터 흐름을 나타낸다.
타이밍
전체의 1600dpi 대체 아트카드를 위해, 최대 16,252개의 픽셀-열들을 판독할 필요가 있다. 전체 대체 아트카드를 위해 1.5초의 총 시간이 주어져, 이는 다양한 프로세스들의 코스 동안 픽셀 열마다 최대 92,296ns의 시간이 걸린다.
프로세스 1 - CCD로부터 픽셀들 판독
CCD는 4800dpi로 대체 아트카드를 스캔하고, 열 당 11,000개의 1-바이트 픽셀 샘플들을 생성한다. 이 프로세스은 간단하게 CCD로부터 데이터를 가져오고, DRAM으로부터 픽셀 데이터를 판독하고, 다른 프로세스와 완전히 독립적으로, DRAM에 기록한다. 도 70은 관련된 단계들을 나타낸다.
픽셀들은 픽셀들의 190개의 완전한 열들을 저장할 수 있는 2MB 버퍼에 연속하여 기록된다. 버퍼는 항상 190개의 열들 대부분을 최근에 판독함을 유지한다. 따라서, 픽셀 데이터를 판독해야하는 프로세스(프로세스들 2, 3과 같은)은 첫째로, 주어진 열을 찾는 장소를 알아야하고, 둘째로, 요구된 데이터가 버퍼에 실제 있는 지를 확신하도록 충분히 빨라야 한다.
프로세스 1은 다른 프로세스들에서 이용가능한 CurrentScanLine를 가지므로, 아직 판독되지 않은 스캔라인들로부터 픽셀들을 액세스하지 않음을 확신할 수 있다.
DRAM에 단일 열의 데이터(11,000 바이트)를 기록하는 데 걸리는 시간은:
11,000/16*12 = 8,256ns이다.
그러므로 프로세스 1은 이용가능한 DRAM 대역폭(8256/92296)의 9% 이하를 사용한다.
프로세스 2 - 대체 아트카드의 시작을 검출
이 프로세스는 스캔된 대체 아트카드 상의 활동 영역을 위치하는 것과 관련된다. 이 단계의 입력은 DRAM(프로세스 1에 의해 위치된)으로부터의 픽셀 데이터이다. 출력은 프로세스 3에서 입력으로 요구되어진, 대체 아트카드 상의 처음의 8개의 데이터 블럭들을 위한 바운드들의 세트이다. 이 프로세스의 높은 레벨의 개요는 도 71에서 보여질 것이다.
대체 아트카드는 삽입 위의 1mm의 수직 슬롭(slop)을 가질 수 있다. 1도의 회전으로 1.5mm(86 sin1°)의 수직 슬롭이 있다. 따라서, 총 2.5mm의 수직 슬롭이 있다. 1600dpi에서, 이는 약 160 도트들의 슬롭과 동일하다. 단일 데이터 블럭이 단지 394 도트들만큼 높기 때문에, 슬롭은 데이터 블럭의 절반 아래에 있다. 데이터 블럭들이 위치되어 더 나은 측정을 얻기 위해서 대체 아트카드는 검출되어질 필요가 있다.
그러므로 프로세스 2는 2개의 부분들을 구성한다:
* 대체 아트카드의 시작을 위치하기.
* 대체 아트카드의 시작을 기반으로 처음의 8개의 데이터 블럭들의 바운드들을 계산한다.
대체 아트카드의 시작을 위치시키기
대체 아트카드 영역 외부의 스캔된 픽셀들은 검정색이다(표면은 검은 플라스틱 또는 다른 무반사 표면일 수 있다). 대체 아트카드 영역의 경계는 흰색이다. 차례로 픽셀 열들을 프로세스하고 검정 또는 흰색으로 픽셀들을 여과하면, 검정에서 흰색으로의 천이점이 대체 아트카드의 시작을 표시할 것이다. 가장 높은 레벨의 프 로세스는 다음과 같다:
ProcessColumn 함수는 간단하다. 스캔된 열의 2개 영역들로부터의 픽셀들이 검정 또는 흰색인지를 결정하는 문턱(threshold) 필터를 통과된다. 그리고 나서 특정한 갯수의 흰색 픽셀들을 기다리고 주어진 갯수가 검출되면 대체 아트카드의 시작을 알릴 수 있다. 픽셀열을 프로세스하는 로직이 다음의 의사코드에서 나타내어진다. 대체 아트카드가 열 사이에서 검출되지 않으면 0이 리턴된다. 그렇지 않으면 검출된 위치의 픽셀 갯수가 리턴된다.
데이터 블럭 바운드들 계산하기
이 단계에서, 대체 아트카드가 검출된다. 대체 아트카드의 회전에 의해, 대체 아트카드의 상부가 검출되거나 대체 아트카드의 하부부분이 검출된다. 프로세스 2의 제 2 단계는 대략 단계 3을 위한 데이터 블럭 바운드들을 검출하고 정하는 것을 결정한다.
단계 3에서 보여지는 것은 데이터 블럭 세그먼트 바운드들(data block segment bounds) 상에서 행해지는 것을 나타낸다: 각 데이터 블럭은 데이터 블럭의 데이터 영역을 위치시키기 위해 타깃들을 찾는 위치를 결정하는 StartPixel과 EndPixel을 가진다.
픽셀값이 카드의 상부 절반에 있다면, 간단히 제 1 StartPixel 바운드들로 사용될 수 있다. 픽셀값이 카드의 하부 절반에 있다면, 뒤로 이동할 수 있으므로, 픽셀값은 마지막 세그먼트의 EndPixel 바운드들이다. 대체 아트카드의 데이터 크기에 이해 앞으로 또는 뒤로 나아가고, 따라서 적절한 바운드들로 각 세그먼트를 설정한다. 대체 아트카드로부터 데이터를 추출하는 것을 시작할 준비가 되어 있다.
MaxPixel값은 프로세스 3에 정의되고, SetBounds 함수는 간단하게 StartPixel과 EndPixel을 0과 MaxPixel으로 고정되도록 정해진다.
프로세스 3 - 픽셀들로부터 비트 데이터 추출하기
이는 대체 아트카드 판독기 알고리즘의 핵심이다. 이 프로세스는 CCD 픽셀 데이터로부터의 비트 데이터를 추출하는 것과 관련된다. 프로세스는 본질적으로 프로세스 2에 의해 생성된 스크래치 정보를 기본으로, 픽셀 데이터로부터의 비트-이미지를 생성하고, 프로세스 3에 의해 유지된다. 프로세스의 높은 레벨의 개요는 도 72에서 나타내어질 것이다.
대체 아트카드의 픽셀 열을 판독하고 데이터 블럭에 따른 픽셀들을 결정하는 것보다, 프로세스 3이 다른 방법으로 수행한다. 주어진 데이터 블럭의 픽셀들을 찾는 곳을 안다. 8개의 세그먼트들로 논리적인 대체 아트카드를 나눔에 의해 이를 행하고, 각각은 도 73에서 나타낸 것과 같은 8개의 데이터 블럭들을 포함한다.
나타내어진 세그먼트들은 논리적인 대체 아트카드와 맞춘다. 물리적으로, 대체 아트카드는 몇몇의 합계에 의해 회전되어질 수 있다. 세그먼트들이 논리적인 대체 아트카드 구조로 고정을 유지하고, 따라서 독립적인 회전이다. 주어진 세그먼트는 2가지 상태들 중 하나를 가질 수 있다:
* LookingForTargets : 이 세그먼트를 위한 정확한 데이터 블럭 위치가 아직 결정되지 않았다. 타깃들은 세그먼트 바운드들에 의해 나타내어진 바운드들로 픽셀 열 데이터를 스캐닝함에 의해 위치되어진다. 데이터 블럭이 타깃들을 거쳐 위치되고, 바운드들이 검정과 흰색으로 설정하면, 상태는 ExtractingBitImage로 변화 한다.
* ExtractingBitImage : 데이터 블럭이 정확하게 위치되고, 비트 데이터가 하나의 도트 열에 추출되어지고 대체 아트카드 비트 이미지로 기록된다. 다음의 데이터 블럭 클럭마크들은 회전에 상관없이 정확한 도트 복원을 제공하고, 따라서 세그먼트 바운드들이 무시된다. 전체의 데이터 블럭이 추출되면, 새로운 세그먼트 바운드들이 현재 위치를 기반으로 다음의 데이터 블럭을 계산한다. 상태는 LookingForTargets로 변화한다.
이 프로세스는 모든 64개의 데이터 블럭들이 추출될 때, 각 영역으로부터 8개가 완성된다.
각 데이터 블럭은 데이터의 595개의 열들을 구성하고, 각 열들은 48 바이트로 되어 있다. 바람직하게, 데이터 블럭을 위한 2개의 방향 열들은 데이터 블럭당 추출되는 총 28,656 바이트들을 제공하여, 각각이 48바이트들로 추출된다. 간단하게, 메모리의 2MB는 64 x 32K 덩어리들로 나뉠 수 있다. 주어진 세그먼트를 위한 n번째 데이터 블럭은 위치에 저장된다:
StartBuffer + (256K*n)
세그먼트들을 위한 데이터 구조
각 8개의 세그먼트들은 연합된 데이터 구조를 가진다. 각 세그먼트를 정의하는 데이터 구조는 스크래치 데이터 영역에 저장된다. 구조는 다음 표처럼 설정될 수 있다:
프로세스 3의 높은 레벨
프로세스 3은 간단하게 세그먼트들 각각을 통해 반복하고, 세그먼트들의 현 재 상태에 의존하여 단일 라인의 프로세스를 수행한다.
프로세스 3은 특정한 시간후에 종료되지 않더라도 외부 제어 프로세스에 의해 정지될 수 있다. 이는 데이터가 추출되어지지 않은 경우일 것이다. 간단한 메카니즘은 프로세스 1이 대체 아트카드 판독을 끝낸 후에 카운트다운을 시작한다. 프로세스 3이 그 시간에 끝나지 않더라도, 대체 아트카드로부터 데이터가 복원되지 않을 수 있다.
CurrentState = LookingForTargets
타깃들이 픽셀들의 열들을 판독함에 의해, 픽셀들(StartPixel과 EndPixel사이에서)의 주어진 대역 내에서 도트들을 검출하는 것보다 하나의 픽셀-열을 판독함에 의해 검출되고, 픽셀들의 특정 패턴들이 검출된다. 픽셀 열들은 모든 타깃들이 찾아질 때까지 또는, 특정한 수의 열들이 프로세스되어질 때까지 프로세스된다. 동시에 타깃들이 프로세스되어질 것이고 데이터 영역은 클럭마크들을 거쳐 위치된다. 이 상태는 데이터가 추출되어지는 것을 의미하는 ExtractingBitImage로 변화한다. 값이 있는 타깃들이 충분히 위치되지 않다면, 데이터 블럭은 무시되고, 잃은 데이터 블럭 내에서 열을 건너뛰고, 그리고 나서 다음의 데이터 블럭에서 타깃들을 찾기 위한 프로세스를 다시 시작한다. 이것은 다음의 의사코드(pseudocode)에서 나타 내어질 수 있다:
ProcessPixelColumn
각 픽셀 열은 특정한 바운드들(StartPixel과 EndPixel 사이)안에서 타깃들을 확인할 픽셀들의 특정 패턴들을 찾도록 프로세스된다. 단일의 타깃(타깃 번호 2)의 구조는 도 54에서 이미 나타내어져 있다:
뷰(view)의 픽셀 점으로부터, 타깃이 다음에 의해 확인될 수 있다:
* 타깃의 제 1 부를 구성하는 다수의 연속되는 검정 픽셀들을 구성하는 다수의 픽셀 열들인, 왼쪽 검정 영역
* 검정 열들의 중심에 있는 흰색 영역인, 타깃 중심
* 타깃 중심의 뒤에 2개의 검정 도트 열들인, 제 2 검정 영역
* 그 길이에 의해 타깃 번호를 정의하는 검정을 둘러싼 흰색 영역인, 타깃 번호
* 타깃 번호 뒤의 2개의 검정 열들인, 제 3 검정 영역
요구되는 프로세스의 개요가 도 74에서 나타내어진다.
확인은 단지 검정 또는 흰색 픽셀들에서 신뢰되기 때문에, 각 열로부터의 픽셀들(1150)은 검정 또는 흰색을 검출하는 필터(1151)를 통과하고, 실행 길이 인코드(1152)한다. 실행 길이들은 마지막 3개의 실행 길이들과 4번째의 마지막 색상을 액세스하도록 상태 기계(1153)로 통과된다. 이 값들을 기반으로, 가능한 타깃들은 각각의 확인 단계들을 통과한다.
GatherMin&Max 프로세스(1155)는 세그먼트의 프로세스 동안에 마주치게 되는 최소 및 최대 픽셀 값들을 간단히 유지한다. 이는 BlackMax, WhiteMin 및 MidRange 값들을 설정하도록 위치되어지는 타깃들이 사용된다.
각 세그먼트는 타깃들을 찾도록 타깃 구조들의 세트를 유지한다. 타깃 구조들이 메모리에서 움직이지 않지만, 몇몇의 세그먼트 변수들은 이 타깃 구조들에서 포인터들(pointers)의 리스트들(lists)을 가리킨다. 3개의 포인터 리스트들은 여기 서 반복된다:
각각의 리스트 포인터들과 연합된 카운터들이 있다: TargetsFound, PossibleTargetCount 및 AvailableTargetCount
대체 아트카드가 로드되기 전에, TargetsFound와 PossibleTargetCount는 0으로 설정되고, AvailableTargetCount은 28(타깃 경계의 최소 크기가 40 픽셀들이고, 데이터 영역이 대략 1152 픽셀들이기 때문에, 연구하에서 가질 수 있는 타깃 구조들의 최대 갯수)로 정해진다. 타깃 포인터 레이아웃(layout)의 예는 도 75에서 나타내어진다.
실질적인 새로운 타깃들이 찾아지면, AvailableTargets 리스트(1157)로부터 주어지고, 타깃 데이터 구조는 업데이트되고, 구조에서의 포인터는 PossibleTargets 리스트(1158)에 추가된다. 타깃이 완전히 검증되면, LocatedTargets 리스트(1159)가 추가된다. 가능한 타깃이 타깃이 되지 않는다면, AvailableTargets 리스트(1157)로 되돌아온다. 따라서, 항상 28개의 타깃 푄터들은 리스트들 사이에서 이동하며, 순환하고 있다.
타깃 데이터 구조(1160)는 다음의 형태를 가질 수 있다:
파인드 타깃 모듈(find targets module, 1162)(도 74) 내의 ProcessPixelColumn 함수가 차례로 실행 길이들 모두를 통과하고, 존재하는 가능 타깃들(StartPixel을 거쳐)에 반대되는 실행들과 비교하여, 실제의 타깃이 이전에 알려지지 않은 곳에서 찾아진다면 새로운 가능 타깃들을 생성한다. 모든 경우들에서, 비교는 S0.색상이 흰색이고 S1.색상이 검정일 때 행해진다.
ProcessPixelColumn을 위한 의사코드가 바로 아래에서 시작한다. 제 1 타깃이 양으로 확인되면, 타깃들을 위해 체크되어진 마지막 열은 그로부터 최대 거리 내에 있도록 결정될 수 있다. 1°회전에 대해, 최대 거리는 18개의 픽셀 열들이다.
AddToTarget은 주어진 타깃들로 특정 실행을 추가될 수 있는 지 아닌지를 결정하는 파인트 타깃 모듈 내의 함수이다.
* 실행이 타깃의 시작 위치의 허용성 내에 있다면, 실행은 현재의 타깃과 직접 관련되고, 그러므로 그것으로 받아들여질 수 있다.
* 실행이 타깃 전에 시작된다면, 존재하는 타깃이 여전히 ok이지만, 실행에 관계되지 않는다. 그러므로 타깃이 변화되지 않고, FALSE의 리턴값이 발신자에게 실행이 받아들여지지 않았다는 것을 말한다. 그 결과로서 발신자는 모든 새로운 타깃이 시작되는 것을 보고 실행을 체크할 수 있다.
* 실행이 타깃 이후에 시작되면, 타깃은 더이상 가능 타깃에 없다. 그 상태는 NotATarget으로 변화되고, TRUE의 리턴값이 돌아온다.
실행이 타깃으로 받아들여지면, 특정 작동이 현재 상태를 기반으로 수행되고, S1, S2, S3에서 실행들을 정한다. AddToTarget 의사코드는 다음과 같다:
픽셀 실행들의 형태들은 다음에서 나타나는 DetermineRunType로 확인된다:
EvaluateState 과정이 현재의 상태와 실행 형태에 따라 작동된다.
작동들은 다음의 표의 형태로 나타내어진다:
프로세스 타깃들
위치된 타깃들(LocatedTargets 리스트에 있는)은 그들이 위치되는 상태에서 저장된다. 대체 아트카드의 회전에 따라, 이 타깃들은 오름 픽셀 순서 또는 내림 픽셀 순서로 되어 있을 것이다. 게다가, 타깃들로부터 복원되는 타깃 수들은 에러가 될 수 있다. 또한 잘못된 타깃을 복원시킬 수도 있다. 클럭마크 평가들이 얻어지기 전에, 타깃들은 값이 없는 타깃들이 폐기되고, 값이 있는 타깃들이 에러 상태일 때 고정된 타깃 갯수들(즉, 오염에 의한 손상된 타깃 갯수)을 가지는 것을 확실하게 프로세스하는 것이 필요하다. 2개의 주된 단계들이 포함된다:
* 오름 픽셀 순서로 타깃들을 정렬
* 에러있는 타깃 갯수들을 위치 및 고정
제 1 단계는 간단하다. 타깃 검색의 본질은 데이터가 오름 픽셀 또는 내림 픽셀로 정렬되어짐을 의미한다. 간단한 스왑(swap) 정렬은 6개의 타깃들이 이미 올바르게 정렬되었다면 최대 14개의 비교들이 스왑들 없이 행해지는 것이 확실하다. 데이터가 정렬되지 않으면, 14개의 비교들은 3번의 스왑으로 행해진다. 다음의 의사코드가 정렬 프로세스을 나타낸다:
에러있는 타깃 갯수들을 위치하고 고정하는 것은 단지 조금 복잡할 뿐이다. 각 N 타깃들의 파운드는, 보정되도록 가정된다. 다른 타깃들은 이 "보정된" 타깃과 비교하고 타깃 N이 올바르게 변화하도록 요구하는 다수의 타깃들은 카운트된다. 다수의 변화들이 0이라면, 모든 타깃들은 이미 보정된 것이다. 그렇지 않으면 다른 것들과 조금의 변화들을 요구하는 타깃은 변화를 기반으로 사용된다. 변화는 주어진 타깃의 타깃 갯수와 픽셀 위치가 "보정된 " 타깃의 픽셀 위치와 타깃 갯수가 비교될 때 상호관련되지 않으면 기록된다. 변화는 타깃의 타깃 갯수를 업데이트하는 것을 의미할 수 있거나, 타깃의 제거를 의미할 수도 있다. 오름 타깃들은 오름 순 서로 픽셀들을 가지는 것을 가정할 수 있다(그들이 이미 분류되었기 때문에).
대부분의 경우들에서, 이 함수는 변화들이 요구되지 않은 것을 의미하는, bestChanges = 0으로 종결될 수 있다. 그렇지 않으면 변화들이 받아들여질 필요가 있다. 변화들을 받아들이는 기능은 targetNumber로 비교할 때까지 변화들을 카운팅 하는 것(위의 의사코드에서)과 동일하다. 변화 응용은 다음과 같다:
변화 루프의 끝에서, LocatedTargets 리스트는 컴팩트(compact)할 필요가 있고 모든 NULL 타깃들이 제거된다.
이 과정의 끝에서, 타깃들은 거의 없을 수 있다. 타깃들의 나머지가 무엇이든지 클럭마크들과 데이터 영역을 위치하여 사용되도록 할 수 있다(적어도 2개의 타깃들이 사용된다).
타깃들로부터 만들어내는 클럭마크 측정들
도 55에서 나타낸 것처럼, 상부 영역들의 제 1 클럭 마트 도트(1126)는 제 1 타깃(1124)의 중심으로부터 떨어진(타깃 중심들 사이의 거리가 동일하다) 55개의 도트들이다. 클럭마크 도트들의 중심은 1개의 도트와 더 떨어져 있고, 검정 경계선(1123)은 제 1 클럭마크 도트로부터 더 떨어진 4개의 도트들이다. 하부 영역의 제 1 클럭마크 도트는 상부 영역의 제 1 클럭마크 도트(1126)으로부터 7개의 타깃들-거리(7 x 55 도트들)가 더 떨어져 있다.
타깃들(1, 6)이 위치되어 있는 것이 가정되지 않을 수 있으므로, 최상부와 최하부 타깃들이 사용될 필요가 있고 타깃 갯수들을 타깃들이 이용되어지는 것이 결정하는 데에 사용한다. 이 점에서 적어도 2개의 타깃들이 필요하다. 게다가, 타깃 중심들은 실제 타깃 중심들의 측정들이다. 타깃 중심이 더 정확하게 위치된다. 타깃의 중심이 검정으로 둘러쌓인, 흰색이다. 그러므로, 픽셀 및 열 치수들에서 공간의 최대값을 찾는 것이 필요하다. 이는 최대값이 정수 한계로(우리의 측정) 정확하게 정렬될 수 없기 때문에 연속되는 이미지를 재구성하는 것과 관련된다.
연속되는 이미지가 타깃의 중심 주위에서 구조될 수 있기 전에, 2개의 타깃 중심들의 더 나은 측정이 생성될 필요가 있다. 실제로 존재하는 타깃 중심들은 타깃 중심의 바운딩 박스(bounding box)의 왼쪽 상부 좌표이다. 타깃의 중심을 한정하는 영역을 위해 각각의 픽셀들을 통과하고, 가장 높은 값을 가지는 픽셀을 찾는 간단한 프로세스가다. 동일한 최대 픽셀 값을 가지는 하나의 픽셀 이상이 있을 수 있지만, 중심값의 측정은 단지 하나의 픽셀을 요구한다.
의사코드는 다음과 같고, 각 2개의 타깃들로 수행된다:
이 프로세스의 끝에서, 타깃 중심 좌표들은 실제 중심의 하나의 픽셀 내에 있는, 타깃의 가장 흰 픽셀을 가리킨다. 타깃 중심을 위한 더 정확한 위치를 만드는 프로세스은 측정된 타깃 중심의 측면에서 3개로, 타깃의 7개의 스캔라인 조각들로 연속적인 신호를 재구성하는 것을 포함한다. 7개의 최대 값들의 파운드(각각의 픽셀 치수 조각들 중 하나)는 그 후 열 치수에서 연속적인 신호를 재구성하고 따라서 치수에서 최대값을 위치하게 한다.
FindMax는 샘플 점들을 기반으로 원본 1개의 치수 신호를 재구성하고 최대값 파운드뿐만 아니라 최대값의 위치를 리턴하는 함수이다. 사용되는 신호 재구성/재샘플링의 방법은 도 76에서 나타난 것과 같은 Lanczos 3 윈도우드 싱크 함수(windowed sinc function)이다.
Lanczos 3 윈도우드 싱크 함수는 측정된 위치 X, 즉, X-3, X-2, X-1, X, X+1, X+2, X+3에서 재구성되고, 중심되어질 치수로부터 7개(픽셀) 샘프들이 구해진 다. X-1에서 X+1까지 0.1의 간격으로 각각을, 점들을 재구성하고, 점이 최대인 것을 결정한다. 최대값인 위치가 새로운 중심이 된다. 커넬의 본질에 기인하여, 단지 6개의 엔트리들이 X와 X+1사이의 점들에서 컨볼루션(convolution) 커넬로 요구된다. 요구되는 픽셀들의 몇몇이 동일하기 때문에, X-1에서 X+1까지의 픽셀 값들을 얻기 위해서 모두 7개의 점들에서 요구하여, X-1에서 X를 위한 6개의 점들과 X에서 X+1을 위한 6개의 점들을 사용한다.
최상부의 타깃부터와 최하부 타깃까지를 위해 주어진 정확한 측정들은, 다음에 따라 상부 및 하부 영역들을 위한 제 1 클럭마크 도트의 위치를 계산할 수 있다:
이는 제 1 클럭마크 도트를 얻게한다. 데이터 영역으로부터 떨어진 1개의 도트를 열 위치로 클럭마크의 중심으로 도달시키기 위해 이동하는 것이 필요하다. 떨어진 4개의 도트들을 픽셀 위치로 경계선의 중심에 도달시키기 위해 이동하는 것도 필요하다. deltaColumn과 deltaPixel을 위한 의사코드 값들은 55개의 도트 거리(타 깃들 사이의 거리)에 기반하므로, 이 델타들(deltas)은 클럭마크 좌표들로 받아들여지기 전에 개별적으로 1/55와 4/55에 의해 스케일된다. 이는 다음처럼 나타내어진다:
UpperClock과 LowerClock은 타깃들의 중심들을 가지는 라인에서 직접 제 1 클럭마크들로 값이 있는 클럭마크 측정들이다.
검정 및 흰색 픽셀/도트 범위들의 세팅
데이터가 데이터 영역으로부터 추출되기 전에, 검정 및 흰색 도트들을 위한 픽셀 범위들은 확인해야할 필요가 있다. 타깃들을 찾는 동안의 최소 및 최대 픽셀들은 개별적으로 WhiteMin과 BlackMax에 저장되지만, 데이터 추출에 관련하여 이 변수들을 위한 값이 있는 값들을 나타내지는 않는다. 단지 저장의 편리성을 위해 사용된다. 다음의 의사코드는 마주치는 최소 및 최대 픽셀들을 기반으로 WhiteMin 및 BlackMax를 위한 값들을 얻는 방법을 나타낸다:
CurrentState = ExtractingBitImage
ExtractingBitImage 상태는 데이터 블럭이 이미 타깃들을 거쳐 정확하게 위치되는 것이고, 비트 데이터는 현재 하나의 도트 열을 추출하고 대체 아트카드 비트 이미지에 기록된다. 다음의 데이터 블럭 클럭마크들/경계들은 회전에 관계없이 정확한 도트 회복을 제공하고, 다라서 세그먼트 바운드들이 무시된다. 전체의 데이터 블럭이 (각 48 바이트들의 597개의 열들 = 데이터의 595개의 열들 + 2개의 방위 열들)에서 추출되면, 새로운 세그먼트 바운드들이 현재 위치를 기반으로 다음의 데이터 블럭을 위해 계산된다. 상태는 LookingForTargets으로 변화된다.
주어진 도트 열을 프로세싱하는 것은 2개의 태스크들(tasks)을 포함한다:
* 제 1 태스크는 클럭마크들을 거쳐 데이터의 특정 도트 열을 위치시키는 것이다.
* 제 2 태스크는 도트 당 하나의 비트, 비트값들을 모으는 도트 열을 찾아내는 것이다.
이 2개의 태스크들은 열을 위한 데이터가 대체 아트카드를 판독하고 DRAM으로 전달한다면 착수될 수 있다. 이는 스캔라인 프로세스 1이 시작되는 지를 체킹하고, 클럭마크 열들과 비교함에 의해 결정될 수 있다. 도트 데이터가 DRAM에 있다면, 클럭마크들을 업데이트할 수 있고 그리고 나서 다음의 도트 열로 클럭마크들을 측정된 값으로 진행하기 전에 그 열로부터 데이터를 추출한다. 프로세스 개요는 이 후에 설명되는 특정 함수들을 가지고, 다음의 의사코드로 제공된다:
도트 열을 위치시키기
주어진 도트 열은 도트들이 읽혀질 수 있고 데이터가 추출되기 전에 위치되는 것이 필요하다. 이는 데이터 블럭의 상부 및 하부 경계선들을 따라 클럭마크들/경계선을 뒤따름에 의해 이루어진다. 위상-고정-루프와 등가의 소프트웨어는 클럭마크들이 손상되더라도, 클럭마크 위치들의 좋은 측정들이 만들어질 것이 확실하다. 도 77은 코너(corner)가 타깃 영역, 흰색 행 및 검정 경계 라인으로 연장되는 클럭마크들(3)과 도트들 높이(1166)가 있다는 것을 나타내는 데이터 블럭의 상부 왼쪽의 예를 설명한다.
초기에, 제 1 검정 클럭마크 위치의 중심의 측정이 제공된다(타깃 위치들을 기반으로). 정확한 수직의 위치(픽셀)를 이루는 검정의 경계(1168)와, 정확한 수평의 위치(열)를 얻는 클럭마크(1166)를 사용한다. 이는 UpperClock과 LowerClock 위치들로 반영된다.
클럭마크 측정은 주어지고 주변에서 픽셀 데이터를 보기에 의해, 연속적인 신호가 재구성되고 정확한 중심이 결정된다. 클럭마크와 경계안에서 2개의 치수들을 발생되기 때문에, 이는 2번 수행되어야 할 단일의 하나-치수의 프로세스가다. 그러나, 기록되는 검정 클럭마크가 있는 경우, 매초 도트 열에서 수행된다. 흰색 클럭마크들을 위해, 그것에서 측정을 사용하고 남겨둔다. 대안적으로, 각 도트 열의 경계를 기반으로 픽셀 좌표를 업데이트 할 수 있다(늘 나타내기 때문에). 실제로, 수행되어질 해상도가 좋다면, 모든 다른 열에서 둘 다의 세로좌표들을 업데이트하기 충분하다. 그러므로 프로세스는 다음과 같이 된다:
주어진 허용성(MAX_CLOCKMARK_DEVIATION)보다 큰 편차가 있다면, 파운드 신호는 무시되고 최대 허용성에 의한 측정으로부터의 편차만이 받아들여진다. 이 점에 있어서, 기능은 위상-고정 루프의 기능과 비슷하다. 따라서 DetermineAccurateUpperDotCenter는 다음의 의사코드를 거쳐 이행된다:
DetermineAccurateUpperDotCenter는 경계로부터 클럭마크까지의 방향이 음의 방향(+3도트들보다 -3도트들)인 것만 제외하고, 동일하다.
GetAccuratePixel과 GetAccurateColumn은 단일 치수의 투시로부터만이 아닌,좌표가 주어지는 정확한 도트 중심을 결정하는 함수들이다. 정확한 도트 중심들을 결정하는 것은 신호 재구성의 프로세스이고, 최소 신호값이 찾는 위치를 발견한다(타깃 중심이 검정이 아닌 흰색이기 때문에, 신호의 최대값을 위치시키는 타깃 중심을 위치하는 것과 다르다). 이 응용을 위해 신호 재구성/재샘플링으로 선택된 방법 은 도 76을 참조하여 이전에 설명되었던 Lanczos3 윈도우드 싱크 함수이다.
클럭마크 또는 경계가 그러한 방법으로 손상될 수도 있다-아마 그것은 스크래치일 것이다. 재샘플링에 의해 회수되는 새로운 중심값이 허용성보다 커서 측정과 다르다면, 중심값은 단지 최대 허용성으로 이동된다. 값이 없는 위치라면, 데이터 회수를 위해 충분히 사용될 수 있고, 후의 클럭마크들은 위치를 재동기화할 것이다.
후속 도트들의 델타들과 제 1 데이터의 중심을 결정하기
일담 정확한 UpperClock과 LowerClock 위치가 결정되면, 열에서 다음의 도트들로 진행되기 위하여 중심 위치에 추가되어질 델타 양들(DataDelta)과, 제 1 데이터 도트(CurrentDot)의 중심을 계산할 수 있다.
첫째로 하는 일은 도트 열에서 델타들을 계산하는 것이다. 이는 LowerClock으로부터 UpperClock을 감산함에 의해 간단히 구할 수 있고, 그리고 나서 두 점들 사이의 도트들의 갯수에 의해 나뉘어진다. 실제로 대체 아트카드를 위한 상수이기 때문에, 도트들의 갯수의 역수에 의해 곱해질 수 있고, 곱셈은 더 빠르다. 픽셀과 열 치수들로 델타들을 얻기 위해 다른 상수들이 사용될 수 있다. 픽셀들에서 델타는 2개의 경계선들 사이의 거리이며, 열들에서 델타는 2개의 클럭마크들의 중심들 사이의 거리이다. 따라서, 함수 DetermineDataInfo는 2개의 부분들이다. 제 1은 의 사코드에 의해 제공된다:
이제 열의 제 1 데이터 도트의 중심을 결정할 수 있다. 클럭마크의 중심으로부터 제 1 데이터 도트의 중심까지의 2개의 도트들의 거리가 있고, 경계의 중심으로부터 제 1 데이터 도트의 중심까지 5개의 도트들이 있다. 따라서 함수의 제 2 부분은 의사코드에 의해 제공된다:
CurrentDot.column = UpperClock.column + (2*DataDelta.column)
CurrentDot.pixel = UpperClock.pixel + (5*DataDelta.pixel)
도트 열을 실행하기(Running down a dot column)
도트 열이 클럭마크들을 트래킹(tracking)하는 위상-고정 루프로부터 위치되기 때문에, 모든 나머지들은 열 아래로 각 도트의 중심에서 도트열을 샘플한다. 가변의 CurrentDot 점들은 현재 열의 제 1 도트의 중심에 결정된다. 간단한 DataDelta(2개의 추가 : 열 좌표 하나, 픽셀 좌표 하나)의 추가로 열의 다음 도트를 얻을 수 있다. 주어진 좌표에서 도트의 샘플이 구해지고, 도트의 중심을 나타내는 픽셀값이 결정된다. 픽셀값은 그 도트를 위한 비트값을 결정한다. 그러나 동일한 도트라인상의 2개의 둘러싸인 도트들로 중심값과 관계되는 픽셀값을 더 나은 비트 판단을 사용하기 위하여 사용할 수 있다.
추출되어지고 있는 도트열에서 도트들을 위한 모든 픽셀들이 라인의 2개의 단부들(클럭마크들)이 DRAM에 있기 때문에, DRAM에서 현재 로드되는 것은 확실하고, 그 2개의 클럭마크들 사이의 도트들 또한 DRAM 안에 있다. 부가적으로, 데이터 블럭 높이는 간단한 델타들이 라인의 길이를 가로지를 수 있도록 충분히 짧다(단지 384 도트정도). 카드가 8개의 데이터 블럭들의 높이로 나뉘어진 이유들 중의 하나는 단일의 데이터 블럭에 관한 카드의 전체 높이를 가로질러 동일한 고정된 보증을 가질 수 없기 때문이다.
데이터(48 바이트)의 단일 라인을 추출하는 높은 레벨 프로세스는 다음의 의사코드로 나타내어질 수 있다. 각 바이트에서의 dataBuffer 포인터 증가들은 데이터의 열들과 연속적인 바이트들이 연속적으로 저장되는 것을 확인하여, 저장된다.
GetPixel 함수는 도트 좌표(고정된 점)를 가지고, 2개의 선형의 보간을 거쳐 중심 픽셀값에서 도달되는 4개의 CCD 픽셀들을 샘플한다.
DetermineCenterDot 함수는 비트값이 결정되어지는 도트의 측면에 도트 중심들을 나타내는 픽셀값들을 가지고, 중심 도트의 비트 값의 값을 추측하게 된다. 도 64의 일반적인 블러링(blurring) 커브로부터, 고려되어야할 3개의 공통적인 경우들이 있다:
* 도트의 중심 픽셀값은 WhiteMin보다 낮고, 따라서 검정 도트이다. 그러므로 비트값은 1이다.
* 도트의 중심 픽셀값은 BlackMax보다 높고, 따라서 흰색 도트이다. 그러므로 비트값은 0이다.
* 도트의 중심 픽셀값은 BlackMax와 WhiteMin사이이다. 도트는 검정일 수도 있고, 흰색일 수도 있다. 비트의 값이 문제이다. 다수의 스킴들은 비트의 값으로 적절한 추측을 하도록 디자인될 수 있다. 이 스킴들은 복합성과 정확성을 균형잡고, 또한 몇몇의 경우들에서 사실로 기술을 구할 수 있지만, 보장되는 해결책은 없다. 잘못된 비트 결정의 경우들에서, 비트의 리드-솔로몬 심볼은 에러가 발생할 수 있고, 프로세스 2에서 리드-솔로몬 디코딩 단계에 의해 보정되어야 한다.
픽셀값이 BlackMax와 WhiteMin사이에 있는지로 도트의 값을 결정하는 스킴은 너무 복잡하지 않고, 좋은 결과들을 제공한다. 문제에서 도트의 왼쪽 및 오른쪽으로 도트 중심들의 픽셀 값을 그 값들이 중심 도트를 위해 더 가능성있는 값을 결정하도록 함을 이용하여, 사용한다:
* 양 측면에서의 2개의 도트들이 MidRange(평균 도트값)의 흰색측에 있다 면, 중심 도트가 흰색이라고 추측할 수 있고, "명확한" 흰색일 것이다. 확실하지 않은 영역에 있다는 사실은 도트가 검정을 나타낼 수 있고, 확실하지 않은 값이 흰색 도트들로 둘러쌓임에 의해 영향을 받을 수 있다. 그러므로 도트값은 검정으로 가정되고, 따라서 비트값은 1이다.
* 양 측면에서의 2개의 도트들이 MidRange(평균 도트값)의 검정측에 있다면, 중심 도트가 검정이라고 추측할 수 있고, "명확한" 검정일 것이다. 확실하지 않은 영역에 있다는 사실은 도트가 흰색을 나타낼 수 있고, 확실하지 않은 값이 검정 도트들로 둘러쌓임에 의해 영향을 받을 수 있다. 그러므로 도트값은 흰색으로 가정되고, 따라서 비트값은 1이다.
* 하나의 도트가 MidRange의 검정측 상에 있고, 다른 도트는 MidRange의 흰색측 상에 있다면, 우리는 간단하게 중심 도트값을 결정하게 된다. 중심 도트가 MidRange의 검정측 상에 있다면, 우리는 검정(비트값 1)을 선택한다. 그렇지 않다면, 흰색(비트값 0)을 선택한다.
그 로직은 다음에 의해 나타내어진다:
이로부터 주변의 픽셀값들을 사용하는 것은 중심 도트의 상태의 값의 좋은 지시를 제공할 수 있음을 나타낼 수 있다. 여기서 설명되어진 스킴은 동일한 행으로부터 도트들을 사용할 수 있지만, 단일의 도트 라인 이력(이전의 도트라인)을 사용하는 것은 대체 배열들일 수 있어서 수월할 수 있다.
다음의 열에서 클럭마크들을 업데이트하기
일단 열에서 제 1 데이터 도트의 중심이 결정된다면, 클럭마크 값들이 더이상 필요하지 않다. 데이터가 열에서 회복된 후에 다음 열에서 판독이 편리하게 업데이트된다. 클럭마크 방향이 도트열 아래로 도트들의 횡단에 수직하기 때문에, 열을 업데이트하는 픽셀 델타를 사용할 수 있고, 두개의 클럭들에서 픽셀을 업데이트 하는 열 델타를 뺄 수 있다.
이들은 다음의 도트열을 위한 추정(estimate)이다.
타이밍
타이밍 조건은 DRAM 이용이 100%를 넘지 않는 한 만족될 것이며, 알고리즘 DRAM 이용에 의해 곱해진 평행 알고리즘 타이밍의 추가는 100%를 넘지 않는다. DRAM 이용은 DRAM의 9%를 소비하여, 연속적인 방법으로, 각 픽셀을 기록하는, 프로세스 1과 관련되어 설명된다.
이 부분에서 설명되어진 타이밍은 DRAM이 대체 아트카드 판독기 알고리즘의 요구들을 쉽게 프로세스하는 것을 나타낸다. 그러므로 타이밍 병목(bottleneck)은 DRAM 액세스가 아닌, 로직 속도에 관한 알고리즘의 이행일 것이다. 그러나, 알고리즘들은 간단한 아키텍쳐들(architectures)로, 각 메모리 사이클에서 로직의 작동들의 최소 갯수를 요구하도록 디자인되었다. 이런 뷰(view)의 점으로부터, 이행 상태 기계 또는 등가의 CPU/DSP 아키텍쳐가 다음의 부분들에서 설명되어지는 것처럼 수행되어지므로, 타깃 속도가 직면할 것이다.
타깃들을 위치시키기
타깃들은 픽셀 열의 경계들 내에서 픽셀들을 판독함에 의해 위치된다. 각 픽셀은 대부분 판독된다. 충분히 빠르게 작동하는 런-랭스(run-length) 인코더를 가 정하면, 타깃들의 위치 상의 바운드들은 메모리 액세스이다. 그러므로 액세스들은 프로세스 1에서 DRAM 대역폭의 9% 이용을 의미하는, 타이밍보다 더 나쁠 수는 없을 것이다.
타깃을 위치시키는(프로세스 1을 포함) 동안에 타깃 위치결정기가 항상 대체 아트카드 이미지 센서 픽셀 판독기에 집중되어 있음을 의미하므로, DRAM의 총 이용은 18%이다.
타깃들의 프로세싱
타깃 갯수들을 정렬하기와 확인하기를 위한 타이밍은 아주 작다. 각 2개의 타깃 중심들을 위한 더 나은 측정들의 발견은 12개의 픽셀의 12 세트들 판독, 총 144 판독을 가지는 것을 포함한다. 그러나, 정확한 타깃 중심들의 고정이 평가들의 2개의 세트를 요구하여, 중요하다. 각 타깃 중심을 조정하는 것은 20개의 다른 6-엔트리 컨볼루션 커넬들의 8개 세트들을 요구한다. 따라서, 이는 8 x 20 x 6 = 960이다. 게다가, 49개의 메모리 액세스들을 요구하는, 회수되어질 7개의 픽셀들의 7개 세트들이 있다. 그러므로 타깃 당 총 갯수는 픽셀들의 열에서 동일한 갯수의 픽셀들인(1152), 144 + 960 + 49 = 1153이다. 따라서, 각 타깃 평가는 픽셀들의 열을 프로세스함에 의해 걸리는 시간을 소비한다. 2개의 타깃들에서, 효과적으로 픽셀들의 2개의 열들에 걸리는 시간이 소비된다.
타깃은 타깃 갯수후의 제 1 픽셀 열 상에서 확인된다. 방위 열 전에 2개의 도트 열들이 있기 때문에, 6개의 픽셀 열들이 있다. 타깃 위치 프로세스는 픽셀 열들의 처음을 효과적으로 사용하지만, 나머지 5개의 픽셀 열들은 결코 사용되지 않 는다. 그러므로 데이터 영역은 다른 프로세스 시간 상에 영향을 미치지 않으며 이용가능한 시간의 2/5로 위치되어질 수 있다.
이용가능한 시간의 나머지 3/5는 검정과 흰색의 범위들을 할당하는 사소한 태스크를 위해 충분하고, 태스크는 대부분 2개의 기계 사이클을 가질 수 있다.
데이터 추출
타이밍에 관해 고려할 2개의 부분들이 있다:
* 정확한 클럭마크들(clockmarks)과 경계값들 얻기
* 도트 값들 추출
매 초 도트 열에 클럭마크들과 경계값들을 모은다. 그러나, 클럭마크의 측정이 점점 더 정확하게 되도록 업데이트될 때마다 20개의 다른 6개의 엔트리 컨볼루션 커넬(convolution kernel)들이 측정되어야 한다. 평균으로 도트 열 당 2개가 있다(2개의 도트 열마다 4개). 단지 경계를 기반으로 픽셀 좌표를 업데이트하는 것은 동일한 픽셀 스캔라인(scanline)으로부터 7개의 픽셀들을 요구한다. 그러나 열 좌표를 업데이트하는 것은 다른 열들로부터 7개의 픽셀들, 따라서 다른 스캔라인들을 요구한다. 각 스캔라인 엔트리와 2개의 캐쉬(cache) 누락을 위해 동일한 스캔라인의 픽셀을 위한 캐쉬 누락 중에 최악의 경우를 시나리오로 가정하면, 총 8개의 캐쉬를 잃는다.
도트 정보의 추출은 도트 당 4개(도트를 정의하는 평균 9개)의 픽셀 판독만을 포함한다. 1152개의 픽셀들(384 도트들)의 데이터 영역을 고려하여, 9개 대신에 4개의 픽셀 도트들을 판독함에 의해 최대 72개의 캐쉬 판독들을 절약할 것이다. 최 악의 경우는 좋지 않은 저장소들을 제공하는, 57개의 픽셀들 당 단일의 픽셀 번역이 1°회전이다.
최악의 경우에는, 우리가 데이터 영역의 픽셀들에 의하여 소비된 것보다 더 적은 캐쉬라인들을 판독하는 것이라 할 수 있다. 그러므로 액세스들은 디램(DRAM) 대역폭의 9%의 이용을 이행하는, 프로세스 1을 위한 타이밍보다 더 나쁘지 않을 것이다.
그러므로 데이터 추출 동안(프로세스 1을 포함한)의 DRAM의 전체적인 이용은 데이터 추출기가 대체 아트카드 이미지 센서 픽셀 판독기에 열중시키는 것을 의미하면서, 18%이다. 이는 만일 필요하다면, 비교적 효과없는 방법에 의해 타깃들의 프로세스에서 프로세스 타깃들(Process Targets)의 프로세스가 수행될 수 있음을 포함한다.
단계 2 - 비트 이미지 디코드
단계 2는 대체 아트카드 데이터 복원 알고리즘의 비실시간 단계이다. 단계 2의 시작에서, 비트 이미지가 대체 아트카드로부터 추출되어진다. 대체 아트카드의 데이터 영역들로부터 비트들의 판독을 나타낸다. 몇 개의 비트들은 에러가 될 수 있고, 아마도 전체의 데이터는 삽입시 대체 아트카드가 회전되기 때문에 180°회전된다. 단계 2는 이 인코드된 비트 이미지로부터 원본 데이터를 추출하는 것에 관련된다. 도 79에서 도시된 것처럼 수행되어질 기본적인 3 단계들이 있다.
* 대체 아트카드가 뒷편에서 삽입되었다면 그것을 반전하여, 비트 이미지를 재구성
* 인코드된 데이터를 언스크램블
* 리드-솔로몬은 비트 이미지로부터 데이터를 디코드한다.
각각의 3 단계들은 개별적인 프로세스로서 정의되고, 하나의 출력이 그 다음 단계의 입력으로 요구되기 때문에, 연속적으로 수행된다. 단일의 프로세스 내에서 처음의 두 단계들을 결합하는 것이 수월하지만, 명확함을 위해, 여기서는 개별적으로 다뤄진다.
데이터/프로세스 관점으로부터, 단계 2는 도 80에서 도시된 것과 같은 구조를 가진다.
프로세스들 1과 2의 타이밍은 그들 사이에서 1초의 1/1000보다 작게 소모하므로, 무시해도 좋다. 프로세스 3(리드 솔로몬 디코드)은 단계 2에서 요구된 총 시간을 만들어, 약 0.32초가 소모된다.
필요하다면 반전하여 비트 이미지를 재구성한다.
현재 DRAM에 있는 비트 맵은 대체 아트카드로부터 회수된 데이터를 나타낸다. 그러나 비트 이미지는 연속적이지 않다. 64 32k 덩어리들, 각 데이터 블럭에서 하나의 덩어리로 끊어져 있다. 각 32k 덩어리는 28,656 바이트만을 포함한다:
맨 왼쪽 방위 열에 48 바이트
데이터 영역에 28560 바이트
맨 오른쪽 방위 열에 48 바이트
사용하지 않는 4112 바이트
픽셀 데이터(단계 1의 프로세스 1에 의해 저장된)용으로 사용되는 2MB 버퍼(buffer)는 픽셀 데이터가 단계 2 동안에 요구되지 않더라도, 재구성된 비트 이미지를 저장하는 데 사용할 수 있다. 재구성의 끝에서, 올바르게 배향된 연속적인 비트 이미지가 리드-솔로몬 디코딩을 위해 준비되어, 2MB 픽셀 버퍼에 있을 것이다.
카드가 올바르게 배향된다면, 맨 왼쪽의 방위 열은 흰색일 것이고 맨 오른쪽의 방위 열은 검은 색일 것이다. 카드가 180°회전되면, 맨 왼쪽의 방위 열이 검은 색이고 맨 오른쪽의 방위 열이 흰색일 것이다.
카드가 올바르게 배향되어 있는지 아닌지를 결정하는 간단한 방법은, 각 데티어 블럭을 통하면서, 블럭까지의 처음과 마지막 48 바이트들의 데이터가 검정색과 흰색 비트의 불가항력인 비율인지를 찾아 체크한다. 다음의 의사코드가 이것을 설명하고, 카드가 올바로 배향되면 TRUE를, 올바르게 배향되지 않았다면 FALSE를 출력할 것이다:
데이터는, 카드가 올바르게 배향되었는지 아닌지를 기반으로, 재구성된다. 가장 간단한 경우는 카드가 올바르게 배향되는 것이다. 이 경우에, 데이터는 방위 열들을 제거하고 전체의 데이터를 연속하게 만들어 약간만 이동되어지게 된다. 이 는 다음의 의사코드로 설명되어져, 원 상태로 간단히 도달된다.
다른 경우는 실제의 데이터가 반전될 필요가 있는 것이다. 데이터를 반전시키는 알고리즘은 매우 간단하지만, 간단함 때문에, Reverse[N]의 값이 비트-반전 N으로 256바이트 표 Reverse를 요구한다.
양 프로세스의 타이밍은, 1초의 1/1000보다 작게 소비되어, 무시될 수 있다:
* 2MB 연속적인 판독(2048/16 x 12ns = 1,536ns)
* 2MB 효과있는 연속적인 바이트 기록(2048/16 x 12ns = 1,536ns)
인코드된 이미지 언스크램블
비트 이미지는 이제 1,827,840개로 연속적이이고, 올바르게 배향되지만, 스 크램블된 바이트이다. 바이트들은 각각 255 바이트를 가지는, 7,168개의 리드-솔로몬 블럭들을 생성하여 언스크램블된다. 언스크램블링 프로세스는 곧바로 되지만, 언스크램블링 원 상태로 수행되어질 수 없기 때문에 개별적인 버퍼를 요구한다. 도 80은 언스크램블링 프로세스 전달 메모리를 나타낸다.
다음의 의사코드는 언스크램블링 프로세스를 수행하는 방법을 정의한다:
이 프로세스를 위한 타이밍은 1초의 1/1000보다 작게 소비되어, 무시한다.
* 2MB 연속적인 판독(2048/16 x 12ns = 1,536ns)
* 2MB 비 연속적인 바이트 기록(2048 x 12ns = 24,576ns)
이 프로세스의 끝에서, 언스크램블된 데이터는 리드-솔로몬 디코딩을 준비한다.
리드 솔로몬 디코드
대체 아트카드를 읽는 마지막 부분이, 언스크램블된 데이터의 약 2MB가 값이 있는 대체 아트카드 데이터의 약 1MB 안에서 디코드되는, 리드-솔로몬 디코드 프로세스이다.
그 알고리즘은 동시에 하나의 리드-솔로몬 블럭 디코딩을 수행하고, 인코드된 블럭이 디코드된 블럭보다 크기때문에, 원 상태로(원한다면) 수행될 수 있고, 여분의 바이트들이 데이터 바이트 후에 저장된다.
처음의 2개의 리드-솔로몬 블럭들은 비트 이미지로부터 추출되어질 데이터의 크기에 관한 정보를 포함하는, 제어 블럭들이다. 이 메타-정보는 처음으로 디코드되어질 것이고, 결과의 정보는 데이터 프로퍼(proper)를 디코드하게 된다. 데이터 프로퍼의 디코딩은 동시에 하나의 데이터 블럭들을 디코딩하는 경우이다. 복제 데이터 블럭들은 특정한 블럭이 디코드를 실패할 경우 사용될 수 있다.
리드-솔로몬 디코드의 최고 레벨은 의사코드에서 시작된다:
DecodeBlock은 m = 8 및 t = 64를 사용한 기준 리드 솔로몬 블럭 디코더(standard Reed Solomon block decoder)이다.
GetControlData 함수는 디코딩 에러들이 없도록 한다. 함수는 간단하게 성공 할 때까지 하나의 컨트롤 블럭을 디코드하는 DecodeBlock이라 불린다. 제어 파라미터들은 디코드된 데이터의 처음의 3 바이트로부터 추출될 수 있다(destBlocks이 바이트 0 및 1에 저장되고, lastBlock이 바이트 2에 저장된다). 디코딩 에러들이 있는 경우, 함수는 3 바이트의 32개의 세트들을 횡단해야만 하고 대부분이 올바르게 된 값으로 정해지도록 해야한다. 하나의 간단한 방법은 3 바이트의 2개의 연속적인 동일한 복사본들을 찾는 것과, 올바른 것의 값을 명백히 하는 것이다. 대체 방법은 3 바이트의 다른 세트들의 발생들을 카운트하고, 올바른 것일 대부분 공통의 발생을 알리는 것이다.
리드-솔로몬 디코드에 걸리는 시간은 실행에 의존한다. 리드-솔로몬 디코딩 프로세스를 수행하기 위한 전용의 코어(core)를 사용할 수 있다면(LSI 로직의 L64712와 같은), 응용과 관련한 엠베디드 시스템(embeded system)을 통해(보통 디코드된 데이터로 어떤 것을 하는 것) 일반적으로 더 사용될 수 있는 CPU/DSP 결합을 선택하는 것이 바람직하다. 물론 디코딩 시간은 CPU/DSP 결합으로 충분히 빨라진다.
L64712는 초당 50메가비트의 쓰루풋(throughput)(초당 6.25MB)을 가지므로, 그 시간은 최대 2MB 판독과 1MB 기록 메모리 액세스 시간보다 리드-솔로몬 디코더의 속도에 의해 바운드된다. 최악의 경우(2MB 모두가 디코딩을 요구하는)에 걸리는 시간은 따라서 2/6.25s = 약 0.32초이다. 물론, 더 많은 개선들이 다음에 따라 가능하다:
판독 환경이 블러(blurr)될수록, 주어진 도트가 주변의 도트들에 의해 더 많 은 영향을 받는다. 바람직한 실시예의 현재의 판독 알고리즘은 도트의 값에 관한 더 나은 결정을 하기 위해 동일한 열에서 주변 도트들을 사용할 수 있다. 이전의 열의 도트들이 이미 디코드되기 때문에, 이전 열의 도트 이력은 픽셀 값들이 확실하지 않은 범위에서의 도트들의 값을 결정하는데에 유용할 수 있다.
초기 단계에 관해서는 다른 가능성이 완전히 제거되고, 필요보다 더 많은 데이터 블럭들의 초기 바운드들(bounds)이 만들어지고, ProcessingTargets 함수들 안으로 더 큰 인텔리전스(intelligence)를 위치한다. 이는 전체의 복합성을 감소시킬 수 있다. 케어(care)는 데이터 블록을 독립적으로 유지하게 한다.
또한 제어 블럭 메카니즘은 더 강해질 수 있다:
* 제어 블럭은 그들을 연속적으로 만들기 보다(현재의 경우) 처음 및 마지막 블럭들일 수 있다. 이는 특정한 병리적인 손상 시나리오들에 대항하여 더 큰 보호를 할 수 있다.
* 제 2 개선은 리드-솔로몬 디코드 단계가 실패될 경우에 사용되어질 제어 블럭 구조 안에서 여분/에러 검출의 추가적인 레벨을 위치하는 것이다. 패리티(parity)만큼 간단한 무언가가 리드-솔로몬 단계가 실패한 경우 제어 정보의 가능성을 향상시킬 수 있다.
단계 5. 바크 스크립트(Vark script)를 실행
아트카드(9)를 판독하고 디코드하는 데 걸리는 모든 시간은 대략 2.15초이다. 사용자에 명백한 지연은 실제로 단지 0.65초(단계들 3, 4의 총량)이므로, 아트 카드는 1.5초 후에 멈춘다.
아트카드가 로드(load)되면, 아트바크(artvark)가 번역된다. 즉시 스크립트가 실행되어, 스크립트는 '프린트(print)' 버튼(13)(도 1)의 누름만으로 실행된다. 스크립트를 실행하는 시간은 스크립트의 복합성에 의존하여 다양할 것이고, 프린트 버튼과 실제 프린트 버튼의 누름 사이의 인식지연 및 실제 프린팅의 합계가 구해진다.
이전에 설명한 것처럼, VLIW 프로세서(74)는 계산하는 비싼 바크 함수들을 가속하는 디지털 프로세스 시스팀이다. CPU 코어(72)에 의한 소프트웨어와 VLIW 프로세서(74)에 의한 하드웨어로 수행되는 함수들의 균형은 독립적인 이행일 것이다. VLIW 프로세서(74)의 목적은 모든 아트카드 스타일들을 사용자에게 너무 느리지 않게 수행되는 것에 도움이 된다. CPU들이 더 빨라지고 강력해지면서, 하드웨어 가속을 요구하는 다수의 함수들이 점점 줄어든다. VLIW 프로세서는 다음의 시간-임계 함수들의 일반적인 하드웨어 스피드를 허용하는 마이크로코드된(microcoded) ALU 서브-시스템(sub-system)을 가진다.
1) 일반적인 소프트웨어 프로세스를 위한 이미지 액세스 메카니즘들
2) 이미지 컨볼버(convolver)
3) 이미지 워퍼(warper)를 구동시키는 데이터
4) 이미지 스케일링(scaling)
5) 이미지 테셀레이션(tessellation)
6) 유사 변형(Affine transform)
7) 이미지 합성기
8) 색상 공간 변형
9) 히스토그램 컬렉터(histogram collector)
10) 이미지의 일루미네이션(illumination)
11) 브러쉬 스탬퍼(brush stamper)
12) 히스토그램 컬렉터
13) 내부 이미지 변환의 CCD 이미지
14) 이미지 피라미드들의 구조(워퍼에 의해 및 브러슁을 위해 사용되는)
아래 표는 ALU 모델로 이행한 경우의 각 바크 작동에 걸리는 시간을 요약한 다. ALU 모델을 사용하는 함수를 실행하는 방법은 이후 설명된다.
예를 들어, CCD 이미지를 변환하기 위해, 히스토그램 수집 및 참조-색상 교체의 수행(이미지 증강을 위해)은 픽셀당 9+2+0.5 사이클들, 또는 11.5 사이클들이 걸린다. 172,500,000인 1500 x 1000 이미지를 위해 요소 당 약 0.2초, 또는 모든 3개의 요소를 위해 0.6초이다. 간단한 워프를 추가하고, 총량은 0.6+0.36, 거의 1초이다.
이미지 컨볼버
컨볼브는 중심 픽셀 주위의 무게 평균이다. 평균은 간단한 합, 절대적인 값들의 합, 합의 절대값 또는 0에 생략된 합들일 수 있다.
이미지 컨볼버는 가변-크기의 계수 커널(kernel) 내에서 값들이 다양함에 의해 이행되어질 많은 함수들을 허용하는, 일반적인-목적의 컨볼버이다. 유지되는 커넬 크기들은 3 x 3, 5 x 5 및 7 x 7이다.
도 82에 따라, 컨볼루션(convolution) 프로세스의 예를 340에 도시된다. 컨볼버 프로세스(341)로 공급된 픽셀 요소 값들은 박스 리드 반복기(Box Read Iterator, 342)에서 온다. 반복기(342)는 픽셀만큼 각 행 내에서, 행만큼 이미지 테이터를 제공한다. 컨볼버(341)로부터의 출력은 값이 있는 이미지 포맷에서 결과 이미지를 저장하는, 순차 기록 반복기(344)로 내보낸다.
계수 커넬(kernel, 346)은 DRAM내의 참조표이다. 커넬은 박스 판독 반복기(342)와 동일한 차수의 계수들로 정렬된다. 각 계수 엔트리는 8비트이다. 간단한 순차 판독 반복기는 커넬(346) 내에서 가리켜져 사용될 수 있고 따라서 계수들을 제공한다. 커넬 크기와 동일한 ImageWidth로 이미지를 시뮬레이트하고, 루프(loop) 선택은 커넬이 계속 제공되어지므로 설정된다.
ALU 유닛으로 컨볼브 프로세스의 이행의 한 형태가 도 81에서 도시되어 있다. 다음의 상수들은 소프트웨어에 의해 정해진다:
제어 로직은 픽셀 당 곱셈/덧셈의 갯수를 카운트한다. 카운트(랫치2(Latch2)에서 축적)가 0에 도달하면, 생성된 제어 신호가 현재 컨볼브 값(랫치1)을 기록하고 카운트를 리셋한다. 이 방법으로, 하나의 제어 로직 블럭이 다수의 평행 컨볼브 흐름들에 사용될 수 있다.
사이클마다 곱셈 ALU는 하나의 곱셈/덧셈을 픽셀의 적절한 부분을 통합하도록 수행할 수 있다. 그러므로 모든 값들을 더하는 데 걸리는 다수의 사이클들이 커넬에서 다수의 엔트리들이다. 이는 바운드를 계산하기 때문에, 다른 ALU 유닛들과 평행하는 다양한 부분들과 프로세스로 이미지를 분할하는 것이 적절하다.
7 x 7 커넬에서, 각 픽셀에서 걸리는 시간은 49 사이클, 또는 490ns이다. 각 캐쉬 라인이 32개의 픽셀들을 저장하기때문에, 메모리 액세스에 필요한 시간은 12, 740ns((32-7+1) x 490ns)이다. 7개의 캐쉬 라인들과 기록(1)에 걸리는 시간은 최악의 경우 1,120ns(8*140ns, 동일한 DRAM 뱅크에 모든 액세스들)이다. 따라서, 주어진 무제한의 리소스들(resources)에 평행으로 10개의 픽셀들을 프로세스할 수 있다. 주어진 제한적인 수의 ALU들은 평행하여 최대 4개가 가능하다. 7 x 7 커넬을 사용하는 컨볼루션을 수행하는데 걸리는 시간은 0.18375초(1500*1000*490ns/4 = 183,750,000ns)이다.
5 x 5 커넬에서, 각 픽셀에서 걸리는 시간은 25 사이클, 또는 250ns이다. 각 캐쉬 라인이 32개의 픽셀들을 저장하기때문에, 메모리 액세스에 필요한 시간은 7,000ns((32-5+1) x 250ns)이다. 5개의 캐쉬 라인들과 기록(1)에 걸리는 시간은 최악의 경우 840ns(6*140ns, 동일한 DRAM 뱅크에 모든 액세스들)이다. 따라서, 주어진 무제한의 리소스들에 평행으로 7개의 픽셀들을 프로세스할 수 있다. 주어진 제한적인 수의 ALU들은 평행하여 최대 4개가 가능하다. 5 x 5 커넬을 사용하는 컨볼루션을 수행하는데 걸리는 시간은 0.09375초(1500*1000*250ns/4 = 93,750,000ns)이다.
3 x 3 커넬에서, 각 픽셀에서 걸리는 시간은 9 사이클, 또는 90ns이다. 각 캐쉬 라인이 32개의 픽셀들을 저장하기때문에, 메모리 액세스에 필요한 시간은 2,700ns((32-3+1) x 90ns)이다. 3개의 캐쉬 라인들과 기록(1)에 걸리는 시간은 최악의 경우 560ns(4*140ns, 동일한 DRAM 뱅크에 모든 액세스들)이다. 따라서, 주어진 무제한의 리소스들에 평행으로 4개의 픽셀들을 프로세스할 수 있다. 주어진 제 한적인 수의 ALU들과 읽기/기록 반복기는 최대 4개가 가능하다. 3 x 3 커넬을 사용하는 컨볼루션을 수행하는데 걸리는 시간은 0.03375초(1500*1000*90ns/4 = 33,750,000ns)이다.
따라서 각 출력 픽셀은 계산하기 위해 커넬크기/3 사이클들이 걸린다. 실제의 타이밍들은 다음의 표로 요약된다:
이미지 합성기
합성은 매트(matte) 또는 채널을 사용하여 앞면의 이미지와 뒷면의 이미지를 최종 이미지에서 뒷면과 앞면의 적절한 비율들을 제어하기 위해 더한다. 합성의 두 스타일은 바람직하게, 일반 합성과 연합 합성이 있다. 두 스타일들의 규칙들이 있다:
일반 합성 : 새로운 값 = 앞면 +(뒷면 - 앞면)a
연합 합성 : 새로운 값 = 앞면 + (1-a)뒷면
차이는, 연합 합성에서는 앞면이 매트와 미리 곱해진다는 것이고, 일반 합성에서는 그렇지 않다는 것이다. 합성 프로세스의 예가 도 83에서 나타내어진다.
알파 채널은 0과 1 범위에 대응하는 0에서 255로부터의 값들을 가진다.
일반 합성
일반 합성은 다음과 같이 이행된다:
앞면 + (뒷면 - 앞면)* α/255
X/255에 의한 분할은 257X/65536과 가깝다. 합성 프로세스의 이행은 다음의 상수가 소프트웨어에 의해 설정될 때, 도 84에서 보다 상세히 나타내어진다:
4개의 반복기들이 요구되기 때문에, 합성 프로세스는 ALU들의 단지 반의 이용으로, 픽셀 당 하나의 사이클이 걸린다. 합성 프로세스는 단일의 채널 상에서 실행된다. 다른 것과 3-채널 이미지를 합성하기 위해, 합성기는 각 채널에서 3번 실행되어야 한다.
완전한 크기의 단일 채널을 합성하는데 걸리는 시간은 0.015s(1500*1000*1*10ns)이고, 모든 3개의 채널들을 합성하기 위해 0.045s이다.
255로 나누는 것을 대략화하기 위해, 257로 곱한 후 65536으로 나누는 것이 가능하다. 단일 덧셈(256*x + x)을 하고 결과의 마지막 16 비트를 무시할 수 있다(둥글게하는 목적들은 제외).
도 42에서 나타낸 것처럼, 합성기 프로세스는 3개의 순차 판독 반복기들(351-353)과 1개의 순차 기록 반복기(355)를 요구하고, 곱셈기 ALU와 관련하여 가산기 ALU를 사용하는 마이크로코드(microcode)로써 이행된다. 합성 시간은 픽셀 당 1사이클(10ns)이다. 비록 픽셀 합성 당 평균 시간이 동일하더라도, 다른 마이크로코드는 연합 및 일반 합성에서 요구되어진다.
합성 프로세스는 단일의 채널에서 실행된다. 하나의 3-채널 이미지가 다른 것과 함께 합성하기 위해, 합성기는 각 채널에서, 3번 실행되어야 한다. 채널이 각 합성과 동일하다면, 각 시간을 읽어야만 한다. 그러나 최선의 경우로 4 x 32 바이트 캐쉬-라인들을 이동하는 것(읽거나 기록)이 320ns가 걸린다는 것을 주목해야 한다. 파이프라인(pipeline)은 32개의 픽셀들을 합성하기 위해 32 사이클들 또는 320ns(100MHz에서)가 걸리는, 픽셀 합성 당 평균 한 사이클이 주어지므로, 채널이 자유롭게 읽혀질 수 있다. 전체의 채널이 합성되어질 수 있다:
1500/32*1000*320ns = 15,040,000ns = 0.015초
완전한 크기의 3개의 채널 이미지를 합성하는 데 걸리는 시간은 0.045초이다.
이미지 피라미드 구성
워핑(warping), 타일링(tiling) 및 브러슁(brushing)과 같은, 몇몇의 함수들은 주어진 영역의 픽셀들의 평균값을 요구한다. 주어진 각 영역에서의 값을 계산하는 것보다, 이 함수들은 바람직하게 이미지 피라미드를 사용한다. 도 33에서 미리 도시된 것처럼, 이미지 피라미드(360)는 멀티-해상도(multi-resolution) 픽셀맵이다. 원본 이미지는 1:1 표현이다. 각 치수에서 2:1정도의 서브-샘플링(sub-sampling)은 원래 크기의 1/4로 이미지를 생산한다. 이 프로세스는 전체의 이미지가 단일의 픽셀에 의해 표현되어질 때까지 계속된다.
이미지 피라미드는 원본 이미지로부터 구성되고, 원본 이미지에 의해 크기의 1/3을 소비된다(1/4 + 1/16 + 1/64+ ...). 1500 x 1000의 원본 이미지에서, 대응하 는 이미지 피라미드는 대략 1/2 MB이다.
이미지 피라미드는 3 x 3 컨볼브를 거쳐 각 치수에서 2개의 픽셀들 정도로 컨볼브 커넬의 중심으로 진행하는, 4개의 입력 이미지 픽셀들의 하나 상에 수행되어 구성되어질 수 있다. 3 x 3은 컨볼브는 4개의 픽셀들을 간단히하는 것보다 더 높은 정확성을 초래하고, 레벨마다 1 비트를 이동하여 다른 피라미드 레벨들 상의 좌표들이 다르다는 추가된 장점도 가진다.
전체 피라미드의 구성은 피라미드의 각 레벨에서 한번씩 피라미드 레벨 구성 함수라 불리는 소프트웨어 루프와 관련된다.
피라미드의 1 레벨을 생산하는 타이밍은 원본 크기의 1/4 이미지를 생성하기 때문에 입력 이미지의 해상도의 9/4 * 1/4이다. 따라서 1500 x 1000 이미지를 위해:
피라미드의 레벨 1 생산하는 시간 = 9/4 * 750 * 500 = 843,750 사이클들
피라미드의 레벨 2 생산하는 시간 = 9/4 * 375 * 250 = 210,938 사이클들
피라미드의 레벨 3 생산하는 시간 = 9/4 * 188 * 125 = 52,735 사이클들
등이다.
총 시간은 원본 이미지 픽셀 당 3/4 사이클이다(이미지 피라미드는 원본 이미지 크기의 1/3이고, 각 픽셀은 9/4 사이클로 계산되어, 즉, 1/3 * 9/4 = 3/4로 계산된다). 1500 x 1000 이미지가 1,125,000 사이클(100 MHz에서), 0.011 초인 경우이다. 이 타이밍은 단일의 색상 채널이고, 3개의 색상 채널들은 0.034초의 프로세스 시간을 요구한다.
일반적인 데이터 작동 이미지 워퍼
ACP(31)는 입력 이미지의 이미지 워핑(warping) 조작들을 수행할 수 있다. 이미지 워핑의 원리들은 이론으로 잘 알려져 있다. 워핑의 프로세스에 관한 하나의 좋은 텍스트북은 1990년에 George Wolberg에 의해 쓰여진, 캘리포니아 로스 알라이토스의 IEEE Computer Society Press에서 출판한 "디지털 이미지 워핑(Digital Image Warping)"이다. 워핑 프로세스는 아트카드(9)를 거쳐 공급된 데이터의 부분을 형성하는 워프 맵(warp map)을 이용한다. 워프 맵은 임의로 필요에 따른 치수로 만들어질 수 있고 입력 픽셀들에서 출력 픽셀들의 매핑의 정보를 제공한다. 불행히도, 임의로 크기를 정하는 워프 맵들의 이용은 이미지 워퍼에 의해 해결되어야만 하는 많은 문제들이 나타난다.
도 85에 따라, AxB의 치수(dimension)를 가지는, 워프 맵(365)은 동일한 배열 좌표 색인들을 가지는 "이론적인" 출력 이미지에 대응하여 맵하는 이론적인 입력 이미지의 좌표를 디자인하는 특정한 크기(예를 들어 0-255로부터의 8 비트 값들)의 배열 값들을 포함한다. 불행히도, 출력 이미지는(366) ExF의 치수들을 가지는 입력 이미지와 전체적으로 다를 수 있는 CxD의 치수들을 가질 것이다. 따라서, 워프 맵(365)의 리맵핑(remapping)을 쉽게 할 필요가 있으므로 각 출력 픽셀을 위해, 출력 픽셀 색상 데이터가 구성되어지는 것으로부터 입력 이미지(367)의 대응하는 영역을 결정하도록 출력 이미지(366)를 이용할 수 있다. 출력 이미지(366)의 각 출력 픽셀을 위해, 워프 맵(365)으로부터 대응하는 워프 맵 값을 결정하는 것이 필요하다. 출력 이미지 픽셀이 워프 맵 표(365)내에서 분수의 위치로 맵할 때 주위의 워프 맵 값들을 쌍선형(bilinear)로 보간할 필요를 포함할 수 있다. 이 프로세스의 결과는 워프 맵(365) 내에서 각 데이터 값의 크기에 의해 치수가 정해질 "이론적인" 이미지에서 입력 이미지 픽셀의 위치를 제공할 것이다. 이 값들은 대응하는 실제 입력 이미지(367)에 이론적인 이미지를 맵하도록 다시 스케일(scale)된다.
에일리어싱(aliasing) 효과를 막기 위해 주어지는 실제 값과 출력 이미지 픽셀을 결정하기 위해서, 인접한 출력 이미지 픽셀들이 최종의 출력 이미지 픽셀 값에 공헌할 수 있는 입력 이미지 픽셀들(367)의 영역을 결정하게 된다. 이 측면에서, 이미지 피라미드는 보다 더 명백하게 설명된다.
이미지 워퍼가 이미지를 워프하기 위해 몇 가지의 태스크들을 수행한다.
- 출력 이미지 크기를 맞추기 위해 워프 맵을 스케일
- 각 출력 픽셀에서 나타낸 입력 이미지 픽셀들의 영역의 범위를 결정
- 삼-선형(tri-linear) 보간을 거쳐 입력 이미지 피라미드로부터 최종의 출력 픽셀 값을 계산
워프 맵 스케일
위에서 설명한 것처럼, 데이터 작동 워프에서, 각 출력 픽셀을 위한, 대응하는 입력 이미지 맵의 중앙을 설명하는 워프 맵이 필요하다. 이전에 설명된 단일의 워프 맵을 가지는 것 대신에, 상호배치된 x와 y값 정보를 포함하고, 개별적인 채널들로써 X와 Y 좌표들을 처리할 수 있다.
따라서, 바람직하게 2개의 워프 맵들이 있다: X 워프 맵은 X 좌표들의 워핑을 나타내고, Y 워프 맵은 Y 좌표들의 워핑을 나타낸다. 이전에 설명된 것처럼, 워 프 맵(365)은 스케일되어질 이미지와 다른 공간의 해상도를 가질 수 있다(예를 들어 32 x 32 워프-맵(365)이 1500 x 1000 이미지(366)를 위한 워프를 적절히 설명할 수 있다). 게다가, 워프 맵들은 워프되어질 이미지의 크기에 대응하는 8 또는 16 비트 값들로 나타내어질 수 있다.
입력 이미지 공간에서 주어진 워프 맵으로부터 생산 점들과 관련된 몇 가지의 단계들이다:
1. 워프 맵에서 출력 픽셀을 위해 대응하는 위치를 결정
2. 워프 맵으로부터 다음 단계를 위한 값들을 페치(fetch)(이는 워프 맵이 단지 8 비트 값들일 때 해상도 도메인(domain)에 스케일링을 요구할 수 있다)
3. 실제 값을 결정하기 위해 워프 맵의 쌍선형 보간
4. 입력 이미지 도메인에 대응하는 값을 스케일링
제 1 단계는 스케일 요소(X와 Y가 다를 수 있음)에 의해 출력 이미지의 현재 X/Y 좌표를 곱셈으로 수행될 수 있다. 예를 들어, 출력 이미지가 1500 x 1000이고, 워프 맵이 150 x 100이면, X와 Y를 1/10으로 측정한다.
워프 맵으로부터 값들을 페칭하는 것은 2개의 참조표들로 액세스가 요구된다. 하나의 참조표는 X 워프-맵을 가리키고, 다른 것은 Y 워프-맵을 가리킨다. 참조표는 참조표로부터 8 또는 16 비트 엔트리들을 읽지만, 항상 16 비트 값들로 돌아간다(원본 값들이 단지 8 비트라면 8 비트로).
이 파이프라인의 다음 단계는 색인된 워프 맵 값들을 쌍선형 보간하는 것이다.
결국, 쌍선형 보간으로부터의 결과는 워프되어질 이미지로써 동일한 도메인에서 위치되어 스케일된다. 따라서, 워프 맵 범위가 0-255라면, X는 1500/255로, Y는 1000/255로 스케일한다.
보간 프로세스 소프트웨어에 의해 정해진 다음의 상수들로 도 86에서 나타낸다.
다음의 참조표가 사용된다:
스팬 계산
워프 맵(365)으로부터의 점들은 입력 이미지(367)에서 픽셀 영역들의 중심들에 위치한다. 인접한 출력 이미지 픽셀들의 입력 이미지 픽셀들 사이의 거리는 영역들의 크기를 나타내고, 이 거리는 스팬 계산을 통해 근사치를 구할 수 있다.
도 87에 따라, 워프 맵 P1에서 주어진 현재의 점을 위해, 동일 라인 상의 이전의 점이 P0으로 불리우고, 동일한 위치에 있는 이전 라인의 점은 P2라 불리운다. P1과 P0사이와 P1과 P2 사이의 X 및 Y의 절대적인 거리를 결정한다. X 또는 Y의 최대 거리는 실제 형태의 사각 접근인 스팬이 된다.
바람직하게, 점들은 수직 스트립 출력 순서로 프로세스되어지고, P0는 스트립 내의 동일한 라인 상에 이전의 점이고, P1이 스트립 내의 라인 상의 제 1 점일 때, PO는 이전의 스트립에 대응하는 라인의 마지막 점이다. P2가 동일한 스트립에서 이전 라인의 점이므로, 32-엔트리 이력 버퍼에서 유지될 수 있다. 기본적인 계산 스팬 프로세스는 도 89에서 도시된 프로세스의 세부사항들로 도 88에서 도시된 것이다.
다음의 DRAM FIFO가 사용된다:
32 비트 정도(precision) 스팬 이력이 유지되기때문에, 12,000 바이트 임시 스토리지에 워프되어질 1500 픽셀 폭 이미지의 경우가 요구된다.
스팬(364)의 계산이 다음으로 7 사이클들이 걸리는 2개의 가산기 ALU들(스팬 계산을 위해 하나, P0와 P2 이력을 위해 루핑하고 카운팅하기 위해 하나를 사용한 다:
이력 버퍼들(365, 366)이 DRAM에 캐쉬된다. '이전의 라인'(P2 이력을 위한) 버퍼(366)는 32개의 엔트리의 범위-정도이다. '이전의 점'(P0 이력을 위한) 버퍼(365)는 대부분의 시간(스트립에서 라인의 1에서 31의 점들의 계산을 위한)이 사용되는 1개의 레지스터를 요구하고, DRAM은 스트립의 라인에서 점 0의 계산에 사용되어질 이력 값들의 세트가 버퍼된다.
스팬 이력에서 32 비트 정도는 P2 이력을 저장하는 4개의 캐쉬 라인들, P0 이력을 위한 2개를 요구한다. P0의 이력은 단지 임시 스토리지 공간의 (ImageHeight * 4) 바이트로 32개의 픽셀들의 8개의 라인들로 기록되고 판독된다. 따라서 워프되어질 1500 픽셀의 고 이미지는 6000 바이트 임시 스토리지를 요구하고, 총 6개의 캐쉬 라인들이다.
삼선형의 보간(Tri-linear interpolation)
평균되어질 입력 이미지로부터의 영역의 스팬와 중심을 결정하는 것으로, 워 프 프로세스의 최종 부분이 출력 픽셀의 값을 결정한다. 단일의 출력 픽셀이 이론적으로 전체의 입력 이미지에 의해 나타내어지기 때문에, 실제적으로 시간의 소비가 너무 많아 출력 픽셀에 따른 입력 이미지의 특정 영역을 실제로 판독하고 평균하기 힘들다. 그 대신에, 입력 이미지의 이미지 피라미드를 사용하여 픽셀 값을 구할 수 있다.
스팬이 1 이하라면, 주어진 좌표 주위의 원본 이미지의 픽셀들을 판독하고, 쌍선형 보간을 수행할 필요가 있다. 스팬이 1보다 크다면, 이미지 피라미드의 2개의 근사 레벨들을 판독하고 삼선형의 보간을 수행해야 한다. 이미지 피라미드의 두 레벨들 사이의 선형 보간을 수행하는 것이 엄격히 정확하지는 않지만, 받아들일 수 있는 결과들을 제공한다(결과 이미지를 블러링의 측면에서 에러).
도 90에 따라, 일반적으로 말하면, 주어진 스팬 's'에서, ln2s(370)와 ln2s+1(371)에 의해 주어진 이미지 피라미드 레벨들을 판독할 필요가 있다. Ln2s는 간단히 s의 최고 설정비트를 디코딩하는 것이다. 피라미드의 2개의 레벨들(370, 371) 각각 상에 픽셀 값을 위한 값을 결정하는 것이 쌍선형 보간하고, 그 후 레벨들 사이에 보간한다.
도 91에서 나타난 것처럼, 최종의 출력값(373)을 얻기 위해 피라미드 레벨들 사이의 보간 전에 각 피라미드 레벨을 위한 X와 Y의 보간이 우선 필요하다.
이미지 피라미드 어드레스 모드(image pyramid address mode)는 피라미드 레벨 s 및 s+1상에 (x, y)의 픽셀 좌표들을 위해 일반적인 어드레스들로 내보낸다. 각 레벨의 이미지 피라미드는 x에서 순차적인 픽셀들을 포함한다. 따라서, x의 판 독은 캐쉬 히트들이 되어질 수 있다.
적절한 캐쉬 코히런스(coherence)는 출력 이미지의 로컬 영역들이 입력 이미지와 대개 국부적으로 코히런트(coherent)되므로 얻어질 수 있다(아마도 다른 크기에서, 그러나 스케일 내에서 코히런트됨). 입력과 출력 이미지들 사이의 관계를 알 수 없기 때문에, 출력 픽셀들이 캐쉬 코히런스의 사용을 위하여 수직 스트립(수직-스트립 반복기(Vertical-Strip Iterator)를 거쳐) 에 기록된다.
삼-선형의 보간은 4개의 곱셈 ALU들과 파이프라인으로써의 모든 4개의 덧셈 ALU들을 사용하여 평균적으로 2개밖에 안되는 사이클에서 완료될 수 있고 요구되는 메모리 액세스가 없다고 가정된다. 그러나 모든 보간 값들이 이미지 피라미드들로부터 유도되기 때문에, 보간 속도는 캐쉬 코히런스에 따라 결정된다(다른 유닛들이 워프-맵 스케일링과 스팬 계산들을 하여 바쁘지 않을 때). 가능한한 많은 캐쉬 라인들이 이미지 피라미드 판독에 이용될 수 있다. 최고 속도는 2개의 곱셈 ALU들을 사용하여, 8 사이클이다.
출력 픽셀들은 2개의 캐쉬 라인들을 사용하는 수직-스트립 기록 반복기를 거쳐 DRAM으로 기록된다. 그러므로 속도는 출력 픽셀 당 최소 8 사이클들로 제한된다. 워프-맵의 스케일링이 8 이하의 사이클을 요구한다해도, 그 후 전반적인 속도는 바뀌지 않을 것이다. 그렇지 않으면 쓰루풋은 워프 맵을 스케일하는 데 걸리는 시간이다. 대부분의 경우들에서, 워프 맵은 사진의 크기에 부합하여 스케일될 것이다.
측정시 픽셀 당 8 이하 사이클을 요구하는 워프-맵을 가정하면, 이미지의 단 일의 색상 요소를 변환하는 데 걸리는 시간은 0.12s(1500*1000*8 사이클*사이클 당 10ns)이다.
히스토그램 컬렉터(Histogram Collector)
히스토그램 컬렉터는 입력으로 이미지 채널을 가져오는 마이크로코드 프로그램이고, 출력으로 히스토그램을 생산한다. 각각의 채널의 픽셀들은 0-255스팬에 값을 가진다. 따라서, 히스토그램 표에 256개의 엔트리들, 각 엔트리는 전체의 1500x1000 이미지의 합계를 포함할만큼 충분히 큰 32 비트이다.
도 92에서 나타낸 것처럼, 히스토그램이 전체 이미지의 요약을 나타내기 때문에, 순차 판독 반복기(378)는 입력용으로 충분하다. 히스토그램은 32개의 캐쉬 라인들(1K)을 요구하여, 완전히 캐쉬될 수 있다.
마이크로코드는 2개의 통로들을 가진다:모든 합계들이 0으로 정해진 초기 통로와, 각 픽셀을 위한 적절한 카운터를 인크리먼트(increment)하는 "카운트" 단계가 이미지로부터 판독된다. 제 1 단계는 초기화하도록 히스토그램 표(377)의 어드레스로, 어드레스 유닛과 단일의 덧셈 ALU를 요구한다.
제 2 단계는 이미지로부터 실제 픽셀들을 프로세스 하고, 4개의 덧셈 ALU들 을 사용한다:
가산기2 사이클2로부터의 제로 플래그(Zero flag)은 입력 픽셀이 동일한 만큼 마이크로코드 어드레스(2)에서 유지된다. 변화할 때, 새로운 카운트는 마이크로코드 어드레스(3)에 기록되고, 프로세스는 마이크로코드 어드레스(2)에서 다시 시작한다. 마이크로코드 어드레스(4)는 더 이상의 픽셀들이 판독되지 않는다면, 끝에 있다.
단계 1은 256 사이클들, 또는 2560ns가 걸린다. 단계 2는 픽셀들의 값들에 따라 변화한다. 최악의 경우 참조표 교체의 시간은 모든 픽셀이 그 이웃과 동일하지 않다면 이미지 픽셀 당 2 사이클이다. 단일의 색상 참조에 걸리는 시간은 0.03s(1500 x 1000 x 픽셀 당 2 사이클 x 사이클 당 10ns = 30,000,000ns)이다. 3개의 색상 요소들이 걸리는 시간은 0.09s, 이 합계의 3배이다.
색상 변환(color transform)
색상 변환이 2개의 주된 방법들로 이루어진다:
참조표 교체
색상 공간 전환
참조표 교체
도 86에서 나타낸 것처럼, 픽셀의 색상을 변환하는 가장 간단한 방법들 중 하나는 참조표(380)내에서 임의로 복합 변환 함수를 인코드하는 것이다. 픽셀의 요소 색상값이 픽셀의 새로운 요소 값을 참조하게 된다. 각 픽셀이 순차 판독 반복기로부터 판독되기 위해, 새로운 값이 새로운 색상표(380)로부터 판독되고, 순차 기록 반복기(383)로 기록된다. 입력 이미지는 메모리 대역폭의 효과적인 사용을 위해 2개의 반들로 동시에 프로세스되어질 수 있다. 다음의 참조표가 사용된다:
모든 프로세스는 2개의 순차 판독 반복기들과 2개의 순차 기록 반복기들을 요구한다. 2개의 새로운 색상 표들은 8개의 캐쉬 라인들을 각각 256 바이트(1바이트에 256 엔트리들)를 저장하도록 요구한다.
참조표 교체를 위한 평균 시간은 이미지 픽셀 당 1/2 사이클이다. 단일 색상 참조에 걸리는 시간은 0.0075s(1500 x 1000 x 픽셀 당 1/2 사이클 x 사이클 당 10ns = 7,500,000ns)이다. 3개의 색상 요소들에 걸리는 시간은 이 양의 3배로, 0.0225s이다. 각 색상 요소는 소프트웨어의 제어하에서 차례로 프로세스되어질 것이다.
색상 공간 전환
색상 공간 전환은 색상 공간들 사이의 이동시만 요구된다. CCD 이미지들은 ACP(31)의 클라이언트들(clients)이 랩(Lab) 색상 공간에서 이미지들을 프로세스하는 동안, RGB 색상 공간으로 캡쳐(capture)되고, CMY 색상 공간에서 프린팅이 일어난다. 모든 입력 색상 공간 채널들은 대개 각 출력 채널의 요소값을 결정하기 위해 입력으로 요구된다. 따라서, 로직의 프로세스는 도 94의 385에 나타나 있다.
단순히, 랩, RGB, CMY사이의 전환은 간단하다. 그러나, 특정한 장치의 개별적인 색상 프로파일(profile)은 상당히 다양할 수 있다. 따라서, 미래의 CCD들, 잉크들 및 프린터들을 허용하여, ACP(31)는 색상 공간 전환 참조표들로부터 삼-선형 보간의 수단으로 색상 공간 전환을 수행한다.
색상 코히런스는 라인을 기초로 하여 기초된 영역에 있다. 삼-선형 보간 참조들 사이에 캐쉬 코히런스를 조성하기 위해서, 수직 스트립들로 이미지를 프로세스하는 것이 최선이다. 따라서, 판독(386-388) 및 기록(389) 반복기들은 수직-스트립 반복기들일 것이다.
삼-선형 색상 공간 전환
각 출력 색상 요소를 위해서, 입력 색상 공간과 출력 색상 공간을 매핑하는 단일 3D 표가 요구된다. 예를 들어, RGB에서 랩으로 CCD 이미지들을 전환하기 위해, CCD의 물리적인 특성들로 조정되는 3개의 표들이 요구된다:
RGB -> L
RGB -> a
RGB -> b
랩에서 CMY로 전환하기 위해, 잉크/프린터의 물리적인 특성들로 조정되는 3개의 표들이 요구된다:
Lab -> C
Lab -> M
Lab -> Y
8 비트 입력 색상 요소들이 전환표들을 가리키기 위해 고정된 점의 갯수들(3:5)로 다루어진다. 3 비트의 정수가 인덱스(index)를 공급하고, 5 비트의 분수는 보간을 위해 사용된다. 3 비트들이 8개의 값들을 제공하기 때문에, 3개의 치수들은 512의 엔트리들(8 x 8 x 8)을 제공한다. 각 엔트리의 크기는 1 바이트이고, 표마다 512 바이트를 요구한다.
전환 색상 공간 프로세스는 도 95에서 나타낸 것처럼 이행될 수도 있고 다음의 참조표가 사용된다:
삼-선형 보간은 8개의 값들 사이에서 보간을 실행한다. 각 8 비트 값은 8 사이클 동안, 참조로부터 되돌아올 1 사이클이 걸린다. 삼-선형 보간은 또한 2개의 곱셈 ALU들이 사이클마다 사용될 때 8 사이클이 걸린다. 일반적인 삼-선형 보간 정보는 이 자료의 ALU 부분에서 제공되어진다. 참조표를 위한 512 바이트들은 16개의 캐쉬 라인들과 맞는다.
이미지의 단일 색상 요소를 전환하는 데 걸리는 시간은 0.105s(1500 * 1000 * 7 사이클 * 사이클 당 10ns)이다. 3개의 요소들을 전환하기 위해 0.415s가 걸린다. 다행히도, 프린트아웃(printout)을 위한 색상 공간 전환은 프린트아웃 동안 플라이(fly) 상에 발생하므로, 받아들이는 지연은 없다.
색상 요소들이 개별적으로 전환된다면, 입력 색상 공간으로부터의 모든 색상 요소들이 각 요소를 전환하기 위해 요구되기 때문에 입력 색상 공간 요소들을 중복되지 않는다.
단지 하나의 곱셈 유닛이 보간을 수행하기 때문에, 대안적으로 단일의 통로로써 전체적인 랩 -> CMY 전환을 하는 것이 가능하다. 이는 3개의 수직-스트립 판독 반복기들, 3개의 수직-스트립 기록 반복기들 및 3개의 전환 표들에서 액세스를 동시에 요구한다. 그 경우에서, 입력 이미지 상으로 판독할 수 있고 따라서 여분의 메모리가 필요없다. 그러나, 3개의 전환표들에서 액세스는 전체의 프로세스를 위해 높은 잠복으로 이끌 수 있는, 각각을 위한 캐슁의 1/3과 동일하다.
유사 변환(Affine Transform)
사진으로 이미지를 합성하기 전에, 회전하고, 크기 측정하고 변환하는 것이 필요할 수 있다. 이미지가 단지 변환되기만 한다면, 직접 서브-픽셀 변형 함수를 사용하는 것이 더 빠를 수 있다. 그러나, 회전, 크기 조정 및 변형이 모두 단일의 유사한 변형안으로 통합될 수 있다.
일반적인 유사 변환은 시간을 단축시키는 함수로써 포함될 수 있다. 유사한 변환들은 2D로 제한되고, 크기가 줄어든다면, 입력 이미지들이 스케일 함수를 통해 미리 크기를 조정한다. 일반적인 유사 변환 함수를 가지는 것이 한 블럭을 구성되어질 출력 이미지를 받아들이고, 모든 것이 동시에 공급되어질 수 있기 때문에 이미지 상의 많은 변환들을 수행하는 데 걸리는 시간을 감소시킬 수 있다.
변환 행렬은 클라이언트에 의해 공급되어진다 - 행렬은 바람직한 변환의 역행렬, 즉, 출력 픽셀 좌표에 행렬을 공급하는 것이 입력 좌표를 제공하여야 한다.
2D 행렬은 보통 3 x 3 배열로 표현된다:
3번째 열은 항상[0, 0, 1]이기 때문에, 클라이언트들은 그것을 정할 필요가 없다. 클라이언트들은 대신 a, b, c, d, e 및 f를 정한다.
맨 왼쪽 픽셀 좌표의 출력 이미지(x, y)에서 주어진 좌표는 (0, 0)으로 주어지고, 입력 좌표는 (ax + cy + e, bx + dy + f)로 정해진다. 입력 좌표가 결정되면, 입력 이미지가 픽셀값으로 도달되어진다. 입력 이미지 픽셀들의 쌍선형 보간은 계산된 좌표에서 픽셀의 값을 결정하게 된다. 유사한 변환들이 평행 라인들을 보존하기 위해서, 이미지들은 최선의 평균 입력 이미지 캐쉬 코히런스를 위한 32개의 픽셀들 폭의 출력 수직 스트립들로 프로세스된다.
3개의 곱셈 ALU들은 2 사이클로 쌍선형 보간을 수행하는 것이 요구된다. 곱셈 ALU들(1, 2)이 개별적으로 Y와 Y+1 라인들에 X로 선형 보간을 하고, 곱셈 ALU(3)는 곱셈 ALU들(1, 2)에 의한 출력 값들 사이의 Y로 선형 보간을 한다.
X로 출력 라인을 건너 오른쪽으로 이동하면서, 2개의 덧셈 ALU들은 개별적으로 현재 X값으로 'a'를, 현재 Y값으로 'b'를 추가함에 의해 실제의 입력 이미지 좌표들을 계산한다. 다음 라인으로 이동하면서(최대 32개의 픽셀들을 프로세스한 후 수직 스트립으로 다음 라인, 또는 새로운 수직 스트립의 제 1 라인), X와 Y는 주어진 블럭으로 일정한 좌표 값들을 미리 계산하기 시작하여 업데이트된다.
입력 좌표를 계산하기 위한 프로세스는 다음의 상수들이 소프트웨어에 의해 정해지는 도 96에서 제공된다:
픽셀 계산
일단 입력 이미지 좌표들을 가지면, 입력 이미지는 샘플링되어진다. 참조표는 준비를 갖추고 쌍선형 보간을 위한 특정한 좌표들로 값들을 되돌려준다. 기본적인 프로세스는 도 97에서 나타낸 것이고 다음의 참조표가 사용된다:
유사 변환은 모든 4개의 곱셈 유닛들과 모든 4개의 덧셈 ALU들을 요구하고, 좋은 캐쉬 코히런스를 가지는, 출력 픽셀 당 평균적으로 2 사이클로 유사 변환을 수행할 수 있다. 이 타이밍이 왜곡되지 않은 이미지들을 위해, 좋은 캐쉬 코히런스를 가정한다. 최악의 경우 타이밍들은 의미있는 바크 스크립트들이 포함하지 않는, 심하게 왜곡된 이미지들이다.
128 x 128 이미지를 변환하는 데 걸리는 시간은 0.00033 초(32,768 사이클)이다. 이는 4개의 채널들(채널을 포함하는)을 가지는 클립(clip) 이미지인 경우, 걸리는 총 시간은 0.00131초(131,072 사이클)이다.
수직-스트립 기록 반복기는 픽셀들을 출력하는 데 요구된다. 판독 반복기는 필요없다. 그러나, 유사 변환 가속기가 입력 이미지 픽셀들을 액세스하는 데 걸리는 시간에 의해 바운드되기 때문에, 가능한한 많은 캐쉬 라인들이 입력 이미지로부터 픽셀들의 판독을 배치되게 한다. 적어도 32개는 이용가능하고, 바람직하게는 64개 이상이다.
스케일링
스케일링은 필수적으로 이미지의 재-샘플링이다. 이미지의 크기를 크게 하는 것은 유사 변환 함수를 이용하여 수행되어질 수 있다. 크기를 줄이는 것을 포함하는, 이미지의 일반적인 크기 조정은 하드웨어의 가속 스케일 함수에 의해 수행된다. 스케일링은 X와 Y에서 독립적으로 수행되므로, 다른 스케일링 요소들이 각 치수에서 사용되어질 수 있다.
일반적인 스케일 조정 유닛은 레지스트레이션(registration)에 관하여 유사한 변환 스케일 함수를 맞춘다. 일반적인 스케일링 프로세스는 도 98에서 나타낸다. X의 스케일링은 도 99에서 나타낸 것처럼 판트(Fant)의 재샘플링 알고리즘에 의해 이루어진다.
다음의 상수들이 소프트웨어에 의해 정해진다:
다음의 레지스터들은 임시 변수들을 저장하는 데 사용된다:
Y스케일 프로세스가 도 100에 도시되고, 또한 다소 수정된 Fant 리샘플링 알고리즘(Fant's re-sampling algorithm)으로 얻어짐으로써 X 픽셀 순서의 처리를 설명하게 된다.
이때, 다음과 같은 상수가 소프트웨어에 의하여 설정된다:
상수 | 값 |
K1 | Y에서 출력 픽셀에 기여하는 입력픽셀의 수 |
K2 | 1/K1 |
다음의 레지스터는 임시 변수들을 유지하는 데에 사용된다:
변수 | 값 |
Latch1 | 미사용된 잔존 입력픽셀의 양(1부터 시작되어 감소한다) |
Latch2 | 현재의 출력픽셀에 기여할 잔존 입력픽셀의 양(K1에서 시작되어 감소한다) |
Latch3 | 다음 픽셀(Y에서) |
Latch4 | 현재 픽셀 |
Latch5 | Y에서 스케일된 픽셀(출력) |
다음의 DRAM FIFO가 사용된다:
색인 | 크기 | 상세 |
FIFO1 | ImageWidthOUT 엔트리 엔트리 당 8비트 | X에서 이미 스케일된 1행의 이미지 픽셀 1 사이클의 전송 시간 |
FIFO2 | ImageWidthOUT 엔트리 엔트리 당 16비트 | X에서 이미 스케일된 1행의 이미지 픽셀 2 사이클의 전송시간(사이클 당 1 바이트) |
이미지 테셀레이트(Tessellate Image)
이미지의 테셀레이션(Tessellation)은 타일링(tiling)를 형성하는 것이다. 이것은 특별히 디자인된 "타일(tile)"을 여러 번 수평적 및 수직적으로 제2의 (대개는 더 큰) 이미지 영역에 복사하는 것과 관련된다. 일단 테셀레이트되면, 작은 타일은 고른(seamless) 그림을 형성한다. 이것의 일례는 벽돌벽의 일부분에서의 작은 타일이다. 그것은, 테셀레이트될 때에, 완전한 벽돌벽을 형성하도록 디자인된다. 주목할 것은 테셀레이션과 관련해서는 스케일링이나 서브-픽셀 변환(sub-pixel translation)은 존재하지 않는다는 점이다.
테셀레이션을 수행하는 가장 캐시-코히어런트(cache-coherent)한 방법은, 이미지를 라인(line) 단위로 출력하고, 그 이미지의 동일한 라인을 그 라인이 지속되는 동안 반복하는 것이다. 그 라인이 완료되면, 입력 이미지 또한 다음 라인으로 진행하여야 한다(또한 이것은 출력 라인에 걸쳐서 여러 번 반복되어야 한다).
테셀레이션 작용의 개관이 도 101에 나타나 있다(390). 순차 판독 반복기(Sequential Read Iterator)(392)는 연속적으로 입력 타일의 단일 라인을 판독하도록 설정된다(StartLine은 0이 될 것이고, EndLine은 1이 될 것이다). 기록 반복기(Write Iterator)(393-395) 모두(3)에 각각의 입력 픽셀이 기록된다. 덧셈ALU(Adder ALU) 내의 카운터(397)는 출력 라인에서의 픽셀의 수를 세어 내려가, 그 라인의 끝에서 시퀀스를 종결한다.
라인 처리의 끝에서, 작은 소프트웨어 루틴은 마이크로 코드와 (FIFO를 소거하고 타일의 라인(2)을 반복하는) 순차 판독 반복기를 재시작하기 전에 순차 판독 반복기의 StartLine과 EndLine 레지스터를 업데이트한다. 기록 반복기(393-395)는 업데이트되지 않고, 단순히 출력 이미지의 각 부분을 계속해서 출력하기만 한다. 전체 효과(net effect)는 타일이 출력 라인에 걸쳐서 반복되는 하나의 라인을 가진다는 것이며, 타일은 수직적으로도 반복된다.
이 프로세스는, 우리가 입력 이미지에서 훌륭한 캐시 코히어런트(cache coherence)를 얻기 때문에 메모리 대역폭(memory bandwidth)을 전적으로 사용하지 않으며, 테셀레이션이 어떠한 크기의 타일에도 작용할 수 있도록 해준다. 이 과정은 하나의 덧셈 ALU를 사용한다. 만약 3개의 기록 반복기(393-395)가 각각 이미지의 1/3씩을 기록하면(타일 크기 영역 상에 이미지를 분리시키면), 전체적인 테셀레이션 과정은 출력 이미지 픽셀 당 1/3 사이클의 평균 속도로서 수행된다. 1500X1000 이미지에 대해서, 이것은 .005초(5,000,000ns)에 상당한다.
서브-픽셀 변환기(Sub-pixel Translator)
이미지를 배경과 병합하기 전에, X 및 Y 모두에서 서브-픽셀 양만큼 변환할 필요가 있을 수 있다. 서브-픽셀 변환은 이미지의 크기를 각 차원에서 1 픽셀만큼 증가시킬 수 있다. 이미지 외부 영역의 값은 상수 값(가령, 검정색)이나 엣지 픽셀 복제(edge pixel replication)과 같이 클라이언트에서 결정될 수 있다. 대개는 검정색을 사용하는 것이 더욱 낫다.
서브-픽셀 변환 프로세스가 도 102에 도시된다. 주어진 차원에서의 서브-픽셀 변환은 아래와 같이 정의된다:
Pixelout = Pixelin * (1-Translation) + Pixelin-1 * Translation)
이것은 또한 보간(interpolation)의 형태로도 표현될 수 있다:
Pixelout = Pixelin-1 + (Pixelin - Pixelin-1) * Translation
단일 곱셈 ALU와 단일 덧셈 ALU를 결합 이용하여 단일(또는 평균) 사이클 보간 엔진을 구현하는 것은 단순하다. X 및 Y 모두에서의 서브-픽셀 변환은 2개의 보간 엔진이 필요하다.
Y에서 서브-픽셀 변환을 하기 위해서는 2개의 순차 판독 반복기(400,401)가 필요하고(하나는 같은 이미지로부터 다른 것보다 1 라인 미리 판독을 한다), 하나의 순차 기록 반복기(403)가 필요하다.
제1 보간 엔진(Y에서의 보간)은 2개의 스트림으로부터의 데이터 쌍을 받아들이고, 이들 사이에서 선형으로(linearly) 보간한다. 제2 보간 엔진(X에서의 보간)은 그 데이터를 단일 1차원 스트림으로서 받아들이고, 수치들 사이에서 보간한다. 이들 엔진은 모두 평균적으로 1 사이클로 보간한다.
각각의 보간 엔진(405,406)은 서브-픽셀 변환을 평균적으로 출력 픽셀 당 1 사이클로 수행할 수 있다. 따라서, 2 곱셈 ALU와 2 덧셈 ALU를 필요로 하는 경우의 전반적인 시간은 출력 픽셀 당 1 사이클이 된다.
서브-픽셀 변환 작용으로부터 32 픽셀을 출력하는 데에 드는 시간은 평균적으로 320ns(32 사이클)이다. 이는 DRAM에 대한 4회의 풀 캐시-라인 액세스(full cache-line access)에 충분한 시간이므로, 3개의 순차 반복기 사용은 충분히 타이밍 제약 내에 있게 된다.
따라서 이미지를 서브-픽셀 변환하는 데에 드는 총 시간은 출력 이미지의 픽셀 당 1 사이클이 된다. 서브-픽셀 변환될 전형적인 이미지는 128*128 크기의 타일이다. 출력 이미지 크기는 129*129이다. 프로세스에는 129*129*10ns = 166,410ns가 소요된다.
이미지 타일러(Image Tiler) 함수 역시 서브-픽셀 변환 알고리즘을 이용하지만, 서브-픽셀 변환된 데이터로부터 기록할 것을 요하지는 않는 대신, 그것을 더욱 가공한다.
이미지 타일러(Image Tiler)
이미지 타일링을 위한 고레벨 알고리즘은 소프트웨어 내에서 수행된다. 일단 타일의 배치가 결정되면, 적절히 채색된 타일이 합성되어야 한다. 이미자 상으로의 각각의 타일의 실제 합성은 마이크로코드된 ALU(microcoded ALU)를 거쳐서 하드웨어 내에서 수행된다. 타일의 합성은 배경 이미지에 대한 텍스처 적용(texture application) 및 색상 적용(color application) 모두와 관련된다. 어떤 경우에 있어서는 배경에 더해지는 텍스처의 "실제 양"을 텍스처의 "의도한 양"과의 관계에서 비교하여, 적용될 색상을 스케일하는 데에 이를 사용하는 것이 바람직하다. 이러한 경우에, 텍스처는 최초로 적용되어야만 한다.
색상 적용 기능성(color application functionality) 및 텍스처 적용 기능성(texture application functionality)은 모두 다소 독립적이므로, 이들은 서브-함수(sub-function)로 분리된다.
상이한 텍스처 스타일과 채색 스타일에 대한 4-채널 타일 합성 당 사이클의 수는 다음의 표와 같이 요약된다:
고정 색상(Constant Color) | 픽셀 색상(Pixel Color) | |
대체 텍스처(Replace texture) | 4 | 4.75 |
25% 배경 + 타일 텍스처 | 4 | 4.75 |
평균 높이 알고리즘 | 5 | 5.75 |
피드백 있는 평균 높이 알고리즘 | 5.75 | 6.5 |
타일 채색 및 합성(Tile Coloring and Compositing)
타일은 (전체 타일에 대한) 고정 색상을 가지도록 설정되거나, 또는 입력 이미지로부터의 각각의 픽셀 값을 취한다. 이들 경우 모두는 (페인트를 희석하는 것과 유사한) 불투명도를 조절하기 위한 텍스처링 단계로부터의 피드백을 가질 수 있다.
4가지 경우에 대한 단계는 아래와 같이 요약된다:
- 서브-픽셀이 타일의 불투명도 값을 변환하거나,
- 타일의 불투명도를 선택적으로 스케일하거나(텍스처링으로부터의 피드백이 가능할 때),
- 픽셀의 색상을 결정하거나(고정 또는 이미지 맵(image map)으로부터의 값으로),
- 픽셀을 배경 이미지 위에 합성한다.
위 4가지 경우의 각각은 별개로 다루어져서, 함수를 수행하는 데에 드는 시간을 최소화한다. 단일 색상 채널에 대한 색상 합성 스타일 당 시간의 요약이 아래 표에서 설명된다.
타일링 색상 스타일 | 텍스처로부터 피드백 없음 (픽셀 당 사이클) | 텍스처로부터 피드백 있음(픽셀 당 사이클) |
타일이 픽셀 당 고정 색상(constant color)을 가짐 | 1 | 2 |
타일이 입력 이미지로부터 픽셀 당 색상(per pixel color)을 가짐 | 1.25 | 2 |
고정 색상(Constant Color)
이 경우, 타일은 소프트웨어에 의하여 결정되는 고정 색상을 가진다. ACP(31)가 하나의 타일에 배치되는 동안, 소프트웨어는 다음 타일의 배치 및 채색을 결정할 수 있다.
타일의 색상은 쌍선형 보간(bi-linear interpolation)의하여 타일될 이미지의 스케일된 버전으로 결정될 수 있다. 이미지의 스케일된 버전은 이미지 피라미드(image pyramid) 대신 생성되고 저장되며, 단지 전체 타일 작용 당 한번 수행되기만 하면 된다. 만약 타일 크기가 128×128이면, 이미지는 각각의 차원에서 128:1로 스케일 다운될 수 있다.
피드백 없음(Without feedback)
타일의 텍스처링으로부터 아무런 피드백이 없으면, 타일은 단순히 특정 좌표 위에 배치되기만 할 뿐이다. 타일 색상이 각 픽셀의 색상에 사용되고, 합성을 위한 불투명도는 타일의 서브-픽셀 변환된 불투명도 채널로부터 오게 된다. 이 경우에 색상 채널 및 텍스처 채널은 타일 경로(tiling pass) 사이에서 완벽히 독립적으로 처리될 수 있다.
프로세스의 개관이 도 103에 도시된다. 타일의 서브-픽셀 변환(410)은 2개의 곱셈 ALU와 2개의 덧셈 ALU를 이용하여 출력 픽셀 당 1 사이클의 평균 시간으로 달성될 수 있다. 서브-픽셀 변환으로부터의 출력은 고정 타일 색상(412)을 배경 순차 판독 반복기로부터의 배경 이미지와 합성(411)하는 데에 사용되는 마스크이다.
합성은 1개의 곱셈 ALU와 1개의 덧셈 ALU를 이용하여 합성 당 1 사이클의 평균 속도로 수행될 수 있다. 따라서 필요사항은 3개의 곱셈 ALU와 3개의 덧셈 ALU가 된다. 4개의 순차 반복기(413-416)가 필요하며, 내용의 판독 및 기록에 320ns가 소요된다. 서브-픽셀 변환 및 합성을 위해서 픽셀 당 1의 사이클 평균 개수로는, 버퍼를 판독 및 기록할 시간이 충분하다.
피드백 있음
타일의 텍스처링으로부터 피드백이 있으면, 타일은 특정 좌표에 배치된다. 타일 색상은 각각의 픽셀의 색상에 사용되며, 합성을 위한 불투명도는 피드백 파라미터에 의하여 스케일된 타일의 서브-픽셀 불투명도 채널로부터 얻어진다. 따라서 텍스처 값(texture value)은 색상 값(color value)이 적용되기 이전에 계산되어야만 한다.
프로세스의 개관이 도 97에 도시된다. 타일의 서브-픽셀 변환은 2개의 곱셈 ALU 및 2개의 덧셈 ALU를 사용하여 출력 픽셀 당 1 사이클의 평균 시간으로 달성될 수 있다. 서브-픽셀 변환으로부터의 출력은 피드백 순차 판독 반복기(Feedback Sequential Read Iterator)(420)로부터 판독되는 피드백에 따라 스케일될 마스크이 다. 피드백은 이를 스케일러(1개의 곱셈 ALU)(421)로 통과시킨다.
합성(422)은 1개의 곱셈 ALU 및 1개의 덧셈 ALU를 이용하여 합성 당 1 사이클의 평균 시간으로 수행될 수 있다. 따라서 필요사항은 4개의 곱셈 ALU와 모두 4개의 덧셈 ALU가 된다. 비록 전체 프로세스는 평균적으로 1 사이클 내에서 달성될 수 있더라도, 5개의 순차 반복기가 필요하기 때문에 메모리 액세스는 병목(bottleneck)이 있다. 버퍼링이 충분한 경우, 평균 시간은 픽셀 당 1,25 사이클이 된다.
입력 이미지로부터의 색상
타일에서 픽셀을 채색하는 한 가지 방법은 입력 이미지 내의 픽셀로부터 색상을 취하는 것이다. 다시 여기에는 합성을 위한 두 가지 가능성, 즉 텍스처링으로부터 피드백이 있는 경우와 없는 경우가 있다.
피드백 없음
이 경우, 타일 색상은 단순히 입력 이미지 내의 상대적인 픽셀로부터 얻어진다. 합성을 위한 불투명도는 서브-픽셀이 이동시킨 타일의 불투명도 채널로부터 얻어진다.
프로세스의 개관이 도 105에 도시된다. 타일의 서브-픽셀 변환(425)은 2개의 곱셈 ALU 및 2개의 덧셈 ALU를 이용하여 출력 픽셀 당 1 사이클의 평균 시간으로 달성될 수 있다. 서브-픽셀 변환으로부터의 출력은 (입력 이미지(428)로부터 판독되는) 타일의 픽셀 색상과 배경 이미지(429)와의 합성(426)에 사용될 마스크가 된다.
합성(426)은 1개의 곱셈 ALU 및 1개의 덧셈 ALU를 이용하여 합성 당 1 사이클의 평균 시간으로 수행될 수 있다. 따라서 필요사항은 3개의 곱셈 ALU 및 3개의 덧셈 ALU가 된다. 비록 전체 프로세스가 평균 1 사이클 내에서 달성될 수 있더라도, 5개의 순차 반복기가 필요하기 때문에 메모리 액세스는 병목이 있다. 버퍼링이 충분할 때, 평균 시간은 픽셀 당 1.25 사이클이 된다.
피드백 있음
이 경우, 타일 색상은 여전히 입력 이미지의 상대적인 색상으로부터 얻어지지만, 합성을 위한 불투명도는 텍스처링 경로(texturing pass) 도중에 실제로 적용되는 텍스처 높이(texture height)의 상대적인 양에 의하여 영향을 받는다. 이 프로세스가 도 106에 도시된다.
타일의 서브-픽셀 변환(431)은 2개의 곱셈 ALU 및 2개의 덧셈 ALU를 이용하여 출력 픽셀 당 1 사이클의 평균 시간으로 달성될 수 있다. 서브-픽셀 변환으로부터의 출력은 피드백 순차 판독 반복기(432)로부터 판독되는 피드백에 따라 스케일되는(431) 마스크이다. 피드백은 스케일러(1개의 곱셈 ALU)(431)로 통과된다.
합성(434)은 1개의 곱셈 ALU 및 1개의 덧셈 ALU를 이용하여 합성 당 1 사이클의 평균 시간으로 수행될 수 있다.
따라서 조건들은 모두 4개의 곱셈 ALU 및 3개의 덧셈 ALU가 된다. 비록 전체 프로세스가 평균 1 사이클 내에서 달성될 수 있더라도, 6개의 순차 반복기가 필요하므로 메모리 액세스는 병목이 있다. 버퍼링이 충분할 때, 평균 시간은 픽셀 당 1.5 사이클이 된다.
타일 텍스처링(Tile Texturing)
각각의 타일은 그 텍스처 채널에 의하여 정의되는 표면 텍스처를 가진다. 텍스처는 반드시 서브-픽셀 변환된 후 출력 이미지에 적용되어야만 한다. 3가지 텍스처 합성 스타일이 있다:
대체 텍스처
25% 배경 + 타일의 텍스처
평균 높이 알고리즘
또한, 평균 높이 알고리즘은 색상 합성을 위한 피드백 파라미터를 절약할 수 있다.
텍스처 합성 스타일 당 소요 시간이 아래 표에서와 같이 요약된다:
타일링 색상 스타일 | 픽셀 당 사이클 (텍스처로부터 피드백 없음) | 픽셀 당 사이클 (텍스처로부터 피드백 있음) |
대체 텍스처 | 1 | - |
25% 배경 + 타일의 텍스처값 | 1 | - |
평균 높이 알고리즘 | 2 | 2 |
텍스처 교체
이 경우, 타일로부터의 텍스처는 도 107에 나타난 바와 같이 이미지로부터의 텍스처 채널을 대체한다. 타일의 텍스처의 서브-픽셀 변환(436)은 2개의 곱셈 ALU 및 2개의 덧셈 ALU를 이용하여 출력 픽셀 당 1 사이클의 평균 시간으로 달성될 수 있다. 이 서브-픽셀 변환으로부터의 출력은 순차 기록 반복기(437)로 직접 공급된다.
대체 텍스처 합성에 소요되는 시간은 픽셀 당 1 사이클이다. 텍스처 값의 100%가 항상 배경에 적용되므로 피드백은 없다. 따라서 어떠한 특정 순서로 채널을 처리하더라도 필요사항은 없다.
25% 배경 + 타일의 텍스처
이 경우, 타일의 텍스처는 기존 텍스처 값의 25%에 더해진다. 새로운 값은 본래의 값보다 크거나 본래의 값과 같아야 한다. 나아가, 텍스처 채널이 8비트뿐이므로 새로운 텍스처 값은 255에서 클립되어야 한다. 사용된 프로세스가 도 108에 도시된다.
타일의 텍스처의 서브-픽셀 변환(440)은 2개의 곱셈 ALU 및 2개의 덧셈 ALU를 이용하여 출력 픽셀 당 1 사이클의 평균 시간으로 달성될 수 있다. 이 서브-픽셀 변환(440)의 출력은 덧셈기(441)로 공급되어 배경 텍스처 값의 1/4(442)에 더해진다. Min 및 Max 함수(444)가 서브-픽셀 변환에 사용되지 않은 2개의 덧셈기에 의하여 제공되고, 출력이 순차 기록 반복기(445)에 기록된다.
이 스타일의 텍스처 합성에 소요되는 시간은 픽셀 당 1 사이클이다. (비록 255에서의 클리핑이 발생하더라도) 텍스처 값의 100%가 배경에 적용되는 것으로 취급되므로, 피드백은 없다. 따라서 채널을 어떠한 특정 순서로 처리하더라도 제한사항은 없다.
평균 높이 알고리즘
이 텍스처 적용 알고리즘에 있어서는, 타일 밑의 평균 높이가 계산되고 각각의 픽셀의 높이는 평균 높이에 비교된다. 만약 픽셀의 높이가 평균보다 작으면, 스트로크 높이(stroke height)가 배경 높이에 더해진다. 만약 픽셀의 높이가 평균보다 크거나 평균과 같으면, 스트로크 높이는 평균 높이에 더해진다. 따라서 배경 피 크(background peak)는 스트로크를 얇게 한다. 높이는 최소량만큼씩 증가하도록 제약됨으로써, 배경으로 하여금 스트로크 애플리케이션이 0까지 얇아지지 않도록(하지만 최소값이 0이 될 수는 있다) 방지한다. 높이는 또한 텍스처 채널의 8-비트 해상도로 인하여 255로 클립된다.
적용된 텍스처와 적용된 기대량과의 차이에 따른 피드백이 있을 수 있다. 피드백 량은 타일 색상의 적용 시에 스케일 요소로서 사용될 수 있다.
양자의 경우에, 평균 텍스처는 소프트웨어에 의하여 제공되고, 바이-레벨 보간을 텍스처 맵의 스케일된 버전 상에서 수행함으로써 계산된다. 소프트웨어는 현재 타일에 적용이 되는 동안 다음 타일의 평균 텍스처 높이를 결정한다. 소프트웨어는 또한 추가의 최소두께를 제공하여야 하는데, 이는 대개 전체 타일링 프로세스에서 상수가 된다.
피드백 없음
피드백이 없으면, 텍스처는 도 109에 나타낸 바와 같이 배경 텍스처에 단순히 적용된다.
4개의 순차 반복기가 필요하며, 이것은 만약 프로세스가 1 사이클에 대해서 파이프라인(pipeline)되면 메모리는 유지되기에 충분히 빠름을 뜻한다.
타일 텍스처의 서브-픽셀 변환(450)은 2개의 곱셈 ALU와 2개의 덧셈 ALU를 이용하여 출력 픽셀 당 1 사이클의 평균 속도로 달성될 수 있다. 각각의 최소 및 최대 함수(451, 452)는 1 사이클 내에 전체 동작을 완료시키기 위하여 개별적인 덧셈 ALU를 요한다. 2개가 이미 텍스처의 서브-픽셀 변환에 사용되므로, 1 사이클 평 균 속도에는 남은 것이 불충분하다.
따라서 1 픽셀의 텍스처를 처리하기 위한 평균 속도는 2 사이클이 된다. 피드백이 없기 때문에 합성의 색상채널 순서는 무관하다.
피드백 있음
이것은 텍스처 적용 알고리즘의 표준 처리에 더해서 실제로 적용되는 텍스처의 비율을 기록할 필요가 있다는 점을 제외하면 개념적으로 피드백 없는 경우와 동일하다. 비율은 배경 이미지 상의 타일의 색상의 후속적인 합성을 위한 스케일 요소로서 사용될 수 있다. 순서도는 도 110에 나타나 있으며, 다음과 같은 색인표가 사용된다:
색인 | 크기 | 상세 |
LU1 | 256 엔트리 엔트리 당 16비트 | 1/N 테이블은 N으로 인덱스됨(범위 0 - 255) 결과적 16비트는 고정점 0:16으로 취급됨. |
소프트웨어에서 1/N 테이블(460)이 제공되는 256 엔트리의 각각은 16비트이므로, 연속적으로 유지해야할 16 캐시 라인을 요한다.
타일의 텍스처의 서브-픽셀 변환(461)은 2개의 곱셈 ALU와 2개의 덧셈 ALU를 사용하여 출력 픽셀 당 1사이클의 평균 속도로 달성될 수 있다. 각각의 최소(462) 및 최대(463) 함수는 1 사이클 내에 전체 동작을 완료시키기 위하여 별개의 덧셈 ALU가 필요하다. 이미 텍스처의 서브-픽셀 변환에 의하여 2개가 사용되므로, 1사이클의 평균시간에 대해서는 남은 것이 불충분하다.
1 픽셀의 텍스처를 프로세싱하기 위한 평균 시간은 따라서 2 싸이클이다. 그 피드백 데이터 영역(타일 크기의 이미지 채널)을 위해 충분한 공간이 할당되어야 한다. 그 피드백이 타일의 불투명도(opacity)를 스케일링하는 데 사용되기 때문에, 타일의 색상이 적용되기 전에 텍스터가 적용되어야 한다. 1
CCD 이미지 보간기(CCD image interpolator)
ISI(83)(도 3)를 통하여 CCD로부터 얻어지는 이미지는 750 × 500 픽셀이다. 이미지가 ISI를 통하여 캡쳐되면, 카메라의 방향은 픽셀을 0, 90, 180, 270도만큼 회전시켜 이미지의 윗부분을 '위(up)'에 대응시키는 데에 사용된다. 모든 픽셀이 R, G 또는 B 성분만을 가지므로, 이들이 회전되었다는 사실은 픽셀 값을 해석할 때에 고려되어야 한다. 카메라의 방향에 좌우되어, 각각의 2X2 픽셀 블록은 도 111에 나타낸 구성 중 하나를 가진다.
몇몇의 프로세스는 처리를 위한 유용한 형태로 변환하기 위하여 CCD 캡쳐 이미지 상에서 수행될 필요가 있다:
- CCD 이미지 내에서 로우-샘플 레이트 색상 성분의 업-보간(up-interpolation)(픽셀의 올바른 방향을 해석)
RGB에서 내부 색상 영역으로의 색상 변환
- 내부 영역 이미지를 750×500에서 1500×1000으로 스케일링
- 평면 포맷에서 이미지 기록
이미지의 전체 채널은 워핑(warping)을 허용하기 위해서 동시에 얻어질 것을 요한다. 로우 메모리 모델(8MB)에서는 최고 해상도에서 임시 오브젝트(temporary object)로서 단일 채널을 유지하기에 충분한 영역만이 존재한다. 따라서 색상 변환 은 단일 색상 채널에 대해서만 한다. 프로세스의 제한 요소는 색상 변환인데, 그것이 RGB로부터 내부 색상 영역으로의 삼-선형 보간(tri-linear interpolation)인 0.026ns/채널(750×500×7 사이클/픽셀 〉10ns/사이클 = 26,250,000ns)의 프로세스를 수반하기 때문이다.
색상 변환을 내부 색상 영역 이미지의 "전에" 수행하는 것은, 이것이 스케일된 픽셀의 개수를 4의 요소만큼 감소시키기 때문에(따라서 전반적인 프로세스 시간을 단축시키기 때문에) 중요하다.
모든 변환에 대한 조건들이 ALU의 디자인에 적합지 않을 수 있다. 따라서 변환은 2단계로 나뉜다:
단계 1: CCD 이미지 내에서 로우-샘플 레이트 색상 성분의 업-보간(픽셀의 올바른 방향을 해석)
RGB로부터 내부 색상 영역으로 색상 변환
평면 포맷에서 이미지 기록
단계 2 : 내부 영역 이미지를 750×500으로부터 1500×1000으로 스케일링
스케일 함수를 분리하는 것은 색상 변환된 작은 이미지가 큰 이미지로서 동시에 메모리에 존재하고 있어야 함을 수반한다. 단계 1의 출력(0.5MB)은 종종 이미지 피라미드(image pyramid)(1MB)를 위한 메모리 공간으로 안전하게 기록되어야 한다. 단계 2의 출력은 확장된 통상의 CCD 이미지가 될 수 있다. 스케일링의 분리는 또한 스케일링이 유사 변환(Affine Transform)에 의하여 얻어질 수 있도록 하며, 단순 1:2 확장이 아닐 수 있는 상이한 CCD 해상도를 허용한다.
단계 1: 로우-샘플레이트 색상 성분의 업-보간.
3개의 색상 성분(R,G 및 B)의 각각은 주어진 픽셀에 색상 변환을 발생시키기 위하여 업 보간될 필요가 있다. 색상 변환은 7사이클을 점유하기 때문에 픽셀 당 보간을 수행하기 위해서 7사이클을 가진다.
G의 보간은 단순하며 도 112에 도시된다. 방향에 좌우되어, G의 실제 픽셀 값은 홀수 라인 상의 홀수 픽셀과 짝수 라인 상의 짝수 픽셀 사이 및 짝수 라인 상의 홀수 픽셀과 홀수 라인 상의 짝수 픽셀 사이에서 교대한다. 모든 케이스에서, 선형 보간이면 족하다. 도 113에 도시하는 R과 B 성분의 보간은 더욱 복잡한데, 수평 및 수직 방향에서, 도표에서 보여지는 바와 같이, 동시에 3열의 픽셀에 액세스할 필요가 있으므로 각각 1열만큼 오프셋을 가지는 3개의 순차 판독 반복기가 필요하다. 또한, 각각의 행에 대한 래치를 경유하여 동일한 행 위에서 이전의 픽셀에 대한 액세스도 가진다.
따라서 각각의 픽셀은 CCD로부터의 성분 하나와 업-보간되는 다른 2개의 성분을 포함한다. 하나의 성분이 쌍선형(bi-linear) 보간되면, 다른 것은 선형(linear) 보간된다. 보간 요소가 상수(0.5)이므로, 보간은 (1사이클 내에서) 덧셈 및 우측으로의 1비트 쉬프트에 의하여 계산되며, 요소(0.5)의 쌍선형 보간은 3개의 덧셈 및 우측으로의 2비트 쉬프트에 의하여 (3사이클에서) 계산될 수 있다. 따라서 하나의 곱셈 ALU를 이용할 때에 필요한 사이클의 총 개수는 4개이다.
도 115는 회전0인 짝수 라인 짝수 픽셀(EL, EP) 및 홀수 라인 홀수 픽셀(OL, OP)을 나타내며, 도 116은 회전 0인 짝수 라인 홀수 픽셀(EL, OP) 및 홀수 라인 짝수 픽셀(OL, EP)을 나타낸다. 다른 회전은 단순히 이들 두 표현의 다른 형태에 불과하다.
색상 전환(Color Conversion)
RGB로부터 Lab으로의 색상 영역 전환은 일반적인 색상 영역 전환 함수(Color Space Convert function)에서 설명한 것과 동일한 방법, 즉 픽셀 당 8사이클을 점유하는 프로세스를 이용하여 이루어진다. 단계 1 프로세스는 도 117을 참조하여 설명될 수 있다.
RGB의 업-보간은 4사이클(한개의 곱셈 ALU)을 점유하지만, 색상 영역의 전환은 검색 전송 시간(lookup transfer time) 때문에 픽셀 당 8사이클(2개의 곱셈 ALU)을 점유하여야 한다.
단계 2
이미지 스케일(Scaling the image)
이 단계는 CCD 해상도(750X500)로부터 작업 포토 해상도(1500X1000)로의 이미지 보간에 관련된다. 스케일링은 유사 변환(Affine transform)을 1:2 스케일로 실행함으로써 달성된다. 일반적인 유사 변환의 타이밍은 출력 픽셀 당 2사이클인데, 이는 스케일링 소요시간이 0.03초가 됨을 뜻한다.
이미지 일루미네이트(Illuminate Image)
일단 이미지가 처리되면, 하나 또는 그 이상의 광원에 의하여 일루미네이트될 수 있다. 광원은 다음과 같은 것이 될 수 있다:
1. 방향성(Directional)은 무한한 거리에 떨어져 있고, 한쪽 방향의 평행광선을 조사한다.
2. 옴니(Omni)는 모든 방향으로 초점없는 광을 조사한다.
3. 스포트(Spot)는 특정 타깃 점에 초점이 맞추어진 빔을 조사한다. 스포트 라이트와 관련해서는 콘(cone)과 반영(penumbra)이 있다.
장면(scene)은 또한 반사각의 변동을 유발하는 관련 범프-맵을 가질 수 있다. 주변광 또한 일루미네이트 장면에 선택적으로 존재할 수 있다.
가속 일루미네이트(accelerated illumination)의 프로세스에 있어서는 단일 광원으로써 하나의 이미지 채널을 비추는 것이 관련된다. 복수의 광원이 광원 당 하나의 경로를 가지도록 복수의 경로로서 단일 이미지 채널에 인가될 수 있다. 복수의 채널은 범프-맵을 가지고 또는 범프-맵 없이 한번에 하나씩 처리될 수 있다.
한 픽셀의 정규 표면 벡터(N)는 범프-맵이 있다면 범프-맵으로부터 계산된다. 범프-맵이 없는 경우, 기본 정규 벡터는 이미지 평면과 직교한다. 즉, N=[0,0,1]
뷰잉 벡터(viewing vector)(V)는 항상 이미지 평면과 직교한다. 즉, V=[0,0,1]
방향성 광원에 있어서, 픽셀로부터 광원으로의 광원 벡터(L)는 이미지 전체에 걸쳐서 일정하므로 전체 이미지에 대하여 한번만 계산된다. 옴니 광원에 있어서(유한 거리에서), 광원 벡터는 각각의 픽셀마다 독립적으로 계산된다.
주변광에 대한 픽셀의 반사는 다음에 따라 계산된다: IakaOd
광원의 픽셀의 확산(diffuse) 및 반사는 퐁 모델(Phong model)에 따라 계산된다:
fattIp[kdOd(NㆍL)+ksOs(RㆍV)n
]
광원이 무한한 거리에 있으면, 광원의 세기는 이미지 전체에 걸쳐서 일정하다.
각각의 광원은 픽셀 당 3개의 기여를 가진다.
주변 기여
확산(diffuse) 기여
반사(specular) 기여
광원은 다음과 같은 변수를 이용하여 정의된다:
dL | 광원으로부터의 거리 |
fatt | 거리에 따른 감쇠도 [fatt=1/dL 2] |
R | 정규화된 반사벡터 [R=2N(NㆍL)-L] |
Ia | 주변광 강도 |
Ip | 확산(diffuse) 라이트 계수 |
ka | 주변 반사 계수 |
kd | 확산(diffuse) 반사 계수 |
ks | 반사 계수(specular reflection coefficient) |
ksc | 반사 색상 계수 |
L | 정규화된 광원 벡터 |
N | 정규화된 표면 정규 벡터 |
n | 반사 지수 |
Od | 물체의 확산(diffuse) 색상(즉 이미지 픽셀 색상) |
Os | 물체의 반사 색상(kSCOd+(1-kSC)Ip) |
V | 정규화된 뷰잉 벡터[V=[0,0,1]] |
동일한 반사 계수(reflection coefficient)(ka,ks,kd)가 각각의 색상 성분에 대하여 사용된다.
주어진 픽셀 값은 주변 기여에, 각각의 광의 확산(diffuse)와 반사 기여의 합을 더한 것과 동일하다.
일루미네이트 계산의 서브-프로세스
확산(diffuse) 기여과 반사 기여를 계산하기 위하여, 다양한 다른 계산이 필요하다. 계산에는 다음과 같은 것이 있다:
1/√X
N
L
NㆍL
RㆍV
fatt
fcp
서브-프로세스 또한, 주변, 확산(diffuse) 및 반사 기여를 계산하기 위하여 정의된다.
주변
확산(diffuse)
반사
그리고 나서 서브-프로세스는 광원의 전반적인 일루미네이트를 계산하기 위 하여 사용될 수 있다. 단지 4개의 곱셈 ALU만이 존재하므로, 특정 타입의 광원에 대한 마이크로 코드는 성능을 위해 적절히 혼합된 서브-프로세스를 가질 수 있다.
1/√X의 계산
바크(Vark) 라이팅 모델은 벡터를 이용한다. 여러 가지 경우에 정규화를 위해 벡터 길이의 역수를 계산하는 것이 중요하다. 벡터 길이의 역수를 계산하는 하기 위해서는 X의 제곱근의 역수 계산이 필요하다.
논리적으로, 이 과정은 도118에 도시된 바와 같은 입출력을 가지는 과정으로 나타낼 수 있다. 도119를 참조하면, 이 계산은 참조표를 통하여 다음 식을 한번 반복함으로써 수행된다.
Vn+1 = 1/2Vn(3- XVn
2)
반복의 회수는 요구되는 정확도에 따라 달라진다. 이 경우에는 단지 16비트의 정확도 만이 요구된다. 따라서 표는 8비트의 정확도를 가질 수 있으며
한번의 반복만이 필요하다. 다음 상수는 소프트웨어에 의해 설정된다:
상수 | 값 |
K1 | 3 |
다음 참조표가 사용된다:
참조 | 크기 | 상세사항 |
LU1 | 256 엔트리엔트리 당 8 비트 | X제곱근의 역수 테이블을 X의 가장 중요한 8비트에 의해 인덱싱. 결과적인 8 비트는 고정점 0:8로 취급됨 |
N의 계산
N은 표면 수직 벡터이다. 범프 맵이 없을 때, N은 상수이다. 범프 맵이 있을 때는 각 픽셀에 대해 N을 계산하여야 한다.
범프맵이 없는 경우
범프 맵이 없을 때, 고정된 수직 벡터 N 이 존재하고 다음과 같은 성질을 갖는다:
N = [XN, YN, ZN] = [0, 0, 1]
IINll = 1
1/llNll = 1
정규화된 N = N
이러한 성질들을 이용하여 수직벡터와 1/llNll 을 매번 계산하는 대신 다른 계산들을 최적화시킬 수 있다.
범프맵이 있는 경우
도 120에 도시된 것과 같이, 범프맵이 있을 때, N 은 X 및 Y 방향으로의 범프맵 값을 비교하여 계산된다. 도120은 픽셀 P1에서 같은 열과 행에 있는 픽셀에 대한 계산을 보여주지만 P1의 값 자체를 포함하지는 않는다. N의 계산은 해상도와 무관하게 스케일 팩터를 곱하여 수행된다( X와 Y에 대하여 같은 팩터). 이 과정은 도121에 도시된 것과 같이 입력과 출력을 가지는 과정으로 표시된다(ZN은 항상 1).
ZN이 항상 1이기 때문에 XN과 YN은 아직 정규화되지 않는다(ZN = 1이므로). N 의 정규화는 N.L을 계산할 때까지 지연되며 따라서 1/llNll에는 3대신 1이 곱해진다.
N을 계산하는 실제 과정은 도112에 도시되었다.
다음 상수는 소프트웨어에 의해 설정된다:
상수 | 값 |
K1 | ScaleFactor (N해상도를 독립적으로 하기 위해) |
L의 계산
방향성 광(Directional lights)
광원이 무한히 멀리 떨어져 있을 때, 이 광은 효과적인 일정한 광 벡터 L을 가지고 있다. L은 정규화되며 다음과 같이 소프트웨어에 의하여 계산되어진다.
L= [XL, YL, ZL]
||L|| = 1
1/||L|| = 1
이들 특성들은 특정한 L과 1/||L|| 을 계산하는 것 대신에 사용될 수 있고 그렇게 함으로써 다른 계산들을 최적화할 수 있다.
옴니 광와 스포트라이트
광원이 무한히 멀지 않을 때, L은 현재점 P에서 광원 PL 까지의 벡터이며, P= [XP, YP, 0] 이므로 L은 다음과 같이 주어진다
L= [XL, YL, ZL]
XL = XP - XPL
YL = YP - YPL
ZL = -ZPL
우리는 XL과 YL과 ZL 에 1/|| L|| 을 각각 곱함으로써 정규화시킬 수가 있다. 1/||L||의 계산은(나중에 정규화하기 위한 용도) 다음을 계산하고:
V= XL
2 +YL
2 + ZL
2
그리고 나서 V-1/2 의 계산에 의해서 완성된다.
이런 경우에, L의 계산은 도 124에서 나타나듯이 입력들과 결과들과 함께 처리되어 나타난다. XP, YP 는 계산되어지고 있는 픽셀의 좌표들이다. ZP 는 항상 0이다.
L의 계산을 위한 실제 과정은 도125에 도시된 바와 같다.
다음의 상수들을 소프트웨어에 의하여 설정된다.
상수 | 값 |
K1 | XPL |
K2 | YPL |
K3 | ZPL 2( Zp 가 0 이므로) |
K4 | -ZPL |
N.L의 계산
벡터 N과 L의 내적 계산은 아래와 같이 정의된다.
XNXL +YNYL + ZNZL
범프맵이 없는 경우
범프맵이 없을때 N은 상수 [0, 0, 1].N.L 이고, 따라서 ZL로 줄어든다.
범프맵이 있는 경우
범프맵이 있을 때, 직접 내적을 계산해야 한다. N 성분을 정규화시키기 이전에 가지는 것 보다, 우리는 비 정규화된 N에서 정규화된 L의 내적을 구한 후에 정규화한다. L은 소프트웨어에 의해 정규화되거나(상수인 경우) 혹은 L계산 과정에 의해 정규화한다. 이 과정은 도 126에서 설명되어진 것과 같다.
ZN은 1로써 정의되어지기 때문에 입력될 필요가 없음을 유의할 필요가 있다. 그러나 대신 1/||N|| 가 이 결과를 정규화하기위해서 필요하다 .N.L 계산을 위한 실제적인 과정은 도 127에서처럼 설명되어진다.
RㆍV의 계산
RㆍV는 반사되는 기여 계산을 하기위한 입력으로써 필요하다. 왜냐하면 V=[0, 0, 1]이기 때문에 유일하게 Z성분들이 필요 되어진다. RㆍV는 그러므로 RㆍV=2.ZN(N.L)-ZL 로 줄어든다.
덧붙여, 정규화되지 않은 ZN =1 이기 때문에 정규화된 ZN 은 1/||N|| 이다.
범프맵이 없는 경우
가장 간단한 실행법은 N이 상수일 때이다. 왜냐하면 N과 V는 상수이기 때문에, N.L과 RㆍV는 아래와 같이 간단해진다.
V = [0, 0, 1]
N = [0, 0, 1]
L = [XL, YL, ZL]
N.L = ZL
RㆍV = 2.ZN(N.L)-ZL = 2ZL - ZL = ZL
L이 상수일 때(방향성 광의 광원) 정규화된 ZL은 RㆍV 가 요구될 때마다 상수의 형태에서 소프트웨어에 의해 공급되어질 수 있다. L이 다양할 때, 정규화된 ZL은 즉각적으로 계산되어 질 수 있다. 그것은 계산 L의 과정으로부터 결과물로써 얻어진 것이다.
범프 맵이 있을 때
N이 상수가 아닐 때 RㆍV의 계산은 다음과 같은 일반식에 의해 쉽게 구현된다:
RㆍV = 2ZN(N.L ) - ZL
입력 및 출력은 도128에 도시되었으며 실제 구현은 도 129에 도시되었다.
감쇠 팩터(Attenuation Factor)의 계산
방향성 광
광원이 무한히 떨어져 있을 때 광의 세기는 이미지 전체에 걸쳐서 변화하지 않는다. 따라서 감소 팩터 fatt 는 1이 된다. 이 상수는 무한히 멀리 떨어진 광원을 위한 일루미네이트 계산을 최적화하는데 사용될 수 있다.
옴니 광과 스포트라이트(Omni lights and Spotlights)
광원이 무한히 떨어져 있지 않을 때 광의 세기는 다음 식에 따라 변화한다:
fatt = f0 + f1/d + f2/d2
계수 f0, f1, 및 f2 를 적절히 조절함으로써 광의 세기를 거리에 비례하여 선형으로 일정하게 감소하게 하거나 거리의 제곱에 따라 감소하게 할 수 있다.
d = ||L||이므로 fatt 의 계산은 도 130에 도시된 다음의 과정으로 표시된다.
fatt 를 계산하는 실제 과정은 도 131에서 정의될 수 있다.
이 때, 다음 상수들은 소프트웨어에 의해 설정된다:
상수 | 값 |
K1 | F2 |
K2 | f1 |
K3 | F0 |
콘 및 반영 팩터의 계산(Calculation of Cone and Penumbra Factor)
방향성 광와 옴니 광
이들 두 광은 한 곳으로 집중되지 않으며 따라서 콘 또는 반영 팩터를 갖지 않는다. 따라서 콘- 반영 팩터는 1이다. 이들 상수는 방향 라이트와 옴니 광을 위한 일루미네이트 계산을 최적화하는데 사용될 수 있다.
스포트라이트
스포트 라이트는 특정 목표 지점(PT)에 집중된다. 스포트 라이트의 세기는 이미지의 특정 점이 콘 내에 있는지 반영부에 있는지 또는 콘/반영부의 외부에 있는지에 따라 달라진다.
도132를 보면, 반영부의 위치에 따른 fcp의 그래프가 도시되어 있다. 콘의 내부(470)에서는 fcp가 1이다. 반영우의 밖(471)에서는 fcp가 1이며, 콘의 가장자리에서 반영부의 끝까지는 3차함수(472)에 따라 광의 세기가 변화한다.
반영부(475)와 콘(476)의 계산을 위한 여러 벡터들은 도133과 도134에 도시되었다.
도134에 도시된 1차원에서의 이미지 표면에서 각 A, B 및 C가 정의된다. A는 목적점(479)과 콘의 끝(480) 간의 각도이다. C는 목적점(479), 광원(478) 및 반영부(481) 끝간의 각도이다. 두 각도는 주어진 광원에 대해 고정되어 있다. B는 목적점(479), 광원(478) 및 계산되는 점(482)간의 각도이며, 따라서 이미지상에서 계산되는 점에 따라 변화한다.
A와 C간의 범위는 0과 1사이로 정규화되고 다음식에 의해 B가 이 각도사이에 있는 거리를 계산할 수 있다:
(B-A) / (C-A)
이 범위는 잘라내기 연산에 의해 강제로 0과 1사이에 있게 되고 이 값은 fcp의 3차 근사의 참조로 사용된다.
fcp 의 계산은 따라서 도 135에 도시된 입력과 출력을 가지는 과정으로 나타내어 지며 실제 fcp의 계산은 도136에 주어지는데, 이때 다음 상수들은 소프트웨어에 의해 설정된다:
상수 | 값 |
K1 | XLT |
K2 | YLT |
K3 | ZLT |
K4 | A |
K5 | 1/(C-A). (반영이 없을 때 최대) |
다음 참조표가 사용된다:
참조 | 크기 | 상세사항 |
LU1 | 64 엔트리 엔트리 당 16비트 | Arcos(X) 상수 K5 와 K6에 대하서는 단위가 같음 테이블을 최고 6비트에 의해 인덱싱 2엔트리의 선형 내삽으로 결과 타이밍은 2 * 8bits * 2 entries = 4 cycles |
LU2 | 64 엔트리 엔트리 당 16비트 | 광 반응 함수fcp F(1) = 0, F(0) = 1, 기타는 3차에 따름 테이블을 6비트에 의해 인덱싱(1:5) 2엔트리의 선형 내삽으로 결과 타이밍은 2 * 8bits = 4 cycles |
주변 기여의 계산(Calculation of Ambient Contribution)
이미지에 적용되는 광의 개수와 무관하게, 주변광 기여(ambient light contribution)은 각 픽셀마다 한번씩 수행되며, 범프-맵(bump-map)에 의존하지 않는다.
주변 기여 계산 프로세스는 도 131에 나타낸 바와 같이 입력과 출력를 가지는 프로세스로 표현될 수 있다. 프로세스의 구현에는 입력 이미지(Od)로부터의 각 픽셀을 도 138에 나타낸 바와 같이 상수 값(Iaka)으로 곱할 것을 요하며, 소프트웨어에 의하여 다음의 상수가 설정된다:
상수 | 값 |
K1 | Iaka |
확산(diffuse) 기여의 계산(Calculation of Diffuse Contribution)
표면에 인가되는 각각의 광은 확산(diffuse) 일루미네이션(diffuse illumination)을 생성한다. 확산(diffuse) 일루미네이션은 다음 공식에 의하여 주어진다:
diffuse = kdOd(N.L)
고려하여야 할 2가지의 상이한 구현이 존재한다:
구현 1 - 상수 N과 L
N과 L이 모두 상수(광은 방향성이고 범프-맵은 없음)일때:
N.L = ZL
따라서:
diffuse = kdOdZL
Od가 유일한 변수이므로, 확산(diffuse) 기여를 계산하기 위한 실제 프로세스는 도 139에 나타낸 바와 같으며, 소프트웨어에 의하여 다음과 같은 상수가 설정된다:
상수 | 값 |
K1 | kd(N.L)=kdZL |
구현 2 - 상수가 아닌 N과 L
N 또는 L이 상수가 아니면(범프-맵 또는 옴니 광로부터의 일루미네이션 또는 스포트라이트), 확산(diffuse) 계산은 직접 다음 공식에 따라 수행된다:
diffuse = kdOd(N.L)
확산 기여 계산 프로세스는 도 140에 나타낸 바와 같이 입력을 가지는 프로세스로서 표현될 수 있다. N.L은 N.L 계산 프로세스(Calculate N.L Process)를 이용하여 계산되거나, 또는 상수로서 제공될 수 있다. 확산 기여를 계산하는 실제 프로세스는 도 141에 나타낸 바와 같으며, 소프트웨어에 의하여 다음과 같은 상수가 설정된다:
상수 | 값 |
K1 | kd |
반사 기여의 계산(Calculation of Specular Contribution)
표면에 인가되는 각각의 광은 반사 일루미네이트(specular illumination)을 생성한다. 반사 일루미네이트는 다음 공식에 의하여 주어진다:
specular = ksOs(RㆍV)n
where Os = kscOd + (1-ksc)Ip
반사 기여 계산 프로세스(Calculate Specular process)에는 두 가지 구현이 있다.
구현 1 - 상수 N 과 L
제1 구현은 N과 L이 모두 상수인 경우(광은 방향성이고 범프-맵은 없음)이다. N, L 및 V가 상수이므로, N.L과 RㆍV 역시 상수이다:
V = [0,0,1]
N = [0,0,1]
L = [XL, YL, ZL]
N.L = ZL
RㆍV = 2ZN(N.L) ZL
= 2ZL - ZL
= ZL
반사 계산은 따라서 아래와 같이 간략화된다.
Specular = ksOsZL
n
= ksZL
n(kscOd+(1-ksc)Ip)
= kskscZL
nOd+(1-ksc)IpksZ
L
n
Od가 반사 계산에서 유일한 변수이므로, 반사 기여의 계산은 도 142에 나타낸 바와 같이 입력과 출력을 가지는 프로세스로서 표현될 수 있고, 반사 기여를 계산하는 실제 프로세스는 도 143에 나타낸 바와 같으며, 소프트웨어에 의하여 다음과 같은 상수가 설정된다:
상수 | 값 |
K1 | kskscZL n |
K2 | (1-ksc)IpksZL n |
구현 2 - 상수가 아닌 N 과 L
이 구현은 N 또는 L이 상수가 아닌 경우(범프-맵 또는 옴니 광로부터의 일루미네이트 또는 스포트라이트)이다. 여기에서는 RㆍV가 공급되어야 할 것을 요하므 로, RㆍVn 역시 계산되어야 한다.
반사 계산 프로세스는 도 144에 나타낸 바와 같이 입력과 출력을 가지는 프로세스로서 표현될 수 있다. 도 145는 반사 기여를 계산하는 실제 프로세스를 보여주며, 소프트웨어에 의하여 다음과 같은 상수가 설정된다:
상수 | 값 |
K1 | ks |
K2 | ksc |
K3 | (1-ksc)Ip |
다음과 같은 색인 도표가 사용된다:
색인 | 크기 | 상세 |
LU1 | 32엔트리 엔트리 당 16비트 | Xn 테이블은 정수 R·V의 5개의 최대비트로 색인됨. R·V의 프랙션을 이용하여 2개의 엔트리를 선형보간한 결과. 2개의 곱셈으로 보간. 색인으로부터 데이터를 검색하는 데 걸리는 시간은 2*8비트*2엔트리=4사이클 |
주변광이 유일한 일루미네이트일 때
만약 주변 기여가 유일한 광원이면, 도 146에 나타낸 바와 같이 전반적인 프로세스의 어느 것에도 주변광을 추가할 필요가 없으므로 프로세스는 매우 간단해진다. 우리는 이미지를 수직적으로 2개의 부분으로 분할할 수 있고, 그 절반의 각각을 동시에 주변광 로직을 곱하는 처리(즉 총 2개의 곱셈 ALU와 4개의 순차 반복기를 사용하는 것)도 가능하다. 따라서 타이밍은 주변광 인가에 대하여 픽셀 당 1/2 사이클이 된다.
전형적인 일루미네이트의 경우로 하나 또는 그 이상의 광이 밝혀지는 장면이 있다. 이들 경우에는, 주변광 계산이 사소하기 때문에, 주변 계산이 각각의 광원의 프로세스에 포함된다. 처리되어야 할 제1의 광은 올바른 Iaka 설정을 가져야 하며, 후속적인 광들은 Iaka값을 0으로 가져야 한다(복수의 주변 기여를 방지하기 위함).
만약 주변광이 (제1 경로가 아닌) 개별적인 경로로서 처리되면, 주변광을 현재 계산되는 값에 더할 필요가 있다(동일한 어드레스에 판독 및 기록할 것을 요함). 프로세스의 개관이 도 147에 도시된다.
프로세스는 3개의 이미지 반복기와, 1개의 곱셈 ALU를 사용하며, 평균 픽셀 당 1 사이클을 점유한다.
무한 광원(Infinite Light Source)
무한 광원의 경우에는 이미지에 걸쳐서 일정한 광원 강도(light source intensity)를 가진다. 따라서 L과 fatt는 모두 상수가 된다.
범프-맵 없음(No Bump Map)
범프-맵이 없는 경우에는, 고정 정규 벡터 N[0,0,1]이 존재한다. 일루미네이트의 복잡도(complexity)는 상수인 N, L 및 fatt에 의하여 대폭 감소한다. 범프-맵 없이 하나의 방향성 광(Directional light)을 인가하는 프로세스가 도 147에 나타나 있으며, 소프트웨어에 의하여 다음과 같은 상수가 설정된다:
상수 | 값 |
K1 | Ip |
하나의 무한 광원에는 도148에 나타낸 바와 같은 논리적 수행을 기대할 수 있으며, K1 내지 K4는 다음의 값으로서 일정하다:
상수 | 값 |
K1 | Kd(NsL)=KdLZ |
K2 | ksc |
K3 | Ks(NsH)n=KsHZ 2 |
K4 | Ip |
K2, K3 및 K4가 상수이므로 프로세스는 단순화될 수 있다. 복잡도는 본질적으로 (곱셈 ALU중 3개를 이용하는) 반사 및 확산(diffuse) 기여의 계산에 달려있으므로, 제4의 곱셈 ALU로서 주변 계산을 안전하게 추가하는 것이 가능하다. 처리되는 제1 무한 광원은 실제 주변광 파라미터 Iaka를 가질 수 있으며, 모든 후속 무한 광원은Iaka가 0으로 설정될 수 있다. 주변광 계산은 효과적으로 자유로워진다.
만약 무한 광원이 인가될 제1 광이라면, 다른 광원에 의하여 생성되는 현재의 기여를 포함할 필요가 없고, 도 149는 그 상황을 도시하며, 상수는 다음의 값을 가진다:
상수 | 값 |
K1 | kd(NsL)=KdLZ |
K4 | Ip |
K5 | (1-ks(NsHn)Ip=(1-ksHZ 2)Ip |
K6 | kscks(NsHn)Ip=kscksHZ nIp |
K7 | Iaka |
만약 무한 광원이 인가될 제1 광이 아니라면, 이전에 처리된 광에 의하여 생성된 현재의 기여는 포함되어야 하고(동일한 상수 인가), 도 148은 그 상황을 도시한다.
제1의 경우에는 2개의 순차 반복기(490,491)가 필요하며, 제2의 경우에는 3개의 순차 반복기(490,491,492)(여분의 반복기가 이전 광 기여를 판독하는 데에 필 요함)가 필요하다. 어느 경우에든 범프-맵 없는 무한 광원의 인가는 주변광의 선택적 인가를 포함하여 픽셀 당 1 사이클을 점유한다.
범프 맵이 있는 경우
범프 맵(bump-map)이 있을 때, 정규 벡터(the normal vector) N은 픽셀(pixel)당 계산되어져야 하고 상수 광원 벡터(the constant light source vector) L에 적용된다. 1/||N|| 은 반사 2 계산 프로세스(Calculate Specular 2 process) 입력시 필요로 하는 RㆍV를 계산하는 데 이용된다. 다음 상수는 소프트웨어에 의해 정해진다.
상수 | 값 |
K₁ | XL |
K₂ | YL |
K₃ | XL |
K₄ | IP |
범프-맵 순차 판독 반복기(Bump-map Sequential Read Iterator) 490은 범프-맵의 현재 행을 판독하여, X에서의 기울기를 결정하는 입력을 제공한다. 범프-맵 순차 판독 반복기(Bump-map Sequential Read Iterator) 491, 492 는 현재 행의 위와 아래를 판독하여, Y에서의 기울기를 결정하는 입력을 제공한다.
옴니 광(Omni Lights)
옴니 광원(Omni lights source)의 경우 , 라이팅 벡터(the lighting vector) L과 감쇠율(attenuation factor) fatt은 이미지의 각 픽셀(pixel)에 대해 변한다. 그렇기 때문에 L 과 fatt 는 둘 다 각각의 픽셀에 대해 계산되어져야 한다.
범프맵이 없는 경우
범프-맵이 이 없을 때, 상수 정규 벡터(a constant normal vector) N[0,0,1] 이 있다. L 이 각각의 픽셀에 대해 계산되야 하지만, N.L과 RㆍV는 ZL 에 대해 단순화되어야 한다. 범프-맵이 없을 때 , 옴니 광(Omni light)의 적용은 도 149 에 도시된 것처럼 계산되어야 하고 이 때 다음 상수는 소프트웨어에 의해 설정된다.
상수 | 값 |
K₁ | XP |
K₂ | XP |
K₃ | IP |
알고리즘은 이전의 광원들에 대한 기여를 선택적으로 포함하고, 또한 주변광(an ambient light) 계산을 선택적으로 포함한다. 주변광은 알고리즘에 한번만 포함될 필요가 있을 뿐이다. 다른 모든 광로(all other light pass )에 대해서, 주변 기여 계산 프로세스 (the Calculate Ambient process)에서의 적절한 상수들은 모두 0 으로 설정되어야 한다.
도시된 것과 같이 알고리즘은 총 19 곱셈/누적(multiply/accumulate)를 요구한다. 검색을 위해 사용된 시간은 L의 계산 동안 1 싸이클, 반사 기여의 계산 동안엔 4 싸이클이 걸린다. 그러므로 5 싸이클의 프로세싱 시간은 가장 적합하게 되는 최적의 시간이다. 함수에 대한 ALU 들로 최적화 마이크로 코드가 될 수 없을 경우, 이 처리시간은 6 싸이클로 증가된다. 관련된 범프-맵이 없을 경우의 이미지에 대해 옴니 광이 적용되는 속도는 픽셀당 6 싸이클이다.
범프맵이 있는 경우
옴니라이트가 연관된 bump-map 과 같이 이미지에 적용될 때, N, L, N.L 및 RㆍV의 계산은 모두 필수 조건이다. 관련 범프-맵에서의 이미지에 대한 옴니 광의 적용 프로세스는 도 150에 나타난 것과 같고, 이 때 다음 상수는 소프트웨어에 의해 설정된다.
상수 | 값 |
K₁ | XP |
K₂ | XP |
K₃ | IP |
알고리즘은 이전의 광원들에 대한 기여를 선택적으로 포함하고 또한 이 알고리즘은 주변광(an ambient light) 계산을 포함한다. 주변광은 알고리즘에 한번만 포함될 필요가 있을 뿐이다. 다른 모든 광로(all other light pass) 에 대해서, 주변 기여 계산 프로세스(the Calculate Ambient process)에서의 상수들은 모두 0 으로 설정되어야 한다.
도시된 것과 같이 알고리즘은 총 32개의 곱셈/누적 (multiply/accumulate)을 요구한다. 검색을 위해 사용된 시간은 L과 N의 계산에 각각 1 싸이클, 반사 기여 계산에 있어서는 4 싸이클이 걸린다. 그러나 N과 L 에서 요구되는 검색은 모두 같다. (따라서 2LUs 는 3LUs 를 수행한다.) 8 싸이클의 프로세싱 시간이 적합하다. 함수에 대한 ALUs로 최적화 마이크로코드가 될 수 없을 경우 이 시간은 9 싸이클까지 걸리게 된다. 관련된 범프-맵이 있을 경우의 이미지에 대해 옴니 광을 적용되는 속도는 픽셀(pixel)당 9 싸이클이다.
스포트라이트
스포트라이트는 감쇠율(attenuation factor) 팩터가 타깃(a target) 주위에 광을 효과적으로 집중시키는 콘/반영 팩터(cone/penumbra factor) fcp에 의해 수정 되는 것을 제외하고는 옴니 광의 계산과 비슷하다.
범프-맵이 없는 경우
범프-맵이 없을 때, 상수 정규 벡터(a constant normal Vector) N[0,0,1]가 있다. L 은 각각의 화소에 대해 계산되어져야 하지만, N.L과 RㆍV는 ZL 에 대해 단순화 되어야 한다. 도 151은 이미지에 대한 스포트라이트의 적용을 보여주고 있고, 이 때 다음 상수는 소프트웨어에 의해 설정된다.
상수 | 값 |
K₁ | XP |
K₂ | XP |
K₃ | IP |
알고리즘은 이전의 광원들에 대한 기여를 선택적으로 포함하고 또한 이 알고리즘은 주변광 계산을 포함한다. 주변광은 알고리즘에 한번만 포함될 필요가 있을 뿐이다. 다른 모든 광로에 대해서, 주변 계산 프로세스에서의 상수들은 모두 0으로 설정되어야 한다.
도시된 것과 같이 알고리즘은 총 30 곱셈/누적 (multiply/accumulate)를 요구한다. 검색을 위해 사용된 시간은 L의 계산 동안 1 싸이클, 반사기여의 계산 동안에 4 싸이클이 걸리고, 콘/반영(cone/penumbra) 계산에 있어서의 검색은 4싸이클의 2세트(set)가 걸린다.
범프-맵이 있는 경우
스포트라이트가 관련 범프-맵의 이미지에 적용될 때, N, L, N.L 및 RㆍV 의 계산은 모두 필수조건이다. 관련 범프-맵의 이미지에 단일 스포트라이트가 적용되는 프로세스는 도 152 에 나타나 있고, 이 때 다음 상수들은 소프트웨어에 의해 정 해진다.
알고리즘은 이전의 광원들에 대한 기여를 선택적으로 포함하고 또한 이 알고리즘은 주변광 계산을 포함한다. 주변광은 알고리즘에 한번만 포함될 필요가 있을 뿐이다. 다른 모든 광로에 대해서, 주변 계산 프로세스에서의 적절한 상수들은 모두 0으로 설정되어야 한다. 도시된 것과 같이 알고리즘은 총 41개의 곱셈/누적 ( multiply/ accumulate)을 요구한다.
프린트 헤드(44)
도 153은 8개의 세그먼트(segment)로 논리적으로 구성된 단일 프린트 헤드(a single print head)의 로직 레이아웃(the logical layout)을 나타내고 있다. 각기는 페이지의 해당 부분에 대해서 2레벨구조(bi-level)의 청록색(cyan), 자홍색(magenta), 노란색(yellow)로 프린트된다.
프린트를 위한 세그먼트 로딩
무언가가 프린트되기 전, 프린트 헤드의 8개의 세그먼트(segment) 중 각각은 최종 출력 이미지에서 다음 상대적인 열(relative row) 에 해당하는 데이터의 6열로 로드되어야 한다.
열 0 = 라인 N , 노란색, 짝수 도트(even dots) 0,2,4,6,8, ...
열 1 = 라인 N+8, 노란색, 홀수 도트(odd dots) 1,3,5,7, ...
열 2 = 라인 N+10, 자홍색(Magenta), 짝수 도트(even dots) 0,2,4,6,8, ...
열 3 = 라인 N+18, 자홍색, 홀수 도트(odd dots) 1,3,5,7, ...,
열 4 = 라인 N+20, 청록색(Cyan), 짝수 도트(even dots) 0,2,4,6,8, ...
열 5 = 라인 N+28, 청록색, 홀수 도트(odd dots) 1,3,5,7,...
각 세그먼트들은 페이지의 다른 부분에 도트(dot)들을 프린트한다. 각 세그먼트들은 한가지 색상에 대해 750 도트를 프린트하며, 한 열 위에 375 짝수의 도트들을 프린트하고, 나머지 위에 375 홀수 도트를 프린트한다. 8 개의 세그먼트들은 위치에 상응하는 도트를 가지고 있다.
세그먼트 | 시작점 | 마지막점 |
0 | 0 | 749 |
1 | 750 | 1499 |
2 | 1500 | 2246 |
3 | 2250 | 2999 |
4 | 3000 | 3749 |
5 | 3750 | 4499 |
6 | 4450 | 5249 |
7 | 5250 | 5999 |
각각의 도트는 프린트 헤드 세그먼트에서 단일 비트(single bit)로 표현된다. 데이터는 세그먼트 BitValue 핀(pin)으로 옮겨지는데 한번에 1 bit 씩 로드되고, 데이터는 BitClock에 맞춰서 세그먼트의 쉬프트 레지스터에 클럭된다.
데이터가 쉬프트 레지스트로 로드되기 때문에, 로딩되는 비트의 순서는 정확해야 한다. 데이터는 최대 속도 10MHz 로 프린트 헤드에 클럭된다.
일단 모든 비트들이 로드되어지면 , 비트들은 프린트 헤드 출력 버퍼로 병렬적으로 전송되고, 프린트가 준비된다. 전송은 세그먼트의 ParallelXferClock 핀에서의 단일 펄스에 의해 이루어진다
프린트 제어
전력을 유지하기 위해선, 꼭 프린트 헤드의 모든 도트들이 동시적으로 프린 트될 필요는 없다. 제어 라인(control lines)의 한 세트가 특정 도트의 프린트를 가능하게 해준다. ACP 같은 외부 제어러는 프린트 속도나 전력 요구량에 따라 프린트 펄스(the print puls)의 지속기간 뿐만 아니라 한번에 프린트되는 도트의 수를 바꿀 수도 있다.
각 세그먼트(segment)에는 5 개의 NozzleSelect 라인들 이 있고, 이 NozzleSelect 라인은 한 열당 32 세트의 노즐을 선택하도록 디코드된다. 각 행은 375 노즐이 있기 때문에, 각 세트는 12 개의 노즐로 이루어진다. 각 세그먼트에는 2개의 BankEnable 라인들이 있는데, 각각은 색의 짝수열과 홀수열을 위해 있다. 마지막으로, 각 세그먼트에는 3개의 ColorEnable 라인들이 있다. 이 라인들은 각각 청록색(C),자홍색(M),노란색(Y)의 색들을 프린트하는데 쓰인다. 컬러인에이블 라인중 하나에서 펄스는 그 색상의 특정 열에 해당하는 노즐이 프린트되도록 한다. 펄스는 일반적으로 지속시간이 대략 2㎲ 이다
만약 모든 세그먼트가 NozzleSelect, BankEnable, ColorEnable 라인들의 동일 세트에 의해 제어된다면(이때 이들은 프린트 헤드에 외부적으로 연결된다), 다음 것들이 참이 된다:
- 만약 짝수와 홀수 뱅크 모두가 동시에 프린트된다면 (두개의 BankEnable 비트가 설정되어 있다), 24개의 노즐이 한 세그먼트에 대해 동시에 방사되며, 모든 세그먼트에 대해선 총 192개의 노즐이 방산된다. 이때 5.7 와트가 소비된다.
- 만약 짝수와 홀수 뱅크가 독립적으로 프린트된다면, 12개의 노즐만이 한 세그먼트에 대해 동시에 방사되며, 총 96 개의 노즐이 방사된다. 이때는 2.85 와트(Watt) 가 소비된다.
프린트 헤드 인터페이스 (62)
프린트 헤드 인터페이스(Print Head Interface, 62) 는 프린트 헤드에 ACP를 연결하며, 외부의 프린트 헤드에 대해 데이터와 적절한 신호를 제공한다. 프린트 헤드 인터페이스(62)는 대략 2초안에 사진을 프린트할 수 있도록 VLIW 프로세서 74와 CPU 상에 돌아가는 소프트웨어 알고리즘와 결합하여 작동한다.
프린트헤드 인터페이스에 대한 개락적인 입력과 출력은 도 154에 나타난 것과 같다. 어드레스와 데이터 버스는 프린터 헤드 인터페이스의 여러가지 레지스터들을 주소화 하기 위해 CPU에 의하여 사용된다.
단일 BitClock 출력라인은 프린트 헤드의 8개 세그먼트 모두에 연결된다. 8 개의 DataBits 라인은 각각의 세그먼트에 하나씩 연결되고, 프린트 헤드의 8개 세그먼트에 동시에 클럭된다.(BitClock 펄스에 따라) 예를 들어 도트 0 이 세그먼트 0 에 전송되고, 도트 750은 세그먼트 1 에 전송되며, 도트 1500이 세그먼트 2로의 전송 등이 동시에 일어난다.
VLIW 출력 FIFO(The VLIW Output FIFO)는 불안정한 2단식의 청록색(C),자홍색(M) 및 노란색(Y) 6000 X 9000 해상도 프린트 이미지를 8개의 데이터비트(DataBit)의 출력에 정확한 순서로 유지시켜 준다. 단일 펄스에 따라, 모든 세그먼트가 동시에 비트를 전송하도록 ParallelXferClock은 프린트 헤드의 8개 세그먼트에 각각 연결된다. 마지막으로 NozzleSelect, BankEnable 및 ColorEnable line은 8개 세그먼트에 각각 연결되어서, 프린트 헤드 인터페이스가 각 펄스에 따라 몇 개의 방울이 프린트되었는지를 제어할 뿐만 아니라 청록색(C),자홍색(M) 및 노란색(Y) 의 드롭 펄스(drop pulse ) 기간을 제어 할 수 있게 한다 프린트 헤드 인터페이스의 레지스터는 0 ~ 6 ㎲ 범위에서 특정 펄스를 가질 수 있으며, 2 ㎲의 전형적인 지속기간을 가지고 있다.
이미지를 프린트하기
이미지가 아트캠(Artcam) 사용자 손에 들어가기 전에 2 단계를 거쳐야 한다:
1. 프린트될 이미지의 준비
2. 준비된 이미지의 프린트
이미지의 준비는 한번만 해 주면 된다. 이미지의 프린트는 원하는 만큼 다수 실행해 질 수있다.
이미지의 준비
프린트될 이미지의 준비는 다음을 포함한다:
1. 사진 이미지를 프린트 이미지로 변환한다.
2. 프린트 이미지(내부 색 공간; internal color space ) 를 프린터의 프린트 방향에 맞도록 회전시킨다.
3. (필요하다면) 압축된 채널(channel) 의 상향 보정을 행한다.
4. 내부 색공간(internal color space) 로부터 특정한 프린터와 잉크에 적합한 CMY 색공간 으로의 색상 변환을 한다.
이미지 준비가 끝나면, 4.5MB로 된 1000 X 1500 CMY 이미지는 이제 프린트될 준비가 되어 있다.
사진이미지에서 프린트가미지로 변환
사진 이미지를 프린트용 이미지로 변환은 이미지 프로세싱을 위해 바크 스크립트(a Vark script)를 실행시켜 주어야 한다. 스크립트는 디폴트 이미지 강화 스크립트(a default image enhancement script) 또는 현재 삽입된 아트카드(Artcard)에서 가져온 바크 스크립트 둘 중의 하나가 사용된다. 바크 스크립트는 CPU를 통해 실행되며, VLIW 벡터 프로세서(the VLIW Vector Processor)에 의해 실행된 함수로 가속된다.
프린트 이미지 회전시키기
메모리 상의 이미지는 본래 꼭대기 부분이 위쪽으로 가게 배치되어 있다. 이것은 올바른 바크 공정(Vark processing)을 고려한 것이다. 이미지가 프린트되기 전에, 이것은 프린트 롤 방향으로 병치시켜야 한다. 재배열은 오직 한 번 필요하다. 이어지는 프린트 이미지의 프린트는 이미 적절히 회전되어 있을 것이다.
적용될 변환은 단지 사용자가 아트캠(Artcam)의 "이미지 캡쳐(Image Capture)" 버튼을 누를 때 CCD로부터 포착되는 동안 적용된 역상이다. 만일 본래의 회전이 0이면, 아무런 변환도 일어날 필요가 없다. 만일 본래의 회전이 +90도 이면, 프린트 전에 -90도(270도와 동일) 회전시켜야 한다. 회전에 적용하기 위해 사용되는 방법은 바크 가속 유사 변환 기능(Vark accelerated Affine Transform function)이다. 유사 변환 엔진은 각각의 색조 채널을 독립적으로 회전시키기 위한 것이라 말할 수 있다. 색조 채널은 그 자리에서 회전될 수 없다는 것을 명심하라. 그 대신 그것들은 앞서 연장 단일 채널(1.5MB)용으로 사용된 공간을 이용할 수 있 다.
도 155는 a 및 b 채널이 4:1로 압축된 a 랩 이미지의 회전예를 나타낸다. L 채널이 더 이상 (단일 채널 영역이) 요구되지 않는 공간으로 회전되고, 이어서 a 채널이 L에 의해 비어있는 공간으로 회전될 수 있으며, 마지막으로 b 채널이 회전될 수 있다. 3채널의 회전에 필요한 총 시간은 0.09초이다. 이는 첫 프린트 이미지 전에 수용 가능한 시간경과이다. 이어지는 프린트는 이 같은 오버헤드를 초래하지 않는다.
업 보간 및 색조전환 (Up interpolate and color convert)
랩(Lab) 이미지는 프린트 전 반드시 CMY로 전환되어야 한다. a 및 b 채널 랩 이미지의 압축여부에 따라 상이한 공정이 일어난다. 랩 이미지가 압축되어 있으면, a 및 b 채널은 반드시 색조변환 발생 전에 압축을 풀어주어야 한다. 랩 이미지가 압축되어 있지 않은 경우는 색조변환이 유일한 필요공정이다. (만일 a 및 b 채널이 압축되어 있으면) 랩 이미지는 반드시 상부보간되고 CMY 이미지로 전환되어야 한다. 스케일 및 색조변환을 결합한 단일 VLIW 프로세스가 사용될 수 있다.
색조전환을 수행하기 위해 사용되는 방법은 바크 가속 색조변환 기능이다. 각각의 색조 채널을 독립적으로 회전시키기 위해 유사 변환 엔진을 사용할 수 있다. 색조 채널은 그 곳에서 회전시킬 수 없다. 그 대신 그것들은 앞서 연장 단일 채널(1.5MB)에 사용된 공간을 이용할 수 있다.
이미지의 프린트
이미지의 프린트는 올바르게 배치된 1000×1500CMY이미지의 채택, 데이터의 생성 및 외부 프린트 헤드로 송신된 신호과 관련이 있다. 프로세스는 VLIW 프로세스 및 프린트 헤드 인터페이스와 관련하여 작동하는 CPU를 포함한다.
아트캠에서 이미지의 해상도는 1000×1500이다. 프린트된 이미지는 6000×9000 도트의 해상도를 갖고, 이는 매우 간단한 관계를 설정한다: 1 픽셀=6×6=36 도트. 도 156에서 보는 바와 같이 각각의 도트는 16.6마이크로미터이므로, 6X6 평방 도트는 100 평방 마이크로미터이다. 각각의 도트는 이층구조이므로, 결과는 디더링하여야 한다.
이미지는 약 2초내에 프린트되어야 한다. 이는 9000열의 도트를 위해 각 열의 프린트 사이에 222 마이크로 세컨드 시간을 의미한다. 프린트 헤드 인터페이스는 이 시간 이내에 6000 도트, 도트당 평균 37ns를 생성하여야 한다. 그러나, 각각의 도트는 3색을 함유하고, 따라서 프린트 헤드 인터페이스는 각 색조 성분을 약 12ns, 또는 ACP의 1 클락 싸이클(100MHs에서 10ns) 내에 생성하여야 한다. 일회의 VLIW 프로세스가 프린트될 다음 라인의 6000 도트 계산에 필요하다. 홀수 및 짝수 C, M 및 Y도트가 6개의 다른 1000×1500 CMY 이미지 라인으로부터 디더링 입력에 의해 생성된다. 제 2 VLIW 프로세스는 이미 계산된 6000도트 라인의 수취, 및 단일수송에서 프린트 헤드 인터페이스에 의해 프린트 헤드로 이송될 8 분절용 8 비트 데이터의 올바른 생성을 담당한다.
CPU 프로세스는 최초 VLIW 프로세스에서 레지스터를 프린트 라인 당 3배 (칼라 성분당 1회=2초에 27000배), 및 두 번째 VLIW 프로세스에서 매 프린트 라인 당 1회(2초에 9000배) 업데이트한다. 이를 수행하기 위해 CPU는 VLIW 프로세스 보다 한 라인 앞서 작동한다.
마지막으로, 프린트 헤드 인터페이스는 비트클럭 신호를 적절히 생산하면서, VLIW 출력 FIFO로부터 8 비트 데이터를 취하고 이를 프린트 헤드로 변환없이 출력한다. 일단 모든 데이터가 전송되면, 이어지는 프린터 라인의 데이터 로딩을 위해 평행 엑스퍼 클럭 신호가 생성된다. 프린트 헤드로의 데이터 전송과 관련하여, 별개의 타이머가 프린트 헤드 인터페이스 내부 레지스터에 의해 특화된 노즐 실렉트, 칼라인에이블, 및 뱅크인에이블 라인을 사용하여 프린트 헤드의 상이한 프린트 사이클용 신호를 생성한다.
CPU는 또한 프린트 공정에서 평행 인터페이스를 통해 다양한 모터 및 길로틴을 제어한다.
C, M 및 Y도트의 생성
본 프로세스의 입력은 프린트용으로 올바로 배향된 1000X1500 CMY 이미지이다. 이미지는 어떤식으로도 압축되지 않는다. 도 157에 도시된 바와 같이, VLIW 마이크로코드 프로그램은 CMY 이미지를 취하고, 디더링시키기 위해 프린트 헤드 인터페이스에 의해 요구되는 C, M 및 Y 픽셀을 생성한다.
3 색조 성분 당 1회, 3회의 프로세스가 수행된다. 프로세스는 평행하게 진행되는 2 서브-프로세스(하나는 짝수 도트 생성용, 및 다른 하나는 홀수 도트 생성용)로 구성된다. 각각의 서브-프로세스는 입력 이미지로부터 하나의 픽셀을 취하고, 3개의 출력 도트를 생성한다 (왜냐하면, 1 픽셀=6 출력 도트이고, 각각의 서브-프로세스는 짝수 또는 홀수 도트와 관련되기 때문이다). 외와 같이, 각각의 사이클로부터 1 출력도트가 생성되나, 매 3 사이클마다 오직 하나의 입력 픽셀만이 읽힌다.
원본 디더링 셀은 각각의 엔터리가 8비트인 64×64셀이다. 상기 원본 셀이 홀수 셀 및 짝수 셀로 나뉘어지고, 따라서 각각은 여전히 높이 64이나 단지 폭이 32 엔터리이다. 홀수 디더링 셀은 원본 디더링 셀 픽셀 1,3,5 등을 포함하는 반면, 짝수 디더링 셀은 원본 디더링 셀 픽셀 0,2,4 등을 포함한다. 디더링 셀이 라인을 가로질러 반복되므로, 전체 라인 동안 2 디더링 셀 각각의 단일 32 바이트 라인이 필요하고, 따라서 완전히 캐슁될 수 있다. 단일 프로세스 라인의 홀수 및 짝수 라인은 8 도트 라인 떨어져서 엇갈리고, 이는 홀수 디더링 셀 라인을 8 라인씩 회전시키기에 편리하다. 따라서, 홀수 및 짝수 디더링 셀 모두에 대해 동일한 옵셋을 사용할 수 있다. 결과적으로 짝수 디더링 셀 라인은 원본 디더링 셀 L 라인의 짝수 엔터리에 상응하고, 짝수 디더링 셀 라인은 원본 디더링 셀 L+8 라인의 홀수 엔터리에 상응한다.
각 색조 성분 당 1회, 3회의 프로세스가 수행된다. CPU 수프트웨어 일상은 홀수 및 짝수 라인용 일련의 판독 반복기가 프린트 헤드에 상응하는 올바른 이미지 라인을 나타낼 것을 확실히 해야 한다. 예를 들어, 18,000도트 한 세트(6000도트 3 세트)를 산출하기 위해:
황색 짝수 도트 라인=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]
디더링 셀 데이터는 그러나, 각 색조 성분용으로 업데이트될 필요가 없다. 3색조용 디더링 셀은 같아지나, 각 성분용 2 도트 라인에 의해 상계된다.
디더링된 출력은 2개의 분리된 출력으로 기록된 홀수 및 짝수 디더링된 도트를 갖는 일련의 기록 반복기에 기록된다. 모든 3 색조성분에 대해 동일한 두개의 기록 반복기가 사용되고, 따라서 그것들은 홀수 및 짝수 도트의 해체(break-up)에서 연속적이다.
한 세트의 도트가 프린트 라인을 위해 생성되는 한편, 앞서 생성된 도트의 세트는 다음 장에서 설명하는 바와 같이 두 번째 VLIW 프로세스에 의해 병합된다.
병합된 8비트 도트 출력의 생성
본 프로세스는 도 158에 도시된 바와 같이, 디더링된 도트의 단일 라인을 취하고, VLIW 출력 FIFO를 통해 프린트 헤드 인터페이스로 출력용 8 비트 데이터 스 트림을 생성한다. 본 프로세스는 대부분의 디더링된 라인에 한꺼번에 세미-랜덤으로 접근하는 것을 필요로 하므로, 모든 라인이 준비되어 있을 것을 필요로 한다. 하기의 상수가 소프트웨어에 의해 설정된다:
상수 | 값 |
K1 | 375 |
순차 판독 반복기는, 단일 색조 성분에 제한적으로 접근하도록 설정된 반복 레지스터와 함께 앞서 생성된 도트의 라인을 가리킨다. 연속하는 픽셀 간의 거리는 375이고, 한 라인과 다음 라인간의 거리는 1 바이트로 설정된다. 결과적으로 각각의 라인당 8 엔터리가 판독된다. 단일 라인은 프린트 헤드 상에 로딩된 8 비트에 상응한다. 이미지에서 "라인"의 총 수는 375로 설정된다. 일련의 판독 반복기에 할당된 최소한 8캐슁 라인으로, 완전한 캐슁 코히어런스가 유지된다. 8 비트를 카운트하는 대신, 8 마이크로코드 단계가 암암리에 카운트한다.
생성 프로세스는 이어서 VLIW 출력 FIFO로 출력되는 단일 바이트로 8 엔터리를 결합하면서, 첫 번째로 짝수 도트로부터 모든 엔터리를 판독한다. 일단 3000개의 모든 짝수 도트가 판독되면, 3000개의 홀수 도트가 판독되고 진행된다. 소프트웨어 일상은 홀수 및 짝수 순차 판독 반복기 내에서 도트의 주소를 각 색조 성분당 한번씩 업데이트시켜야 하고, 이는 각 라인 당 3회에 해당한다. 두개의 VLIW 프로세스는 모든 8개의 ALU 및 VLIW 출력 FIFO를 필요로 한다. CPU가 두 프로세스에서 묘사된 바와 같이 레지스터를 업그레이드할 수 있는 한, VLIW 프로세서는 프린터에 상응하게 충분히 빠른 속도로 디더링된 이미지 도트를 생성할 수 있다.
데이터 카드 판독기
도 159에는 판독용 아트캠 (9)의 삽입을 위한 카드 판독기(500)의 형태가 도시되어 있다. 도 158은 도 159 판독기의 분해 투시도를 나타낸다. 카드 판독기는 컴퓨터 시스템에 내부 연결되어 있고, CCD 판독 메카니즘 (35)를 포함한다. 카드판독기는 삽입된 아트카드(9) 핀치용 핀치 롤러(506, 507)을 포함한다. 롤러 중 하나, 예를 들어 (506)은 카드(9)의 전진용으로, 두개의 롤러 (506, 507) 사이에서 일정한 속도로 아트카드 모터(37)에 의해 작동된다. 아트카드 (9)는, 반순환 교차부를 갖는 투명 플라스틱 몰드(514)로 둘러싸인 일련의 LED 광 (512)를 통과한다. 교차부는 LED 예를 들어 (512)로부터의 광을 LED (512)에 의해 통과할 때 카드 9의 표면상에 집중시킨다. 그것이 표면으로부터 해상도 약 480dpi로 디자인된 고해상선형 CCD(34)로 반사된다. 따라서, 아트카드(9)의 표면은 약 1600dpi 레벨로 인코드되고 선형 CCD(34)는 약 3배 곱셈기로 아트카드 표면을 슈퍼샘플링한다. 아트카드 (9)는, 선형 CCD(34)가 인치당 약 4800 판독 속도로 아트카드 이동의 방향으로 작동하여 슈퍼샘플링할 수 있도록 하는 속도로, 더 구동된다. 스캔된 아트카드 감광센서를 포함할 수 있는 센서(49)는 카드(13)의 존재를 감지하기 위해 작동한다.
CCD판독기는 투명 몰드 플라스틱을 함유하는 바닥 기재 (516), 꼭대기 기재 (514)를 포함한다. 두 기재 사이에, 반도체 제조공정에 의해 건조된 얇고 긴 선형 CCD 배열을 함유하는 선형 CCD 배열 (34)가 삽입되어 있다.
도 160으로 돌아가면, CCD 판독기 유닛의 예시 측면도가 부분 섹션별로 도시 되어 있다. 일련의 LED 예를 들어 512는 카드 (9)가 CCD 판독기 (34)의 표면을 가로질러 통과시 광을 생성하도록 작동된다. 생성된 광은 탑 기재 (523) 부분을 통해 투과된다. 기재는 카드(9)의 표면에서 LED (512)로부터 점 예를 들어 (532)로 생성된 광을 집중시키기 위해 굴곡된 원주를 갖는 부분 예를 들어 (529) 부분을 포함한다. 포집된 광은 점(532)로부터 CCD 배열(34)를 향해 반사된다. 일련의 마이크로렌즈, 예를 들어 과장된 형태로 나타낸(534)는 탑 기재(523)의 표면상에 형성된다. 마이크로렌즈(523)은, 표면을 교차하여 포집된 광을, CCD배열 34의 감광부분상의 광 투하 감지용 CCD 판독기 (34)의 표면부분에 상응하는 점 536에 집하시키기 위해 작동한다.
상기 배열의 수개의 상세화(refinement)가 가능하다. 예를 들어, 선형 CCD (34) 상에 센서장치를 엇갈리게 할 수 있다. 상응하는 마이크로렌즈(34)는 또한 광을 상응하는 교차 CCD센서에 상응시키기 위해 일련의 교차 지점으로 광을 집중시키도록 상응하게 형성시킬 수 있다.
판독을 돕기 위해, 아트카드(9)의 데이터 표면부분을 상기에서 도38의 참조로 논의한 체커보드 패턴으로 조절할 수 있다. 그러나 또 다른 형태의 고주파 변조 또한 가능하다.
아트카드 프린터는 스토리지 아트카드 상의 데이터 출력용으로도 제공될 수 있음이 명백하다. 따라서, 아트카드 시스템은 아트캠 장치 밖에서 정보제공의 일반적인 형태로도 활용 가능하다. 아트카드 프린터는 아트카드를 고화질 프린트 표면에서 프린터할 수 있고, 여러장의 아트카드가 동일한 시트 상에 프린트하고 후 에 분리할 수 있다. 아트카드(9)의 두 번째 표면상에는 연속하는 저장용으로 아트카드(9)에 저장된 파일 등과 관련된 정보가 프린트될 수 있다.
따라서, 아트카드 시스템은 CD롬, 자기 디스크 등과 같은 다른 형태의 저장 대체용으로 사용하기 적합한 단순화된 형태의 저장을 할 수 있게 한다. 아트카드(9)는 또한 대량생산 가능하고, 따라서 재배분용으로 실질적으로 저렴한 형태로 생산된다.
프린트 롤
도 162로 돌아가면, 프린트 롤 42 및 아트캠의 프린트-헤드 부분이 도시되어 있다. 페이퍼/필름 (611)은 연속하는 "거미줄 같은" 프로세스에서 핀치 롤러 (616-619) 및 프린트 헤드 (44)를 또한 포함하는 프린팅 메카니즘 (15)로 공급된다.
핀치 롤러(613)은 드라이브 메카니즘(나타나 있지 않음) 및 프린트 롤러 (613)의 회전 상에 연결되어 있고, 필름 (611) 형태의 페이퍼는 프린팅 메카니즘 (615)를 관통하여 픽쳐 출력 슬롯(6)로 나오도록 배치된다. 회전하는 길로틴 메카니즘(나타나 있지 않음)은 페이퍼 (611)의 롤을 원하는 사진크기로 자르기 위해 사용된다.
따라서 프린터 롤 (42)는 사진으로 이미지화한 그림을 프린트하기 위해 페이퍼 (611)을 프린트 메카니즘 (615)로 공급하는 작용을 하는 것이 명백하다.
도 163에는 프린트 롤42의 분해도가 나타나 있다. 프린트롤(42)는 핀칭롤러 (612, 613)의 작동하에서 출력하는 출력 프린터 페이퍼(611)을 포함한다.
이제 도 164에 대해 언급하자면, 그 곳에는 도 163의 프린트 롤(42)가 "페이 퍼" 필름 롤 없이 보다 세분된 투시도로 도시되어 있다. 프린트롤(42)는 잉크 저장부분(620), 페이퍼롤 부분(622, 623) 및 외부 캐슁 부분(626, 627)을 함유하는 3개의 주요 부분을 포함한다.
먼저 잉크 저장th 부분으로 돌아가 보면, 이는 잉크 저장소 또는 잉크 공급부분 (633)을 포함한다. 프린트용 잉크는 3개의 브래더형 용기(630-632)에 보관되어 있다. 프린트롤(42)가 총 색조 출력 잉크를 공급한다. 따라서, 첫 번째 잉크저장소 또는 브래더 용기 630은 청록색 잉크를 함유한다. 두 번째 저장소(631)은 자홍색 잉크를, 세 번째 저장소 632는 황색 잉크를 함유한다. 각각의 저장소(630-632)는 길이, 폭, 두께등이 상이할지라도 본질적으로 동일한 크기를 가지도록 디자인되었다.
커버(624)와 함께 잉크 저장소(621, 633)은 플라스틱 부분으로 이루어질 수 있고, 열봉합, 자외선 등에 의해 결합되도록 디자인되었다. 동일한 사이즈의 잉크저장소(630-632) 각각은 잉크를 저장소(630-632)로부터 상응하는 잉크 출력부(635-637)로 흘려보내기 위해 상응하는 잉크채널(639-641)에 연결되어 있다. 잉크저장소(632)는 잉크 채널(641), 및 출력부(637)을 갖고, 잉크저장소(631)은 잉크 채널 (640) 및 출력부(636)을 갖고, 잉크저장소 (630)은 잉크 채널 (639) 및 출력부 637을 갖는다.
작동에 있어서, 잉크저장소 (630-632)는 상응하는 잉크로 채워질 수 있고 633 부분은 621 부분에 연결된다. 접이식 블래더인 잉크저장소 (630-632)는 잉크가 잉크 채널 (639-641)을 가로지를 수 있게 하고 따라서 잉크 출력부 (635-637)과 액체교환된다. 또한, 필요하다면 잉크채널 저장소 (630-632)와 관련된 압력이 적절히 유지될 수 있도록 공기투입부를 제공할 수도 있다.
공기압 유입부로 접근 가능한 가압공간을 형성시키기 위해, 캡 (624)를 잉크저장부 (620)에 연결시킬 수 있다.
잉크저장소 부분(621, 633 및 624)은 집적 유닛으로서 함께 연결되고, 내부 프린트롤 부분 (622, 623)에 삽입되도록 디자인되었다. 프린트롤 부분 (622, 623)은 상응하는 암컷부(female)(나타나 있지 않음)와 만나는 수컷부(male) (645-647)에 의해 스닙 핏 방식으로 만나도록 디자인되었다. 유사하게, 암컷부 (654-656)은 상응하는 수컷부 (660-662)와 만나도록 디자인되었다. 페이퍼롤 부분 (622, 623)은 따라서 함께 스냅되도록 디자인되었다. 롤 내부에서 필름의 한쪽 끝은 그것들이 함께 만날 때 두 섹션 (622, 623) 사이에 끼워져 있다. 프린트 필름은 이어서 필요에 따라 프린트롤 부분 (622, 625)에 감길 수 있다.
앞에서도 지적한 바와 같이, 잉크 저장부 (620, 621, 633, 624)는 페이퍼롤 부분 (622, 623) 내부에 삽입되도록 디자인되었다. 페이퍼롤부 (622, 623)은 필요에 따라 필름을 공급하기 위해 정지된 잉크저장 섹션 (621, 633 및 624) 주위를 순환할 수 있다.
외부 케이싱 부분들 (626, 627)은 또한 프린트롤부 (622, 623) 주위를 둘러싸도록 디자인되었다. 덧붙여 핀치롤러(예를 들어 612, 613)의 각 단부은 커버 (626, 627) 내에서 외부적으로 구동되는 롤러 (613)(나타나 있지 않음)으로 프린트 필름을 공급하고 프린트 롤을 빼내기 위해, 상응하는 공극(예를 들어 670)에 끼워 지도록 디자인되어 있다.
마지막으로, 프린트롤 (42)와 관련된 정보저장용 실리콘칩 집적회로 타입 장치 53을 삽입하거나 붙여 넣기 위해, 잉크저장부 (620, 621)에 공극(cavity)(677)이 제공될 수 있다.
도 155 및 도 164에 나타낸 바와 같이, 실리콘칩(53)과의 결합용 연결기판 (681)을 포함하는 결합 유닛 (680)과 결합하도록 하기 위해 프린트롤(42)는 아트캠 카메라장치에 삽입되도록 디자인되었다. 또한, 연결기(680)은 잉크공급부 (635-637)과의 4개의 단부연결부를 포함한다. 잉크공급부는 차례로 잉크 공급 라인 (예를 들어 682)에 연결되고, 필요에 따라 프린트헤드(44)에 잉크를 공급하기 위해 이것이 차례로 프린트헤드공급부(예를 들어 687)에 연결된다.
롤을 형성시키기 위해 활용되는 "매체"(611)는 그 위에 적합한 이미지를 프린트 할 수 있도록 디자인된 많은 다양한 물질을 포함할 수 있다. 예를 들어, 불투명 회전 플라스틱 물질이 활용될 수 있고, 투명플라스틱 시트을 사용함으로써 투명성을 이용할 수 있으며, 금속성 시트 필름을 활용하여 금속성 프린트를 할 수도 있다. 또한, 비록 적합한 짜임새 또는 적합한 지지물질을 활용하는 주위를 기울여야 하나, 옷감 위에 이미지를 프린트하기 위해 프린트롤(42)에 옷감을 이용할 수도 있다.
프린트 매체가 플라스틱인 경우, 잉크를 고정시키고 흡수하는 층을 입힐 수 있다. 또한, 예를 들어, 불투명 백색 매트, 불투명 백색 글로스, 투명 필름, 젖광 투명 필름, 입체 3D 프린트용 렌즈모양의 배열 필름, 금속화 필름, 그레이팅이 나 홀로그램과 같은 엠보싱 광학 변형장치를 갖는 필름, 역면에 기 프린트된 매체, 자기기록층을 포함하는 매체등 다양한 형태의 프린트 매체가 사용될 수 있다. 금속성 호일을 사용하는 경우 금속성 호일은, 잉크 프린터 메카니즘을 통해 잉크를 받아들이도록 채택된, 알루미늄 또는 다른 금속의 박막(수개의 마이크론) 증기층으로 코팅되고 이어서 투명 보호막으로 코팅된 폴리머 베이스를 가질 수 있다.
사용시, 프린트롤(42)는 이미지 프린트용 잉크 및 페이퍼를 필요에 따라 공급하기 위해 내부 카메라 장치에 삽입되도록 확실히 디자인되어 있다. 잉크 출력부(635-637)은 카메라 장치 내에서 상응하는 부분과 만나고, 핀치롤러(672, 673)는 카메라 장치의 조절하에 카메라 장치에 페이퍼를 공급하도록 작동된다.
도 164에 도시된 바와 같이, 설치된 실리콘칩(53)은 프린트롤(42)의 한쪽 끝 부분에 삽입되어 있다. 도 165에는 인증칩(53)이 보다 상세히 나타나 있고, 칩(53)으로부터 이것이 삽입되는 상응하는 카메라로의 커뮤니케이션용 부품인 4개의 커뮤니케이션 리드(680-683)을 포함한다.
도 165로 돌아가면, 칩은 소집적회로(687)을 에폭시에서 둘러싸고 결합 리드 (예를 들어 688)을 외부 커뮤니케이션 리드(680-683)에 연결시켜 별개로 제조할 수 있다. 집적 칩(687)은 100 마이크론 필기역(scribe boundary)을 갖고, 약 400 평방 마이크론이다. 결과적으로, 칩을 프린트롤(42)의 적절한 공극표면에 접착시킬 수 있다. 도 166에는 결합패드(681, 682)에 내부 연결된 집적회로(687)이 도 165 배열의 분해도로 도시되어 있다.
도 164A 내지 164E 에서, 참조번호 1100은 일반적으로 프린팅 카트리지(1100)을 가르킨다. 프린팅 카트리지(1100)는 본 발명에 따라 잉크 카트리지(1102)를 포함한다.
프린팅 카트리지(1100)은 하우징(1104)를 포함한다. 도 2에 보다 명백히 도시된 바와 같이, 하우징(1104)는 상부 몰딩(1106) 및 하부 몰딩(1108)에 의해 한정된다. 몰딩(1106 및 1108)은 클립(1110)에 의해 결합된다. 하우징(1104)는 카트리지(1100)에 수려한 외관을 부여하는 라벨(1112)로 싸여 있다. 라벨(1112)는 또한 사용자가 카트리지(1100)을 사용할 수 있도록 정보를 제공한다.
하우징(1104)은 내부에 잉크 카트리지를 수용하는 챔버(1114)를 한정한다. 잉크 카트리지 (1102)는 하우징(1104)의 챔버(1114)에 고정되어 지지된다.
전자(1120)에 대해 감긴 필름/매체(1118)의 롤(1126)을 함유하는 프린트 매체(1116)의 공급은 하우징(1104)의 챔버(1114)에서 받아들여진다. 전자(1120)는 잉크 카트리지(1102) 위로 미끄러지듯 받아들여지고 또한 회전성이다.
도 164B에 도시된 바와 같이, 상부 몰딩(1106) 및 하부 몰딩(1108)이 함께 클립될때 출구 슬롯(1122)는 페이퍼(1118)의 끝부분이 통과되어 나오는 곳으로 규정된다.
카트리지(1100)는, 페이퍼(1118)이 롤(1126)으로부터 공급될 때 컬을 없애주고 또한 페이퍼(1118)을 슬롯(1122)로 통과시키는 롤러 어셈블리(1124)를 포함한다. 롤러 어셈블리(1124)는 드라이브 롤러(1128) 및 2개의 구동 롤러(1130)을 포함한다. 구동 롤러(1130)은 하우징(1104)의 하부 몰딩(1108)의 바닥(1134)에 우뚝 선 립(1132)에서 회전 지지된다. 롤(1130)은 드라이브 롤러(1128)과 함께, 그것이 하 우징(1104)로부터 출력시 페이퍼(1118)에 속도 및 위치조절을 위한 견인력을 제공한다. 롤러(1130)는 폴리스티렌과 같은 적합한 합성 플라스틱 물질의 주형이다. 이와 관련하여 또한 상부 몰딩(1106) 및 하부 몰딩(1108)은 폴리스티렌과 같은 적합한 합성 플라스틱 물질의 주형이다.
드라이브 롤러(1128)는 하우징(1104)의 상부 몰딩(1106) 및 하부 몰딩(1108)의 측벽에 각각 한정된 결합 부위(1138 및 1140) 사이에 회전식으로 고정된 드라이브 쉐프트(1136)을 포함한다. 드라이브 롤러(1128)의 반대끝(1142)는 하우징(1104)의 상부 몰딩(1106) 및 하부 몰딩(1108) 내에서 적합한 형태(나타나 있지 않음)로 회전식으로 유지된다.
드라이브 롤러(1128)는 고압착 폴리스틸렌으로 이루어지고 그 위에 베어링 수단을 탄성 또는 고무 롤러부(1144)의 형태로 몰딩한 쉐프트(1136)을 포함하는 두개의 주사 몰딩이다. 이와 같은 부분(1144)는 페이퍼(1118)을 양으로 연동시키고 페이퍼(1118)이 카트리지(1100)으로부터 공급될 때 페이퍼(1118)의 미끄럼을 방지한다.
하우징(1104)로부터 돌출하는 롤러(1128)의 단부는, 내부에 프린팅 카트리지(1100)이 장착되어 있고 카메라와 같은 장치의 프린트헤드 어셈블리의 기어를 넣은 계면(나타나 있지 않음)과 결합한 십자형 배열(1146)(도164A) 형태의 연동 형식을 갖는다. 이와 같은 배열이, 페이퍼(1118)이 프린트헤드로 공급되는 속도가 프린트헤드에 의한 프린트와 일치하여, 잉크가 페이퍼(1118) 상에 정확히 공급될 수 있게 한다.
잉크 카트리지(1102)는 정원주 사출형태인 용기(1148)을 포함한다. 용기(1148)은 폴리스티렌과 같은 적합한 합성 플라스틱 물질로부터 사출된다.
발명의 바람직한 형태에서, 프린팅 카트리지(1100)과 함께 사용되는 프린트헤드는 다색 프린트헤드이다. 따라서, 용기(1148)은 복수, 보다 구체적으로 4개의 구획 또는 저장소(1150)으로 나뉘어 진다. 각각의 저장소(1150)은 상이한 색조 또는 형태의 잉크를 저장한다. 한 실시예에서, 저장소(1150)에 함유된 잉크는 청록색, 자홍색 및 황색 또는 검정잉크이다. 발명의 또 다른 실시예에서는, 4번째 저장소(1150)에 단지 적외선 스펙트럼에서만 볼 수 있는 잉크가 저장되어 있는 한편, 3개의 저장소(1150)에 청록색, 자홍색 및 황색 잉크가 수용된다.
도 164C 및 164D의 도면에 보다 명백히 나타낸 바와 같이, 용기(1148)의 한쪽 단부은 단부캡(1152)에 의해 차단되어 있다. 단부캡(1152)는 내부에 한정된 복수의 개구부(154)를 갖는다. 개구부(1154)는 각각의 저장소(1152)와 관련되어 있어 단부캡(1152)를 갖는 용기(1148)의 단부, 저장소(1150) 내에서 대기압이 유지된다.
봉합배열(seal arrangement)(1156)은 단부에 단부 캡(1152)를 갖는 용기(1148)에 수용된다. 봉합배열(1156)은 각각의 저장소(1150)에 미끄러지듯 유입된 젤라틴성 물질인 사분면 펠렛(1158)을 포함한다. 젤라틴성 물질 펠렛(1158)은 열플라스틱고무 및 탄화수소로 이루어진 화합물이다. 탄화수소는 백색 미네랄 오일이다. 열플라스틱 고무는 미네랄 오일에 충분한 견고성을 부여하여 관련 저장소(1150) 내에서 펠렛(1158)이 미끄러질 수 있도록 하는 한편 펠렛(1158)이 정상 작동 온도에서 형태를 유지하게 해주는 공중합체이다. 적합한 열플라TM틱 고무는 쉘 화학에서 "크라톤"이라는 등록상표명으로 판매되는 제품이다. 상기 공중합체는 화합물 내에서 각각의 펠렛(1158)에 젤 같은 항상성을 부여하기에 충분한 량으로 존재한다. 통상적으로, 공중합체는 사용되는 형태에 따라 질량 대비 약 3 내지 20%의 양으로 존재한다.
사용시 화합물이 가열되어 액체로 된다. 일단 각각의 저장소(1150)이 특유의 잉크로 충진되고 화합물이 용융 상태에서 각각의 저장소(1150)으로 부어지고 그 곳에서 화합물이 펠렛(pellet)(1158)을 형성한다. 펠렛(1158) 뒤, 즉 단부 캡(1152)와 마주보는 펠렛(1158) 단부의 대기압이, 잉크가 저장소(1150)으로부터 회수될 때, 자가 윤활되는 펠렛(1158)이 용기(1148)의 반대편 단부으로 미끄러지도록 해준다. 펠렛(1158)은 전화시 용기로부터의 잉크공급을 중단하고, 저장소(1150)에서 잉크의 오염을 방지하며 또한 저장소(1150)에서 잉크가 건조되는 것을 방지한다. 펠렛(1158)은 저장소(1150)으로부터 잉크가 누출되는 것을 방지하기 위해 또한 소수성이다.
용기(1148)의 반대편 단부은 잉크 칼라 몰딩(ink collar modling)(1160)에 의해 막혀있다. 몰딩(1160)에 이어지는 배플(baffle)(1162)는 탄성 봉합 몰딩(1164)를 받아들인다. 소수성인 탄성 봉합 몰딩(1164)는 그 속에 한정된 봉합 커튼(1166)을 갖는다. 각각의 봉합 커튼(1166)은 슬릿(1168)을 가져, 프린트헤드 어셈블리로부터 나온 결합 핀(나타나 있지 않음)이 슬릿(1168)을 통해 용기(1148)의 저장소(1150)과 함께 액체 커뮤니케이션으로 삽입될 수 있도록 한다. 속이 빈 보스(1170)이 잉크 칼라 몰딩(1160)의 반대편으로부터 돌출한다. 각각의 보스(1170)은 잉크 칼라 몰딩을 용기(1148)의 단부에 위치시키기 위해 관련 저장소(1150) 내에 안정적으로 고정된다.
다시 도 164C로 돌아가서, 잉크 칼라 몰딩(1160)은 캐리어 또는 페이시아(carrier or fascia) 몰딩((1172)에 의해 위치에 유지된다. 페이시아 몰딩(1172)는 그 내부를 통하여 탄성 봉합 몰딩(1164)로 접근 가능하게 한정된 네잎 클로바 모양의 윈도우(1174)를 갖는다. 페이시아 몰딩(1174)는 하우징(1104)의 상부 몰딩(1106) 및 하부 몰딩(1108) 사이에 사로잡혀 있다. 각각 하우징(1104)의 상부 몰딩(1106) 및 하부 몰딩(1108)의 내부 표면으로부터 확장되는 페이시아 몰딩(1174) 및 웹(1176)과 (1178)은 구획(1180)을 한정한다. 공기 필터(1182)는 구획(1180)에 수용되고 단부 몰딩(1174)에 의해 적소에 유지된다. 공기필터(1182)는 프린트헤드 어셈블리와 함께 작동한다. 노즐가드를 효과적으로 크리닝하기 위해, 공기가 프린트헤드 어셈블리의 노즐 가드를 가로질러 분다. 상기 공기는 페이시아 몰딩(1172) 내 투입구(1184)로 유입되는 핀(나타나 있지 않음)에 의해 공기필터(1182)를 통과함으로써 걸러진다.
공기필터(1182)는 도 164E에 보다 상세히 나타나 있다. 공기필터(1182)는 필터매체(1192)를 포함한다. 필터매체(1192)는 합성섬유기재이고, 필터용 표면적을 증가시키기 위해 홈이 파진 형태로 배열되어 있다. 페이퍼 기재 필터 매체(1192) 대신 다른 섬유성 배트를 또한 사용할 수 있다.
필터 매체(1192)는 용기(1194)에 수용된다. 용기(1194)는 베이스 몰딩(1196) 및 리드(1198)을 포함한다. 하우징(1104)의 구획(1180)에 수용되기 위해, 용기(1194)는 부분 환상 또는 말발굽 모양이다. 따라서, 용기(1194)는 한 쌍의 마주보는 단부(1200)을 가진다. 공기 투입구(1202)는 각 단부(1200)에 한정된다.
공기 유출구(1204)는 리드(1198)에 한정된다. 공기 유출구(1204)는 먼저 필름 또는 멤브레인(1206)에 의해 폐쇄된다. 필터(1182)가 구획(1180)에서 위치에 장착될 때, 공기 유출구(1204)는 페이시아 몰딩(1172)에서 개구(1184)와 함께 레지스터내에 존재한다. 프린트헤드 어셈블리로부터 나온 핀이 필름(1206)에 구멍을 뚫고 이어서 공기가 노즐 가드 및 프린트헤드 어셈블리의 프린트헤드를 지나기에 앞서 공기필터(1182)를 통해 대기로부터 공기를 유입시킨다.
베이스 몰딩(1194)는 케니스터(canister)(1194) 내의 필터 매체(1192) 로케이팅용인 로케이팅 포메이션(1208, 1210)을 포함한다. 로케이팅 포메이션(locating formations)(1210)은 필터 매체(1192)의 단부들(ends)(1214)을 연결하는 갈비대 형태인데 반해, 로케이팅 포메이션(1208)는 복수의 핀(1212) 형태이다.
일단 필터 매체(1192)를 베이스 몰드(1196)에 위치시키면, 리드(1198)를 베이스몰딩(1196)에 봉합시키기 위해, 리드(1198)는 초음파 용접 또는 유사한 방법으로 베이스 몰딩(1196)에 고정된다.
프린팅 카트리지(1100)가 조립되면, 멤브레인 또는 필름(1186)을 페이시아 몰딩(1172)의 외부 단부에 적용시켜 윈도우(1174)를 봉합한다. 상기 멤브레인 또는 필름(1186)은 사용하기 위해 핀으로 구멍을 뚫거나 파열시킨다. 필름(1186)은 저장소(1150)로 파편이 진입하는 것을 억제한다.
인증칩(1188) 형태의 인증 수단은 페이시아 몰딩(1172) 내 개구부(1190)에 수용된다. 인증칩(1188)은 프린트헤드 어셈블리(1188)에 의해 지령신호를 받아 프린팅 카트리지(1100)가 장치의 프린트헤드 어셈블리와 호환성있고 부합되도록 한다.
도 164F 안에서, 도면번호 1230은, 본 발명에 따라서, 프린팅 카트리지의 더 깊은 실시예를 일반적으로 지시하고 있다. 앞의 도면을 참조하면서, 특별한 표시가 없다면 동일 번호들은 동일한 부분들을 나타낸다.
아트캠 장치 및 프린팅 카트리지의 이 실시예는 프린팅 카트리지(1230)의 내용들과 관련된 데이터를 가진 ACP(31)를 제공하기 위하여 스위치 어레이 기술을 이용한다. 특히, 이 실시예는 프린팅 카트리지(1230)상의 스위치 액츄에이터들의 어레이를 함께 가진 마이크로 전자-기계 스위치 어레이를 이용한다.
알려져 있는 바 처럼, 센서에 의해 판독되는 도트들의 매트릭스를 구비하여 2 차원적으로 데이터를 표현하는 것이 가능하다. 다음으로 데이터는 데이터를 ACP(31)로 나르는 유니크한 신호를 생성하기 위하여 마이크로 전자-기계 스위치 내 마이크로 스위치들의 결합을 실행하는 스위치 액츄에이터들의 어레이에 의해 표현될 수 있다. 마이크로 전자-기계 스위치들은 마이크로 전자-기계 구조(micro electro-mechanical structures, MEMS's)들의 기본적인 구성요소들의 하나이다.
본 발명의 프린트 헤드(44)는 MEMS의 형태 내에 존재한다. 상기 프린트 헤드는 84000 노즐 장치들까지 내장할 수 있다. 이 노즐 장치들은 일반적으로 스위치들 보다 복잡하다. 나아가 상기 프린트 헤드들은 프린팅 매체를 스판하기 위한 충분한 길이를 가지는 반면에, 그것들은 칩 상의 매우 비싼 물적장소(high expense of on-chip real estate)의 결과로서, 매우 얇다. 따라서 기술의 이러한 형태를 이용하면서 유닛 영역 당 매우 많은 마이크로 스위치들을 달성하는 것이 가능하다.
마이크로 몰딩의 분야내에서 실질적인 발전들이 되어 왔다. 상기 몰딩은 3 마이크로미터 정도의 작은 크기를 갖는 구성요소들을 주사 몰드하는 것이 가능한 정도까지 발전되어 왔다. 따라서 스위치들의 상태를 변화시키는 개별적인 마이크로 스위치들을 작동시킬 수 있는 핀들과 같은 스위치 액츄에이터들의 어레이들을 주사 몰드하는 것이 가능하다.
그러므로 상기 핀들의 어레이들은 2 차원 코드 내 도트들의 배열과 유사한 방법 내에서 데이터를 나타내는 데 이용될 수 있다. 나아가, MEMS 기술을 이용하면서, 데이터를 나타내는 가능한 핀들의 어레이에 대응하는 미리결정된 마이크로 스위치들의 결합들을 내장하는 마이크로 스위치들의 어레이를 이루는 것이 가능한다. 이 데이터는 상기 핀들의 어레이에 의해 작동되는 핀들의 특별한 어레이에 대응하는 마이크로 스위치들로서 효과적으로 판독된다.
가능한 마이크로 스위치들의 많은 경우의 수와 핀들이 마이크로 몰드된 사실은 데이터의 많은 양이 핀들의 어레이에 의해 표현되도록 한다. 본 발명에서의 특별한 예는 아래에서 설명된다.
카트리지(1230)은 매체 및 잉크의 공급을 포함하는 하우징(1231)을 포함한다. 스위치 액츄에이터들의 어레이(1232)는 상기 하우징(1231)의 단부(1234) 상에 위치되어 있다. 각 스위치 액츄에이터는 도 164G에서 상세하기 도시되어 있는 마 이크로몰드된 핀(1236)의 형태 안에 있다. 상기 단부(1234)는 프린팅 카트리지 (1230)가 로드될 때 아트캠 장치 안으로 삽입되는 단부이다.
마이크로 스위치 어레이(1238)의 형태내 스위치 어레이는 아트캠 장치 안에 위치되고, 프린팅 카트리지(1230)가 아트캠 장치 안으로 삽입되는 때, 상기 어레이(1232)는 마이크로 스위치 어레이(1238)를 지지한다. 마이크로 스위치 어레이(1238)은 집적회로 제작 기술의 산물이다. 특히 마이크로 어레이(1238)은 웨이퍼 기판(1242)상에서 수행되는 증착 및 식각 프로세스의 산물이다(도 164H, 164I).
마이크로 스위치 어레이(1238)는 복수의 마이크로 스위치들(1240)이다. 마이크로 스위치들(1240)은 각각 브릿지 타입의 스위치의 형태 내에 존재한다. 마이크로 스위치는 MEMS 기술의 기본적인 구성요소이기 때문에, 마이크로 스위치의 다른 형태도 또한 가능하다. 예컨대, 브릿지 타입의 마이크로 스위치 대신에, 각 마이크로 스위치는 켄틸레버(cantilever) 타입의 형태 내에 있을 수 있는 것이다.
상기 도면들에서 보여질 수 있는 바와 같이, 마이크로 스위치들(1240)은 기판(1242)상에 형성된다. 버퍼층(1244)은 웨이퍼 기판(1242)상에 위치된다. 각 마이크로 스우치(1240)는 신호 전송 라인(1252)의 입력 포트(1248) 및 출력 포트(1250) 사이의 위치되는 컨택트(1246)를 가진다. 신호 전송 라인(1252)들은 1260으로 표시되는 적절한 데이터 커넥터로 ACP(31)과 연결된다.
각 마이크로 스위치(1240)은 통상적으로는 ON 상태이다. 브릿지(1254)는 각 컨택트(1246)를 연결하고 통상 컨택트(1246)로부터 떨어져 있다. 각 브릿지 (1254)는 도전물질이고, 어레이(1238)를 통해 연장되는 접지된 형태로 접지와 연결 되어 있다. 따라서 상기 브릿지(1254)가 그것의 각각의 컨택트를 지지하는 때, 마이크로 스위치는 OFF 상태가 된다.
어레이(1238)는 카트리지(1230)의 단부(1234)가 아트카드 장치 안으로 삽입되어질 때, 각 마이크로 몰드된 핀(1236)이 컨택트(1246)에 대한 마이크로 스위치의 브릿지(1254)를 자극하기 위한 각각의 마이크로 스위치(1240)을 작동시키도록 위치된다. 그러므로, 어레이(1238)는 핀들(1236)의 어레이(1232)에 의해 표현되는 데이터를 나르는 유니크 신호를 생성할 수 있다.
각 브릿지(1254)는 또한 탄력성이 있다. 이것은, 카트리지(1230)가 아트캠 장치로부터 접속이 풀렸을 때, 브릿지들은(1254) 그것들이 그것들의 각각의 컨택트들(1246)으로부터 떨어져 있는 위치안으로 되돌아가는 것을 확실하게 해 준다.
마이크로 스위치 어레이 인터페이스(1256)는 마이크로 스위치 어레이(1238)에 의해 생성된 신호를 판독가능한 형태로 해석해주기 위하여 ACP(31)에 내장된다.
핀들(1236)들의 어레이(1232)에 의해 표현되는 데이터는 다수의 매체 및 잉크의 특성들과 관련할 수 있으며, 예컨대, 그 데이터는 다음과 관련할 수 있다:
(a) 매체 및 잉크를 식별하는 일련 번호들;
(b) 카트리지(1234) 내 매체의 길이;
(c) 카트리지(1234)의 매체의 유형;
(d) 표면장력 및 점도와 같은 잉크의 물리적인 특성들;
(e) 적색 녹색 청색 구성요소들의 광학적 농도와 같은 잉크의 광학적 특성들;
(f) 매체 유형에 적합한 바람직한 잉크 방울 부피.
데이터의 다른 형태들 또한 핀들(1236)에 의하여 표현될 수 있다.
마이크로 스위치 어레이(1238)에 의해 생성되는 신호에 의해 전해지는 데이터는, ACP(31)에 의하여 판독될 수 있으며 한 번 디코드된 스크립트를 주입할 수 있다. 스크립트는 ACP(31)이 응답하는 명령어들의 형태내로 존재할 수 있다. 상기 명령어들은 카트리지(1230) 내에서 매체 및 잉크의 특성들을 적합하게 하는 프린트 헤드(44)의 작동과 관련한다.
어떤 경우에는, 핀들(1236)의 어레이(1232)에 의해 전해질 수 있는 데이터의 양이 제한된다. 그래서 CPU 코어(72)는 메모리 내 참조표들에 데이터를 홀드하도록 구성될 수 있다.
상기 참조표의 일예는 도 164G의 도면번호 1258에 의해 지시된다. 그것에 의하여 보여질 수 있는 것과 같이, 표 1258은 데이터의 위 유형들을 나타낸다. 메모리는 각각 a1,...,an, b1,...bn, c1....cn
, d1,...dn, e1,...en, f1,...fn, g1,...gn, 러서 데이터 참조표(1258) 내 리스트된 각 데이터 유형에 있어서의 복수의 다른 값들을 포함한다. 이 값들의 각각은 카트리지(1230) 내에서 발견될 수 있는 매체 및 잉크 타입들의 범위내에서 이 발견된 것들에 대응하는 매체 및 잉크와 관련하는 가능한 값들에 상응하여 미리 결정된다.
상기 가능한 값들의 각각은 참조표(1258) 내 x1, x2,..., xn에 의하여 지시되는 코드에 의해서 표시된다. 그 코드들은 다른 데이터 유형들로 나뉘어지지 않으 며, 각 코드는 따라서 참조표(1250)내 특별한 관련값에 유니크하다.
핀들(1236)에 의해 표현되는 데이터는 각 데이터 유형들의 값을 나타내는 다수의 xi, xj, xk, xl, xm, xn, xo
코드들을 정의할 수 있다. 알고리즘은 이 코드들에 의해 표현되는 실제의 값과 관련하는데이를 참조하기 위해 이용된다. 그러므로 핀들(1236)이 정보의 실질적인 양들을 나타낼 필요는 제거될 것이다.
인증칩
인증칩(53)
인증칩(53)의 보다 바람직한 실시예는 오직 올바르게 제조된 프린트롤만이 카메라 시스템에 사용되는 것을 보장하는 것이다. 인증칩(53)은 일반적으로 어떤 소모품에도 활용될 수 있는 기술을 활용하고 프린트롤 시스템에 한정되지 않는다. (토너 카트리지를 필요로 하는 레이저 프린터와 같은) 소모품을 필요로 하는 다른 시스템의 제조사들은 인증 소모품 문제로 다양한 성공단계로 고군분투해 왔다. 대부분은 특화된 패키지에 의존해 왔다. 그러나 이와 같은 것은 가정에서의 리필이나 복제품 제조를 중단시키지 못했다. 복제를 방지하는 것은 열악하게 제조된 대체 소모품이 베이스 시스템을 손상시키는 것을 방지하기 위해 중요하다. 예를 들어, 조잡하게 여과된 잉크는 잉크 젯 프린터의 프린트 노즐을 막을 수 있고, 이는 소비자가 시스템 제조사와 비인증 소모품 사용불허를 원망하게 하는 원인이 된다. 이와 같은 인증문제를 해결하기 위해, 인증칩(53)은 복제 방지를 위해 디자인된 특별 한 인증코드 및 회로를 포함한다. 칩은 표준 플래쉬 메모리 제조법을 사용하여 제조되고, 이는 잉크 및 토너 카트리지와 같은 소모품에 포함될 수 있을 만큼 저렴하다. 한번 프로그램되면 본 발명의 인증칩은 NSA 수출 가이드라인에 부합된다. 인증은 매우 크고 끊임없이 성장하는 분야이다. 여기서 우리는 오직 인증 소모품에만 관심이 있다.
기호 명명법
본 발명의 실시예를 논의하는 동안 하기의 기호명명법을 사용한다:
기호명명법 | 설명 |
F[X] | 단일 변수 X를 취하는 함수F |
F[X,Y] | 2개의 변수 X 및 Y를 취하는 함수F |
XlY | Y와 연결된 X |
X∧Y | Bitwise X 및 Y |
X∨Y | Bitwise X 또는 Y(총괄적인-또는) |
X(+)Y | Bitwise XX 또는 Y(배타적인-또는) |
~X | Bitwise NOT X (여집합) |
X←Y | X에 Y값을 대입하다 |
X←{Y,Z} | X에 할당된 변역은 Y 및 Z |
X=Y | X는 Y와 같다 |
X≠Y | X는 Y와 같지 않다 |
↓X | 1에 의한 감소율 X (바닥 0) |
□X | 1에 의한 증가율 X (레지스터 길이를 기준으로 한 랩핑으로서) |
EraseX | 플래쉬 메모리 레지스터 X를 지우다 |
SetBits[X,Y] | Y를 기준으로 플래쉬 메모리 레지스터 X의 비트를 설정하다 |
Z←{ShiftRight[X,Y] | Y로부터 입력 비트를 취하고 Z에서 출력 비트를 배치하면서 레지스터X를 오른쪽 1 비트 이동시키다 |
기본용어
M에 의해 표시된 메시지는 평문(plaintext)이다. M을 M의 내용이 감추어져 있는 사이퍼텍스트(cyphertext)C로 변형시키는 프로세스를 암호화(encryption)이라 한다. C를 다시 M으로 변형시키는 프로세스를 복호화(decryption)이라 한다. 암호화 함수를 E로, 복호화 함수를 D로 명하고, 하기와 같이 정의한다.
E[M]=C
D[C]=M
따라서, 이하의 정의는 참이다:
D[E[M]]=M
대칭 암호작성법
대칭 암호화 알고리즘에서는:
암호화 함수 E는 키 K1에 의존하고,
복호화 함수 D는 키 K2에 의존하고,
K2는 K1으로부터 유도될 수 있으며,
K1는 K2으로부터 유도될 수 있다.
대부분의 대칭 알고리즘에서, K1은 통상 K2와 동일하다. 그러나 K1이 K2와 동일하지 않을지라도 하나의 키는 다른 하나로부터 유도될 수 있다는 전제에서, 수학적 정의를 내리기에는 단일 키 K로서 충분하다. 따라서:
Ek[M]=C
Dk[C] = M
고대의 역사 교과서로부터 현대의 정교한 알고리즘까지, 수 많은 종류의 대칭 알고리즘이 존재한다. 이들 대부분은, 현대의 암호 해독기술에 의해 K가 유도될 수 있을 정도로 알고리즘을 성공적으로 공격할 수 있다는 점에서, 불안정하다. 특별한 대칭 알고리즘의 보안은, 일반적으로 알고리즘의 강도(strength)와 키(Key)의 길이, 2가지 함수이다. 다음의 알고리즘은 인증 칩 이용을 위해 적절한 양상을 포함한다.
DES
Blowfish
RC5
RC5
IDESA
DES
동일한 키를 암호화하고, 복호화하는데 사용되는 DES(Data Encryption Standard)는 미국 및 국제 표준이다. 키의 길이는 56비트이다. 최초의 디자인(design)은 하드웨어만을 위한 것이었지만, 이것은 하드웨어 및 소프트웨어에서 실행되었다. DES에서 사용된 최초의 알고리즘은 미국특허 제3,962,539호에 기술되어 있다. 3중 DES라 불리는 변형 DES가 더 안전하지만, K1, K2 및 K3 3개의 키를 필요로 한다. 이들 키는 다음과 같은 방식으로 사용된다:
EK3[DK2[EK1[M]]] = C
DK3[EK2[DK1[C]]] = M
3중 DES의 주요 이점은, 현행 DES의 실행은 단일 키의 DES보다 더 높은 보안을 제공하는데 사용될 수 있는 것이다. 특히, 3중 DES는 키 길이 112 비트에 상당하는 보호를 제공한다. 3중 DES는, 순진하게 기대할 수 있는 하나로서 168 비트 키(3 x 56)에 상당하는 보호를 제공하지 않는다. 3중 DES 디코딩(decoding) 및/또는 인코딩(encoding)을 수행하는 설비(equipment)는 미국으로부터 수출될 수 없다.
Blowfish
블로우피쉬(Blowfish)는, 1994년 슈나이어(Schneier)에 의해 최초로 제시된 대칭블록 암호(cipher)이다. 이것은 32 비트에서 448 비트까지 키 길이가 가변이다. 게다가, 이것은 DES보다 훨씬 더 빠르다. 블로우피쉬 알고리즘은, 키 확대부분과 데이터 암호화부분 2개 부분으로 구성된다. 키 확대는, 최대 448 비트의 키를 합계 4168 바이트가 되는 여러개의 서브키 어레이로 변환한다. 데이터 암호화는, 16 라운드 페이스텔(Feistel) 네트워크를 통해 발생한다. 모든 연산은 XOR과, 라운드당 4개의 인덱스 어레이 검색이 있는 32 비트 워드상의 가산이다. 복호화화(decryption)는 서브키 어레이가 역순으로 사용되는 것을 제외하고 암호화와 동일한 것에 주의하여야 한다. 그러므로, 실행의 복잡성은 이와 같은 대칭을 갖지 않는 다른 알고리즘과 비교하여 감소된다.
RC5
1995년 론 리베스트(Ron Rivest)에 의해 디자인된, RC5는 블록 사이즈, 키 사이즈 및 라운드 횟수가 가변이다. 그러나, 전형적으로 64 비트 블록 사이즈 및 128 비트 키를 사용한다. RC5 알고리즘은 키 확대부분과 데이터 암호화부분 2개 부분으로 구성된다. 키 확대는 하나의 키를, 각각 w 비트를 갖는 2r+2의 서브키(여기서, r = 라운드의 횟수)로 변환한다. 16 라운드(w = 32, r = 16)를 갖는 64 비트의 블록 사이즈를 위해, 서브키 어레이는 합계 136 바이트가 된다. 데이터 암호화는 mod 2W, XOR 및 비트 단위(bitwise) 로테이션 가산을 사용한다.
IDEA
1990년 라이(Lai)와 마세이(Massey)에 의해 개발된 최초 IDEA 암호문의 실현은 PES라 불렸다. 1991년 비햄(Biham)과 사미르(Shamir)에 의해 다른 암호 해석법이 발견된 이후, IDEA로서 알고리즘이 강화된 결과가 1992년에 발표되었다. IDEA는 128 비트 키를 사용하여 64 비트 평문(plaintext) 블록을 처리한다. 동일한 알고리즘이 암호화 및 복호화화에 사용된다. 일반적으로, 이것은 오늘날 이용 가능한 가장 안전한 블록 알고리즘으로 간주된다. 이것은, 1993년 발행된 미국특허 제 5,214,703호에 기술되어 있다.
비대칭 암호 작성법(Asymmetric Cryptography)
비대칭 알고리즘이 사용될 수 있다. 비대칭 암호화 알고리즘은 다음 중 하나이다:
암호화 함수 E는 키 K1에 의존하고,
복호화화 함수 D는 키 K2에 의존하며,
적절한 시간내에서 K2는 K1에서 유도될 수 없고,
적절한 시간내에서 K1은 K2에서 유도될 수 없다.
따라서:
EK1[M] = C
DK2[C] = M
하나의 키 K1이 공개될 수 있기 때문에, 이들 알고리즘도 공개키라 불려진다. 그러므로, 누구나 메시지(K1을 이용하여)를 암호화 활 수 있지만, 대응하는 애독키(K2)를 갖는 사람만이 메시지를 복호화할 수 있고, 판독할 수 있다. 대부분의 경우, 다음의 동일성도 유지한다:
EK2[M] = C
DK1[C] = M
이 동일성은, 공개키 K1을 갖는 사람은 누구든지 M을 볼 수 있고, 그것이 K2의 소유자로부터 온 것을 알 수 있다는 것을 의미하기 때문에, 매우 중요하다. 그렇게 하는 것이 K2의 인식을 내포하기 때문에, 누구도 C를 생성할 수 없었다. 물론, 적절한 시간내에 K2에서 K1 및 그 반대의 경우를 유도할 수 없는 속성은 적절한 시간의 개념에 의해 모호하게 된다. 여러번 증명되었던 것은, 장시간이 필요할 것이라고 생각되었던 계산(calculation)이 더 빠른 컴퓨터, 새로운 알고리즘 등의 도입에 의해 가능하게 되었다는 것이다. 비대칭 알고리즘의 보안은, 큰 숫자(더 구체적 으로 큰 숫자는 2개의 큰 소수의 곱이다)의 인수 분해와 유한 필드에서 이산 대수를 계산하는 어려움과 같은 2개의 문제점 중 하나의 어려움에 기초한다. 큰 숫자의 인수 분해는, 오늘날 수학의 이해에 주어진 난제가 되리라고 추측된다. 그러나, 문제는 인수 분해가 예상되었던 것보다 훨씬 빠르게 더 쉽게 되었다는 것이다. 1977년 론 리베스트(Ron Rivest)는, 125 디지트(digit) 숫자의 인수 분해는 40쿼드릴리언(quadrillion)년 걸릴 것이라고 말하였다. 1994년에 129 디지트 숫자가 인수 분해되었다. 슈나이어(Schneier)에 의하면, 1980년대의 512 비트 숫자에서 얻은 안전한 레벨을 얻기 위해 오늘날 1024 비트 숫자를 필요로 한다. 키가 몇년 동안 지속되면 1024 비트라도 충분하지 않을 것이다. 리베스트(Rivest)는 2005년까지 높은 보안의 지속시키기 위한 1628 비트와, 2015년까지 높은 보안의 지속시키기 위한 1884 비트를 제안했던, 1990년에 추정한 키 길이를 개정했다. 대조적으로, 슈나이어(Schneier)는 2015년까지 법인과 정부를 보호하기 위해 2048 비트기 필요하게 될 것이라고 제안했다.
다수의 공개키 암호 작성법 알고리즘이 존재한다. 대부분 실행 불가능하고, 대다수가 주어진 M에 대해서 매우 큰 C를 생성하거나 또는 수 많은 키를 필요로 한다. 안전하지만 여전히 다른 것들은 몇년 동안 실용화하는데 너무 느리다. 이것 때문에, 다수의 공개키 시스템은 공개키 매커니즘(mechanism)이 대칭 세션(session)키를 전달하는데 사용된 후, 세션키가 실제 메시지를 위해 사용되는 하이브리드(hybrid)이다. 모든 알고리즘은 키 선택에 관한 문제를 가지고 있다. 난수가 간단하지만 충분히 안전하지 않다. 2개의 큰 소수 p와 q는, 보다 쉽게 인수 분해될 수 있는 어떤 약화된 조합(몇개의 약화된 키가 테스트 될 수 있다)이 있는 것과 같이 신중하게 선택된다. 그러나 그럼에도 불구하고, 키 선택은 예를 들면 무작위로 1024 비트를 선택하는 간단한 문제가 아니다. 따라서, 키 선택 프로세스도 안전하게 된다.
공개 심사(public scrutiny)하에서 사용하는 실용적인 알고리즘 중 다음의 것이 활용에 적합하다:
RSA
DSA
ElGamal
RSA
리베스트(Rivest), 사미르(Shamir) 및 아델만(Adleman)의 이름을 따서 명명된, RSA 암호 사용법(cryptosystem)은 가장 널리 사용된 공개키 암호 사용법이고, 세계의 대부분에서 사실상의 표준이다. RSA의 보안은 2개 소수(p, q)의 곱인 큰 숫자를 인수 분해하는 어려움에 의존할 것이라고 추측된다. p와 q의 생성에 다수의 제약이 있다. 양쪽 크고, 비슷한 숫자의 비트를 갖지만, 아직까지 서로 비슷하지 않다(다른 점에서 pq=√pq). 게다가, 다수의 저자는 p와 q가 강력한 소수일 것이라고 제안하였다. RSA 알고리즘 특허는 1983년 발행되었다(미국특허번호 제 4,405,829호).
DSA
DSA(Digital Signature Standard)은 디지털 서명표준(DSS)의 일부로서 디자 인된 알고리즘이다. 정의된 바와 같이, 일반화된 암호화를 위해 사용될 수 없다. 게다가, RSA와 비교하여 DSA는 서명 검증(verification)을 위해 10~40배 더 느리다. 명시적으로 DSA는 SHA-1 알고리즘을 사용한다(아래의 일방향 함수에서 정의를 확인). DSA 키 생성은 q가 p-1로 나누어지는 2개의 소수 p와 q를 찾는 것에 의존한다. 슈나이어(Schneier)에 의하면, 장기간의 DSA 보안을 위해 1024 비트의 p 값이 필요하게 된다. 그러나, DSA 표준은 p의 값이 1024 비트 이상인 것을 허용하지 않는다(또한 p는 64 비트의 배수이다). 미국 정부는 DSA 알고리즘을 소유하고, 적어도 하나의 관련 특허를 가진다(1993년에 허여된 미국특허 제5,231,688호).
ElGamal
엘가말 스킴(ElGamal scheme)은 암호화 및 디지털 서명 양쪽에 사용된다. 보안은 유한 필드내에서 이산 대수를 계산하는 어려움에 기초한다. 키 선택은 소수 p와, 양쪽 p보다 작은 2개의 난수 g와 x의 선택을 포함한다. 그 후, y = gx mod p를 계산한다. 공개키는 y, g 및 p이다. 전용키는 x이다.
암호 작성의 도전-응답 프로토콜과 0 인식 증명(Cryptographic Challenge-response protocols and Zero knowledge proofs)
도전-응답 프로토콜의 일반 원리는, 카메라 시스템에 적용된 동일성 인증을 제공하는 것이다. 도전-응답의 가장 간단한 형태는, 비밀 패스워드의 형태를 갖는다. 비밀 패스워드에 대해서 A가 B에게 질문하고, B가 정확한 패스워드로 응답하면, A는 B를 신뢰할 수 있다고 선언한다. 이런 종류의 극단적으로 단순한 프로토콜 에는 3가지의 주요 문제점이 있다. 첫째로, B가 일단 패스워드를 발표하면, 모든 관찰자 C는 패스워드가 무엇인지를 안다. 둘째로, A는 검증하기 위해 패스워드를 알아야 한다. 세번째로, C가 A를 대역하면, 그때 B는 패스워드를 C에게 주어(C를 A라고 생각한다), 이렇게 B가 위태롭게 된다. 저작권 있는 텍스트(하이쿠(haiku)와 같은)를 사용하는 것은, 누구든지 패스워드를 복사할 수 있다(예를 들면 지적재산권이 침해되고 있는 국가)고 가정하는 것과 같은 무력한 대안이다. 암호 작성의 도전-응답 프로토콜의 아이디어(idea)는, 프로토콜 동안 비밀 그 자체를 검증인(verifier)에게 알리지 않고, 하나의 엔티티(entity)(청구인)가 그 엔티티와 관련되는 공지된 비밀의 인식을 증명하는 것에 의해, 그 동일성을 다른 사람에게(검증인)에게 증명하는 것이다. 암호 작성의 도전-응답 암호 프로토콜이 일반화된 경우, 몇개의 스킴을 가지는 검증인은 비밀을 알고, 검증인에 의해 다른 사람에게 비밀이 공개되지도 않는다. 본 실시예에 대한 논의가 구체적으로 인증에 관계하기 때문에, 인증을 위해 사용된 실제의 암호 작성의 도전-응답 프로토콜은 적합한 섹션에서 상술된다. 그러나, 0 인식 증명의 개념은 여기서 논의된다. 페이지(Feige),피아트(Fiat) 및 사미르(Shamir)에 의해 최초로 기술된, 0 인식 증명 프로토콜은, 인증을 위해 스마트 카드(Smart Card)에서 널리 사용되고 있다. 포로토콜의 효과는 비공지된 인수 분해로서 큰 합성 정수를 법으로 한(modulo) 제곱근을 계산하는 것이 계산적으로 실행 불가능하다는 가정에 기초한다. 이것은 큰 정수를 인수 분해하는 것이 어렵다는 가정과 증명할 수 있게 동등하다. 청구인이 상당한 컴퓨팅 파워를 가질 필요가 없다는 것에 주의하여야 한다. 스마트 카드는, 적은 모듈러 곱셈만 을 이용하는 이러한 종류의 인증을 실행한다. 0 인식 증명 프로토콜은 미국특허 제4,748,668호에 기술되어 있다.
일방향 함수(One-way Functions)
일방향 함수 F는 입력 X에 작용하여, F[X]로부터 X가 결정될 수 없는 것으로 F[X]를 반환한다. X의 포맷에 대한 제한이 없고, F[X]는 X보다 더 적은 비트를 가지고 있으면, 충돌이 존재한다. X1 ≠ X2이지만 F[X1] = F[X2]가 존재하는 동일한 F[X]값, 즉 X1과 X2를 생성하는 2개의 다른 X 입력값으로 충돌이 정의된다. F[X]보다 X가 더 많은 비트를 가지고 있으면, 입력은 몇가지 방식으로 압축되어 출력을 생성한다. 대부분의 경우, X는 특별한 사이즈의 블록으로 분해되고, 다음에 대한 입력인 1 라운드의 출력을 가지는 다수의 라운드를 통해 압축된다. 해시함수의 출력은 X가 1회 소비된 최종 출력이다. 2개의 다른 초기값(V1, V2)과 2개의 입력(X1
, X2)(아마 동일하다)으로 정의된 압축 함수 CF의 의사 충돌(pseudo-collision)은 CF(V1, X1) = CF(V2, X2)와 같이 주어진다. 의사 충돌의 존재가 주어진 X1에 대해 X2를 계산하는 것이 쉬운 것을 의미하지 않는 것에 주의한다.
계산이 빠른 일방향 함수에만 관심이 있다. 게다가, 다른 실행에서 반복될 수 있는 결정적인 일방향 함수에만 관심이 있다. F[X]가 F에 대한 호출 사이의 시간인 경우 일예 F를 생각한다. F에 의해 X가 사용되지도 않기 때문에, 주어진 F[X]에 대한 X는 결정될 수 없다. 그러나, 다른 실행을 위해 F의 출력은 다르게 된다. 그러므로, 이런 종류의 F에는 관심이 없다.
본 실시예의 인증 칩의 실행 논의의 범위에 있어서, 다음 형태의 일방향 함수에 관심이 있다:
비공개키를 사용한 암호화(Encryption using an unknown key)
난수 시퀀스(Random number sequences)
해시함수(Hash Functions)
메시지 인증 코드(Message Authentication Codes)
비공개키를 사용한 암호화(Encryption using an unknown key)
메시지가 비공개키 K를 이용하여 암호화되면, 암호화 함수 E는 효과적으로 일방향이 된다. 키가 없이, EK[M]으로부터 K없이 M을 얻는 것은 계산적으로 실행 불가능하다. 암호화 함수는 단지 키가 숨겨져 있는 동안 일방향이 된다. 함수 D를 이용하여 M을 재구성(reconstruct)하는 것이 가능하도록 E가 EK[M]를 생성하므로, 암호화 알고리즘은 충돌을 일으키지 않는다. 따라서, 일방향 함수 F가 E라면, F[X]는 적어도 X만큼 많은 비트를 가진다(정보가 손실되지 않는다). 대칭 암호화 알고리즘(상술한 바와 같이)은, 다음과 같은 이유로 암호화에 기초를 둔 일방향 함수를 생성하는데 비대칭 알고리즘보다 유리하다:
암호화 알고리즘에 주어지는 강도를 위한 키(Key)는, 비대칭 알고리즘보다 대칭 알고리즘에서 더 짧게 된다. 대칭 알고리즘은 계산하는 것이 더 빠르고, 더 적은 소프트웨어/실리콘을 필요로 한다.
정확한 키의 선택은 선택된 암호화 알고리즘에 의존한다. 어떤 키는 특별한 암호화 알고리즘에 강력하지 않으므로, 모든 키가 강도를 위해 테스트된다. 더 많은 테스트가 키 선택을 위해 수행되고, 숨겨지는 키는 더 적어진다.
난수 시퀀스(Random Number Sequences)
난수 시퀀스 R0, R1,..., Ri, Ri+1을 고려한다. F[X]가 랜덤 시퀀스에서 Xth난수를 반환한다는 일방향 함수 F를 정의한다. 그러나, 주어진 X에 대해 F[X]가 다른 실행에서 반복될 수 있는 것을 보증한다. 그러므로, 난수 시퀀스는 사실 랜덤이 아니다. 그 대신에, 특정한 시드(seed)를 사용하는 생성기를 갖는 의사 랜덤(pseudo-random)이다.
좋은 난수 생성기를 정의하는 것과 관련된 다수의 이슈(issue)가 있다. 크노스(Knuth)는 "좋은(good)(통계적인 테스트를 포함)" 생성기를 생성하는 것이 무엇인지와, 그들을 구성하는 것과 관련된 전반적인 문제를 기술한다. 대부분의 난수 생성기는, 0th숫자에서 ith까지 반복하는 ith숫자를 결정하는 유일한 방식으로, i-1th상태에서 ith난수를 생성한다. i가 크다면 i반복을 위한 대기가 실용적이지 않다. 그러나, 랜덤 액세스를 허용하는 유형의 난수 생성기가 있다. 블럼(Blum), 블럼(Blum)과 슈브(Shub)는 다음과 같은 "의사 랜덤 시퀀스 생성기가, 짧은 시드로부터, 공정한 코인의 연속적인 플립(flip)에 의해 생성되는 모든 방식에서 나타나 는 긴 시퀀스(비트)를 신속하게 생성하는 것을 좋하하는..." 이상적인 생성기를 정의한다. x2 mod n 생성기를 정의하고, 보다 일반적으로 BBS 생성기로서 언급된다. 그것은 현대의 암호 작성법에 의존하는 어떤 가정이 주어지고, BBS 생성기가 매우 엄격한 통계 테스트를 통과하는 것을 나타낸다.
BBS 생성기는 블럼(Blum) 정수인 n을 선택하는 것에 의존한다(p와 q가 큰 소수의 숫자이고, p ≠ q, p mod 4 = 3 및 q mod 4 = 3일때, n = pq). x0 = x2 mod n인 경우 x0에 의해 생성기의 초기상태가 주어지고, x는 n에 비해서 소수인 임의의 정수이다. ith의사 랜덤 비트는 xi = xi-1
2 mod n인 경우 x
i의 최상위 비트이다. 특별한 속성으로서, p와 q의 인식은 다음과 같은, xi = x0
y mod n, y = 2i
mod((p-1)(q-1))인 경우 시퀀스에서 ith숫자의 직접 계산을 허용한다
p와 q의 인식없이, 생성기는 반복된다(계산의 보안은 큰 숫자를 인수 분해하는 어려움에 의존한다). 처음 정의할 때, BBS 생성기가 가지고 주요한 문제는 단일 출력 비트를 위해 상당량의 작업이 필요하게 된다. 그 알고리즘은 대부분의 응용 프로그램을 위해 너무 느리다고 생각되었다. 그러나, 몽고메리(Montgomery) 축소 계산의 출현은 더 실용적인 실행을 발생시켰다. 게다가, 바지라니(Vazirani)와 바지라니(Vazirani)는 n의 사이즈에 따라 도시되었고, 더 많은 비트가 생성기의 보안을 위태롭게 하지 않고 xi에서 안전하게 취해질 수 있다. xi마다 1 비트만 취하 는 것으로 가정하면, N 비트의 난수를 생성하기 위해 N 비트(및 여기서 비트 생성기 함수의 N회 반복)가 필요하게 된다. 외부 관찰자에게 특별한 셋트의 비트가 주어진 후, 50/50의 개연성과 달리 다음 비트를 결정하는 방법은 없다. x, p 및 q가 숨겨지면, 그들이 키 역할을 하여, 비트스트림을 출력하고, x, p 및 q을 계산하는 것은 계산적으로 실행 불가능하다. 또한, 주어진 셋트의 의사 랜덤 비트를 생성하는데 사용되는 i의 값을 결정하는 것은 계산적으로 실행 불가능하다. 이 최종 특징은 생성기를 일방향으로 한다. i의 다른 값은 주어진 길이로 동일한 비트 시퀀스(예를 들면 32 비트의 랜덤 비트)를 생성할 수 있다. 주어진 F[i]에 대해서 x, p 및 q가 공지되었다고 하여도, i는 어떤 값이 아니라 셋트의 가능성으로만 유도될 수 있다(물론, i의 도메인이 공지되었어도, 셋트의 가능성은 더 감소된다). 그러나 정확한 p와 q 및 정확한 시드 x를 선택하는데 문제가 있다. 특히, 리터(Ritter)는 x를 선택하는 문제를 기술한다. 문제의 본질은 BBS 생성기가 공지된 길이의 단일 사이클을 생성할 수 없다는 것이다. 그 대신에, 그것은 퇴보(degenerate)(0 길이)사이클을 포함한 다양한 길이를 생성한다. 이렇게, BBS 생성기는 짧은 사이클인 랜덤 상태로 초기화될 수 없다.
해시함수(Hash Functions)
해시함수로서 공지된, 특별한 일방향 함수는 고정 길이의 해시 값에 임의 길이의 메시지를 배치한다(map). 입력은 임의의 길이이므로, 고정 길이의 출력을 생성하기 위해 해시함수는 압축 성분을 갖는다. 또한, 해시함수는 충돌을 찾고, H[M]에서 M에 대한 정보를 결정하는 것을 어렵게 하기 위해, 혼동 성분도 갖는다. 충돌 이 존재하기 때문에, 대부분의 응용 프로그램은 해시 알고리즘이 H[X1] = H[X2]와 같이 주어진 X1에 대해서 X2를 찾는 것이 어렵다는 점에서 프리이미지(preimage) 저항이 있는 것을 필요로 한다. 게다가, 대부분의 응용 프로그램도 해시 알고리즘에 충돌 저항이 있게 되는 것을 필요로 한다(즉, H[X1] = H[X2]와 같이 2개의 메시지 X1과 X2를 찾는 것이 어렵다). 이상적인 면에서, 충돌 저항이 있는 해시함수가 전혀 존재할 수 있는지 아닌지는 공개된 문제이다. 해시함수의 주요한 적용은, 디지털 서명 알고리즘의 적용 이전에 입력메시지를 디지털 "지문(fingerprint)"으로 축소시키는데 있다. 디지털 서명이 갖는 하나의 충돌 문제가 다음 예에서 도시된다.
A가 "나는 B에게 $10을 빚지고 있다"라는 긴 메시지(M1)를 가진다. A는 그리디(greedy)한 전용키 B를 사용하여 H[M1]에 서명한 후, H[M2] = H[M1]이지만, M2가 B에게 유리한, 예를 들면 "나는 B에게 $1000만을 빚지고 있다"는 충돌메시지 M2를 탐색한다. 분명하게, A의 관심은 이러한 M2를 찾는 것이 어렵다는 것을 보증하는데 있다.
충돌 저항이 있는 일방향 해시함수의 예는 SHA-1, MD5 및 RIPEMD-160이고, 모두 MD4에서 유도된다.
MD4
론 리베스트(Ron Rivest)는 1990년에 MD4를 소개했다. 다른 모든 일방향 해시함수가 몇가지 점에서 MD4에서 유도되었기 때문에, 여기서 그것에 대해 언급한 다. 지금, MD4는 충돌이 탐색되는 대신 계산될 수 있다는 점에서 완전히 분쇄된다고 생각된다. 상기 예에 있어서, B는 원본 메시지 M1와 동일한 해시 값을 가지는 대체 매시지(M2)를 대수롭지 않게 생성한다.
MD5
론 리베스트(Ron Rivest)는 MD4보다 더 안전한 MD5를 1991년에 소개했다. MD4와 같이, MD5는 128 비트 해시 값을 생성한다. 도베르틴(Dobbertin)은 최근 공격 후에 MD5의 스테이터스(status)를 기술한다. 그는 MD5에서 압축 함수의 무력함을 나타내는 의사 충돌(pseudo-collisions)이 어떻게 발견되었는지와, 더 최근에 발견된 충돌에 대해서 기술한다. 이것은, 충돌의 존재가 비관적 결과를 초래하는 경우 디지털 서명 스킴(scheme)에서 압축을 위해 MD5가 사용되지 않는 것을 의미한다. 그러나, MD5는 여전히 일방향 함수로서 사용된다. 게다가, HMAC-MD5 구성은 이들의 최근 공격에 의해 영향을 받지 않았다.
SHA-1
SHA-1은 MD5와 매우 비슷하지만, 160 비트 해시 값을 가진다(MD5는 단지 128 비트의 해시 값을 가진다). 디지털 서명표준(DSS)에서 사용하기 위한 NIST와 NSA에 의해 SHA-1이 디자인되어, 소개되었다. 원래 발표된 설명은 SHA라고 불렸지만, 아마도 SHA의 보안 결함을 교정하기 위해 곧바로 SHA-1로 개정되었다(비록 NSA가 변경 이면의 수학적인 이유로 발표되지 않았다). SHA-1에 대한 암호 작성 공격은 공지된 것이 없다. 더 긴 해시 결과 때문에, 간단한 MD4이나 MD5보다도 무차별 공격(brute-attack)에 대해 더 저항이 있다. 미국 정부는 SHA-1과 DSA 알고리즘을 소유하고(디지털 서명 인증 알고리즘은 DSS의 일부로서 정의된다), 적어도 하나의 관련 특허(1993년에 허여된 미국특허 제5,231,688호)를 가진다.
RIPEMD-160
RIPEMD-160은 그 이전의 것인 RIPEMD(1992년 유럽공동체의 RIPE 프로젝트를 위해 개발된)에서 유도된 해시함수이다. 그 이름이 제안한 바와 같이, RIPEMD-160은 160 비트 해시 결과를 생성한다. 32 비트 아키텍처(architecture) 상에서 소프트웨어를 실행할 때, RIPEMD-160는 10년 이상의 고도의 보안을 제공한다. 비록 RIPEMD-160에 대한 성공적인 공격이 없었지만, 그것은 비교적 새롭고, 널리 암호 해석되지 않았다. 최초의 RIPEMD 알고리즘은 MD4에 대한 공지된 암호 작성 공격에 저항하도록 구체적으로 디자인 되었다. 최근 MD5에 대한 공격은 128 비트 RIPEMD 해시함수에서의 비슷한 무력함을 나타낸다. 비록 공격이 이론적인 무력함만을 나타내지만, 도베르틴(Dobbertin), 프레넬(Preneel) 및 보세라이어(Bosselaers)는 새로운 알고리즘 RIPEMD-160으로 RIPEMD를 더 강화시켰다.
메시지 인증코드(Message Authentication Codes)
메시지 인증의 문제는 다음과 같이 요약될 수 있다:
아마 B로부터 나온 메시지가 사실 B에서 나온 것이라고 A가 어떻게 확신할 수 있을까?
메시지 인증은 엔티티 인증과 다르다. 엔티티 인증을 가지고, 하나의 엔티티(청구인)는 다른 사람(검증인)에게 그것의 동일성을 증명한다. 메시지 인증 은, 생각한 사람으로부터 메시지가 주어진, 즉, 출발지에서 목적지까지의 도중에 변경되지 않는 것을 확실하게 하는 것에 관련되어 있다. MD5와 같은 해시함수는 최초 입력을 나타내는 해시 값을 생성하는데 의존하고, 최초의 입력은 해시 값에서 유도될 수 없다. A와 B의 사이에 있는 사람 E에 의한 간단한 공격은, B로부터 메시지를 인터셉트(intercept)하여, 그 자신의 것을 대체하는 것이다. 또한, A가 원본 메시지의 해시를 전송하더라도, E는 그 자신의 새로운 메시지의 해시를 간단히 대체할 수 있다. 단독으로 일방향 해시함수를 사용하면, A는 B의 메시지가 변경된 것을 알 수 있는 방법이 없다. 메시지 인증의 문제에 대한 하나의 솔루션은 메시지 인증코드 또는 MAC이다. B가 메시지 M을 전송할 때, M이 실제로 B에서 나온 것을 수신자가 알 수 있도록 MAC[M]도 전송한다. 이것이 가능해지도록 하기 위해, B만이 M의 MAC를 생성할 수 있고, 게다가 A는 MAC[M]에 대한 M을 검증할 수 있다. 이것은 M이 비밀로 되지 않을 때 유용한 M-MAC의 암호화와 다른 것에 주의하여야 한다. 해시함수으로부터 MAC을 구성하는 가장 간단한 방법은 대칭 알고리즘을 해시 값으로 암호화하는 것이다:
입력메시지 H[M]을 해시(Hash the input message H[M])
해시 EK[H[M]]해시를 암호화(Encrypt the hash EK[H[M]])
이것은 처음에 메시지를 암호화한 후 암호화된 메시지를 해싱(hashing)하는 것보다 더 안전하다. 모든 대칭 또는 비대칭 암호 함수가 사용될 수 있다. 암호화(상술한 것과 같은)에 사용하는 기술 대신에, 키 종속 일방향 해시함수를 사용하는 것이 이점이 있다:
속도(Speed), 일반적인 작업에서 일방향 해시함수가 암호화보다 훨씬 더 빠르기 때문이다;
메시지 사이즈(Message size), 왜냐면 H[M]이 고정된 사이즈인 동안(대개 M보다 작다고 간주된다), EK[H[M]]은 적어도 M과 동일한 사이즈이기 때문이다;
하드웨어/소프트웨어 요구사항(Hardware/software requirements) - 키된 일방향 해시함수는 전형적으로 암호화 기초 사본보다 훨씬 덜 복잡하다; 그리고
일방향 해시함수의 실행은 암호화 또는 복호화화 장치를 고려하지 않으므로, 미국의 수출 통제를 받지 않는다.
해시함수는 원래 키를 포함하거나 또는 메시지 인증을 지원하도록 결코 디자인되지 않았다는 것에 주의하여야 한다. 그 결과, 비밀 접두사(prefix), 접미사(sufix) 또는 양쪽을 가지는 메시지를 연결하는 다양한 함수를 포함한 메시지 인증을 수행하도록, 해시함수를 이용하는 몇가지 애드 훅(ad hoc) 방법이 제안되었다. 이들 애드 훅 방법의 대부분은, 정교한 수단에 의해 성공적으로 공격당했다. 추가로, XOR 스킴(scheme)과 토플리즈(Toeplitz) 매트릭스에 기초한 MAC가 제안되었다(LFSR에 기초한 구성의 특별한 경우를 포함한다).
HMAC
특히 HMAC 구성은 인터넷 메시지 인증 보안 인터넷 프로토콜을 위한 솔루션으로서 승인을 얻고 있다. HMAC 구성은 기본적인 해시함수를 블랙 박스 방식으로 이용하여, 래퍼(wrapper)와 같이 작용한다. 보안이나 성능 이유에 의해 요청되는해시함수의 교체는 수월하다. 그러나, 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 알고리즘은 다음과 같다:
K의 끝에 0x00 바이트를 첨가함으로써 K를 64 바이트로 확대(Extend)
ipad를 가지고 (1)에서 생성된 64 바이트 스트링(string) XOR
(2)에서 생성된 64 바이트 스트링에 데이터 스트림(stream)을 첨가(Append)
(3)에서 생성된 스트림에 H를 적용(Apply)
opad를 가지고 (1)에서 생성된 64 바이트 스트링 XOR
(5)에서 유도하는 64 바이트 스트링에 (4)에서 유도하는 H를 첨가
(6)의 출력을 적용하고, 그 결과를 출력
따라서:
비록 64 바이트(해싱 블록의 길이)보다 더 길지 않아도, 권장된 키 길이는 적어도 n 비트이다. n 비트보다 더 긴 키에는 함수의 보안이 추가되지 않는다. HMAC은 최종 출력의 절단, 즉 160 비트에서 128 비트로의 절단을 선택적으로 허용한다. 알고리즘이 최초로 소개된 후 1년인 1997년에 코멘트를 위한 HMAC 디자이너의 요구(Request)가 공표되었다. HMAC에 대해 공지된 가장 강력한 공격은 해시함수의 충돌 주파수에 기초하며, 적절한 최소 해시함수를 위해 전혀 비현실적인 것이라고 주장했다. 더 최근에, 주어진 시간의 기간내에 어떤 M, HMAC[M]의 조합을 포획하고, 재생하기 위해, 재생방지 성분을 가지는 HMAC 프로토콜이 정의되었다.
난수와 시변 메시지(Random Numbers and Time Varying Messages)
일방향 함수으로서 난수 생성기의 사용은 이미 검토되었다. 그러나, 난수 생성기의 이론은, 암호 작성법, 보안 및 인증과 상호 얽혀진다(intertwine). 좋은 난수 생성기를 정의하는 것과 관련된 다수의 이슈가 있다. 크노스(Knuth)는 좋은(통계적인 테스트를 포함) 생성기를 생성하는 것이 무엇인지와, 그들을 구성하는 것과 관련된 전반적인 문제를 기술한다. 난수 사용 중 하나는 시간에 따라 변화하는 것을 보증하는 것이다. A가 명령을 암호화하여 B에게 전송하는 시스템을 생각한다. 암호화 알고리즘이 주어진 입력에 대해 동일한 출력을 생성하는 것이라면, 공격자는 간단히 메시지를 기록한 후, 어리석은 B에게 반환한다. B에게 메시지를 제시하는 것(A와 같이 보이게 하는 동안)을 알기 위한 것과 달리 공격자가 암호화 매커니 즘을 크랙(crack)할 필요가 없다. 따라서, 메시지(및 여기서 그 암호화된 사본)가 각각의 시간에서 변화하는 것을 보증하도록 메시지는 난수와 시간 스탬프를 종종 포함한다. 난수 생성기도 키를 생성하기 위해 종종 사용된다. 그러므로, 이 목적을 위해, 이 순간 모든 생성기가 불안정하다고 말하는 것이 가장 좋다. 예를 들면, 버렉앰프-마시(Berlekamp-Massey) 알고리즘은, LFSR 난수 생성기에 대한 표준적인 공격이다. LFSR의 길이가 n이라면, 그때 키 생성기를 위태롭게 하는 LFSR을 결정하는데 시퀀스의 2n 비트만으로 충분하다. 그러나, 난수 생성기의 역할만이 시간에 따라 메시지가 변화하는 것을 보증하는 것이라면, 생성기와 시드의 보안은 이미 세션 키 생성을 위해 중요하지 않다. 그러나, 난수 시드 생성기가 위태롭게 되고, 공격자가 장래 "랜덤(random)" 숫자를 계산할 수 있으면, 몇개의 프로토콜은 공격에 열려 있게 된다. 이 상황에 대해서 모든 새로운 프로토콜이 검토되어야 한다. 실제로 필요한 유형의 난수 생성기는 실행과 생성기가 사용되는 목적에 의존한다. 생성기는 블럼(Blum), 블럼(Blum) 및 슈브(Shub), 론 리베스트(Ron Rivest)에 의한 RC4와 같은 스트림 암호, SHA-1와 RIPEMD-160과 같은 해시함수 및 LFSR(Linear Feedback Shift Registers)와 그것의 더 최근의 사본인 FCSR(Feedback with Carry Shift Registers)와 같은 전통적인 생성기를 포함한다.
공격(Attacks)
이 섹션에서는, 인증 칩과 같은 인증 암호 사용법을 분쇄하기 위해 시도할 수 있는 다양한 종류의 공격을 기술한다. 공격은 물리적인 공격 및 논리적인 공격 으로 분류된다. 물리적인은 공격은 암호 사용법의 물리적인 실행을 분쇄하는 방법(예를 들면, 칩을 개방시켜 키를 검색하는 분쇄)을 설명하고, 논리적인 공격은 독립적으로 실행되는 암호 사용법에 대한 공격을 포함한다. 논리적인 유형의 공격은 프로토콜 또는 알고리즘에 작용하여 3가지 중 하나를 시도한다:
- 전체적으로 인증 프로세스를 바이패스 한다
- 모든 질문에 대답할 수 있도록 힘 또는 추론으로 비밀키를 얻는다
- 키 없이 각각의 질문에 정확하게 대답하도록, 질문 및 대답을 인증하는 속성을 충분히 찾는다
공격 스타일 및 그들이 취하는 형태는 아래에 상술된다. 인증 칩에 의해 사용된 알고리즘과 프로토콜에 관계없이, 칩 인증 부분의 회로는 물리적인 공격을 받을 수 있다. 비록 공격의 형태가 변경될 수 있지만, 물리적인은 공격은 주로 4가지 방식이 된다:
- 전체적으로 인증 칩을 바이패싱
- 동작시 칩의 물리적인 시험(파괴적 및 비파괴적)
- 칩의 물리적인 분해
- 칩의 물리적인 변경(alteration)
공격 스타일 및 그들이 취하는 형태는 아래에 상술된다. 이 섹션은 이들 공격에 대한 솔루션을 제공하지 않는다. 이것은 단지 각각의 공격 유형을 기술한다. 시험은, 몇개의 시스템에 부속되는 인증 칩(53)(인터넷 인증과 같은 몇가지 다른 시스템을 방해하는 것과 같은)의 컨텍스트(context)에 한정된다.
논리적인 공격(Logical Attacks)
이들 공격은 암호 사용법의 물리적인 실행에 의존하지 않는다. 그들은 프로토콜과 알고리즘의 보안 및 난수 생성기에 불리하게 작용한다.
암호 원문(Ciphertext)만 공격
이것은 공격자가 하나 이상 암호화된 메시지를 가지는 경우이고, 모두 동일한 알고리즘을 사용하여 암호화되었다. 공격자의 목적은, 암호화된 메시지로부터 평문(plaintext) 메시지를 얻는 것이다. 이상적으로, 키가 복구될 수 있어, 장래에는 모든 메시지도 복구될 수 있다.
공지된 평문 공격(Known plaintext attack)
이것은 공격자가 평문과 평문의 암호화된 형태 양쪽을 가지는 경우이다. 인증 칩의 경우, 공지된 평문 공격은, 시스템과 인증 칩 사이의 데이터 흐름을 볼 수 있는 것이다. 입력 및 출력이 관찰되어(공격자에 의해 선택되지 않는다), 무력함이 분석될 수 있다(생일 공격 또는 특이하게 관심있는 입력/출력 페어를 위한 탐색에 의해). 공격자는 단지 데이터 흐름만을 관찰하기 때문에, 공지된 평문 공격은 선택된 평문 공격보다 공격 유형이 허약하다. 공지된 평문 공격은 시스템과 인증 칩 사이의 접속에 논리 분석기를 접속함으로써 수행될 수 있다.
선택된 평문 공격(Chosen plaintext attacks)
선택된 평문 공격은, 암호 사용자(cryptanalyst)가 암호 사용법에 대해 어떤 선택된 메시지를 전송하고, 응답을 관찰할 수 있는 능력이 있는 것을 기술한다. 암호 사용자가 알고리즘을 알고 있는 경우, 다른 함수의 입력에 특정 출력을 공급하 는 것에 의해, 입력과 출력이 활용될 수 있는 관계에 있다. 삽입된 인증 칩을 사용하여, 논리적으로 그 남자/그 여자로 보일 수 있는 암호 사용자가 시스템이므로, 대개 선택된 평문 공격을 방지하는 것은 어렵고, 어떤 선택된 비트 패턴 스트림을 인증 칩에 전송한다.
적응성 있는 선택된 평문 공격(Adaptive Chosen plaintext attacks)
이 유형의 공격은, 공격자가 이전의 실험 결과에 의거한 후속의 선택된 평문을 수정할 수 있는 추가된 능력을 가지는 것을 제외하고, 선택된 평문 공격과 유사하다. 이것은, 특히 시스템과 소비재(Consumables) 양쪽 대중이 이용할 수 있기 때문에, 사진 복사기와 토너 카트리지와 같은 소비재를 위해 이용될 때, 확실히 시스템/인증 칩 시나리오를 갖는 경우이다.
무차별 공격(Brute force attack)
어떤 키 기반 암호 사용법 알고리즘을 분쇄하기 위해 허용된 방식은 단지 모든 키를 시도하는 것이다. 언젠가는 정확한 것을 찾을 것이다. 이것은 무차별 공격(Brute Force Attack)으로 공지되었다. 그러나, 더 많은 키 가능성이 있고, 더 많은 키가 시도되고, 정확한 것을 찾기 더 긴 것이 취해진다(평균). N개의 키가 있으면, 최대 N번의 시도를 취할 것이다. 키가 N 비트로 길면, 단지 시도 2N-1의 잘반 이후에 키를 발견할 기회 50%를 가지고 최대 2N의 시도를 취할 것이다. N이 더 길어지면, 키를 찾는 것이 더 길어지고, 그러므로 키를 더 안전한 키가 존재한다. 물론, 첫째 시도의 공격으로 키를 추측할 수 있지만, 이것은 더 긴 키가 더이상 존재 하지 않을 것 같은 것이다. 56 비트의 키 길이를 고려한다. 최악의 경우, 키를 찾기 위해 총 256테스트(7.2 x 1016테스트)가 시행되어야 한다. 1977년에 디피(Diffie)와 헬만(Hellman)은 DES를 크래킹(cracking)하기 위해, 각각 초당 100만 테스트를 실행할 수 있는 100만 프로세서로 구성되는 전문화된 장치를 기술한다. 이러한 장치는 어떤 DES 코드도 20시간 걸려 분쇄할 수 있다. 128 비트의 키 길이를 고려한다. 최악의 경우, 키를 찾기 위해 총 2128테스트(3.4 x 1038테스트)가 시행되어야 한다. 이것은 각각 초당 10억 테스트를 실행하는 1트릴리온(trillion) 프로세서의 어레이상에서 100억년 걸린다. 충분히 긴 키 길이를 가지는, 무차별 공격은 공격자의 노력을 가치있게 하기 위해서는 너무 길다.
추측 공격(Guessing attack)
이 유형의 공격은 공격자가 단지 키를 "추측(guess)"하는 것이다. 공격이 무차별 공격과 동일하고, 성공의 가능성은 키의 길이에 의존한다.
퀀텀 컴퓨터 공격(Quantum Computer attack)
n 비트 키를 분쇄하기 위해, 적합한 알고리즘에 삽입된 n 큐빗(qubits)을 포함하는 퀀텀 컴퓨터(NMR, 광학 또는 케이지드(caged) 원자)에는 내장되는 적절한 알고리즘이 삽입된다. 퀀텀 컴퓨터는 2n의 동시 코히어런트 상태가 효과적으로 존재한다. 상태가 2n 동시 일관된 정식으로 존재한다. 트릭은 디코히어런스(decoherence)를 일으키지 않고 정확한 코히어런트 상태를 추출하는 것이다. 이것을 데이트(date)하는 것은 2 큐빗 시스템(4개의 코히어런트 상태가 존재하는)을 가지고 달성되었다. 몇년 이내에, 이것을 6 큐빗(64 동시 코히어런트 상태를 가지는)으로 확대하는 것이 가능하다고 생각된다.
불행히도, 모든 추가된 큐빗은 키를 나타내는 신호의 상대적인 강도를 양분한다. 이것은 특히 암호 보안시스템에서 사용되는 긴 키를 가지는 키 복구에 대한 심각한 장애로 신속하게 된다. 그 결과, 퀀텀 컴퓨터를 사용하는 암호 보안키(예를 들면 160 비트)에 대한 공격은 실현 가능하지 않을 것 같고, 퀀텀 컴퓨터가 50대 이상 또는 인증 칩의 상업적인 수명내에서 그와 같은 큐빗으로 달성되는 것은 극단적으로 일어날 수 없다. 50 큐빗 퀀텀 컴퓨터를 사용하더라도, 160 비트 키를 크랙하기 위해서는 2110테스트가 필요하게 된다.
고의적인 에러 공격(Purposeful Error Attack)
어떤 알고리즘을 가지는 공격자는 부정확한 입력의 결과로부터 귀중한 정보를 수확할 수 있다. 이것은 에러 메시지 텍스트로부터 에러가 생성되는데 걸린 시간에 걸쳐 분포될 수 있다. 간단한 예가 userid/password 구조이다. 대개 에러 메시지가 "Bad userid"를 말하면, 그때 공격자는 그 대신에 "Bad password"를 말하는 메시지를 가져온 후, 그들은 userid가 정확한 것을 안다. 메시지가 항상 "Bad userid/password"를 말하면, 보다 더 적은 정보가 공격자에게 주어진다. 더 복잡한 예는 안전한 웹사이트로부터 암호화 코드를 크래킹하는 최근 발행된 방법 그것이다. 공격은 특별한 메시지를 서버로 전송하고, 에러 메시지 응답을 관찰하는 것이다. 응답은, 응답이 없더라도 키를 취득하는데 충분한 몇가지 정보를 제공한다. 입 력메시지에서 틀린 비트가 검출되는 즉시 에러를 반환하는 알고리즘을 가지는 알고리즘 시간의 예가 도시될 수 있다. 이것은, 하드웨어 실행에 따라, 공격자가 단지 응답 시간을 기록하고, 에러 응답에 걸리는 시간에 따라 하나씩 각각의 비트를 변경하여, 키를 얻는 방법이다. 확실히, 칩 실행에서는시간이 인터넷보다 더 정확하게 관찰될 수 있다.
생일 공격(Birthday attack)
이 공격은 유명한 "생일 패러독스(birthday paradox)"(실제로 전형 패러독스(paradox)가 아니다)의 이름을 따서 명명되었다. 다른 사람과 생일을 공유할 가능성은, 365명중 1명이다(윤년은 계산하지 않는다). 그러므로, 그들중 하나가 당신과 생일을 공유할 50% 이상의 가능성은 방안의 183명이다. 그러나, 어떤 2명이 생일을 공유할 기회가 50% 이상이 되므로, 방안에는 단지 23명만이 필요하다. 이것은 23명이 253의 다른 페어를 양보하기 때문이다. 생일 공격은 해싱 알고리즘, 특히 디지털 서명을 가지는 해싱을 조합하는 해싱 알고리즘에 대한 공통적인 공격이다. 메시지가 생성된 후 이미 서명되었다면, 공격자는 동일한 값(당신의 생일을 공유하는 어떤 한사람을 찾는 것과 유사한)을 해시하는 충돌메시지를 탐색해야 한다. 그러나, 공격자가 메시지를 생성할 수 있으면, 생일 공격은 동작하게 된다. 공격자가 동일한 해시값(어떤 2며의 사람이 생일을 공유하는 것과 유사한)을 공유하고, 하나의 메시지는 서명하여 수용할 수 있고, 다른 하나는 공격자에게 유익한 2개의 메시지를 탐색한다. 일단 원본 메시지에 서명이 되면, 양쪽이 동일한 값을 해시하기 때문에, 공격자는 단지 메시지가 원본이라고 수학적으로 말할 수 없는 대체메시 지에 서명하라고 요청한다. 무차별 공격이 매치(match)를 결정하는 유일한 방식이라고 가정하면, 생일 공격에 의한 n 비트 키의 허약해짐(weakening)은 2n/2이다. 생일 공격에 영향 받기 쉬운 128 비트의 키 길이는 단지 64 비트의 효과적인 길이를 가진다.
체인 공격(Chaining attack)
이들은 해시함수의 체인 특성에 대한 공격이다. 그것들은 해시함수의 압축함수에 집중한다. 아이디어는 해시함수가 일반적으로 임의의 길이의 입력을 취하고, 한꺼번에 입력 n 비트를 처리함으로써 일정한 길이의 출력을 생성한다는 사실에 기초한다. 1개 블록의 출력은 다음 블록에 설정하는 체인 변수으로서 사용되고 있다. 전체 입력에 대한 충돌을 찾는 것보다, 아이디어는 적절한 메시지와 같은 출력 체인변수로 귀결되는 대체 블록을 찾기 위해, 주어진 입력 체인변수를 설정하는 것이다. 특별한 블록을 위한 선택 횟수는 블록의 길이에 기초한다. 체인 변수가 c비트면, 해시함수는 랜덤 매핑과 같은 작용하고, 블록 길이가 b 비트이고, 이와 같은 b 비트 블록의 숫자는 대략 2b/2c이다. 대체 블록을 찾는 도전은, 그러한 블록은 가능한 모든 블록의 희박한 부분집합이다. SHA-1에 대해서, 512 비트 블록의 숫자는 대략 2512/2160또는 2352이다. 무차별 탐색에 의해 블록을 찾을 기회는 약 1/2160이다.
완전한 참조표를 가지는 대체(substitution with a complete lookup table)
칩으로 전송하는 잠재적인 메시지의 숫자가 작으면, 클론(clone) 제작자는 키를 크랙할 필요가 없다. 그 대신 클론 제작자는 시스템에 의해 전송된 코드에 대 한 진짜 칩으로부터의 모든 응답의 기록을 가지는 칩내에 롬(ROM)을 편입시킨다. 이와 같은 참조표를 위해 더 긴 키, 더 긴 응답, 더 많은 공간이 필요하다.
희박한 참조표를 가지는 대체(substitution with a sparse lookup table)
칩으로 전송되는 메시지가 효과적으로 랜덤하기보다 어떻게 하든 예측 가능하면, 클론 제작자는 완전한 참조표를 제공할 필요가 없다. 예를 들면:
메시지가 간단한 일련번호라면, 클론 제작자는 과거 및 장래에 예측되는 일련번호의 값을 포함하는 참조표를 간단히 제공할 필요가 있다. 이들은 109이상일 것 같지 않다.
테스트 코드가 간단히 일자라면, 그때 클론 제작자는 주소로서 일자를 사용하여 참조표를 제작할 수 있다.
테스트 코드가 시드로서 일련번호나 일자를 사용하는 의사 랜덤 숫자라면,
그때 클론 제작자는 시스템에서 의사 랜덤 숫자 생성기를 바로 크랙할 필요가 있다. 그들이 시스템의 객체(object) 코드에 액세스(access)하는 것과 같이, 아마 이것은 어렵지 않을 것이다. 그때, 클론 제작자는 저장된 인증코드에 액세스하기 위해 이들 코드를 사용하여 컨텐츠 어드레스 가능한 메모리(또는 다른 희박한 어레이 검색)를 제작할 수 있다.
차동 암호 해석(Differential cryptanalysis)
차동 암호 해석은 입력스트림의 페어가 공지된 차이를 가지고 생성되는 공격을 기술하고, 인코드된 스트림에서의 차이가 분석된다. DES와 다른 유사한 알고리즘에서 사용되는 것과 같이, 현존하는 차동 고역은 S 박스의 구조에 많이 의존한 다. HMAC-SHA1과 같은 다른 알고리즘이 S 박스를 갖지 않지만, 공격자는 통계적인 분석을 받음으로써 차동 것과 같은 공격을 받을 수 있다:
최소 차이의 입력 및 그것에 대응하는 출력
최소 차이의 출력 및 그것에 대응하는 입력
일단 프로세스가 기술되면, 차동 암호 해석에 대해서 대부분의 알고리즘이 강화된다. 이것은 각각의 암호 해석 알고리즘에 전용된 특정 섹션에서 커버된다. 그러나, 개발자가 차별 공격의 어떤 스타일을 고려하지 않고, 그들의 알고리즘이 공개 심사를 받지 않았기 때문에, 최근 비밀리에 개발된 몇개의 알고리즘은 분쇄되었다.
메시지 대체 공격(Message substitution attacks)
어떤 프로토콜에 있어서, 중간에 있는 사람(man-in-the-middle)은 메시지의 일부 또는 전부를 대체할 수 있다. 이것은 실제 인증 칩이 소비재내의 재사용 클론 칩에 밀어 넣어진다. 클론 칩은 시스템과 인증 칩 사이의 모든 메시지를 인터셉트하여, 다수의 대체 고역을 수행할 수 있다. 공격자는 유효한(valid) 헤더를 생성할 수 없지만, 특히 유효한 응답이 "예, 당신의 메시지를 수신하였습니다(Yes, I received your message)"의 라인에 따른 어떤 것이라면, 그들 자신의 메시지를 대체할 수 있다. 반환메시지가 "예, 다음의 메시지..를 받았습니다(Yes, I received the following message...)"라면, 공격자는 최초의 전송자에게 접수 통지를 전송하기 전에 원본 메시지를 대체할 수 있다. 메시지 인증코드는 대부분의 메시지 공격과 싸우기 위해 개발되었다.
키 생성기 리버스 엔지니어링(Reverse engineering the key generator)
의사 랜덤 숫자 생성기가 키를 생성하기 위해 사용되면, 생성기 프로그램을 얻거나 또는 사용된 랜덤 시드를 추정하기 위한 클록 제작은 가능성이 있다. 이것은 넷스케이프 보안 프로그램이 분쇄된 방식이었다.
전체적으로 인증을 바이패싱(Bypassing authentication altogether)
전체적으로 인증 프로세스를 바이패스 할 수 있는 인증 프로토콜에 문제가 있다. 이들 종류의 공격은 키와 완전히 관계없고, 공격자는 그것을 복구하거나 또는 추정할 필요가 없다. 시동시 인증하고, 다른 시간에는 인증하지 않는 시스템의 예를 고려한다. 클론 인증 칩을 가지는 재사용 가능한 소비재에 실제 인증 칩을 사용한다. 클론 인증 칩(53)은 실제 호출을 위해 인증 실제 칩을 사용하고, 그 후 실제 인증 칩의 상태 데이터를 모의 실험한다. 인증을 바이패스 하는 다른 예는, 소비재가 사용된 이후에만 시스템이 인증하는 경우이다. 클론 인증 칩은 소비재의 사용 이후 인증 프로토콜이 완료되기 이전(또는 시작되었다 하더라도) 접속의 손실을 모의 실험함으로써 간단한 인증 칩 바이패스를 수행할 수 있다. 위성 TV 시스템을 위한 마이크로컨트롤러 칩을 교체하는데 포함된 "켄터키 프라이드 칩(Kentucky Fried Chip)" 핵(hack)과 같이 하나의 악명 높은 공격이 공지되었다. 가입자가 가입 요금 지불을 정지할 때, 시스템은 "사용불가(disable)"라는 메시지를 전송한다. 그러나, 새로운 마이크로컨트롤러는 이 메시지를 간단히 검출하고, 소비자의 위성 TV 시스템으로 전달하지 않는다.
거로트/브라이브 공격(Garrote/bribe attack)
사람들이 키를 알면, 다른 사람에게 말할 가능성이 있다. 말하는 것은 강요(coercion)(뇌물, 교살 등), 보복(revenge)(예를 들면, 불만있는 직원) 또는 간단히 원리 때문이다. 이들 공격은 키를 추정하는 노력이 다른 것보다 더 저렴하고, 더 용이하다. 일예로서, Divx 표준 개발에 관여했다고 주장하는 다수의 사람들이, 원리를 벗어난 Divx 고유의 크래킹 장치를 개발하는데 도움이 되는 취지로 최근(1998년 5/6월)에 다양한 DVD 뉴스 그룹 상에서 목소리를 내기 시작했다.
물리적인 공격(Physical Attacks)
다음 공격은, 공격자가 물리적적으로 액세스 하는 실리콘 칩에서 인증 장치의 실행을 가정한다. 첫째 공격인, 롬 판독(Reading ROM)은, 키가 롬에 저장되었을 때의 공격을 기술하고, mod 공격이 비밀키가 플래시 메모리에 저장된 것으로 가정한다.
롬 판독(Reading ROM)
키가 롬에 저장되면 직접 판독할 수 있다. 이렇게, 롬은 공개키(비대칭 암호 해석에 사용하기 위해)를 유지하기 위해 안전하게 사용될 수 있지만, 전용키를 유지하지 않는다. 대칭 암호 해석에 있어서, 롬은 완전히 불안정하다. 지적 재산권이 존중되지 않는 국가에서 칩의 클로닝(cloning)이 발생하는 것으로 가정하기 때문에, 키로서 저작원 있는 텍스트(하이쿠(haiku)와 같은)를 사용하는 것은 불충분하다.
칩의 리버스 엔지니어링(Reverse engineering of chip)
칩의 리버스 엔지니어링, 공격자가 칩을 개방하여, 회로(circuitry)를 분석 하는 것이다. 일단 회로가 분석되면 칩 알고리즘의 내부적인 작용이 복구될 수 있다. 루슨트 테크놀러지는, 이미지 회로에 대해서, TOBIC(OBIC이 광학 빔 유도전류를 나타내는, 2개의 광자 OBIC)으로 공지된 액티브 방법을 개발하였다. 스태틱 램분석을 위해 주로 개발된 프로세스는, 모든 백(back) 재료의 제거, 미러(mirror) 마무리에 대한 이면 연마 및 표면 상으로 빛의 포커싱을 포함한다. IC내에서 전류를 유도하지 않도록 특별히 여기된 파장이 선택된다. 19세기에 키르호프(Kerckhoffs)는 암호 해석에 대한 기본 가정을 만들었다: 알고리즘의 내부 작용이 구조의 유일한 비밀이면, 구조는 분쇄된 것이나 다름없다. 그는 비밀유지가 전적으로 키에 있어야 한다고 규정하였다. 그 결과, 칩의 리버스 엔지니어링을 방지하는 최상의 방법은 내부 작용을 관련없게 만드는 것이다.
인증 프로세스 도용(Usurping the authentication process)
모든 클론 제작자는 시스템과 소비재(consumable) 디자인 양쪽에 액세스 한다는 것을 가정해야 한다. 동일한 채널이 시스템과 신뢰된 시스템 인증 칩 및 비신뢰(non-trusted) 소비재 인증 칩 사이의 통신에 사용되면, "정답(correct answer)"을 얻기 위해 비신뢰 칩이 신뢰된 인증 칩에게 질문하는 것이 가능하다. 이것이 사실이라면, 클론 제작자는 키를 정하지 않는다. 그들은 시스템 인증 칩으로 부터의 응답을 사용하여 시스템을 단지 속여야 한다. 인증 프로세스를 도용하는 대체 방법은, 인증 프로세스가 발생될 때마다 시스템과의 접촉 손실이 모의 실험된, 파워 다운(power-down)을 모의 실험하는 것 등을 포함하는 논리적인 공격 "인증 프로세스 바이패스(Bypassing Authentication Process)"과 동일한 방법을 수반한다.
시스템의 수정(Modification of System)
이러한 종류의 공격은, 시스템 그 자체가 클론 소비재을 수용하기 위해 수정되는 것이다. 공격은 시스템 롬의 변경, 소비재의 리와이어링(rewiring) 또는 극단적인 경우 완전히 클론 시스템을 취하는 것이다. 이러한 종류의 공격은 각각 별개의 시스템에서 수정이 요구되고, 십중팔구 소유자의 동의를 요구한다. 전형적으로 무보증으로 되고, 십중팔구 고가로 되기 때문에, 대개 소비자는 이와 같은 수정을 받는 것이 명확한 이점이 있게 된다. 소비자에 대한 명확한 이점을 가지는 수정의 일예는 지역 고정된 DVD 플레이어를 지역 프리 DVD 플레이어로 변경하는 소프트웨어 패치이다.
종래의 프로빙에 의한 칩 동작의 직접 검증(Direct viewing of chip operation by conventional probing)
칩 동작이 STM 또는 전자 빔을 사용하여 직접 검증되면, 내부 불휘발성 메모리에서 판독하여 작업 레지스터에 적재하는 하는 것으로 키가 기록된다. 이들 종래의 검증 형태는 전원이 공급되는 동안 IC의 상면 또는 정면에 직접 액세스 하는 것이 요구된다.
불휘발성 메모리의 직접 관찰(Direct viewing of the non-volatile memory)
플래시 메모리의 플로팅 게이트가 방전되지 않게, 노출되도록 칩이 얇게 절단(slicing)되면, 그때 키는 STM 또는 SKM(Scanning Kelvin Microscope)을 사용하여 직접 관찰된다. 그러나, 게이트를 방전하지 않고 이 레벨로 칩을 얇게 절단하는 것은, 대개 불가능하다. 웨트 에칭, 플라즈마 에칭, 이온 밀링(milling)(집중된 이 온 빔 에칭) 또는 화학기계 연마를 사용하는 것은, 플로팅 게이트상에 존재하는 작은 전하를 거의 확실하게 방전시킨다.
상태 변경에 의한 광 분출 관찰(Viewing the light bursts caused by state changes)
게이트가 상태를 변경할 때마다, 소량의 적외선 에너지가 방출된다. 실리콘은 적외선이 통과되기 때문에, 이들 변화는 칩의 내면에서 회로를 조사함으로써 관찰될 수 있다. 방출 프로세스가 약해지는 동안, 그것은 천문학용으로 개발된 고감도 장비에 의해 검출되기에 충분히 밝다. IBM에 의해 개발된 기술은, PICA(Picosecond Imaging Circuit Analyzer)라로 불려진다. 레지스터의 상태가 시간 t에서 알려지면, 시간 t+n에서 정확한 값을 드러내는 레지스터 변화 초과시간을 주시하고, 데이터가 키의 일부이면, 그때 그 일부분은 위태롭게 된다.
EMI 측정(Monitoring EMI)
전자 회로가 동작할 때마다, 약한(faint) 전자기신호가 주어진다. 비교적 저렴한 장비(몇천 달러)는 이들 신호를 측정할 수 있다. 이것은 공격자가 키를 추정하는데 충분한 정보를 제공한다.
I
dd
변동 관찰(Viewing I
dd
fluctuations)
키가 관찰되지 않아도, 레지스터가 상태를 변경할 때마다 전류 변동이 있다. 신호대 잡음 비율(S/N)이 충분히 높으면, 공격자는 하이(high) 또는 로(low) 비트에 걸쳐 프로그래밍에서 발생되는 Idd의 차이를 측정할 수 있다. Idd의 변동은 키에 대한 정보를 드러낼 수 있다. 이들 공격은 이미 스마트 카드를 분쇄하는데 사용되었다.
차동 오류 분석(Differential Fault Analysis)
이들 공격은, 이온화, 초단파 방사 또는 환경 스트레스에 의한 비트 에러의 도입을 가정한다. 대부분의 경우, 이와 같은 에러는 키를 드러내는 유익한 변화를 일으키기 보다는 십중팔구 칩에 악영향을 미친다(즉, 프로그램 코드를 파괴시킨다). 롬 오버라이트, 게이트 파괴 등과 같은 타깃 오류는, 십중팔구 훨씬 유용한 결과를 생성한다.
클럭 클리치 공격(Clock glitch attacks)
전형적으로, 칩은 어떤 클럭 스피드 범위내에서 적절하게 동작하도록 디자인된다. 몇몇의 공격자는 극단적으로 높은 클럭 스피드로 칩을 구동함으로써 로직에 오류를 도입하거나 또는 특별한 지속 기간동안 특별한 시간에서 클럭 글리치를 도입하는 것을 시도하다. 아이디어는 회로가 적절하게 기능하지 않는 레이스(race) 조건을 생성하는 것이다. 일예는, Input1과 Input2의 앤드(AND) 게이트 대신 항상 Input1을 통해서 제어하는(gqte) 앤드(AND) 게이트이다. 공격자가 칩의 내부 구조를 알면, 알고리즘 실행에서 정확한 순간에 레이스 조건을 도입하려고 시도할 수 있는 것에 의해 키(최악의 경우, 키 그 자체)에 대한 정보를 나타낸다.
전원 공격(Power supply attacks)
클럭 신호에서 글리치를 생성하는 대신에, 공격자는 전력이 동작전압 범위 밖으로 증가되거나 또는 감소되게 전원에서 글리치를 생성할 수도 있다. 기본적인 효과는 특별한 명령으로 실행에 에러를 도입하는 클럭 글리치와 동일하다. 아이디어는, 키를 XOR하거나 또는 데이터의 1 비트 위치 등의 이동으로부터 CPU를 정지시키느 것이다. 키에 대한 정보가 드러나도록 고유 명령이 표적이 된다.
롬 오버라이팅(Overwriting ROM)
롬내에서의 단일 비트에는 레이저 커터 마이크로스코프를 사용하여 논리에 따라 1 또는 0이 오버라이트 될 수 있다. 이것은, 주어진 오피코드(opcode)/오퍼랜드(operand) 세트를 가지고, 공격자가 조건부 점프를 비조건부 점프로 변경하거나 또는 아마 레지스터 이송의 목적지를 변경하는 간단한 것이다. 타깃 명령이 신중히 선택되면, 키가 드러나게 귀결된다.
EEPROM/Flash 수정(Modifying EEPROM/Flash)
EEPROM/Flash 공격은, 레이저 커터 마이크로스코프 기술이 각각의 비트를 셋트하고, 리셋하는 양쪽에 모두 사용될 수 있는 점을 제외하고, 롬 공격과 유사하다. 이것은 알고리즘 수정의 관점에서 더 넓은 범위를 제공한다.
게이트 파괴(Gate Destruction)
앤더슨(Anderson)과 쿤(Kuhn)은, 1997년 워크숍의 럼프(rump) 세션에서 비햄(Biham)과 사미르(Shamir)가 DES에 대한 공격을 제시한 고속 소프트웨어 암호화(Fast Software Encryption)를 기술한다. 공격자는 레이저 커터를 사용하여 공지된 블록 암호(DES)의 하드웨어 실행으로 각각의 게이트를 파괴한다. 공격의 기본적인 효과는, 레지스터의 특별한 비트가 "스트럭(struck)" 되게 하는 것이다. 비햄(Biham)과 사미르(Shamir)는 특별한 레지스터가 라운드 함수로부터 출력의 최상위 비트를 0으로 설정하는 방식에 영향을 미치게 하는 효과를 기술한다. 좌측 절반과 우측 절반의 제6 최상위 비트를 비교함으로써 키의 몇개 비트를 복구할 수 있다. 이와 같은 방식으로 다수의 칩을 손상시키는 것은 완전한 키 복구를 용이하게 하기 위해 키에 대한 충분한 정보를 드러내게 할 수 있다. 이와 같은 방식으로 수정된 암호화 칩은 암호화와 복호화화가 더 이상 반대로 되지 않는 특성을 가진다.
오버라이트 공격(Overwrite Attacks)
플래시 메모리를 판독하기 위한 시도 대신에, 공격자는 레이저 커터 마이크로스코프를 사용하여 단일 비트를 간단히 설정한다. 공격자는 이전의 값은 모르지만, 새로운 값은 안다. 칩이 여전히 동작하고 있면, 비트의 최초 상태는 새로운 비트 상태와 동일하게 된다. 칩이 더 이상 동작하지 않으면, 비트의 최초 상태는 현재 상태의 논리적인 NOT가 되어야 한다. 공격자는 이 공격을 키의 각 비트에서 수행하고, 많아야 n개의 칩을 사용하여 n 비트 키를 얻을 수 있다(새로운 비트가 과거의 비트와 매치되면, 새로운 칩은 다음 비트를 필요로 하지 않는다)
테스트 회로 공격(Test Circuitry Attack)
대부분의 칩은 제조 결함을 검사하기 위해 특별히 디자인된 테스트 회로를 포함한다. 이것은 BIST(Built In Selt Test) 및 스캔 경로를 포함한다. 대체로, 스캔 경로 및 테스트 회로는 모든 삽입된 래치에 대한 액세스 및 판독 기구를 포함한다. 몇가지 경우, 테스트 회로는 특별한 레지스터의 컨텐츠에 대한 정보를 제공하기 위해 잠재적으로 사용된다. 이 모든 제조 테스트를 통과하면, 칩내의 고유한 접 속을 끊어지게 함으로써 몇가지 경우에서, 테스트 회로는 자주 사용 불가능하게 된다. 그러나, 단호한 공격자는 테스트 회로를 다시 연결할 수 있어, 그것을 사용 가능하게 한다.
메모리 잔류자기(Memory Remanence)
전원이 제거된 후, 그것들이 불휘발성이라고 생각되기에는 충분히 오래 잔류되지 않지만, 램에 값이 오래 잔류한다. 기밀 정보가 램(예를 들면 작업 레지스터)으로 이동되면, 고역자는 전원을 제거할 수 있고, 그 후 램에서 값의 판독을 시도한다. 이 공격은 정상적인 램 칩을 가지는 보안 시스템에 대해서 가장 유용한다. 모범적인 예는, 컴퓨터 케이스가 개방될 때 유발되는 자동 전원차단(power-shut-off)을 갖도록 보안 시스템이 디자인되는 것이다. 공격자는, 간단히 케이스를 개방하고, 램 칩을 제거하며, 잔류자기 때문에 키를 회수할 수 있다.
칩 절도 공격(Chip Theft Attack)
인증 칩의 수명에 다수의 단계가 존재하면, 이들 단계의 각각은 칩이 도난되는 결과의 관점에서 보안에 대해 시험되어야 한다. 예를 들면, 정보가 단계에서 칩에 프로그램되면, 단계 사이의 칩의 절도는, 공격자가 키 정보를 액세스하거나 또는 공격을 위해 적은 노력을 갖는다. 유사하게, 칩이 제조 후 프로그래밍 이전에 도난되면, 공격자에게 어떤 논리적인 또는 물리적인 이점이 주어지는가?
요구 사항(Requirements)
소비재를 인증하는 문제에 대한 현존하는 솔루션은, 전형적으로 포장재료(packing) 상의 물리적인 특허에 의존한다. 그러나, 이것은 지적재산 보호 가 허약한 국가에서 가정 리필 시행 또는 클론 제조를 중지시키지 못한다. 따라서, 보다 더 높은 레벨의 보호가 요구된다. 그러므로, 인증 기구는 시스템이 소비재를 안전하고 쉽게 인증할 수 있게 하는 인증 칩(53)에 내장된다. 소비재를 인증하는 시스템에 대한 그 자신을 제한하는(소비재 인증 시스템이라고 생각하지 않는다), 2개 레벨의 보호가 생각될 수 있다:
유일한 인증 존재(Presence Only Authentication)
이것은 인증 칩의 유일한 존재가 시험되는 것이다. 인증 칩은 다시 프로그램되지 않고 다른 소비재에서 재사용될 수 있다.
소비재 수명 인증
이것은 인증 칩의 존재가 시험되는 것 뿐만 아니라, 인증 칩(53)이 소비재의 수명 동안 지속되어야 하는 것이다. 재사용되는 칩을 위해 완전히 제거되어 다시 프로그램 되어야 한다. 2개 레벨의 보호는 다른 요구 사항을 어드레스 한다. 높은 볼륨의 소비재의 클론 버전을 방지하기 위해 소비재 수명 인증에 주로 관계되어 있다. 이 경우, 각각의 칩은 인증되는 소비재에 대한 안전한 상태의 정보를 유지한다. 소비재 수명 인증 칩은 유일한 인증 칩 존재를 필요로 하는 어떤 상황에서도 고 사용되어야 한다는 것에 주의하여야 한다. 인증, 데이터 스토리지 무결성 및 제조를 위한 요구 사항은 독립적으로 생가되어야 한다. 다음의 섹션은 각각의 요구 사항을 요약한다.
인증(Authentication)
유일한 인증 존재 및 소비재 수명 인증 양쪽의 인증 요구 사항은 소비재를 인증하는 시스템의 경우로 한정된다. 유일한 인증 존재를 위해, 인증 칩이 물리적으로 존재하는 것으로 보증되어야 한다. 또한, 소비재 수명 인증을 위해, 상태 데이터가 실제로 인증 칩에서 출력되고, 도중에 변경되지 않아야 하는 것으로 보증되어야 한다. 변경된 데이터가 새로운 소스를 가지고, 소스가 결정되지 않으면, 변경의 문제는 확정될 수 없다는, 이들 이슈는 분리될 수 없다. 보안 전문가에 의해 정밀 조사되지 않은 자가 양조음료 보안방법에 의존하는, 비밀인 인증방법을 충분히 제공하지 않는다. 그러므로, 주요 요구 사항은 전문가의 정밀 조사를 견디는 것에 의한 인증을 제공하는 것이다. 인증 칩(53)에 의해 사용된 인증 구조는 논리적인 수단에 의한 패배에 저항력이 있다. 논리적인 공격의 유형은 광범위하고, 3개 중 하나를 시도한다:
- 전체적으로 인증 프로세스 바이패싱
- 힘 또는 추론에 의해 어떤한 질문에도 대합할 수 있는 비밀키를 획득
- 키 없이, 각각의 질문에 대해 정답을 제공하기 위해, 인증하는 질문 및 대답의 속성을 충분히 파악
데이터 스토리지 무결성(Data Storage Integrity)
인증 프로토콜이 통신 메시지에서 데이터 무결성을 보증하는 것을 담당하지만, 데이터 스토리지 무결성도 요구된다. 2개 종류의 데이터가 인증 칩내에 저장되게 된다:
- 비밀키와 같은 인증 데이터
- 일련번호 및 잔류 매체 등과 같은 소비재 상태 데이터
이들 2개 데이터 유형의 액세스 요구 사항은 크게 다르다. 그러므로, 인증 칩(53)은 각 융형의 무결성 요구 사항을 고려하느 스토리지/액세스 제어기구를 필요로 한다.
인증 데이터(Authentication Data)
인증 데이터는 비밀로 존속되어야 한다. 칩의 일생중 제조/프로그래밍 단계 동안 칩에 저장될 필요가 있지만, 그후 칩에서 떠나는 것어 허용되지 않아야 한다. 불휘발성 메모리에서 판독하는 것을 방해하여야 한다. 인증 구조는 키가 추론에 의해 얻어질 수 없는 것을 보증할 책임이 있고, 제조 프로세스는 키가 물리적인 수단에 의해 얻어질 수 없는 것을 보증할 책임이 있다. 인증 데이터 메모리 영역의 사이즈는, 필요한 키와 인증 프로토콜에 의해 위임되는 비밀 정보를 유지하기 위해 충분히 커야 한다.
소비재 상태 데이터
각각의 인증 칩(53)은 또한 소비재 상태 데이터의 256 비트(32 바이트)를 저장할 수 있어야 한다. 소비재 상태 데이터는 다음의 유형으로 분할될 수 있다. 적용에 따라, 데이터 항목의 이들 유형의 각각은 다른 숫자가 될 것이다. 단일 데이터 항목을 위해 최대 숫자 32 비트가 생각되어야 한다.
- 판독 전용(Read Only)
- 판독 기록(ReadWrite)
- 감소 전용(Decrement Only)
판독 전용 데이터는 칩의 일생 중 제조/프로그래밍 단계 동안 칩에 저장될 필요가 있지만, 그 후 변경이 허용되지 않아야 한다. 판독 전용 데이터 항목의 예는 소비재 배치(batch) 번호 및 일련번호이다.
판독 기록 데이터는, 예를 들면 특별한 소비재가 사용되는 지속 시간인, 변경 가능한 사태 정보이다. 판독 기록 데이터 항목은 소비재의 수명 동안 횟수에 제한없이 판독 및 기록될 수 있다. 그것들은 소비재에 대한 어떤 상태 정보도 저장하기 위해 사용될 수 있다. 이 데이터의 유일한 요구 사항은 불휘발성 메모리에 유지될 필요가 있는 것이다. 공격자가 시스템(판독 기록 데이터에 기록할 수 있는)에 대한 액세스를 획득하므로, 어떤 공격자도 이러한 유형의 데이터 필드를 잠재적으로 변경할 수 있다. 이러한 데이터 유형은 비밀 정보를 위해 사용될 수 없고, 불안정하다고 간주된다.
감소 전용 데이터는 소비재 공급원의 유용성을 카운트 다운하는데 사용된다. 예를 들면, 사진 복사기의 토너 카트리지는 감소 전용 데이터 항목으로서 토너의 잔량을 저장한다. 컬러 프린터용 잉크 카트리지는 3개(시안(Cyan), 마젠타(Magenta) 및 엘로우(Yellow)의 각각의 하나)를 필요로 하는 감소 전용 데이터 항목 또는 바로 5 또는 6개의 감소 전용 데이터 항목으로서 각각의 컬러 잉크량을 저장한다. 이러한 종류의 데이터 항목을 위한 요구 사항은, 제조/프로그래밍 단계에서 초기치를 가지고 프로그램되면, 값은 단지 감소되는 것이다. 최소치에 도달하면 더 이상 감소될 수 없다. 감소 전용 데이터 항목은 소비재 수명 인증에 의해 서만 필요하게 된다.
제조(Manufacture)
이상적으로 인증 칩(53)은 저가의 소비재를 위한 인증 기구로서 포함되도록 저가의 제조비용이 들어야 한다. 인증 칩(53)은, 플래시(Flash) 같은 표준 제조 프로세스를 사용하여야 한다. 이것은 필요하다:
- 큰 범위의 제조 위치 옵션을 허락한다
- 정의가 명확하고 모범적인 기술을 사용한다
- 비용을 절감한다
사용된 인증 구조에 관계없이, 칩 인증 부분의 회로는 물리적인 공격에 저항력이 있어야 한다. 공격의 형태가 변화되지만, 물리적인 공격은 주로 4가지 방식으로 들어온다.
- 전체적으로 인증 칩 바이패싱
- 동작시 칩의 물리적인 시험(파괴 및 비파괴)
- 칩의 물리적인 분해
- 칩의 물리적인 변경
원칙적으로, 칩은 미국으로부터 수출할 수 있지만, 보안 암호화 장치로서 인증 칩(53)을 사용하는 것은 불가능하다. 다른 국가에서 다수의 기업이 인증 칩을 제조할 수 있기 때문에, 이것은 우선 사항 요구 사항이 낮다. 여하튼, 미국으로부터의 수출 금지는 변화될 수 있다.
인증(Authentication)
소비재를 인증하는 문제에 대한 현존하는 솔루션은, 전형적으로 포장재료(packing) 상의 물리적인 특허에 의존한다. 그러나, 이것은 지적재산 보호가 허약한 국가에서 가정 리필 시행 또는 클론 제조를 중지시키지 못한다. 따라서, 보다 더 높은 레벨의 보호가 요구된다. 보안 전문가에 의해 정밀 조사되지 않은 자가 양조음료 보안방법에 의존하는, 비밀인 인증방법을 충분히 제공하지 않는다. 넷스케이프의 최초 독점 시스템과 셀룰러 전화(cellular phone)에 의해 사용된 GSM 기만방지 네트워크(Fraud Prevention Network)와 같은 보안 시스템은, 비밀 디자인이 보안의 약점에 의한 것인 예이다. 양쪽 보안 시스템은, 회사가 공개 디자인 프로세스를 뒤따른 경우 검출된 종래의 수단에 의해 분쇄된다. 솔루션은 전문가의 정밀 조사를 견디는 수단에 의한 인증을 제공하는 것이다. 다수의 프로토콜이 소비재 인증을 위해 사용될 수 있다. 이와 같이 새로운 방식으로 공지된 동작을 이용하여, 공개적으로 기술된 보안 방법만을 사용한다. 모든 프로토콜에 대해서, 구조의 보안은 비밀 알고리즘이 아니라 비밀키에 의존한다. 모든 프로토콜은, 응답이 도전 및 비밀에 의존하는 시변 도전(time-variant challenge)(즉, 도전은 매시간 다르다)에 의존한다. 모든 관찰자가 후속 식별에 대한 유용한 정보를 모을 수 없도록 도전은 난수를 포함한다. 유일한 인증 존재 및 소비재 수명 인증 각각을 위해 2개의 프로토콜이 제시되었다. 프로토콜은 인증 프로세스에 필요한 인증 칩의 숫자에서 다르지만, 모든 경우 시스템은 소비재를 인증한다. 어떤 프로토콜은 1개 또는 2개의 칩으로 동작하지만, 다른 프로토콜은 2개의 칩으로만 동작한다. 1개 또는 2개의 인증 칩이 사용된 시스템은 여전히 인증 결정을 내릴 책임이 있다.
단일 칩 인증(Single Chip Authentication)
인증 프로토콜을 위해 하나의 인증 칩(53)만이 사용될 때, 단일 칩(칩 A(ChipA)라 한다)은 시스템(시스템이라 한다)이 신뢰할 수 있는 것이라는 것을 입증할 책임이 있다. 프로토콜의 시작시, 시스템은 칩 A의 신뢰성을 확신하지 못한다. 시스템은 칩 A를 가지고 도전-응답 프로토콜을 떠맡고, 이렇게 칩 A의 신뢰성을 결정한다. 모든 프로토콜에서 소비재의 신뢰성은 칩의 신뢰성에 직접 기초한다, 즉 칩 A가 신뢰할 수 있는 것이라고 간주되면, 소비재는 신뢰할 수 있는 것이라고 간주된다. 도 167에는 데이터 흐름이 도시된다. 단일 칩 인증 프로토콜에 있어서, 시스템은 소프트웨어, 하드웨어 또는 양쪽의 조합이 될 수 있다. 공격자, 롬 검사 또는 회로 검사에 의해 쉽게 리버스 엔지니어링 될 수 있으면, 시스템은 불안정하다고 간주되는 것에 주목하는 것이 중요하다. 시스템은 그 자체가 안전하게 되도록 특별히 디자인되지 않는다.
더블 칩 인증(Double Chip Authentication)
다른 프로토콜에 있어서, 도 168에 도시된 바와 같이 2개의 인증 칩이 필요하게 된다. 단일 칩(칩 A(ChipA)라 한다)은 시스템(시스템이라 한다)이 신뢰할 수 있는 것이라는 것을 입증할 책임이 있다. 인증 프로세스의 일부로서, 시스템은 신뢰된 인증 칩(칩 T(ChipT)이라 한다)을 사용한다. 더블 칩 인증 프로토콜에 있어서, 시스템은 소프트웨어, 하드웨어 또는 양쪽의 조합이 될 수 있다. 그러나, 칩 T는 물리적인 인증 칩이어야 한다. 몇가지 프로토콜에 있어서 칩 T와 칩 A는 동일한 내부 구조를 가지고, 다른 프로토콜에 있어서 칩 T와 칩 A는 다른 내부 구조를 가진다.
유일한 인증 존재(불안정한 상태 데이터)
이 레벨의 소비재 인증을 위해 인증 칩(53)의 존재를 법률상 유효하게 하는 것에 대해서만 관련되어 있다. 인증 칩이 상태 정보를 포함할 수 있지만, 그 상태 정보의 전송은 안전한 것으로 간주되지 않는다. 2개의 프로토콜이 제시되었다. 프로토콜 1(Protocol 1)은 2개의 인증 칩을 필요로 하고, 프로토콜 2는 1개 또는 2개의 인증 칩으로 실행될 수 있다.
프로토콜 1(Protocol 1)
프로토콜 1은 더블 칩 프로토콜이다(2개의 인증 칩을 필요로 한다). 각각의 인증 칩은 다음의 값을 포함한다:
K FK[X]용 키. 비밀로 되어야 한다.
R 현재 난수. 비밀로 되지 않지만, 각 칩의 경우 다른 초기값으로 시드되어야 한다. 각 랜덤 함수의 청원으로 변화한다.
각각의 인증 칩은 다음의 논리 함수를 포함한다:
Random[] R을 반환, 그리고 차례대로 R을 다음으로 진행시킨다.
F[X] FK[X]를 반환, 일방향 함수 F를 X에 적용한 결과는 비밀키 X에 기초한다.
프로토콜은 다음과 같다:
시스템은 ChipT로부터 Random[]을 요청한다;
ChipT은 R을 시스템에게 반환한다;
시스템은 ChipT와 ChipA 양쪽으로부터 F[R]을 요청한다;
ChipT는 FKT[R]을 시스템에게 반환한다;
ChipA는 FKA[R]을 시스템에게 반환한다;
시스템은 FKT[R]과 FKA[R]을 비교한다. 그들이 동등하면, ChipA는 유효하다고 간주된다. 그렇지 않으면, ChipA는 유효하지 않다고 간주된다.
도 169에 데이터 흐름이 도시된다. 시스템은 FK[R] 메시지를 포함해야 하는 것은 아니다. ChipA와 ChipT으로부터의 응답이 동일하다는 것을 단지 검사한다. 그러므로, 시스템은 키를 필요로 하지 않는다. 프로토콜 1의 보안은 2개의 위치에 있다:
F[X]의 보안 인증 칩만이 비밀키를 포함하므로, 신뢰된 인증 칩(53)(칩 T)에 의해 생성된 F[X]와 정합하는 X로부터 F[X]를 생성할 수 있는 모든 것이 신뢰할 수 있다.
모든 인증 칩에 의해 생성된 R의 영역(domain)은 크고, 비결정적이다. 모든 인증 칩에 의해 생성된 R의 영역이 작으면, 클론 제작자는 키를 크랙할 필요가 없다. 그 대신, 클론 제작자는 시스템에 의해 전송된 코드에 대해 진짜 칩으로부터의 모든 응답 기록을 가지고 있는 칩에 롬을 포함시킨다. 시스템은 잠재적으로 동일한 난수 시퀀스를 생성할 수 있기 때문에, 랜덤 함수가 전적으로 인증 칩에 존재해야 되는 것은 아니다. 그러나, 이것은 시스템의 디자인을 간소화하고, 시스템 실행시 가능한 에러를 줄이면서, 인증 칩을 사용하는 모든 실행에 대해 난수 생성기의 보안이 동일하게 되는 것을 보증한다.
프로토콜 1은 몇가지 이점을 가진다:
K는 인증 프로세스 동안 드러나지 않는다.
X가 주어진 후, 클론 칩은 K 없이 FK[X]을 생성하거나 또는 실제 인증 칩을 액세스 할 수 없다.
시스템은, 암호화 또는 복호화화가 시스템 그 자체에 필요없게 되는 것과 같이, 잉크젯 프린터와 같은 특히 저가의 시스템을 디자인 하는 것은 쉽다.
대칭 암호 해석법, 난수 시퀀스 및 메시지 인증 코드를 포함하는 넓은 범위의 키된(keyed) 일방향 함수가 존재한다,
일방향 함수는 비대칭 알고리즘보다 더 적은 게이트를 필요로 하고, 검증하는 것이 더 용이하다.
인증은 더 적은 게이트를 필요로 하고 비대칭 알고리즘보다 검증하기에 쉽다.
키된 일방향 함수를 위한 보안키의 사이즈는 비대칭(공개키) 알고리즘만큼 크게 되는 것은 아니다.
F[X]가 대칭 암호 해석 함수라면, 최소 128 비트가 적합한 보안을 제공할 수 있다.
그러나, 이 프로토콜에 문제가 있다:
이것은 선택된 텍스트 공격을 받기 쉽다. 공격자는 칩을 자신의 시스템에 밀어넣고, 선택된 Rs를 생성하며, 출력을 관찰할 수 있다. 다중 인증 칩이 병렬로 시험될 수 있기 때문에, 키를 발견하기 위해, 공격자는 고유의 F[M]을 생성하는 R도 탐색할 수 있다.
선택된 일방향 함수에 따라, 키 생성이 복잡하게 될 수 있다. 정확한 키를 선택하는 방법은 사용되는 알고리즘에 의존한다. 어떤 키는 주어진 알고리즘에 약하다.
키된 일방향 함수 그 자체의 선택은 흔하지 않다. 몇개는 특허 보호에 따른 라이센싱을 필요로 한다.
중간에 있는 사람이 ChipA를 통과하기 이전에 평문메시지 M상에서 행동을 취한다. ChipA가 보여질 때까지 중간에 있는 사람이 M을 보지 못하는 것이라면 바람직하게 된다. 중간에 있는 사람이 M을 전혀 보지 못하는 것이라면 더욱 바람직하게 된다.
F가 대칭 암호화라면, 키 사이즈 때문에 적절한 보안이 필요하고, 칩은 강력한 암호화장치로서 사용되기 때문에, 미국으로부터 수출될 수 없다.
프로토콜 1이 비대칭 암호화 알고리즘으로서 F을 가지고 실행되면, 대칭 케이스에 비해 유리한 점이 없다. 키가 더 길어지게 되고, 암호화 알고리즘이 실리콘에서 더 비싸게 된다. 키를 안전하게 유지하기 위해, 프로토콜 1은 2개의 인증 칩을 가지고 실행되어야 한다. 이것은 각각의 시스템이 인증 칩을 필요로 하고, 각각의 소비재가 인증 칩을 필요로 하는 것을 의미한다.
프로토콜 2(Protocol 2)
몇가지 경우, 시스템은 대량의 처리 파워를 포함한다. 선택적으로, 대량으로 제조되는 시스템의 경우, 시스템으로 ChipT의 통합이 바람직하다. 비대칭 암호화 알고리즘의 사용은 시스템의 ChipT 부분을 불안정하게 한다. 그러므로, 프로토콜 2은 비대칭 암호 작성법을 사용한다. 이 프로토콜을 위해, 각각의 칩은 다음의 값을 포함한다:
K EK[X] 및 DK[X]용 키. ChipA에서 비밀로 된다. ChipT에서 비밀로 되지 않는다.
R 현재 난수. 비밀로 되지 않지만, 각 칩의 경우 다른 초기값을 가지고 시드된다. 각 랜덤 함수의 청원으로 변화한다.
다음의 함수가 정의된다:
E[X] ChipT에서만. E가 비대칭 암호 함수 E인 경우 EK[X]를 반환
D[X] ChipA에서만. D가 비대칭 복호화 함수 D인 경우 DK[X]를 반환
Random[] ChipT에서만. R이 시드 S에 기초한 난수인 경우, R|EK[R]을 반환한다. 난수 시퀀스에서 다음으로 R을 진행시킨다.
공개키 KT가 ChipT에 있고, 비밀키 KA는 ChipA에 있다. KT를 가지는 ChipT는 소프트웨어 또는 하드웨어(R에 대한 시드가 각각의 칩 또는 시스템에서 다르다는 조건부로)에서 ChipT가 실행될 수 있다는 이점을 가진다. 그러므로, 프로토콜 2는 단일 칩 프로토콜 또는 더블 칩 프로토콜로서 실행될 수 있다. 인증용 프로토콜은 다음과 같다:
시스템은 ChipT의 랜덤 함수를 호출한다;
ChipT는 R|EKT[R]를 시스템으로 반환한다;
시스템은 EKT[R]에서 통과된 ChipA의 D 함수를 호출한다;
ChipA는 DKA[EKT[R]]로 얻어진 R을 반환한다;
시스템은 ChipA으로부터 R과 ChipT에 의해 생성된 최초의 R을 비교한다. 동일하면, ChipA는 유효하다고 간주된다. 그렇지 않다면, ChipA은 유효하지 않다고 간주된다.
도 170에 데이터 흐름이 도시된다. 프로토콜 2는 다음의 이점을 가진다:
인증 프로세스 동안 KA(비밀키)가 드러나지 않는다.
EKT[X]가 주어진 후, 클론 칩은 KA없이 X를 생서하거나 또는 실제 ChipA를 액세스 할 수 없다.
KT≠KA이므로, ChipT는 소프트웨어 또는 불안정한 하드웨어 또는 시스템의 일부에서 완전히 실행될 수 있다. ChipA(소비재에 있는)만이 보안 인증 칩이 되는데 필요하게 된다.
ChipT가 물리적인 칩이면, 시스템을 디자인하는 것은 쉽다.
특허 무료이고 라이센스 무료인 솔루션을 포함한, 실행을 위한 것 중에서 선택된 다수의 잘 기록되고, 암호 해석된 비대칭 알고리즘이 있다.
그러나, 프로토콜 2은 그 자신이 많은 문제를 가지고 있다:
충분한 보안을 위해, 각각의 키는 2048 비트(프로토콜 1의 대칭 암호 작성법을 위한 최소 128 비트와 비교된다)가 될 필요가 있다. 암호화 및 복호화화 알고리즘에 의해 사용되는 것과 연관된 중개 메모리는 대응하여 더 크다.
키 생성은 흔하지 않다. 난수는 정확한 키가 아니다.
ChipT가 코어로서 실행되면, 주어진 시스템 ASIC에 연결하는 것이 어려워진다.
ChipT가 소프트웨어로서 실행되면, 프로그래밍 에러와 엄격하지 않은 테스트에 개방되어 있는 시스템의 실행 뿐만 아니라 컴파일러와 수학 프리미티브(primitive)의 무결성도 시스템의 각각의 실행에 대해 엄격하게 검사된다. 이것은 단지 잘 테스트된 칩을 사용하는 것보다 더 복잡해지고, 고가로 된다.
다수의 대칭 알고리즘이 차동 암호 해석(선택된 텍스트 공격에 의거한다)에 저항하도록 구체적으로 강화되지만, 전용키 KA는 선택된 텍스트 공격을 받기 쉽다.
ChipA와 ChipT가 동일한 인증 칩인 경우, 각각의 칩은 비대칭 암호화 및 복호화화 함수 양쪽을 포함해야 한다. 따라서, 각각의 칩은 포로토콜 1에서 필요한 칩보다 더 커지고, 더 복잡해지며, 더 고가로 된다.
비용을 절약하고, 디자인/시험의 복잡서을 줄이기 위해 인증 칩이 2개의 칩으로 분할되면, 여전히 2개의 칩은 규모의 경제를 줄이면서 제조 될 필요가 있다. 이것은 소비재에 대한 시스템의 상대적인 숫자에 의해 상쇄되지만, 여전히 고려되어야 한다.
프로토콜 2 인증 칩은, 강력한 암호화 장치로 간주되기 때문에, 미국으로부터 수출될 수 없다.
프로토콜 2를 위한 키 선택 프로세스가 정직하다고 하더라도, 실리콘 실행(키 사이즈 및 함수 실행 양쪽)의 고비용 때문에 현재 비현실적이다. 그러므로, 프로토콜 1은 유일한 인증 존재를 위한 선택 프로토콜이다.
실제 인증 칩을 사용하는 클론 소비재
프로토콜 1 및 2는 ChipA가 실제 인증 칩인 것인지 단지 검사한다. 소비재 그 자체가 유효한지 확인하는 것은 검사하지 않는다. 인증을 위한 기본적인 가정은 ChipA가 유효하면, 소비재도 유효한 것이다. 그러므로, 클론 제작자가 실제 인증 칩을 크론 소비재에 삽입하는 것이 가능하다. 2가지 경우를 고려한다:
- 상태 데이터가 인증 칩에 기록되지 않은 경우, 칩은 완전히 재사용 가능하다. 그러므로, 클론 제작자는 유효한 소비재를 클론 소비재로 순환 사용한다. 이것은 인증 칩을 소비재의 물리적인 패키징에 병합함으로써 더욱 어려워지지만, 오퍼레이터가 리필하는 것을 중지시킨다.
- 상태 데이터가 인증 칩에 기록되는 경우, 칩은 새롭게 되거나 또는 부분적으로 다 사용되거나 또는 완전히 다 사용된다. 그러나, 이것은 클론 제작자가 피기백과 같이 실제 인증 칩을 가지는 칩을 제작하는, 피기백(Piggyback) 공격을 사용하는 중지시키지 못한다. 그러므로, 공격자의 칩(ChipE)은 중간에 있는 사람이다. 시동시(power up), ChipE는 실제 인증 칩(53)에서 모든 메모리 상태 값을 그 자신의 메모리로 판독한다. 그 후, ChipE는 시스템으로부터의 요청을 시험하고, 요청에 따라 다르게 행동한다. 인증 요청은 실제 인증 칩(53)으로 직접 넘겨질 수 있고, 판독/기록 요청은 실제 인증 칩 작용을 닮은 메모리에 의해 모의 실험될 수 있다. 이와 같은 방식으로, 인증 칩(53)은 항상 시동시 새롭게 보인다. 데이터 액세스는 인증되지 않기 때문에, ChipE는 이것을 행할 수 있다.
그 데이터 액세스가 성공한 것으로 생각하도록 시스템을 속이기 위해, ChipE는 여전히 실제 인증 칩을 필요로 하고, 두번째로, 실제 인증 칩에 부가해서 클론 칩이 필요하게 된다. 따라서, 클론 제작자가 실제 인증 칩을 소비재에 삽입하기 위한 비용이 효과적이지 않은 경우 상황에서 프로토콜 1 및 2는 유용해진다. 소비재가 순환 사용되거나 또는 용이하게 리필될 수 없으면, 프로토콜 1 또는 2를 사용하는 것으로 충분히 보호된다. 클론 동작이 성공적으로 되기 위해, 각각의 클론 소비재는 유효한 인증 칩을 포함해야 한다. 칩은 모두 도난되거나 또는 구형 소비재로부터 가져와야 한다. 다시 청구된 이들 칩의 수량(게다가 이들을 다시 청구하는 노력)은 비지니스에 근거를 두기에 충분하지 않으므로, 안전한 데이터 이송(프로토콜 3 및 4확인)을 위한 추가된 보호는 유용하지 않다.
키의 수명(Longevity of Key)
이들 2개 프로토콜의 일반적인 문제는 인증 키가 일단 선택되면, 쉽게 변경될 수 없다는 것이다. 몇가지 경우, 키 위태로움은 문제가 아니고, 다른 경우 키 위태로움은 재난이다. 예를 들면, 차량/차량-키 시스템/소비재 시나리오에 있어서, 소비자는 1셋트의 차량/차량-키만을 갖는다. 각각의 차량은 다른 인증 키를 갖는다. 따라서, 차량-키의 손실은 단지 개개의 차량을 위태롭게 한다. 소유자가 이 문 제를 고려하면, 차량의 전자 장비의 내부에서 시스템 칩을 교체함으로써 차량 상에서 새로운 록(lock)을 취해야 한다. 소유자의 키는 새로운 차량 시스템의 인증 칩으로 동작하도록 다시 프로그램되고/교체되어야 한다. 대조적으로,
높은 볼륨 소비재 시장(예를 들면 프린터에서의 잉크 카트리지)을 위한 키의 위태로움은 클론 잉크 카트리지 제작자가 그들 자신의 인증 칩을 제작하게 한다. 현행 시스템의 유일한 솔루션은, 고가이고, 기호 논리학적으로 어려운 실행인 시스템 인증 칩을 개싱하는 것이다. 여하튼, 소비자의 시스템은 이미 동작한다. 기존 설비를 난처하게 하는 동기가 없다.
소비재 수명 인증
이러한 레벨의 소비재 인증은, 인증 칩의 존재를 유효하게 하고, 게다가 인증 칩이 소비재만큼 단지 지속하는 것을 보증하는 것에 관련되어 있다. 인증 칩이 제시한 것을 유효하게 하는 것에 부가하여, 인증 칩의 메모리 공간의 기록 및 판독도 인증되어야 한다. 이 섹션에서 인증 칩의 데이터 스토리지 무결성이 안전한 것으로 가정한다. 메모리의 특정 부분이 판독 전용이고, 다른 부분이 판독/기록이며, 다른 부분인 감소 전용(더 많은 정보를 위해 데이터 스토리지 무결성으로 제목이 붙여진 다음 장을 확인)이다. 2개의 프로토콜이 제시되었다. 프로토콜 3은 2개의 인증 칩을 필요로 하고, 프로토콜 4는 1개 또는 2개의 인증 칩을 사용하여 실행될 수 있다.
프로토콜 3(Protocol 3)
이 프로토콜은 더블 칩 프로토콜이다(2개의 인증 칩을 필요로 한다). 이 프 로토콜을 위해, 각각의 인증 칩은 다음 값을 포함한다:
K1 FK1[X]을 위한 키. 비밀로 되어야 한다.
KK FK2[X]를 위한 키. 비밀로 되어야 한다.
R 현재 난수. 비밀로 되어야 하지 않지만, 각 칩의 경우 다른 초기값으로 시드되어야 한다. 테스트 함수에 의해 정의된 바와 같이 각각의 성공적인 인증으로 변화한다.
M 인증 칩(53)의 메모리 벡터. 이 공간의 부분은 각각의 칩에서 다르게 된다(난수로 되지 않는다).
각각의 인증 칩은 다음 논리 함수를 포함한다:
F[X] 내부 함수 전용. FK[X], K1 또는 K2에 의거해서 일방향 함수 F를 X에 적용한 결과, FK[X]를 반환한다.
Random[] R|FK1[R]을 반환한다.
Test[X,Y] 1을 반환하고, FK2[R|X] = Y라면 R을 진행시킨다. 그렇지 않으면 0을 반환한다. 0을 반환하기 위해 걸린 시간은 모든 틀린 입력에 대해서 동일하게 된다.
Read[X,Y] FK1[X] = Y라면 M|FK2[X|M]을 반환한다. 그렇지 않으면 0을 반환한다. 0을 반환하기 위해 걸린 시간은 모든 틀린 입력에 대해서 동일하게 된다.
Write[X] 합법적으로 기록될 수 있는 M 부분에 X를 기록한다.
ChipA를 인증하고, ChipA의 메모리 M을 판독한다:
시스템은 ChipT의 랜덤 함수를 호출한다;
ChipT는 R|FK[R]을 생성하고, 이들을 시스템으로 반환한다;
시스템은 R, FK[R]을 통과하는, ChipA의 판독 함수를 호출한다;
ChipA는 M 및 FK[R|M]을 반환한다;
시스템은 M 및 FK[R|M]을 통과하는, ChipT의 테스트 함수를 호출한다;
시스템은 ChipT로부터 응답을 검사한다. 응답이 1이라면, ChipA는 신뢰할 수 있다고 간주된다. 0이면, ChipA는 유효하지 않다고 간주된다.
ChipA의 메모리 M에 대한 Mnew의 기록을 인증한다:
시스템은 Mnew를 통과하는, ChipA의 기록 함수를 호출한다;
판독을 위한 인증 프로세스가 수행된다;
ChipA를 신뢰할 수 있고, Mnew = M이라면, 기록이 성공되었다. 그렇지 않으면 실패되었다.
도 171에 판독 인증용 데이터 흐름이 도시되었다. 프로토콜 3에 대해서 첫번째로 언급되는 것은 FK[X]가 직접 호출될 수 없다는 것이다. 그 대신에, FK[X]는 랜덤, 시험 및 판독에 의해 간접적으로 호출된다:
Random[]은 FK1[X]를 호출한다. X는 호출자에 의해 선택되지 않았다. 그것은 랜덤 함수에 의해 호출되었다. 공격자는 X, FK1[X] 페어를 얻기 위해 랜덤, 판독 및 테스트에 대한 다중 호출을 이용하여 무차별 탐색을 수행한다.
Test[X,Y]은 FK2[R|X]를 호출한다. 결과를 직접 반환하지 않지만, 결과를 Y와 비교한 후 1 또는 0을 반환한다. 주어진 X에 대한 FK2[R|X]의 값을 다르게 하는 시험을 복수회 호출함으로써 K2를 추정하는 어떠한 시도도 R이 공격자에 의해 선택되지 않더라도 무차별 공격에 대해서 감소된다.
Read[X,Y]는 FK1[X]를 호출한다. X 및 FK1[X]는 호출자에 의해 공급되므로, 호출자는 이미 X, FK1[X] 페어를 이미 알고 있다. Y ≠ FK1[X]이면, 호출은 0을 반환하기 때문에, 호출자는 K1 상에서 무차별 공격을 위해 판독 함수를 사용할 수 있다.
Read[X,Y]은 FK2[X|M]을 호출하고, X는 호출자에 의해 공급되지만, X는 랜덤 함수(X 및 Y가 K1을 통해 유효하게 되기 때문에)에 의해 이미 주어지 값이 될 수 있다. 이렇게 선택된 텍스트 공격은 랜덤(효과적인 무차별 공격)으로부터 우선 페어를 수집한다. 게다가, M의 몇개는 일정하고(판독 전용), M의 감소 전용은 소비재당 1회만 사용될 수 있기 때문에, M의 일부는 선택된 텍스트 공격에 사용될 수 있다. M의 다음 소비재 판독 전용부분은 다르게 된다.
간접적으로 호출된 FK[X]는 인증 칩 상에서 선택된 텍스트 공격을 방지한다. 공격자는 소망의 R이 나타날 때까지 랜덤, 판독 및 시험을 다수회 호출함으로써, 선택된 R, FK1[R] 페어만을 얻을 수 있기 때문에, K2상에서 제한된 선택된 텍스트 공격을 수행하기 위해, K1상의 무차별 공격이 필요해진다. 텍스트는 완전히 선택될 수 없기 때문에 K2상에서의 선택된 텍스트 공격에 대한 어떤 시도도 한정된다: M의 일부는 판독 전용이고, 각각의 인증 칩을 위해 아직도 다르다. 두번째는 2개의 키가 사용되는 것은 언급하는 것이다. F[R]과 F[R|M] 사이에 상관관계가 없는 것을 보증하기 위해 K1과 K2가 사용된다. 그러므로, K1은 차별 공격으로부터 K2
를 보호하도록 돕는데 사용된다. M은 단지 256 비트이므로, 단일의 더 긴 키를 사용하는데 충분하지 않고, 소비재의 수명동안 M 부분만 변화한다. 그렇지 않으면, 지금까지 발견되지 않은 몇가지 기술을 통해 공격자가 R에서 특별한 비트 조합에 대해 M에서 한정된 변화의 효과를 결정한 후, FK1[X]에 의거해서 FK2[X|M]을 계산하는 것이 잠재적으로 가능하다. 추가된 예방 조치로서, R, FK[X] 페어를 생성하도록 ChipA에서 랜덤 및 테스트 함수는 사용 불가능하게 되고, 공격자는 각각 ChipA(시스템은 각 ChipT를 위해 얻어지게 된다)보다 더 비싼 ChipT의 경우를 사용한다. 마찬가지로, 공격자가 고속으로 이들 함수를 호출할 수 없도록 하기 위해 랜덤, 판독 테스트에 대한 호출 사이에 최소 지연이 존재하게 된다. 이렇게, 각각의 칩에는 일정 한 시간의 기간내에 일정 숫자의 X, FK[X] 페어가 주어진다. 프로토콜 3의 유일한 특정 타이밍 요구 사항은 0(틀린 입력) 값의 반환은 입력에 에러가 있는 것에 관계없이 동일한 양의 시간내에 생성된다. 그러므로, 공격자는 입력 값에 대해서 무엇이 틀린 것인 지에 대해 아무것도 배울 수 없다. 이것은 RD 및 TST 함수 양쪽에서 진실이다.
프로토콜 3에 대해 언급하는 또 다른 것은, ChipA에서의 데이터 판독도 ChipA의 인증을 필요로 하는 것이다. 시스템은 FK2[R|M]이 정확하게 반환되면, ChipA가 청구하는 것인 메모리(M)의 컨텐츠가 있다는 것을 확신할 수 있다. 클론 칩은 M이 어떤 값(예를 들면 소비재가 충만한 것처럼 보이게 한다)이지만, 시스템에 의해 통과된 어떤 R을 위해 FK2[R|M]을 반환할 수 없는 것처럼 보이게 한다. 이렇게 효과적인 서명 FK2[R|M]은 신뢰할 수 있는 ChipA가 M을 전송할 뿐만 아니라, M이 ChipA와 시스템 사이에서 변경되지도 않는 시스템을 가정한다. 최종적으로, 정의된 바와 같이 기록 함수는 기록은 인증하지 않는다. 기록을 인증하기 위해, 시스템은 각각의 기록 후 판독을 수행한다. 프로토콜 3이 가지는 몇가지 이점이 있다:
K1 및 K2는 인증 프로세스 동안 드러나지 않는다.
X가 주어진 후, 클론 칩은 키 없이 FK2[X|M]을 생성하거나 또는 실제 인증 칩을 액세스 할 수 없다
시스템 그 자체에 암호화 또는 복호화화가 필요로 하지 않는 것과 같이, 시스템은 특히 잉크젯 프린터와 같은 저가 시스템에서 디자인하는 것이 쉽다.
대칭 암호 작성법, 난수 시퀀스 및 메시지 인증코드를 포함하는 넓은 범위의 키 기반 일방향 함수가 존재한다.
키된 일방향 함수는 비대칭 알고리즘보다 더 적은 게이트를 필요로 하고, 검증하는 것이 더 용이하게 된다.
키된 일방향 함수를 위한 보안 키의 사이즈는 비대칭(공개키) 알고리즘만큼 길게 되지 않는다.
따라서, 프로토콜 3을 가지고 ChipA를 인증하기 위한 유일한 방법은 ChipA의 메모리 컨텐츠를 판독하는 것이다. 이 프로토콜의 보안은 모든 시스템의 셋트에 걸쳐 기본적인 FK[X] 구조와 R의 도메인에 의존한다. FK[X]가 어떤 키된 일방향 함수이지만, 비대칭 암호화처럼 실행하는데 이점이 없다. 키는 더 길어지게 되고, 암호화 알고리즘은 실리콘에서 더 고가로 된다. 이것은 비대칭 알고리즘을 가지고 사용하기 위한 두번째 프로토콜-프로토콜 4를 안내한다. 포로토콜 3은 키를 안전하게 유지하기 위해 2개의 인증 칩으로 실행된다. 이것은 각각의 시시템이 인증 칩을 필요로 하고, 각각의 소비재가 인증 칩을 필요로 하는 것을 의미한다.
프로토콜 4(Protocol 4)
몇가지 경우, 시스템은 대량의 처리 파워를 파워를 포함한다. 선택적으로, 대량으로 제조되는 시스템의 경우, 시스템으로 ChipT의 통합이 바람직하다. 비대칭 암호화 알고리즘의 사용은 시스템의 ChipT 부분을 불안정하게 한다. 그러므로, 프로토콜 4는 비대칭 암호 작성법을 사용한다. 이 프로토콜을 위해, 각각의 칩은 다음의 값을 포함한다:
K EK[X] 및 DK[X]용 키. ChipA에서 비밀로 된다. ChipT에서 비밀로 되지 않는다.
R 현재 난수. 비밀로 되어야 하지 않지만, 각 칩의 경우 다른 초기값으 로 시드되어야 한다. 테스트 함수에 의해 정의된 바와 같이 각각의 성공적인 인증으로 변화한다.
M 인증 칩(53)의 메모리 벡터. 이 공간의 부분은 각각의 칩에서 다르게 된다(난수로 되지 않는다).
누구든지 공개키를 사용하여 암호화 할 수 있으므로, 판독 함수에서 어떤 것을 검증하는 포인트가 없다. 따라서, 다음의 함수가 정의된다:
E[X] 내부 함수 전용. E가 비대칭 암호 함수 E인 경우 EK[X]를 반환.
D[X] 내부 함수 전용. D가 비대칭 복호화 함수 D인 경우 DK[X]를 반환.
Random[] ChipT에서만. EK[R]을 반환한다.
Test[X,Y] 1을 반환하고, DK[R|X] = Y라면 R을 진행시킨다. 그렇지 않으면 0을 반환한다. 0을 반환하기 위해 걸린 시간은 모든 틀린 입력에 대해서 동일하게 된다.
Read[X] R = DK[X](테스트 입력이 아니다)라면 M|EK[R|M]을 반환한다.
Write[X] 합법적으로 기록될 수 있는 M 부분에 X를 기록한다.
공개키 KT가 ChipT에 있고, 비밀키 KA는 ChipA에 있다. KT를 가지는 ChipT는 소프트웨어 또는 하드웨어(R은 각각의 시스템에 대해 다른 난수로 시드되는 조건부)에서 ChipT가 실행될 수 있다는 이점을 가진다. ChipA를 인증하고, ChipA의 메모리 M을 판독한다:
시스템은 ChipT의 랜덤 함수를 호출한다;
ChipT는 ad를 생성하여 EKT[R]을 시스템으로 반환한다;
시스템은 EKT[R]에서 통과된 ChipA의 판독 함수를 호출한다;
ChipA는 우선 DKA[EKT[R]]에 의해 R을 얻고, M|EKA[R|M]을 반환한다;
시스템은 M 및 EKA[R|M]에서 통과된 ChipT의 테스트 함수를 호출한다;
ChipT는 DKT[EKA[R|M]]를 계산하여, R|M과 비교한다.
시스템은 ChipT로부터 응답을 검사한다. 응답이 1이라면, ChipA는 신뢰할 수 있다고 간주된다. 0이면, ChipA는 유효하지 않다고 간주된다.
ChipA의 메모리 M에 대한 Mnew의 기록을 인증한다:
시스템은 Mnew를 통과하는, ChipA의 기록 함수를 호출한다;
판독을 위한 인증 프로세스가 수행된다;
ChipA를 신뢰할 수 있고, Mnew = M이라면, 기록이 성공되었다. 그렇지 않으면 실패되었다.
도 172에 판독 인증용 데이터 흐름이 도시되었다. R은 인증 함수를 통과하지 못했기 때문에(암호화된 값으로서 통과되었다), 유효한 ChipA만이 R의 값을 안다. R은, 비밀키 KA를 이용해서만 행할 수 있는 E[R]을 복호화함으로써 얻어진다. 일단 얻어지면, R은 M에 첨가된 후 그 결과가 다시 암호화 된다. 그때, ChipT는 EKA[R|M]] = R|M의 디코드된 형태를 검증할 수 있고, 따라서 ChipA는 유효하다. KT≠KA이므로, EKT[R]≠EKA[R]이다. 프로토콜 4는 다음의 이점을 가진다:
KA(비밀키)는 인증 프로세스 동안 드러나지 않는다.
EKT[X]가 주어진 후, 클론 칩은 KA없이 X를 생성하거나 또는 실제 ChipA를 액세스 할 수 없다.
KT≠KA이므로, ChipT는 소프트웨어 또는 불안정한 하드웨어 또는 시스템의 일부에서 완전히 실행될 수 있다.
ChipT와 ChipA는 다른 키를 포함하므로, ChipT의 강한 테스트는 KA에 대해서 전혀 드러내지 않는다.
ChipT가 물리적인 칩이면, 시스템을 디자인하는 것은 쉽다.
특허 무료이고 라이센스 무료인 솔루션을 포함한, 실행을 위한 것 중에서 선택된 다수의 잘 기록되고, 암호 해석된 비대칭 알고리즘이 있다.
ChipA 요청이 ChipT로 향해지도록 시스템이 재배선되더라도, KT≠KA이므로, ChipT는 ChipA에 대해 전혀 대답하지 못한다. 공격은 인증 프로토콜을 바이패스 하기 위해 시스템 롬 그 자체로 향해져 있다.
그러나, 프로토콜 4는 다수의 불편한 점이 있다:
모든 인증 칩은 비대칭 암호화 및 복호화화 함수 양쪽을 포함하는 것을 필요로 한다. 따라서, 각각의 칩은 프로토콜 3에 필요한 칩보다 더 커지고, 더 복잡해 지며, 더 비싸게 된다.
충분한 보안을 위해, 각각의 키는 2048 비트(프로토콜 1에서 대칭 암호 작성법을 위한 최소 128 비트와 비교된다)가 될 필요가 있다. 암호화 및 복호화화 알고리즘에 의해 사용되는 것과 연관된 중개 메모리는 대응하여 더 크다.
키 생성은 흔하지 않다. 난수는 정확한 키가 아니다.
ChipT가 코어로서 실행되면, 주어진 시스템 ASIC에 연결하는 것이 어려워진다.
ChipT가 소프트웨어로서 실행되면, 프로그래밍 에러와 엄격하지 않은 테스트에 개방되어 있는 시스템의 실행 뿐만 아니라 컴파일러와 수학 프리미티브의 무결성도 시스템의 각각의 실행에 대해 엄격하게 검사된다. 이것은 단지 잘 테스트된 칩을 사용하는 것보다 더 복잡해지고, 고가로 된다.
다수의 대칭 알고리즘이 차동 암호 해석(선택된 텍스트 공격에 의거한다)에 저항하도록 구체적으로 강화되지만, 전용키 KA는 선택된 텍스트 공격을 받기 쉽다.
프로토콜 4의 인증 칩은 강력한 암호화 장치로 간주되므로, 미국으로부터 수출될 수 없다.
프로토콜 3과 같이,
프로토콜 4의 유일한 특정 타이밍 요구 사항은 0(틀린 입력) 값의 반환은 입력에 에러가 있는 것에 관계없이 동일한 양의 시간내에 생성된다. 그러므로, 공격자는 입력 값에 대해서 무엇이 틀린 것인지에 대해 아무것도 배울 수 없다. 이것은 RD 및 TST 함수 양쪽에서 진실이다.
TST에 대한 호출상의 변동(Variation on call to TST)
2개의 인증 칩이 사용되면, 클론 제작자가 시스템 인증 칩을 TST에 대한 각각의 호출을 위해 1(성공)을 반환하는 것으로 교체하는 것이 이론적으로 가능하다. 시스템은, 잘못된 해시 값을 가지는 N회인 다수회 TST를 호출함으로써 이것을 테스트 할 수 있고, 결과는 0이 될 것이다. TST가 호출된 최종회에는, ChipA로부터 실제 반환된 값이 통과되고, 반환된 값은 신뢰된다. 그때, TST를 얼마나 많은 횟수 호출하는가가 문제로 된다. 호출 숫자는 랜덤하므로, 클론 칩 제작자는 시간에 앞서 숫자를 알 수 없다. 시스템이 클럭을 가지면, 클럭으로부터의 비트는 TST에 대한 호출이 얼마나 많이 실패되었는가를 결정하는데 사용될 수 있다.
그렇지 않으면, ChipA로부터 반환된 값이 사용될 수 있다. 후자의 경우, 공격자가 여전히 시스템을 재배선하여 클론 ChipT가 ChipA로부터 반환된 값을 관찰하는 것을 가능하게 하고, 따라서 해시 값이 정확한 것인지 안다. 물론 최악의 경우는, 시스템이 인증된 소비재를 필요로 하지 않는 클론 시스템으로 완전히 교체될 수 있다. 이것은 시스템을 재배선하고 변경하는 극단적인 경우이다. 이런 이유 때문에, TST에 대한 호출상의 변동은 시스템, 소비재 및 그럴듯한 수정이 어떻게 행해졌는가에 의존하는 옵션이다. 이러한 로직을 시스템(예를 들면, 소형 데스크 탑 프린터의 경우)에 추가하는 것은, 시스템이 더 복잡해지는 것처럼 가치없는 것으로 간주된다. 대조적으로, 이러한 로직을 카메라에 추가하는 것은 가치있는 것으로 간주된다.
실제 인증 칩을 사용하는 클론 소비재
소비재의 일부를 사용하기 이전에 남겨진 소비재의 양을 감소시키는 것이 중요하다. 먼저, 소비재가 사용되면, 클론 소비재는 특별한 공지된 어드레스에 대한 기록 동안 접촉의 손실을 조작한 후 새로운 신규 소비재로 보이게 된다. 이 공격은 각각의 소비재에서 실제 인증 칩을 여전히 필요로 하는 것에 주의하는 것이 중요하다.
키의 수명(Longevity of Key)
이들 2개 프로토콜의 일반적인 문제는 인증 키가 일단 선택되면, 쉽게 변경될 수 없다는 것이다. 몇가지 경우, 키 위태로움은 문제가 아니고, 다른 경우 키 위태로움은 재난이다.
프로토콜 선택(CHOOSING A PTOTOCOL)
프로토콜 2 및 4에 대한 키의 선택이 정직하다고 하더라도, 실리콘 실행(키 사이즈 및 함수 실행 양쪽)의 고비용 때문에 현재 비현실적이다. 그러므로, 프로토콜 1 및 3은 특별 선택한 2개의 프로토콜이다. 그러나, 프로토콜 1 및 3은 동일한 성분을 많이 포함한다:
- 양쪽은 판독 및 기록 액세스를 필요로 한다;
- 양쪽은 키된 일방향 함수의 실행을 필요로 한다; 그리고
- 양쪽은 난수 생성 함수를 필요로 한다.
프로토콜 3은 추가적인 키(K2)를 필요로 하고, 게다가 몇가지 최소 상태 머신이 변화한다:
- 랜덤 동안 호출되는 FK1[X]를 가능하게 하는 상태 머신 변경;
- FK2[X]를 호출하는 테스트 함수
- FK1[X] 및 FK2[X]를 호출하는 판독 함수에 대한 상태 머신 변경
프로토콜 3은 프로토콜 1에 더해서 최소 변경만을 필요로 한다. 이것은 유일한 인증 존재가 필요하게 되는(프로토콜 1) 모든 장소에서 더 안전하게 사용될 수 있다. 프로토콜 1 및 3이 키된 일방향 함수를 사용하는 것으로 주어지면, 일방향 함수의 선택은 여기서 더 상세히 시험된다. 다음의 테이블은 적용할 수 있는 선택의 특성을 약술한다. 특성이 이점으로 보여지도록 말로 표현된다.
3중 DES | 블로우 피쉬 | RC5 | IDEA | 랜덤 시퀀스 | HMAC-MD5 | HMAC-SHA1 | HMAC-RIPEMD 160 | |
특허 무료 | ● | ● | ● | ● | ● | ● | ||
랜덤키 생성 | ● | ● | ● | |||||
미국으로 부터 수출될 수 있음 | ● | ● | ● | ● | ||||
신속 | ● | ● | ● | ● | ||||
이 어플리케이션 안에서 사용하기 위한 바람직한 키 사이즈 (bits) | 168 | 128 | 128 | 128 | 512 | 128 | 160 | 160 |
블록 크기 (bits) | 64 | 64 | 64 | 64 | 256 | 512 | 512 | 512 |
암호 해석 공격-프리 (약한 키와 떨러진다) | ● | ● | ● | ● | ● | |||
입력 사이즈 N으로 주어진 출력 사이즈 | ≥N | ≥N | ≥N | ≥N | 128 | 128 | 160 | 160 |
낮은 스토리지 요구 사항 | ● | ● | ● | ● | ||||
낮은 실리콘 복잡성 | ● | ● | ● | ● | ||||
디자인된 NSA | ● | ● |
상기 표의 조사는, 3 HMAC 구성과 랜덤 시퀀스 사이에서 선택이 효과적인지를 나타낸다. 키 사이즈와 키 생성의 문제는 랜덤 시퀀스를 제거한다. 이미 MD5상에서다수의 공격이 실행되었고, 해시 결과가 단지 128 비트인 것으로 주어진 후, HMAC -MD5도 제거된다. 그러므로, 선택은 HMAC-SHA1과 HMAC-RIPEMD160의 사이에 있다. RIPEMD-160이 비교적 새롭고, SHA1으로서 널리 암호 해석되지 않았다. 그러나, SHA-1은 NSA에 의해 디자인되었고, 이것이 몇가지의 부정적인 특성으로 보여진다. 2개 사이에 많이 없다는 것으로 주어진 후, SHA-1은 HMAC 구성을 위해 사용된다.
난수 생성기 선택(Choosing A Random Number Generator)
기술된 각각의 프로토콜(1-4)은 난수 생성기를 필요로 한다. 생성기는 모든 시스템의 수명에 걸쳐 생성된 난수가 예측될 수 없다는 면에서 "좋은(good)"것이 된다. 각각의 시스템에서 난수가 동일하다면, 공격자는 실제 인증 칩으로부터 옳은 응답을 쉽게 기록하고, 클론 칩의 롬 검색에 응답을 위치시킨다. 이러한 공격으로, K1 또는 K2를 얻을 필요가 없다. 그러므로, 각 시스템에서의 난수는 충분히 예측할 수 없을 정도로 다르거나 비결정적이다. 그것으로서, R(랜덤 시드)에 대한 초기값은, 물리적으로 랜덤 현상으로부터 끌어들여진 물리적으로 생성된 난수로 프로그램되고, 그것에는 특별한 비트가 1 또는 0인지에 대한 정보가 없다. R의 시드는 컴퓨터 구동 난수 생성기로 생성되는 NOT이다. 그렇지 않으면, 생성기 알고리즘과 시드는 공격자가 모든 시스템에서 모든 R 값의 셋트를 생성하고, 따라서 알 수 있게 하므로 위태롭게 된다.
각각의 인증 칩에서 다른 R 시드를 가지는 것은, 최초의 R이 모든 칩에 걸쳐 랜덤하고 예측 불가능하게 되는 것을 의미한다. 그러므로, 각각의 칩에서 후속 R 값을 어떻게 생성하는가가 문제가 된다.
기본적인 경우 R은 전혀 변화하지 않는다. 따라서, R과 FK1[R]은 Random[]에 대한 각각의 호출을 위해 동일하게 된다. 그들이 동일하다면, FK1[R]은 계산된 것 보다는 오히려 상수가 될 수 있다. 그때, 공격자는 유효한 참조표를 생성하기 위해 유효한 단일 인증 칩을 사용하여, 그 시스템에서 특별히 프로그램된 클론 칩에서 그 참조표를 사용한다. 상수 R은 안전하지 않다.
R을 변경하는 가장 간단한 개념적인 방법은 1씩 증가시키는 것이다. 우선 첫째로 R은 랜덤하므로, 다른 시스템에 대한 값이 여전히 랜덤하게 된다. 그러나, 초기의 R이 주어지면, 모든 후속 R 값은 직접 결정될 수 있다(R은 R0에서 R0+10000까지 사이의 값이므로, 10,000번을 반복할 필요가 없다). 증가하는 R은 상수 R에 대한 빠른 공격에 대해 면역되어 있다. R이 항상 다르므로, 클론 칩이 교체될 정도로 실제 인증 칩을 많이 낭비하지 않고, 특별한 시스템을 위한 참조표를 구성하는 방법은 없다.
가산기를 사용하는 증가보다는, R을 변경하는 다른 방법은 LFSR(Linear Feedback Shift Register)로서 그것을 실행하는 것이다. 이것은 가산기 보다는 실리콘이 더 적은 이점이 있지만, LFSR 값 도메인이 순차 액세스에 의해 결정되므로, 공격자의 이점이 특별한 시스템을 위한 R의 범위를 직접 결정할 수 있는 것이 아니다. 주어진 초기의 R 값을 생성하도록 결정하기 위해, 공격자는 그들을 가능성을 통해서 반복하고, 하나하나 열거한다. R을 변경하는 이점은 또한 LFSR 솔루션에 명백하게 있다. R이 항상 다르므로, 클론 칩이 교체(그리고 단지 그 시스템을 위해서)될 정도로 실제 인증 칩을 많이 낭비하지 않고, 특별한 시스템을 위한 참조표를 구성하는 방법은 없다. 그러므로, R을 변경하는 더 복잡한 함수를 가지는 이점이 없다. 함수에 관계없이, 공격자가 시뮬레이션으로 수명을 통해 값의 셋트를 반복하는 것은 항상 가능하다. 주요한 보안은 R의 랜덤니스(randomness)에 달려 있다. 단 지 R을 변경하는 LFSR을 사용하는 것(가산기 보다 더 적은 실리콘을 사용하는 것은 별도로 하고)은, 연속되는 숫자 범위(즉, 직접 계산될 수 없는 R, RN을 아는 것; 공격자는 LFSR을 통해 N회 반복한다)에 제한되지 않는 이점을 가진다.
그러므로, 인증 칩내의 난수 생성기는 160 비트를 가지는 LFSR이다. 최대 기간의 LFSR(즉, LFSR은 모든 2160-1 상태를 통해서 순환하고, 0은 유효한 상태가 아니다)을 위한 160 비트의 탭(tap) 선택은, 도 173에 도시된 바와 같이, 비트 159, 4, 2 및 1을 가져온다. LFSR은 드물지만, 피드백을 위해 많지 않은 비트가 사용된다(160 비트 중 단지 4 비트만이 사용된다). 이것은 암호 작성법 적용의 문제이지만, 비순차 숫자 생성은 이러한 적용은 아니다. R에 대한 160 비트 시드값은, 0으로 채워진 LFSR이 0의 무한한 스트림를 생성하므로, 0을 제외한 어떤 난수도 가능하다. 기술된 LFSR은 최대 기간의 LFSR이므로, 모든 160 비트는 R로서 직접 사용될 수 있다. b0의 출력으로부터 순차적으로 숫자를 구성할 필요가 없다.
TST에 대한 각각의 성공적인 호출 후에, 난수(R)는 비트 1, 2, 4 및 159를 XOR하고, 그 결과를 높은 차수의 비트로 이동시킴으로써, 전진한다. 새로운 R과 대응하는 FK1[R]이 랜덤에 대한 다음 호출로서 검색될 수 있다.
논리적인 공격에 대한 저항(Holding out Against Logical Attacks)
프로토콜 3은 인증 칩에 의해 사용된 인증 스킴이다. 그것으로서, 논리적인 수단에 의한 패배에 저항력이 있다. 프로토콜 3에 대한 다양한 유형의 공격 결과가 토론을 통해 언급되었지만, 이 섹션에서는 프로토콜 3을 참조하여 차례로 각각의 공격 유형을 상술한다.
무차별 공격
무차별 공격은 프로토콜 3을 파괴하도록 한다. 그러나 키의 길이는 공격자가 무차별 공격을 수행하기 위한 시간이 너무 길어서 수고할 가치가 없도록 의도한다. 공격자는 인증 칩을 복제하기 위해 K2 를 파괴하면 된다. K1은 단지 다른 형태의 공격으로부터 K2 를 강화하기 위해 존재한다. K2 에 대한 공격은 2159회의 시도후에 50%의키를 찾을 수 있는 확률을 가지고 최대 2160회의 시도를 필요로 한다. 초당 각각 100만번의 시험을 실행하는 1억 프로세서 배열을 가정한다면 2159회의 시도(7.3×1047)는 우주의 수명보다 긴 2.3×1023년이 걸린다. 전세계에는 단지 100억개의 개인용 컴퓨터가 있다. 만약에 이 모두가 공격을 위해 연결된다면 이 수는 여전히 앞서 기술한 트릴리온-프로세서(trillion-processor) 공격보다 적은 1만번이다. 게다가 1개의 트릴리온-프로세서 생산은 나노컴퓨터시대에 가능성이 있으므로 키를 얻기 위해 필요한 시간은 우주의 일생보다 길다.
키 공격 추측
공격자가 단순히 키(key)를 추측하는 것은 이론상으로 가능하다. 실제로 충분한 시간이 주어지고 모든 가능한 횟수로 시도시 본다면 공격자는 키를 얻을 것이 다. 이것은 50%의 성공률을 얻기 전에 2159회의 시도를 해야 한다는 점에서 상술한 무차별 공격과 마찬가지이다. 첫번째 시도에 누군가가 키를 추측할 수 있는 가능성은 2160분의 1이다. 비교하자면 미국에서 누군가가 최고 포상(top prize)을 받고 같은날 번개로 죽을 가능성이 단지 261분의 1이다. 누군가가 첫번째 시도로 인증 칩 키를 추측해낼 가능성은 2160분의 1로서 두사람이 지구상의 모든 원자들로부터 정확하게 같은 원자들을 선택하는 것에 상응한다. 즉 매우 가능성이 낮다
퀀텀 컴퓨터 공격
K2를 파괴하기 위해서는 적절한 알고리즘에 160 qubit을 내장한 퀀텀 컴퓨터가 만들어져야 한다. 160 비트 키에 대한 공격은 가능하지 못하다. 퀀텀 컴퓨터의 가능성에 대한 외부평가는 50년 내에 50qubits은 가능할거라고 한다. 50 qubit의 퀀텀 컴퓨터를 사용하더라도 160 비트 키를 깨뜨리기 위해서는 2110회의 테스트가 요구된다. 각각 1마이크로초 동안에 250 키를 수행할 수 있는 1억의 어레이(array)를 가진 50큐빗 퀀텀 컴퓨터를 가정하면(현재의 무모한 평가이상) 키를 찾는데 평균 180억년이 걸리게 된다.
암호 원문만 공격(Cyphertext Only attack)
공격자는 K1에 대해 RND와 RD에, K2에는 RD와 TST에 모니터링 콜을 불러서 암호 원문만 공격을 시작할 수 있다. 그러나, 이러한 모든 호출들은 평문의 해시된 형태과 마찬가지로 평문을 드러낼 것이고 공격은 강한 형태의 공격으로 변형될 것이다-공지된 평문 공격.
공지된 평문 공격(Known Plaint attack)
시스템과 인증 칩 사이의 연결부에 논리분석기를 연결하여 데이터의 흐름을 감시하는 것은 쉽다. 데이터의 흐름은 공지된 평문와 해시드형태의 평문이 되어 KQ 과 K2 모두에 공지된 평문 공격을 하는데 사용될수 있다. K1에 대한 공격을 시작하기 위해서는 RND와 TST에 대한 다중 호출(call)이 만들어져야 한다(TST에 대한 call이 성공적이면 유효칩의 RD에 대한 호출을 요청하게 된다). 이것은 공격자가 시스템인증 칩과 소비재 인증 칩을 가진다면 수월하다. 각각의 K1 X, HK2[Y]페어가 드러나는 동안 K2 Y, HK2[Y]페어도 드러난다. 공격자는 좀더 분석을 위해 이 페어들을 수집해야 한다. 문제는 이러한 데이터를 가지고 의미있는 공격을 시작하기 위해서 수집되어야만 하는 몇쌍으로 구성된다. 통계분석을 위해 데이터수집이 요구되는 공격의 예로 차동 암호해독이 있다. 그러나 SHA-1또는 HMAC-SHA1에 알려진 공격이 없으므로 수집된 데이터의 이용도 없다.
선택된 평문 공격
암호 해독자가 이전 실험결과에 의해 그후의 선택된 평문을 수정하는 능력을 가지고 있다고 한다면 K2는 단순한 선택된 평문 공격보다 확실히 강한 형태의 공격인 적응성 있게 선택된 평문 공격의 부분적인 형태에 공개된다. 선택된 평문 공격 은 K1에 가능하지 않다. 왜냐하면 RND 함수(K1을 가지고 망치는 결과를 제공할 수 있는 유일한 함수)에 입력으로 사용되는 R을 요청자가 변경할 수 있는 방법이 없기 때문이다.
적응성 있게 선택된 평문 공격
이 종류의 공격은 K1에 대해 가능하지 않다. 왜냐하면 K1 은 선택된 평문 공격에 영향을 받지 않기 때문이다. 그러나 특히 시스템과 소비재 모두가 공격자에게 유용할 수 있기 때문에 이 공격의 일부 형태에 대해 가능하다. HMAC 구성은 선택된 평문 공격의 모든 형태에 보안을 제공한다. 이것은 주로 HMAC 구성이 2개의 비밀 입력변수(최초의 해시 결과와 비밀키)를 가지고 있기 때문이다. 따라서 입력변수가 비밀일때 해시 함수에서 충돌을 찾는 것은 평이한(PLAIN) 해시 함수에서 충돌을 찾는 것보다 훨씬 어렵다. 이것은 전자가 SHA-1으로부터 입/출력쌍을 생성시키기 위해 SHA-1(Protocal 3에서 허용되지 않는) SHA-1에 대한 직접 접근을 요구하기 때문이다. 공격자가 수집할 수 있는 유일한 값은 HMAC[R]과 HMAC[R|M]이다. 이것들은 SHA-1 해시 함수 자체에 공격이 되지 못하고 차동 암호공격에 대한 공격을 감소시켜 주며 수집된 데이터간에 통계적인 차이를 시험한다. SHA-1또는 HMAC에 대해 알려진 차동 암호공격이 없다면 프로토콜 3은 적응성 있게 선택된 평문 공격에 저항할 수 있다.
고의적인 에러 공격
공격자는 키에 대해 입력을 유효화할 수 있는 유일한 함수인 TST와 RD 함수 에 대해 고의적인 에러 공격을 일으킬 수 있다. TST와 RD 함수를 가지고 에러가 입력에서 발견된다면 0값이 생성되고 더 이상의 정보는 주어지지 않는다. 더불어 0값은 입력에 무관하고 공격자에게 어느 비트가 잘못되었는가에 관한 정보를 제공하지 않는다. 따라서 고의적인 에러 공격은 실익이 없다.
체인 공격
어떤 형태의 체인 공격은 망쳐지는 메시지가 몇블럭을 넘거나 입력변수들이 어떻게해서든지 정해지는 것을 가정한다. 프로토콜 3에 사용되는 HMAC-SHA1 알고리즘은 한번에 하나의 512비트 블럭을 망친다. 결과적으로 프로토콜 3에 대한 체인 공격은 불가능하다.
생일 공격
HMAC에 대해 알려진 가장 강한 공격은 해시 함수에 대한 충돌 빈도수에 기초한 생일 공격이다. 그러나 이것은 SHA-1과 같이 최소한으로 적절한 해시 함수에 대해서는 완전히 실질적이지 못하다. 그리고 생일공격은 공격자가 부호화된 메세지를 통제할 수 있을때만이 가능하다. 프로토콜 3은 전자암호의 형태로서 해싱을 사용한다. 시스템은 유효한 인증 칩으로부터 반응에 편입될 숫자를 보낸다. 인증 칩은 H[R|M]에 응답해야하기 때문에 유효값 R은 통제할 수 없어 생일 공격은 불가능하다. 이것은 메시지가 이미 유효하게 만들어져 부호화되었기 때문이다.공격자는 대신에 같은 값으로 해시하는 충돌메시지를 찾아야만 한다.(당신과 생일이 같은 사람을 찾는 것과 유사함) 그러므로 클론칩은 R2의 해시와 선택된 M2 가 H[R|M]로서 같 은 해시값을 같은 것처럼 새로운 R2값을 찾기 위한 시도를 해야 한다. 그러나 시스템인증 칩은 정확한 해시값을 드러내지 않는다.(TST 함수는 해시값이 옳은가에 따라 1또는 0값을 돌려준다.) 그러므로 정확한 해시값을 찾는 (충돌을 찾기 위해) 유일한 방법은 실제인증 칩에 신호를 보내는 것이다. 그러나 정확한 값을 찾는다는 것은 M을 갱신하는 것을 의미하는데 M의 디크리먼트-ONLY 파트는 한쪽방향이고 M의 리드오운리파트는 바뀔수 없기 대문에 클론 소비재는 충돌을 찾으려는 시도 전에 실제 소비재를 갱신해야만 한다. 대안은 성공을 하기 위해 TST 함수에 무차별 공격 서치를 하는 것이다.(각각의 클론 소비재를 시스템소비재에 접근시키는 것이 요구됨) 이경우 인증마다 상술한 바와 같이 무차별 공격은 우주의 일생보다 긴 시간이 걸린다. 해시값의 적시모음은 실제 소비재가 감소되는 것을 포함하기때문에 클론 소비재가 이러한 종류의 공격을 시도하기 위한 방법은 없다.
완전한 참조표을 가지는 대체
각 시스템의 난수 시드는 160 비트가다. 인증 칩의 최악의 상황은 상태 데이터가 변하지 않는 것이다. 결과적으로 M으로 반환되는 영구값이 있다. 그러나 클론칩은 여전히 160 비트값인 FK2[R|M]을 반환해야 한다.160 비트 결과의 160 비트 검색을 가정하면 이는 7.3×1048 바이트 또는 6.6×1036테라바이트를 요구한다.이는 가까운 장래에 실현할 수 있는 것보다 많은 공간을 요구한다. 물론 이것은 롬에 대한 값들을 수집하는 방법을 고려하지 않은 것이다. 따라서, 완전한 참조표은 완전히 불가능하다.
희박한 참조표을 가지는 대체
희박한 참조표은 인증 칩에 보내지는 메시지들이 효과적으로 랜덤하기 보다는 다소 예측할 수 있을 때에만 가능하다. 난수 R은 자연스럽게 랜덤이벤트로부터 모아지는 미지 난수를 가지고 시드화된다. 클론 제작자가 모든 시스템에 대해 가능한 R의 범위를 알 가능성은 각각의 비트가 1또는 0이 될 수있는 50%의 확률을 가지고 있기 때문에 불가능하다. 그러나 클론제작자가 주어진 시스템에 대한 R값의 범위를 안다면 가능하다. 이것은 호출로부터 생성한 전류를 가지고 LFSR을 특별한 시스템 인증 칩의 RND함수에 로딩하고 몇회를 반복함으로써 완성될 수 있다. 이것이 끝난다면 특별한 롬은 특정 R 범위에 대해 만들어질 수 있다.(즉 특정시스템의 소비재들에 대한 특수한 롬) 그러나 공격자는 여전히 롬에 정확한 정보를 주어야 한다. 그러므로 공격자는 유효인증 칩을 찾아야 할 필요가 있으며 각각의 R값을 요청해야 한다.
클론 인증 칩이 완전한 소비재를 보고한다고 가정하게 되면 그것은 접속 손실을 작동하고 새로운 완전소비재를 주입하기 전에 한번의 사용을 허용한다. 클론소비재는 완전소비재의 인증과 부분적으로 사용된 소비재의 인증에 대한 반응을 포함할 필요가 있다. 최악의 ROM은 시스템의 수명동안 완전소비재과 부분적으로 사용된 소비재의 엔트리들을 포함한다. 그러나 유효인증 칩은 정보를 생성시키고 프로세스에서 부분적으로 사용되어야만 한다. 만약 주어진 시스템이 단지 nR값들에 관해 생산한다면 요구되는 분산 검색롬은 M의 다른 값들의 수만큼 10n 바이트배된다. 롬을 설계하는데 걸리는 시간은 호출과 RD가 수행되는 시간에 의존한다.
결국 클론 제작자는 리필을 위해 소비자의 복귀에 의존해야 한다. 왜냐하면 처음 롬을 설계하는 비용은 소비재한개를 소비하기 때문이다. 그런 환경에서 클론제작자의 사업은 결과적으로 리필에 있게 된다. 그러면 시간과 비용은 검색에 있어야 하는 R의 크기와 M의 다른 값들의 수에 의존한다. 또한 주문한 클론소비재 ROM은 각각의 시스템과 모든 시스템에 매치될수 있도록 설계되어야 하고 다른 유효인증 칩은 각각의 시스템에 사용되어야만 한다(완전하고 부분적으로 사용된 데이터를 제공하기 위하여) 그러므로 시스템에서 인증 칩의 사용은 클론제작자에게 이러한 종류의 공격이 의미있는지 여부를 결정하기 위해 시험되어야만 한다. 수명기간동안 10,000 장의 프린트를 할 수 있는 카메라를 예를 들어 보자. 그것이 하나의 감산만 되는 값(남아있는 프린트 수)과 호출과 RD사이에 1초의 딜레이를 가지고 있다고 가정해보자. 그런 시스템에서 분산테이블은 설계되는데 3시간이 걸리고 100K를 소모한다. 롬의 제조가 유효인증 칩을 사용하는 것을 기억한다면 부담비용은 하나의 소비재과 클론소비재의 결함 이상의 가치가 있어야 한다. 따라서 하나의 소비재으로 이런 기능을 수행하는 것은 비용면에서 효율적이지 않다. (만약 클론소비재가 진짜소비재의 복합체와 상응할 정도의 가치를 가지지 않는다면) 클론제조업자가 시스템별 소유자를 위한 주문롬을 설계하는 문제가 생긴다면 쉬운 접근방법은 인증 칩을 완전히 무시할 수 있도록 시스템을 갱신시켜야 한다. 결과적으로 이 공격은 시스템당 공격으로서 가능하다. 그리고 주어진 시스템과 소비재의 결합물에 대해 생성하는 이것의 가능성에 대해 결정은 만들어져야 한다. 가능성은 소비재과 인증 칩의 비용, 소비재의 수명, 소비재에 대한 이윤마진, ROM을 만드는데 걸리는 시간, 만들 어진 롬의 크기와 소비자가 같은 클론칩을 사용하는 리필을 위해 클론제조업자에게 돌아갈 것인가 등등에 달려있다.
차동 암호해독
현재의 차분 공격은 DES와 다른 유사한 알고리즘에 사용되는 S 박스의 구조에 크게 의존한다. 프로토콜 3에 사용되는 HMAC-SHA1과 같은 다른 알고리즘이 S 박스를 가지고 있지 않다고 하더라도 공격자는 통계분석을 수행하여 차분과 유사한 공격을 할 수 있다:
최소 차분 입력과 그에 상응하는 출력
최소 차분 출력과 그에 상응하는 입력
이 특성의 공격을 하기 위해서는 입력과 출력쌍의 세트가 모여야 한다. 프로토콜 3으로부터 모음은 공지된 평문을 통하거나 부분적으로 적응성 있게 선택된 평문 공격으로부터 얻을 수 있다. 명백히 후자가 보다 유용할 것이다. 일반적으로 해싱 알고리즘은 차분분석에 저항할 수 있도록 설계되어 있다. 특히 SHA-1은 특수하게 강화되어 특히 80워드 확장에 의해 K입력생성에서 최소차분은 많은 수의 비트 포지션(128비트 해시 함수와 비교하면)에서 변화하는 출력을 생산할 수 있다. 또한 모여진 정보는 HMAC알고리즘의 특성때문에 직접적인 SHA-1 입력/출력 세트가 되지 않는다. HMAC알고리즘은 미지값을 가지고 기지값을 해시하며 이 해시의 결과는 개별적인 미지값을 가지고 다시 해시된다. 공격자는 암호값과 첫번째 해시결과를 모르기때문에 SHA-1으로부터의 입력과 출력은 알려지지 않고 어떠한 차분공격도 매우 어렵게 만든다.다음은 인증 칩으로부터 미니멀리 차분입력과 출력값에 대한 보다 상세한 논의이다.
최소 차분 입력
이는 공격자가 X값이 극소의 다른 X, FK[X]값을 가지고 출력 FK[X]사이의 통계적인 차이를 검사하는 것이다. 공격은 최소비트수에 의해 다른 X 값에 의존한다. 문제는 FK[X]값을 비교하기 위해 극소로 다른 X값을 얻기 위한 방법으로 구성된다. K1: K1을 가지고 공격자는 최소로 다른 X, FK1[X]페어를 통계적으로 검사할 필요가 있다. 그러나 공격자는 어떤 X값을 선택하거나 관련된 FK1[X]값을 얻을 수 없다. X, FK[X]페어는 시스템인증 칩위의 RND 함수를 호출함으로써만 생성되기 때문에 공격자는 테이블에 각각의 보존된 쌍을 기록하면서 RND를 많이 호출해야만 한다. 그래서 충분히 극소로 작은 X값이 FK1[X]값의 통계적인 분석을 수행하기 위해서는 관찰된 값을 통해 조사되어야 한다.
K2:공격자는 K2를 가지고 극소로 다른 X, FK2[X]페어를 통계적으로 조사할 필요가 있다. FK2[X]를 생성시키는 유일한 방법은 X=Y|M인 주어진 X, FK1[X]에 대해 FK2[X]를 생성하는 RD함수를 통해서이다. 이것은 Y와 M의 가변부분이 공격자에 의해 제한된 양으로 선택되는 것을 의미한다. 그러므로 선택의 양은 가능한 만큼으로 제한되어야 한다.
공격자의 선택을 제한하는 첫번째 방법은 Y를 한정하는 것이다. 왜냐하면 RD 는 Y, FK1[Y]포맷의 입력을 요구하기 때문이다. 유효쌍이 기꺼이 RND함수로부터 얻어진다고 하더라도 그것은 RND의 선택의 쌍이다. 공격자는 그들이 RND로부터 적절한 쌍을 얻었다면 또는 K1을 안다면 그들자신의 Y를 제공할 수 있다. RND로부터 적절한 쌍을 얻는 것은 무작위검색을 요구한다. K1를 아는 것은 RND함수로부터 얻은 쌍에 암호해독에 의해 논리적으로만 가능하다.-효과적으로 기지문공격. RND가 초당 많은 횟수로 호출될 수 있다고 하더라도 K1는 공용교차시스템칩이다. 그러므로 기지쌍은 병렬로 생성될 수 있다.
공격자의 선택을 제한하는 두번째 방법은 M을 제한하거나 적어도 M을 선택하는 공격자의 능력을 제한하는 것이다. M의 제한은 M의 일부를 판독전용으로 만들거나 인증 칩각각에 대해 다르게 하거나 M의 다른 부분을 감소전용으로 만듬으로써 완성된다. M의 판독전용부분은 시리얼 번호, 배취번호, 난수들과 같은 정보에 의해 이상적으로 각각의 인증 칩마다 달라야 한다. M의 감소전용부분은 공격자가 다른 M을 시도하기 위해서 그들은 M의 그 부분을 많이 감소시킬수 있다는 것을 의미한다.-M의 감소전용부분이 0으로 감소한 후에는 그 부분이 다시 변할 수 없다.새로운 인증 칩 53을 얻는 것은 새로운 M을 제공하지만 일기 전용부분은 기존의 인증 칩의 판독전용부분과 다를것이고, 공격자가 M을 더 선택하는 것을 감소시킨다. 결과적으로 공격자는 Y와 M에 대한 값을 선택하면서 제한된 수의 가능성을 얻게 될 뿐이다.
최소 차분 출력
공격자는 FK[X]값이 극소로 작고 X값사이에 통계적인 차이를 검사하는 X, FK[X]세트를 이용한다. 공격은 비트의 극소수가 다른 FK[X]값에 의존한다. K과 K에 대해 공격자가 주어진 FK[X]값에 대해 X값을 생성시킬수 있는 방법은 없다. 그렇게 하기 위해서는 F가 일방함수라는 사실을 어겨야 한다. 결과적으로 공격자가 이런 성질의 공격을 개시하기 위한 유일한 방법은 모든 관찰된 X, FK[X]페어를 기록하는 것이다. 관찰된 값을 통해 극소로 작은 FK[X]값이 X값의 통계적인 분석을 수행할 수 있도록 검색되어야 한다. 이것은 극소차이입력공격(M과 R의 선택에 대한 제한 때문에 크게 제한되는)보다 많은 작업을 요구하며, 이러한 공격은 실익이 없다.
메시지 대체공격
이러한 형태의 공격이 수행되기 위해서 소비재는 진정인증 칩53을 포함해야 하지만 인증 칩은 결코 감쇠되지 않기 때문에 효과적으로 재사용된다. 복제인증 칩은 메시지를 차단하고 자신의 것으로 치환시킨다. 그러나 이 공격은 공격자에게 성공을 주지 못한다. 복제인증 칩은 진정인증 칩에 WR명령을 통과시키지 않기 위해 선택할것이다. 그러나 이후의 RD명령은 WR이 성공적인 것처럼 정확한 응답을 반환해야만 한다. 정확한 응답을 반환하기 위해서는 해시값이 특정한 R과 M에 대해 알려져야만 한다. 생일 공격부분에서 기술한대로 공격자는 단지 진정칩에서 M을 갱신시킴으로서 해시값을 결정할 수 있으나 이는 공격자가 하고 싶어하지 않는다. 시스템이 보내온 R을 바꾸는것 조차 시스템 인증 칩이 이후의 TST동안 R을 매치시켜야만 하기 때문에 도움이 되지 않는다. 그러므로 메시지 대체공격은 실패할것이다. 이는 시스템이 소비재가 사용되기 전에 남아있는 소비재의 양을 갱신하는 경우에 유일하게 적용된다.
키 제너레이터 리버스 엔지니어링
의사난수 제너레이터가 키를 생성하는데 사용된다면, 클론 제작을 위해 제너레이터 프로그램을 얻거나 사용된 랜덤 시드를 추론할 수 있는 가능성이 있다. 이것은 넷스케이프 보안프로그램이 처음부터 파괴되는 방법이다.
전체적으로 인증을 바이패싱(Bypassing authentication altogether)
프로토콜 3은 소비재가 사용되기 이전에 소비재 상태데이터를 갱신하고, 판독에 이해 매번 기록이 뒤따르는(기록을 인증한다) 시스템을 필요로 한다. 따라서, 각 소비재의 사용은 인증을 필요로 한다. 시스템이 이들 2개의 간단한 규칙(rule)에 충실하면, 클론 제작자는 상술한 방법(희박한 롬 검색과 같은)을 통해서 인증을 모의 실험한다.
인증 칩의 재사용
상술한 바와 같이 프로토콜 3은 소비재가 사용되기 전에 시스템이 소비재의 상태데이터를 갱신하도록 하며 판독에 의해 모든 기록을 뒤따른다(기록을 인증하기 위해). 따라서, 소비재 각각의 사용은 인증을 필요로 한다. 만약 소비재를 다 써버린다면 인증 칩은 0으로 감소된 적합한 상태변수를 갖게 될 것이다. 그러므로 칩은 다른 소비재에 사용되지 않을 것이다. 이는 인증 칩이 감소 전용 데이터 목록을 가지고 있는 경우에만 적용됨에 유의하라. 매번 사용시 상태데이터가 감소하지 않는다면 칩의 재사용을 막을 수 없다. 이것은 유일한 인증 존재와 소비재 수명 인증간 의 기본적인 차이점이다. 프로토콜 3은 양쪽 모두를 허용한다. 핵심은 소비재가 시스템에 의해 사용되는 감소전용 데이터목록을 가진다면 인증 칩은 암호키에 관한 지식이 있는 합법적인 프로그래밍 스테이션에 의해 완벽하게 재프로그램되지 않는다면 재사용되지 못한다는 것이다.
비용 절감을 위해 인증을 생략하는 처리(management)결정
엄밀히 외부공격이 아니더라도 비용을 절감하기 위해 장래 시스템에서 인증을 생락하는 결정은 널리 다른 시장에서 널리 다양한 영향을 줄 것이다. 고용량소비재의 경우에 시장이 형성된 후에 인증을 끼워넣는 것은 인증된 소비재를 요구하는 시스템이 여전히 유통중인 구소비재과 함께 작동할 수 없다는 점에서 매우 어렵다는 것을 기억하는 것이 필수적이다.이와 마찬가지로 어느 단계에서 인증을 중지하는 것은 구시스템이 공인되지 않은 새로운 시스템과 함께 작동할 수 없는 것과 같이 비현실적이다. 두번째 경우 구시스템들은 같은 프로그래밍 환경을 가진 같은 칩에 의해 시스템 인증 칩을 대체함으로써 개별적으로 변경될 수 있다. 그러나 구시스템의 TST함수는 항상 계속된다. 물론 시스템은 항상 계승 TST 함수를 위해 테스트하고 중단하도록 프로그램될 것이다. 자동차와 차 열쇠, 문과 문열쇠, 또는 이와 유사한 상황과 같이 특정한 쌍의 경우에 장래 시스템에서 인증의 생략은 사소하고도 반향하는 것이 아니다. 이는 소비자가 한번에 전체 시스템과 소비재 인증 칩을 사기 때문이다.
거로트/브라이브 공격
이 형태의 공격은 다음 두 상황 중 한가지에서 성공적일 수 있다:
K1, K2 및 R이 이미 칩 개발자에 의해 기록되어 있거나 또는,
공격자가 기록되는 K1, K2 및 R의 장래값을 지배할 수 있는 상황
프로그래밍 스테이션 외부의 인간 또는 컴퓨터시스템이 키를 알지 못한다면 아무리 많은 힘이나 브라이버리도 그들을 드러낼 수 없다. 이런 종류의 공격에 대한 보안 레벨은 궁극적으로 시스템/소비재 소유자가 원하는 서비스 수준에 따라 만들어지는 결정이다. 예를 들어 자동차회사는 사람이 그들의 차를 위해 만들어지는 새로운 키를 요청할 수 있도록 하기 위해 생산되는 모든 키의 기록을 보유하길 바란다. 그러나 이는 공격자가 제조자의 존재하는 일부 차량에 대해 키를 만드는 것을 허용하는 전체 키 데이터베이스의 잠정적인 협상을 허용한다. 그것은 공격자가 일부 새로운 차량에 대한 키를 만드는 것을 허용하지 않는다. 물론 키데이터베이스 그 자체는 또한 어떤 수의 사람이 접근을 위해 그들의 키를 결합시키길 요구하는 그 이상의 키로 암호화되어 있다.만약 특정 차량에 사용되는 키에 관한 기록이 보존되지 않으면 사람이 잃어버릴 수 있는 부가키를 만들수 있는 방법이 없다. 이리하여 소유자는 그의 차의 인증 칩과 그의 모든 차량 키들을 대체해야만 할 것이다. 이는 반드시 나쁜 상황이 아니다. 그에 반해 프린터 잉크 카트리지와 같은 소비재에서 한개의 키조합은 모든 시스템과 모든 소비재에 사용된다. 확실이 키에 대한 백업이 보존되지 않고,키에 대한 지식을 가진 사람이 없다면 공격은 불가능하다. 그러나 백업이 되지 않는 상황은 잉크 카트리지와 같은 소비재에 대해서는 바람직하지 않다. 왜냐하면 만약 키를 잃어버릴 경우 더이상의 소비재를 만들수 없기 때 문이다. 그러므로 생산자는 일정수의 사람이 전체 키 정보를 드러내기 위해서는 그들의 부분을 결합시켜야만 하도록 일정부분으로 나누어진 키 정보의 백업을 보관해야만 한다. 이는 칩 프로그래밍 스테이션이 리로리드될 필요가 있는 경우에 요구된다. 어느 경우라도 인증과정에 사람이 참여할 경우는 없기 때문에 프로토콜 3 자체에 대한 이러한 공격은 없다. 대신 그것은 칩의 프로그래밍 단계에 대한 공격이다.
HMAC-SHA1
인증 매커니즘은 다음 중 하나로 작동하는 HMAC-SHA1 알고리즘이다:
HMAC-SHA1(R, K1),또는
HMAC-SHA1(R|M, K2)
우리는 지금 이제까지 다룬 것보다 보다 상세하게 HMAC-SHA1알고리즘을 검토할 것이며 초기정의보다 적은 메모리자원을 요구하는 알고리즘의 최적화를 설명할 것다.
HMAC
HMAC알고리즘은 다음의 주어진 정의에 따라 진행된다.
H = 해시 함수(예를 들면 MD5나 SHA-1)
n = H로부터 출력비트수(예를 들면 SHA-1은 160, MD5는 128비트)
M = MAC 함수가 적용된 데이터
K = 2개 부분에 의해 공유된 비밀키
ipad = 0x36은 64회 반복
opad = 0x5C는 64회 반복
HMAC 알고리즘은 다음과 같다:
K의 끝에 0x00 바이트를 첨가함으로써 K를 64 바이트로 확대(Extend)
ipad를 가지고 (1)에서 생성된 64 바이트 스트링(string) XOR
(2)에서 생성된 64 바이트 스트링에 데이터 스트림(stream)을 첨가(Append)
(3)에서 생성된 스트림에 H를 적용(Apply)
opad를 가지고 (1)에서 생성된 64 바이트 스트링 XOR
(5)에서 유도하는 64 바이트 스트링에 (4)에서 유도하는 H를 첨가
(6)의 출력을 적용하고, 그 결과를 출력
따라서:
HMAC-SHA1알고리즘은 단순하게 H =SHA-1인 HMAC이다.
SHA-1
SHA-1 해싱 알고리즘은 여기서 요약한 것처럼 알고리즘내에서 규정된다.
9개의 32비트 상수가 규정된다. 체인(chaining)변수들을 초기화하기 위해 사용되는 5개의 상수와 4개의 추가 상수들이 있다:
초기 연쇄 값 | 부가 상수 | ||
h1 | 0×67452301 | y1 | 0×5A827999 |
h2 | 0×EFCDAB89 | y2 | 0×6ED9EBA1 |
h3 | 0×98BADCFE | y3 | 0×8F1BBCDC |
h4 | 0×10325476 | y4 | 0×CA62C1D6 |
h5 | 0×C3D2E1F0 |
비최적화 SHA-1은 전부 2912비트의 데이터 스토리지를 요구한다:
5개의 32비트 체인 변수는 H1, H2, H3, H4, H5로 정의된다.
5개의 32비트 동작변수는 A,B,C,D,E로 정의된다.
한개의 32비트 임시변수는 t로 정의된다.
80개의 32비트 임시 레지스트는 X0-79로 정의된다.
다음함수들은 SHA-1으로 규정된다:
기호 | 정의 |
+ | 232을 법으로 하여 부가 |
XY | Y비트의 위치로 X를 왼쪽으로 회전시킨 결과 |
f(X,Y,Z) | (X∧Y)∨(~X∨Y) |
g(X,Y,Z) | (X∧Y)∨(X∧Z)∨(Y∧Z) |
h(X,Y,Z) | XYZ |
해시 알고리즘은 입력메시지에 처음으로 채워넣어 512비트의 배수가 되도록 하고 h1-5로 체인 변수H1-5를 초기화하는 것으로 구성되어 있다. 출력해시
값은 체인 변수들의 연결에 의해 주어진 처음 160 비트가 되고 채워넣은 메시지는 512비트 천크로 처리한다. :H1, H2, H3, H4, H5
SHA-1알고리즘단계는 보다 상세하게 검토하도록 한다.
1 단계. 전처리
SHA-1의 첫단계는 입력메시지를 채워넣어 다음과 같이 512비트의 배수가 되도록 하고 체인 변수를 초기화하는 것이다.
입력 메세지를 전처리하기 위한 단계 | |
입력 메시지를 채워라 | 메시지에 1비트를 추가하라 |
추가된 메시지의 길이가 병렬 512비트보다 64비트가 작도록 0 비트를 추가하라 | |
초기 입력 메시지의 비트 길이가 들어가는 64비트값을 추가하라. 가장 중요한 비트부터 가장 중요하지 않은 비트만큼의 길이를 저장하라. | |
연쇄 변수들을 초기화하라 | H1←h1, H2←h2, H3←h3, H4←h4, H5←h5 |
2 단계. 처리
채워진 입력메시지는 지금 처리될것이다. 우리는 512비트 블럭에서 메시지를 처리한다. 각 512비트블럭은 InputWord0-15로 언급되었듯이 16×32비트 단어의 형태안에 있다.
각 512비트 블럭에 대해 따라야 할 단게 | |
512비트의 입력 비트를 X0-15에 복사하라 | j가 0에서 15까지 XJ=입력워드j |
X16-79로 X0-15를 확장시켜라 | j가 16에서 79까지 Xj←((Xj-3 Xj-8 XJ-14 Xj-16)1) |
동작변수들을 초기화하라 | A←H1,B←H2,C←H3,D←H4,E←H5 |
1회 | j가 0에서 19까지 t←((A5)+f(B,C,D)+E+Xj+y1) E←D,D←C,C←(B30),B←A,A←t |
2회 | j가 20에서 39까지 t←((Ac5)+h(B,C,D)+E+Xj+y2) E←D,D←C,C←(B30),B←A,A←t |
3회 | j가 40d에서 59까지 t←((A5)+g(B,C,D)+E+Xj+y3) E←D,D←C,C←(B30),B←A,A←t |
4회 | j가 60에서 79까지 t←((A5)+h(B,C,D)+E+Xj+y4) E←D,D←C,C←(B30),B←A,A←t |
체인 변수 갱신 | H1←H1+A, H2←H2+B, H3←H3+C, H4←H4+D, H5←H5+E |
3 단계. 완성
패드된 입력메시지의 모든 512비트 블럭이 처리된후에 출력해시값은 H1 |H2|H3|H4|H5fh 에 의해 주어진 최종 160 비트값이다.
하드웨어 구현을 위한 최적화
SHA-1 단계 2 과정은 하드웨어를 위해 최적화되어 있지 않다. 특히 80개의 일시 32비트 레지스터는 하드웨어완성에 귀중한 실리콘을 다 써버린다. 이 단락은 단지 16개의 임시 레지스터를 사용하여 SHA-1알고리즘을 최적화하는 것에 대해 설명한다. 실리콘은 2560 비트에서 512비트로 2000 비트 이상을 감소시킨다. 그것은 어떤 응용부분에서는 중요하지 않을 수 있으나 인증 칩 저장영역에서는 가능한 감소시켜야 한다. 최적화는 초기 16워드 메시지블럭이 80워드 메시지블럭으로 확장된다 하더라도 80워드는 알고리즘동안 갱신 되지 않는다는 사실에 기초한다. 우리는 순환카운터들이 우리가 사용한 레지스터를 기억하기를 요구한다. 그러나 효과는 많은 양의 스토리지를 절약하는 것이다. 하나의 값j에 의한 지수 X 보다 우리는 반복을 통해 카운트하기 위해 5비트 카운터를 사용한다. 이것은 16또는 20을 가지고 5비트 레지스터를 초기화하고 그것이 0이 될때까지 감소시킴으로써 실현될 수 있다. 그것들이 80개인 것처럼 16개의 임시변수를 갱신하기 위해서는 우리는 각각 4비트 레지스터인 4개의 지수가 필요하다.
알고리즘 과정 동안 모두 4개의 인덱스 증분.
라운드 0 및 1A동안 N1, N2 및 N3의 증가는 선택적이다. 소프트웨어장치는 시 간이 걸리기 때문에 그들을 증가시키지 않을 것이며 루프를 통해 16번의 마지막에 모든 4개의 카운터들은 그들의 본래값이 될 것이다. 하드웨어의 디자이너들은 컨트롤 로직을 절감하기 위해 모든 4개의 카운터를 함께 증가시키고 싶어 한다. 라운드 0은 호출자가 X0-15의 512비트를 실행한다면 완전히 생략될 것이다.
HMAC-SHA1
인증 칩장치에서 HMAC-SHA1단위는 오직 2개의 입력타입 즉 K1을 사용하여 R에 대해서와 K2를 사용하여 R|M에 대해 해싱을 수행한다. 입력들은 칩에서 분리된 존재로서 HMAC와 SHA-1을 가지기보다는 두개의 상수길이이기 때문에 그들은 결합될수 있고 하드웨어는 최적화된다. SHA-1 단계1(1비트, 0 비트의 문자열과 메시지의 길이) 안에서 메시지의 패딩은 다른 메시지들이 패딩 후 같은 값을 보지 못하도록 확인하기 위해 필요하다. 우리는 2종류의 메시지만을 다루기 때문에 우리의 패딩은 상수0이 될 수 있다. 더불어 SHA-1알고리즘의 최적화된 버젼이 사용되고 단지 1632비트 워드만이 임시저장을 위해 사용된다. 이러한 16개의 레지스터들은 최적화된 HMAC-SHA1하드웨어에 의해 직접적으로 실행된다. 9개의 32비트 상수 h1-5와 y1-4가 그들이 상수라는 사실이 하드웨어 장치에 이점이 된다고 하더라도 여전히 필요하다. HMAC-SHA-1으로 최적화된 하드웨어는 총 1024비트의 데이터 용량을 요구한다:
5개의 32비트 체인 변수는 H1, H2, H3, H4, H5로 정의된다.
5개의 32비트 동작변수는 A,B,C,D,E로 정의된다.
한개의 32비트 임시변수는 t로 정의된다.
16개의 32비트 임시 레지스트는 X0-15로 정의된다.
다음 두 단락은 HMAC-SHA1에 요청하는 두가지 유형을 위한 단계를 설명한다.
H[R, K
1
]
K1을 사용하여 R의 키된 해시를 만드는 경우에 원본 입력메시지 R은 160 비트길이의 상수이다. 그러므로 우리는 처리과정동안 이 사실을 이용할 수 있다. SHA-1알고리즘의 첫번째 부분동안 X0-15를 실행시키는것보다 직접적으로 X0-15를 실행시켜 SHA-1의 최적화 과정 블럭(단계2)의 순환0을 삭제한다. 유사부호는 다음 단계에서 사용된다:
H[R|M, K
2
]
K2를 사용하여 R|M의 키된 해시를 만드는 경우에 본래의 입력메시지는 416비트(256+160)길이의 상수이다. 그러므로 우리는 처리과정에서 이 사실을 이용할 수 있다. SHA-1알고리즘의 첫번째 부분동안 X0-15를 실행시키는것보다 직접적으로 X0-15를 실행시켜 SHA-1의 최적화 과정 블럭(단계2)의 순환0을 삭제한다. 유사부호는 다음 단계에서 사용된다:
데이터 스토리지 통합
각각의 인증 칩은 인증 프로토콜 3이 요구하는 변수들을 보유하기 위해 약간의 불휘발성 메모리를 포함한다. 불휘발성 변수들은 다음과 같이 규정된다:
변수명 | 크기(비트) | 설명 |
M[0..15] | 256 | 시리얼 넘버, 남아있는 매체와 같은 상태 데이터가 들어있는 16워드(각 16비트) |
K1 | 160 | 인증 동안 R로 변환되기 위해 사용되는 키 |
K2 | 160 | 인증 동안 M을 변환하기 위해 사용되는 키 |
R | 160 | 현재의 난수 |
액세스 모드[0..15] | 32 | M[n]에 대한 16세트의 2비트 액세스 모드 값 |
민틱 | 32 | 호출과 키기반 함수사이에 최소 클럭 틱의 수 |
SIWritten | 1 | 설정된다면 비밀 키 정보(K1, K2, R)가 칩에 쓰인다. 만약 삭제되면 비밀정보는 아직 쓸 수 없다. |
IsTrusted | 1 | 설정된다면 RND와 TST함수들이 불려올 것이나 RD와 WR함수들은 불려오지 않는다. 만약 삭제된다면 RND와 TST함수들은 불려오지 않겠지만 RD와 WR함수들은 불려올것이다. |
전체 비트 | 802 |
이러한 변수들이 플래시 메모리에 있다고 가정한다면 이전값을 대치시키기 위해 새로운 값을 쓰는 것은 쉬운 일이 아니다. 메모리는 첫번째로 삭제되어야만 하고 적합한 비트 세트가 있어야 한다. 이것은 플래시메모리에 기반을 둔 변수를 바꾸는데 사용하는 알고리즘에서 효과가 있다. 예를 들어 플래시메모리는 시프트 레지스터로서 쉽게 사용될 수 없다. 일반적인 작업으로 플래시메모리변수를 갱신시키기 위해서는 다음 단계를 따를 필요가 있다. :
범용 레지스터로 전체 N 비트값을 읽어라
범용 레지스터상에서 작업을 수행하라.
변수에 상응하는 플래시메모리를 삭제하라; 그리고
범용 레지스터에있는 비트에 근거해 플래시 메모리 비트의 위치를
설정하라.
인증 칩의 리셋은 이러한 불휘발성변수들에 효과가 없다.
M과 액세스 모드
변수 M[0]부터 M[15]는 소비재의 시리얼 넘버, 배치 넘버, 남아있는 소비재의 양과 같은 상태 데이터를 보존하는데 사용된다. 각 M[n]리지스터는 16비트로서 ,전체 M 벡터를 256비트(32바이트)로 만든다. 고객들은 개별적인 M[n]변수들로부터 읽거나 쓸 수 없다. 반면에 M으로 일컫는 전체 벡터는 하나의 논리접근에서 쓰거나 읽을 수 있다.M은 RD(판독)명령을 사용하여 읽을 수 있으며 WR(기록)명령을 통해 쓸 수 있다. 명령은 K1과 K2모두 정의되고(SIWritten=1)인증 칩이 소모 넌트러스트칩(IsTrusted=0)인 경우만이 성공한다. M이 다른 많은 데이터 유형을 포함한다 하더라도 그들은 그들의 기록 허가에서만이 다르다. 각 데이터 타입은 항상 읽을 수 있다. 고객의 매모리에서 한번 256비트는 고객에 의해 선택된 방식으로 해석될 수 있다. M의 전체 256비트는 인증이라는 제목이 붙은 단원에서 묘사한 것과 같이 보안을 이유로 소량씩 판독하는 대신에 한번에 읽혀진다. 다른 기록 허가는 다음 표에서 개설한다.
데이터 유형 | 접근 노트 |
판독전용 | 절대 쓸 수 없음 |
판독기록 | 항상 쓸 수 있음 |
감소전용 | 새 값이 구값보다 적은 경우에만 쓸 수 있다. 감소 전용값들은 전형적으로 16비트나 32비트 값들이지만 16비트의 배수가 될 수도 있다. |
기록에 요구되는 보호를 달성하기 위해서는 2비트 접근 모드값이 각 M[n]에 대해 정의된다. 다음 표는 2비트 액세스 모드 비트유형의 해석을 규정한다:
비트 | Op | 해석 | 기록 명령동안 하는 행동 |
00 | RW | 판독기록 | 새 16비트값은 항상 M[n]에 쓰여진다. |
01 | MSR | 감소전용(가장 중요한 영역) | 새로운 16비트는 M[n]의 현재값보다 작은 경우에만 쓸 수 있다. 이것은 가장 중요한 16비트 갑소전용수에 대해 접근을 허용한다. |
10 | NMSR | 감소전용(가장 중요한 영역이 아님) | 새 16비트 값은 M[n]의 현재값보다 작은 경우에만 쓸 수 있다. NMSR 액세스 모드는 32비트의 정밀한 배수값을 허용한다. |
11 | RO | 판독전용 | 새로운 16비트 값은 무시된다. M[n]은 바뀌지 않은 채로 남는다. |
16M[n]을 위한 16개의 액세스 모드비트세트는 하나의 32비트액세스 모드레지스터에서 함께 모아진다. 액세스 모드레지스터의 32비트는 다음과 같이 M[n]에 해당한다.
MSB LSB
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
각 2비트값은 hi/lo형태으로 저장된다. 결과적으로 만약 M[0-5]가 액세스 모드MSR이었고 M[6-15]액세스 모드가 RO라면 32비트 액세스 모드 레지스터는
11-11-11-11-11-11-11-11-11-11-01-01-01-01-01-01
가 된다.
WR(기록)명령의 실행 중에 액세스 모드[n]은 각 M[n]에 대해 검토하고 새로운 M[n]값이 이전값을 치환시킬 것인지를 결정한다. 액세스 모드레지스터는 인증 칩의 SAM(설정액세스 모드)명령을 사용하여 설정된다. 디크리먼트 전용비교가 부호화되지 않는다면 음의 범위를 요구하는 디크리먼트 전용값은 양수 범위로 변환되어야한다. 예를 들어 -50에서 50 영역의 디크리먼트 전용데이터 목록을 가진 소비재는 0에서 100으로 전환된 영역을 가져야 한다. 그럼 시스템은 -50에서 50인것처럼 0에서 100영역을 해석해야 한다. 감소 전용데이터목록은 가장 중요한 것부터 가장 덜중요한 16비트수 순으로 데이터를 정렬시킨다. 가장 중요한 16비트(M[n])에 대한 액세스 모드는 MSR로 설정되어야 한다. 남아있는 레지스터들(M[n+1], M[n+2] 등등)은 NMSR에 그들의 액세스 모드를 가져야만 한다. 만약 관련없는 MSR영역을 가지고 NMSR에 잘못되게 설정된다면 각 NMSR영역은 다중정밀비교가 되는 대신에 독립적으로 고려될 것이다.
K1
K1은 인증 프로토콜 동안 R을 변환시키는데 사용되는 160 비트 비밀키이다. K1는 K2 와 SSI(셋 비밀 정보)를 가진 R에 따라 프로그램된다. K1은 비밀로 유지되어야 하기 때문에 고객은 직접적으로 K1을 읽을수 없다.K1을 만드는 명령들은 RND와 RD이다. RND는 난수 R과 FK1[R] 한쌍을 요구하는 반면, RD는 입력으로서 X와 FK1[X]를 요구한다. K1은 키된 한방향 해시함수HMAC-SHA1에서 사용된다. 그것은 물리적으로 생성된 난수로 프로그램되어야 하기 때문에 물리적으로 임의적인 현상으로부터모아진다. K1은 컴퓨터가 운영하는 난수생성기로 만들어져서는 안된다. 인증 칩의 보안은 확정되지 않은 방식으로 만들어진 K1, K2 , R에 달려있다. 예를 들어 사람은 한쌍의 동전을 160회 던져서 앞면을 1로, 뒷면을 0으로 기록하면서 K1을 설정할 수 있다. K1은 자동적으로 CLR명령의 실행에 따라 0으로 지워진다.
K2
K2는 인증 프로토콜 동안 M|R을 변환하는데 사용되는 160 비트의 비밀키이다. 는 K1 과 SSI(셋 비밀 정보)명령을 가진 R에 따라 프로그램된다. K2는 비밀이 유지되어야 하기 때문에 고객은 직접적으로 K2을 읽을수 없다. K2를 만드는 명령들은 TST와 RD이다. RD는 X가 RD함수에 대한 파라미터로서 통과되는 한쌍의 M과 FK2[M|X]를 반환한다. TST는 M, FK2[M|X]페어를 입력으로 요구하며 R은 인증 칩의 RND 함수로부터 얻어진다. K2는 키된 한방향 해시함수 HMAC-SHA1에서 사용된다. 그것은 물리적으로 생성된 난수로 프로그램되어야 하기 때문에 물리적으로 임의적인 현상으로부터모아진다. K2는 컴퓨터가 운영하는 난수생성기로 만들어져서는 안된다. 인증 칩의 보안은 확정되지 않은 방식으로 만들어진 K1, K2 , R에 달려있다. 예를 들어 사람은 한쌍의 동전을 160회 던져서 앞면을 1로, 뒷면을 0으로 기록하면서 K2를 설정할 수 있다. K2는 자동적으로 CLR명령의 실행에 따라 0으로 지워진다. 그것은 SSI명령에 의해 0이 아닌 값으로 프로그램될 수 있다.
R과 IsTrusted
R은 K1과 SSI(셋 비밀 정보)명령을 가진 K2 에 따라 프로그램된 160 비트 난수시드이다. R은 RND명령을 통해 요청자에게 자유롭게 주어져야 하기 때문에 비밀로 유지되어서는 안된다. 그러나 R은 요청자에 의해 주어진 어떤 값으로 설정되어서는 안되고 오직 인증 칩에 의해서만 바뀌어야 한다. RND에 대한 이전의 호출로부 터 R은 비안전 인증 칩(ChipA)에 있는 FK2[M|R]값을 생성하기 위해 사용된다는 사실을 확인하기 위해 TST명령동안 사용된다. RND와 TST 둘다 안전인증 칩(ChipT)에서 사용된다. IsTrusted는 인증 칩이 안전칩(ChipT)인지 여부를 결정하는 1비트의 플래그 레지스터이다.
만약 IsTrusted 비트가 설정된다면 그 칩은 안전칩으로 고려되므로 고객들은 RND와 TST함수들을 부를 수 있다. (RD와 WR이 아님) 만약 IsTrusted가 지워진다면 칩은 안전한 것으로 고려되지 않는다. 그러므로 RND와 TST 함수는 불러올 수 없다.(그러나 RD와 WR함수가 대신 불러올 수 있다.) 시스템은 결코 소비재에 RND와 TST를 부를 필요가 없다.(왜냐하면 클로칩은 TST와 같은 함수에는 1을, RND에는 상수값을 반환할것이기 때문이다.) IsTrusted 비트는 공격자가 얻을 수 있는 유효한 R과 FK1[R]페어의 수를 감소시키는 부가된 장점을 가진다. 그러나 여전히 인증 프로토콜의 보전을 유지한다. 공격자는 유효한 R과 FK1[R]페어를 얻기 위해 보다 비싸고 소비재보다 덜 유용한 시스템인증 칩을 요구한다. R과 IsTrusted 비트 모두 CLR명령에 의해 0으로 지워진다. 그들은 모두 SSI 명령의 결과에 의하여 쓰여진다. IsTrusted 비트는 오직 SSI명령을 통하여 R에 0이 아닌 시드값을 저장함으로서 설정될 수 있다.(R은 유효한 LFSR 상태가 되기 위해 0이 아니어야만 이고 이것은 매우 합리적이다.)R은 비트 1,2,4 와 159에 탭을 가진 160 비트의 최대 기간 LFSR을 통해 변하고 오직 TST에 성공적인 부름을 통해 변한다.
시스템에서 사용되는 신뢰될 칩으로 예정되어 있는 인증 칩(ChipT)은 그들의 IsTrusted 비트 세트를 프로그래밍동안 가져야만 하고 소비재(ChipA)에서 사용되는 인증 칩은 그들의 IsTrusted 비트를 0으로 유지해야 한다.(프로그래밍동안 SSI명령을 통해 R에 0을 저장함으로서) IsTrusted 비트를 직접적으로 읽거나 쓰는 명령은 없다. 인증 칩의 보안은 K1, K2 의 무작위성과 HMAC-SHA1알고리즘의 강도에만 의존하지 않는다. 공격자가 희박한 참조표을 만드는 것을 예방하기 위해서 인증 칩의 보안은 또한 모든 시스템의 수명동안 R의 범위에 의존한다. 이것은 공격자가 이미 생산되거나 장래 시스템상에 잇는 R의 값을 추론해 낼 수 있어서는 안된다는 것을 의미한다. 그런 R은 물리적으로 생성된 난수에 의해 프로그램되어야 하고, 물리적인 현상에 의해 모여야 한다. R은 컴퓨터가 운영하는 난수생성기로 만들어져서는 안된다.R의 방생은 결정적이어서는 안된다. 예를 들어 안전칩에서 사용할 R을 만들기 위해 사람은 앞면은 1, 뒷면은 0으로 기록하면서 한쌍의 동전을 160회 던질 수 있다.0은 안전R이 0이기 때문에 유일하게 유효하지 않은 초기값이다.(또는 IsTrusted 비트가 설정될 수 없을 것이다.)
SIWritten
SIWritten (Secrete Information Written )1비트 레지스터는 인증 칩에 저장된 보안 정보의 상태를 보유한다. 보안정보는 K1, K2 및 R이다. 고객은 SIWritten 비트에 직접 접근할 수 없다. 대신에 그것은 CLR 명령을 통해 지워진다.( K1, K2 와 R도 마찬가지이다.) 인증 칩이 비밀키와 난수시드로 SSI명령(쓰여진 값과 관계없이)을 사용하여 프로그램될 때 SIWritten 비트는 자동적으로 설정된다. R이 엄격하게 비밀이 아니더라도 그것은 공격자가 선택된 R과 FK1[R]페어를 얻기 위해 자신의 난수시드를 만들지 못한 것을 확인하도록 K1, K2 로 쓰여져야 한다. SIWritten 상태비트는 K1, K2, R에 접근하는 모든 함수로 사용된다. SIWritten 비트가 지워진다면 RD,WR, RND을 요청하고 TST는 CLR에 대한 요청으로 해석된다.
MINTicks
공격자가 짧은 시간에 TST와 RD함수에 다중 요청을 하는 것을 방지하기 위한 두가지 메커니즘이 있다. 첫번째는 내부 클럭이 특정 최대값(예를 들면 10 MHZ)이상으로 작동하는 것을 방지하는 클럭 제한 하드웨어 요소이다. 두번째는 키 기반 함수에 대한 호출 사이에 경과되어야 하는 최소 클럭 틱(tick)수를 조건으로 정하기 위해 사용되는 32비트 민틱(MinTick) 레지스터이다. 민틱 변수는 CLR명령을 통해 0으로 지워진다. 비트들은 SMT(Set Min Ticks)를 통해 설정될수 있다. SMT에 대한 입력계수는 민틱의 어느 비트가 설정되어야 하는지를 나타내는 비트 패턴을 포함한다. 실질적인 효과는 공격자가 민틱의 값을 증가시킬수만 있다는 것이다(왜냐하면 SMT함수는 단지 비트를 설정하기 때문이다.). 또한, 요청자가 이 레지스터의 현재값을 읽도록 허락되는데 제공되는 함수는 없다. 민틱의 값은 운영되는 클럭 속도와 인증 칩의 클럭 제한 하드웨어에 의존한다. 틱 하나의 지속시간은 작동되는 클럭 속도에 달려있다. 이는 입력 클럭 속도와 인증 칩의 클럭 제한 하드웨어의 최대치이다. 예를 들어 인증 칩의 클럭 제한 하드웨어는 10MHz로 설정(불변이다)될 것이지만 입력클럭은 1MHz이다.이 경우 틱 1개는 10MHz가 아닌 1MHz를 기준으로 한 다. 만약 입력클럭이 1MHz대신 20MHz라면 틱 한개의 값은 10MHz를 기준으로 한다.(왜냐하면 클럭속도는 10MHz로 제한되기 때문이다)
1개 틱(tick)의 지속이 알려진다면 민틱(MinTick) 값은 설정될 수 있다. 민틱값은 키 기반 RD와 TST함수에 대한 호출 사이에 통과되는데 필요한 최소 틱 수이다. 값은 실제 시간 수이고 작동되는 틱의 길이로 나누어진다. 입력 클럭속도가 최대 클럭속도 10MHz로 설정된다고 가정해보자. 우리가 키기반함수에 대한 요청 사이에 최소한 1초를 원한다면 민틱값은 10,000,000으로 설정되어야 한다. 공격자가 RND, RD 와 TST함수를 여러번 부름으로서 X, FK1[X]페어를 수집하기 위해 시도한다고 생각해보자.만약 민틱값이 TST에 대한 호출사이에 1초간의 시간을 요구하도록 설정되어있다면 각 쌍은 만들어지기 위해 1초를 요구한다. 225 쌍을(단지 1.25GB의 저장을 요구함)만들기 위해서 공격자는 1년 이상이 필요하다. 264쌍을 요구하는 공격은 한개의 칩을 사용할 경우 5.84×1011년이 필요하고, 10억개의 칩을 사용한다면 548년이 필요하다. 이는 시간측면에서 공격을 완전히 비현실적으로 만든다(저장요구량은 언급한 필요도 없이!).
K1에 관하여 민틱변수는 오직 공격자를 더디게 하고 공격자가 병렬로 된 다중 시스템칩을 사용하는 것을 금지하지 않기 때문에 비용을 더 많이 생성시킨다. 그러나 민틱은 각 소비재는 다른 M(M의 일부분은 임의적인 판독전용데이터이다)을 갖기 때문에 K2에 대한 공격을 더 어렵게 만들지 않는다.분산공격을 하기 위해서는 최소한으로 다른 입력이 요구되고 이것은 하나의 소비재으로 완성될 수 있다.(효과적으로 M의 상수부분을 포함하면서) 최소한도로 다른 입력은 공격자가 하나의 칩을 사용할 것을 요구하고 민틱은 싱글팁의 사용을 느려지도록 한다. 만약 분산공격을 시작하기 위한 값을 착기 위해 데이터를 얻는데 1년이 걸린다면 이는 공격비용을 증가시키고 클론 소비재의 유효한 마켓타임을 감소시킨다.
인증 칩 명령
시스템은 하나의 작동명령세트를 통해 인증 칩과 연결되어 있다. 이 단락은 프로토콜 3의 이행에 필요한 실제적인 명령과 계수에 대해 상세히 다루도록 한다. 여기서 인증 칩은 최소이행으로서 직렬 인터페이스를 통해 시스템과 통신하는 것으로 정의된다. 그것은 토다 넓은 인터페이스(8,16 또는 32비트와 같은)상에서 작동하는 등가칩을 정의하기 위한 사소한 문제이다. 각 명령은 3비트 연산부호로 정의된다. 연산부호의 해석을 IsTrusted 비트의 현재값과 IsWritten 비트의 현재값에 달려있다. 작동은 다음처럼 정의된다.
Op | T | W | Mn | 입력 | 출력 | 설명 |
000 | - | - | CLR | - | - | 삭제하라 |
001 | 0 | 0 | SSI | [160,160,160] | - | 보안 정보를 설정하라 |
010 | 0 | 1 | RD | [160,160] | [256,160] | M을 안전하게 읽어라 |
010 | 1 | 1 | RND | - | [160,160] | 무작위 |
011 | 0 | 1 | WR | [256] | - | M을 써라 |
011 | 1 | 1 | TST | [256, 160] | [1] | 테스트 |
100 | 0 | 1 | SAM | [32] | [32] | 액세스 모드를 설정하라. |
101 | - | 1 | GIT | - | [1] | Get Is Trusted |
110 | - | 1 | SMT | [32] | - | 민틱을 설정하라 |
Op = Opcode, T = IsTrusted 값, W = IsWritten 값,
Mn = Mnemonic, [n] = 파라미터에 필요한 비트 수
이 표에 정의되지 않은 어떤 명령들은 NOP(작동안됨)으로 해석된다. 보기들 은 연산부호110과 111(IsTrusted와 IsWritten 값에 관계없이)와 IsWritten이 0일때 SSI와 다른 약간의 연산부호를 포함한다. RD와 RND에 대한 연산부호가 같다면 WR과 TST에 대한 연산부호도 마찬가지이다. 받은 연산부호상에서 실행되는 실제명령은 IsTrusted 비트의 현재값에 의존할것이다.(IsWritten이 1인 한) IsTrusted 비트가 지워지면 RD와 WR 함수들이 불러질 것이다. IsTrusted 비트가 설정되명 RND와 TST 함수가 불러질 것이다. 두개의 명령 세트는 안전한 인증 칩과 불안전한 인증 칩 사이에서 상호 배타적이고 같은 연산부호들은 이러한 관계를 강화시킨다. 각 명령들은 뒷부분에서 보다 상세히 검토되어진다. 플래시 메모리는 불휘발성변수들의 실행을 위해 가정되기 때문에 어떤 알고리즘이 특별하게 설계됨에 주의하라.
CLR | 삭제 |
입력 | 없음 |
출력 | 없음 |
변화 | 모두 |
CLR명령은 모든 인증 칩 메모리의 내용을 완벽하게 지우도록 설계된다. 이는 모든 키와 보안 정보, 접근 모드 비트들, 상태 데이터를 포함한다. CLR명령이 실행된 후에 인증 칩은 새롭게 생산된것과 마찬가지로 프로그램할 수 있는 상태가 된다. 그것은 새로운 키로 다시 프로그램될 수 있고 다시 사용될 수 있다. CLR명령은 단순하게 CLR명령 연산부호로 구성된다. 인증 칩은 직렬배열이기 때문에 이것은 한번에 전송되어야만 한다. 비트순서는 각 명령요소를 위한 MSB에 대해 LSB이다. 그러므로 CLR명령은 0-2비트 CLR 연산부호로 보내진다. 전체 3비트가 전송된다. CLR 명령은 어느 때라도 직접적으로 불러올 수 있다. 삭제 순서는 중요하다. SIWritten은 S키 접근함수(RND,TST, RD와 WR과 같은)에 그 이상의 CALL을 불가능하게 하기 위해 가장 먼저 지워져야만 한다. 만약 액세스 모드비트가 SIWritten전에 제거된다면 공격자는 그들이 제거된 후 어느 시점에서 전력을 제거할 수 있고 M을 조정하여 부분선택된 평문 공격으로 보안정보를 검색할 수 있는 좋은 기회를 갖게 된다. CLR명령은 다음 단계에 따라 실행된다.
단계 | 행동 |
1 | SIWritten을 삭제하라 IsTrusted를 삭제하라. K1을 삭제하라. K2를 삭제하라. R을 삭제하라. M을 삭제하라. |
2 | 접근 모드를 삭제하라. 민틱을 삭제하라 |
칩이 제거되면 그것은 재프로그램되고 재사용될 준비가 되어있다. 빈 칩은 공격자가 M에 어떤 값을 만들어내더라도 키 기반 함수들은 K1에 관해 어떤 정보도 제공하지 않을 것이며 K2는 특릴 것이기 때문에 공격자에게 쓸모가 없다. 만약 CLR이 CLR과 다른 연산부호를 위해 불러온다면 약간의 입력계수비트를 소모하는 것은 불필요하다. 공격자는 단순히 칩은 리셋해야만 할 것이다. CLR을 부르는 이유는 모든 보안정보가 파괴되어 칩이 공격자에게 쓸모없게 되었음을 확인하기 위해서이다.
SSI-비밀 정보 설정
입력: K1, K2, R=[160 비트, 160 비트, 160 비트]
출력:없음
변화: K1, K2, R, SIWritten, IsTrusted
SSI(Set Secrete Information)명령은 K1, K2, R 변수들을 실행시키고 RND, TST, RD 및 WR명령에 이후의 요청을 위해 SIWritten과 IsTrusted 표시문자를 설정하기 위해 사용된다. SSI명령은 K1, K2, R 레지스터들에 저장된 보안정보에 따른 SSI 명령 연산부호로 구성된다. 인증 칩은 직렬이기 때문에 이는 한번에 1비트가 전송되어야만 한다. 비트 순서는 각 명령 요소를 위한 MSB에 대해 LSB이다. 그러므로 SSI 명령은 0-2비트 SSI 연산부호, 새로운 0-159비트 K1, 새로운0-159비트K2와 마지막으로 R에 대한 0-159시드값순으로 보내져야 한다. K1, K2, R,SIWritten과 IsTrusted 레지스터들은 CLR명령에 따라 모두 0으로 지워진다. 그들은 오직 SSI명령을 사용하여 설정될 수 있다.
SSI명령은 데이터가 K1, K2, R로 실행된 사실을 저장하기 위해 SIWritten표시문자를 사용한다. 만약 SIWritten과 IsTrusted 표시문자가 지워진다면(이것은 CLR명령후의 경우이다) K1, K2, R는 새로운 값을 가지고 실행된다. 만약 어떤 표시문자가 실행된다면 SSI에 대해 시도된 불러내기는 CLR명령을 실행시키는 결과가 된다. SSI명령은 또한 IsTrusted 표시문자를 R값에 따라 설정한다. 만약 R이 0이라면 칩은 불안전한것으로 고려되므로 IsTrusted는 0으로 남는다. 만약 R이 0이 아니라면 칩은 안전한것으로 고려되므로 IsTrusted는 1로 설정된다. IsTrusted 비트의 설정은 SSI명령동안에만 생성할 수 있음을 주목하라. 만약 인증 칩이 재사용된다면 CLR명령은 처음에 호출되어야 한다. 키들은 SAM과 WR 명령을 사용하여 M으로 로드된 새로운 상태정보와 SSI 명령을 가지고 안전하게 재프로그램될수 있다. SSI명령은 다음 단계에 따라 실행된다:
단계 | 작용 |
1 | CLR |
2 | K1←고객으로부터 160 비트를 읽어라 |
3 | K2←고객으로부터 160 비트를 읽어라 |
4 | R←고객으로부터 160 비트를 읽어라 |
5 | 만약 R이 0이 아니라면 IsTrusted←1 |
6 | SIWritten←1 |
RD-판독
입력: X, FK1[X]=[160 비트,160 비트]
출력: M, FK2[X|M]=[256비트,160 비트]
변화: R
RD(Read)명령은 불안전 인증 칩으로부터 전체 256비트의 상태데이터(M)을 안전하게 판독하는데 사용된다. 올바른 인증 칩만이 RD 요구에 정확하게 반응할 것이다. RD명령으로부터 출력비트들은 만약 (우리가 기대한 바와 같이)TST가 1을 반환한다면 이후의 사용을 위해 저장된 처음 256비트들(M)을 가지고 검증을 위해 안전한 인증 칩상에서 TST에 대한 입력처럼 공급될것이다. 인증 칩은 직렬방식이기 때문에 명령과 입력계수들은 동시에 1비트씩 전달되어야 한다. 비트순서는 각 명령 구성요소를 위해 MSB에 대한 LSB이다. 그러므로 RD명령은 0-2비트 RD 연산부호와 그 다음 0-159비트의 X, 0-159 비트의 FK1[X]이다.X와 FK1[X]는 안전한 인증 칩의 RND명령을 부름으로서 얻어진다. 그러므로 안전한 인증 칩의 RND명령에 의한 320 비트의 출력은 직접적으로 시스템에 의해 저장되는 이러한 비트를 필요로 하지 않는 불안전한 칩의 RD명령으로 공급될 수 있다.RD명령은 오직 다음 상황이 충족될 때 사용될 수 있다.
SIWritten=1 K1, K2 및 R이 SSI명령을 통해 설정된 것을 나타내고;
IsTrusted=0 이것은 난수시퀀스를 생성하도록 허용되지 않기 때문에 칩이 신뢰되지 않는 것을 나타낸다;
게다가 RD에 대한 요청은 남아있는 민틱리메이닝 리지스터가 0에 도달할때까지 기다려야 한다. 그렇게 된다면 리지스터는 최소시간이 RD에 대한 요청사이에서 경과될 것임을 확인하기 위해 민틱으로 다시 로드된다. 이는 입력X를 위해 내부적으로 FX1[X]를 생성시키고 입력 FX1[X]에 대해 결과를 비교함으로서 얻어진다. 만약 시간이 같지 않다면 공격자는 FX1[X]의 어느 비트가 잘못되었는지에 관한 정보를 얻을 수 있다. 입력계수가 확인되지않기 위한 유일한 방법은잘못된 시스템안의 잘못된 소비재의 경우, 질낮은 안전칩(잘못된 쌍을 생성시키는)또는 인증 칩에 대한 공격등 잘못된 시스템(틀린 비트를 전달하는)이다. 상수값0은 입력계수가 틀릴 때 반환된다. 0이 반환되는데 걸리는 시간은 공격자가 무엇이 잘못되었는지에 관해 알 수 없도록 모든 잘못된 입력이 같아야 한다. 입력계수가 검색된다면 출력값도 계산된다.M의 256비트 내용은 다음 순서로 전달된다: M[0]의 0-15비트, M[1]의 0-15비트, M[15]의 0-15 순으로 끝마쳐진다. FK2[X|M]은 0-159비트로 계산되고 출력된다. R레지스터는 X, FX1[X]페어의 확인 동안 X값을 저장하는데 사용된다. 이는 RND와 RD 가 상호배타적이기 때문이다. RD명령은 다음 단계를 따라 수행된다.
RND-랜덤
입력: 없음
출력: R, FK1[R]=[160 비트,160 비트]
변화: 없음
RDN(Random)명령은 클라이언트가 RD와 TST명령을 통해 이후 인증에서 사용을 위한 유효한 R, FK1[R]페어를 얻기 위해 사용된다. 입력계수가 없기 때문에 RND명령은 단순히 0-2비트의 RND 연산부호이다. RND명령은 다음 상황이 충족될 때 사용된다.
SIWritten=1 K1과 R이 SSI명령을 통해 설정된 것을 나타내고;
IsTrusted=1 칩이 난수시퀀스를 생성하도록 허용된 것을 나타낸다;
RND는 요청자에게 R, FK1[R]모두를 반환한다. RND명령의 288비트 출력은 입력계수처럼 불안전한 칩의 RD명령으로 바로 공급될 수 있다. 그것들은 다시 요구되지 않기 때문에 클라이언트 저장시킬 필요는 없다. 만약에 요청자가 RND를 여러번 부른다면 매번 같은 R, FK1[R]페어가 반환될 것이다. R은 오직 TST에 성공적인 요청후 시퀀스안에서 다음 난수로 나타날것이다. 보다 정보를 원한다면 TST를 보라. RND명령은 다음 단계에 따라 실행된다.
단계 | 작용 |
1 | 클라이언트에게 160 비트의 R을 출력하라 |
2 | 해시←FK1[R]을 계산하라 |
3 | 클라이언트에게 160 비트의 R을 출력하라 |
TST-테스트
입력:R, FK2[R|X]=[256비트,160 비트]
출력:1또는 0=[1비트]
변화: M, R과 민틱 리메이닝(또는 공격이 감지된다면 모든 레지스터들)
TST(Test)명령은 분안전한 인증 칩으로부터 M의 판독을 인증하기 위해 사용된다. TST(Test)명령은 입력계수 R, FK2[R|X] 에 따라 TST명령 연산부호로 구성된다. 인증 칩은 직렬연결이기 때문에 이것은 한번에 1비트씩 전달되어야 한다. 비트순서는 각 명령성분 MSB에 대해 LSB이다. 그러므로 TST명령은 0-255비트의 M, 0-159비트의 FK2[R|X]가 뒤따르는 0-2비트 TST연산부호이다. 총 419비트가 전달된다. 마지막 416비트의 입력은 RD명령으로부터 불안전한 인증 칩으로 출력비트로 얻어지 기 때문에 전체데이터는 고객에 의해 저장되어야만 할 필요가 없다.대신에 비트는 직접적으로 안전한 인증 칩의 TST명령으로 전달될 것이다. 오직 M의 256비트는 RD명령으로부터 보관되어야 한다. TST명령은 도직 다음 상황이 만족될 때 사용될수 있다.
SIWritten=1 K2와 R이 SSI명령을 통해 설정된 것을 나타내고;
IsTrusted=1 칩이 난수시퀀스를 생성하도록 허용된 것을 나타낸다;
게다가 TST에 대한 요청은 민틱리메이닝 레지스터가 0이 되도록 기다려야 한다. 그렇게 된다면 레지스터는 TST에 대한 요청 사이에 최소시간이 경과할 것을 확인하기 위해 민틱과 함께 다시 로드된다.TST는 내부 M값을 입력 M값으로 치환하도록 한다. FK2[R|X]는 그때 계산되고 160 비트의 입력해시값과 비교된다. 하나의 출력비트가 그들이 같을때는 1, 다를때는 0으로 만들어진다. 내부M값의 사용은 시퀀스에서 다음 난수가 되도록 갱신딘다. 이것은 요청자에게 RD와 TST가 요청될때마다 새로운 난수를 사용하도록 강제한다. 결과로서 생기는 출력은 전체 입력문자열이 비교될때까지 출력값이 아니므로 TST함수에서 비교를 하기 위한 시간이 항상 같아진다. 따라서 어느 공격자도 출력이 주어지키전에 실행시간이나 처리된 비트수를 비교할 수 없다.
다음 난수는 160 비트의 최대 주기 LFSR(비트 159,4,2와 1상의 탭 선택들)을 사용하는 R로부터 만들어진다. 초기 160 비트의 R값은 SSI명령을 통해 설정되고 0을 제외한 어떤 난수가 될수 있다.(0으로 채워진 LFSR은 끝나지 않는 0의 흐름을 만들것이다.) R은 XORing 비트 1,2,4,159 모두와 모든 160 비트를 b159에 대한 입력 비트처럼 XOR 결과를 사용하여 오른쪽으로 1비트씩 이동시킴으로허 명환된다. 새로운 R은 RND에 대한 새로운 부름으로 반환될 것이다. 0이 TST로부터 반환되는데 걸리는 시간은 공격자가 입력에 관해 유효하지 않은 것을 알수 없도록 하기 위해 모든 불량 입력에 대해 같아야만 한다.
TST명령은 다음의 단계를 가지고 실행된다;
우리는 R이 플래시 메모리이기 때문에 단계7에서 R을 직접 앞당기지 않고 어느 설정비트가 0이 되는 순서로 지워야만 함을 주목하라. 만약 7단계에서 R의 이전값이 삭제된 후 새로운 R값이 쓰여지기 전에 인증 칩에서 전원이 제거된다면 R은 다시 프로그램되지 않고 삭제될 것이다. 그러므로 우리는 공격자로 인하여 유일하게 가능한 상황인 IsTrusted=1의 상태를 가져야만 한다. 이 문제는 R에 두번째 160 비트 플래시 메모리와 새로운 값이 로드된 후 토글되는 유효 비트를 가짐으로써 피할 수 있다.
WR-기록
입력: Mnew=[256비트]
출력: 없음
변화: M
WR(Write)명령은 인증 칩의 상태데이터를 포함하는 M의 기록이능부분을 갱신시키기 위해 사용된다. WR명령 그 자체는 안전하지 못하다. 그것은 변화가 특정된대로 만들어졌음을 확인하기 위해 M(RD 명령을 통해)의 인증된 판독이 수반되어야 한다. WR명령은 M에 쓰여진 새로운 256비트의 데이터가 수반되는 WR 명령연산부호를 통과시킴으로서 불러진다.비트순서는 각 명령성분에 대해 낮은 우선순위바이트부터 높은 우선순위 바이트이다. 그러므로 WR명령은 0-15비트의 M[0],0-15비트의 M[1]부터 0-15비트의 M[15]순으로 된 0-2비트 WR 연산부호이다. 총 259비트가 전달된다. WR명령은 K1, K2, R이 SSI명령을 통해 설정되었음을 나타내는 SIWritten=1일때에만 사용될 수 있다. (만약 SIWritten이 0이라면 K1, K2, R이 아직 셋업되지 않았고 대신 CLR명령이 불러진다) 특별한 M[n]에 쓰는 능력은 액세스 모드레지스터에 저장된것처럼 유사한 액세스 모드비트에 의해 통제된다. 이 두 단계는 다른 주기에서 생성하기 때문에 공격가능성을 열어둔 채로 남겨둔다. 공격자는 삭제 후 새로운 값으로 프로그램하기 전에 전원을 제거할 수 있지만 공격자에게는 아무런 이익이 없다.
이 수단에 의해 0으로 변하는 판독/기록 M[n]은 공격자가 어쨌든 WR명령을 사용하여 어떤 값을 써야 하기 때문에 아무런 이익이 없다.
이 방법에 의해 0으로 변하는 판독전용 M[n]은 부가적인 기지 명문쌍을 허용한다.(M[n]은 초기값대신에 0이 된다) M[n]값을 후에 사용할 경우 그들은 이미 0이 되어 아무런 정보를 주지 않는다.
0으로 변하는 감소 전용 M[n]은 단순히 소비재를 소비하는 시간을 앞당긴다. 그것은 공격자가 소비재의 사용하더라도 어떤 새로운 정보를 주지 않는다.
WR명령은 다음 단계에 따라 실행된다:
SAM-액세스 모드 설정
입력: 액세스 모드NEW=[32비트]
출력: 액세스 모드=[32비트]
변화: 액세스 모드
SAM(Set Acess Mode)명령은 32비트의 액세스 모드 레지스터를 설정하는데 사용되고 단지 소비재의 인증 칩에(IsTrusted 표시문자=0)서 사용하는데 유용하다. 32비트 값이 따르는 SAM명령 연산부호는 액세스 모드 레지스터에서 비트를 설정하는데 사용된다. 인증 칩은 직렬방식이기 때문에 데이터는 한번에 1비트씩 전달되어야 한다. 비트순서는 각 명령 구성요소에 대해 낮은 우선순위 바이트에서 높은 우선순위바이트 순이다. 그러므로 SAM명령은 액세스 모드안에 설정된 0-31비트로 된 0-2 SAM 연산부호이다. 접근레지스터는 CLR 명령의 실행에 따라 0으로 지워진다. 액세스 모드00은 CLR이 모든 M이 읽거나 쓰여질 수 있음을 나타낸 후에 어떤 액세스 모드 비트를 설정하지 않는 RW(판독/기록)의 액세스 모드를 나타낸다. SAM명령은 단지 액세스 모드레지스터안에 비트를 설정한다. 결과적으로 고객은 32비트 워드에 적합한 비트를 설정하고 입력계수로서 32비트값을 가지고 SAM을 요청함으로서 RW에서 RO로 M[n]에 대한 액세스 모드를 변화시킬 수 있도록 한다. 이는 다른 시간대 혹은 생산과정의 다른단계에서도 액세스 모드비트의 프로그래밍을 가능하게 해준다. 예를 들어 판독전용 난수 데이터는 초기 키 프로그래밍 단계동안 기록을 할 수 있는 반면에 소비재의 시리얼 넘버와 같은 품목도 2번째 프로그래밍 단계에서도 가능하게 된다.
SAM명령은 단지 비트를 설정하기 때문에 그 효과는 M[n]에 대응하는 액세스 모드를 RW부터 MSR, NMSR 또는 RO로 진행하는 것을 허용하는 것이다. 그것은 MSR의 액세스 모드가 RO로 변화될수 있지만 조작된 인증 칩에 대한 기록은 기록이 성공적이지 못함을 탐지하여 작동을 멈추게 할 것이기 때문에 공격자에게 도움이 되지 못한다. 비트의 셋팅은 플래시 메모리가 최고로 작동하는 방식과 대응된다. 액세스 모드레지스터에서 비트를 제거(예를 들자면 감소전용M[n]을 판독/기록로 바꾸는 것 이 있다)하는 유일한 방법은 CLR명령을 사용하는 것이다. 따라서 M[n]에 대응하는 액세스 모드[n]은 CLR명령사이에서 한번 유용하게 변화할 수 있다. SAM명령은 액세스 모드레지스터의 새로운 값을 반환한다.(적당한 비트가 입력 계수에 의해 설정된 후에) 입력계수0을 가진 SAM을 부르는 것에 의해 액세스 모드는 변하지 않을 것이며 액세스 모드의 현재값은 요청자에게 반환될 것이다.
SAM명령은 다음의 단계를 가지고 실행된다:
단계 | 작용 |
1 | Temp←클라이언트로부터 32비트를 읽어라 |
2 | SetBits(액세스 모드, Temp) |
3 | 클라이언트에게 32비트의 액세스 모드를 출력하라 |
GIT-Get Is Trusted
입력: 없음
출력:IsTrusted=[1비트]
변화: 없음
GIT(Get Is Trusted)명령은 인증 칩상의 IsTrusted의 현재값을 판독 위해 사용된다. 만약 반환된 비트가 1이라면 인증 칩은 항상 안정한 시스템 인증 칩이다. 만약 반환된 비트가 0이라면 인증 칩은 소비재의 인증 칩이다. GIT명령은 단순하게 GIT명령 연산부호르 구성된다. 인증 칩은 직렬방식이기 때문에 이것은 한번에 1비트씩 전달되어야만 한다. 비트 순서는 각 명령 구성요소에 대해 낮은 우선순위부터 높은 우선 순이다. 그러므로 GIT명령은 0-2의 GIT 연산부호로 보내진다. 총 3비트가 전달된다. GIT명령은 다음 단계에 따라 실행된다.
단계 | 작용 |
1 | 클라이언트에게 IsTrusted 비트를 출력하라 |
SMT-민틱(MINTICKS) 설정
입력: MinTicksnew=[32비트]
출력: 없음
변화: MinTicks
SMT(Set MinTicks)명령은 민틱레지스터안에 비트를 설정하고 TST와 RD에 대한 요청사이에 통과해야만 하는 틱의 최소수를 정의한다. SMT명령은 민틱레지스터안에 비트를 설정하기 위해 사용되는 32비트 값에 따라 SMT 명령 연산부호를 통과시킴으로서 불러진다. 인증 칩은 직렬식이기 때문에 데이터는 한번에 1비트씩 전달된다. 비트 순서는 각 명령 구성요소에 대해 낮은 우선순위부터 높은 우선순위 순이다. 그러므로 SMT명령은 민틱안에 설정된 0-31비트가 따라오는 0-2비트 SMT 연산부호이다. 총 35비트가 전달된다. 민틱레지스터는 오직 CLR명령의 실행에 따라 0으로 지워진다. 0값은 틱이 키 기반 함수에 대한 부름 사이에 통과될 필요가 없음을 나타낸다. 그러므로 함수들은 칩을 작동시키는 믈럭 속도제한하드웨어처럼 자주 불려올 수 있다.
SMT명령은 단지 비트를 설정해주기 때문에 효과는 고객에게 값을 설정하도록 해주고 그 이상의 부름이 만들어진다면 시간지연을 증가시키는 것이다. 이미 설정된 비트를 다시 설정하는 것은 효과가 없으며 지워진 비트를 설정하는 것은 단지 칩을 느리게 할 뿐이다. 비트의 설정은 플래시 메모리가 최고로 작동하는 것에 대응된다. 민틱레지스터안의 비트를 지우는 유일한 방법(예를 들면 10개 틱의 값을 4 개 틱의 값으로 바꾸기 위해)은 CLR명령을 사용하는 것이다. 그러나 CLR명령은 민틱레지스터뿐만 아니라 모든 키와 M을 삭제한다. 그러므로 이것은 공격자에게 쓸모없다. 따라서 민틱레지스터는 CLR명령 사이에 단 한번 유용하게 바뀔 수 있다. SMT명령은 다음 단계에 따라 실행된다.
단계 | 작용 |
1 | Temp←클라이언트로부터 32비트를 읽어라 |
2 | SetBits(MinTicks,Temp) |
프로그래밍 인증 칩
인증 칩은 물리적으로 안전한 환경에서 논리적으로 안전한 정보를 가지고 프로그램되어야 한다. 결과적으로 그로그래밍 과정은 논리와 물리적 안전 모두를 다룬다. 논리적인 안전성은 K1, K2, R과 무작위적인 M[n]값이 컴퓨터에 의하지 않고 물리적으로 임의적인 환경에서 생성되었음을 보증하기 위한 과정이다. 그것은 또한 칩의 어느 부분안의 순서가 가장 논리적으로 안전함을 보증하기 위한 과정이다. 물리전 안전성은 프로그래밍 스테이션이 물리적으로 안전하여 키 생성단계와 키 저장시간동안 K1, K2가 안전하게 남아있음을 보장하는 과정이다. 더불어 프로그래밍 환경을 키를 얻거나 파괴하려는 물리적인 시도에 저항해야만 한다. 인증 칩은 K1, K2가 안전하게 유지되고 있음을 확인하기 위한 그 자신의 메커니즘을 가지고 있다. 그러나 프로그래밍 스테이션은 또한 K1, K2를 안전하게 유지해야만 한다.
개관(OVERVIEW)
제조 후, 인증 칩은 그것이 사용되기 전에 프로그램되어야 한다. 모든 칩에 서 K1, K2값은 만들어져야만 한다. 만약 칩이 시스텝인증 칩이 된다면 R의 최초 값은 반드시 결정되어야 한다. 만약 칩이 소비재 인증 칩이 된다면 R은 반드시 0이 되어야 하고 M과 액세스 모드의 초기값은 설정되어야만 한다. 그러므로 다음 단계들이 인정된다:
시스템과 소비재 사이의 상호작용을 결정
시스템과 소비재를 위해 키를 결정
시스템과 소비재를 위해 민틱을 결정.
키, 랜덤 시드, 민틱 및 사용되지 않은 M을 프로그램
상태데이터 및 액세스 모드를 프로그램
소비재 또는 시스템이 더이상 요구되지 않는다면 부가된 인증 칩은 재사용될것이다. 이것을 칩을 4단계에서 다시 시작하도록 재프로그램함으로서 쉽게 달성할 수 있다. 각 단계는 이후 단락에서 검토한다.
스테이지 0: 제조
인증 칩의 생산은 어떤 특별한 보안을 필요로 하지 않는다. 생산단계에서는 칩에 비밀정보가 프로그램되어 있지 않다. 알고리즘과 칩 공정은 특별하지 않다. 표준 플래시 공정이 사용된다. 칩 생산과 프로그래밍 스테이션 사이에 인증 칩의 절도는 단지 빈 칩을 가진 클론 생산품을 제공할 뿐이다. 이것은 인증 칩에 의해 인증된 것이 아니라 단순하게 인증 칩의 판매를 양보한 것에 불과하다. 프로그래밍 스테이션은 소비재과 시스템 생산 키를 가지는 유일한 매커니즘이기 때문에 클론생산자는 정확한 키를 가진 칩을 프로그램할 수 없다. 클론 생산자들은 그들 자신의 시스템과 소비재를 위해 빈칩을 프로그램할 수 있다. 그러나 발각되지 않고 시장에 물건을 두는 것은 어려울 것이다. 또한 하나의 절도로 기업의 기초를 세우는 것은 어려울 것이다.
스테이지 1: 시스템과 소비재 사이의 상호작용 결정
시스템이란 무엇이고 소비재가란 무엇인가 하는 결정은 인증 칩이 프로그램되기 전에 결정될 필요가 있다. 연결된 모은 시스템과 소비재들을 같은 키 정보를 공유해야 하기 때문에 어느 소비재가 어느 시스템에서 사용되는가에 관해 결정되어야한다. 그들은 또한 그 데이터의 몇몇 해석이 아직 결정되지 않았다 하더라도 삳태 데이터 사용 메커니즘을 공유할 필요가 있다. 단순한 예는 차와 차량 키의 관계이다. 차량 그 자체는 시스템이고 차량 키는 소비재이다. 각각의 차량에는 몇개의 차량 키가 있고 특정한 차량에 대해 같은 키 정보를 포함한다. 그러나 우리는 다른 차량에서 작동되는 차량 키를 원하지 않기 때문에 각각의 차량(시스템)은 다른 키(차량 키에 의해 공유되는)를 가질 것이다. 다른 예는 특별한 토너 카트리지를 요구하는 광복사기이다. 단순한 용어로 광복사기는 시스템이고 토너 카트리지는 소비재이다. 그러나 결정은 카트리지와 광복사기 사이에 있어야 할 호환성이 무엇인가에 대해 만들어져야 한다. 결정은 역학적으로 토너 카트리지의 물리적 포장에 의해 만들어졌다. 어떤 카트리지는 맞을 수 있으나 나머지 카트리지는 그 복사기의 디자인 결정에 기반한 새 카트리지 모델에 맞지 않을 수 있다. 인증 칩이 사용될 때 함께 작동해야 하는 구성요소는 같은 키 정보를 공유해야만 한다.
더불어 소비재의 각 유형은 M을 나누는 다른 방식을 요구한다. M이 사용되는 방식이 응용분야마다 다르더라도 M[n]과 액세스 모드[n]을 할당하는 방법은 같을 것이다:
특별한 사용을 위해 소비재의 상태 데이터를 정의하라
약간의 M[n]레지스터들을 미래의 사용(필요하다면)을 위해 남겨두어라. 이들을 0으로 설정하고 판독전용으로 만들어라. 값은 호환성을 유지하기 위해 시스템에서 검사할 수 있다.
남아있는 M[n]레지스터들을 판독전용으로 설정하고 각 M[n]의 내용은 완전히 무작위로 하라.이것은 클론 제조업자가 인증키를 공격하는 것을 보다 어렵게 만든다.
다음 예는 상태 데이터가 조직되는 방식을 보여준다.
예 1
우리는 차량 키가 있는 차를 가지고 있다고 가정하자. 16비트 키 숫자는 주어진 차량에 대해 각 차량 키를 유일하게 확인하는데 충분하다. 256비트의 M은 다음과 같이 나누어진다.
M[n] | Access | Description |
0 | RO | 키 번호(16비트) |
1-4 | RO | 차 엔진 번호(64비트) |
5-8 | RO | 장래 확장=0(64비트) |
8-15 | RO | 무작위비트데이터(128비트) |
만약 차량 제조업자가 모든 차량에 대한 모든 논리키들을 보관한다면 사람이 잃어버릴 수 있는 어떤 차량에 대해 새로운 물리적 차량 키를 생산하는 것은 사소한 문제다. 새로운 차량 키는 M[n]에 새로운 차량 키를 포함해야하지만 차의 인증 칩에 같은 K1과 K2를 가질 수 있다. 차 시스템은 특정 키 숫자가 무효로 되는 것을 허용한다.(예를 들면 키를 잃어버린 경우) 그런 시스템은 처음에 키0(마스타 키)를 넣고 그 다음 모든 유효 키들과 다시 키0을 넣도록 요구할 것이다.유일하게 그러한 유효키들은 지금 차와 함께 작동한다. 최악의 경우, 예를 들면 모든 차량 키를 분실한다면 새로운 논리키 세트는 차와 연관된 물리적 차량 키로 만들어질 것이다. 차 엔진번호는 특정차와 키를 연결하기 위해 사용된다. 미래에 사용하는 데이터는 운전자/빌린물건의 상세품목과 같은 대여 정보같은 것도 포함할 것이다.
예 2
우리가 모든 100,000의 복사물을 대체할 수 있는 광복사기 이미지 장치를 가지고 있다고 가정해보자. 32비트들은 남아있는 페이지수를 저장하기 위해 필요하다. 256비트의 M은 다음과 같이 나누어진다:
M[n] | Access | 설명 |
0 | RO | 시리얼 넘버(16비트) |
1 | RO | 배치 넘버(16비트) |
2 | MSR | 남아있는 페이지 수(32비트, Hi/lo) |
3 | NMSR | |
4-7 | RO | 장래 확장을 위해=0(64비트) |
8-15 | RO | 무작위 비트 데이터(128비트) |
단지 100,000의 복사후에 대치되어야 하는 낮은 품질의 이미지 장치가 만들어진다면 32비트 페이지 카운트는 존재하는 광복사기와의 호완을 위해 여전히 사용될 것이다. 이것은 몇개의 소비재유형을 같은 시스템을 가지고 사용하도록 한다.
예 3
25개의 사진을 담을 수 있는 폴라로이드 카메라를 생삭해보자. 16비트의 카운트다운은 남아있는 사진의 수를 저장하기 위해 요구된다. 256비트의 M은 다음과 같이 분류된다:
M[2]에 남아있는 사진값은 많은 소비재 종류가 같은 시스템을 가진 카메라에 사용되기 위해 설계되도록 한다. 예를 들어 36개의 사진을 가진 새로운 소비재는 프로그램하기가 수월하다. 카메라가 소개된지 2년이 지나고 새로운 유형의 카메라가 소개되었다고 가정해보자. 그것은 구 소비재를 이용할 구 있지만 새로운 필름 유형도 처리할 수 있다. M[3]은 필름타입을 정의내리는데 사용된다. 구 필름타입은 0이 될 것이고 새로운 필름 타입은 몇몇의 새로운 값이 될 것이다. 새로운 시스템은 이것을 이용할 수 있다. 초기 시스템은 M[3]에서 0이 아닌 값을 탐지하고 새로운 필름타입과 호환되지 않을 것을 깨달을 것이다.새로운 시스템들은 M[3]의 값을 이해하고 적절하게 반응할 것이다. 구소비재과 호환성을 유지하기 위해서 새로운 소비재과 시스템들은 구소비재과 같은 키정보를 가져야만 한다. 새로운 시스템과 그 자신의 특별한 소비재으로 철저한 일시정지를 만들기 위해서는 새로운 키 세트가 요구된다.
예 4
3개의 잉크(시안, 마젠타 및 옐로우)가 들어있는 프린터 소비재를 생각해보 자.각 잉크량은 개별적으로 감소될 것이다. 256비트의 M은 다음과 같이 구분된다:
스테이지 2: 시스템과 소비재를 위해 키를 결정
어떤 시스템과 소비재가 같은 키를 공유할 것인가에 관해 정해지면 그러한 키들은 정의되어야 한다. 그러므로 K1과 K2 값은 정해져야 한다. 대부분의 경우K1
과 K2는 모든 시간동안 한번 만들어질 것이다. 함께 작동해야 하는 (현재와 미래 모두) 모든 시스템들과 소비재들은 같은 K1과 K2값을 가져야 한다. 만약 키들이 손상된다면 위험은 시스템과 소비재의 수와 그들이 새로운 비손상 키를 가지고 재프로그램될 수 있는 용이성에 달려있다. 토너 카트리지를 가진 사진복사기의 경우 최악의 경우는 클론 제조업자가 그들자신의 인증 칩을 생산하고(또는 인증 칩을 구입하고) 알려진 키를 가지고 칩을 프로그램하며 그것들을 자신의 소비재에 넣는 것이다. 차량 키가 있는 차의 경우 각각의 차는 다른 키 세트들을 가진다. 이것은 두가지 가능한 일반적인 시나리오로 이어진다. 첫번째는 차와 차량 키가 키를 가지고 프로그램된 후에 K1과 K2가 삭제되어 그들의 값의 기록이 보존되지 못하는 것으로 이는 K
1
과 K2를 손상시키는 방법이 없다는 것을 의미한다. 그러나 차량 키는 차의 인증 칩을 재프로그램하지 않고서는 그 차량에 대해 더이상 만들수 없다. 두번재 시나리오는 차 생산자가 K1과 K2값을 가지고 새로운 키를 그 차량에 대해 만드는 것이다. K
1과 K2의 손상은 누군가가 특정차량에 대해 특별하게 차량 키를 만들수 있음을 의미한다.
그러므로 키와 인증 칩에 사용되는 무작위 데이터는 비결정적인 수단으로 생성되어야 한다.(완벽하게 컴퓨터가 만드는 가짜 난수는 모든 미래수들을 주는 생성기 시드의 결정론적인 지식 때문에 사용될 수 없다) K1과 K2은 컴퓨터가 아닌 물리적으로 무작위적인 공정으로 생성되어야 한다. 그러나 무작위성의 자연 소스에 기반한 무작위 비트 생성기는 외부요인에 의해 영향을 받고 오작동되도록 되어 있다. 그러한 기구들을 통계적인 무작위성을 위해 정기적으로 시험하는 것이 절대적으로 필요하다.
그러나 단순하게 유용한 난수의 소스는 SGI 라바란드 시스템이다. 이 제너레이터는 모든 짧은 시간마다 6개의 용암 램프를 찍기 위해 디지털 카메라를 사용한다. 용암램프는 혼돈스럽게 요동치는 시스템이 들어있다. 결과적인 디지털 이미지는 7가지 방식의 해시를 만드는 SHA-1 설비로 공급되어 디지털화된 이미지로부터 모든 7번째 160 비트 값이 된다. 이러한 7개의 160 비트 셋트는 전부 140바이트이다. 140바이트 값은 출력값 흐름의 시작위치를 정하기 위해 BBS 생성기로 들어간다. BBS로부터의 160 비트 출력은 키 또는 인증 칩 53일 것이다.
비결정론적인 난수공정의 극단적인 예는 빈방에서 K1을 위해 동전을 160회 던지고 K2를 위해 동전을 160회 던지는 사람이다. 각각의 앞면과 뒷면으로 1또는 0이 키 프로그래머장치 패널로 들어간다.공정은 침묵 속(누군가는 숨겨진 마이크로폰을 가지고 있을 것이다)에서 몇몇 관찰자(검증을 위해)와 함께 착수해야 한다. 보안 데이터 기입과 저장이 들리는 것처럼 단순하지 않다는 것이 요점이다. 키 프로그래머 장치와 수반되는 프로그래밍 스테이션의 물리적인 안전은 그 자체의 전체 기록을 요구한다. 키 K1과 K2가 결정된다면 그들은 인증 칩이 키를 사용하도록 만들어지는 동안 보관되어야 한다. 첫번째 차와 차량 키 시나리오에서 K1과 K2는 하나의 시스템칩과 약간의 소비재 칩이 프로그램된 후에 파괴된다. 광복사기와 토너 카트리지의 경우 K1과 K2는 토너 카트리지가 광복사기를 위해 만들어지는 동안 보유되어야 한다. 키들은 안전하게 보관되어야만 한다.
스테이지 3: 시스템과 소비재를 위해 민틱을 결정
민틱의 값은 인증 칩의 작동클럭 속도와 RD와 TST 함수 부름 사이에 합리적인 시간을 구성하는 능력에 달려있다. 하나의 틱의 내구성은 작동되는 클럭의 속도에 달려있다. 이것은 최대 입력 클럭 속도와 인증 칩의 클럭 제한 하드웨어이다. 예를 들어 인증 칩의 클럭제한 하드웨어는 10MHz로 설정될 것이지만 입력 클럭은 1MHz이다. 이 경우 1개의 틱의 값은 10MHz가 아닌 1MHz가 될것이다. 만약 입력 클럭이 1MHz가 아닌 20MHz라면 1개 틱의 값은 10MHz를 기준으로 한다(왜냐하면 클럭속도는 10MHz로 제한되기 때문에) 틱의 지속시간이 알려지면 민틱값은 설정될 수 있다. 민틱 값은 RD또는 RND 키 기반 함수 사이를 통과하기 위해 요구되는 최소 틱수이다. 입력클럭의 수가 10MHz의 최대클럭 속도와 일치한다고 가정해보자. 우리가 만약 TST에 대한 요청 사이에 최소 1초를 원한다면 민틱의 값은 10,000,000로 설정된다. 2초와 같은 값이 프린터와 같은(페이지 당 하나의 인증과 매 2,3초마다 1페이지가 생산된다)시스템에서는 완벽하게 합리적인 값일 수 있다.
스테이지 4: 키, 랜덤 시드, 민틱 및 사용되지 않은 M을 프로그램
인증 칩은 제조 후에 미지의 상태에 있다. 택일적으로 그들은 이미 한개의 소비재에서 사용되었고 다른 것에서의 사용을 위해서는 재프로그램되어야 한다. 각각의 인증 칩은 지우고 새로운 키와 새로운 상태 데이터로 프로그램되어야 한다. 인증 칩의 삭제와 후에 프로그래밍은 프로그래밍 스테이션 환경을 보안하는 역할을 한다.
신뢰할 수 있는 시스템 인증 칩 프로그래밍
만약 칩이 안전한 시스템 칩이 되기 위해서는 시드값 R은 반드시 만들어져야 한다. 그것은 물리적으로 랜덤 프로세스로부터 파생된 난수임에 틀림없고, 절대 0이어서는 안된다. 다음 태스크(task)는 다음 순서에 따라 안전한 프로그래밍 환경에서 수행되어야 한다.
RESET the chip
CLR[]
Load R(160 bit register) with physically random data
SSI[K1, K2, R]
SMT[MinTickssystem]
이제 상기 인증 칩은 시스템에 삽입될 준비가 되어있다. 이는 완벽하게 프로그램되어있다. 만약 이 시점에서 시스템 인증 칩을 분실한다면, 클론 생산자는 그것들을 사용하여 K1에 대한 공지된 평문 공격(known text attack)을 실행하기 위하여 R, FK1[R]쌍을 만드는데, 또는 K2에 대한 부분적인 선택된 평문 공격(chosen-text attack)을 실행하는데 사용할 수 있다. 이는 신뢰하는 인증 칩을 각각 가지고 있는 시스템들을 구매하는 것과 다를바 없다. 보안은 인증 프로토콜의 강도(strength) 및 K1과 K2의 무작위성에 의존한다.
비신뢰된 소모품 인증 칩의 프로그래밍
만약 상기 칩이 비신뢰된 소모품 인증 칩이라면, 그 프로그래밍은 신뢰된 시스템의 인증 칩에 대한 프로그래밍과는 조금 다르다. 먼저, R의 시드값(seed value)은 0이어야 한다. M 및 AccessMode값에 대한 부가적인 프로그래밍이 필요하다. 앞으로 사용할 M[n]은 0으로 프로그램되어야 하고, 랜덤 M[n]은 랜덤 데이터로 프로그램되어야 한다. 하기 작업은 하기 순서대로, 그리고 보안 프로그래밍 환경하에서 수행되어야 한다.
RESET the chip
CLR[]
Load R(160 bit register)with 0
SSI[K1, K2, R]
Load X(265 bit register)with 0
Set bits in X corresponding to appropriate M[n] with physically random data
WR[X]
Load Y(32bit register)with 0
Set bits in Y corresponding to appropriate M[n]with Read Only AccessModes
SAM[Y]
SMT[MinTicksconsumable]
상기 비신뢰된 소모품 칩은 일반 상태 데이터(general state data)를 이용하여 프로그램된다. 만약 이 시점에서 인증 칩을 분실한다면, 공격자는 제한된 선택 텍스트 공격을 행할 수 있다. 최선의 경우에는 M의 부분들은 읽기전용(0 및 랜덤 데이터)이고, 나머지 M은 (WR 명령에 의하여)공격자에게 완전히 선택된다. 공격자에 의한 많은 수의 RD 요청은 제한된 M에 대한 FK2[M|R]을 얻는다. 최악의 경우에는 M은 완전히 공격자에에 선택된다(따라서 모든 256비트는 상태변수로 사용된다). 그러나 상기 두 경우에 있어서, R값은 시스템 인증 칩으로부터의 RND요청에 의하여만 제공되기 때문에 공격자는 R값으로 임의의 수를 선택할 수 없다. 선택된 R값을 얻는 유일한 방법은 일방향성 무차별 공격(BruteForce attack)이다. 만약 단계 4 및 5가 동일한 프로그래밍 스테이션(바람직하고 이상적인 상황)에서 수행된다면 인증 칩은 상기 단계들 사이에서 제거될 수 없음을 주의해야 한다. 따라서, 상기 시점에서 인증 칩을 분실할 가능성은 없다. 인증 칩을 한번 또는 두번 프로그램할 것인지에 대한 결정은 시스템/소모품 생산자의 요구사항에 따라 결정된다.
단계 5: 프로그램 상태 데이터 및 AccessModes 프로그램
이 단계는 단지 소모품 인증 칩에 필요한데, 이는 M값 및 AccessModes 레지스터가 시스템 인증 칩에 의하여 변형될 수 없기 때문이다. 앞으로 사용될 랜덤값 M[n]은 단계 4에서 이미 프로그램되어 있다. 남아있는 상태 데이터값들이 프로그램될 필요가 있고, 관련된 AccessMode 값들은 0 아닌 값으로 설정될 필요가 있다. 이 단계의 속도는 MinTicks 레지스터에 저장된 값에 의하여 제한되는 것을 명심해야한다. 이 단계는 실제 위치 또는 언제/어디서 단계 4가 수행되는지와 언제/어디서 단계 5가 수행되는지의 시간상 차이에 의하여 구분된다. 이상적으로, 단계 4 및 5는 동일한 프로그래밍 스테이션에서 동시에 수행된다. 단계 4는 유효한 인증 칩을 민들지만, 거기에 0이외의 초기값을 로드하지 못한다. 이는 칩의 프로그래밍이 일련의 소모품들의 생산라인과 일치되도록 한다. 단계 5는 여러번 실행되어 매번 다른 상태 데이터값 및 AccessMode값을 설정할 수 있음에도 불구하고, 한번 실행되어 남아있는 모든 상태 데이터값 및 남아있는 모든 AccessMode값을 설정한다. 예컨대, 물리적인 소모품이 생성됨에 따라 인증 칩의 배치넘버 및 시리얼넘버가 생성되는 곳에 생산라인이 만들어질 수 있다. 만약 상태 데이터가 실질적으로 다른 공장에서 로드되면 일치시키는것이 더욱 어려워진다.
단계 5 프로세스는 상기 칩이 유효한 소모품 칩인지 여부를 확인하기 위해 먼저 체크하는 것을 포함하는데, 이는 인증 칩으로부터 데이터를 모으기 위한 RD, 그 다음에 초기 데이터값의 WR 및, 그리고나서 새로운 데이터값을 영구적으로 설정하는 SAM을 포함한다. 상기 단계들은 하기에 개설한다:
IsTrusted=GIT[]
If(IsTrusted), exit with error(wrong kind of chip!)
Call RND on a valid System chip to get a valid input pair
Call RD on chip to be programmed, passing in valid input pair
Load X(256 bit register)with results from a RD of Authentication Chip
Call TST on valid System chip to ensure X and consumable chip are valid
If(TST returns 0), exit with error(wrong consumable chip for system)
Set bits of X to initial state values
WR[X]
Load Y(32 bit register)with 0
Set bits of Y corresponding to Access Modes for new state values
SAM[Y]
물론 단계 4 및 5가 동일한 프로그래밍 스테이션에서 연속적으로 일어난다면 단계 1~7의 검증은 이루어질 필요가 없다. 그러나, 단계 5가 단계 4와 구별되는 프로그래밍 공정으로 실행되면 다른 모든 상황에서 상기 검증이 이루어진다. 만약 상 기와 같은 인증 칩들을 이때 분실한다면, 이들은 이미 특정 소모품 용도로 프로그램된다. 공격자는 분실되었던 칩을 클론 소모품에 위치시킬 수 있다. 이러한 도둑질은 분실된 칩의 개수로 클론된 제품의 수를 제한한다. 한번의 도둑질은 클론 생산자에게 비용절감산업을 제공할만큼 충분히 일정한 공급이 될 수 없다. 상기 칩들의 다른 용도는 공격자들이 부분적인 선택 텍스트 공격 또는 일방향성 무차별 공격을 실행하기 위하여 각각 인증 칩을 가지고 있는 소모품들을 동일한 수로 구매하는 것을 막아는 것이다. 만약 상기와 같은 공격이 있다 하더라도 키(key)들의 특별한 보안침해는 없다.
제조
상기 인증 칩의 회로는 물리적인 공격을 견뎌낼 수 있어야 한다. 제조 구현 가이드라인의 요약이 제시되어있고, 칩의 물리적인 방어(공격에 따른)의 상세한 설명이 뒤따른다.
제조 가이드라인
하기는 제조자의 관점에서 인증 칩을 구현하기 위한 일반적인 가이드라인이다:
표준 프로세스
최소한의 크기(가능하다면)
클록 필터
소음 생성기(Noise Generator)
탬퍼 방지 및 검출회로
탬퍼 검출로 보호된 메모리
프로그램 코드를 로딩하기 위한 회로의 부트(boot)
키 테이타 경로를 위하여 FETs의 특별 구현
가능한 곳에서 폴리실리콘층에 데이터 접속
OverUnderPower 검출 유닛
비테스트 회로(No test circuitry)
표준 프로세스
인증 칩은 플래시(Flash)와 같은 표준 제조 프로세스로 구현되여야 한다. 여기에는 하기 사항들이 필요하다:
큰 범위의 제조장소 옵션의 허용.
잘 정의되고 잘 알려진 기술의 이용.
비용 절감.
표준 프로세스가 여전히 물리적인 보호 메카니즘을 허용함에 주의한다.
최소한의 크기
인증 칩 (53)은 낮은 비용의 소모품용 인증 메카니즘에 포함되기 위하여 낮은 제조비용이 들어야 한다. 따라서 칩의 크기를 합리적으로 가능한한 작게 하는 것이 바람직하다. 각 인증 칩은 802비트의 비휘발성 메모리를 필요로 한다. 또한 상기 스토리지는 최적화된 HMAC-SHA1이 1024비트일것을 요구한다. 칩의 나머지(상태 머신, 프로세서, CPU 또는 프로토콜 3을 구현하기위해 선택된 모든 것)는 트렌지스터의 개수를 줄여서 칩당 가격을 최소화하기 위해서 최소한으로 유지되어야 한다. 비밀키 정보를 프로세스하거나 키에 관한 정보를 밝힐 수 있는 회로부분 또한 축소되어야 한다(특정 데이터 경로를 위한 비플래싱 CMOS 참조).
클록필터
상기 인증 칩 회로는 특정 클록(clock) 속도범위 내에서 작동하도록 디자인된다. 사용자가 직접적으로 클록 신호를 제공하기 때문에, 공격자는 프로세싱중의 특정 시기에 회로내에서 레이스조건(race condition)을 유발하기위한 시도를 할 수 있다. 이 예로서 높은 클록 스피드(회로가 디자인된것 보다 높은)가 XOR이 정상적으로 작동하지 못하도록 할 수 있으므로 2개의 입력중에 항상 제 1 가 복귀될 수 있다. 이러한 유형의 일시적 장애공격은 비밀키 정보를 복구하는데 매우 효과적일 수 있다. 여기에서 알 수 있는 것은 입력 클록신호는 신뢰할 수 없다는 것이다. 입력 클록신호를 신뢰할 수 없기 때문에, 최대 주파수까지 작동시키는 것은 제한되어야 한다. 이는 다양한 방법들로 이룰 수 있다. 클록신호를 필터링하는 한 방법은 지연될때까지 엣지(edge)를 통과하는 엣지 검출 유닛을 이용하는 것으로, 이는 입력클록신호가 차례대로 통과할 수 있도록 한다. 도 174는 클록필터 내부의 클록신호의 흐름을 나타낸다. 상기 지연은 최대 클록속도가 특정 주파수가 되도록 설정되어야 한다(예컨대 약 4MHz). 상기 지연은 프로그래밍할 수 없고, 고정되는 것임을 주의한다. 상기 필터된 클록신호는 필요하다면 내부적으로 더욱 세분화된다.
잡음 발생기
각 인증 칩은 계속적으로 회로잡음을 발생시키는 잡음 발생기를 포함하여야 한다. 상기 잡음은 다른 전자기적 송출이 칩의 정상적인 활동을 하는 것을 방해하고, 잡음을 Idd신호에 부가한다. 송출 파장의 길이 때문에 인증 칩에서 잡음발생기를 어디에 위치시킬것인가는 중요하지 않다. 잡음발생기는 탬퍼 방지 및 검출회로에 대한 의사-랜덤 비트의 소스로서 매 클록싸이클마다 다중 상태가 변하는 전기적인 잡음을 발생시킨다. 잡음발생기의 간단한 구현은 0아닌 값이 시드(seed)된 64비트 LFSR이다. 상기 잡음 발생기에 사용되는 클록은 가능한 큰 잡음을 만들기 위하여 칩의 최대 클록율로 구동되어야 한다.
탬퍼 방지 및 검출회로
상기 인증 칩에 대한 물리적 공격을 테스트하고 예방하기 위해 일련의 회로가 필요하다. 그러나, 실질적으로 공격으로 검출되는 것은 고의적인 물리적 공격이 아닐수도 있다. 따라서 인증 칩에서 하기와 같은 두가지 유형의 공격을 구별하는 것이 중요하다:
- 물리적인 공격이 발생하였음을 확신할 수 있는 경우.
- 물리적인 공격이 발생하였음을 확신할 수 없는 경우.
상기 두가지 유형의 검출은 검출결과에 따라 무엇을 실행할것인지에 따라 다르다. 처음의 경우에 있어서, 진정한 물리적인 공격이 발생하였음을 확신할 수 있는 경우에, 플래시 메모리의 키정보를 삭제하는 것이 바람직한 행동이다. 제 2 경우에 있어서, 공격이 있었는지 여부를 회로가 확신할 수 없다면, 확실히 뭔가가 여전히 잘못되어 있다. 행동을 취해야 하지만, 상기 행동은 비밀키 정보를 삭제하는 것은 아니다. 제 2 경우에 취해야할 적합한 행동은 칩 리셋(RESET)이다. 검출된 것이 칩을 영구적으로 손상시키는 공격이었다면 동일한 상황은 다음번에도 발생하고, 칩은 다시 리셋할 것이다. 다른 한편으로, 만약 검출된 것이 칩의 일반적인 작동환경의 일부였더라도, 리셋은 키를 손상시키지 않을 것이다.
회로가 그에 관한 정보를 가질 수 없는 경우의 한 예는 파워 글리치(power glitch)이다. 상기 글리치는 키에 관한 정보를 밝히고자 하는 의도적인 공격일 수 있다. 그러나 이는 잘못된 접속 또는 단지 전원을 끄기 시작한 결과일 수 있다. 따라서 단지 칩을 리셋하고 키를 지우지 않는 것이 가장 좋다. 만약 칩의 전원이 꺼지더라도 아무 것도 잃지 않는다. 만약 시스템이 잘못되어 리셋이 계속된다면 소비자는 시스템을 수리해야 한다. 양쪽의 경우에 소모품은 여전히 손대지 않은 상태이다. 회로가 그에 관한 정보를 가질 수 있는 경우의 좋은 예는 칩 내에서 데이터 라인을 자르는 것이다. 만약 이러한 공격이 어느정도 검출된다면, 이는 칩이 잘못되었거나 또는 공격에 의한 결과이다. 두 경우 다 비밀 정보를 삭제하는 것이 바람직하다.
결과적으로 각 인증 칩은 도면에 도시한 바와 같이 하나는 확정된 공격용, 다른 하나는 가능한 공격용의 2개의 탬퍼 검출 라인을 가져야 한다. 많은 수의 탬퍼 검출 테스트 유팃들이 상기 탬퍼 검출 라인에 결합하여 각각이 다른 형태의 탬퍼링을 테스트한다. 부가적으로 우리는 탬퍼 검출 라인과 회로 그 자체가 탬퍼될수 없음을 확신하고싶어한다.
탬퍼 검출 라인의 한 끝에 의사 랜덤 비트(일반적으로 작동하는 회로에 비하여 고속으로 클록킹한다)의 소스가 있다. 상기에 기재된 잡음발생기 회로가 적당한 소스이다. 생선된 비트는 서로 다른 경로-하나는 원래 데이터, 다른 하나는 상기 데이터의 역을 운반한다-를 통하여 지나간다. 이러한 비트들을 나르는 와이어(wire)들은 일반 칩 회로 층상(예컨대 메모리 또는 키 조작처리 회로 등)에 있다. 상기 와이어는 또한 랜덤 비트 생성기를 둘러싸야 한다. 상기 비트들은 XOR게이트를 통하여 많은 장소들에서 재결합된다. 만약 상기 비트들이 다르다면(그래야만 한다), 결과는 1이고, 이는 특정 유닛으로 사용된다(예컨대, 메모리 읽기로부터의 각 결과비트는 상기 비트값과 AND연산 되어야 한다). 상기 라인들은 최종적으로 플래시 메모리 삭제회로로 모이는데, 여기에서 XOR로부터의 0에 의하여 완벽한 삭제가 트리거(trigger)된다. 많은 트리거들이 상기 라인에 부착되어, 각각 칩에대한 물리적 공격을 검출한다. 각 트리거는 GND에 부착된 규모가 큰 nMOS 트렌지스터를 갖는다. 탬퍼 검출 라인은 물리적으로 상기 nMOS 트랜지스터를 통과한다. 만약 테스트가 실패하면, 탬퍼 검출 라인은 0이 된다. 그리하여 상기 XOR 테스트가 이번 클록싸이클 또는 다음번(평균적으로)에 실패하면, 칩을 리셋하거나 삭제한다. 도 175는 테스트의 관점에서 탬퍼 검출 라인의 기본적인 원리 및 삭제 또는 리셋 회로소자에 연결된 XOR을 설명한다.
도 176의 규모가 큰 nMOS 트랜지스터 배치에서 설명된 것과 같이, 각 테스트에서 상기 탬퍼 검출 라인은 출력 트랜지스터의 드레인(drain)을 통해야 한다. 탬퍼 검출 라인을 파괴할 수 없는데, 탬퍼 검출 라인을 파괴하면 랜덤 소스로부터 1들 및 0들의 흐름이 멈추기 때문이다. 그렇게 되면 XOR테스트는 실패한다. 상기 탬퍼 검출 라인은 물리적으로 각 테스트를 통과하기 때문에, 탬퍼 컴출 라인을 파괴 하지 않고 특정 테스트를 제거할수 없다. 공격 기회를 줄이기 위해서 XOR은 다양한 위치에서 탬퍼 검출 라인을 따라 값을 취하는 것은 중요하다. 도 177은 칩의 서로 다른 부분에서 사용되는 탬퍼 검출 라인으로부터 다중의 XOR을 취하는 것을 나타낸다. 이러한 XOR 각각은 각 유닛 또는 서브유닛에서 사용될 수 있는 ChipOK 비트를 생성할 수 있다.
샘플 용법은 각 유닛이 매 싸이클마다 주어진 ChipOK 비트와 AND연산되는 OK비트를 갖는 것이다. 리셋시 OK 비트에 1이 로드된다. 만약 OK가 0이면, 그 유닛은 다음 리셋시까지 패일(fail)된다. 만약 상기 탬퍼 검출 라인이 정상적으로 작동한다면, 상기 칩은 리셋되거나 모든 키 정보가 삭제된다. 만약 리셋 또는 삭제 회로가 파괴되었다면, 상기 유닛은 작동하지 않게되고, 그리하여 공격자를 방해한다. 리셋과 라인삭제 및 관련된 회로의 목적지는 매우 문맥 의존적이다. 개별적인 탬퍼 테스트와 매우 동일하게 보호될 필요가 있다. 만약 공격자가 간단하게 리셋 회로로 통하는 와이어를 자를 수 있다면 리셋 펄스를 만들 포인트가 없다. 실제 구현은 리셋으로 무엇이 제거되고, 어떻게 이런 아이템들이 제거되는지에 상당부분 의존한다. 마지막으로, 도 178은 어떻게 탬퍼 라인이 칩에서 잡음 발생기를 커버는지 보여준다. 상기 발생기와 NOT게이트는 같은 레벨이지만, 탬퍼 검출 라인은 상기 발생기의 위에 있는 레벨에서 동작한다.
탬퍼검출로 보호되는 메모리
비밀 정보나 프로그램 코드를 플래시 메모리에 저장하는 것은 간단하지 않다. 플래시 메모리 및 RAM은 프로그램 코드의 특정 비트 또는 키 정보를 수정(또는 설정)하려고 하는 공격자로부터 보호되어야 한다. 사용할 메카니즘은 상기 탬퍼 검출 회로(상기에서 설명되었음)에 사용되도록 적응되어야 한다. 상기 솔루션의 제 1부분은 탬퍼 검출 라인이 상기 플래시 또는 RAM 비트 각각을 직접 통과하는지 확인하는 것이다. 이는 공격자가 플래시 또는 RAM의 내용을 알아낼 수 없음을 보증한다. 피복 와이어의 브리치(breach)는 탬퍼 검출 라인 내에서의 브레이크(break)이다. 상기 브리치는 삭제 신호가 세트되도록 하고, 그리하여 메모리의 모든 내용을 삭제한다. 탬퍼 검출 라인에 대한 고주파 잡음은 또한 수동감시(passive observation)를 모호하게 만든다.
플래시를 위한 상기 솔루션의 제 2 부분은 다중레벨의 데이터 스토리지를 이용하는 것으로, 단지 유효한 비트 표현을 위한 다중레벨의 집합을 사용하는 것이다. 일반적으로 다중레벨 플래시 스토리지가 사용될때 하나의 부동게이트(floating gate)는 한 비트 이상을 갖는다. 예컨대 4-전압-상태 트랜지스터는 2개의 비트를 나타낼 수 있다. 최소 및 최대접압이 각각 00 및 11을 나타낸다면, 두개의 중간 전압은 01 및 10을 나타낸다. 인증 칩에서 두개의 중간전압이 하나의 비트를 나타내는데 사용할 수 있고, 두개의 극한값은 무효 상태로 간주할 수 있다. 만약 공격자가 게이트의 회로를 닫거나 자르므로써 한 비트의 상태를 한 방식 또는 다른 방식으로 강제한다면 무효전압이(그리고 그 결과 무효 상태가) 된다.
RAM을 위한 상기 솔루션의 제 2 부분은 패리티 비트를 사용하는 것이다. 리지시터의 데이터 부분은 패리티 비트(이는 공격 후에는 일치하지 않는다)에 따라서 체크할 수 있다. 따라서, 플래시 및 RAM으로부터의 비트들은 통상적인 탬퍼 검출 라인에 연결된 테스트 유닛의 수(비트당 하나)에 의하여 확인된다. 상기 탬퍼 검출 회로는 데이터가 통과하는 최초의 회로가 된다(따라서 공격자가 데이터 라인을 차단하지 못하게 한다).
프로그램 코드를 로드하기 위한 부트회로
ROM은 테스트할 수 없는 방법(non-testable way)에 의하여 변경되므로, 프로그램 코드들은 ROM 대신에 다중레벨 플래시에 보관되어야 한다. 따라서 부트 메카니즘은 프로그램 코드를 플래시 메모리에 로드할 필요가 있다(플래시 메모리는 제조후에 불안정한 상태에 있다). 부트 회로는 ROM에 있어서는 안되며, 작은 상태머신(state-machine)으로 충분하다. 그렇지 않으면 상기 부트 코드는 검출 불가능한 방법으로 수정될 수 있다. 부트 회로는 모든 플래시 메모리를 삭제하고, 삭제되었는지 확인 체크한 다음 프로그램 코드를 로드한다. 플래시 메모리는 프로그램 코드를 로드하기 전에 반드시 삭제되어야 한다. 그렇지 않으면 공격자는 상기 칩을 부트 상태로 만들수 있고, 그리고 나서 존재하는 키를 간단히 추출했던 프로그램 코드를 로드할 수 있다. 상태머신은 또한 새로운 프로그램 코드를 로딩하기 전에 모든 플래시 메모리가 삭제되었는지 확인 채크(공격자가 삭제 라인을 차단하지 않았는지 확인하기 위하여)하여야 한다. 프로그램 코드의 로딩은 비밀 정보(키와 같은)가 로드될 수 있기 전에 안전한 프로그래밍 스테이션에 의하여 이루어져야 한다.
키 테이타 경로를 위한 FETs의 특별 구현
CMOS 인버터(nMOS 트랜지스터와 결합된 pMOS 트랜지스터를 포함한다)의 경우에 있어서 FET 구현의 일반적인 상태는 도 179에 나타내었다. 천이(transition)시 에 짧은 시간 동안 nMOS 트랜지스터 및 pMOS 트랜지스터는 둘다 중간 저항(intermediate resistance)을 갖는다. 그 결과 기준전력(power-ground) 단락이 전류를 일시적으로 증가시키고, 상당부분의 전류가 CMOS장치에서 소모된다. 단락되는 동안 적은 양의 적외선이 방출되는데, 이는 실리콘 기판을 통해서 불 수있다(적외선은 실리콘을 통과한다). 적은 양이 빛이 트랜지스터 게이트 커패시턴스 및 전송 라인 커패시턴스의 충전 및 방전시에 또한 방출된다.
비밀 키 정보를 조작하는 회로에 있어서, 상기 정보는 숨겨져야 한다. 따라서 대안적인 비플래싱 CMOS 구현은 키 또는 키에 기초하여 부분적으로 계산된 값을 조작하는 모든 데이터 경로에 사용되어야 한다. 겹쳐지지 않은 클록 φ1 및 φ2의 사용은 비플래싱 메카니즘을 제공할 수 있다. φ1은 nMOS 트랜지스터의 2번째 게이트에 연결되어 있고, φ2는 pMOS 트랜지스터의 2번째 게이트에 연결되어 있다. 천이는 오직 클록과 공동으로 발생한다. φ1 및 φ2는 겹쳐지지 않았기 때문에 pMOS 및 nMOS 트랜지스터는 동시에 중간 저항을 갖지 않는다. 그 구성은 도 180에 나타내었다. 결국, 통상적인 CMOS 인버터는 크리티컬 비플래싱 CMOS 구성요소 근처에 위치할 수 있다. 이러한 인버터는 상기의 탬퍼 검출 라인으로부터 입력 신호를 얻는다. 탬퍼 검출 라인은 통상적인 운영회로보다 몇배는 빠르기 때문에, 단위 효과는 각 비휘발성 CMOS 구성요소 다음으로 고율의 광-버스트(light-burst)이다. 밝은 빛은 주변의 미광을 관측하는 것을 압도하기 때문에, 관측자는 칩 내에서 스위칭 동작이 올바르게 작동했는지 알아낼 수 없다. 이러한 일반적인 CMOS 인버터는 또한 효과적으로 회로 잡음의 양을 증가시키고, SNR을 감소시키며 유용한 EMI를 감지할 수 없다.
비플래싱 CMOS를 사용하면 하기와 같은 부작용이 발생한다:
클록싸이클당 클록의 상승시간이 2배가 되기 때문에 칩의 유효속도가 감소한다. 이는 인증 칩의 문제가 아니다.
비플래싱 CMOS로부터의 전류의 양이 감소한다(단락회로가 발생하지 않기 때문). 그러나 이는 통상적인 CMOS 인버터를 사용한데 따른 오프셋이다.
클록의 라우팅이 칩의 영역을 넓히는데, 특히 서로 다른 수준의 전파를 준비하는데 다양한 버전의 φ1 및 φ2가 필요하기 때문이다. 칩영역은 일반적인 구현시보다 두배이다.
인증 칩의 비플래싱 부분의 디자인은 일반적인 CMOS 디자인과 같이 했을때 조금 더 복잡하다. 특히 평균적인 셀 구성요소는 사용될 수 없는데, 이는 이러한 영역들을 특별 주문으로 만든다. 특히 전체 칩을 이러한 방식으로 보호할 필요가 없을 때, 인증 칩만큼 작다는 것은 문제가 되지 않는다.
가능한 곳에서 폴리실리콘층에 데이터 접속
가능하다면, 키 또는 비밀 데이터가 흐르는 것에 따른 접속은 폴리실리콘층으로 만들어져야한다. 필요하다면, 이들은 금속 1일 수 있으나 톱 메탈층이어서는 안된다(탬퍼 검출 라인을 포함한다).
OverUnderPower 검출 유닛
각 인증 칩은 파워서플라이(Power Supply)공격을 막기 위하여 OverUnderPower 검출 유닛을 필요로한다. OverUnderPower 검출 유닛은 파워 글리치 를 검출하고 기준전압(Voltage Reference)을 기준으로 전력수준이 허용범위 내인지 확인하기 위하여 테스트한다. 상기 유닛은 하나의 기준전압 및 두개의 컴패어레이터(comparator)를 갖는다. 상기 OverUnderPower 검출 유닛은 리셋 탬퍼 검출 라인관 연결되어 있어서, 트리거 되었을때 리셋을 일으킨다. OverUnderPower 검출 유닛의 부작용은 파워를 끄는 동안 전압이 떨어질 때 리셋이 트리거되고, 작업리지스트리들이 지워진다는 것이다.
비테스트 회로
인증 칩상의 하드웨어 테스트는 쉽게 취약성을 설명할 수 있다. 그 결과, 인증 칩은 BIST를 포함하거나 경로를 스캔할 수 없다. 따라서, 인증 칩은 외부 테스트 벡터들을 이용하여 테스트될 수 있다. 이는 인증 칩이 복잡하지 않기 때문에 가능하다.
ROM 판독
이러한 공격은 어드레스 기록가능한(addressable)ROM에 저장된 키에 따른다. 각 인증 칩은 어드레스 기록가능한 ROM이 아니라 내부 플래시 메모리에 그 인증 칩을 저장하기 때문에 이러한 공격은 적절하지 않다.
칩의 리버스 엔지니어링
칩의 리버스 엔지니어링은 인증의 안전성이 오직 알고리즘에만 달려있을때 유효하다. 그러나 본 발명의 인증 칩은 비밀 키에 의존하고 알고리즘의 비밀성에 의존하지 않는다. 반대로 본 발명의 인증 알고리즘은 공개되어 있고, 어느 경우에나 많은 양의 소모재의 공격자는 칩의 내부의 세부적인 계획을 얻을 수 있다고 가 정할 수 있다. 이러한 견지에서 칩의 리버스 엔지니어링 자체는 저장된 데이터와 반대로 위협을 내포하지 않는다.
인증과정의 침해
이러한 공격에는 여러 유형이 있으며, 성공확률도 각각 다르다. 모든 경우에 있어서, 클론 생산자가 시스템 및 소모품 디자인 모두에 액세스한다고 할 수 있다. 공격자는 시스템이 인증 코드를 만드는 대신 유효한 코드를 되돌려주도록 하기 위하여 칩을 설정하려고 시도할 수 있다. 이러한 공격은 두가지 이유때문에 불가능하다. 제 1 이유는 시스템 인증침과 소모품 인증 칩은 물리적으로 동일하지만 서로 다르게 프로그램된다는 것이다. 특히 RD 오피코드 및 RND 오피코드는 같고, WR 및 TST 오피코드도 같다. 시스템 인증 칩은 모든 요청이 RND의 요청으로 해석되기 때문에 RD명령을 할 수 없다. 상기 공격이 실패하는 제 2 이유는 시스템으로부터 시스템 및 소모품 인증 칩으로 서로 분리된 시리얼 데이터 라인이 제공된다는 것이다. 결과적으로 칩은 무엇이 전송되고 있는지 또는 다른 칩으로부터 무엇을 받았는지 알 수 없다. 만약 공격자가 WR 명령(남아있는 소모품을 감소시킨다)을 무시하는 클론 칩을 설정한다면, 프로토콜 3은 다음의 RD가 WR이 없었다는 것을 검출하는 것을 확인한다. 따라서, 시스템은 소모품을 더이상 사용하지 않게 되고, 공격자는 방해받는다. 만약 공격자가 인증 전에 접촉 상실을 시뮬레이트하더라도, 인증이 일어나지 않았으므로 소모품의 사용되는 일은 일어나지 않기때문에 역시 마찬가지이다. 따라서, 공격자는 클론 소모품이 받아들여지도록 하기 위하여 시스템을 수정하는 것은 제한된다.
시스템의 수정
수정의 가장 간단한 방법은 시스템의 인증 칩을 TST에 대한 요청 각각에 대하여 간단하게 성공으로 보고하는 것으로 교체하는 것이다. 이는 인증시마다 몇번이고 TST를 요청하는 시스템에 의하여 방해되는데, 처음 몇번은 거짓값(false value)을 제공하고 TST가 실패하기를 기대한다. TST에 대한 최종 요청은 성공할 것으로 예측된다. TST에 대한 거짓 요청의 수는 RD로부터 또는 시스템 클록으로부터 반환되는 일부분에 의하여 결정될 수 있다. 불행하게도, 공격자는 간단하게 시스템에 리와이어(rewire)할 수 있으므로 새로운 시스템 클론 인증 칩 53은 소모품 칩 또는 클록으로부터 반환되는 결과를 모니터할 수 있다. 클론 시스템 인증 칩은 모니터한 값이 TST 함수에 존재하면 성공을 반환한다. 그리고 나서 클론 소모품은 클론 시스템칩이 그 값을 유효한 값으로 정의한 것처럼 RD에 대한 해쉬 결과로서 특정 값을 반환한다. 따라서 리와이어하는 공격은 모든 시스템이 아니라 오직 리와이어했던 시스템에 대해서만 유효하기 때문에, 시스템이 시스템 인증 칩을 여러번 요청하는 시점이 없다. 시스템에 대한 동일한 유형의 공격은 시스템 ROM을 바꿔치기하는 것이다. 상기 ROM 프로그램 코드는 변경될수 있어서, 인증은 발생하지 않는다. 시스템이 구매자의 손에 있기 때문에 이것에 관해서 이루어질 수 있는 것이 없다. 물론 이것은 보증할 수 없지만, 구매자는 만약 클론 소모품이 정품보다 훨씬 싸고 쉽게 구할수 있다면 바꿀 가치가 있다고 생각할 수 있다.
따라서, 시스템/소모품 생산자는 어떻게 이러한 특성의 공격이 어느 정도인지 결정해야한다. 이러한 연구는 시스템 및 소모품의 주어진 가격구조, 시스템 서 비스 싸이클, 물리적으로 수정을 통해 소비자에게 유리한점 및 소비자가 수정받기위해 어디로 가야하는지를 포함해야 한다. 시스템을 수정하는 제한된 경우는 클론 제조자가 클론 소모품을 사용하는 완벽한 클론 시스템을 제공하는 것이다. 이는 특허의 간단한 경쟁 또는 침해이다. 양쪽의 경우 다 인증 칩의 범위를 넘어서고, 기술이나 클론된서비스에 의존한다.
전통적인 프로빙에 의해 칩 작동의 직접 관찰
칩 작동을 보기 위하여 칩은 작동되어야 한다. 그러나 탬퍼 방지 및 검출 회로는 키를 처리하거나 유지하는 칩의 부분을 둘러싼다. 탬퍼 방지 라인을 통하여 상기 부분을 보는 것은 불가능하다. 탬퍼 방지층을 지나서 칩을 슬라이스하면 탬퍼 검출 라인이 파괴되어서, 시동시 모든 키값이 삭제되기 때문에, 공격자가 간단하게 이렇게 할 수 없다. 인증 칩을 통해 다중 유닛들로 끼워들어간 다중 ChipOK 비트들(이때 모두 0)이 칩의 일반적인 연산 회로를 멈춰버리기 때문에 간단하게 제거 회로를 파괴하는 것은 충분하지 않다. 따라서 공격을 위한 칩을 설정하기 위하여 공격자는 탬퍼 검출 라인을 제거하고, 플래시 메모리의 삭제를 막고, ChipOK 라인에 따라 구성요소들을 어느정도 리와이어할 필요가 있다. 만약 이러한 모든 것이 이루어지면, 이 단계에서 칩을 슬라이스하는 것은 키를 갖고 있는 비휘발성 메모리에 있어서 충전패턴을 파괴하여 그 과정을 무효화시켜버린다.
비휘발성 메모리의 직접 관찰
만약 인증 칩이 슬라이스되어 이들을 방전시키지 않아도 플래시 메모리의 플로팅 게이트가 노출되면 키들은 STM 또는 SKM을 사용하여 직접 관찰할 수 있다. 그 러나 게이트를 방전시키지 않고 이 수준으로 칩을 슬라이스 하는것은 불가능하다. 습식 에칭, 플라즈마 에칭, 이온 밀링 또는 화학 기계적인 폴릿이(polishing)이 플로팅 게이트에 존재하는 작은 전하를 방전시킨다. 이것은 통상적인 플래시 메모리에 적용되고, 심지어 다중-레벨 플래시 메모리에도 적용된다.
상태 변화에 따른 광 버스트(light burst)의 관찰
비밀 키 정보를 다루는 회로의 모든 부분들은 상기에 기재된 비플래싱 CMOS 내에 구현된다. 이는 광 버스트의 상당수가 방사되는 것을 막는다. 비플래싱 CMOS에 근접하여 위치한 일반적인 CMOS 인버터는 커패시터 충전 또는 방전에 의한 미미한 방사를 감춘다(hide). 상기 인버터는 탬퍼 검출 회로에 접속되어 있어서, 이것들은 비플래싱 CMOS 상태 변화에 따라 상태를 여러번 바꾼다.
EMI의 모니터링
상기 잡음 발생기는 회로의 잡음을 발생한다. 이러한 잡음은 칩의 일반적인 활동에 의한 다른 전자기적인 방사를 간섭하여 내부적인 데이터 전달의 중요한 판독을 방해한다.
I
dd
변동의 관찰(viewing)
이러한 종류의 공격에 대한 솔루션은 Idd 신호에서 SNR을 감소시키는 것이다. 이는 회로잡음을 증가시키고, 신호의 양을 줄이는 것으로 달성할 수 있다. 잡음 생성기 회로(EMI 공격에 대한 방어로서 작용한다)는 또한 각 싸이클에서 Idd 신호에 있어서 의미있는 정보를 혼란스럽게 하기에 충분한 상태 변화를 만들어낸다. 부가적 으로 칩의 키 이동 데이터 경로의 특별한 비플래싱 CMOS 구현은 상태변화시 발생한 전류가 흐르지 않게 한다. 이는 신호의 양을 줄이는데 유효하다.
차동 고장 분석(Differential Fault Analysis)
차동 고장 비트 에러는 이온화, 마이크로파 방사 및 환경 스트레스에 의하여 목표 이외의 방식(non-targeted fashion)으로 도입된다. 이러한 유형의 가장 효과적인 공격은 플래시 메모리 또는 RAM 내에서의 변화이다(무효 상태 또는 배드 패리티를 초래한다). 탬퍼 검출 회로를 통해서 검출되는 무효 상태 및 배드 패리티는 키를 삭제하게 한다. 탬퍼 검출 라인은 키 조작 회로를 둘러싸기 때문에 키 조작 회로에서 발생한 에러는 탬퍼 검출 라인에 투영된다. 만약 탬퍼 검출 라인이 영향을 받으면, 칩은 전원을 끌때까지 계속해서 리셋되거나 키를 삭제하므로 공격을 소득없게 만든다. 목표 이외의 공격에 의존하여 "칩의 정확한 곳에 정확한 방식으로 영향을 받는것"을 기대하는 것 보다, 공격자가 목적하는 고장을 유발시키는 편이 좋다(오버라이트 공격 또는 게이트 파괴공격과 같은). 이러한 고장을 목표로 하는 공격에 관한 정보는 하기 관련된 부분을 참고한다.
클록 글리치 공격
클록 필터(상기에 기재된)는 클록 글리치 공격의 가능성을 제거한다.
전원 공격(power supply attack)
상기 OverUnderPower 검출 유닛(상기에 기재된)은 전원 공격의 가능성을 제거한다.
ROM 오버라이트
인증 칩은 프로그램 코드, 키 및 비밀정보를 ROM이 아니라 플래시 메모리에 저장한다. 따라서 이러한 공격은 불가능하다.
EEPROM/플래시 수정
인증 칩은 프로그램 코드, 키 및 비밀 정보를 플래시 메모리에 저장한다. 그러나 플래시 메모리는 두개의 탬퍼 방지 및 검출 라인으로 둘러싸여있다. 만약 이 라인들이 파괴되면(게이트의 파괴도중에) 상기 공격은 전원을 켤때 검출되므로, 칩이 리셋되거나(계속해서), 플래시 메모리에서 키가 삭제된다. 그러나 만약 공격자가 어느정도 플래시의 비트에 액세스 가능하거나 특정 비트를 갖고 있는 게이트를 파괴 또는 쇼트 아웃시킬 수 있다면, 이는 상기 비트가 전하가 없거나 전하가 꽉 차있을 것이다. 이것들은 어느쪽이건 인증 칩의 다중 레벨 플래시 메모리의 용도로는 무효인 상태이다(오직 중간상태만이 유효하다). 상기 데이터값이 플래시로부터 전달될 때 검출 회로는 탬퍼 검출 라인이 트리거되어 플래시 메모리에 남아있는 것들을 삭제하고 칩을 리셋하도록 한다. 따라서 EEEPROM/플래시 수정 공격은 효과가 없다.
게이트 파괴 공격
게이트 파괴 공격은 칩이 작동하는 동안 정보가 드러내도록 하나의 게이트를 수정하는 공격자의 능력에 따른다. 그러나 비밀 정보를 처리하는 회로는 하나 또는 두개의 탬퍼 방지 및 검출 라인으로 둘러싸여있다. 만약 이러한 라인들이 파괴되면(게이트 파괴도중에), 상기 공격은 전원을 켤때 검출되므로, 칩이 리셋되거나(계속해서), 플래시 메모리에서 키가 삭제된다. 이러한 종류의 공격을 하기 위 해서 공격자는 목표로 할 게이트를 결정하기 위하여 먼저 칩을 리버스 엔지니어링하여야 한다. 일단 목표 게이트의 위치가 결정되면, 공격자는 덮어싸고있는 탬퍼 검출 라인을 파괴하고, 플래시 메모리의 삭제를 막고, ChipOK 라인에 의존하는 구성요소들을 어느정도 리와이어한다. 회로를 리와이어하는 것은 칩을 슬라이스 하지 않고는 할 수 없는데, 만약 그렇게 된다면 이 레벨로 칩을 슬라이스하는 것은 키를 보유하고 있는 비휘발성 메모리에서 전하 패턴을 파괴할 것이므로 상기 과정은 효과가 없다.
오버라이트 공격
오버라이트 공격은 키의 개별 비트를 전의 값을 알지 못하고 설정하는 것에 의존한다. 이것은 전통적인 프로빙 공격과 같이 프로핑에 의존하고, 게이트 파괴 공격과 같이 게이트 파괴에 의존한다. 이러한 공격 모두 다(각각의 부분에 설명된 바와 같이) 탬퍼 방지 및 검출 라인 및 ChipOK 라인을 사용하기 때문에 성공할 수 없다. 그러나 만약 공격자가 어느정도 플래시의 비트에 액세스 가능하고, 또한 특정 비트를 보유하는 게이트를 쇼트 아웃(short out)할 수 있다면, 이는 상기 비트가 전하가 없거나 전하가 꽉 차있을 것이다. 이것들은 어느쪽이건 인증 칩의 다중 레벨 플래시 메모리의 용도로는 무효인 상태이다(오직 중간 상태만이 유효하다). 상기 데이터값이 플래시로부터 전달될 때 검출 회로는 탬퍼 검출 라인이 트리거되어 플래시 메모리에 남아있는 것들을 삭제하고 칩을 리셋하도록 한다. 같은 방법으로, RAM으로부터 읽혀지는 탬퍼값에 대한 패리티 체크는 탬퍼 검출 라인의 삭제가 트리거되도록 한다. 따라서 오버라이트 공격은 효과가 없다.
메모리 잔류자기(remanence) 공격
인증 칩을 통하여 작동하는 레지스터나 RAM은 파워가 제거되어도 인증키를 보유하고 있는 부분일 수 있다. 작동하는 레지스터나 RAM은 파워가 제거되고 나서도 어느정도 상기 정보를 보유한다. 만약 칩이 슬라이스되어 레지스터/RAM이 노출되면, 이것들을 방전시키지 않고서도 STM을 사용하여 상기 데이터를 직접 관찰할 수 있다. 제 1 방어는 상기 파워 글리치 공격에 대한 방어의 기재에서 찾을 수 있다. 파워가 제거되면, 리셋시 메로리가 깨끗하게 지워지는 것 처럼 모든 레지스터 및 RAM은 깨끗하게 지워진다. 그리고 나면 상기 공격은 플래시 메모리를 읽는 것 보다도 더 성공하기 어려워진다. RAM의 전하는 플래시 메모리보다 쉽게 소실된다. RAM을 드러내기 위해 칩을 슬라이스 하는 것은 상기 전하들을 잃게 만든다(만약 메모리가 리프래쉬 되지 않았거나 슬라이스하는데 시간이 걸려서 이것들이 소실되지 않았다면). 따라서 상기 공격은 효과가 없다.
칩 절도(theft) 공격
인증 칩의 라이프타임(lifetime)에는 구별되는 단계(phase)들이 있다. 칩들은 하기의 단계들에서 분실될 수 있다:
제조 후, 그러나 키를 프로그래밍하기 전
키를 프로그래밍한 후, 그러나 상태 데이터를 프로그래밍하기 전
상태 데이터를 프로그래밍한 후, 그러나 소모품 또는 시스템에 삽입하기 전
시스템 또는 소모품에 삽입한 후
칩 제조 및 프로그래밍 사이의 절도는 클론 생산자에게 단지 텅 빈 칩을 제 공한다. 이는 단순히 인증 칩의 판매로 타협하는 것으로, 상기 인증 칩으로는 아무것도 인증되지 않는다. 프로그래밍 스테이션은 단지 소모품 및 시스템 제품 키를 가진 메카니즘이기 때문에 클론 생산자는 정확한 키를 가지고 상기 칩을 프로그램할 수 없다. 클론 생산자들은 그들 자신의 시스템 및 소모품용으로 텅핀 칩을 프로그램할 수 있지만, 이러한 상품들을 검출 없이 시장에 내놓는 것은 어려운 일이다. 제 2 형태의 절도는 오직 인증 칩이 둘 또는 그 이상의 다른 프로그래밍 단계들을 거친 후에 발생할 수 있다. 이것은 가능은 하지만, 일어날 것 같지는 않다. 어떤 경우든 최악의 상황은 상태 데이터가 프로그램되어있지 않아서, 모든 M을 읽기/쓰기(read/write)하는 것이다. 이 경우라면 공격자는 적응적 선택 텍스트 공격(Adaptive Chosen Text Attack)을 시도할 수 있다. 이러한 공격에는 HMAC-SHA1 알고리즘으로 대항할 수 있다. 제3 형태의 절도는 프로그래밍 스테이션과 설치공장과의 사이에서 일어난다. 상기 인증 칩은 특정 시스템이나 특정 소모품에 사용되기 위하여 이미 프로그램되어있다. 절도시야 하는 이러한 칩들의 유일한 용도는 이것들을 클론 시스템 또는 클론 소모품에 설치하는 것이다. 클론 시스템은 적절치 않아서(irrelevant), 클론된 시스템은 심지어 인증 칩(53)을 필요로 하지 않는다. 클론 소모품에 있어서, 이러한 절도는 클론된 제품의 수가 분실된 칩의 수로 제한된다. 한번의 도둑질은 클론 생산자로 하여금 충분히 비용효율이 높은 사업을 할 수 있도록 꾸준한 공급을 제공해줄 수 없다. 절도의 최종형태는 시스템 또는 소모품 자체를 분실하는 것이다. 생산자에서 상기 절도가 발생하면 물리적인 안전 프로토콜이 향상될 것이다. 만약 상기와 같은 절도가 일어난다면 이것은 상기 아이템의 주인 및 결찰이나 보험회사의 문제이다. 인증 칩이 사용하는 보안 메카니즘은 상기 소모품 및 시스템이 대중에게 사용되는 것을 가정한다. 결과적으로 이들을 잃어버리는 것은 키의 안전성에 중요하다.
인증 칩 디자인
인증 칩은 물리적이고 논리적인 외부 인터페이스를 가지고 있다. 상기 물리적 인터페이스는 어떻게 상기 인증 칩이 물리적 시스템에 연결될 수 있는지 정의하고, 상기 논리적 인터페이스는 어떻게 시스템이 인증 칩과 통신하는지 정의한다.
물리적 인터페이스
인증 칩은 작은 4-핀 CMOS 패키지이다(실제 내부 사이즈는 약 0.30mm2으로 0.25㎛ 플래시 프로세스를 사용한다). 상기 4핀은 GND, CLK, Power 및 Data이다. Power는 상시전압이다. 만약 전압이 고정된 양보다 여기에서 벗어나면 칩은 리셋된다. 추천하는 클록 스피드는 4~10MHz이다. 내부 회로는 안전한 최대 클록 스피드가 초과되지 않도록 하기 위하여 클록신호를 필터링한다. 데이터는 시리얼 데이터 라인을 통하여 1비트씩 보내고 받는다. 칩은 켤때와 끌때 리셋을 행한다. 또한, 회로 내에서 탬퍼 검출 및 예방회로는 만약 공격이 검출되면 리셋하거나 플래시 메모리를 제거하도록 한다(검출된 공격에 따름). CLK 전압을 특정 레벨로 유지하는 것으로 특별 프로그래밍 모드가 가능하다. 이는 다음 부분에서 더 자세히 정의된다.
논리적 인터페이스
인증 칩은 노멀모드(Normal Mode) 및 프로그래밍모드(Programming Mode), 2 개의 작동모드를 갖고 있다. 작동 프로그램 코드가 ROM이 아니라 플래시 메모리에 저장되기 때문에(보안상의 이유로), 상기 2개의 모드가 필요하다. 프로그램모드는 제조 후에 테스트할 목적으로, 그리고 작동 프로그램 코드를 로드하는데 사용되는 반면, 일반모든 상기 칩에서 차후의 용도로로 사용된다.
프로그래밍모드
프로그래밍모드는 CLK라인에 주어진 시간동안 특정 전압을 유지시킴으로써 가능해진다. 칩이 프로그래밍 모드로 들어가면 모든 플래시 메모리는 삭제된다(모든 비밀키 정보 및 어떤 프로그램 코드). 그리고 나서 인증 칩은 삭제를 확인한다. 만약 삭제가 성공적이었다면, 인증 칩은 새로운 프로그램 코드와 관련하여 384바이트의 데이터를 받는다. 상기 바이트들은 byte0부터 byte383의 순서로 트렌스퍼(transfer)된다. 비트는 bit1부터 bit7까지 트렌스퍼된다. 일단 384바이트의 프로그램 코드가 로드되면 인증 칩이 명령을 기다린다. 만약 삭제가 성공적이지 않았다면, 상기 인증 칩은 플래시 메모리에 어떤 데이터도 로드하지 않고 명령을 기다린다. 칩이 프로그램되고 나서 재시작될 수 있다. 칩은 CLK라인이 상시전압을 갖고 리셋되면, 노멀모드로 들어간다.
노멀모드
인증 칩이 프로그래밍 모드에 있지 않으면, 노멀모드에 있는 것이다. 인증 칩이 노멀모드에서 시작할때(예컨대 켤때 리셋), 플래시 메모리의 프로그램 코드 부위에 현재 저장된 프로그램이 실행된다. 상기 프로그램 코드는 시스템과 인증 칩 간의 통신을 구현하고, 시스템으로부터 명령과 데이터를 받고, 또한 출력값을 만들어낸다. 상기 인증 칩은 순차적으로 통신하기 때문에 한번에 하나의 비트가 전달된다. 상기 시스템은 간단한 작동 명령어 셋트를 통하여 통신한다. 각 명령은 3비트 오피코드로 정의된다. 오피코드의 해석은 IsTrusted 비트 및 IsWritten 비트의 전류값에 의존한다.
다음 연산이 정의된다:
Op | T | W | Mn | 입력 | 출력 | 설명 |
000 | - | - | CLR | - | - | 클리어 |
001 | 0 | 0 | SSI | [160,160,160] | - | 비밀 정보를 설정 |
010 | 0 | 1 | RD | [160,160] | [256,160] | 안전하게 M을 판독 |
010 | 1 | 1 | RND | - | [160,160] | 랜덤 |
011 | 0 | 1 | WR | [256] | - | M 기록 |
011 | 1 | 1 | TST | [256,160] | [1] | 테스트 |
100 | 0 | 1 | SAM | [32] | [32] | 액세스 모드 설정 |
101 | - | 1 | GIT | - | [1] | IsTrusted 가져오기 |
110 | - | 1 | SMT | [32] | - | MinTicks 설정 |
*Op=오피코드, T=IsTrusted 값, W=IsWritten 값, Mn=연상기호, [n]=파라미터로 필요한 비트의 수
상기 표에 정의되지 않은 명령어는 NOP(연산 아님)로 인터프리트된다. 실시예들은 오피코드 110 및 111을 포함하고, IsWritten이 0이면 SSI 이외의 오피코드를 포함한다. RD 및 RND에 대한 오피코드가 똑같으며, WR 및 TST도 똑같다는 것에 주한다. 오피코드의 수신에 따라 실행되는 실제 명령들은 IsTrusted 비트의 현재 값에 따른다(IsWritten이 1인 한). IsTrusted 비트가 삭제되었다면, RD 및 WR 함수가 호출된다. IsTrusted 비트가 설정되면, RND 및 TST 함수들이 호출된다. 상기 두 명령어들의 집합은 신뢰(trusted) 인증 칩 및 비신뢰(non-trusted) 인증 칩 사이에서 상호 배제적이다. 인증 칩상에서 명령을 실행하기 위하여 클라이언트(시스템과 같은)는 오피코드에 대하여 필요한 입력 파라미터 뒤에 명령 오피코드를 보낸다(send). 오피코드는 중요하지 않은 비트에서 중요한 비트순으로 보내진다. 예컨대, SSI 명령을 보내기 위하여 1, 0 및 0 비트의 순으로 보내진다. 각 입력 파라미터는 동일하게 중요하지 않은 비트에서 중요한 비트의 순이라는 방식으로 보내진다.
몇가지 경우에 있어서, 한 칩의 명령으로부터의 출력비트는 다른 칩의 명령의 입력비트로 직접 전달될 수 있다. 이 예로는 RND 및 RD 명령이 있다. 신뢰된 인증 칩에서 RND 요청에 대한 출력비트는 시스템에 의하여 유지될 필요가 없다. 반면에 시스템은 출려비트를 직접 비신뢰된 인증 칩의 RD명령의 입력으로 전달할 수 있다. 상기 각 명령어의 설명은 요점을 나타내고 있다. 각 명령들은 다음 부분에서 상세하게 살펴본다. 영구적인 레지스터는 플래시 메모리에 저장되기 때문에 몇 알고리즘은 특별하게 디자인 되는 것에 주의한다.
레지스터
인증 칩에서 메모리는 인증 칩 프로토콜에 필요한 상수를 저장할 비휘발성 메모리를 포함한다. 비휘발성 변수들이 아래에 정의된다:
변수이름 | 크기(비트) | 설명 |
M[0...15] | 256 | 시리얼넘버, 남아있는 매체와 같은 데이터를 저장하는 16워드(각 16비트) |
K1 | 160 | 인증동안 R을 변환하는데 사용되는 키 |
K2 | 160 | 인증동안 M을 변환하는데 사용되는 키 |
R | 160 | 현재 랜덤 값 |
AccessMode[0..15] | 32 | M[n]의 2비트 AccessMode값의 16집합 |
MinTicks | 32 | 키에 기초한 함수의 요청들 사이의 클록눈금의 최소개수 |
SIWritten | 1 | 만약 설정된다면, 비밀키 정보(K1, K2 및 R)은 칩에 기록되어있다. 만약 삭제한다면 비밀정보는 기재되어있지 않다 |
IsTrusted | 1 | 만약 설정된다면, RND 및 TST 함수는 호출될수 있지만, RD 및 WR함수는 호출될 수 없다. 만약 삭제한다면 RND 및 TST 함수는 호출될 수 있지만, RD 및 WR 함수는 호출될 수 있다. |
총비트 | 802 |
아키텍처 개관
이 장은 인증 칩에 필요한 기능성을 구현할 수 있는 목표 내장형 CPU(purpose-built CPU)의 고급정의를 제공한다. 상기 CPU가 일반 목표 CPU가 아닌 것에 주의한다. 이것은 인증 로직을 구현하기 위한 맞춤식이다. WRITE, TST, RND 등과 같이 인증 칩의 사용자들이 보는 인증 명령어들은 모두 CPU 명령어 집합에 기록된 프로그램들 만큼 작게 구현된다. 상기 CPU는 32비트 누산기(대부분의 연산에서 사용된다) 및 많은 수의 레지스터를 포함한다. 상기 CPU는 특히 인증 로직을 구현하는데 특별히 맞추어진 8비트 명령어들을 작동한다. 전형적으로 각 8비트 명령어는 4비트 오피코드 및 4비트 오퍼랜드를 포함한다.
연산속도
내부적인 클록 주파수 리미터 유닛은 상기 칩이 미리 결정된 주파수보다 더 빠른 속도로 작동하지 못하게 한다. 상기 주파수는 칩을 제조하는 도중에 맞춰지는데, 그리고 나서 변경될 수 없다. 상기 주파수는 약 4~10MHz가 바람직하다.
구성 및 블록 다이어그램
유닛 이름 | CMOS 타입 | 설명 |
클록 주파수 리미터 | 노멀(nomal) | 인증 칩의 주파수가 특정 최대주파수를 넘지 않도록 확인한다. |
OverUnderPower 검출 유닛 | 노멀 | 파워서플라이가 유효 작동범위 내에 있는지 확인한다. |
프로그래밍 모드 검출 유닛 | 노멀 | 사용자가 프로그래밍 모드로 들어가도록 허용한다. |
잡음 생성기 | 노멀 | Idd잡음을 생성하고, 탬퍼 검출 회로에서 사용된다. |
상태 머신 | 노멀 | 칩의 두 작동모드(프로그래밍 모드와 노멀모드)를 조절한다. 이는 CPU의 두 작동 싸이클을 생성하고, 긴 명령어 작동동안 멈춰있고, 또한 작동 싸이클 동안 오피코드와 오퍼랜드를 저장한다. |
I/O 유닛 | 노멀 | 외부와 지속적으로 통신한다. |
ALU | 비플래싱(non-flashing) | 일반적인 수학적이고 논리적인 연산자 뿐만 아니라 32비트 누산기를 포함한다. |
MinTecks 유닛 | 노멀(99%) 비플래싱(1%) | 키 기반의 연산들간의 프로그래밍 가능한 최소 지연(카운트다운을 통하여) |
어드레스 생성 유닛 | 노멀(99%) 비플래싱(1%) | 특정 오퍼랜드에 필요한 직접, 간접 및 인덱스된 어드레스들을 생성한다. |
프로그램 카운터 유닛 | 노멀 | 분기 및 서브루틴 제어를 위한 로직 및 9비트의 PC(프로그램 카운터)를 포함한다. |
메모리 유닛 | 비플래싱 | 9비트의 어드레스로 할당된다. 이는 8비트의 와이드 프로그램 플래시 메모리, 32비트 와이드 플래시 메모리, RAM 및 검색 테이블을 포함한다. 또한 프로그램 코드의 로딩을 가능하게 하는 프로그래밍 모드를 포함한다. |
도 181은 인증 칩의 개략적인 블록 다이어그램을 설명한다. 탬퍼 방지 및 검출 회로는 없다. 잡음 생성기, OverUnderPower 검출 유닛 및 프로그래밍 모드 검출 유닛은 남아있는 유닛이 아니라 탬퍼 방지 및 검출 회로에 연결되어 있다.
메모리 맵
도 182는 메모리 맵의 한 예를 도시한다. 인증 칩은 외부 메모리를 가지고 있지 않음에도 불구하고, 내부 메모리도 없다. 내부 메모리는 9비트로 어드레스되고, 어드레스에 따라 폭이 32비트 또는 8비트이다. 32비트 폭의 메모리는 비휘발성 데이터, HMAC-SHA1에 사용되는 변수, 및 상수들을 보유하는데 사용된다. 8비트 폭의 메모리는 프로그램 및 프로그램에 사용되는 다양한 점프 테이블(jump table)을 보유하는데 사용된다. 상기 어드레스 분리(예약된 메모리 영역을 포함해서)는 어드레스 생성 및 디코딩에 최적화되도록 디자인된다.
상수
도 183은 상수 메모리 맵의 한 예를 도시한다. 상기 상수 영역은 32비트 상수를 포함한다. 이것들은 간단한 상수들(모두 0인 32비트 또는 모두 1인 32비트), HMAC 알고리즘에 사용되는 상수들, 및 SHA-1 알고리즘에 사용될 필요가 있는 y0-3 및 h0-4 상수들이다. 이러한 값들은 리셋의 영향을 전혀 받지 않는다. 상수를 사용하는 유일한 오피코드는 LDK이다. 이경우, 오퍼랜드 및 메모리 위치는 밀접하게 링크되어있다.
RAM
도 184는 RAM 메모리 맵의 한 예를 도시한다. 상기 RAM 영역은 단지 칩이 작동하는 동안에만 인증 칩의 일반적 기능에 필요한 32 패리티-체크된 32 비트 레지스터를 포함한다. RAM은 휘발성 메모리로서, 전원이 제거되면 상기 값들을 잃는다. 사실 전원이 차단되고 나서 메모리가 일정 시간동안 값을 보유하고 있지만, 다시 전원이 공급될 때 이것이 유효하다고 할 수 없다는 것에 유의해야 한다. 이는 본 명세서의 다른 부분에서 보안문제로 다루었다. RAM은 HMAC-SHA1 알고리즘에 사용되는 변수들, 즉 A~E, 임시 변수 T, 작동하는 해쉬값 H의 160비트 공간, 해쉬 결과(HMAC에서 필요함) B160의 임시 저장공간 및 확장 해쉬 메모리 X의 512비트 공간을 포함한다. 모든 프로그램에서 당연히 그런 것은 아니지만, 리셋시 RAM의 모든 값들은 삭제되어 0으로 된다. RAM 어드레스를 사용하는 오피코드는 LD, ST, ADD, LOG, XOR 및 RPL이다. 모든 경우에 있어서, 오퍼랜드 및 메모리 위치는 어드레스 생성 및 디코딩을 최소화하기 위하여 밀접하게 링크되어있다(멀티워드 변수들은 가장 중요한 워드에 먼저 저장된다).
플래시 메모리-변수
도 185는 플래시 메모리 변수 메모리 맵의 한 예를 도시한다. 플래시 메모리 영역은 인증 칩 내에서 비휘발성 정보를 보유하고 있다. 플래시 메모리는 전원이 제거된 후에도 그 값을 보유하고 나중에 전원이 공급되더라도 변하지 않는다. 다중-상태 플래시 메모리내의 상기 비휘발성 정보는 2개의 160비트 키(K1 및 K2), 현재 랜덤수 값(R), 상태 데이터(M), MinTick 값(MT), AccessMode 값(AM), 및 IsWritten(ISW) 및 IsTrusted(IST) 플래그(flag)를 포함한다. 플래시 값들은 리셋으로 변하지 않지만, 프로그래밍 모드에 들어가면 삭제된다(0이 된다). 플래시 어드레스를 사용하는 연산으로는 LD, ST, ADD, RPL, ROR, CLR 및 SET가 있다. 모든 경우에 상기 오퍼랜드 및 메모리 위치는 어드레스 생성 및 디코딩을 최소화하기 위하여 밀접하게 링크되어있다. 멀티워드 변수 K1, K2 및 M은 어드레싱 요구사항 때문에 먼저 가장 중요한 워드에 저장된다. 사용되는 어드레싱 방식은 N에서 시작해서 0에서 끝나는 인덱스에 의한 기본어드레스 오프셋(base address offset)이다. 따라서, 루프 프로세싱에서 MN이 액세스된 최초의 워드이고, M0가 액세스된 최후의 32비트 워드이다. 다중워드 변수 R이 LFSR 생성을 쉽게 하기 위하여 동일한 인덱싱 방 식을 사용하여 먼저 덜 중요한 워드에 저장된다.
플래시 메모리-프로그램
도 186은 플래시 메모리 프로그램 메모리 맵의 한 예를 도시한다. 제 2 다중-상태 플래시 메모리 영역은 384×8비트이다. 상기 영역은 JSR, JSI 및 TBR 명령어의 어드레스 테이블, DBR 명령어에 대한 오프셋, 상수들 및 프로그램 자체를 포함한다. 플래시 메모리는 리셋에 영향받지 않지만, 프로그래밍 모드에 들어가면 삭제된다(0으로 된다). 일단 프로그래밍 모드에 들어가면, 새로운 384바이트의 새로운 집합이 로드될 수 있다. 일단 이렇게 되면, 상기 칩은 리셋될 수 있고, 일반 칩 연산이 가능할 수 있다.
레지스터
인증 칩에는 많은 수의 레지스터가 정의되어 있다. 이것들은 함수가 실행되는 동안 임시 저장소로 사용된다. 일부는 계산 함수용으로, 나머지 일부는 카운팅 및 인덱싱용으로, 그리고 나머지 일부는 시리얼 I/O용으로 사용된다. 이러한 레지스터는 비휘발성(플래시)메모리일 필요가 없다. 이것들은 삭제사이클의 필요 없이 읽고 쓸 수 있다(플래시 메모리와 다름). 중요한 정보를 포함하는 임시 저장 레지스터는 탬퍼 방지 및 검출 회로 및 패리티 체크를 이용하여 물리적인 공격으로부터 보호될 필요가 있다. 모든 레지스터는 리셋에 의하여 모두 클리어되어 0으로 된다. 그러나 프로그램 코드는 어떤 특정 상태를 취해서는 안되며, 레지스터값을 적합하게 세워야 한다. 이러한 레지스터는 탬퍼 방지 및 검출 회로로 정의되는 다양한 OK 비트를 포함하지 않는 것에 주의한다. OK 비트들은 다양한 유니트를 통해서 분산되고 리셋에 의하여 세트된다.
싸이클
1비트 싸이클 값은 CPU가 꺼내는 싸이클(0)인지 실행싸이클(1)인지에 따라 결정된다. 싸이클은 실질적으로 이전의 싸이클 값을 보유하는 1-비트 레지스터로부터 유도된다. 싸이클은 명령어 집합으로부터 직접 액세스 가능한 것이 아니다. 이것은 단지 내부 레지스터이다.
프로그램 카운터
6단계 깊이의 9비트 프로그램 카운터 배열(PCA)이 정의되어 있다. 이는 3비트 스텍 포인터(SP)로 인덱스된다. 일반적으로 실행되는 명령의 어드레스를 포함하는 현재 프로그램 카운터(PC)는 바람직하게 PCA[SP]이다. 또한, 현 메모리 레퍼런스의 예약된 어드레스를 포함하는 9비트 Adr 레지스터가 정의되어 있다(인덱스 되어있거나 간접적인 메모리 액세스로). PCA, SP 및 Adr 레지스터는 명령어 집합으로부터 직접 액세스가 불가능하다. 이들은 단지 내부 레지스터이다.
CMD
일반적인 실행 명령을 저장하기 위하여 8비트의 CMD 레지스터가 사용된다. 반면에 CMD 레지스터는 명령어 집합으로부터 직접 액세스가 불가능하고, 단지 내부 레지스터이다.
누산기 및 Z 플래그
누산기는 32비트의 일반 목적 레지스터(general-purpose register)이다. 이 것은 인풋중 하나의 수학적 연산 및 메모리 레지스터 사이의 정보 전달에 사용되는 레지스터이다. 상기 Z 플래그는 누산기의 제로니스(zero-ness)를 포함한다. 누산기에 기록된 최후값이 0이면 Z=1이고, 기록된 값이 0이 아니면 Z=0이다. 누산기 및 Z 레지스터 모두 명령어 집합으로부터 직접 액세스 가능하다.
카운터
많은수의 틀별한 목적을 갖고있는 카운터/인덱스 레지스터가 정의되어있다.
이름 | 레지스터 크기 | 비트 | 설명 |
C1 | 1×3 | 3 | 배열을 인덱스하기 위하여 사용되는 카운터: AE, B160, M, H, y 및 h |
C2 | 1×5 | 5 | 일반적인 목적의 카운터 |
N1-4 | 4×4 | 16 | 배열 X애서 인덱스로 사용됨 |
상기 모든 카운터 레지스터들은 명령어 집합으로부터 직접 액세스가 가능하다. 여기에 특정 값을 로드할 수 있는 특정 명령어들이 존재하고, 이 값을 감소시키거나 증가시키는, 또는 특정 카운터가 0인지 아닌지에 따라서 브랜치하는 다른 명령어들도 있다. 또한, C1 및 C2와 관련된 2개의 특별한 플래그가 있고, 이들 플래그들은 C1 또는 C2의 제로니스를 저장한다. 상기 플래그는 레지스터가 아니지만 레지스터인 것처럼 테스트될 수 있으므로 루프제어에 사용되는데, 하기에 나열하였다.
이름 | 설명 |
C1Z | 1=C1이 현재 0, 0=C1이 일반적으로 0이 아니다. |
C2Z | 1=C2가 현재 0, 0=C2가 일반적으로 0이 아니다. |
플래그
CPU 작동 모드와 관련된 1비트 플래그가 정의되었다:
이름 | 비트 | 설명 |
WE | 1 | X레지스터 배열에 대한 WriteEnable: 0=X레지스터에 기록하는 것이 노옵스(no-ops)가 된다. 1=X레지스터에 기록이 실행된다. |
K2MX | 1 | 0=K레퍼런스동안 K1이 액세스된다. M으로부터 판독은 0을 판독한 것으로 인터프리트된다. 1=K레퍼런스동안 K2가 액세스된다. M으로부터 계속해서 판독한다. |
이러한 1비트 플래그들은 모두 명령어 집합으로부터 직접적으로 액세스될 수 있다. 이런 플래그의 설정 및 삭제를 행하는 특정 명령어들이 존재한다.
WriteIntegrity에 사용되는 레지스터
이름 | 비트 | 설명 |
EE | 1 | WR 명령어 의사코드의 EqEncountered 변수들과 대응된다. 배수-정도(multi-precision) 데이터값의 기록동안 보다 중요한 구성요소들 모두가 이전 값들과 같았는지를 결정하는데 사용된다. |
DE | 1 | WR 명령어 의사코드의 DecEncountered 변수들과 대응된다. 배수-정도 데이터값의 기록동안 보다 중요한 구성요소가 감소하였는지를 결정하는데 사용된다. |
I/O에 사용되는 레지스터
4개의 1비트 레지스터가 클라이언트(시스템) 및 인증 칩간의 커뮤니케이션에 정의된다. 이러한 레지스터로는 InBit, InBitValid, OutBit, 및 OutBitValid가 있다. InBit 및 InBitValid는 클라이언트가 명령어 및 데이터를 인증 칩으로 옮기는 수단을 제공한다. OutBit 및 OutBitValid는 인증 칩으로부터 정보를 가져오는 수단을 제공한다. 클라이언트는 명령어 및 파라미터 비트를 한번에 1비트씩 인증 칩으로 전송한다. 인증 칩은 슬레이브 장치이기 때문에, 인증 칩의 관점에서 다음과 같다:
InBit의 판독은 InBitValid가 클리어될 때까지 대기한다. InBitValid는 클라이언트가 다음 입력비트를 InBit에 기록할 때까지 클리어 상태로 남아있는다. InBit의 판독은 클라이언트가 다음 InBit를 판독하도록 하기위하여 InBitValid비트 를 클리어한다. 클라이언트는 InBitValid 비트가 클리어하지 않다면 인증 칩을 세트할 수 없다.
OutBit에 기록하는 것은 OutBitValid가 설정될 때까지 대기한다. OutBitValid는 클라이언트가 OutBit로부터 비트를 판독할 때까지 설정된 체로 남아있는다. OutBit에 기록하는 것은 클라이언트가 다음 OutBit가 준비되도록 하기 위하여 OutBitValid를 설정한다. 클라이언트는 OutBitValid 비트가 설정되어 있지 않다면 인증 칩으로부터 1비트도 판독할 수 없다.
타이밍 액세스에 사용되는 레지스터
하나의 32비트 레지스터가 타이머 용도로 정의되어있다. MTR(MinTicksRemaining) 레지스터는 명령어가 실행되는 매순간 감소한다. 일단 MTR 레지스터가 0이되면, 0인 상태로 남아있는다. MTRZ는 MTR과 관련되어 있는데 MTR 레지스터의 제로니스를 포함한다. 만약 MTRZ가 1이면 MTR 레지스터는 0이다. 만약 MTRZ가 0이면, MTR 레지스터는 아직 0이 아니다. MTR은 항상 MinTicks 값으로부터 시작하고(리셋 또는 특정 키-액세스 함수 후에), 결국 0으로 감소한다. MTR이 설정될 수 있고, MTRZ가 특정 명령어에 의하여 테스트되는 동안 MTR 값은 다른 명령어에 의하여 직접 판독될 수 없다.
레지스터 요약
다음 표(레지스터 이름으로 정렬)는 모든 임시 레지스터를 요약한 것이다. 여기에는 특정 레지스터가 발견되는 곳 뿐만 아니라 레지스터 이름, 크기(비트)를 나열하였다.
레지스터 이름 | 비트 | 페리티 | 발견되는 곳 |
Acc | 32 | 1 | 계산 로직 유닛 |
Adr | 9 | 1 | 어드레스 생성 유닛 |
AMT | 32 | 계산 로직 유닛 | |
C1 | 3 | 1 | 어드레스 생성 유닛 |
C2 | 5 | 1 | 어드레스 생성 유닛 |
CMD | 8 | 1 | 상태 머신 |
Cycle(Old=prev Cycle) | 1 | 상태 머신 | |
DE | 1 | 계산 로직 유닛 | |
EE | 1 | 계산 로직 유닛 | |
InBit | 1 | I/O 유닛 | |
InBitValid | 1 | I/O 유닛 | |
K2MX | 1 | 어드레스 생성 유닛 | |
MTR | 32 | 1 | MinTicks 유닛 |
MTRZ | 1 | MinTicks 유닛 | |
N[1-4] | 16 | 4 | 어드레스 생성 유닛 |
OutBit | 1 | I/O 유닛 | |
OutBitValid | 1 | I/O 유닛 | |
PCA | 54 | 6 | 프로그램 카운터 유닛 |
RTMP | 1 | 계산 유닛 | |
SP | 3 | 1 | 프로그램 카운터 유닛 |
WE | 1 | 메모리 유닛 | |
Z | 1 | 계산 로직 유닛 | |
총 비트 | 206 | 17 |
명령어 집합
CPU는 계산 로직을 구현하기 위하여 특별히 맞추어진 8비트 명령어들을 작동한다. 대부분의 8비트 명령어는 4비트 오피코드, 및 4비트 오퍼랜드를 포함한다. 높은 급의 4비트는 오피코드를 포함하고, 낮은 급의 4비트는 오퍼랜드를 포함한다.
오피코드 및 오퍼랜드(요약)
오피코드들은 다음 표로 요약된다:
오피코드 | 연상기호 | 간단한 설명 |
0000 | TBR | 테스트 및 분기 |
0001 | DBR | 감소 및 분기 |
001 | JSR | 표를 통하여 서브루틴으로 점프 |
01000 | RTS | 서브루틴으로부터 귀환 |
01001 | JSI | 간접적으로 서브루틴으로 점프 |
0101 | SC | 카운터 설정 |
0110 | CLR | 특정 플래시 레지스터를 클리어 |
0111 | SET | 틀정 플래시 레지스터의 비트 설정 |
1000 | ADD | 누산기에 32비트 값을 더하기 |
1001 | LOG | 논리연산(AND 및 OR) |
1010 | XOR | 몇개의 값에 대하여 배타적 논리합 누산기 |
1011 | LD | 특정 위치로부터 누산기 로드 |
1100 | ROR | 누산기를 오른쪽으로 회전 |
1101 | RPL | 비트 교체 |
1110 | LDK | 누산기에 상수 로드 |
1111 | ST | 누산기를 특정 위치에 저장 |
다음 표는 오피코드와 함께 사용될 수 있는 오퍼랜드의 요약이다. 상기 표는 오피코드 연상기호에 의하여 알파벳 순서로 정렬하였다. 다음 표에는 각 오퍼랜드에 대한 2진값을 기재하였다.
오피코드 | 유효한 오퍼랜드 |
ADD | {A,B,C,D,E,T,MT,AM,AE[C1],B160[C1],H[C1],M[C1],K[C1],R[C1],X[N4]} |
CLR | {WE, K2MX, M[C1], Group1, Group2} |
DBR | {C1, C2}, DBR 테이블로 오프셋 |
JSI | {} |
JSR | 테이블 1로의 오프셋 |
LD | {A,B,C,D,E,T,MT,AM,AE[C1],B160[C1],H[C1],M[C1],K[C1],R[C1],X[N4]} |
LDK | {0×0000...,0×3636...,0×5C5C...,0×FFFF, h[C1],y[C1]} |
LOG | {AND, OR},{A,B,C,D,E,T,MT,AM} |
ROR | {InBit,OutBit,LFSR,RLFSR,IST,ISW,MTRZ,1,2,27,31} |
RPL | {Init,MHI,MLO} |
RTS | {} |
SC | {C1,C2}, 카운터 리스트로의 오프셋 |
SET | {WE,K2MX,Nx,MTR,IST,ISW} |
ST | {A,B,C,D,E,T,MT,AM,AE[C1],B160[C1],H[C1],M[C1],K[C1],R[C1],X[N4]} |
TBR | {0,1}, 표 1로의 오프셋 |
XOR | {A,B,C,D,E,T,MT,AM,X[N1],X[N2],X[N3],X[N4]} |
다음 오퍼랜드 테이블은 4비트 모두가 직접 번역(interpretation)에 사용되는 4비트 오퍼랜드를 나타낸다.
오퍼랜드 | ADD,LD,ST | XOR | ROR | LDK | RPL | SET | CLR |
0000 | E | E | InBit | 0×00... | Init | WE | WE |
0001 | D | D | OutBit | 0×36... | - | K2MX | K2MX |
0010 | C | C | RB | 0×5C... | - | Nx | - |
0011 | B | B | XRB | 0×FF... | - | - | - |
0100 | A | A | IST | y[C1] | - | IST | - |
0101 | T | T | ISW | - | - | ISW | - |
0110 | MT | MT | MTRZ | - | - | MTR | - |
0111 | AM | AM | 1 | - | - | - | - |
1000 | AE[C1] | - | - | h[C1] | - | - | - |
1001 | B160[C1] | - | 2 | - | - | - | - |
1010 | H[C1] | - | 27 | - | - | - | - |
1011 | - | - | - | - | - | - | - |
1100 | R[C1] | X[N1] | 31 | - | - | - | R |
1101 | K[C1] | X[N2] | - | - | - | - | 그룹1 |
1110 | M[C1] | X[N3] | - | - | MLO | - | M[C1] |
1111 | X[N4] | X[N4] | - | - | MHI | - | 그룹2 |
하기 명령어들은 가장 높은 비트의 오퍼랜드에 기반하여 선택하였다.
오퍼랜드3 | 어떤 카운터? (DBR,SC) | 어떤 연산? (LOG) | 어떤 값? (TBR) |
0 | C1 | AND | 0 |
1 | C2 | OR | 0 이외의 값 |
가장 낮은 3비트의 오퍼랜드는 특별 테이블(SC)로부터의 값인 오프셋(DBR, TBR) 또는 LOG의 경우에 논리연산의 제 2 입력을 선택하는 것 중의 하나이다. 번역은 ADD, LD 및 ST 오피코드에 대한 번역에 맞춘다.
오퍼랜드2-0 | LOG 입력2 | SC값 |
000 | E | 2 |
001 | D | 3 |
010 | C | 4 |
011 | B | 7 |
100 | A | 10 |
101 | T | 15 |
110 | MT | 19 |
111 | AM | 31 |
ADD-누산기에 더하기
연상기호:ADD
오피코드:1000
용법:ADD 값
상기 ADD 명령어는 특정 오퍼랜드를 모듈로 232 덧셈을 통하여 누산기에 더한다. 오퍼랜드는 A, B, C, D, E, T, AM, MT, AE[C1], H[C1], B160[C1], R[C1], K[C1], M[C1], 또는 X[N4]이다. 또한 상기 연산동안 로드되는 값이 0인지 아닌지에 따라 Z플래그가 설정된다.
CLR-비트를 클리어
연상기호:CLR
오피코드:0110
용법:CLR 플래그/레지스터
상기 CLR 명령어는 특정 내부 플래그 또는 플래시 메모리 레지스터가 클리어되도록 한다. 플래시 메모리의 경우에 CLR 명령에 시간이 좀 걸리지만, 플래시 메모리의 삭제가 끝날때까지 다음 명령어는 멈춰버린다. 클리어될 수 있는 레지스터는 WE 및 K2MX이다. 클리어될 수 있는 플래시 메모리는 R, M[C1], 그룹1 및 그룹2이다. 그룹1은 IST 및 ISW 플래그이다. 만약 이것들이 클리어되면, 유일하게 유효한 고급 명령은 SSI명령이다. 그룹2는 MT, AM, K1 및 K2 레지스터이다. R은 TST에 대한 요청 후에 업데이트되어야 하므로 각각 삭제된다. M은 또한 업데이트 되어야 하는 M의 개별적인 부분들을 허용하는 인덱스 메카니즘을 통하여 삭제된다. 또한 관련된 SET 명령도 있다.
DBR-감소 및 분기
연상기호:DBR
오피코드:0001
용법:DBR 카운터, 오프셋
상기 명령어는 간단한 루프를 만들 수 있는 메카니즘을 제공한다. 오퍼랜드의 고히트(high hit)는 C1 또는 C2(2개의 카운터)를 테스트하는 것으로부터 선택한다. 만약 특정 카운터가 0이 아니라면, 상기 카운터는 감소하고 주어진 오프셋(연장된 사인)이 PC에 더해진다. 만약 특정 카운터가 0이면, 카운터는 감소하고 PC+1에서 프로세싱이 계속된다. 8-엔트리 오프셋 테이블이 0 1100 0000 어드레스(프로그램 메모리의 64번째 엔트리)에 저장된다. 오프셋의 8비트는 부호 수(signed number)로 취급된다. 따라서, 0×FF는 -1로 취급되고, 0×01은 +1로 취급된다. 전형적으로 루프에서 사용되는 값은 음수이다.
JSI-간접적으로 서브루틴으로 점프
연상기호:JSI
오피코드:01001
용법:JSI(Acc)
JSI 명령어는 현재 누산기에 있는 값에 따라 서브루틴으로 점프하게 한다. 상기 명령어는 현재 PC를 스택으로 보내고, PC에 새로운 값을 로드한다. 새로운 PC의 상위 8비트는 점프 테이블 2로부터 로드되고(누산기의 하위 5비트로부터 주어진 오프셋), PC의 최하위 비트가 0으로 클리어된다. 그리하여 모든 서브루틴들은 짝수 어드레스에서 시작해야 한다. 상기 스택은 6단계의 실행을 제공한다(5 서브루틴 깊이). 프로그래머는 상기 깊이가 초과했는지 또는 되돌아온 값이 겹쳐써졌는지 확인할 필요가 있다(스택 랩 때문에).
JSR-서브루틴 점프
연상기호:JSR
오피코드:001
용법:JSR 오프셋
JSR명령어는 서브루틴 구성에 가장 일반적인 용법을 제공한다. 상기 명령어는 현재 PC를 스택으로 보내고, PC에 새로운 값을 로드한다. 새로운 PC 값의 상위 8비트는 어드레스 테이블에서 나오는데, 테이블 내로의 오프셋은 5비트 오퍼랜드(32 가능 어드레스)에 의해 제공된다. 새로운 PC의 최하위 비트는 0으로 클리어된다. 따라서, 모든 서브루틴은 짝수 어드레스에서 시작해야 한다. 상기 스택은 6단계의 실행을 제공한다(5 서브루틴 깊이). 프로그래머는 상기 깊이를 초과했는지 또는 되돌아온 값이 겹쳐써졌는지 확인할 필요가 있다(스택 랩 때문).
LD-누산기 로드
연상기호:LD
오피코드:1011
용법:LD 값
상기 LD 명령어는 특정 오퍼랜드로부터 누산기를 로드한다. 오퍼랜드는 A, B, C, D, E, T, AM, MT, AE[C1], H[C1], B160[C1], R[C1], K[C1], M[C1], 또는 X[N4]중 하나이다. 또한 상기 연산동안 로드되는 값이 0인지 아닌지에 따라 Z플래그가 세트된다.
LDK-상수 로드
연상기호:LDK
오피코드:1110
용법:LDK 상수
상기 LDK 명령어는 누산기에 특정 상수를 로드한다. 상기 상수는 HMAC-SHA1에 필요한 32비트 값 및 일반적인 목적의 프로세싱에 가장 유용한 모든 0들 및 모든 1들이다. 결과적으로 이들은 다음중 하나이다:
0×00000000,
0×36363636,
0×5C5C5C5C,
0×FFFFFFFF,
또는 C1으로 인덱스되는 h 및 y 상수 테이블. h 및 y 상수 테이블은 HMAC-SHA1에 필요한 32비트 표로 만든 상수들이다. 또한 상기 연산을 하는 동안 로드되는 상수가 0인지 아닌지에 따라 Z플래그가 세트된다.
LOG-논리연산
연상기호:LOG
오피코드:1001
용법:LOG 연산값
상기 LOG 명령어는 누산기 및 특정 값에 대한 32비트 비트단위 논리 연산을 행한다. 상기 LOG연산에 의한 2개의 연산은 AND 및 OR이다. 비트단위의 NOT 및 XOR 연산은 XOR 명령어에 의한다. 상기 누산기에 의하여 AND연산 되거나 OR연산될 32비 트 값은 다음중 하나이다:A, B, C, D, E, T, MT 및 AM. 또한 상기 연산을 하는 동안 결과인 32비트 값(누산기에 로드된다)이 0인지 아닌지에 따라 Z플래그가 세트된다.
ROR-오른쪽으로 회전
연상기호:ROR
오피코드:1100
용법:ROR 값
상기 ROR 명령어는 고정된 비트만큼 누산기를 오른쪽으로 회전하는 방법을 제공한다. 누산기의 맨 위에 오는 비트(비트 31이 된다)는 누산기의 이전 비트 0 또는 외부 1비트 플래그(플래그 또는 시리얼 입력 접속과 같은)로부터 온다. 회전된 비트는 또한 시리얼 접속 또는 외부 플래그와 결합한 결과일 수 있다. 가능한 오퍼랜드는 다음과 같다:InBit, OutBit, LFSR, RLFSR, IST, ISW, MTRZ, 1, 2, 27 및 31. 또한 상기 연산을 하는 동안 결과인 32비트 값(누산기에 로드된다)이 0인지 아닌지에 따라 Z플래그가 설정된다. ROR 명령어의 가장 간단한 형태의 오퍼랜드는 1, 2, 27, 31중 하나인데, 이는 누산기에서 얼마나 많은 비트의 위치를 회선시켜야 하는 지 나타낸다. 이러한 오퍼랜드에 있어서, 누산기가 단순히 오른쪽으로 회전하는 외부 입력 또는 출력은 없다. 오퍼랜드 IST, ISW 및 MTRZ에 의하면, 적합한 플래그가 누산기의 가장 높은 비트로 전달된다. 누산기의 나머지는 1비트만큼 오른쪽으로 옮겨지고(비트 31이 30으로 되는 등), 누산기의 가장 낮은 비트는 없어진다. 오퍼랜드 InBit에 의하면, 다음의 시리얼 입력 비트는 누산기의 가장 높은 비트로 전달된다. 그리고 나서 InBitValid 비트가 클리어된다. 만약 클라이언트가 이용할 수 있는 입력비트가 아직 없다면, 하나 생길때까지 실행이 중지된다. 누산기의 나머지는 1비트만큼 오른쪽으로 옮겨지고(비트 31이 30으로 되는 등), 누산기의 가장 낮은 비트는 없어진다.
오퍼랜드 OutBit에 의하면, 누산기는 오른쪽으로 1비트만큼 옮겨진다. 비트 0에서 없어진 비트는 OutBit 플래그에 저장되고, OutBitValid 플래그는 세트된다. 따라서, 클라이언트가 읽을 수 있도록 준비가 된다. 만약 OutBitValid 플래그가 이미 1이라면, 상기 명령어의 실행은 OutBit 비트가 클라이언트에게 읽혀질 때 까지(OutBitValid 플래그가 0이 될 때 까지) 지연된다. 비트 31로 옮겨진 새로운 비트는 쓰레기로 간주된다(실질적으로 현재 InBit 레지스터에 있는 값). 결국 RB 및 XRB 오퍼랜드는 LFSR 및 다중 프리시전 쉬프트 레지스터(multiple precision shift register)의 구현을 허용한다. RB를 사용하면 없어지는 비트(비트 0)는 RTMP 레지스터에 기록된다. RTMP 레지스터에 있던 레지스터는 누산기의 새로운 비트 31로 된다. 다양한 32비트 값에 대하여 다중 ROB RB명령을 행하면 다중 프리시전 우측 회전/쉬프트를 구현한다. XRB는 RB와 동일한 방식으로 작동하는데, RTMP 레지스터의 현재 값이 누산기의 새로운 비트 31값이 된다. 그러나 XRB 명령에 의하여 비트 0으로 알려진 비트는 RTMP를 단순히 대체(RB 명령어에서와 같이)하지 않는다. 대신 RTMP로 XOR되고, 그 결과는 RTMP에 저정된다. 이는 인증 프로토콜에 필요한 긴 LFSR의 구현을 가능하게 한다.
RPL-비트교체
연상기호:RPL
오피코드:1101
용법:RPL 값
RPL 명령어는 인증 칩에서 고급 WRITE 명령을 구현하기 위하여 디자인되었다. 상기 명령어는 누산기의 상위 16비트를 최종적으로 M 배열에 기록된 값(AccessMode값에 따른다)으로 교체하기 위하여 디자인 되었다. 상기 명령어는 3개의 오퍼랜드를 사용한다:Init, MHI 및 MLO. 상기 Init 오퍼랜드는 모든 내부 플래그를 세트하고, 차후의 프로세싱을 위하여 ALU 내에서 RPL 유닛을 준비한다. 누산기는 내부 AccessMode 레지스터로 전달된다. WRITE명령을 구현하는 경우에 있어서는 RPL Init를 호출하기 전에, 또는 TST 명령을 구현하는 경우에는 0으로 호출하기 전에 AM 플래시 메모리로부터 상기 누산기는 로드되어야 한다. 누산기는 바뀌지 않는다. MHI 및 MLO 오퍼랜드는 누산기의 (항상)상위 16비트와 비교하는데 M[C1]의 상위 또는 하위 16비트가 사용되는지 참조한다. MHI 및 MLO 명령어는 각각 초기화된 AccessMode값으로부터 다음 2비트를 사용하여 실행된다. 처음 실행에서는 MHI 또는 MLO는 최하위 2비트를 사용하고, 다음에는 제 2 비트를 사용한다.
RTS-서브루틴으로부터 복귀
연상기호:RTS
오피코드:01000
용법:RTS
상기 RTS 명령어는 가장 최근에 실행된 JSR 또는 JSI 명령어 다음의 명령에 서 리줌(resume)을 실행한다. 그러므로 상기 용어:서브루틴을부터 복귀. 사실, 상기 명령어는 스택으로부터 저장된 PC를 풀(pull)하고, 1을 더한 다음, 결과 어드레스에서 리줌을 행한다. 6단계의 실행이 제공되지만(5 서브루틴), 각 JSR 및 JSI 명령어를 RTS와 균형을 잡아야 하는 것은 프로그래머의 책임이다. 이전에 JSR을 실행하지 않고 RTS를 실행하면 스택에서 모든 어드레스가 풀(pull)되버린다.
SC-카운터 세트
연상기호:SC
오피코드:0101
용법:SC 카운터 값
상기 SC 명령어는 카운터에 특정 값을 로드하는데 사용된다. 오퍼랜드는 C1 및 C2중 어느 카운터에 로드할 것인지 결정한다. 로드되는 값은 2, 3, 4, 7, 10, 15, 19 및 31중 하나이다. 카운터 값은 루핑(looping) 및 인덱싱에 사용된다. C1 및 C2는 루핑 구성에 사용될 수 있지만(DBR 명령어와 함께 사용될 때), C1만이 다중 프리시전 변수의 32비트쌍 인덱싱에 사용된다.
SET-비트를 세트
연상기호:SET
오피코드:0111
용법:SET 플래그/래지스터
상기 SET 명령어는 특정 플래그 또는 플래시 메모리에 0 아닌 값을 설정하도록 한다. 이와 관련해서 CLR 명령어가 있다. WE 및 K2MX 오퍼랜드 각각은 나중에 프로세싱된 특정 플래그를 세트한다. IST 및 ISW 오포랜드 각가은 플래시 메모리에서 특정 비트를 세트하지만, MTR 오퍼랜드는 누산기의 현재 값을 MTR 래지스터로 전달한다. SET NX 명령어는 N1-N4에 다음 상수들을 로드한다:
인덱스 | 로드되는 상수 | 참조하는 초기 X[N] |
N1 | 2 | X[13] |
N2 | 7 | X[8] |
N3 | 13 | X[2] |
N4 | 15 | X[0] |
참조하는 각 초기 X[NN]은 인덱스 N1-N4인 최적화된 SHA-1 알고리즘의 초기상태와 부합되어야 한다. 각 인덱스 값 NN이 감소하면, 유효한 X[N]은 증가한다. 이는 X 워드가 가장 중요한 워드부터 메모리에 저장되기 때문이다.
ST-누산기의 저장
연상기호:ST
오피코드:1111
용법:ST 위치
상기 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는 높은 것에서 낮은 것의 순서로 정렬되어 있으므로, 배열에 서 다음 요소로 나아가면 인덱스는 감소한다. 만약 목적지(destination)가 플래시 메모리 내에 있다면, ST 명령의 효과는 누삭기 내부의 비트에 대응하는 플래시 메모리 내의 비트가 세트 되는 것이다. 누산기로부터 정확한 값이 저장되었는지 확인하기 위하여, 먼저 정확한 메모리 위치를 삭제하는 CLR 명령어를 사용해야한다.
TBR-테스트 및 브랜치
연상기호:TBR
오피코드:0000
용법:TBR 값 인덱스
테스트 및 브랜치 명령어는 누산기가 0 인지 아닌지를 테스트하고, 그리고 나서 누산기의 현재 상태가 테스트된 것과 부합되면 주어진 어드레스로 브랜치한다. 만약 Z 플래그가 TRB 테스트와 부합되면, PC를 비트 0=0이고, 상위 8비트는 MU로부터 유래된 9비트값으로 바꾼다. '값' 오퍼랜드는 0 또는 1이다. 0은 상기 테스트에서 누산기가 0이라는 것을 나타낸다. 1은 상기 테스트에서 누산기가 0이 아니라는 것을 나타낸다. '인덱스' 오퍼랜드는 상기 테스트를 성공시키기 위해 실행이 어디로 점프해야 하는지 나타낸다. 오퍼랜드의 남아있는 3비트는 점프 테이블 1의 최하 8 엔트리를 인덱스한다. 상위 8비트는 테이블로부터 취하고, 하위 비트들은 0으로 클리어된다. CMD는 리셋시에 0으로 클리어된다. 0은 TBR O으로 번역되는데, 이는 누산기=0이면 오프셋 0 어드레스에 저장된 어드레스로 브랜치 한다는 의미이다. 리셋시에 누산기 및 Z 플래그도 또한 0으로 리셋되는데, 상기 테스트가 참이어서, 그 효과는 점프 테이블 내의 0번째 엔트리에 저장된 어드레스로 점프하는 것이다.
XOR-배타적 OR
연상기호:XOR
오피코드:1010
용법:XOR 값
상기 XOR 명령어는 누산기에서 32비트 비트단위 XOR을 실행하고, 그 결과를 누산기에 저장한다. 오퍼랜드는 A, B, C, D, E, T, AM, MT, AE[C1], H[C1], B160[C1], R[C1], K[C1], M[C1], 또는 X[N4]중 하나이다. 또한, 결과(즉, 어떤 값이 누산기에 로드되느냐)에 따라 Z 플래그의 값이 세트된다. 비트단위의 NOT 연산은 누산기를 0×FFFFFFFF로 XOR 연산하는 것에 의하여 실행된다. X[N] 오퍼랜드는 (연산 후에)적합한 인덱스를 다음 값으로 증가시키는 부작용이 있다. XOR 연산을 하고 나서, 인덱스는 배열 X에서 다음 요소를 가리키게된다. N4는 또한 ST X[N4] 명령에 의하여 증가한다. 인덱스는 1만큼 감소하지만, 배열 X는 높은 것에서 낮은 것 순으로 정렬되어 있으므로, 인덱스가 줄어들면 배열에서 다음 요소로 이동한다.
프로그래밍 모드 검출 유닛
상기 프로그래밍 모드 검출 유닛은 입력 클록 전압을 모니터한다. 만약 클록 전압이 특정값이면 탬퍼 검출 라인 삭제가 트리거되어 모든 키들, 프로그램 코드, 비밀정보 등을 모두 삭제하고, 프로그램 모드로 들어간다. 키가 상기 유닛을 통과하지 않기 때문에 프로그래밍 모드 검출 유닛은 일반적인 CMOS로 구현할 수 있다. 비플래싱 CMOS로 구현할 필요는 없다. 공격자는 상기 칩을 CLK 입력을 통하여 프로그래밍모드 내에 위치시킬 수 있으므로, 특별히 탬퍼 검출 라인으로 프로그래밍 모 드 검출 유닛을 감쌀 필요가 없다. 프로그래밍 모드로 진입하기 위한 신호로서 탬퍼 검출 라인 삭제가 갖는 용도는 만약 공격자가 공격의 일부로서 프로그래밍 모드를 원한다면 탬퍼 검출 라인 삭제가 활성화되어 기능을 수행한다. 이는 인증 칩에 대한 공격을 보다 더 어렵게 만든다.
소음 발생기
키가 상기 유닛을 통과하지 않으므로, 소음 발생기는 일반적인 CMOS로 구현할 수 있다. 비플래싱 CMOS로 구현할 필요는 없다. 그러나 만일 공격자가 상기 유닛으로 탬퍼를 시도한다면 칩은 리셋되거나 모든 비밀 정보들을 삭제할 것이므로, 소음 발생기는 탬퍼 방지 및 검출 라인 둘 다에 의하여 보호되어야 한다. 또한, LFSR의 비트들은 탬퍼되지 않았는지 확인하여야 한다(즉, 패리티 체크). 만약 패리티 체크가 실패한다면, 탬퍼 검출 라인 삭제가 트리거된다. 결국 소음 발생기의 모든 64비트는 1개의 비트로 OR연산된다. 만약 이 비트가 0이라면, 탬퍼 검출 라인 삭제가 트리거된다. 이는 0이 LFSR의 무효인 상태이기 때문이다. 잡음 생성기 비트들이 단지 탬퍼 검출 및 예방 회로에서 사용되기 때문에 OK비트 준비를 사용할 시간이 없다.
상태 머신
상태 머신은 CPU의 작동 싸이클을 생성하고, 긴 명령어 작동동안 대기하며, 작동 싸이클동안 오피코드 및 오퍼랜드를 저장한다. 키가 상기 유닛을 통과하지 않 기 때문에, 상기 상태 머신은 일반적인 CMOS로 구현될 수 있다. 비플래싱 CMOS로 구현할 필요는 없다. 그러나, 오피코드/오퍼랜드 래치(latch)는 패리티 체크할 필요가 있다. 상태 머신에 포함된 논리 및 레지스터는 탬퍼 검출 라인들에 의하여 커버되어야 한다. 실행될 상기 명령어는 공격자에 의하여 변하지 않는다는 것을 보장한다.
인증 칩은 일반 목적 CPU에서 고속일 것을 요구하지 않는다. 인증 프로토콜을 실행하는데 충분할만큼 빨리 작동해야 하지만, 더 빨라야 하는건 아니다. 다음 하나를 인출(fetching)하는 동안 브랜치 제어 또는 오피코드 실행을 최적화하기 위한 특별화된 회로를 갖는 것 보다, 상태 머신은 아주 간단한 세계관을 채용하였다. 이는 구현시 에러 발생 가능성을 줄이는데 도움이 될 뿐만 아니라 디자인 시간을 줄이는데도 도움이 된다.
상태 머신의 일반적인 작동은 하기 싸이클의 집합을 생성하는 것이다:
싸이클 0:인출 싸이클. 여기에서는 프로그램 메모리에서 오피코드가 인출되고, 인출 오피코드로부터 유효 어드레스(effective address)가 생성된다.
싸이클 1:실행 싸이클. 여기에서는 생성된 유효 어드레스를 통해 오퍼랜드가 검색되고(잠재적으로), 연산이 실행된다.
일반적인 조건 하에서, 상태 머신은 싸이클들을 생성한다:0, 1, 0, 1, 0, 1, 0, 1... 그러나, 어떤 경우에는 상태 머신은 멈추고, 멈춰진 상황이 끝날때까지 각 클록 눈금에서 싸이클 0을 생성한다. 멈춘 상황은 플래시 메모리의 삭제 싸이클을 기다리는 것, 클라이언트가 시리얼 정보를 읽거나 쓰는 것을 기다리는 것 또는 무 효의 오피코드(탬퍼링 때문에)를 포함한다. 만약 플래시 메모리가 현재 삭제되면, 다음 명령어는 플래시 메모리의 삭제가 완료될 때까지 실행될 수 없다. 이는 메모리 유닛으로부터의 Wait 신호에 의하여 결정된다. 만약 Wait=1 이라면, 상태머신은 단지 싸이클 0만을 생성한다. 시리얼 I/O 작동에 의한 멈춤에는 또한 2개의 경우가 있다:
오피코드는 ROR OutBit이고, OutBitValid는 이미 1이다. 이는 현재 연산이 클라이언트에게 1비트를 출력할 필요가 있지만, 클라이언트는 아직 그 최근의 비트를 읽지 않은 것을 의미한다.
연산은 ROR InBit이고, InBitValid는 0이다. 이는 현재 연산이 클라이언트에게서부터 1비트를 읽을 필요가 있지만, 클라이언트가 아직 그 비트를 제공하지 않았다는 것을 의미한다.
상기 두 경우에 있어서, 상태 머신은 멈춘 상태가 끝날 때까지 멈춰있어야 한다. 따라서, 다음 '싸이클'는 과거 또는 이전의 싸이클에 달려있고, CMD의 현재 값은 Wait, OutBitValid 및 InBitValid이다. Wait는 MU에서 나오고, OutBitValid 및 InBitValid는 I/O 유닛에서 나온다. 싸이클이 0이면, 8비트 오피코드는 메모리 유닛에서 인출되고, 8비트 CMD 레지스터에 위치된다. 따라서 CMD 레지스터에 가능한 기록은 싸이클이다. 상기 유닛으로부터 2개의 출력이 있다: 싸이클 및 CMD. 이러한 값 둘 다는 인증 칩 내의 모든 다른 프로세싱 유닛들을 통과한다. 상기 1비트 싸이클값은 각 유닛들이 인출 또는 실행 싸이클이 발생했는지 여부를 알게 하는데, 반면에 8비트 CMD 값은 각 유닛들이 특정 유닛과 관련된 명령에 대한 적합한 행동 을 취하도록 한다.
도 187은 상태 머신의 요소들간의 데이터 흐름 및 관계를 보여준다:
논리1: | WaitOR ~(Old OOOR((CMD=ROR)&((CMD=InBit AND ~InBitValid)OR (CMD=OutBit AND OutBitValid)))) |
Old 및 CMD는 리셋시 모두 0으로 클리어된다. 그 결과 첫 싸이클은 1이 되는데, 이는 0 CMD가 실행되도록 한다. 0은 TBR 0으로 번역되는데, 이는 만약 누산기=0이라면 오프셋 0 어드레스에 저장되어있는 어드레스로 브랜치하는 것을 의미한다. 상기 누산기가 또한 리셋시에 0으로 클리어되기 때문에 테스트는 참이되고, 그 효과는 점프 테이블의 0번째 엔트리에 저장되어있는 어드레스로 점프하는 것이다. 상기 2개의 VAL 유닛은 상기 데이터가 그것들을 통과하는지 확인하기 위하여 디자인되었다. 각각은 탬퍼 방지 및 검출 라인 둘 다와 연결된 OK 비트를 포함한다. 상기 OK비트는 리셋시에 세트되고, 매 싸이클마다 탬퍼 검출 라인들로부터의 ChipOK 값을 OR 연산한다. OK 비트는 상기 유닛을 통과하는 각 데이터 비트와 AND연산된다. VAL1의 경우에 있어서, 만약 칩이 탬퍼되면 유효 싸이클은 항상 0이다. 따라서, 싸이클 1이 없기 때문에 프로그램 코드는 실행되지 않는다. 공격자가 Old 상태를 동결시키면 칩이 더이상의 명령어를 실행하지 않기 때문에, 만약 Old가 탬퍼되면 체크할 필요가 없다. VAL2의 경우에 있어서, 만약 칩이 템퍼되었다면 유효한 8비트 CMD값은 항상 0이고, 이는 TBR 0 명령어이다. 이는 모든 프로그램 코드의 실행을 멈춘다. VAL2 또한 CMD가 탬퍼되었는지를 확인하기 위한 CMD로부터의 1비트에 대한 패리티 체크를 행한다. 만약 패리티 체크가 실패하면 탬퍼 검출 라인 삭제가 크리거된다.
I/O 유닛
상기 I/O 유닛은 외부와 시리얼적으로 통신하는 역할을 한다. 상기 인증 칩은 슬레이브(slave) 시리얼장치로서 작동하는데, 클라이언트로부터 시리얼 정보를 받고, 명령을 프로세싱하고, 또한 결과데이터를 클라이언트에게 시리얼로 보낸다. 키가 상기 유닛을 통과하지 않기 때문에, 상기 I/O 유닛은 일반적인 CMOS로 구현할 수 있다. 비플래싱 CMOS로 구현할 필요는 없다. 또한 공격자가 이것을 파괴하거나 수정할 실익이 없으므로 패리티 체크를 위한 레치(latch)를 둘 필요가 없다. 만약 탬퍼 검출 라인들이 고장나면 I/O 유닛은 0들을 출력하고, 0들을 입력한다. 탬퍼 검출 라인들이 고장나면 리셋 또는 플래시 메모리의 삭제가 이루어지기 때문에, 이것은 공격자가 리셋 및/또는 회로 삭제를 불능케 할 때에만 효과가 있다.
InBit, InBitValid, OutBit 및 OutBitValid의 1비트 레지스터는 클라이언트(시스템) 및 인증 칩간의 통신에만 사용된다. InBit 및 InBitValid는 클라이언트가 명령들과 데이터를 인증 칩으로 보내는 수단을 제공한다. OutBit 및 OutBitValid는 클라이언트가 인증 칩으로부터 정보를 받는 수단을 제공한다. 칩이 리셋되면, InBitValid 및 OutBitValid는 모두 0으로 클리어된다. 클라이언트는 명령들 및 파라미터 비트들을 인증 칩으로 한번에 1비트씩 보낸다. 인증 칩의 관점에서:
InBitValid가 0으로 클리어되어 있는 동안 InBit로부터 읽기가 단절된다. 클 라이언트가 다음 입력 비트를 InBit에 기록하는 동안 InBitValid는 0으로 클리어된 상태로 남아있는다. InBit의 읽기(read)는 클라이언트가 다음 InBit 읽기를 할 수 있도록 InBitValid 비트를 0으로 클리어한다. 클라이언트는 InBitValdi 비트가 0으로 클리어된 상태가 아니라면 인증 칩에 1비트도 기록할 수 없다.
OutBitValid가 세트되어 있는 동안 OutBit에 대한 기록은 단절된다. 클라이언트가 OutBit로부터 일기를 하고 있는 동안 OutBitValid는 계속 세트된다. OutBit에 대한 기록은 OutBitValid 비트를 세트하여 클라이언트가 다음 OutBit를 읽을수 있게 한다. 클라이언트는 OutBitValid 비트가 세트되어 잇지 않으면 인증 칩에서 1비트도 읽을 수 없다.
상태 머신이 명령이 멈춘것을 관리하지만, 다양한 통신 레지스터 및 통신회로가 I/O유닛에서 발견된다.
도 188은 I/O 유닛의 요소들간의 데이터 흐름 및 관계를 보여준다.
로직1: | 싸이클 AND(CMD=ROR OutBit) |
시리얼 I/O 유닛은 데이터 핀을 통하여 외부 세계와 통신하기 위한 회로를 포함한다. 상기 InBitUsed 제어 신호는 주어진 클록 싸이클(싸이클의 모든 상태일 수 있다) 동안 InBit를 사용하는 모든 유닛에 의하여 세트된다. 2개의 VAL 유닛은 탬퍼 방지 및 검출 회로에 연결된 확인 유닛으로, 각각 하나의 OK 비트를 갖고 있다. OK 비트는 리셋시에 세트되고, 매 싸이클마다 탬퍼 검출 라인들로부터의 ChipOK 값들과 OR연산된다. 상기 OK 비트는 유닛을 통과하는 데이터 비트와는 AND연산된다.
VAL1의 경우에 있어서, 만약 칩이 탬퍼되면 칩으로부터의 유효한 비트 출력은 항상 0이다. 따라서 공격자에 의하여 생성될 수 있는 유용한 출력은 없다. VAL2의 경우에 있어서, 만약 칩이 탬퍼된다면 칩에 대한 유효한 비트 입력은 항상 0이다. 따라서 공격자에 의해 선택될 수 있는 유효한 입력은 없다. 공격자는 이것들을 파괴하거나 수정하므로써 아무것도 얻을 수 없으므로, I/O 유닛에서 레지스터를 검증할 필요가 없다.
ALU
도 189는 산술 논리 연산 유닛의 도식적인 블록 다이어그램을 도시한다. 산술 논리 연산 유닛(ALU)는 32비트의 누산기(Accumulator) 레지스터 뿐만 아니라 간단한 산술과 논리 연산들에 대한 회로도 포함한다. 키가 그것을 통과하기 때문에 ALU와 모든 서브유닛들은 비-플래싱 CMOS로 실행되어야 한다. 게다가, 누산기는 패리티 검사가 되어야 한다. ALU에 포함된 논리회로(logic)와 레지스터들은 양 탬퍼 검출 라인(Tamper Detection Line)들로 연결되야 한다. 이것은 키들과 중간 계산 값들이 공격자(attacker)들에 의해 바뀌지 못하도록 보증하는 것이다. 1-비트 Z 레지스터는 0(zero-ness) 상태의 누산기를 포함한다. Z와 누산기 레지스터 모두 RESET에선 0이다. Z레지스터는 누산기가 업데이트 될때마다 업데이트가 되고, 누산기는 어떠한 명령들에 대해서도 업데이트가 된다:LD, LDK, LOG, XOR, ROR, RPL 그리고 ADD. 각각의 산술과 논리 블록은 두개의 32-비트 입력에서 작동한다: 누산기 의 현재값, 그리고 현재 MU의 32-비트 출력. 다음과 같은때 :
Logic1: | Cycle AND CMD7 AND (CMD6-4 ≠ST) |
누산기와 Z의 WriteEnable은 CMD7과 Cycle을 계산(Logic1에 기인)에 넣기 때문에, 이 두 비트들이, 그 출력을 선택하기 위해 멀티플렉서 MX1에 의해 요구된다. MX1에 대한 출력 선택은 오로지 CMD의 6-3 비트들만을 얻으므로 결과적으로 단순한다.
Output | CMD6-3 | |
MX1 | ADD | ADD |
AND | LOG AND | |
OR | LOG OR | |
XOR | XOR | |
RPL | RPL | |
ROR | ROR | |
From MU | LD or LDK |
두 개의VAL 유닛들은 각기 OK비트인 탬퍼 방지 및 검출 회로와 연결된 검증유닛이다. OK 비트는 RESET에서는 1로 소거되고, 양 탬퍼 검출 라인들의 각 사이클로부터 온 ChipOK 값들과 OR된다. OK 비트는 그 유닛을 지나는 각 데이터 비트들과 AND된다. VAL1의 경우에는, 누산기로부터의 유효한 비트 출력는 만약 칩이 갑섭을 받은 경우에는 언제나 0이 될 것이다. 이것은 누산기를 포함한 어떠한 프로세싱에서 공격자(attacker)를 방지한다. VAL1은 또한 누산기 상에서 패리티 검사를 수행하고, 만약 검사가 페일하면 삭제 탬퍼 검출 라인을 설정한다. VAL2의 경우에는, 만약 칩이 간섭을 받은 경우에는 누산기의 유효한 Z 상태가 항상 참이 되게한다. 그러므로 어떠한 루핑 구성들도 공격자에 의해 생성될 수 없다. ALU의 남겨진 함수 블록 들도 다음과 기술된다. 모든 것은 비-플래싱 CMOS에서 실행된다.
Block | Description |
OR | 멀티 플렉서 MX1, ORs 모든 32 비트들에서 함께32-비트 출력을 받아 1비트로 만든다. |
ADD | 모듈232, 그것의 두개의 입력들의 더함의 출력을 산출한다. |
AND | 그것의 두개의 32-비트 입력들의 평행 비트와이즈(bitwise) AND의 32-비트 출력을 산출한다. |
OR | 그것의 두개의 32-비트 입력들의 평행 비트와이즈 OR의 32-비트 출력을 산출한다. |
XOR | 그것의 두개의 32-비트 입력들의 평행 비트와이즈 XOR의32-비트 출력을 산출한다. |
RPL | 아래에 더 세부사항을 검토함. |
ROR | 아래에 더 세부사항을 검토함. |
RPL
도 190는 RPL 유닛의 구조적인 블록 다이어그램을 도시한다. RPL 유닛은 ALU의 내부 구성요소이다. 그것은 인증칩의 RPLCMP 기능성을 실행하기 위해 고안됐따. RPLCMP 명령은 특히 AccessMode상의 값에 기반한, 플래쉬 메모리 M에 안정된 기록을 목적으로 고안되었다. RPL 유닛은 각각의 시프트 펄스마다 오른쪽으로 두비트씩 자리옮김을 하는, AMT(AccessModeTemp)라 불리는 32-비트 시프트 레지스터, 그리고 EE와 DE라고 불리는, 직접적으로 WR 유사부호의 EqEncountered 와 DecEncountered 플래그(flag)들에 기반한, 두 개의 1-비트 레지스터들을 포함한다. 모든 레지스터들은 RESET에서는 0으로 소거된다. AMT는 RPL INIT 명령과 함께 32비트 AM값(누산기를 경유하는)이 로드되고, EE와 DE는 RPL MHI와 RPL MLO에 대한 요청을 경유하는 일반적인 기록 알고리즘에 따라 설정된다. EQ와 LT 블록들은 정확히 WR 명령 유사부호에 문서화된 것과 같은 기능성을 갖는다. EQ블록은 만약 두개의 16-비트 입력들이 비트-일치라면 1을, 그렇지 않으면 0을 산출한다. LT블록은 누산 기로부터의 상위 16-비트 입력이 MX2를 경유하여 MU로부터 선택된 16-비트 값보다 작은 경우 1을 산출한다. 비교는 비부호이다. 피연산자에 대한 비트 패턴들은 특히 조합 논리를 단순하게 만들기 위해 선택되었다. 우리가 패턴들을 사용할 것이기 때문에 피연산자에 대한 비트 패턴들은 여기 다시 나열한다:
Operand | CMD3-0 |
Init | 0000 |
MLO | 1110 |
MHI | 1111 |
MHI와 MLO는 초기 비트 패턴과 그것들을 쉽게 구분할수 있도록 설정된 상위(hi) 비트들을 갖고, 최하위(lowest) 비트는 MHI와 MLO 사이를 구분하기 위해 사용될 수 있다. EE와 DE 플래그들은 RPL 명령들이 송신될 때마다 업데이트 되어야 한다. 초기단계에서, 우리는 두개의 값을 0으로 설정할 필요가 있고, MHI와 MLO에 대하여, 우리는 EE와 DE값들을 적당하게 업데이트해 줄 필요가 있다. EE와 DE에 대한 기록이능은 그러므로:
Logic1 | Cycle AND (CMD7-4 = RPL) |
32비트 AMT 레지스터를 가지고, 우리는 RPL 초기 명령 상의 AM(MU로부터 읽어들인)의 내용을 레지스터에 로드하는 것과, RPL MLO와 RPL MHI 명령에 대하여 AMT 레지스터를 오른쪽으로 두 비트 자리만큼 시프트하는 것을 원한다. 이것은 RPL 피연산자(CMD3)의 최상위 비트에 대한 단순한 검사가 될 수 있다. AMT 레지스터에 대한 기록이능과 시프트가능은 그러므로:
Logic2 | Logic1 AND CMD3 |
Logic3 | Logic1 AND ~CMD3 |
Logic3의 출력은 또한 멀티플렉서 MX1에 대한 입력으로 유용한데, 그것이 현 재 2개의 접근 모드 비트들 또는 00(그것이 접근 모드 RW를 나타내기 때문에 DE와 EE 레지스터들의 리셋으로 단부난다)을 지나는 게이트로 사용될 수 있기 때문이다. 결과적으로 MX1은:
Output | Logic3 | |
MX1 | AMT output | 0 |
00 | 1 |
RPL 논리는 오직 누산기의 상위 16비트들을 대신한다. 하위 16비트들은 손대지 않고 통과한다. 그러나, MU로부터의 32비트들 가운데 (M[0-15]가운데 하나와 일치하는), 오직 상위 또는 하위 16비트들만 사용된다. 그래서 MHI와 MLO를 구분하기 위해 MX2는 CMD0를 검사한다.
Output | CMD0 | |
MX2 | 하위 16비트들 | 0 |
상위 16비트들 | 1 |
DE와 EE 레지스터들 업데이트에 대한 논리는 WR 명령의 유사부호와 일치한다. 00(=RPL INIT동안에 발생하는 RW) 의 AccessMode 값의 입력은 DE와 EE 모두가 0(올바른 초기화 값)으로 로드되도록 야기한다. EE는 Logic4의 출력로 로드되고, DE는 Logic5의 출력로 로드된다.
Logic4 | (((AccessMode=MSR) AND EQ) OR ((AccessMode=NMSR) AND EE AND EQ)) |
Logic5 | (((AccessMode=MSR) AND LT) OR ((AccessMode=NMSR) AND DE) OR ((AccessMode=NMSR) AND EQ AND LT)) |
누산기의 상위 16비트는 M에 씌여진 값으로 대신하여야 한다. 결과적으로 Logic6는 WR 명령 유사부호로부터온 WE 플래그와 일치한다.
Logic6 | ((AccessMode=RW) OR ((AccessMode=MSR) AND LT) OR ((AccessMode=NMSR) AND (DE OR LT))) |
Logic6의 출력은 직접적으로 누산기의 원래 16비트와 멀티플렉서 MX3를 경유한 M[0-15]의 값들 사이의 선택을 구동하는데 사용된다. 만약 누산기의 16비트들이 선택된다면(누산기를 변경하지않고 둔채), 이것은 누산기값이 M[n]에 씌여질 수 있다는 것을 의미한다. 만약 M의 16비트값이 선택된다면(누산기의 상위 16비트를 바꾸는 것), 이것은 M의 16비트 값이 바뀌지 않을것이라는 것을 의미한다. 그러므로 MX3는 다음의 형식을 갖는다:
출력 | Logic6 | |
MX3 | MU로부터의 16비트 | 0 |
Acc로부터의 16비트 | 1 |
공격자로서 어떠한 패리티 검증 AMT 포인트가 없다는 것은 MX3가 0(그때문에 공격자가 M에 어떠한 값이든 쓰는 것이 가능하다)이 되도록 입력값을 넣는 데 더욱 좋다. 그러나, 만약 공격자가 칩을 레이져-컷팅의 문제를 일으키려할 예정이라면, MX3의 입력값을 고정시킴으로서 제한된 선택-구문의 허용된 가능성보다 더 나은 목표들이 있을 것이다.
ROR
도 191은 ALU의 ROR 블록의 구조적인 블록 다이어그램을 도시한다. ROR 유닛은 ALU 내부의 구성요소이다. 그것은 인증 칩의 ROR 기능성을 실행하려고 고안되었다. RTMP라 이름붙여진 1-비트 레지스터는 ROR 유닛 안에 포함되어있다. RTMP는 RESET에서는 0으로 소거되고, 그리고 ROR RB와 ROR XRB 명령 동안에 설정된다. RTMP 레지스터는 어떠한 분기 구성를 가진 선형 피드백 시프트 레지스터들의 실행을 허용한다. XOR 블록은 2개의 단일 비트 입력이고, 1-비트 출력 XOR이다. RORn, 블록은 명백해 보이지만, 사실 MX3로 들어가는 내부전선일 것인데, 왜냐하면 각 블록은 단순하게 32-비트들의 재연결, 즉 오른쪽 N 비트들이 회전되는 것이기 때문이다. 모두 3개의 멀티플렉서(MX1, MX2, MX3)는 8-비트 CMD 값에 의존한다. 그러나 ROR op-code에 대한 비트 패턴들은 논리 최적화 목적에 따라 배열되었다. 피연산자에 대한 비트 패턴들은 우리가 패턴들을 사용할 것이기 때문에 다시 여기에 나열한다:
피연산자 | CMD3-0 |
InBit | 0000 |
OutBit | 0001 |
RB | 0010 |
XRB | 0011 |
IST | 0100 |
ISW | 0101 |
MTRZ | 0110 |
1 | 0111 |
2 | 1001 |
27 | 1010 |
31 | 1100 |
Logic1은 RTMP에 기록 가능 신호를 제공하기 위해 사용된다. RTMP 레지스터는 ROR RB와 ROR XRB 명령 동안에만 씌여져야 한다. Logic2는 InBit가 소멸될때마다 제어 신호를 제공하는데 사용된다. 두개의 조합 논리 블록들은:
Logic1 | Cycle AND (CMD7-4 = ROR) AND (CMD3-1=001) |
Logic2 | Cycle AND (CMD7-0 = ROR InBit) |
멀티플렉서 MX1을 가지고, 우리는 RTMP에 저장될 비트를 선택한다. Logic1은 이미 RB와 XRB 가운데 하나에 대한 CMD입력을 좁히고 있다. 우리는 그러므로 둘 사이를 구별짓기 위해 간단하게 CMD0를 검사할 수 있다. 이어지는 표는 CMD0와 MX1
의 출력값 사이의 관계를 표현한다.
출력 | CMD0 | |
MX1 | Acc0 | 0 |
XOR output | 1 |
멀티플렉서 MX2를 가지고, 우리는 어떠한 입력값이 누산기 입력 비트값을 대신할 것인지를 선택한다. 우리는 단지 여기서 조그만 양의 최적화를 실행할 수 있는데, 왜냐하면 각기 다른 입력 비트는 전형적으로 특정한 피연산자에 관계되기 때문이다. 이어지는 표는 CMD3-0와 MX2의 출력값 사이의 관계를 표현한다.
출력 | CMD3-0 | 주석 | |
MX2 | Acc0 | 1xxx OR 111 | 1, 2, 27, 31 |
RTMP | 0001x | RB, XRB | |
InBit | 000x | InBit, OutBit | |
Mu0 | 010x | IST, ISW | |
MTRZ | 110 | MTRZ |
마지막 멀티플렉서, MX3는 32-비트 값의 마지막 회전을 동작한다. 다시, CMD 피연산자의 비트 패턴은 다음과 같은 이점을 갖는다:
출력 | CMD3-0 | 주석 | |
MX3 | ROR1 | 0xxx | 2,27,31을 제외한 모두 |
ROR2 | 1xx1 | 2 | |
ROR27 | 1x1x | 27 | |
ROR31 | 11xx | 31 |
MINTICKS UNIT
도 192는 데이터 흐름과 MinTicks 유닛의 구성요소들간에 관계를 보여준다. MinTicks 유닛은 인증칩 내부의 키-기반 연산들 가운데 프로그램할 수 있는 최소 딜레이(계수기를 경유하는)에 대한 책임이 있다. MinTicksUnit에 포함된 논리회로와 레지스터들은 양 탬퍼 검출 라인들에 연결되어야 한다. 이것은 공격자가 키-기반 기능에 대한 요청들 가운데 시간을 변경할 수 없다는 것을 보장한다. 거의 모든 MinTicksUnit들은 정규 CMOS와 실행되는데, 그 이유는 키가 이 유닛의 대부분을 통과하지 않기 때문이다. 그러나 누산기는 SET MTR 명령에서 사용된다. 결과적으로 이 회로의 작은 부분은 비-플래싱 CMOS에서 실행되어야 한다. MinTicksUnit의 나머지는 비-플래싱 CMOS와 실행되지 않아야 한다. 그러나, MTRZ 래치(latch)는 패리티 검증될 필요가 있다.
MinTicksUnit은 MTR(MinTicksRemaining)이라고 불리는 32-비트 레지스터를 포함한다. MTR 레지스터는 다음 키-기반 기능이 요청되기 전에 다수의 남아있는 시간을 포함한다. 각 사이클에서, MTR에서의 값은 값이 0이 될때까지 1씩 감소한다. 한번 MTR이 0이 되면, 그것은 더이상 감소되지 않는다. MTRZ(MinTickRegisterZero)라 불리는 추가적인 1-비트 레지스터는 현재 0인 MTR 레지스터를 나타낸다. MTRZ는 만약에 MTRZ 레지스터가 0이면 1이 되고, MTRZ 레지스터가 0이 아니면 MTRZ는 0이된다. MTR 레지스터는 RESET에 의해 소거되고, 누산기의 현재값을 MTR 레지스터로 전송하는, SET MTR 명령을 경유하여 새로운 계수로 설정된다.
Logic1 | CMD=SET MTR |
그리고:
출력 | Logic1 | MTRZ | |
MX1 | Acc | 1 | - |
MTR-1 | 0 | 0 | |
0 | 0 | 1 |
사이클이 MTR과 MTRZ의 기록이능과 연결되어있기 때문에, 이러한 레지스터들은 오로지 실행 사이클, 즉 사이클=1일 때인 동안만 업데이트한다. 두개의 VAL 유닛은 템퍼 방지과 검출 회로와 연결된 검증 유닛들이고, 각기 OK비트이다. OK비트는 RESET 상에선 1로 설정되고, 각 사이클에서 양 탬퍼 검출 라인들의 ChipOK 값들과 ORed된다. OK비트는 그 유닛을 통과하는 각 데이터 비트와 ANDed된다. VAL1의 경우에는, MTR로부터의 유효한 출력은 0인데, 그것은 감산 유닛으로부터의 출력이 항상 1인것을 의미하고, 그때문에 MTRZ가 0으로 남도록 하고, 그 때문에 공격자가 키-기반 함수들을 사용하는 것을 방지한다. VAL1은 또한 MTR 레지스터의 패리티를 검증한다. 만약 패리티 검증이 페일하면, 삭제 탬퍼 검출 라인이 유발된다. VAL2의 경우에는, 만약 칩이 간섭을 받아왔다면, MTRZ의 유효 출력은 0이 될 것이고, MinTicksRemaining 레지스터가 아직 0에 도달하지 않았다는 것을 의미하는데, 그 때문에 공격자가 키-기반 함수들을 사용하는 것을 방지한다.
프로그램 제어 유닛(Program Control Unit)
도 192는 프로그램 제어 유닛의 블록 다이어그램이다. 프로그램 계수 유닛(PCU)는 분기와 서브루틴 제어에 대한 로직뿐만 아니라, 9비트 PC(Program Counter) 또한 포함한다. 프로그램 제어 유닛은 정규 CMOS와 실행되는데, 그 이유 는 키가 이 유닛을 통과하지 않기 때문이다. 그것은 비-플래싱 CMOS와 실행되지 않는다. 그러나, 래치들은 패리티-검증이 될 필요가 있다. 게다가, 메모리에 포함되어있는 논리 유닛과 레지스터들은 PC가 공격자에 의해 변경되지 못하도록 양 탬퍼 검출 라인들과 연결되어있어야 한다. PC는 실제로 9-비트 PCA(PC Array)에 의해 6-단계로 실행되고, 3-비트 SP(Stack Pointer)에 의해 인덱스된다. PC와 SP 레지스터들은 RESET상에서 모두 0으로 소거되고, 조작부호에 따라 프로그램 제어의 흐름동안 업데이트된다. PC에 대한 현재 값은 사이클 0(패치 사이클)동안 MU에 대한 출력이 된다. PC는 사이클 1(실행 사이클)동안 실행되는 명령에 따라 업데이트된다. 대부분의 경우, PC는 단순히 1씩 증가한다. 그러나, 분기가 일어난 경우(서브루틴이나 점프의 어떠한 다른 형식으로 인해), PC는 새로운 값으로 대체된다. 새로운 PC값을 계산하는 메커니즘은 실행되는 조작부호에 의존한다.
ADD 블록은 단순한 가산 모듈(29)이다. 입력은 PC 값과 1(PC를 1씩 증가시키기 때문에) 또는 9비트 오프셋(MU에서의 하이(hi)비트 셋과 하위 8비트를 가진) 가운데 하나이다. "+1" 블록은 3비트 입력을 갖고 1(반복되며)씩 그것을 증가시킨다. "-1" 블록은 3-비트 입력을 갖고 1(반복되며)씩 그것을 감소시킨다. PC 제어의 다른 형식들은 다음과 같다:
명령 | 행동 |
JSR, JSI(ACC) | 후에 스택에 들어가는 PC의 낡은 값을 저장하라. 비트 0=0(서브루틴은 그러므로 짝수 주소에서 출발해야한다)인 곳에서 새로운 PC는 9비트 값이고, 상위 8비트의 주소는 MU로부터 나온다(MU 8-비트 값은 JSR에 대한 점프표1, JSI에 대한 점프표2이다). |
JSI RTS | 스택에서 PC의 낡은값을 추출하고 1만큼 증가해서 새 PC에 넣어라. |
TBR | 만약 Z 플래그가 TBR 테스트와 일치한다면, PC를 비트0=0인 9비트 값과 MU에서 나온 8비트로 대체하라. 다른 경우에는 현재 PC값을 1만큼 증가시키라. |
DBR C1, DBR C2 | C1Z와 C2Z가 설정(DBR C1에대한 C1Z, DBR C2에 대한 C2Z)되어있다면 현재의 PC에 9비트 오프셋(MU로부터의 8비트 값과 hi 비트=1)을 더하라. 다른 경우에는 현재 PC를 1만큼 증가시키라. |
All others | 현재 PC를 1만큼 증가시키라. |
JSR과 JSI(ACC)에 대한 같은 행위들이 일어나기 때문에, 우리는 Logic1에서 경우를 명확하게 찾을 수 있다. 같은 개념으로, 우리는 Logic2에서 JSI RTS의 경우를 명확하게 테스트할 수 있다.
Logic1 | (CMD7-5 = 001) OR (CMD7-3 = 01001) |
Logic2 | CMD7-3 = 01000 |
PC를 업데이트할 때, 우리는 PC를 완전히 새로운 아이템으로 바꿀 것인지, 아니면 추가할 것인지를 결정해야만 한다. 이것은 테스트 비트가 누산기의 상태와 일치하는한 TBR뿐만 아니라, JSR과 JSI(ACC)에 대한 경우이다.TBR을 제외한 모두는 Logic1에 의해 테스트받아서, Logic3 또한 그것의 입력으로 Logic1의 출력을 포함한다. 그후 Logic3에서의 출력은 새로운 PC값을 얻기위해 멀티플렉서 MX2에 사용된다.
Logic3 | Logic1 OR ((CMD7-4 =TBR) AND (CMD3 XOR Z)) | |
출력 | Logic3 | |
MX2 | 가산기로부터의 출력 | 0 |
대체 값 | 1 |
9-비트 가산에 대한 입력은 우리가 1(보통의 경우에)씩 증가할 것인지, 아니 면 오프셋을 MU(DBR 명령)로부터의 리드로 더할 것인지에 의존한다. Logic4는 테스트를 발생한다. Logic4의 출력은 그 후 직접적으로 멀티플렉서 MX3에 따라 사용된다.
Logic4 | ((CMD7-3 = DBR C1) AND C1Z) OR (CMD7-3 = DBR C2) AND C2Z)) | |
출력 | Logic4 | |
MX3 | 가산기로부터의 출력 | 0 |
대체 값 | 1 |
마침내, 사용할 PC 엔트리의 선택은 SP에 대한 현재 값에 의존한다. 우리가 서브루틴에 들어갈 때, SP 인덱스 값은 증가할 것이고, 우리가 서브루틴으로부터 돌아올 때, SP 인덱스 값은 감소할 것이다. 다른 모든 경우에, 그리고 우리가 명령을 패치하길 원할 때, SP에 대한 현재값은 사용될 것이다. Logic1은 우리에게 서브루틴이 들어가질 때를 이야기하고, Logic2는 서브루틴이 그로부터 돌아와질 때를 이야기한다. 멀티플렉서 선택은 그러므로 다음으로 정의된다:
출력 | Cycle/Logic1/Logic2 | |
MX1 | SP-1 | 1x1 |
SP+1 | 11x | |
SP | 0xx OR 00 |
두개의 VAL 유닛들은 각기 OK비트를 지닌, 탬퍼 방지 및 검출 회로에 연결된 검증 유닛들이다. OK비트는 RESET 상에서는 1로 설정되고, 각 사이클에서 양 탬퍼 검출 라인들로부터의 ChipOK 값들과 OR된다. OK비트는 그 유닛을 통과하는 각 데이터 비트와 AND된다. 양 VAL 유닛들은 또한 데이터 비트들을 그것들이 정당한지를 보증하기 위해 패리티-검증을 한다. 만약 패리티-검증이 페일하면, 삭제 탬퍼 검출 라인이 유발된다. VAL1의 경우에는, SP 레지스터로부터의 유효한 출력은 언제나 0이 될 것이다. 만약 칩이 간섭받는다면, 이것은 공격자가 어떠한 서브루틴들을 실행하는 것을 방지한다. VAL2의 경우에는, 유효한 PC 출력은 만약 칩이 간섭받는다면 언제나 0이 될 것이다. 이것은 공격자가 어떠한 프로그램 코드를 실행하는 것을 방지한다.
메모리 유닛(Memory Unit)
메모리 유닛(MU)은 인증 칩의 내부 메모리를 포함한다. 이 내부 메모리는 9-비트의 주소에 의해 어드레싱되는데, 그것은 주소 생성 유닛에서 통과된 것이다. 메모리 유닛은 주소에 따라서 적당한 32-비트와 8-비트 값을 출력한다. 메모리 유닛은 또한 특정한 프로그래밍 모드에 대한 책임이 있는데, 그것은 프로그램 플래쉬 메모리의 입력을 허용한다. 메모리 유닛 전체의 내용은 간섭으로부터 보호받아야 한다. 그러므로 메모리 유닛에 담겨있는 논리회로와 레지스터들은 양 탬퍼 검출 라인들과 연결되어야 한다. 이것은 프로그램 코드, 키들 그리고 중간 데이터 값들이 공격자에 의해 바뀔 수 없다는 것을 보장한다. 모든 플래쉬 메모리는 멀티스테이트가 될 필요가 있고, 부적절한 볼티지에 대한 판독상태를 검증받아야 한다. 32-비트 램 또한 패리티-검증이 될 필요가 있다. 메모리 유닛을 지나는 32-비트 데이터 통로는 키가 그것들을 따라 통과하기 때문에 비-플래싱 CMOS와 실행되어야 한다.
상수(Constants)
상 메모리 영역은 주소범위를 갖는다:000000000-000001111. 그것은 그러므로 00000xxxx 범위이다. 그러나 다음 48개 주소가 남겨져있기 때문에, 이것은 디코딩되는동안 이점을 취할 수 있다. 상 메모리 영역은 그러므로 조합 논리에 들어갈 하위 4비트를 가진, 다음의 32-비트 출력값에 맵핑되는 4비트를 가진, 주소(Adr8-6 = 000)의 상위 3비트에 의해 선택될 수 있다.
Adr3-0 | 출력 값 |
0000 | 0x00000000 |
0001 | 0x36363636 |
0010 | 0x5C5C5C5C |
0011 | 0xFFFFFFFF |
0100 | 0x5A827999 |
0101 | 0x6ED9EBA1 |
0110 | 0x8F1BBCDC |
0111 | 0xCA62C1D6 |
1000 | 0x67452301 |
1001 | 0xEFCDAB89 |
1010 | 0x98BADCFE |
1011 | 0x10325476 |
11xx | 0xC3D2E1F0 |
RAM
32 엔트리 32-비트 램에 대한 주소 공간은 001000000-001011111이다. 그것은 그러므로 0010xxxxx 범위이다. 램 메모리 영역은 그러므로 주소에 32개값을 선택하는 하위 5비트를 가진, 주소의 상위 4비트에 의해 선택될 수 있다. 인접한 32개 엔트리 주소 공간이 주어졌기 때문에, 램은 쉽게 단순한 32x32-비트 램으로서 실행될 수 있다. 비록 CPU는 00000-11111 범위의 각 주소를 특별한 방식으로 다루지만, 램 주소 디코더 그자체는 어떠한 주소도 특별히 다루지 않는다. 비록 어떠한 프로그램 코드가 이것을 승인하지 않더라도, 모든 램 값은 RESET 상에서는 0으로 소거된다.
플래쉬 메모리- 변수(Flash Memory-Variables)
32-비트 확장 플래쉬 메모리에 대한 주소 공간은 001100000-001111111이다. 그것은 그러므로 0011xxxxx의 범위이다. 플래쉬 메모리 영역은 그러므로 어드레스에 값을 선택하는 하위 5비트를 지닌, 주소의 상위 4비트에 의해 선택될 수 있다. 플래쉬 메모리는 삭제에 대한 특별한 요구를 갖는다. 플래쉬 메모리의 삭제가 완료되는데는 꽤 상당한 시간이 걸린다. 웨이트 신호는 그러므로 CLR 명령의 리시트로 플래쉬 제어회로 내부에 설정되고, 단지 요청된 메모리가 삭제되었을 때 한번만 소거된다. 내부적으로, 특정 메모리 영역의 삭제 라인들은 함께 묶여있고, 결과적으로 다음 표에서 암시하는 것과 같이 단지 2-비트만이 요구된다:
Adr4-3 | 삭제 범위 |
00 | R0-4 |
01 | MT, AM, K10-4, K20-4 |
10 | 개별적 M 주소(Adr) |
11 | IST, ISW |
비록 프로그램 코드가 불필요한 정보와 다른 플래쉬(공정 후)에 대한 초기 값들을 취하지 않아야 하지만,플래쉬 값은 RESET에 의해서는 변하지 않는다. 플래쉬 주소의 사용을 만드는 연산은 LD, ST, ASS, RPL, ROR, CLR, 그리고 SET이다. 모든 경우에, 주소 생성 및 디코딩을 최소화하기 위해서, 연산자들과 메모리 배치는 가깝게 연결되어있다. 플래쉬 메모리의 변수 부분 전체는 또한 프로그래밍 모드로 들어가면서, 그리고 일정한 물리적 공격의 검출 가운데 삭제된다.
플래쉬 메모리- 프로그램(Flash Memory - Program)
384 엔트리 8-비트 프로그램 플래쉬 메모리의 주소 영역은 010000000-111111111이다. 그것은 그러므로 01xxxxxxx-11xxxxxxx의 영역을 갖는다. 디코딩은 롬 스타트 주소와 주소 범위가 주어지기 때문에 수월하다. 비록 CPU는 주소 영역의 부분을 특별하게 다루지만, 주소 디코더 그 자체는 어떠한 주소도 특별히 다루지 않는다. 플래쉬 값은 RESET에 의해 바뀌지 않고, 오로지 프로그래밍 모드로 들어감으로서 소거된다. 공정 후에, 플래쉬 컨텐츠는 불필요한 것으로 여겨질 것이다. 384 바이트는 오로지 프로그래밍 모드에 있을 때 스테이트 머신에 의해서만 로드될 수 있다.
BLOCK DIAGRAM OF MU
도 193은 메모리 유닛의 블록 다이어그램이다. 보여진 논리는 32-비트 데이터와 8-비트 데이터가 분리명령에 의해 요구된다는 이점을 가지고, 그러므로 디코딩에 더 적은 비트가 요구된다. 보여진대로, 32-비트 출력과 8-비트 출력은 항상 생성된다. 인증칩의 리메인더 내부의 적당한 구성요소들은 단순히 실행되고 있는 명령에 의존한 32-비트 또는 8-비트 값을 사용한다. 멀티플렉서 MX1은 진리표 상수, 램, 플래쉬 메모리의 선택에서 나온 32-비트 출력을 선택한다. 단지 2비트가 , Adr6와 Adr5라 불리는, 이 3개의 출력 가운데 선택하는데 요구된다. 그래서 MX2는 다음 의 형식을 갖는다:
출력 | Adr6-5 | |
MX2 | 32비트 진리표에서의 출력 | 00 |
32비트 플래쉬 메모리에서의 출력 | 10 | |
32비트 램에서의 출력 | 11 |
32-비트 플래쉬 메모리의 특정 부분을 삭제하는 논리는 Logic1에 의해 충족된다. 삭제 부분 제어 신호는 사이클=1인동안 메모리의 정확한 부분에 대한 CLR 명령 동안에만 설정된다. 단일 CLR 명령은 플래쉬 메모리 영역을 소거할지 모른다는 것에 주의하라. Adr6는 영역이 정당한 피연산자에 대한 플래쉬 내부에 있을 것이기 때문에 CLR에 대한 주소 영역으로서 충분하고, 비-정당 피연산에 대해서는 0이다. 32-비트 확장 플래쉬 메모리의 영역 전체는 삭제 탬퍼 검출 라인이 유발(공격자에 의해서나, 고의로 프로그래밍 모드로 들어가는 것에 의한)되는 때 삭제된다.
Logic1 | Cycle AND (CMD7-4=CLR) AND Adr6 |
플래쉬 메모리의 특정 부분에 기록에 대한 논리는 Logic2에 의해 충족된다. 기록이능 제어 신호는 오로지 사이클=1인동안 플래쉬 메모리 영역에 대해 적절한 ST 명령 동안만 설정된다. 단지 Adr6-5를 테스트하는 것은 ST 명령이 단지 플래쉬 또는 램에 적절하게 기록 때문에 수용할 만 하다.
Logic2 | Cycle AND (CMD7-4 = ST) AND (Adr6-5 = 10) |
WE(기록이능) 플래그는 SET WE와 CLR WE 명령의 실행동안만 설정된다. Logic3는 이 두 경우에 대해 테스트한다. WE에 씌여지는 실제 비트는 CMD4이다.
Logic3 | Cycle AND (CMD7-5 = 011) AND (CMD3-0 = 0000) |
메모리의 램 영역에 쓰는 것에 대한 논리는 Logic4에 의해 충족된다. 기록이능 제어 신호는 사이클=1인 동안 램 메모리 영역에 대한 적절한 ST 명령 동안에만 설정되어야 한다. 그러나 이것은 WE 플래그에 의해 조절되는데 , 그것은 X[n]에 대한 기록이 허용되었는지 아닌지를 좌우한다. X[n] 영역은 램의 상위 반이고, 그래서 이것은 Adr4를 사용하면서 테스트될 수 있다. 램의 전체 주소 영역으로서 오로지 Adr6-5 테스트하는 것은 ST 명령이 단지 플래쉬나 램에 기록 때문에 수용할 만 하다.
Logic4 | Cycle AND (CMD7-4 =ST) AND ( Adr6-5=11) AND ((Adr4 AND WE) OR (~Adr4)) |
세 VAL 유닛들은 각기 OK비트를 지닌, 탬퍼 방지과 검출 회로에 연결된 검증 유닛들이다. OK비트는 RESET 상에서는 1로 설정되고, 각 사이클에 양 탬퍼 검출 라인들로부터의 ChipOK 값들과 ORed된다. OK비트는 유닛을 통과하는 각 데이터 비트과 ANDed된다. VAL 유닛은 또한 데이터 비트들을 그것들이 정당한가를 검증하기 위해 체크한다. VAL1과 VAL2는 각 데이터 비트의 상태를 체크함으로서 검증하고, VAL
3는 패리티 체크를 수행한다. 만약 어떠한 검증 테스트가 페일한다면, 삭제 탬퍼 검출 라인이 유발된다. VAL1의 경우에는, 만약 칩이 간섭받았다면, 프로그램 플래쉬로부터의 유효한 출력은 항상 0(TBR 0로 해석되는)이 될 것이다. 이것은 공격자가 어떤 유용한 명령어들을 실행하는 것을 방지한다. VAL2의 경우에는, 만약 칩이 간섭을 받았다면, 유효한 32-비트 출력은 항상 0이 될 것이다. 그래서 어떠한 키나 중간 저장값도 공격자에게 유효하지 않다. 8-비트 플래쉬 메모리는 프로그램 코드, 점프 테이블들 그리고 다른 프로그램 정보를 고정하는데 사용된다.
384바이트의 프로그램 플래쉬 메모리는 전체 9-비트의 주소(주소 영역 01xxxxxxxx-11xxxxxxx을 사용하는)에 의해 선택된다. 프로그램 플래쉬 메모리는 삭제 티텍션 라인들이 유발(공격자에 의하거나, 프로그램 모드 검출 유닛으로 인해 프로그래밍 모드로 들어감에 의하거나)될 때에만 삭제된다. 삭제 검출 라인이 유발될때, 프로그램 플래쉬 메모리 유닛 안에 작은 스테이트 머신이 8-비트 플래쉬 메모리를 삭제하고, 삭제를 검증하고, 그리고 시리얼 입력으로부터 새로운 내용(384바이트)을 로드한다. 다음의 유사부호는 삭제 탬퍼 검출 라인이 유발될 때 실행되는 스테이트 머신 논리를 도시한다:
Set WAIT output bit to prevent the remainder of the chip from functioning
Fix 8-bit output to be 0
Erase all 8-bit Flash memory
Temp <- 0
For Adr = 0 to 383
Temp <- Temp OR FlashAdr
IF(Temp != 0)
Hang
For Adr = 0 to 383
Do 8 times
Wait for InBitValid to be set
ShiftRightp[Temp, InBit]
Set InBitUsed control signal
FlashAdr <- Temp
Hang
프로그래밍 모드 스테이트 머신이 실행동안, 0이 8-비트 입력으로 들어가야 한다. 0 명령은 인증칩의 나머지가 TBR 0로 명령을 해석하는 것을 야기한다. 칩이 프로그램 플래쉬 메모리 안의 384 바이트 모두를 읽었을때, 그것은 정지된다(무한루프). 인증칩은 그후 리셋될 수 있고 프로그램은 평소처럼 사용된다. 삭제는 8-비트 프로그램 플래쉬 메모리의 새 내용을 로드하는데 사용되는 동일한 8-비트 레지스터에 의해 검증된다는 것을 주시하라. 만약 삭제를 검증하는데 사용되는 레지스터가 공격자에 의해 파괴된다면 프로그램 코드가 적절히 로드되지 못하기 때문에, 이것은 공격 성공의 기회를 줄이는 것을 돕는다. 게다가 스테이트 머신 전체는 양 탬퍼 검출 라인들에 의해 보호받는다.
주소 생성 유닛(Address Generator Unit)
주소 생성 유닛은 메모리 유닛(MU)에 접속하는 유효한 주소를 생성한다. 사이클 0에서, PC는 다음 조작부호를 패치하기 위해 MU를 통과한다. 주소 생성기는 사이클1에 대한 유효한 주소를 생성하기 위해서 반환되는 조작부호를 해석한다. 사이클 1에서, 생성된 주소는 MU를 통과한다. 주소 생성 유닛안에 담겨있는 논리회로와 레지스터들은 양 탬퍼 검출 라인들에 연결되어있어야 한다. 이것은 공격자가 어떠한 생성된 주소도 변경하지 못하도록 보장한다.
주소 생성 유닛의 거의 모두는 정규 CMOS와 실행될 수 있는데, 그 이유는 키가 이 유닛의 대부분을 통과하지 않기 때문이다. 그러나 누산기의 5비트들은 JSI 주소 생성에 사용된다. 결론적으로 회로의 이 작은 부분은 비-플래싱 CMOS에서 실행되어야 한다. 그러나, 계수기의 래치와 계산된 주소는 패리티-검증이 되어야 한다. 만약 탬퍼 검출 라인들 어느 한쪽이 고장난다면, 주소 생성 유닛은 각 사이클마다 주소 0을 생성할 것이고 모든 계수기는 0에서 고정될 것이다. 이것은 오로지 만약 공격자가 RESET 이고/또는 삭제 회로를 불능으로 만든 경우에 효과가 있을 것인데, 그 이유는 평소 상황 아래에서, 탬퍼 검출 라인의 고장은 RESET이나 플래쉬 메모리의 삭제가 될 것이기 때문이다.
BACKGROUND TO ADDRESS GENERATION
주소 생성에 대한 논리는 다양한 조작부호와 피연산자 조합의 검토를 요구한다. 조작부호/피연산자와 주소 사이의 관계는 이 섹션에서 검토되고, 주소 생성 유닛의 기본으로서 사용된다.
상수(Constants)
하위 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이다.
RAM
변수 A-T는 항상 직접적으로 그들의 피연산자 값의 하위 3비트와 직접적으로 연관되어있다. 즉, LOG 명령의 피연산자값 1000-1101뿐만 아니라, LD, ST, ADD, LOG 그리고 XOR 명령의 피연산자값 0000-0101에 대하여, 하위 3 피연산자 주소비트는 마지막 주소를 생성하기 위해 001000의 상위 6-비트 주소 상수와 함께 사용될 수 있다. 잔여 레지스터 값들은 오직 인덱스된 메카니즘을 경유하여 접속될 수 있다. 변수 A-E, B160, 그리고 H는 오직 C1 계수값에 의해서 인덱스됨으로서 접속할 수 있는데, 반면 X는 N1, N2, N3, 그리고 N4에 의해 인덱스된다. LD, ST 그리고 ADD 명령들과 함께, C1에 의해 인덱스된 AE의 주소는 피연산자(000)의 하위 3비트를 취함으로서 생성될 수 있고 C1 계수값과 그들을 OR할 수 있다. 그러나 H와 B160 주소들은 이런 방법으로는 생성될 수 없다(달리 램 주소 공간이 비-컨택트되어야 한다). 그러므로 간단한 조합 논리는 AE를 0000으로, H를 0110, 그리고 B160을 1011로 바꿀 것이다. 마지막 주소는 C1을 4비트값에 더하거나, 00100의 상위 5비트 주소 상수를 첨가함으로서 얻을수 있다. 결국, 레지스터의 X 범위는 오직 N1, N2, N3 그리고 N4에 의해 인덱스됨으로서 접속될 수 있다. XOR 명령과 함께, N1-4
의 어떤 것도 인덱스에 사용될 수 있고, 반면 LD, ST 그리고 ADD와 함께, 오직 N4만 사용될 수 있다. LD, ST 그리고 ADD에서 X의 피연산자는 XN4 피연산자로서 동일하기 때문에, 피연산자의 하위 2비트는 어떤 N을 사용할 것인지 선택한다. 주소는 그래서 선택된 N 계수기에 의해 온 하위 4비트와 함께, 00101의 상수 상위 5비트값으로 생성될 수 있다.
플래쉬 메모리 - 변수(Flash Memory - Variables)
변수 MT와 AM에 대한 주소들은 연관된 명령들의 피연산자로부터 생성될 수 있다. 피연산자의 4비트는 직접적(0110과 0111)으로 사용되고, 00110의 상수 상위 5-비트 주소에 첨가된다. 변수들 R1-5, K11-5, K21-1, 그리고 M0-7
은 오직 C1 계수값(그리고 추가로 R의 경우에, 실제 C1값에 의해)의 역수에 의해 인덱스됨으로서 접속가능하다. 간단한 조합논리는 R과 RF를 00000, K1 또는 K2가 어드레싱되었는지에 따라 K를 01000 또는 11000, 그리고 M(MHI와 MLO)를 10000으로 바꾸어야 한다. 마지막 주소는 C1을 5-비트 값과 OR함으로서, 0011의 상수 상위 4-비트을 첨가함으로서 얻을 수 있다. IST와 ISW 변수들은 각기 오직 1비트값이지만, 어떠한 크기의 비트에 의해서도 실행될 수 있다. 데이터는 0x00000000 또는 0xFFFFFFFF로 쓰거나 읽혀질 수 있다. 그것들은 오직 ROR, CLR과 SET 명령들에 의해서만 어드레스된다. ROR의 경우에는, 피연산자의 낮은 비트가 00111111의 상수 상위 8-비트값과 조합되고, 각각 IST와 ISW에 대하여 001111110과 001111111을 산출한다. 이것은 다른 ROR 피연산들 중 아무것도 메모리의 사용을 만들지 않기 때문이고, 그래서 IST와 ISW보다 다른 경우에는, 반환값은 무시될 수 있다. SET과 CLR 함께, IST와 ISW는 IST(0100)을 11110으로, ISW(0101)을 11111으로의 맵핑과 함께 0011의 상수 상위 4-비트를 조합함으로서 어드레스될 수 있다. IST와 ISW가 램의로부터 E 그리고 T와 같은 피연산자값들을 공유하기 때문에, 같은 디코딩 논리가 하위 5비트에 대해 사용될 수 있다. 마지막 주소는 설정(피연산자값 010x에 대한 테스트 결과에서 OR하여서 행해질 수 있다)되는데에 4, 3, 그리고 1 비트를 요구한다.
플래쉬 메모리 - 프로그램(Flash Memory - Program)
프로그램 플래쉬 메모리에서 스캐닝을 위한 주소는 직접적으로 9-비트 PC(사이클 0에서) 또는 9-비트 Adr 레지스터(사이클 1에서)로 부터 온다. TBR, DBR, JSR 그리고 JSI와 같은 명령들은 프로그램 메모리의 특정 주소들에 대한 표에 저장된 데이터에 따라 PC를 변경한다. 결과적으로, 주소생성은 유효 주소의 하위비트를 형성하는 명령 피연산자(또는 누산기)와 함께, 몇몇의 상수 주소 구성요소의 사용을 만든다:
명령 | 주소 범위 | 주소의 상수(상위) 부분 | 주소의 변수(하위) 부분 |
TBR | 01000xxx | 010000 | CMD2-0 |
JSR | 0100xxxxx | 0100 | CMD4-0 |
JSI ACC | 0101xxxxx | 0101 | Acc4-0 |
DBR | 011000xxx | 011000 | CMD2-0 |
BLOCK DIAGRAM OF ADDRESS GENERATOR UNIT
도 194는 주소 생성 유닛의 도식적인 블록 다이어그램을 보여준다. 주소 생성 유닛에서의 첫째 출력은 멀티플렉서 MX1에 의해 선택되고, 다음의 표에서 보여지는 것과 같다:
출력 | Cycle | |
MX1 | PC | 0 |
Adr | 1 |
CMD 데이터와 MU에서의 8-비트 데이터 사이에 구분을 짓는 것은 중요하다:
사이클 0에서, 8비트 데이터 라인은 이어지는 사이클 1에서 실행되야하는 다음 명령을 유지한다. 이 8-비트 명령값은 유효주소를 디코드하는데 사용된다. 대조적으로, CMD 8-비트 데이터는 이전 명령을 유지하는데, 그래서 무시되어야 한다.
사이클1에서, CMD라인은 현재 실행되는 명령(사이클 0동안에 8-비트 데이터 라인에 있던)을 유지하고, 반면 8-비트 데이터 라인은 명령으로부터 유효한 주소에 대한 데이터를 유지한다. CMD 데이터는 사이클 1동안에 실행되어야 한다.
결론적으로, 다음 표에서처럼, MU 또는 CMD값에서의 9-비트 데이터의 선택은 멀티플렉서 MX3에 의해 이루어진다:
출력 | Cycle | |
MX3 | MU로부터의 8비트 데이터 | 0 |
CMD | 1 |
매 사이클 0마다 Adr 레지스터가 업데이트되기 때문에, Adr의 기록이능은 ~사이클에 연결되어있다. 계수기 유닛은 계수기 C1, C2(내부적으로 사용되는) 그리고 선택된 N 인덱스를 생성한다. 게다가, 계수기 유닛은 프로그램 계수기 유닛에 의해 사용되기 위해 플래그 C1Z와 C2Z를 출력한다. 다양한 겐(GEN) 유닛들은 사이클 0동안에 특정 명령 유형에 대한 주소를 생성하고, 멀티플렉서 MX2는 PC(즉, 8-비트 데이터 라인)를 경유한 프로그램 메모리로부터 읽어들인 명령에 기반하여 그들 가운데 선택한다. 생성된 값은 다음과 같다:
Block | 주소가 생성에대한 명령 |
JSIGEN | JSI ACC |
JSRGEN | JSR, TBR |
DBRGEN | DBR |
LDKGEN | LDK |
RPLGEN | RPL |
VARGEN | LD, ST, ADD, LOG, XOR |
BITGEN | ROR, SET |
CLRGEN | CLR |
멀티플렉서 MX2는 다음의 선택범주를 같는다:
출력 | MU로부터의 8비트 데이터 | |
MX2 | JSIGEN으로부터의 9비트값 | 01001xxx |
JSRGEN으로부터의 9비트값 | 001xxxxx OR 0000xxxx | |
DBRGEN으로부터의 9비트값 | 0001xxxx | |
LDKGEN으로부터의 9비트값 | 1110xxxx | |
RPLGEN으로부터의 9비트값 | 1101xxxx | |
VARGEN으로부터의 9비트값 | 10xxxxxx OR 1x11xxxx | |
BITGEN으로부터의 9비트값 | 0111xxxx OR 1100xxxx | |
CLRGEN으로부터의 9비트값 | 0110xxxx |
VAL1 유닛은 탬퍼 방지과 검출 회로에 연결된 검증 유닛이다. 그것은 RESET 상에서 1로 설정되는 OK비트를 포함하고, 각 사이클에서 양 탬퍼 검출 라인들로부터의 ChipOK값와 ORed된다. OK비트는 그것들이 사용되기 전 유효 주소의 9비트와 ANDed된다. 만약 칩이 간섭을 받는다면, 주소 출력은 항상 0이 될 것이고, 그로인해 공격자가 메모리의 다른 부분에 접속하는 것을 방지한다. VAL1 유닛은 또한 그것이 간섭받지 않았다는 것을 보장하기 위해 유효주소 비트에 대한 패리티 검증을 실시한다. 만약 패리티-검증이 페일하면, 삭제 탬퍼 검출 라인이 유발된다.
JSIGEN
도 195는 JSIGEN 유닛에 대한 구조적인 블록 다이어그램을 보여준다. JSIGEN 유닛은 JSI ACC 명령에 대한 주소를 생성한다. 유효한 주소는 단순히 다음의 연결이다:
JSI 표(0101)에 대한 주소의 4-비트 높은 부분과
누산기 값의 하위 5비트.
누산기가 다른때(점프 주소가 생성되지 않았을때)에는 키를 유지하고 있을 것이기 때문에, 값은 시야에서 가려질 것이다. 결론적으로 이 유닛은 비-플래싱 CMOS와 실행되어야 한다. 멀티플렉서 MX1은 명령이 JSIGEN인지 아닌지에 기반하여, 단순히 누산기에서의 하위 5비트 또는 0사이에서 선택한다. 멀티플렉서 MX1은 다음의 선택범주를 갖는다:
출력 | CMD7-0 | |
MX1 | 누산기4-0 | JSI ACC |
00000 | ~(JSI ACC) |
JSRGEN
도 196은 JSRGEN 유닛에 대한 구조적인 블록 다이어그램을 보여준다. JSRGEN 유닛은 JSR과 TBR 명령들에 대한 주소들을 생성한다. 유효 주소는 다음의 연결에서 온다:
JSR 표(0100)에 대한 주소의 4-비트 높은 파트,
피연산자(JSR 명령들에 대한 5비트, 그리고 3비트에 TBR에 대한 상수0을 더한것)에서 온 표안에 오프셋.
Logic1은 유효주소의 비트3을 생성하는 곳이다. 이 비트는 JSR의 경우에는 비트 3이되어야 하고, TBR의 경우에는 0이 되어야 한다.
Logic1 | bit5 AND bit3 |
JSR 명령은 비트 5에서 1을 가지기 때문에, (TBR이 이 비트에 대해 0인동안) 비트 3과 이것을 AND하는 것은 JSR의 경우에는 비트3, TBR의 경우에는 0을 생성한다.
DBRGEN
도 197은 DBRGEN 유닛에 대한 구조적인 블록 다이아그램을 보여준다. DBRGEN 유닛은 DBR 명령들에 대한 주소를 생성한다. 유효주소는 다음의 연결에서 온다:
DBR 표(011000)에 대한 주소의 6-비트 높은 부분, 그리고
피연산자의 하위 3비트.
LDKGEN
도 198은 LDKGEN 유닛에 대한 구조적인 블록 다이어그램을 보여준다. LDKGEN 유닛은 LDK 명령들에 대한 주소를 생성한다. 유효주소는 다음의 연결에서 온다:
LDK 표(00000)에 대한 주소의 5-비트 높은 부분,
피연산자의 높은 비트, 그리고
피연산자의 하위 3비트(하위 상수의 경우에), 또는 C1(인덱스된 상수의 경우에)과 ORed된 피연산의 하위 3비트.
OR2 블록은 단순히 MU에서의 8-비트 데이터 출력으로부터의 최하위 3비트와 C1의 3비트를 OR한다. 멀티플렉서 MX1은 단순히 피연산자의 상위 비트가 설정되었는지 아닌지에 따라, 실제 데이터 비트들과 C1과 ORed된 데이터비트들사이에 선택한다. 멀티플렉서에 대한 선택자 입력은 단순한 OR 게이트이고, 비트3 멀티플렉서 MX1과 비트2와의 OR한 것은 다음의 선택 범주를 갖는다:
출력 | bit3 OR bit2 | |
MX1 | bit2 | 0 |
OR 블록에서부터의 출력 | 1 |
RPLGEN
도 199는 RPLGEN 유닛에 대한 구조적인 블록 다이어그램을 보여준다. RPLGEN 유닛은 RPL 명령들에 대한 주소를 생성한다. K2MX가 0일때, 유효주소는 상수 000000000이다. K2MX가 1(M에서 정당한 리턴 값을 읽는다는 것을 의미함)일때, 유효 주소는 다음의 연결에서 온다:
M(001110)에 대한 주소의 6-비트 높은 부분, 그리고
C1에 대한 현재값의 3비트.
멀티플렉서 MX1은 K2MX의 현재값에 의존하여, 두 주소들 가운데 선택한다. 멀티플렉서 MX1은 그러므로 다음의 선택범주를 갖는다:
출력 | K2MX | |
MX1 | 000000000 | 0 |
001110 | C1 | 1 |
VARGEN
도 200은 VARGEN 유닛에 대한 구조적인 블록 다이아그램을 보여준다. VARGEN 유닛은 LD, ST, ADD, LOG, 그리고 XOR 명령들에 대한 주소를 생성한다. K2MX 1-비트 플래그는 M에서 판독이 상수 0 주소에 맵핑되는지 안되는지, 피연산자가 K를 지정할때 K1인지 K2인지를 판단하는데 사용된다. 4-비트 가산 블록은 4-비트 입력의 2 세트를 취하고, 추가 모듈(24)을 경유하는 4-비트 출력을 생성한다. 단일 비트 레지스터 K2MX는 CLR K2MX 또는 SET K2MX 명령의 실행 동안에 오로지 씌여진다. Logic1은 다음 상태에 기반하여 K2MX를 기록이능으로 설정한다:
Logic1 | Cycle AND bit7-0=011x0001 |
K2MX에 씌여진 비트는 SET 명령 동안에 1이고, CLR 명령 동안에는 0이다. 입력비트에 대한 소스로서 조작부호(bit4)의 낮은 순서 비트를 사용하는 것은 편리하다. 주소 생성동안, 조합논리로 실행되는 진리표는 다음처럼 기본 주소의 부분을 결정한다:
bit7-4 | bit3-0 | 기술 | 출력 값 |
LOG | x | A, B, C, D, E, T, MT, AM | 00000 |
!=LOG | 0xxx OR 1x00 | A, B, C, D, E, T, MT, AM, AE[C1], R[C1] | 00000 |
!=LOG | 1001 | B160 | 01011 |
!=LOG | 1010 | H | 00110 |
!=LOG | 111x | X, M | 10000 |
!=LOG | 1101 | K | K2MX | 10000 |
비록 진리표가 5비트의 출력을 생성하지만, 하위 4비트는 그것들이 인덱스 값(C1, N 또는 피연산자 자체의 하위 3비트)에 더해지는, 4비트 가산기를 통과한다. 최상위 비트는 가산기를 통과하고, 5-비트 결과를 생성하기 위해 가산기 결과의 4-비트 결과에 첨가된다. 가산기에 대한 두번째 입력은 C1, N, 그리고 피연산자 자체의 하위 3비트로부터의 인덱스값을 선택하는, 멀티플렉서 MX1에서 온다. 비록 C1은 단지 3비트이지만, 4번째비트는 상수 0이다. 멀티플렉서 MX1은 다음의 선택범주를 갖는다:
출력 | bit7-0 | |
MX1 | Data2-0 | (bit3=0) OR (bit7-4 = LOG) |
C1 | (bit3=1) AND (bit2-0 != 111) AND ((bit7-4 = 1x11) OR (bit7-4=ADD) | |
N | ((bit3=1) AND (bit7-4=XOR)) OR (((bit7-4=1x11) OR (bit7-4=ADD)) AND (bit3-0=1111)) |
유효 주소의 6번째비트(비트5)는 램 주소에 대해서는 0이고, 플래쉬 메모리 주소에 대해서는 1이다. 플래쉬 메모리 주소는 MT, AM, R, K, 그리고 M이 있다. 비트5에 대한 계산은 Logic2에서 제공된다:
Logic2 | ((bit3-0=110) OR (bit3-0=011x) OR (bit3-0 = 110x)) AND ((bit7-4=1x11) OR (bit7-4=ADD) |
유효주소의 총 7비트를 만드는데, 상수 1비트가 첨가된다. 이 비트들은 K2MX 가 0가 되거나 명령이 LS, ADD 또는 ST M[C1]이 되지 않는한, 유효주소를 형성할 것이다. 나중의 경우에는, 유효 주소는 0000000의 상수 주소이다. 양쪽 경우에, 두개의 0비트들은 마지막 9비트 주소를 형성하는데 첨가된다. 계산은 Logic3과 멀티플렉서 MX2에 의해 제공되어 여기 보여진다:
Logic3 | ~K2MX AND (bit3-0=1110) AND ((bit7-4=1x11) OR (bit7-4=ADD)) | |
출력 | Logic3 | |
MX2 | 계산된 비트 | 0 |
0000000 | 1 |
CLRGEN
도 201은 CLRGEN 유닛에 대한 구조적인 블록 다이어그램을 보여준다. CLRGEN 유닛은 CLR명령에 대한 주소를 생성한다. 유효 주소는 피연산자에 접속하는 정당한 메모리에 대하여 항상 플래쉬 메모리에 있고, 부당한 피연산자들에 대해서는 0이다. CLR M[C1] 명령은 K2MX 플래그(VARGEN 유닛안에 유지되는)의 상태와는 상관없이, 항상 M[C1]을 삭제한다. 진리표는 다음의 관계를 실행하는 단순한 조합논리이다:
입력값(bit3-0) | 출력값 |
1100 | 00 1100 000 |
1101 | 00 1101 000 |
1110 | 00 1110 | C1 |
1111 | 00 1111 110 |
~(11xx) | 000000000 |
모두 4가지 경우에서, 유효 주소의 처음 6비트들은 피연산자에 이어지는 00이기 때문에, 진리표에 대해 요구되는 논리를 줄이는 것은 간단한 일이다.
BITGEN
도 202는 BITGEN 유닛에 대한 구조적인 블록 다이어그램을 보여준다. BITGEN 유닛은 ROR과 SET 명령들에 대한 주소들을 생성한다. 유효 주소는 피연산자에 접속하는 정당한 메모리에 대하여는 항상 플래쉬 메모리에 있고, 부당한 피연산자들에 대해서는 0이다. ROR과 SET 명령들은 오직 IST와 ISW 플래쉬 메모리 주소들에 접속하기 때문에, 간단한 조합 논리 진리표가 주소 생성을 충족시킨다:
입력값(bit3-0) | 출력값 |
010x | 00111111 | bit0 |
~(010x) | 000000000 |
계수기(Counter Unit)
도 Y37은 계수기 유닛에 대한 구조적인 블록 다이어그램을 보여준다. 계수기 유닛은 계수기 C1, C2 그리고 선택된 N 인덱스를 생성한다. 게다가, 계수기 유닛은 플래그 C1Z와 C2Z를 외부적인 사용을 위해 출력한다. 레지스터 C1과 C2는 그것들이 DBR 또는 SC 명령의 타깃이 되었을때 업데이트된다. 피연산자의 하이비트(유효 명령의 비트3)는 C1과 C2 가운데 선택을 한다. Logic1과 Logic2는 각각 C1과 C2에 대한 기록이능을 결정한다.
Logic1 | Cycle AND (bit7-3=0x010) |
Logic2 | Cycle AND (bit7-3=0x011) |
단일 비트 플래그 C1Z와 C2Z는 그들의 다중비트 C1과 C2 반대부분의 NOR에 의해 생성된다. 그래서 C1Z는 만약 C1=0이면 1이되고, C2Z는 만약 C2=0이면 1이다. DBR 명령동안에, C1이나 C2의 값은 1(반복되어)씩 감소된다. 감산기 유닛에의 입력은 다음처럼 멀티플렉서 MX2에 의해 선택된다:
출력 | bit3 | |
MX2 | C1 | 0 |
C2 | 1 |
C1 또는 C2에 씌여지는 실제 값은 DBR 또는 SC 명령이 실행되고 있는지 아닌지에 의존한다. 멀티플렉서 MX1은 감산기(DBR 명령으로 인한)로부터의 출력, 그리고 진리표로부터의 출력(SC 명령으로 인한) 사이에서 선택한다. 5비트의 출력의 최하위 3비트만이 C1에 씌여진다는 것을 주시하라. 멀티플렉서 MX1은 그러므로 다음의 선택범주를 갖는다:
출력 | bit6 | |
MX1 | 진리표로부터의 출력 | 0 |
감산기로부터의 출력 | 1 |
진리표는 SC명령을 경유하여 C1과 C2에 의해 로드되는 값들을 유지한다. 진리표는 단순히 다음의 관계를 실행하는 조합논리이다:
입력값(bit2-0) | 출력값 |
000 | 00010 |
001 | 00011 |
010 | 00100 |
011 | 00111 |
100 | 01010 |
101 | 01111 |
110 | 10011 |
111 | 11111 |
레지스터 N1, N2, N3 그리고 N4는 그들이 XOR 명령에 의해 참조될때 그들의 다음 값-1(반복되어)에 의해 업데이트된다. 레지스터 N4 또한 ST X[N4] 명령이 실행되는 때 업데이트된다. LD와 ADD 명령은 N4를 업데이트하지 않는다. 게다가 모두 4개의 레지스터들이 SET Nx 명령동안에 업데이트 된다. Logic4-7은 레지스터 N1-N4에 대하여 기록이능을 생성한다. 모두는 만약 SET Nx라면 1, 또는 아니면 0이되는 Logic3를 사용한다.
Logic3 | bit7-0 = 01110010 |
Logic4 | Cycle AND ((bit7-0 = 10101000) OR Logic3) |
Logic5 | Cycle AND ((bit7-0 = 10101001) OR Logic3) |
Logic6 | Cycle AND ((bit7-0= 10101010) OR Logic3) |
Logic7 | Cycle AND ((bit7-0=11111011) OR (bit7-0=10101011) OR Logic3) |
통과되어 나오거나, 감산기로의 입력으로 사용되는 실제 N 인덱스는 피연산자의 하위 2-비트를 사용하는 멀티플렉서 MX4에 의해 단순히 선택된다.
출력 | bit1-0 | |
MX4 | N1 | 00 |
N2 | 01 | |
N3 | 10 | |
N4 | 11 |
4-비트(가산 모듈 24로 인한) 결과를 생성하면서, 가산기는 입력값(멀티플렉서 MX4에 의해 선택된)을 취하고 1을 더한다. 결국, 멀티플렉서 MX3의 4개의 인스턴스는 상수값(각 N마다 다른, 그리고 SET Nx 명령동안 로드되는)과 감산기(XOR 또는 ST 명령들 동안)의 결과 사이에서 선택한다. 그 값은 오로지 만약 적절한 기록이능 플래그가 설정있다면 쓸 수 있을 것이고, 그래서 Logic3은 안전하게 멀티플렉서에 사용될 수 있다.
출력 | Logic3 | |
MX3 | 감산기로부터의 출력 | 0 |
상수 값 | 1 |
SET Nx명령은 다음의 상수로 N1-N4 를 로드한다.
인덱스 | 로드된 상수 | 참조된 초기 X[N] |
N1 | 2 | X[13] |
N2 | 7 | X[8] |
N3 | 13 | X[2] |
N4 | 15 | X[0] |
각 참조된 초기 X[Nn]이 N1-N4 인덱스에 대하여 최적화된 SHA-1 알고리즘 초기상태와 일치한다는 점에 주시하라. 각 인덱스 값 Nn이 감소할 때, 유효 X[N]은 증가한다. 이것은 X 워드가 가장 중요한 단어가 처음으로하여 메모리에 저장되기 때문이다. 세개의 VAL 유닛들은 각기 OK비트로, 탬퍼 방지 및 검출 회로와 연결되어있는 검증 유닛이다. Ok비트는 RESET 상에는 1로 설정되고, 각 사이클에서 양 탬퍼 검출 라인들로부터의 ChipOK값들과 ORed된다. OK비트는 유닛을 지나 통과하는 각 데이터 비트와 ANDed된다. 모든 VAL 유닛들은 또한 계수기들이 간섭받지 않았다는 것을 보장하기 위해 데이터를 패리티 검증한다. 만약 패리티 검증이 페일하면, 삭제 탬퍼 검출 라인이 유발된다. VAL1의 경우에는, 계수기 C1으로부터의 유효 출력이 만약 칩이 간섭받았다면 항상 0이 될 것이다. 이것은 공격자가 키를 두루 인덱스하는 어떠한 루프 구성체라도 실행하는 것을 방지한다. VAL2의 경우에는, 계수기 C2로부터의 유효 출력은 만약 칩이 간섭을 받았다면 항상 0이 될 것이다. 이것은 공격자가 어떠한 루프 구성체라도 실행하는 것을 방지한다. VAL3의 경우에는, 어떤 N 계수기(N1-N4)로부터의 유효 출력은 칩이 간섭을 받은 경우에는 항상 0이 될 것이다. 이것은 공격자가 X를 두루 인덱스하는 어떠한 루프 구성체라도 실행하는 것을 방지한다.
도 203으로 돌아가보면, 플래쉬 메모리 저장 (701) 안에 저장되어있는 도시된 (705) 정보가 있다. 이 데이터는 다음을 포함할 수 있다:
공장 코드(Factory Code)
공장 코드는 프린트롤이 제조되는 공장을 의미하는 16비트 코드이다. 이것은 공장들이 프린트지 기술의 소유자에게 속해있다는 것 또는 인가하에 프린트롤을 만드는 공장들임을 식별한다. 이 숫자의 목적은 품질의 문제들이 있을때, 프린트롤이 온 공장의 추적을 허용하는 것이다.
배치넘버(Batch Number)
배치 넘버는 프린트롤 묶음의 제조를 나타내는 32비트 숫자이다. 이 넘버의 목적은 품질의 문제들이 있을때, 프린트롤이 온 묶음을 추적하는 것이다.
시리얼넘버(Serial Number)
48비트의 시리얼 넘버는 최대 280조에 달하는 프린트롤에서 각 프린트롤의 유일한 식별을 허용하도록 제공되는 것이다.
제조일자(Manufacturing date)
롤에 남아있는 프린트 매체의 길이는 이 숫자를 나타낸다. 이 길이는 밀리미터나 또는 프린트롤을 사용하는 프린터 기구의 가장 작은 도트 피치 같은 작은 유닛들에 나타난고, 아마도 프린트될 다른 포맷들 뿐만 아니라, 잘 알려진 C, H 그리고 P 각 포맷에서 남아있는 사진의 수를 계산하는 것을 허용한다. 작은 유닛의 사용은 또한 높은 해상도가 선행-프린트된 매체와의 동기를 유지하는데 사용된다 것 을 보장한다.
매체 유형(Media Type)
매체 유형 자료은 프린트롤에 담겨있는 매체를 열거한다.
(1) 투과성의
(2) 불투명한 흰색
(3) 불투명한 옅은
(4) 3D 렌즈모양의
(5) 선행-프린트된: 길이 특성
(6) 선행-프린트된: 길이 특성이 아닌
(7) 금속박
(8) 홀로그래픽한/광학적인 변수 도구박
선행-프린트된 매체 길이(Pre-printed Media Length)
예를 들어 프린트롤의 뒷표면에 담겨있는 어떠한 선행-프린트된 반복 패턴의 길이는 여기 저장되어있다.
잉크점도(Ink Viscosity)
각 잉크 컬러의 점도는 8비트 숫자로 담겨있다. 잉크 점도 숫자는 점도(일반적으로, 높은 점도는 같은 드롭 양을 성취하기 위해 더 긴 작동기 펄스를 가져야 한다)를 배상하기위한 프린트 헤드 작동기 특성들을 조절하는데 사용되곤 한다.
1200 dpi에 대한 권장 드롭양(Recommeded Drop Volume for 1200 dpi)
각 잉크 컬러의 제시되는 감소 양은 8비트 숫자로서 담겨있다. 가장 적당한 감소 양은 잉크와 프린트 매체 특성에 의존할 것이다. 예를 들어, 요구되는 감소 양은 증가되는 염료 농도나 흡수력에 비해 감소할 것이다. <<<<<<또한, 투과성 매체는 불투명의 흰색 매체로서의, 투명 매체에 대해 한 감소양의 거의 두배를 요구할 것이고, >>>>
프린트지가 잉크와 매체 모두에 담겨있기 때문에, 고객 일치 또한 얻어질 것이다. 감소양은 프린터가 1200dpi이상되거나 또는 프린터가 더 밝거나 더 어두운 프린트에 대해 조정이 되어있을 때, 단지 추천되는 감소양이다.
잉크 컬러(Ink Color)
염료 컬러들의 각 컬러는 포함되어있고, 프린트하기전에 어떠한 이미지에든 적용되는 "잘 조율된" 디지털 반명암에 사용되곤 한다.
남아있는 매체 길이 표지기(Remaining Media Length Indicator)
롤 상에 남아있는 프린트 매체의 길이는 이 숫자에 의해 표시되고, 카메라 도구에 의해 업데이트될 수 있다. 그 길이는 각 C, H 그리고 P 포맷뿐만 아니라, 프린트되는 다른 포맷들에서 남아있는 사진의 수를 계산하는 것을 허용하는 작은 유닛(1200 dpi 픽셀들)에 표시되어있다. 높은 해상도는 또한 선행-프린트 매체와 동기를 유지하는데 사용되곤한다.
저작원 또는 비트패턴(Copyright or Bit Pattern)
이 512비트 패턴은 저작권이 되어있는 플래쉬 메모리 저장의 내용을 허용하는데 충분한 ASCII 문자 시퀀스를 표현한다.
이제 도 204로 돌아가서, 아트캠 인층 집의 저장표 (730)이 도시되어있다. 그 표는 앞에서 서술한 특정 포맷을 가지는 제조 코드, 배치 넘버와 시리얼 넘버와 날짜가 포함되어있다. 표 (730)은 또한 아트캠 도구안에 프린트 엔진상에 정보(731)을 포함한다. 저장된 정보는 프린트 엔진 유형, 프린터의 DPI 해상도 그리고 프린터 도구에 의해 샌상된 프린트의 갯수의 프린트 계수를 포함한다.
게다가, 칩에 따라 무작위로 변하는 인증 테스트 키(710)은 제공되고, 앞에서 서술한 알고리즘에서 아트캠 임의 인증 코드로 활용된다. 128 비트 프린터 롤 인증키(713)은 또한 제공되어 지고, 프린트롤 안에 저장된 키와 동등하다. 다음으로 512 비트 패턴은 이어서 아트캠 사용에 적당한 120비트의 여분 공간에 저장된다.
앞에서 주시한대로, 아트캠은 적절히 아트캠 내부에 저장된 프린트롤에 남겨진 프린트 숫자를 의미하는 액체 크리스탈 디스플레이(15)를 포함한다. 게다가 아트캠은 또한 사용자가 세 개의 정규포맷들 C, H 그리고 P 사이에서 전환하는 걸 허용하는 3개의 스테이트 스위치(17)을 포함한다. 세개의 스테이트들 사이에 전환하는 것에 따라, 액체 크리스탈 디스플레이(15)는 만약 특정한 포맷이 사용된다면 프린트롤에 남겨진 이미지의 숫자를 반영하도록 업데이트된다.
제대로 액체 크리스탈 디스플레이를 작동시키기 위해서, 아트캠 프로세서는, 프린트롤의 삽입과 인증 테스트의 통과여부에 따라 프린트롤 칩(53)의 플래쉬 메모리 저장된 것을 읽고 남겨진 페이퍼의 양을 결정한다. 다음으로 출력 포맷 선택 스위치(17)의 값은 아트캠 프로세서에 의해 결정된다. 선택된 출력 형식의 동등한 길이에 의해 프린트 길이를 분할하기 때문에, 아트캠 프로세서는 가능한 프린트 숫자를 결정하고 액체 크리스탈 디스플레이(15)를 남겨진 프린트 숫자로 업데이트한다. 사용자가 출력 포맷 선택 스위치(17)을 변동함에 따라 아트캠 프로세서(31)은 포맷에 따라 출력 사진이 수를 재계산하고 다시 LCD 디스플레이(15)를 업데이트한다.
프린터롤 표 (705)(도 165)에서 프로세스 정보의 저장은 또한 아트캠 유닛가 프로세서에서 변화의 이점을 취하고 프린트 롤의 특성을 프린트하도록 허용한다.
특히, 프린트헤드 안에 각 노즐에 적용되는 펄스 특성들은 프로세스 특성들에서 변경하도록 바뀌어 질 수 있다. 이제 도 205로 돌아가면, 아트캠 프로세서는 부수적인 롬 칩안에 저장된 프로그램을 가동시키기 위해 개조될 수 있다. 소프트웨어 프로그램, 펄스 프로파일 캐릭터라이저(771)는 프린터 롤로부터의 여러 변수들을 읽을 수 있다. 이러한 변수는 프린터롤(772), 프린터 매체 유형(773), 잉크 점도(774), 잉크 감소양(775) 그리고 잉크 컬러(776) 상에서의 남겨진 롤 매체를 포함한다. 이런 변수들은 각기 펄스 프로파일 캐릭터라이저에 의해 읽히고, 가장 적합한 펄스 프로파일은 우선 시도와 실험에 따라 결정된다. 파라미터는 잉크 출력의 안정성을 개선하기 위해 각 프린터 노즐에 의해 받은 프린터 펄스를 변경한다.
인증칩이 중요하고 값어치 있는 정보가 프린터롤과 같이 프린터 칩에 저장되어있다는 것에 중요한 진보점을 포함하고 있다는 것은 분명하다. 이 정보는 프린터 롤에 남아있는 페이퍼의 양과 프린터롤의 유형에 대한 정보 외에 프린터 롤의 프로세스 특징들을 포함할 수 있다. 게다가 프린터롤 인터페이스 칩은 변수 인증 정보를 제공할 수 있고 탬퍼 프루프 방식안에서 구성될 수 있다. 덧붙여, 칩을 활용하는 것의 탬퍼 저항 방법이 제공되어왔다. 프린터 롤 칩의 활용은 또한 프린터 장비안에 남겨진 사진의 수 표시자를 일제히 제공할 수 있는 반면, 출력 다중 사진 형 식이 가능한 아트캠 장비의 즉각적인 출력 형식에 제공되는 편리하고 효율적인 사용자 인터페이스를 허용한다.
프린트 헤드 유닛(Print Head Unit)
이제 도 206으로 돌아가서, 섹션에서 부분적으로, 도 162의 프린터 헤드 유닛(615)의 기계를 분해하여 서로의 상관관계를 나타낸 관점에서의 시각이 도시되어있다.
프린터 헤드 유닛(615)는 이미지를 형성하기위해 요청시에 프린터 매체(611)에 잉크 감소들을 사출하는 프린트-헤드(44) 주변에 둔다. 프린트 매체(611)은 처음 세트(618, 616) 그리고 두번째 세트(617, 619)를 구성하는 롤러의 두 세트사이에 죄어있다.
프린터-헤드(44)는 전력과 프린트-헤드(44)의 제어를 제공하는 전력, 접지 그리고 신호선(810)의 제어하에 동작하고 프린트-헤드(44)의 표면에 대해 테이프 자동 연결(TAB)의 매체들에 의해 연결되어있다.
중요한건, 적당히 분리된 실리콘 웨이퍼 장비로부터 구성된 프린터-헤드(44)는 수직편 벽들 근처에 있는 웨이퍼를 지나 이방성의 에치(812)들의 시리즈에 의존한다. 지나는 웨이퍼 에치(812)는 이어진 사출에 대해 웨이퍼의 뒤에서 잉크를 프린트-헤드 표면에 직접 공급하는 것을 허용한다.
잉크는 잉크-헤드 공급 유닛(814)의 매체들에 의해 잉크젯 프린트-헤드(44)의 뒤에 공급되어진다. 잉크젯 프린트-헤드(44)는 잉크의 분리된 컬러의 공급을 위한 그것의 표면을 따라 세 개의 분리된 줄들을 가진다. 잉크-헤드 공급 유닛(814)은 또한 잉크 채널의 봉인을 위한 덮개(815)를 포함한다.
도 207에서 도 210까지에서는, 잉크-헤드 공급 유닛(814)의 다양한 관점의 시각에서의 도시가 있다. 도 207에서 도 210의 각각은 단지 무한한 길이로 구성된 잉크헤드 공급 유닛의 부분들, 대표적인 세부사항들을 제공하기 위한 부분들만 도시했다. 도 207에는 바닥 관점 시각의 도시가 있고, 도 148은 상단 관점 시각으로 도시했고, 도 209는 확대된 바닥 관점을 도시했고, 도 210은 잉크 채널의 세부사항을 보여주는 위쪽 관점의 시각을 도시했고, 그리고 도 211은 도 212을 한 것과 같이 위쪽 관점의 시각을 도시했다.
말하자면, 마이크로머신화된 실리콘대신에 삽입 주해된 플라스틱으로 잉크헤드 공급 유닛(814)을 형성하는데 상당한 비용 이득이 있다. 플라스틱 잉크 채널의 공정 비용은 양에서 상당히 적을 것이고 공정은 실질적으로 쉽다. 동반된 그림에서 묘사된 디자인은 미리 결정된 길이의, 1600dpi의 삼색 모놀리식 프린트 헤드를 가정한다. 제공된 유출율 계산은 100 mm 포토 프린터을 위한 것이다.
잉크-헤드 공급 유닛(814)은 권장 세부사항을 모두 포함하고 있다. 덮개(815)(도 206)는 영구히 부착되어있거나 잉크-헤드 공급 유닛(814)에 초음파로 용접되어있고, 잉크 채널에 대한 봉인을 제공한다.
도 209로 돌아가서, 청록, 자홍 그리고 노랑 잉크는 잉크 후미(820-822)를 지나 유출되고, 자홍 잉크는 통과홀(824, 825)을 지나고 자홍 메인 채널(826, 827)(도 141)을 따라서 유출된다. 청록 잉크는 청록 메인 채널(830)을 따라서 유출되고 노랑 잉크는 노랑 메인 채널(831)을 따라서 유출된다. 도 209에서 가장 잘 보여지듯이, 청록 메인 채널에서 청록 잉크는 그 후에 청록 서브-채널(833)로 흐른다. 노랑 서브채널(834)은 비슷하게 노랑 메인채널(831)에서 노랑 잉크를 받는다.
도 210에서 가장 잘 보여지듯, 자홍잉크는 또한 자홍 통과홀(836, 837)을 지나 자홍 메인 채널(826, 827)로 흐르게 된다. 다시 도 209로 돌아가서, 자홍 이크는 통과홀(836, 827)의 밖으로 흐르게 된다. 자홍 잉크는 또한 자홍 트러프(840)로 흐르기 전에, 첫번째 자홍 서브채널, 예를 들어 (838)을 따라 흐르고 그후 두번째 자홍 서브채널, 예를 들어 (839)를 따라 흐르게 된다. 자홍 잉크는 그후 상응하는 잉크젯 헤드 통과홀들(예를들어, 도 166의 812)에 정렬된 자홍(842) 등을 경유하여 흐르게 되고, 이어서 그것들은 프린트하기위한 잉크젯 노즐들에 잉크를 공급한다.
비슷하게 청록 서브채널(833)에 있는 청록 잉크는 청록(843, 844) 등을 경유하여 잉크를 청록 피트 공간(849)으로 유출된다. 비슷하게, 노랑 서브채널(834)은 차례로 (847), (848)를 경유하여 노랑을 공급하는 노랑 피트 공간(46)을 공급한다.
도 210에서 보는 것처럼, 프린트-헤드는 프린트 헤드 슬롯(850)에 프린트-헤드 웨이퍼에서 (851)과 같은 통과홀에 상응하는 것으로 정렬된 (851)과 같은 것을 경유한 다양한 것들을 받도록 고안된다.
도 206으로 돌아가서, 관심은 삽입 모울들링 프로세스의 강제를 만족시키는 동안, 전체 프린트-헤드 칩(44)으로의 적절한 잉크 유출을 제공하는 것일 것이다. 프린트 헤드 칩의 뒤에 있는 웨이퍼 홀(812)을 지나는 잉크의 크기는 거의 100㎛ × 50㎛이고, 다른 컬러의 잉크들을 운반하는 통과홀들 사이에 공간은 거의 170㎛이다. 이 크기의 특징들은 쉽게 플라스틱에 주형될 수 있다는 것이고, 이상적으로 벽 높이는 적절한 단단함을 유지하기 위해서 벽의 두께의 몇배를 넘지 않아야 한다. 권장되는 실시예는 이러한 문제들을 점진적으로 더 작은 잉크 채널의 계층을 사용함으로서 극복한다.
도 211에서, 프린트-헤드(44)의 표면의 작은 부분(870)이 묘사되어있다. 이 표면은 청록 시리즈(871), 자홍 시리즈(872), 노랑 시리즈(873)를 포함하는 3 시리즈의 노즐들로 분할된다. 각 시리즈 노즐들은 전력과 제어 신호들의 연결을 위한 연결 패드(878)의 시리즈를 가진 프린트-헤드(44)를 가진 (875), (876)과 같은 두 줄로 더 분할된다.
프린트 헤드는 권장될만하게 아트캠 장비를 포함하는 사용을 위해 개발된 잉크젯의 많은 수의 다른 형식들에 따라 구성되어있다. 이러한 잉크젯 장비들은 아래에 더 세부적으로 논의되어있다.
프린트 헤드 노즐은 도 206의 이방성의 에치 홀(812)과 동등한, 잉크 공급 채널(880)을 포함한다. 공급 채널(881)을 지나는 웨이퍼의 뒤에서부터 잉크는 유출되어, 차례로 필터 그릴(882)을 지나 (883)과 같은 잉크 노즐 챔버를 지난다. 노즐 챔버(883)와 프린트-헤드(44)(도 1)의 동작은, 앞에서 언급한 대로, 위에 언급된 특허 명세서에 기술되어있다.
잉크 채널 유동성의 흐름 분석(Ink Channel Fluid Flow Analsys)
이제 잉크 유출의 분석으로 돌아가서, 메인 잉크 채널(826, 827, 830, 831)(도 207, 도 141)은 약 1mm × 1mm이고, 한 컬러의 모든 노즐을 제공한다. 서브채널(833, 834, 838, 839)(도 209)은 약 200㎛×100㎛이고 약 각기 25개 잉크젯 노즐을 공급한다. 홀(843, 844, 847, 848)을 지나는 프린터 헤드와 (881)(도 211)과 같은 홀들을 지나는 웨이퍼는 100㎛×50㎛이고, 3개의 노즐을 홀을 지나는 프린트 헤드의 각 방향으로 공급한다. 각 노즐 필터(882)는 각기 20㎛×2㎛의 영역을 가지고 단일 노즐은 제공하는 8개의 슬릿들을 갖는다.
분석은 기술된 대로 구성된 잉크젯 프린터의 압력 요구치를 실행하여왔다. 분석은 사진 프린팅에 대해 1600 dpi의 삼색 프로세스 프린트 헤드의 경우이다. 프린트 폭은 총 18750개의 노즐을 주는, 각 컬러에 대해 6250개의 노즐을 주는 100 mm이다.
완전 흑백 프린팅에 대해 다양한 채널에서 최대 잉크 유출율은 중요하다. 그것은 잉크채널을 따라 압력 감소을 경정하고, 그러므로 프린트헤드가 표면 장력에 의해 채워진 채로 있을 것인지 아닌지, 아니라면 프린트 헤드를 가득 유지하는데 필요한 잉크 압력을 결정한다.
압력 감소을 결정하기 위해, 1600 dpi에 대해 2.5 pl의 감소양이 활용된다. 노즐은 고율로 동작을 수용할 수 있는 반면, 선택된 감소 반복율은 2초가 조금 안되는 시간동안 150mm 길이의 사진을 프린트하는데 적합한 5㎑이다. 그래서 프린트 헤드는, 극단적인 경우에, 모두 최대 초당 5000 감소을 프린트하는 18750개의 노즐을 갖는다. 이러한 잉크 유출은 잉크 채널의 계층에 할당된다. 각 잉크 채널은 모든 노즐이 프린팅할때 효율적으로 고정된 숫자의 노즐을 공급한다.
R은 레이놀드 수이고 k는 다음과 같이 계산되는 채널의 크로스 섹션에 의존하는 비차원 마찰 계수이다:
사각 크로스 섹션에 대해서, k는 근사적으로:
a는 사각 크로스 섹션의 가장 긴쪽이고, b는 가장 짧은 쪽이다. 사각 크로스 섹션에 대한 수력지름 D는 다음과 같이 주어진다:
잉크는 채널의 길이를 따라 250 포인트에서 메인 잉크 채널에서 유출된다. 잉크 속도는 채널의 시작점에서부터 채널의 단부 0까지, 선형적으로 감소하고, 그래서 평균 유출 속도 U는 최대 유출 속력의 반이다. 그러므로, 메인 잉크 채널을 따르는 압력 감소은 사용하는 최대 유속의 계산된 것의 반이다.
이런 공식을 활용하여, 압력 감소는 다음의 표를 따라 계산될 수 있다:
잉크 채널 차원과 드롭 압력의 표(Table of Ink Channel Dimensions and Pressure Drops)
# of Items | Length | Width | Depth | Nozzle supplied | Max.ink flow at 5㎑ | Pressure drop | |
Central Moulding | 1 | 106mm | 6.4mm | 1.4mm | 18,750 | 0.23ml/s | NA |
Cyan main channel (830) | 1 | 100mm | 1mm | 1mm | 6,250 | 0.16㎕/㎲ | 111 Pa |
Magenta main channel (826) | 2 | 100mm | 700㎛ | 700㎛ | 3,125 | 0.16㎕/㎲ | 231 Pa |
Yellow main channel (831) | 1 | 100mm | 1mm | 1mm | 6,250 | 0.16㎕/㎲ | 111 Pa |
Cyan sub-channel (833) | 250 | 1.5mm | 200㎛ | 100㎛ | 25 | 0.16㎕/㎲ | 41.7 Pa |
Magenta sub-channel (834)(a) | 500 | 200㎛ | 50㎛ | 100㎛ | 12.5 | 0.031㎕/㎲ | 44.5 Pa |
Magenta sub-channel (838)(b) | 500 | 400㎛ | 100㎛ | 200㎛ | 12.5 | 0.031㎕/㎲ | 5.6 Pa |
Yellow sub-channel (834) | 250 | 1.5mm | 200㎛ | 100㎛ | 25 | 0.016㎕/㎲ | 41.7 Pa |
Cyan pit(842) | 250 | 200㎛ | 100㎛ | 300㎛ | 25 | 0.010㎕/㎲ | 3.2 Pa |
Magenta through (840) | 500 | 200㎛ | 50㎛ | 200㎛ | 12.5 | 0.016㎕/㎲ | 18.0 Pa |
Yellow pit(846) | 250 | 200㎛ | 100㎛ | 300㎛ | 25 | 0.010㎕/㎲ | 3.2 Pa |
Cyan via(843) | 500 | ㎛ | 50㎛ | 100㎛ | 12.5 | 0.031㎕/㎲ | 22.3 Pa |
Magenta via(842) | 500 | 100㎛ | 50㎛ | 100㎛ | 12.5 | 0.031㎕/㎲ | 22.3 Pa |
Yellow via | 500 | 100㎛ | 50㎛ | 100㎛ | 12.5 | 0.031㎕/㎲ | 22.3 Pa |
Magenta through hole (837) | 500 | 200㎛ | 500㎛ | 100㎛ | 12.5 | 0.003㎕/㎲ | 0.87 Pa |
Chip slot | 1 | 100mm | 730㎛ | 625 | 18,750 | NA | NA |
Print head through holes (881) (in the chip substrate) | 1500 | 600 | 100㎛ | 50㎛ | 12.5 | 0.052㎕/㎲ | 133 Pa |
Print head channel segments(on chip front) | 1,000/color | 50㎛ | 60㎛ | 20㎛ | 3.125 | 0.049㎕/㎲ | 62.8 Pa |
Filter Slits(on entrance to nozzle chamber)(882) | 8 per nozzle | 2㎛ | 2㎛ | 20㎛ | 0.125 | 0.039㎕/㎲ | 251 Pa |
Nozzle chamber (on chip front)(883) | 1 per nozzle | 70㎛ | 30㎛ | 20㎛ | 1 | 0.021㎕/㎲ | 75.4 Pa |
잉크 후미로부터 노즐까지의 총 압력 감소는 그러므로 거의 청록과 노랑에는 701Pa, 자홍에 대해서는 845Pa에 달한다. 이것은 대기압의 1%가 안된다. 물론 프린트된 이미지는 완전 흑백보다 작고, 잉크 유출(그러므로 압력감소)는 이 값에서 작아진다.
잉크-헤드 공급유닛에 대한 주형 제작(Making the Mould for the Ink-head Supply Unit)
잉크 헤드 공급 유닛(12)(도 1)은 50만큼 작고 106mm 길이의 특징들을 갖는다. 삽입 주형 도구들을 진부한 방법들로 기계화하는 것들은 비실재적이다. 그러나 비록 전체적인 모양이 복잡할지라도, 요구되는 복잡한 곡선들은 없다. 삽입 주형 도구들은 좋은 모형을 위한 석판술적으로 만들어진 삽입도면을 가지고 메인 잉크 채널과 다른 밀리미터 규모의 모형들을 진부한 큰 크기를 사용하여 만들어질 수 있다. LIGA 프로세스는 삽입도면에 사용될 수 있다.
단일 삽입 주형 도구는 쉽사리 50개 또는 그 이상의 공동을 가질 수 있다. 도구 복잡성의 대부분은 모형에 있다.
도 206으로 돌아가서, 프린트 시스템은 덮개(815)와 함께 주형 잉크 공급 유닛(814)을 경유하여 구성되고 앞서 기술한 것처럼 그것들을 함께 봉인한다. 이어서 프린트 헤드(44)는 그것에 상응하는 슬롯(850)에 위치한다. 점작성의 봉인 스트립(852, 853)은 자홍 메인 채널넘어에 위치하는데 그래서 결국 그것들이 적절하게 봉인된다는 것을 보장한다. 테이프 자동화 연결(TAB) 스트립(810)은 그 후 공동(855)에 서 흘르는 탭 연결선들을 가지고 잉크젯 프린트 헤드(44)에 연결된다. 도 206, 도 207 그리고 도 212에서 가장 잘 보여지는 대로, 애퍼쳐(aperture) 슬롯(855-862)은 롤러의 삽입에 스냅을 제공한다. 그 슬롯은 롤러의 "잘라냄(Clipping in)"에 롤러의 간단한 회전을 제공하기 위해 연속적으로 움직이는 작은 단계를 제공한다.
도 213에서 도 217까지, 대략 번호붙여진 장비들을 가지고 최종적으로 조립된 아트캠 장비의 내부 부분의 다양한 관점의 시각이 도시되어있다.
● 도 213은 수평으로 되돌린 부분을 보여주며, 아트캠 카메라의 내부 부분의 위쪽 관점의 시각을 도시했다.
● 도 214는 수평으로 되돌린 부분을 보여주며, 아트캠 카메라의 내부 부분의 아래쪽 관점의 시각을 도시했다.
● 도 215는 아트캠안에 싸여진대로 부분들을 보여주며, 아트캠 카메라의 내부 부분의 첫번째 위쪽 부분의 관점의 시각을 도시했다.
● 도 216은 아트캠안에 싸여진대로 부분들을 보여주며, 아트캠 카메라의 내부 부분의 두번째 위쪽 부분의 관점의 시각을 도시했다.
● 도 217은 아트캠안에 싸여진대로 부분들을 보여주며, 아트캠 카메라의 내부 부분의 두번째 위쪽 부분의 관점의 시각을 도시했다.
우편엽서 프린트 롤(Postcard Print Rolls)
이제 도 218로 돌아가서, 권장된 실시예의 한 형식에서, 출력 프린터 페이퍼(11)는, 프린트된 이미지를 받지 않는다는 측면에서, 뒷부분(885)으로 포맷된 선행-프린트된 "우편엽서(postcard)"를 담고 있다. 섹션(885)으로 포맷된 우편엽서는 프린트롤이 팔리거나 활용되는 관할에서 우편 요금과 관련되어 프린트된 권한을 포함할 수 있는 선불된 우편엽서 "도장(stamps)" (886)을 포함할 수 있다. 관련 관할 우편 권한 동의에 의해, 프린트 롤은 다양한 우편요금을 가지는 것이 가능하도록 만들어질 수 있다. 이것은 특히 대륙간 여행자들이 영역 관할에 있고 그들의 모국으로 여러 우편엽서를 보내기를 원할 때에 편리하다. 게다가 주소 포맷 부분(887)은 우편엽서의 보통 형식에서 주소 발송 세부사항을 쓰는 것을 제공한다. 마지막으로 메시지 공간(887)은 개인적 정보를 쓰는 것을 제공한다.
이제 도 218과 도 219로 돌아가서, 카메라 장비의 동작은 이미지 시리즈(890-892)가 프린트롤의 첫표면에 프린트될 때에 그러하고, 상응하는 뒷 표면은 도 218에 도시된 것이다. 따라서, (891)과 같은 각 이미지가 카메라에 의해 프린트된 것과 같이, 이미지의 뒷면은 즉각적으로 관할 안에 가장 가까이의 우체국 박스에 배치될 수 있는 우편엽서(885)를 만들 준비가 되어있다. 이런 방법으로, 개인적인 우편엽서는 만들 수 있다.
도 219와 도 220에서 도시된 것처럼 우편엽서 시스템을 이용하는 것이 단지 미리 결정되었을 때 우편엽서 뒷부분(885)의 뒷면과 앞부분의 이미지의 앞부분(891) 간의 동기화가 유지될 것이기 때문에 이미지 크기가 가능하다는 것은 분명할 것이다. 이것은 각 포스트 카드의 뒷부분 포맷 시트(885)의 길이의 세부사항을 저장하기 위해 프린트롤 안에 저장된 인증칩의 메모리 부분을 사용함으로써 성취될 수 있다. 이것은 각 우편엽서를 같은 크기로 하거나 또는 프린트롤에서 보드상의 프린트 칩 메모리에 각 크기를 저장함으로서 성취될 수 있다.
선행-포맷된 우편엽서를 가지는 프린트롤을 활용할 때, 아트캠 카메라 제어 시스템은 프린트롤이 오로지 각 이미지가 우편엽서 한도내 일 것인 그러한 이미지 를 프린트하는 데에만 활용된다는 것을 보증할 수 있다. 물론, "play"의 단계는 근소하게 잘못배치된 것을 계산할 수 있는 각 사진의 가상자리에 경계 영역을 제공함으로서 제공될 수 있다.
이제 도 220으로 돌아가서, 그것들이 사용가능한 특정 관할에서 여행할 때 우편엽서 롤은 카메라 사용자에게 미리-구매될 수 있다는 것은 분명하다. 우편엽서 롤은, 그것의 외부 표면상에, 구매 국가가 담긴 정보를 프린트하는 것이 가능하고, 각 우편엽서의 우편요금의 양, 각 우편엽서의 포맷, 그것이 사용가능한 나라들과 우편엽서가 더이상 충분하다고 보장되지 않는 우편엽서의 소멸 날짜 또한 제공될 수 있다.
따라서, 카메라 장비의 사용자는 관련 장면을 지적하기 위해 그들의 손에 지닌 카메라를 활용하고 다른 것들 위에 미리-지불된 우편엽서의 세부사항과 한쪽 표면의 이미지를 가진 사진을 취함으로서 우편에 배치하기 위해 우편엽서를 생성할 수 있다. 이어서, 우편엽서는 주소가 될 수도 있고 우편에서 그것의 즉각적인 배치 이전에 우편엽서 상에서 씌여진 짧은 메시지가 될 수 있다.
아트캠 장비의 소프트웨어 동작에 관하여, 비록 많은 다른 소프트웨어 디자인들이 가능하지만, 한 디자인에서, 각 아트캠 장비는 느슨하게 엮어진 장비의 핵심 목적을 수행하기 위해 단일 장착된 어플리케이션에 의해 대등한 방식에서 활용되는 기능적 모듈의 세트를 구성할 수 있다. 아트캠 장비의 다양한 계층들에서 기능적 모듈들이 다른 조합에서 재사용되는 것에 반면, 어플리케이션은 아트캠 장비의 계층에 명확하다.
대부분의 기능적 모듈들이 소프트웨어와 하드웨어 구성요소를 함게 포함하고 있다. 소프트웨어는 하드웨어 분리 계층에 의해 하드웨어의 세부사항으로부터 보호받는 반면, 모듈의 사용자는 추상적인 소프트웨어 인터페이스에 의해 그것의 소프트웨어 실행으로부터 보호받는다. 전체로서 시스템이 사용자-초기화와 하드웨어-초기화 이벤트에 의해 운영되기 때문에, 대부분의 모듈은 하나 또는 그이상의 비동기화 이벤트-운영 프로세스를 작동할 수 있다.
일반적인 아트캠 장비를 포함하는 가장 중요한 모듈은 도 221에 보여진다. 이것과 이어지는 다이어그램에서, 오른쪽의 하드웨어 구성요소로부터 수직의 점선(901)에 의해 소프트웨어 구성요소는 왼쪽에 분리되어 보여진다. 이러한 모듈의 소프트웨어 측면은 아래에 기술된다:
소프트웨어 모듈 - 아트캠 어플리케이션(902) (Software Modules- Artcam Application 902)
아트캠 어플리케이션은 아트캠 장비의 고-레벨 기능을 실행한다. 이것은 보통 이미지를 캡쳐하는 것과, 이미지에 예술적 효과를 더하는 것, 그리고 이미지를 프린트하는 것을 포함한다. 카메라에 맞춰진 아트캠 장비에서, 이미지는 카메라 관리자(903)를 경유하여 캡쳐된다. 프린터에 맞춰진 아트캠 장비에서는, 이미지는 아마도 다른 장비에 의해 "분출된(squirted)" 이미지의 결과로서 네트워크 관리자(904)를 경유하여 캡쳐된다.
예술적 효과는 필름 관리자(905)에 의해 통합된 파일 시스템에서 발견된다. 예술적 효과는 스크립트 파일과 리소스의 세트를 구성한다. 스크립트는 해석되고 이미지 프로세싱 관리자(906)에 의해 이미지에 적용된다. 스크립트는 보통 Artcard로 알려진 ArtCards 상에서 수송된다. 초기상태에서 어플리케이션은 현재 장착된 Artcard상에 포함된 스크립트를 사용한다. 이 이미지는 프린터 관리자(908)를 경유하여 프린트된다.
아트캠 장비가 시작될 때, 부트스트랩 프로세스는 어플리케이션을 시작하기 전에 다양한 관지라 프로세스를 시작한다. 이것은 어플리케이션이 그것이 시작될 때 다양한 관리자로부터 즉각적으로 서비스를 요청하는 것을 허용한다.
초기화에서 어플리케이션(902)은 그 자체를 아래에 리스트된 이벤트의 핸들러로 등록한다. 이벤트를 받을 때, 그것은 표에 기술된 행동들을 수행한다.
사용자 인터페이스 이벤트 | 행동 |
Lock Focus | 카메라 관리자를 경유하는 어떠한 자동 선행-캡쳐 셋팅을 수행한다. 이것은 자동-초점, 자동-조정 노출, 그리고 플래쉬 충전을 포함한다. 이것은 보통 사용자가 버튼을 반만누르는 것으로서 초기화된다. |
Take | 카메라 관리자를 경유하여 이미지를 캡쳐한다. |
Self-Timer | 카메라 관리자를 경유하여 자동타이머 모드에서 이미지를 캡쳐한다. |
Flash Mode | 다음 플래쉬 모드를 사용하기 위해서 카메라 관리자를 업데이트하라. 다음 플래쉬 모드를 보여주기 위해 상태 디스플레이를 업데이트하라. |
프린터 관리자를 경유하여 현재의 이미지를 프린트하라. 만약 스크립트가 있다면 이미지 프로세싱 관리자를 경유하여 이미지에 예술적 효과를 적용하라. 상태 디스플레이 상에서 남아있는 프린트 갯수를 업데이트하라(아래에 삽입된 프린트 롤을 참조할 것). | |
Hold | 만약 현재 스크립트가 있다면 이미지 프로세싱 관리자를 경유하여 현재의 이미지에 예술적 효과를 적용하지만, 이미지를 프린트하지는 말아라. |
Eject ArtCards | 파일 관리자를 경유하여 현재 삽입된 아트카드를 배출하라. |
Print Roll Inserted | 카메라 관리자의 관점 비율과 프린트 관리자의 남아있는 매체 길이에 기반하여 프린트 수를 계산하라. 상태 디스플레이 상에 남아있는 프린트 갯수를 업데이트하라. |
Print Roll Removed | 현재 프린트롤이 없다는 것을 의미하도록 상태 디스플레이를 업데이트하라. |
카메라가 디스플레이를 포함하는 곳에서, 어플리케이션은 또한 사용자가 현재 날짜와 시간, 그리고 다른 수정할만한 카메라 파라미터들을 수정하는 것을 허용하는 사용자 인터페이스 관리자(910)를 경유하여 그래픽 사용자 인터페이스를 구성한다. 어플리케이션은 모든 불변의 파라미터들을 플래쉬 메모리에 저장한다.
실시간 마이크로커널(911)(Real-Time Microkernel 911)
실시간 마이크로커널은 인터럽트와 프로세서 우선권에 기반하여 우선적으로 프로세스들을 예정한다. 그것은 적분된 인터프로세스 커뮤니케이션과 타이머 서비스를, 이러한 것들이 프로세스 예정과 밀접히 연관되어있기 때문에, 제공한다. 모든 다른 작동 시스템 기능은 마이크로커널 외부에서 실행된다.
카메라 관리자(903)(Camera Manager 903)
카메라 관리자는 이미지 캡쳐 서비스를 제공한다. 그것은 아트캠에 장착된 카메라 하드웨어를 제어한다. 그것은 카메라 파라미터들이 질문되고 설정되고, 이미지가 캡쳐되는것을 허용하는 추상적인 카메라 제어 인터페이스를 제공한다. 이 추상적 인터페이스는 어플리케이션을 카메라 실행의 세부사항으로부터 분리한다. 카메라 관리자는 다음의 입력/출력 파라미터들과 명령들을 활용한다.
출력 파라미터 | domains |
focus range | real, real |
zoom range | real, real |
aperture range | real, real |
shutter speed ragne | real, real |
입력 파라미터 | domains |
focus | real |
zoom | real |
aperture | real |
shutter speed | real |
aspect ratio | classic, HDTV, panoramic |
focus control mode | multi-point auto, single-point auto, manual |
exposure control mode | auto, aperture priority, shutter priority, manual |
flash mode | auto, auto with red-eye removal, fill, off |
view scene mode | on, off |
명령 | 반환값 domains |
Lock Focus | none |
Self-Timed Capture | Raw Image |
Capture Image | Raw Image |
카메라 관리자는 비동기 이벤트-운영 프로세스로 실행한다. 그것은 연결된 상태 머신의 세트, 각 비동기 작동에 대한 하나를 포함한다. 이것은 자동 초점화, 플래쉬 충전, 셀프-타이머의 카운트다운, 그리고 이미지 캡쳐들을 포함한다. 초기화에서 카메라 관리자는 카메라 하드웨어를 알려진 상태로 설정한다. 이것은 보통의 초점 거리 설정과 줌을 집어넣는 것을 포함한다. 카메라 관리자의 소프트웨어 구조는 도 222에 도시되어있다. 소프트웨어 구성요소는 이어지는 서브섹션에 기술되어있다:
초점고정(913)(Lock Focus 913)
초점 고정은 포커스 제어 모드, 노출량 제어 모드와 플래쉬 모드에 따라, 현재 장면에 대해 자동적으로 초점과 노출량을 조정하고, 필요하다면 플래쉬를 가능하게한다. 초점 고정은 보통 사용자가 버튼을 반만 누르는 것에 응하여 초기화되어있다. 그것은 보통 이미지 캡쳐 순서의 부분이지만, 만약 사용자가 버튼을 반만 누른 상태로 고정하고 있다면, 이미지의 실제 캡쳐로부터 시간 상 분리되어 있을 수 있다. 이것은 사용자가 점 초점과 점 미터링을 하도록 허용한다.
캡쳐 이미지(914)(Capture Image 914)
캡쳐 이미지는 현재 장면의 이미지를 캡쳐한다. 그것은 만약 플래쉬 모드가 레드아이 제거를 포함한다면 레드아이 램프를 광나게 하고, 셔터를 제어하고, 가능하다면 플래쉬를 유발하고, 그리고 이미지 센서를 통하여 이미지를 판독한다. 그것은 카메라의 적응을 결정하고, 따라서 이미지를 캡쳐하고, 결과적으로 나중에 이미지 프로세싱 동안에 이미지는 적절하게 순응될 수 있다. 그것은 또한 이미지 캡쳐 동안에 카메라 모션의 존재와, 나중에 이미지 프로세스 동안에 디플루어링을 유발할 것인지를 결정한다.
셀프-타이머 캡쳐(915)(Self-Timed Capture 915)
셀프-타이머 캡쳐는 20초동안을 센후에 현재의 장면의 이미지를 캡쳐한다. 그것은 사용자에게 셀프타이머 LED를 경유하여는 카운트다운 동안에 피드백을 준다. 처음 15초동안에 그것은 LED를 광나게 한다. 나중 5초동안에 그것은 LED를 깜박거리게 한다.
뷰 씬(917)(View Scene 917)
사용자에게 LCD-기반 뷰파인더를 제공하는, 뷰 씬은 주기적으로 이미지 센서를 통해 현재의 장면을 감지하고 그것을 컬러 LCD에 디스플레이한다.
자동 초점(918)(Auto Focus 918)
이미지의 선택된 영역들이 그것들이 초점 상에 있다고 의미하기 위해 충분히 선명해질 때까지 자동 초점은 초점 길이를 변경한다. 그것은 만약 이미지 센서의 특정 영역으로부터 나온 이미지의 선명도 측정이 설정된 한계를 넘으면 그 영역이 초점 상에 있다고 가정한다. 그것은 초점 길이에 의한 선명도의 결과 상 기울기 강하를 수행함으로서, 필요한 만큼 방향과 단계크기를 변경함으로서 광학 초점 길이를 찾는다. 만약 초점 제어 모드가 다중-초점 자동이라면, 그후 세 영역이 사용되고, 시각의 필드를 통과하여 수평적으로 배열된다. 만약 초점 제어 모드가 단일-초점 자동이라면, 그후 한영역이 사용되고, 시각의 필드의 중앙이다. 자동 초점은 초점 제어기에 의해 지적되는 이용가능한 초점 길이 범주 내에서 작동한다. 따라서, 고정 초점 장비에서, 그것은 효율적으로 사용불능이 된다.
자동 플래쉬(919)(Auto Flash 919)
자동 플래쉬는 만약 장면 조도가 플래쉬가 필요할 정도로 충분히 어둡다는 것을 결정한다. 그것은 만약 장면 조도가 설정된 한계 이하이면 광이 충분히 어둡다고 가정한다. 장면 조도는 광센서에서 얻어지는데, 그것은 이미지 센서의 중앙 영역에서부터 조도 기준을 산출한다. 만약 플래쉬가 필요하면, 그것은 플래쉬를 충전한다.
자동 노출(920)(Auto Exposure 920)
장면 조도의 조합, 조리개, 그리고 셔터 속도는 캡쳐된 이미지의 노출량을 결정한다. 요구되는 노출량은 고정값이다. 만약 노출 제어 모드가 자동이라면, 자동 노출은 주어진 장면 조도에 대해 요구되는 노출량을 산출하는 조리개와 셔터 스피드의 결합을 결정한다. 만약 노출 제어 모드가 조리개 우선이라면, 자동 노출은 주어진 장면의 조도와 현재 조리개에 대해 요구되는 노출량을 산출하여 셔터 스피드를 결정한다. 만약 노출 제어 모드가 셔터 우선이라면, 자동 노출은 주어진 장면 조도와 현재의 셔터 스피드에 대해 요구되는 노출량을 산출하는 조리개를 결정한다. 장면 조도는 광센서에서 얻어지는데, 그것은 이미지 센서의 중앙 영역으로부터 광의 기준을 산출한다.
자동 노출은 조리개 제어기와 셔터 스피드 제어기에 의해 표시되는 사용가능한 조리개 범위와 셔터 스피드 범위에서 작동한다. 셔터 스피드 제어기와 셔터 제어기는 대부분의 아트캠 장비에서 기계적인 셔터의 부재를 감춘다.
플래쉬가 가능하다면, 수동이거나 자동 플래쉬에 의해서 모두, 그 후 효율적인 셔터 스피드는 플래쉬 지속인데, 그것은 일반적으로 1/1000초에서 1/10000초의 범위안에 있다.
이미지 프로세싱 관리자(906)(Image Processing Manager 906(도 221))
이미지 프로세싱 관리자는 이미지 프로세싱과 예술적인 효과 서비스를 제공한다. 그것은 아트캠에 고속 이미지 프로세싱을 수행하기 위해 장착된 VLIW 벡터 프로세서를 활용한다. 이미지 프로세싱 관리자는 Vark 이미지 프로세싱 언어로 씌여진 스크립트에 대한 해석기를 포함한다. 예술적 효과는 그러므로 Vark 스크립트 파일과 폰트나 클립 이미지 등과 같은 연관된 리소스들을 구성한다. 이미지 프로세싱 관리자의 소프트웨어적인 구조는 도 223에 더욱 자세히 도시되어있고, 다음의 모듈을 포함한다:
전환 및 보강 이미지(921)(Convert and Enhance Image 921)
이미지 프로세싱 관리자는 유닛-독립적인 CIE LAB 컬러 스페이스에서, 아트캠 프린터 하드웨어의 재생 수용력에 적절한 해상도에서 이미지 프로세싱을 수행한다. 캡쳐된 이미지는 첫번째로 잡음제거 필터링에 의해 보강된다. 그것은 선택적으로 모션-첨가 블러를 제거하기 위해 프로세스된다. 이미지는 그후 그것의 유닛-의존적인 RGB 컬러 스페이스에서 CIE LAB 컬러 스페이스로 전환된다. 그것은 또한 이미지 캡쳐의 시간에 어떠한 카메라 회전의 효과도 제거하기 위해 회전되고, 작업 이미지 해상도에 맞춰 조절된다. 이미지는 그 이상으로 가능한 동적 범위에 그것의 동적 범위를 조절함으로서 보강된다.
페이스 검출(923)(Detect Faces 923)
페이스들은 캡쳐된 이미지에서 색조와 공간 특징 분석에 기반하여 검출되어진다. 이 검출된 페이스 영역의 리스트는 워핑과 말풍선(sppech balloons)을 위치시키는 것와 같은 페이스-특정 효과들을 적용하기 위한 Vark 스크립트에 의해 사용된다.
바크 이미지 프로세싱 언어 해석기(924)(Vark Image Processing Lanquage Interpreter 924)
Vark는 일반적인-목적의 프로그래밍 언어를 이미지 프로세싱 익스텐션의 풍부한 세트로 구성한다. 그것은 원시적인 데이터 유형의 범위(정수, 실수, 이진, 문자), 더 복잡한 유형을 구성하는 총체적인 데이터 유형의 범위(배열, 문자열, 레코드), 산술 및 관계 연산자의 풍부한 세트, 상황적인 및 영구적인 제어 흐름(if-then-else, while-do), 그리고 재귀(recursive) 함수 및 절차를 제공한다. 그것은 또한 이미지-프로세싱 데이터 유형들(image, clip image, matte, color, color lookup table, palette, dither matrix, convolution kernel, 기타등등), 그래픽 데이터 유형들(font, text, path), 이미지-프로세싱 함수들의 세트(color transformation, compositing, filtering, spatial transformations and warping, illumination, text setting 그리고 rendering), 그리고 더 고-레벨의 예술적 기능들(tiling, painting 그리고 stroking)의 세트를 제공한다.
Vark 프로그램은 두가지 면에서 휴대가능하다. 그것이 해석되기 때문에 그것은 호스트의 CPU 및 이미지 프로세싱 엔진에 독립적이다. 그것이 유닛-독립적 모델 스페이스 및 유닛-독립적 컬러 스페이스를 사용하기 때문에, 그것은 입력 컬러 특성 및 호스트 입력 유닛의 해상도, 그리고 출력 컬러 특성 및 호스트 출력 유닛의 해상도에 독립적이다.
Vark 해석기(924)는 Vark 스크립트를 만드는 소스 구문을 분석하고 스크립트의 의미를 표현하는 분석트리(parse tree)를 생성한다. 분석 트리에서의 노드들은 프로그램에서의 구문, 수식, 서브-수식, 변수 및 상수와 일치한다. 루트 노드는 메인 진행 구문 리스트와 일치한다.
해석기는 분석 트리에서의 루트 구문을 실행함으로서 프로그램을 실행한다. 분석 트리의 각 노드는 자식 노드에게 그들 자신을 적절하게 평가하거나 실행하는 것을 요구한다. if 구문 노드는, 예를 들어, 3개의 자식 노드들을 갖는다 - 상태 수식노드, then 구문노드, 그리고 the else 구문 노드. 만약 if 구문이 상태 수식 노드에게 스스로 평가할 것을 요구한다면, 반환되는 불린 값에 따라 then 구문이나 the else 구문이 스스로 실행하도록 요구할 것이다. 그것은 실제 상태 표현이나 실제 구문에 대해서는 아무것도 모른다.
대부분의 데이터 유형에서 동작들이 분석 트리의 실행 동안에 실행되는 반면, 이미지 데이터 유형에서의 동작들은 분석 트리의 실행 이후까지 연기된다. 이것은 이미징 동작들이 최적화되어서 결과적으로 최종 이미지를 기여하는 중간 픽셀들이 계산되는 것을 허용한다. 그것은 또한 최종 이미지가 필요한 메모리 양을 줄이기 위해, 공간적인 세부분할에 의해 다양한 경로들로 계산되는 것을 허용한다.
분석트리의 실행 동안에, 각 이미지 함수는 단순하게 루트로서 그것의 일치 하는 이미지 연산자 및 루트의 자식 노드로서 이미지 파라미터를 구성하는 이미지 그래프- 노들들이 이미지 연산자인 그래프 및 잎사귀들이 이미지들인 그래프-로 돌아간다. 이미지 파라미터들은 물론 그들 자체로 이미지 그래프이다. 그래서 각 성공적인 이미지 함수들은 더 깊은 이미지 그래프로 돌아간다.
분석 트리의 실행 후에, 이미지 그래프는 최종 이미지와 일치하는 것을 얻는다. 이 이미징 그래프는 그 후 이어지는 두 개의 최적화를 가지고 깊이-우선 법에서 실행된다. (1) 오직 이런 최종 이미지에 기여하는 픽셀들만이 주어진 노드에서 계산된고, 그리고 (2) 노드의 자식 노드들은 요구되는 메모리 양을 최소화하는 순서로 실행된다. 이미지 그래프에서 이미지 연산자는 최종 이미지를 생성하는 최적화된 순서로 실행된다. 계산-집약전 이미지 연산자는 아트캠 유닛에 장착된 VLIW 프로세서를 사용하여 가속된다. 만약 이미지 그래프를 실행하는데 요구되는 메모리 양이 사용가능한 메모리를 초과한다면, 그 후에 최종 이미지 영역은 요구되는 메모리가 더이상 사용가능 메모리를 초과하지 않을때까지 세부분할된다.
잘-구성된 Vark 프로그램에 대하여 첫번째 최적화는 본질적으로 많은 이익을 제공할 것으로 보이지는 않는다. 그러나 만약 최종 이미지 영역이 세부분할된다면, 그후 최적화는 상당한 이익을 가져다 줄 것이다. 그후 메모리 요구량을 줄이기 위한 효율적인 기술로서 사용되는 세부분할을 허용하는 것은 정확히 이 최적화이다. 이미지 동작의 연기된 실행의 결과 가운데 하나는 프로그램 제어 흐름이 이미지 내용에 의존할 수 없다는 것인데, 그 이유는 이미지 내용은 분석 트리 실행 동안에는 알려지지 않기 때문이다. 실제로 이것은 심각한 제한이 아니고, 그럼에도 불구하고 언어 디자인 동안에는 마음에 간직해야 한다.
이미지 연산들의 연기된 실행(deffered execution)(또는 게으른 평가(lazy evalution)의 개념은 Guibas와 Stolfi(Guibas, L.J., 와 J.Stolfi, "비트맵 처리를 위한 언어", ACM Transaction on Graphics, Vol 1, No.3, July 1982, pp.191-214)에 의해 기술되었다. 이들은 마찬가지로 프로그램의 실행동안에 이미지 그래프를 구성하고, 이어진 그래프 평가 동안에 최종 이미지에 기여하지 않는 픽셀을 계산하는 것을 피하기 위해 결과영역을 뒤로 전달(propagate)한다. Shantzis는 추가적으로 사용가능한 픽셀들의 영역을 이미지 그래프 평가 동안에 앞으로 전달한다(Shantzis, M.A., "효율적이고 유연한 이미지 계산을 위한 모델", Computer Graphics Proceeding, Annual Conference Series, 1994, pp. 147-154). Vark 해석기는 더 철학적인 Cameron에 의해 기술된 다중-패스 양-방향적인 영역 증식 스키마를 사용한다(Cameron, S., "Efficient Bounds in Construcive Solid Geometry", IEEE Computer Graphics & Applications, Vol. 11, No.3, May 1991, pp.68-74). 메모리 사용의 최소화 순서로 실행되는 최적화는 Shantzis로 인한 것이지만, 표준 컴파일러 이론에 기반한다(Aho, A.V., R. Sethi, and J.D. Ullman, "Generating Code form DAGs", in Compilers: Principles, Techniques, and Tools, Addison-Wesley, 1986, pp.557-567). 그러나 변수-크기 이미지 버퍼들을 지원하기 위해서 Vark 해석기는 Shantzis보다 더 철학적인 스키마를 사용한다. 메모리 사용을 줄이기 위한 영역 증식과의 결합에서 결과 영역의 세부분할은 또한 Shantzis로 인한 것이다.
프린터 관리자(908)(Print Manager 908(도 221))
프린터 관리자는 이미지 프린팅 서비스를 제공한다. 그것은 아트캠에 장착된 잉크젯 프린터 하드웨어를 제어한다. 그것은 프린터 파라미터들이 질문되고 설정되고, 그리고 이미지 프린트되도록 허용하는 추상적인 프린터 제어 인터페이스를 제공한다. 이 추상적인 인터페이스는 어플리케이션을 프린터 실행의 세부사항으로부터 분리하고 다음의 변수들을 포함한다.
출력 파라미터들 | domains |
매체가 현존한다 | bool |
매체가 고정된 페이지 크기를 갖는다. | bool |
매체 폭 | real |
남아있는 매체 길이 | real |
고정된 페이지 크기 | real, real |
입력 파라미터들 | domains |
페이지 크기 | real, real |
명령들 | 반환값 domains |
프린트 이미지 | none |
출력 이벤트들 | |
잘못된 매체 | |
매체 고갈 | |
매체 삽입 | |
매체 제거 |
프린터 관리자는 비동기화 이벤트-운영 프로세스로서 작동한다. 이것은 연결된 상태 머신들의 세트, 각 비동기 동작에 대한 하나를 포함한다. 이것들은 이미지를 프린트하는 것과 프린트롤의 자동 마운팅을 포함한다. 프린트 관리자의 소프트웨어 구조는 도 224에 도시되어있다. 소프트웨어 구성요소는 다음 기술서에 기술되어있다.
프린트 이미지(930)(Print Image 930)
프린트 이미지는 공급된 이미지를 프린트한다. 그것은 프린팅을 위한 이미지를 준비하기 위해 VLIW 프로세서를 사용한다. 이것은 이미지 컬러 스페이스를 유닛-특성 CMY로 전환하는 것과 프린트헤드에 의해 기대되는 혀식에서 하프-톤의 양-레벨 데이터를 생성하는 것을 포함한다.
프린트들 사이에서, 페이퍼는 프린트롤의 제거를 허용하기 위해 프린트 롤의 입술로 입을 들이밀게 되고, 노즐은 잉크의 누설과 건조방지를 위해 뚜겅을 덮개된다. 실제 프린트가 시작되기 전에, 그러므로, 노즐은 벗겨지고 깨끗해지고, 페이퍼는 프린트 헤드로 전진한다. 프린트 그 자체는 이미지가 완전히 프린트될 때까지, VLIW 프로세서로부터의 전송라인 데이터, 라인 데이터를 프린트하는 것 및 페이퍼를 전진시키는 것으로 구성되어있다. 프린트가 단부난 이후에, 페이퍼는 재단기로 잘리고 프린트롤로 되돌아가게 되고, 노즐은 뚜껑이 덮힌다. 남아있는 매체 길이는 그 후 프린트롤에서 업데이트 된다.
자동 장착 프린트롤 (Auto Mount Print Roll 131)
자동 장착 프린트 롤은 프린트롤의 삽입과 제거에 응답한다. 그것은 어플리케이션에 의해 조절되고 상태 디스플레이를 업데이트하는데 사용되는 프린트 롤 삽입과 제거 이벤트를 발생한다. 이 프린트 롤은 프린트롤에 장착된 인층 칩과 아트캠에 장착된 인증 칩사이의 프로토콜에 따라 인증된 것이다. 만약 프린트롤이 인증에 페일하면 그후 그것은 사출된다. 다양한 정보는 프린트롤에서 추출된다. 페이퍼와 잉크 특성들은 프린트 프로세스 동안에 사용된다. 어떤 때라도, 남아있는 매체 길이와 매체의 고정된 페이지 크기는 프린트 관리자에 의해 출판되고 어플리케이션에 의해 사용된다.
사용자 인터페이스 관리자 (User Interface Manager 910(도 221))
사용자 인터페이스 관리자는 도 225에 더 자세히 도시되어있고, 사용자 인터페이스 관리 서비스를 제공한다. 그것은 상태 디스플레이와 입력 하드웨어를 제어하는 물리적 사용자 인터페이스 관리자(911), 그리고 컬러 디스플레이에서 가상의 그래픽 사용자 인터페이스를 관리하는 그래픽 사용자 인터페이스 관리자 (912)를 구성한다. 사용자 인터페이스 관리자는 가상 및 물리적 입력을 이벤트로 번역한다. 각 이벤트는 그 이벤트를 위해 등록된 프로세스의 이벤트 큐내부에 위치한다.
파일 관리자 (File Manager 905(도 222))
파일 관리자는 파일 관리 서비스를 제공한다. 그것은 모든 장착된 볼륨들의 파일시스템이 나타나는 것 안에서 통합된 계층의 파일 시스템을 제공한다. 아트캠에 사용되는 초기의 제거가능한 저장 매체는 아트카드이다. 아트카드는 직접적으로 에러-허용성(error-tolerant) 리드-솔로몬-인코디드 바이너리 데이터를 나타내는 2-레벨 도트들의 블록으로 높은 해상도로 출력된다. 블록 구조체는 적절한 판독-기록 아트카드 유닛에서 첨부 및 첨부-재기록을 지원한다(아트캠에서 초기에는 사용되지 않는). 더 높은 레벨에서 아트카드는 확장 첨부-재기록 가능한 ISO9660 CD-ROM 파일 시스템을 포함한다. 파일 관리자의 소프트웨어 구조체 및 특히 아트캠 유닛 제어기는 도 226에 도시되어 있는 것과 같은 것이다.
네트워크 관리자 (Network Manager 904(도 222))
네트워크 관리자는 인프라-레드(IrDA) 및 유니버셜 시리얼 버스(USB)를 포함하는 다양한 인터페이스를 경유하는 "기구" 네트워킹 서비스를 제공한다. 이것은 아트캠이 캡쳐된 이미지를 공유하는 것과 프린트를 위해 이미지를 받는 것을 허용 한다.
클록 관리자 (Clock Manager 907(도 222))
클록 관리자는 날짜와 시각 클록 서비스를 제공한다. 그것은 아트캠에 장착된 배터리-백된(battery-backed) 실시간 클록을 활용하고, 사용자가 시간을 설정할때 수행되는 자동-칼리브레이션(auto-calibration)에 기반하여, 그것을 그것이 클록 드리프트를 자동적으로 조정하는 정도로 제어한다.
전력 관리 (Power Management)
시스템이 비어있을 때 그것은 단지 입력 이벤트에 대한 주기적 스캐닝만 발생하는 무활동의 전력 상태로 들어간다. 입력 이벤트는 버튼을 누르는 것 또는 아트카드의 삽입을 포함한다. 입력 이벤트가 스캐닝되자마자, 아트캠 유닛은 활동 전력 상태로 다시 들어간다. 시스템은 그후 평소 방식대로 입력 이벤트를 처리한다.
심지어 시스템이 활동 전력 상태에 있을 때, 각 개별 모듈에 관련된 하드웨어는 일반적으로 무활동의 전력 상태에 있다. 이것은 총체적인 전력 소비를 줄이고, 작동줄이때는 전력 자원을 독식하는 프린터의 페이퍼 컷팅 재단기같은, 특히 하드웨어 구성요소를 소모시키는 것을 허용한다. 카메라에 기반하는 아트캠 유닛은, 초기상태에서, 이미지 캡쳐 모드로 되어있다. 이것은 카메라가 활동중이라는 것과 프린터와 같은 다른 모듈들이 무활동중이라는 것을 의미한다. 이것은 비-카메라 기능들이 초기화되어있을 때, 어플리케이션이 분명히 카메라 모듈을 중지시킨다는 것을 의미한다. 다른 모듈은 그들이 일이 없을때 자연스럽게 스스로 중지한다.
워치독 타이머 (Watchdog Timer)
시스템은 주기적인 높은-우선순위의 워치독 타이머 인터럽트를 발생한다. 인터럽트 핸들러는 만약 그것이 시스템이 마지막 인터럽트 이후로 진전되지 않는다고, 즉 멈추었다고 결정을 내리면 시스템을 리셋시킨다.
대체 프린트롤 (Alternative Print Roll)
대안적인 실시예에서, 적절하게 스냅되고 함께 알맞게 된 삽입 주형화된 플라스틱 조각들에서 대체로 구성될 수 있는 제공된 프린트롤의 수정 형식이 있다. 프린트롤의 수정된 형식은 다소 단순화된 구조에 더하여 높은 잉크 저장 수용률을 갖는다. 이미지가 프린트되는 프린트 매체는 단순화된 구조를 위한 플라스틱 소매 형성자 주변에 둘려싸여져있다. 잉크 매체 통은 공기 구멍 밖으로 잉크가 유출되는 기회를 최소화하도록 구성된 공기 구멍 시리즈를 갖는다. 게다가 고무 봉인은 카메라 시스템으로의 프린트롤의 삽입 상에 관통되는 고무 봉인을 가진 잉크 방출 구멍을 위해 제공된다. 게다가, 프린트 롤은 프린트 매체 방출 슬롯을 포함하고 방출슬롯은 프린트 또는 카메라 시스템에서 프린트헤드와 연관된 프린트 매체 방출 슬롯의 정확한 위치를 제공하고 도와주는 주변 몰딩된 표면을 포함한다.
도 227에서 도 231로 돌아가서, 도 227에서는 프린트롤의 내부 부분을 보여주는 부분적 절단을 가진 조립 형식에서의 단일 포인트 롤 유닛 (1001)이 도시되어있다. 도 228과 도 229는 각각 왼쪽 및 오른쪽 면이 확장된 관점의 시각을 도시했다. 도 230과 도 231은 도 227에서 도 229의 내부 핵심 부분 (1007)의 확장된 관점의 것이다.
프린트롤 (1001)은 내부 잉크 공급을 포함하는 내부 핵심 부분 (1007) 주변에 구성되어있다. 핵심 부분 (1007)의 외부는 페이퍼나 필름 공급 (1009)로 둘러싸인 형성자 (1008)을 제공한다. 페이퍼 공급 주변의 그것은 프린트롤 주변에 함께 들어가서 도 227에서 도시된 것과 같은 덮개 유닛을 형성하는 두개의 커버 조각 (1010, 1011)을 구성한다. 바닥 덮개 조각 (1011)은 카메라 시스템 상호연결을 위한 프린트 매체 (1004)의 출력을 지나는 슬롯(1012)을 포함한다.
두 핀치 롤러 (1038, 1039)는 드라이브 핀치 롤러 (1040)에 대항하여 페이퍼를 핀칭하도록 제공되어, 그들은 함께 롤러 (1040) 주변의 페이퍼의 디컬링(decurling)을 제공한다. 디컬링은, 연장된 기간 동안에 프린트 롤의 형태로 저장되는 것으로부터 페이퍼에 부가될 수도 있는 강한 컬(curl)을 무시하도록 작동한다. 롤러 (1038, 1039)는 커버 베이스 부분 (1077)의 단부부분에 스냅 피트를 형성하기 위해 제공되고, 운영동안에 단부자락에 걸리는 (1043)을 포함하는 롤러 (1040)은 사이에 있는 페이퍼 (1004)를 확실하게 집기위한 상위 덮개 조각 (1010)에 들어가는 스냅 피트를 형성하는 것에 제공된다.
커버 조각 (1011)은 최종 돌기 또는 덮개 (1042)를 포함한다. 최종 덮개 (1042)는 카메라 시스템에서 열 압반 구조체를 프린트하는 것과 동일하게 페이퍼의 출구에 정확히 배열되어 제공된다. 이런 방법에서, 정확한 배열 또는 근접한 프린트헤드와 연관된 페이퍼를 배출하는 것의 위치는 프린트헤드로 페이퍼를 완전 안내하는 것을 제공한다.
이제 도 230과 도 231로 돌아가서, 삽입 모듈 부분으로부터 형성될 수 있고 내부 스폰지 부분 (1034-1036)을 가지는 3개의 핵심 잉크 실린더 주변에 위치한 내 부 핵심 부분의 확장된 관점이 도시되어있다.
핵심 부분의 한 단부에서는 (1014-1016)과 같은 일련의 공기 브리딩 채널이 제공되어있다. 각 공기 브리딩 채널 (1014-1016)은 주변의 대기에 연결된 외부 컨택트 포인트 (1019, 1018)과 같은 첫번째 구멍을 서로 연결시킨다. (1014)와 같은 공기 브리딩 채널에 잇따른 패스는 앞, 뒤로 휘감는, 휘감는 성질에 더 좋다. 공기 브리딩 채널은 핵심 부분의 단부 너머에 위치한 봉인 테이프 (1020)의 부분에 의해 봉인되어있다. 봉인 테이프 (1020)의 표면은 그것을 고방수로 만들기 위해, 그리고 그러므로 공기 브리딩 채널로의 어떠한 유동성 부분의 입장을 저항하기 위해 방수처리되어있다.
핵심 부분 (1007)의 두번째 단부에, 일련의 얇아진 구멍들을 가지고 있는 각 두꺼워진 부분을 가진 세 두꺼워진 부분 (1024, 1025 그리고 1026)을 포함하는 고무 봉인 두껑 (1023)이 제공되어있다. 예를 들어, 부분 (1024)는 얇아진 구멍 (1029, 1030 그리고 1031)을 가진다. 얇아진 구멍들은 각 분리된 얇아진 부분들의 각 부분으로부터 구멍이 한줄로 배열되어진 것처럼 배열되어있다. 예를 들어, 얇아진 구멍 (1031, 1032 그리고 1033)(도 230)은 다른 얇아진 부분들로부터 오는 각 구멍과 함께 모두 한줄로 배열되어있다. 각기 얇아진 부분들은 세개의 구멍들이 뚫렸을때, 상응하는 저장소와 유동성 커뮤니케이션이 만들어지는것과 같은 잉크 공급 저장소를 일치하는 것에 일치한다.
단부 캡 유닛 (1044)는 핵심부분 (1007)에 대한 부착을 위해 제공된다. 단부 캡 (1044)는 상응되는 구멍(1048과 같은)을 지나 삽입되고, 얇아진 부분(1033과 같은)을 꿰뚫고 잉크 챔버(1035와 같은)에 상응하는 부분과 상호연결되는 세 뽀죡한 부분을 포함하는 뾰족한 어댑터(보이지 않는)에 더하여 인증칩 (1033)의 삽입을 위해 조리개 (1046)를 포함한다.
또한 단부부분에 삽입된 부분 (1044)는 인증칩 (1033), 즉 카메라 시스템에 프린트롤의 인증 접속을 제공하는 인증칩이다. 이 핵심 부분은 그러므로 잉크의 각기 분할된 색상과 내부 스폰지를 포함하는 세개의 분할된 챔버들로 분할된다. 각 챔버들은 첫번째 단부에 잉크 방출구와 두번째 단부에 공기 브리딩 홀을 포함한다. 봉인 테이프(1020)의 덮개는 공기브리딩 채널을 덮기위해 제공되고, 고무 봉인 (1023)은 잉크 챔버의 두번째 단부를 봉인하기 위해 제공된다.
내부 잉크 챔버 스폰지와 방수 채널은 프린트롤이 모바일 환경에서 많은 다른 상황판단을 가지고 활용되는 것을 허용한다. 게다가 스폰지는 순차적인 방법에서 핵심 부분의 밖으로 잉크를 보내는 것에 관하여 그 자체로 방수 처리될 수 있다.
립들(1027과 같은)의 시리즈는 핵심 부분 (1007)과 프린트롤 형성자 (1008)사이에 최소의 마찰 컨택트를 허용하기 위하여 핵심부분의 표면에 제공될 수 있다.
프린트롤의 부분들의 대다수는 방출 주형 플라스틱으로 구성될 수 있고, 프린트롤은 높은 내부 잉크 저장 수용력을 포함한다. 단순화된 구조는 또한 최소한의 누설을 제공하는 잉크 챔버 공기 밴트에 더하여 페이퍼 디컬링 메카니즘을 포함한다. 고무 봉인은 높은 동작 수용력을 제공하는 것에 관한 잉크 공급 챔버와의 효율적인 커뮤니케이션을 제공한다.
아트카드는, 물론, 많은 다른 환경에서 사용될 수 있다. 예를 들어 많은 데이터양 또는 구성 정보에서 대한 사용자-친화적인 인터페이스를 제공하면서, 아트카드는 장착된 것과 개인 컴퓨터 어플리케이션 모두에서 사용될 수 있다.
이것은 많은 수의 가능 어플리케이션을 이끈다. 예를 들어, 아트카드 리더는 PC에 부착될 수 있다. PC를 위한 어플리케이션은 많고 다양한다. 가장 단순한 어플리케이션은 저비용 판독만가능한 분배 매체로서이다. 아트카드가 프린트된 이후에 그것들은 만약 회사에서 데이터 분배를 위해 사용되었다면 결산 흔적을 제공한다.
게다가, PC의 많은 시간이 닫혀진 시스템에 기반으로 사용되지만, 다수의 구성 옵션은 남을 것이다. 사용자를 위한 복잡한 동작 시스템 인터페이스에 의존하기 보다는, 아트카드 리더기로의 단순한 아트카드의 삽입이 모든 구성 요구들을 제공할 수 있다.
아트카드의 뒷부분이 어플리케이션의 구분없이 동일한 시작적 외모를 갖는 반면(그것이 데이터를 저장하기 때문에), 아트카드의 앞부분은 어플리케이션을 의존한다. 그것은 어플리케이션의 내용안에서 사용자를 감지하도록 만들어져야 한다.
그러므로 그것은 도 Z35의 배열이 책, 신문, 잡지, 기술적 매뉴얼 등의 형식에서 정보의 효율적인 분배를 위해 제공되는 것으로 보여진다.
그 밖의 어플리케이션에서, 도 Z36에 도시된 것처럼, 아트카드 (80)의 앞면은 샘플 이미지에 적용된 예술적 효과를 포함하는 이미지를 보여줄 수 있다. 카메라 시스템 (81)은 카드 (80)의 뒷면에 프로그램된 데이터를 읽는 것과 출력 이미지 (84)를 생성하는 것에 관하여 샘플 이미지 (83)에 알고리즘 데이터를 적용하는 것을 위한 카드리더 (82)를 포함하는 것을 제공할 수 있다. 온보드 잉크젯 프린터와 충분한 프로세싱을 포함하는 카메라 유닛 (81)은 샘플 이미지 데이터를 프로세싱하는 것을 의미한다. 아트카드 개념의 그밖의 어플리케이션, 이하에 "비즈카드(BizCard)"라 불리는 것은 비지니스 카드상에 회사 정보를 담는 것이다. 비즈카드는 회사 정보 안에 새로운 개념이다. 도 Z37에 도시된 것처럼 비즈카드의 앞면은 오늘날의 보통의 비지니스카드와 똑같이 보이고 기능을 한다. 그것은 비지니스 카드들에 있는 많은 다양한 카드 스타일만큼 가진, 사진과 컨택트 정보를 포함한다. 그러나 각 비즈카드의 뒷부분은 회사에 관한 데이터의 1-2메가를 가지는 흑백 점들의 프린트된 배열을 갖는다. 결과는 각 비지니스 카드에 부착된 3.5" 디스크의 저장량을 갖는 것과 비슷한다.
정보는 회사정보, 특정한 제품 시트들, 웹-사이트 포인터들, 이메일 주소들, 다시.... 간단히 말해, 비즈카드 홀더가 원하는 모든 것들이 될 수 있다. 비즈카드는 USB포트에 의하여 보통 PC에 연결될 수 있는, PC에 부착된 것과 같은 어떠한 아트카드 리더기에 의해서도 읽힐 수 있다. 비즈카드는 또한 특정한 장착된 유닛 상에서 문서로 디스플레이 될 수 있다. PC의 경우에는, 사용자는 단순히 그들의 리더기에 비즈카드를 삽입한다. 비즈카드는 그후 마치 정규 웹 브라우져를 사용하는 웹-사이트같이 적절하게 인도된다.
단순히 회사 개인 키에 대한 포인터 뿐만 아니라 소유자의 사진과 디지털 서명을 담음으로써, 각 비즈카드는 전자적으로 사실 그들이 누구라고, 그리고 특정 회사에서 실제로 일한다고 주장하는 것을 증명하는데 사용될 수 있다. 회사의 개인 키에 대한 포인터를 더하는데, 비즈카드는 보안 커뮤니케이션의 간단한 초기화를 허용한다.
그 밖의 애플리케이션, 아래에 "투어카드(TourCard)"라고 알려진 것은 도시에 대한 여행객과 방문자들을 위한 정보를 담고 있는 아트카드의 어플리케이션이다.
* 지도들
* 대중 교통 시간표
* 재미있는 장소
* 영역 역사
* 이벤트들과 전람회들
* 레스토랑 위치
* 쇼핑 센터
투어카드는 여행 소책자, 가이드북, 거리 주소들을 저가격 대체물이다. 카드당 단지 1센트의 제조비용을 가지고, 최소 비용 또는 만약 광고에 의해 지원받는 다면 무료로, 투어카드는 여행 정보 센터, 호텔과 관광 명소에 배치될 수 있다. 북리더의 휴대성은 그것을 관광객을 위한 완벽한 솔루션으로 만든다. 투어카드는 또한 정보 정자(kiosk),즉 아트카드 리더에 장착된 컴퓨터가 어떠한 웹 브러우져 상에 투어카드에 인코드된 정보를 디코드하는 장소에 사용될 수 있다.
투어카드를 그렇게 다용도로 만드는 것은 북리더의 상호작용이다. 예를 들어, 지도 상에 포함된 하이퍼텍스트 링크는 특징적 건물의 역사적 이야기를 보여주 기 위해 선택될 수 있다. 이런 방법으로 관광객은 관련된 이동 루트들과 어떠한 시간에도 활용가능한 시간표를 가지고, 도시의 가이드된 여행에 승선할 수 있다. 투어카드는 독립된 지도, 가이드북들, 시간표와 레스토랑 카이드에 대한 필요를 제거하고, 독립된 여행자들을 위한 간단한 해결책을 창조한다.
물론, 어떠한 다른 데이터 카드의 활용도 가능하다. 예를 들어, 신문, 공부 가이드, 팝 그룹 카드, 야구 카드, 시간표, 음악 데이터 파일들, 생성 부분, 광고, TV 안내, 영화 안내, 트레이드 쇼 정보, 잡지에서 카드를 뜯는 것, 영수증, 분류된 광고, 의학 정보, 프로그램과 소프트웨어, 경마 형식 안내, 전자 형식, 연간 보고서, 레스토랑, 호텔과 방학 안내, 번역 프로그램들, 골프 코스 안내, 뉴스 방송, 오락, 날씨 세부사항 등.
예를 들어, 아트카드는 책의 내용이나 신문의 내용을 포함할 수 있다. 그러한 시스템의 예는 아트카드(70)이 한 표면에 책 제목을 담고, 두번째 표면에는 그위에 프린트된 책의 인코드된 내용을 가지고 있는 것안에, 도 Z35에 도시되어있다. 카드 (70)은 카드리더(72)의 실패(folding up)를 허용하는 유연한 디스플레이 (73)을 포함할 수 있는 리더 (72)에 삽입된다. 카드리더 (72)는 앞뒤로 페이지를 넘기는 것을 허용하는 디스플레이 제어(74)와 카드리더 (72)의 다른 제어들을 포함할 수 있다.
Claims (31)
- 하우징과;스위치 엑츄에이터들의 어레이가 상기 하우징 상에 위치하고, 상기 스위치 엑츄에이터들은 카트리지의 일련번호, 매체 및 매체 색소 중 적어도 하나와 관련되는 데이터를 나타내기 위치하는 것으로서, 이를 통하여 스위치 엑츄에이터들이 상기 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이 내에서 미리 결정된 스위치들의 결합을 작동시킬 수 있는 것을, 포함하는 인쇄 카트리지.
- 인쇄 장치를 인쇄 카트리지에 연결하는 것에 따라, 상기 인쇄 장치들 안에서 스위치들의 어레이 내 스위치들의 결합을 작동시키는 단계를 포함하는 인쇄 카드리지의 매체 색소를 결정하는 방법으로서, 상기 스위치들의 어레이는, 미리 결정된 스위치들의 결합이, 작동될 때, 상기 매체 색소에 관련하는 데이터를 나르는 각각의 신호들을 생성하도록 형성되는 것인, 인쇄 카드리지의 매체 색소를 결정하는 방법.
- 하우징과;매체 색소의 공급을 포함하고 상기 하우징 내에 위치하는 매체 색소 공급 장치; 및상기 하우징 상에 위치하는 것으로서, 데이터를 나르는 신호를 생성하기 위 하여 스위치 어레이내 미리 결정된 스위치들의 결합을 작동시킬 수 있도록 상기 매체 색소와 관련하는 데이터를 나타내기 위하여 위치되는 스위치 액츄에이터들을, 포함하는 인쇄 카트리지.
- 제 3 항에 있어서,스위치 액츄에이터들의 상기 어레이에 의하여 나타나는 상기 데이터는, 매체 색소를 식별하는 일련 번호, 매체 색소의 유형, 매체 색소의 점도, 매체 색소의 표면 장력, 매체 색소의 광학적 특성들 및 매체의 유형에 대응하는 광학적 잉크 방울 부피 중 적어도 하나와 관련되는, 인쇄 카트리지.
- 제 3 항에 있어서,스위치 액츄에이터들의 상기 어레이는,인쇄 카트리지가 인쇄 장치와 연결되는 경우 상기 스위치 어레이를 지지하도록 상기 카트리지상에 위치되어 있는 핀들의 어레이의 형태안에 있는 것인, 인쇄 카트리지.
- 제 5 항에 있어서,핀들의 어레이 내의 각 핀은 마이크로 전자-기계의 스위치 어레이내 대응 마이크로 스위치를 지지하도록 치수되어진 것인, 인쇄 카트리지.
- 제 5 항에 있어서,핀들의 상기 어레이는 주사 마이크로몰딩 프로세스의 산물인, 인쇄 카트리지.
- 인쇄 장치를 인쇄 카트리지에 연결하는 것에 따라 상기 인쇄 장치들 안에서 스위치들의 어레이 내 스위치들의 결합을 작동시키는 단계를 포함하는 인쇄 카드리지의 매체를 결정하는 방법으로서, 상기 스위치들의 어레이는, 미리 결정된 스위치들의 결합이, 작동될 때, 상기 매체에 관련하는 데이터를 나르는 각각의 신호들을 생성하도록 형성되는 것인, 인쇄 카드리지의 매체를 결정하는 방법
- 하우징과;매체의 공급을 포함하고 상기 하우징 내에 위치하는 매체 공급 장치; 및상기 하우징 상에 위치하는 것으로서, 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이내 미리 결정된 스위치들의 결합을 작동시킬 수 있도록 상기 매체와 관련하는 데이터를 나타내기 위하여 위치되는 스위치 액츄에이터들을, 포함하는 인쇄 카트리지.
- 제 9 항에 있어서,스위치 액츄에이터들의 상기 어레이에 의하여 나타나는 상기 데이터는, 매체를 식별하는 일련 번호, 매체의 유형, 및 매체의 길이 중 적어도 하나와 관련되는, 인쇄 카트리지.
- 제 9 항에 있어서,스위치 액츄에이터들의 상기 어레이는,인쇄 카트리지가 인쇄 장치와 연결되는 경우 상기 스위치 어레이를 지지하도록 상기 카트리지상에 위치되어 있는 핀들의 어레이의 형태안에 있는 것인, 인쇄 카트리지.
- 제 11 항에 있어서,핀들의 어레이 내의 각 핀은 마이크로 전자-기계의 스위치 어레이내 대응 마이크로 스위치를 지지하도록 치수되어진 것인, 인쇄 카트리지.
- 제 11 항에 있어서,핀들의 상기 어레이는 주사 마이크로몰딩 프로세스의 산물인, 인쇄 카트리지.
- 인쇄 장치를 인쇄 카트리지에 연결하는 것에 따라, 상기 인쇄 장치들 안에서 스위치들의 어레이내 스위치들의 결합을 작동시키는 단계를 포함하는 인쇄 카드리지의 매체 및 매체 색소를 결정하는 방법으로서, 상기 스위치들의 어레이는, 미리 결정된 스위치들의 결합이, 작동될 때, 상기 매체 및 매체 색소에 관련하는 데이터를 나르는 각각의 신호들을 생성하도록 형성되는 것인, 인쇄 카드리지의 매체 색소를 결정하는 방법.
- 하우징과;각각 매체의 공급 및 매체 색소의 공급을 포함하고 상기 하우징 내에 위치하는 매체 및 매체 색소 공급 장치들; 및상기 하우징 상에 위치하는 것으로서, 데이터를 나르는 신호를 생성하기 위하여 스위치 어레이 내 미리 결정된 스위치들의 결합을 작동시킬 수 있도록 상기 매체 및 매체 색소와 관련하는 데이터를 나타내기 위하여 위치되는 스위치 액츄에이터들을, 포함하는 인쇄 카트리지.
- 제 15 항에 있어서,스위치 액츄에이터들의 상기 어레이에 의하여 나타나는 상기 데이터는, 매체 색소를 식별하는 일련 번호, 매체의 길이, 매체의 유형, 매체 색소의 점도, 매체 색소의 표면 장력, 매체 색소의 광학적 특성들 및 매체의 유형에 대응하는 매체 색소의 광학적 잉크 방울 부피 중 적어도 하나와 관련되는, 인쇄 카트리지.
- 제 15 항에 있어서,스위치 액츄에이터들의 상기 어레이는,인쇄 카트리지가 인쇄 장치와 연결되는 경우 상기 스위치 어레이를 지지하도록 상기 카트리지상에 위치되어 있는 핀들의 어레이의 형태안에 있는 것인, 인쇄 카트리지.
- 제 17 항에 있어서,핀들의 어레이 내의 각 핀은 마이크로 전자-기계의 스위치 어레이 내 대응 마이크로 스위치를 지지하도록 된 치수되어진 것인, 인쇄 카트리지.
- 제 17 항에 있어서,핀들의 상기 어레이는 주사 마이크로몰딩 프로세스의 산물인, 인쇄 카트리지.
- 하우징과, 상기 하우징내 위치하고 매체 색소의 공급을 포함하는 매체 색소 공급 장치와, 상기 하우징 상에 위치하고, 상기 매체 색소와 완련되는 데이터를 나타내는 스위치 액츄에이터들의 어레이를 가지는 인쇄 카트리지에 연결 될 수 있는, 몸체;매체 색소 공급 메커니즘 및 인쇄 메커니즘의 작동을 제어하기 위하여 상기 몸체 내에 위치하는 프로세서; 및상기 몸체 내에 위치하는 스위치 어레이를 포함하는 인쇄 장치로서, 상기 스 위치 어레이는, 상기 스위치 어레이 내 미리 결정된 스위치들의 결합들이, 작동될 때, 매체 색소에 관련된 데이터를 나르는 신호들을 생성하도록 형성되며, 상기 스위치 어레이 내 상기 미리 결정된 스위치들의 결합은 상기 스위치 어레이가 인쇄 카트리지의 매체 색소와 관련하는 상기 데이터를 나르는 신호를 생성하도록 상기 몸체가 상기 인쇄 카트리지에 연결되어진 때 상기 인쇄 카트리지의 하우징 상에 위치하는 스위치 액츄에이터들의 어레이에 의해서 실행될 수 있는 것인, 인쇄 장치.
- 제 20 항에 있어서,상기 스위치 어레이는 마이크로 전자-기계 시스템을 정의하는 마이크로 스위치들의 어레이의 형태안에 있는 것인, 인쇄 장치.
- 제 21 항에 있어서,상기 스위치 어레이는 집적 회로 제조 기술의 산물인 것인, 인쇄 장치.
- 제 21 항에 있어서,각 마이크로 스위치는 상기 마이크로 스위치를 지지하는 상기 스위치 액츄에이터들의 하나로 정의하는 핀에 의해서 실행될 수 있도록 형성되는 것인 인쇄 장치.
- 하우징과, 상기 하우징내 위치하고 매체의 공급을 포함하는 매체 공급 장치 와, 상기 하우징 상에 위치하고, 상기 매체와 완련되는 데이터를 나타내는 스위치 액츄에이터들의 어레이를 가지는 인쇄 카트리지에 연결될 수 있는, 몸체;매체 공급 메커니즘 및 인쇄 메커니즘의 작동을 제어하기 위하여 상기 몸체 내에 위치하는 프로세서; 및상기 몸체 내에 위치하는 스위치 어레이를 포함하는 인쇄 장치로서, 상기 스위치 어레이는, 상기 스위치 어레이 내 미리 결정된 스위치들의 결합들이, 작동될 때, 매체에 관련된 데이터를 나르는 신호들을 생성하도록 형성되며, 상기 스위치 어레이 내 상기 미리 결정된 스위치들의 결합은 상기 스위치 어레이가 인쇄 카트리지의 매체와 관련하는 상기 데이터를 나르는 신호를 생성하도록 상기 몸체가 상기 인쇄 카트리지에 연결되어진 때 상기 인쇄 카트리지의 하우징 상에 위치하는 스위치 액츄에이터들의 어레이에 의해서 실행될 수 있는 것인, 인쇄 장치.
- 제 24 항에 있어서,상기 스위치 어레이는 마이크로 전자-기계 시스템을 정의하는 마이크로 스위치들의 어레이의 형태안에 있는 것인, 인쇄 장치.
- 제 25 항에 있어서,상기 스위치 어레이는 집적 회로 제조 기술의 산물인 것인, 인쇄 장치.
- 제 25 항에 있어서,각 마이크로 스위치는 상기 마이크로 스위치를 지지하는 상기 스위치 액츄에이터들의 하나로 정의하는 핀에 의해서 실행될 수 있도록 형성되는 것인 인쇄 장치.
- 하우징과, 상기 하우징내 위치하고 매체 색소 및 매체의 공급을 포함하는 매체 색소 및 매체 공급 장치들과, 상기 하우징 상에 위치하고, 상기 매체 색소 및 매체와 완련되는 데이터를 나타내는 스위치 액츄에이터들의 어레이를 가지는 인쇄 카트리지에 연결될 수 있는, 몸체;매체 색소 및 매체 공급 메커니즘들 및 인쇄 메커니즘의 작동을 제어하기 위하여 상기 몸체 내에 위치하는 프로세서; 및상기 몸체 내에 위치하는 스위치 어레이를 포함하는 인쇄 장치로서, 상기 스위치 어레이는, 상기 스위치 어레이 내 내 미리 결정된 스위치들의 결합들이, 작동될 때, 매체 색소 및 매체에 관련된 데이터를 나르는 신호들을 생성하도록 형성되며, 상기 스위치 어레이 내 상기 미리 결정된 스위치들의 결합은 상기 스위치 어레이가 인쇄 카트리지의 매체 색소 및 매체와 관련하는 상기 데이터를 나르는 신호를 생성하도록 상기 몸체가 상기 인쇄 카트리지에 연결되어진 때 상기 인쇄 카트리지의 하우징 상에 위치하는 스위치 액츄에이터들의 어레이에 의해서 실행될 수 있는 것인, 인쇄 장치.
- 제 28 항에 있어서,상기 스위치 어레이는 마이크로 전자-기계 시스템을 정의하는 마이크로 스위치들의 어레이의 형태안에 있는 것인, 인쇄 장치.
- 제 29 항에 있어서,상기 스위치 어레이는 집적 회로 제조 기술의 산물인 것인, 인쇄 장치.
- 제 29 항에 있어서각 마이크로 스위치는 상기 마이크로 스위치를 지지하는 상기 스위치 액츄에이터들의 하나로 정의하는 핀에 의해서 실행될 수 있도록 형성되는 것인 인쇄 장치.
Applications Claiming Priority (3)
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 |
US09/922,036 | 2001-08-06 | ||
PCT/AU2002/001053 WO2003013860A1 (en) | 2001-10-22 | 2002-08-06 | A printing cartridge with switch array identification |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20040045421A KR20040045421A (ko) | 2004-06-01 |
KR100601836B1 true KR100601836B1 (ko) | 2006-07-19 |
Family
ID=25446393
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020047002032A KR100629216B1 (ko) | 2001-08-06 | 2002-07-09 | 집적 회로 장치가 구비된 프린팅 카트리지 |
KR1020047002033A KR100601836B1 (ko) | 2001-08-06 | 2002-07-09 | 스위치 어레이 식별확인을 구비한 프린팅 카트리지 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020047002032A KR100629216B1 (ko) | 2001-08-06 | 2002-07-09 | 집적 회로 장치가 구비된 프린팅 카트리지 |
Country Status (11)
Country | Link |
---|---|
US (7) | US6547364B2 (ko) |
EP (1) | EP1425178A4 (ko) |
JP (1) | JP2004536736A (ko) |
KR (2) | KR100629216B1 (ko) |
CN (1) | CN1299913C (ko) |
AU (1) | AU2002344712B2 (ko) |
CA (1) | CA2456739A1 (ko) |
IL (1) | IL160258A (ko) |
NZ (1) | NZ531183A (ko) |
WO (1) | WO2003013865A1 (ko) |
ZA (1) | ZA200400868B (ko) |
Families Citing this family (126)
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 |
US7110024B1 (en) | 1997-07-15 | 2006-09-19 | Silverbrook Research Pty Ltd | Digital camera system having motion deblurring means |
US6985207B2 (en) | 1997-07-15 | 2006-01-10 | Silverbrook Research Pty Ltd | Photographic prints having magnetically recordable media |
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 |
AUPO850597A0 (en) | 1997-08-11 | 1997-09-04 | Silverbrook Research Pty Ltd | Image processing method and apparatus (art01a) |
US20040119829A1 (en) | 1997-07-15 | 2004-06-24 | Silverbrook Research Pty Ltd | Printhead assembly for a print on demand digital camera system |
AUPO802797A0 (en) | 1997-07-15 | 1997-08-07 | Silverbrook Research Pty Ltd | Image processing method and apparatus (ART54) |
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 |
US7424620B2 (en) * | 2003-09-25 | 2008-09-09 | Sun Microsystems, Inc. | Interleaved data and instruction streams for application program obfuscation |
US20050069138A1 (en) * | 2003-09-25 | 2005-03-31 | Sun Microsystems, Inc., A Delaware Corporation | Application program obfuscation |
US8220058B2 (en) * | 2003-09-25 | 2012-07-10 | Oracle America, Inc. | Rendering and encryption engine for application program obfuscation |
US7353499B2 (en) * | 2003-09-25 | 2008-04-01 | Sun Microsystems, Inc. | Multiple instruction dispatch tables for application program obfuscation |
US7415618B2 (en) * | 2003-09-25 | 2008-08-19 | Sun Microsystems, Inc. | Permutation of opcode values for 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 |
US7731327B2 (en) * | 2004-01-21 | 2010-06-08 | Silverbrook Research Pty Ltd | Desktop printer with cartridge incorporating printhead integrated circuit |
US7303255B2 (en) * | 2004-01-21 | 2007-12-04 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with a compressed air port |
US7374355B2 (en) * | 2004-01-21 | 2008-05-20 | Silverbrook Research Pty Ltd | Inkjet printer cradle for receiving a pagewidth printhead cartridge |
US7360868B2 (en) * | 2004-01-21 | 2008-04-22 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with infrared ink delivery capabilities |
US7328985B2 (en) * | 2004-01-21 | 2008-02-12 | Silverbrook Research Pty Ltd | Inkjet printer cartridge refill dispenser with security mechanism |
US7097291B2 (en) * | 2004-01-21 | 2006-08-29 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with ink refill port having multiple ink couplings |
US7441865B2 (en) * | 2004-01-21 | 2008-10-28 | Silverbrook Research Pty Ltd | Printhead chip having longitudinal ink supply channels |
US20050157128A1 (en) * | 2004-01-21 | 2005-07-21 | Silverbrook Research Pty Ltd | Pagewidth inkjet printer cartridge with end electrical connectors |
US7232208B2 (en) * | 2004-01-21 | 2007-06-19 | Silverbrook Research Pty Ltd | Inkjet printer cartridge refill dispenser with plunge action |
US7121655B2 (en) * | 2004-01-21 | 2006-10-17 | Silverbrook Research Pty Ltd | Inkjet printer cartridge refill dispenser |
US20050157112A1 (en) * | 2004-01-21 | 2005-07-21 | Silverbrook Research Pty Ltd | Inkjet printer cradle with shaped recess for receiving a printer cartridge |
US7083273B2 (en) * | 2004-01-21 | 2006-08-01 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with uniform compressed air distribution |
US20050157000A1 (en) * | 2004-01-21 | 2005-07-21 | Silverbrook Research Pty Ltd | Inkjet printer cradle with end data and power contacts |
US7524016B2 (en) * | 2004-01-21 | 2009-04-28 | Silverbrook Research Pty Ltd | Cartridge unit having negatively pressurized ink storage |
US7448734B2 (en) * | 2004-01-21 | 2008-11-11 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with pagewidth printhead |
US7364264B2 (en) * | 2004-01-21 | 2008-04-29 | Silverbrook Research Pty Ltd | Inkjet printer cradle with single drive motor performing multiple functions |
US7367647B2 (en) * | 2004-01-21 | 2008-05-06 | Silverbrook Research Pty Ltd | Pagewidth inkjet printer cartridge with ink delivery member |
US7364263B2 (en) * | 2004-01-21 | 2008-04-29 | Silverbrook Research Pty Ltd | Removable inkjet printer cartridge |
US20050157125A1 (en) * | 2004-01-21 | 2005-07-21 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with integral shield |
US7198352B2 (en) * | 2004-01-21 | 2007-04-03 | Kia Silverbrook | Inkjet printer cradle with cartridge stabilizing mechanism |
US7469989B2 (en) * | 2004-01-21 | 2008-12-30 | Silverbrook Research Pty Ltd | Printhead chip having longitudinal ink supply channels interrupted by transverse bridges |
US7425050B2 (en) * | 2004-01-21 | 2008-09-16 | Silverbrook Research Pty Ltd | Method for facilitating maintenance of an inkjet printer having a pagewidth printhead |
US7645025B2 (en) * | 2004-01-21 | 2010-01-12 | Silverbrook Research Pty Ltd | Inkjet printer cartridge with two printhead integrated circuits |
US7281778B2 (en) | 2004-03-15 | 2007-10-16 | Fujifilm Dimatix, Inc. | High frequency droplet ejection device and method |
US8491076B2 (en) | 2004-03-15 | 2013-07-23 | Fujifilm Dimatix, Inc. | Fluid droplet ejection devices and methods |
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 |
US7293359B2 (en) * | 2004-04-29 | 2007-11-13 | Hewlett-Packard Development Company, L.P. | Method for manufacturing a fluid ejection device |
US20050243118A1 (en) * | 2004-04-29 | 2005-11-03 | Ward Jefferson P | Consumable cartridge theft deterrence apparatus and methods |
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 |
WO2006060541A2 (en) * | 2004-11-30 | 2006-06-08 | 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 |
KR101457457B1 (ko) | 2004-12-30 | 2014-11-05 | 후지필름 디마틱스, 인크. | 잉크 분사 프린팅 |
US20060190324A1 (en) * | 2005-02-24 | 2006-08-24 | Lexmark International, Inc. | Method for providing reduced cost imaging to customers |
ATE532639T1 (de) | 2005-09-07 | 2011-11-15 | Retail Inkjet Solutions | System und verfahren zum nachfüllen von tintenstrahlpatronen |
JP2007116215A (ja) * | 2005-10-18 | 2007-05-10 | Fuji Electric Holdings Co Ltd | 耐タンパーモジュール装置 |
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 |
WO2007124129A2 (en) * | 2006-04-20 | 2007-11-01 | Nve Corporataion | 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 |
EP1921200A3 (en) * | 2006-11-08 | 2010-07-21 | 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 |
WO2008112187A1 (en) | 2007-03-09 | 2008-09-18 | Nve Corporation | Stressed magnetoresistive tamper detection devices |
KR100906404B1 (ko) * | 2007-07-13 | 2009-07-09 | 삼성에스디에스 주식회사 | 소모품의 복제 방지 장치 및 방법 |
KR20100045482A (ko) * | 2007-07-20 | 2010-05-03 | 빅풋 네트웍스, 인크. | 클라이언트 인증 디바이스 및 이의 방법들 |
US7944047B2 (en) * | 2007-09-25 | 2011-05-17 | Qimonda Ag | Method and structure of expanding, upgrading, or fixing multi-chip package |
KR100997879B1 (ko) * | 2008-03-03 | 2010-12-07 | 삼성전자주식회사 | Crum 유닛, 교체가능유닛 및 이를 이용하는 화상형성장치와, 그 암호화 데이터 통신 방법 |
JP5038229B2 (ja) * | 2008-05-09 | 2012-10-03 | キヤノン株式会社 | 画像処理装置、画像処理方法並びに画像処理プログラム及びそれを記録する記録媒体 |
US9003559B2 (en) * | 2008-07-29 | 2015-04-07 | International Business Machines Corporation | Continuity check monitoring for microchip exploitation detection |
US8172140B2 (en) * | 2008-07-29 | 2012-05-08 | International Business Machines Corporation | Doped implant monitoring for microchip tamper 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 |
JP4582225B2 (ja) * | 2008-08-15 | 2010-11-17 | ソニー株式会社 | 液体吐出装置及び液体吐出方法 |
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 |
EP2376602B1 (en) * | 2008-12-23 | 2018-04-11 | Johnson Matthey Process Technologies, Inc. | Method of withdrawing material from an fcc unit |
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 |
US8242790B2 (en) * | 2009-02-23 | 2012-08-14 | Lewis James M | Method and system for detection of tampering related to reverse engineering |
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 | 珠海天威技术开发有限公司 | 芯片及其认证方法 |
BR112014007538B1 (pt) * | 2011-09-30 | 2020-06-02 | Hewlett-Packard Development Company, L.P. | Sistema de autenticação e cartucho de tinta |
US8334705B1 (en) | 2011-10-27 | 2012-12-18 | Certicom Corp. | Analog circuitry to conceal activity of logic circuitry |
US8635467B2 (en) | 2011-10-27 | 2014-01-21 | Certicom Corp. | Integrated circuit with logic circuitry and multiple concealing circuits |
US8909942B1 (en) * | 2012-03-30 | 2014-12-09 | Western Digital Technologies, Inc. | MRAM-based security for data storage systems |
WO2013155522A1 (en) | 2012-04-13 | 2013-10-17 | Lewis Innovative Technologies, Inc. | Electronic physical unclonable functions |
US9122873B2 (en) | 2012-09-14 | 2015-09-01 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
USD845979S1 (en) * | 2013-01-23 | 2019-04-16 | Yandex Europe Ag | Display screen with graphical user interface |
US9218235B2 (en) | 2013-09-25 | 2015-12-22 | Lexmark International, Inc. | Systems and methods of verifying operational information associated with an imaging device |
US9357102B2 (en) | 2013-09-25 | 2016-05-31 | Lexmark International, Inc. | Systems and methods of securing operational information associated with an imaging device |
US11888844B2 (en) * | 2014-02-18 | 2024-01-30 | Secuve Co., Ltd. | Electrical circuit testing device and method |
RU2673620C2 (ru) * | 2014-10-31 | 2018-11-28 | Хьюлетт-Паккард Дивелопмент Компани, Л.П. | Шифрование картриджей с текучей средой для использования в устройствах формирования изображения |
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 |
USD788844S1 (en) * | 2015-04-03 | 2017-06-06 | Seiko Epson Corporation | Tape cartridge for a label printer |
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 (ko) * | 2015-04-03 | 2016-02-08 | ||
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 | 武汉精测电子集团股份有限公司 | 一种用于显示面板缺陷分类的学习方法 |
CN111630512A (zh) | 2018-01-30 | 2020-09-04 | 惠普发展公司,有限责任合伙企业 | 可替换打印机部件的验证 |
CN108537113B (zh) * | 2018-03-02 | 2019-01-04 | 黄润梓 | 眼睛伤害度评估方法 |
US11712637B1 (en) | 2018-03-23 | 2023-08-01 | Steven M. Hoffberg | Steerable disk or ball |
AU2019428368B2 (en) | 2019-02-06 | 2023-02-02 | Hewlett-Packard Development Company, L.P. | Integrated circuits including customization bits |
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)
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 |
EP0227207B1 (en) | 1985-12-26 | 1992-12-23 | SHIMIZU CONSTRUCTION Co. LTD. | Concrete reinforcing unit |
DE3787300T2 (de) * | 1986-03-19 | 1994-01-05 | Sharp Kk | Handkopiergerät. |
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 | 三菱電機株式会社 | ディジタル雑音信号発生回路 |
SG85110A1 (en) * | 1989-08-05 | 2001-12-19 | Canon Kk | Ink jet recording apparatus and ink catridge for the apparatus |
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 |
US6182901B1 (en) * | 1993-12-22 | 2001-02-06 | Xerox Corporation | Orientational disambiguation for self-clocking glyph codes |
JPH07220035A (ja) * | 1993-12-22 | 1995-08-18 | Xerox Corp | 光学的読み取り可能レコード |
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 |
US6203147B1 (en) * | 1994-12-22 | 2001-03-20 | Hewlett-Packard Company | Electrical and fluidic interface for an ink supply |
US5812156A (en) * | 1997-01-21 | 1998-09-22 | Hewlett-Packard Company | Apparatus controlled by data from consumable parts with incorporated memory devices |
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 |
US6009188A (en) | 1996-02-16 | 1999-12-28 | Microsoft Corporation | Method and system for digital plenoptic imaging |
US5995772A (en) | 1996-02-16 | 1999-11-30 | Lexmark International Inc. | Imaging apparatus cartridge including an encoded device |
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 |
AUPO799197A0 (en) | 1997-07-15 | 1997-08-07 | Silverbrook Research Pty Ltd | Image processing method and apparatus (ART01) |
US6786420B1 (en) * | 1997-07-15 | 2004-09-07 | Silverbrook Research Pty. Ltd. | Data distribution mechanism in the form of ink dots on cards |
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 |
US6547364B2 (en) * | 1997-07-12 | 2003-04-15 | Silverbrook Research Pty Ltd | Printing cartridge with an integrated circuit device |
US6702417B2 (en) | 1997-07-12 | 2004-03-09 | Silverbrook Research Pty Ltd | Printing cartridge with capacitive sensor identification |
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 |
US6238044B1 (en) * | 2000-06-30 | 2001-05-29 | Silverbrook Research Pty Ltd | Print cartridge |
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 |
AUPO798697A0 (en) | 1997-07-15 | 1997-08-07 | Silverbrook Research Pty Ltd | Data processing method and apparatus (ART51) |
US6459495B1 (en) * | 1997-07-15 | 2002-10-01 | Silverbrook Research Pty Ltd | Dot center tracking in optical storage systems using ink dots |
US7578582B2 (en) | 1997-07-15 | 2009-08-25 | Silverbrook Research Pty Ltd | Inkjet nozzle chamber holding two fluids |
AUPO802797A0 (en) | 1997-07-15 | 1997-08-07 | Silverbrook Research Pty Ltd | Image processing method and apparatus (ART54) |
US7410243B2 (en) | 1997-07-15 | 2008-08-12 | Silverbrook Research Pty Ltd | Inkjet nozzle with resiliently biased ejection actuator |
US6918654B2 (en) | 1997-07-15 | 2005-07-19 | 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) |
US6985207B2 (en) | 1997-07-15 | 2006-01-10 | Silverbrook Research Pty Ltd | Photographic prints having magnetically recordable media |
US6217165B1 (en) * | 1997-07-15 | 2001-04-17 | Silverbrook Research Pty. Ltd. | Ink and media cartridge with axial ink chambers |
AUPO850097A0 (en) | 1997-08-11 | 1997-09-04 | Silverbrook Research Pty Ltd | Image processing method and apparatus (art31) |
US7246897B2 (en) | 1997-07-15 | 2007-07-24 | Silverbrook Research Pty Ltd | Media cartridge for inkjet printhead |
AUPO850597A0 (en) | 1997-08-11 | 1997-09-04 | Silverbrook Research Pty Ltd | Image processing method and apparatus (art01a) |
US7284843B2 (en) | 1997-07-15 | 2007-10-23 | Silverbrook Research Pty Ltd | Ink distribution assembly for an ink jet printhead |
AUPP398798A0 (en) | 1998-06-09 | 1998-07-02 | Silverbrook Research Pty Ltd | Image creation method and apparatus (ij43) |
US6195150B1 (en) * | 1997-07-15 | 2001-02-27 | Silverbrook Research Pty Ltd | Pseudo-3D stereoscopic images and output device |
US6665454B1 (en) | 1997-07-15 | 2003-12-16 | Silverbrook Research Pty Ltd | Dot adjacency compensation in optical storage systems using ink dots |
US6879341B1 (en) | 1997-07-15 | 2005-04-12 | Silverbrook Research Pty Ltd | Digital camera system containing a VLIW vector processor |
US6727948B1 (en) | 1997-07-15 | 2004-04-27 | Silverbrook Research Pty Ltd | Utilizing autofocus information for image processing in a digital camera |
US7110024B1 (en) | 1997-07-15 | 2006-09-19 | Silverbrook Research Pty Ltd | Digital camera system having motion deblurring means |
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 |
US6807965B1 (en) * | 1998-06-03 | 2004-10-26 | Scott Laboratories, Inc. | Apparatus and method for providing a conscious patient relief from pain and anxiety associated with medical or surgical procedures |
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 |
US6425661B1 (en) | 2000-06-30 | 2002-07-30 | Silverbrook Research Pty Ltd | Ink cartridge |
DE10193281D2 (de) * | 2000-07-06 | 2003-10-09 | Behr Gmbh & Co | 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 | 画像処理方法、装置、および画像形成装置 |
-
2001
- 2001-08-06 US US09/922,036 patent/US6547364B2/en not_active Expired - Lifetime
-
2002
- 2002-07-09 EP EP02742540A patent/EP1425178A4/en not_active Withdrawn
- 2002-07-09 KR KR1020047002032A patent/KR100629216B1/ko not_active IP Right Cessation
- 2002-07-09 AU AU2002344712A patent/AU2002344712B2/en not_active Ceased
- 2002-07-09 IL IL160258A patent/IL160258A/en not_active IP Right Cessation
- 2002-07-09 KR KR1020047002033A patent/KR100601836B1/ko not_active IP Right Cessation
- 2002-07-09 NZ NZ531183A patent/NZ531183A/en not_active IP Right Cessation
- 2002-07-09 CA CA002456739A patent/CA2456739A1/en not_active Abandoned
- 2002-07-09 JP JP2003518836A patent/JP2004536736A/ja active Pending
- 2002-07-09 WO PCT/AU2002/000914 patent/WO2003013865A1/en not_active Application Discontinuation
- 2002-07-09 CN CNB028198042A patent/CN1299913C/zh not_active Expired - Fee Related
- 2002-12-19 US US10/322,687 patent/US6953235B2/en not_active Expired - Fee Related
-
2004
- 2004-02-03 ZA ZA2004/00868A patent/ZA200400868B/en unknown
- 2004-10-29 US US10/975,765 patent/US7193482B2/en not_active Expired - Fee Related
-
2005
- 2005-01-10 US US11/030,966 patent/US7275800B2/en not_active Expired - Fee Related
-
2007
- 2007-08-06 US US11/834,625 patent/US7527209B2/en not_active Expired - Fee Related
-
2009
- 2009-02-10 US US12/368,985 patent/US8098285B2/en not_active Expired - Fee Related
-
2012
- 2012-01-15 US US13/350,786 patent/US20120113293A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US6547364B2 (en) | 2003-04-15 |
WO2003013865A1 (en) | 2003-02-20 |
IL160258A0 (en) | 2004-07-25 |
US8098285B2 (en) | 2012-01-17 |
US20120113293A1 (en) | 2012-05-10 |
US6953235B2 (en) | 2005-10-11 |
KR20040045421A (ko) | 2004-06-01 |
US7275800B2 (en) | 2007-10-02 |
US20040004651A1 (en) | 2004-01-08 |
US20050146583A1 (en) | 2005-07-07 |
US7527209B2 (en) | 2009-05-05 |
EP1425178A4 (en) | 2006-04-19 |
KR100629216B1 (ko) | 2006-09-27 |
CA2456739A1 (en) | 2003-02-20 |
AU2002344712B2 (en) | 2004-10-21 |
US20080087736A1 (en) | 2008-04-17 |
ZA200400868B (en) | 2005-01-26 |
IL160258A (en) | 2006-10-05 |
US20020030712A1 (en) | 2002-03-14 |
CN1558829A (zh) | 2004-12-29 |
KR20040053107A (ko) | 2004-06-23 |
EP1425178A1 (en) | 2004-06-09 |
US20090251737A1 (en) | 2009-10-08 |
CN1299913C (zh) | 2007-02-14 |
JP2004536736A (ja) | 2004-12-09 |
US20050151777A1 (en) | 2005-07-14 |
NZ531183A (en) | 2005-08-26 |
US7193482B2 (en) | 2007-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100601836B1 (ko) | 스위치 어레이 식별확인을 구비한 프린팅 카트리지 | |
KR100574290B1 (ko) | 마이크로제어기를 포함하는 이미지 프린팅 장치 | |
US6315200B1 (en) | Encoded data card reading system | |
AU2002317636A1 (en) | A printing cartridge with capacitive sensor identification | |
WO2003013862A1 (en) | A printing cartridge with capacitive sensor identification | |
IL160175A (en) | Print cartridge with radio frequency detection and print cartridge media determination method | |
ZA200400867B (en) | Printing cartridge with two dimensional code identification. | |
AU2002344712A1 (en) | Printing cartridge with an integrated circuit device | |
IL174358A (en) | Print cartridge with pressure sensor array detection | |
IL160172A (en) | Print cartridge with barcode recognition | |
WO1999004368A1 (en) | A camera with internal printing system | |
AU2002317029A1 (en) | Printing cartridge with radio frequency identification | |
AU2002317030A1 (en) | Printing cartridge with two dimensional code identification | |
IL174357A (en) | Printing facility | |
AU2002317630A1 (en) | Image printing apparatus including a microcontroller | |
IL160174A (en) | A character whispering device that includes a microcontroller | |
AU2006225219B2 (en) | A print roll unit with an ink reservoir core | |
AU2005200088B2 (en) | Printing control based on two dimensional code indicative of printing cartridge | |
AU2005203488B2 (en) | Method of Fabricating an Image Printing Control System | |
AU2005200200A1 (en) | A method of identifying printing cartridge characteristics with capacitive sensors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20120710 Year of fee payment: 7 |
|
LAPS | Lapse due to unpaid annual fee |