DC free code design with state dependent mapping

申请号 US10395495 申请日 2003-03-24 公开(公告)号 US20040066318A1 公开(公告)日 2004-04-08
申请人 发明人 Kinhing Paul Tsang;
摘要 A method of encoding digital information in a system is provided. The method includes receiving a sequence of user-bits and calculating a running digital sum (RDS) of the system. Also, a code word is generated based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range. In one embodiment, the sequence of user bits is 19 bits and the code word is 20 bits.
权利要求

What is claimed is:1. A method of encoding digital information in a system comprising : receiving a sequence of user bits; calculating a running digital sum (RDS) of the system; and generating a code word based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range. 2. The method of claim 1 and further comprising: generating a first segment of the code word based on the sequence of user bits and the RDS of the system, the first segment further having a RDS; and generating a second segment of the code word based on the sequence of user bits and the RDS of the first segment. 3. The method of claim 2 wherein the sequence of user bits is 19 bits and the first segment and the second segment are both 10 bits. 4. The method of claim 1 wherein the selected range is &null;/&null;4. 5. The method of claim 1 wherein the sequence of user bits is 19 bits and the code word that is generated is 20 bits. 6. The method of claim 1 and further comprising: separating the sequence of user bits into a first fragment, a second fragment and a third fragment based on the RDS of the system; mapping the second fragment to a first segment of the code word based on the length of the first fragment and the RDS of the system, the first segment having an RDS; mapping the third fragment to a second segment of the code word based on the length of the second fragment and the RDS of the first segment; and combining the first segment and the second segment to form the code word. 7. The method of claim 6 wherein the sequence of user bits is 19 bits, the code word is 20 bits, the first fragment is less than 9 bits, the second fragment is less than 8 bits and the third fragment is less than 10 bits, wherein a number of bits in the first fragment, the second fragment and the third fragment is 19. 8. A system for generating a code word from a sequence of user bits, comprising: an input circuit adapted to receive the sequence of user bits; a calculation circuit adapted to calculate the running digital sum (RDS) of the system; an encoder adapted to generate a code word based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range. 9. The system of claim 8, wherein the encoder further comprises: a first encoder circuit adapted to generate a first segment of a code word based on the sequence of user bits and the running digital sum of the system, the first segment further having an RDS; and a second encoder circuit adapted to generate a second segment of the code word based on the sequence of user bits and the running digital sum of the first segment. 10. The system of claim 9 wherein the encoder further comprises: a third encoder circuit adapted to separate the sequence of user bits into first, second and third fragments based on a first state and transmit the second fragment to the first encoder circuit and transmit the third fragment to the second encoder circuit; a fourth encoder circuit adapted to separate the sequence of user bits into first, second and third fragments based on a second state and transmit the second fragment to the first encoder circuit and transmit the third fragment to the second encoder circuit; and a fifth encoder circuit adapted to separate the sequence of user bits into first, second and third fragments based on a third state and transmit the second fragment to the first encoder circuit and transmit the third fragment to the second encoder circuit. 11. The system of claim 10 wherein the first encoder is adapted to select one of the second fragments from the third, fourth and fifth encoder circuits based on the RDS of the system and map said second fragment to the first segment of the code word and the second encoder is adapted to select one of the third fragments based on the RDS of the system and map the third fragment to the second segment of the code word. 12. The system of claim 11 wherein the sequence of user bits is 19 bits, the code word is 20 bits, the first fragment is less than 9 bits, the second fragment is less than 8 bits and the third fragment is less than 10 bits, wherein a number of bits in the first fragment, the second fragment and the third fragment is 19. 13. The system of claim 8, wherein the encoder is further adapted to: separate the sequence of user bits into a first fragment, a second fragment and a third fragment based on the RDS of the system; map the second fragment to a first segment of the code word based on the length of the first fragment and the RDS of the system, the first segment having an RDS; map the third fragment to a second segment of the code word based on the length of the second fragment and the RDS of the first segment; and combine the first segment and the second segment to form the code word. 14. The system of claim 8 wherein the selected range is &null;/&null;4. 15. The system of claim 8 wherein the sequence of user bits is 19 bits and the code word that is generated is 20 bits. 16. The system of claim 8 and further comprising: a disc drive; a disc within the disc drive; and a write transducer adapted to receive the code word from the encoder and write the code word to the disc. 17. An encoder system, comprising: means for receiving a sequence of 19 bits; means for calculating a running digital sum of the system; and means for generating a code word of 20 bits based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range. 18. The encoder system of claim 17 and further comprising: means for generating a first 10-bit segment of the code word bsed on the sequence of user bits and the RDS of the system, the first segment further having an RDS; and, means for generating a second 10-bit segment of the code word based on the sequence of user bits and the RDS of the first segment. 19. The encoder system of claim 17 and further comprising: means for separating the sequence of user bits into a first fragment, a second fragment and a third fragment based on the RDS of the system; means for mapping the second fragment to a first segment of the code word based on the length of the first fragment and the RDS of the system, the first segment having an RDS; means for mapping the third fragment to a second segment of the code word based on the length of the second fragment and the RDS of the first segment; and means for combining the first segment and the second segment to form the code word. 20. A method of decoding a code word, comprising: receiving a code word; identifying a state value associated with the code word; and generating a sequence of user bits based on the code word and the state value. 21. The method of claim 20 and further comprising: separating the code word into a first segment and a second segment, generating a first portion of the sequence of user bits based on the first segment; and generating a second portion of the sequence of user bits based on the state value and the first segment. 22. The method of claim 21 and further comprising: generating a third portion of the sequence of user bits based on the length of the first portion and the length of the second portion. 23. The method of claim 21 wherein the sequence of user bits is 19 bits and the first segment and the second segment are both 10 bits. 24. A digital communication system, comprising: a communication channel; an encoder system comprising: an input circuit adapted to receive the sequence of user bits; a calculation circuit adapted to calculate the running digital sum (RDS) of the system; an encoder adapted to generate a code word-based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code-word to within a selected range; and an output circuit adapted to transmit the code word to the communication channel; and a decoder system comprising: an input circuit adapted to receive a code word from the communication channel; a state evaluator adapted to identify a state value associated with the code word; and a decoder adapted to generate a sequence of user bits based on the code word and the state value. 25. The system of claim 24, wherein the encoder further comprises: a first encoder circuit adapted to generate a first segment of a code word based on the sequence of user bits and the running digital sum of the system, the first segment further having an RDS; and a second encoder circuit adapted to generate a second segment of the code word based on the sequence of user bits and the running digital sum of the first segment. 26. The system of claim 25 wherein the encoder further comprises: a third encoder circuit adapted to separate the sequence of user bits into first, second and third fragments based on a first state and transmit the second fragment to the first encoder circuit and transmit the third fragment to the second encoder circuit; a fourth encoder circuit adapted to separate the sequence of user bits into first, second and third fragments based on a second state and transmit the second fragment to the first encoder circuit and transmit the third fragment to the second encoder circuit; and a fifth encoder circuit adapted to separate the sequence of user bits into first, second and third fragments based on a third state and transmit the second fragment to the first encoder circuit and transmit the third fragment to the second encoder circuit. 27. The system of claim 26 wherein the first encoder is adapted to select one of the second fragments from the third, fourth and fifth encoder circuits based on the RDS of the system and map said second fragment to the first segment of the code word and the second encoder is adapted to select one of the third fragments based on the RDS of the system and map the third fragment to the second segment of the code word. 28. The system of claim 27 wherein the sequence of user bits is 19 bits, the code word is 20 bits, the first fragment is less than 9 bits, the second fragment is less than 8 bits and the third fragment is less than 10 bits, wherein a number of bits in the first fragment, the second fragment and the third fragment is 19. 29. The system of claim 24, wherein the encoder is further adapted to: separate the sequence of user bits into a first fragment, a second fragment and a third fragment based on the RDS of the system; map the second fragment to a first segment of the code word based on the length of the first fragment and the RDS of the system, the first segment having an RDS; map the third fragment to a second segment of the code word based on the length of the second fragment and the RDS of the first segment; and combine the first segment and the second segment to form the code word. 30. The system of claim 24 wherein the selected range is &null;/&null;4. 31. The system of claim 24 wherein the sequence of user bits is 19 bits and the code word that is generated is 20 bits. 32. The system of claim 24 wherein the decoder is further adapted to: separate the code word into a first segment and a second segment; generate a first portion of the sequence of user bits based on the first segment; and generate a second portion of the sequence of user bits based on the state value and the first segment. 33. The system of claim 24 wherein the decoder is further adapted to: generate a third portion of the sequence of user bits based on the length of the first portion and the length of the second portion.

说明书全文

CROSS-REFERENCE TO RELATED APPLICATION

&null;0001&null; This application claims priority from U.S. Provisional Application 60/409,156 filed on Sep. 9, 2002 for inventor Kinhing P. Tsang and entitled DC FREE CODE DESIGN WITH STATE DEPENDENT MAPPING.

FIELD OF THE INVENTION

&null;0002&null; The present invention relates to communicating digital data through a communication channel. In particular, the present invention relates to encoding and decoding techniques for DC free codes.

BACKGROUND OF THE INVENTION

&null;0003&null; In the field of digital communications, digital information is typically prepared for transmission through a channel by encoding it. The encoded data is then used to modulate a transmission to the channel. A transmission received from the channel is then typically demodulated and decoded to recover the original information.

&null;0004&null; The encoding of the digital data serves to improve communication performance so that the transmitted signals are less corrupted by noise, fading, or other interference associated with the channel. The term &null;channel&null; can include media such as transmission lines, wireless communication and information storage devices such as magnetic disc drives. In the case of information storage devices, the signal is stored in the channel for a period of time before it is accessed or received. Encoding can reduce the probability of noise being introduced into a recovered digital signal when the encoding is adapted to the known characteristics of the data and its interaction with known noise characteristics of a communication channel.

&null;0005&null; In typical encoding arrangements, data words of m data bits are encoded into larger code words of n code bits, and the ratio m/n is known as the code rate of the encoding arrangement. Decreasing the code rate reduces the complexity of the encoder/decoder and can also improve error correction capability, however, a decreased code rate also increases energy consumption and slows communication.

&null;0006&null; Further, it is often desirable for encoded channel sequences to have a spectral null at zero frequency. Such sequences are said to be DC free and particularly found to enhance the performance in perpendicular magnetic recording. Given a sequence of binary digits, wherein a binary digit &null;1&null; is plus one (&null;1) and a binary &null;0&null; is minus one (&null;1), the sequence will be DC free if a running digital sum of the bipolar sequence is bounded. The running digital sum is the sum of all values in a bipolar sequence. When the variation of the running digital sum is kept to a small value, it is known to have a tight or small bound. A tighter bound improves the performance of the channel.

&null;0007&null; There is a need to provide improved DC free coding techniques that reduce the probability of noise being introduced to the system and have optimal code rates. Various embodiments of the present invention address these problems, and offer other advantages over the prior art.

SUMMARY OF THE INVENTION

&null;0008&null; A method of encoding digital information in a system is provided. The method includes receiving a sequence of user bits and calculating a running digital sum (RDS) of the system. In addition, a code word is generated based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range.

&null;0009&null; Another embodiment of the present invention relates to a system for generating a code word from a sequence of user bits. The system has an input circuit adapted to receive the sequence of user bits and a calculation circuit adapted to calculate the running digital sum (RDS) of the system. An encoder is also provide that is adapted to generate a code word based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range.

&null;0010&null; Another aspect of the present invention is a method of decoding a code word. The method includes receiving a code word, identifying a state value associated with the code word, and generating a sequence of user bits based on the code word and the state value.

&null;0011&null; Yet another aspect of the present invention is a digital communication system. The system includes a communication channel, an encoder system and a decoder system. The encoder system includes an input circuit adapted to receive the sequence of user bits, a calculation circuit adapted to calculate the running digital sum (RDS) of the system, an encoder adapted to generate a code word based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range and an output circuit adapted to transmit the code word to the communication channel. The decoder system includes an input circuit adapted to receive a code word from the communication channel, a state evaluator adapted to identify a state value associated with the code word, and a decoder adapted to generate a sequence of user bits based on the code word and the state value.

&null;0012&null; Other features and benefits that characterize embodiments of the present invention will be apparent upon reading the following detailed description and review of the associated drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

&null;0013&null; FIG. 1 is an isometric view of a disc drive.

&null;0014&null; FIG. 2 is a flow diagram of a method of encoding information according to the present invention.

&null;0015&null; FIG. 3 is a block diagram of an encoder.

&null;0016&null; FIG. 4 is a block diagram of an encoder input circuit.

&null;0017&null; FIG. 5 is a block diagram of a first encoder circuit.

&null;0018&null; FIG. 6 is a block diagram of a second encoder circuit.

&null;0019&null; FIG. 7 is a block diagram of a third encoder circuit.

&null;0020&null; FIG. 8 is a block diagram of an encoder for generating a first segment of a code word.

&null;0021&null; FIG. 9 is a block diagram of an encoder for generating a second segment of a code word.

&null;0022&null; FIG. 10 is a block diagram of an encoder output circuit.

&null;0023&null; FIG. 11 is a flow diagram of a method of decoding digital information.

&null;0024&null; FIG. 12 is a block diagram of a decoder.

&null;0025&null; FIG. 13 is a block diagram of a decoder input circuit.

&null;0026&null; FIG. 14 is a block diagram of a decoder for decoding a first segment of a code word.

&null;0027&null; FIG. 15 is a block diagram of a decoder for decoding a second segment of a code word.

&null;0028&null; FIG. 16 is a block diagram of a decoder output circuit.

DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS

&null;0029&null; FIG. 1 is a perspective view of a magnetic disc drive 100 in which the present invention is useful. Disc drive 100 communicates with a host system 101 and includes a housing with a base 102 and a top cover (not shown). Disc drive 100 further includes a disc pack 106, which is mounted on a spindle motor (not shown), by a disc clamp 108. Disc pack 106 includes a plurality of individual discs, which are mounted for co-rotation about central axis 109. Each disc surface has an associated head, which is mounted to disc drive 100 for communication with the disc surface. In the example shown in FIG. 1, heads 110 are supported by suspensions 112 which are in turn attached to track accessing arms 114 of an actuator 116. The actuator shown in FIG. 1 is of the type known as a rotary moving coil actuator and includes a voice coil motor (VCM), shown generally at 118. Voice coil motor 118 rotates actuator 116 with its attached heads 110 about a pivot shaft 120 to position heads 110 over a desired data track along an arcuate patch 122 between a disc inner diameter 124 and a disc outer diameter 126. Voice coil motor 118 operates under control of internal circuitry 128.

&null;0030&null; The heads 110 and rotating disc pack 106 form a communication channel that can receive digital data and reproduce the digital data at a later time. Write circuitry within internal circuitry 128 receives data, typically from a digital computer, and then encodes data in code words adapted to the communication channel. The encoded data is then used to modulate a write current provided to a write transducer in the head 110. The write transducer and the head 110 causes successive code words to be encoded on a magnetic layer on disc pack 106. At a later time, a read transducer in the head recovers the successive code words from the magnetic layer as a serial modulated read signal. Read circuitry within internal circuitry 128 demodulates the read signal into successive parallel code words. The demodulated code words are then decoded by decoder circuitry within circuitry 128, which recovers the digital data for use, by host system 101, at a later time.

&null;0031&null; In order to encode data that is written onto a magnetic layer on disc pack 106, a method according to the present invention is used. According to one embodiment of the present invention, a 19-bit word of user data is encoded into a 20-bit code word. In order to generate the 20-bit code word, the 19-bit data word is broken down into smaller fragments. The fragments are rearranged and mapped into two 10-bit segments according to a lookup table and a mapping table. In one embodiment, a goal of the method is to maintain the running digital sum of the system within a selected range of &null;/31 4, calculated after each 20-bit code word. The selected range represents a bound on the running digital sum of the system. Maintaining the running digital sum within the selected range improves the performance of disc drive 100. Upon decoding of the code word, the code word is evaluated in order to determine a state value. Using the state value, the code word can be decoded using the state value to render the sequence of user bits.

&null;0032&null; FIG. 2 illustrates a flow diagram of a method 200 of encoding information according to the present invention. According to method 200, a 19-bit data word is received at step 202. At step 204, the method 200 accesses a current state value that has been calculated after each code word that is generated. The current state is the running digital sum of the system. The initial state is calculated as zero. Depending on the current state, the 19-bit data word is broken up into three fragments according to a lookup table at step 206. The assembly and format of the lookup table is discussed below. Next, at step 208, a &null;g&null; group and an &null;h&null; group is selected based on the first fragment as determined in step 206. These groups are chosen in order to maintain the running digital sum within a range of &null;/&null;4. Once the respective groups are obtained, the second fragment is mapped into a group 10-bit segment at step 210. The mapping is performed according to a mapping table as discussed below. In step 212, the third fragment is mapped into an &null;h&null; group 10-bit segment according to a mapping table. The &null;g&null; group and &null;h&null; group segments are then combined, at step 214, to form a 20-bit code word that maintains the running digital sum of the system within &null;/&null;4. The code word is output, for example to a disc, at step 216.

&null;0033&null; In order to generate the lookup table, it is important to investigate the running digital sums for 20-bit code words. By separating 20-bit code words into 10-bit segments, the design of a rate 19/20 DC free code is simplified. For a given a 10 bit pattern, the pattern may have a running digital sum of &null;10, &null;8, &null;6, &null;4, &null;2, 31 0, 2, 4, 6, 8 or 10. Table 1 shows 10 bit patterns grouped according to their respective digital sums. The groups having running digital sums of 0, 2, 4, 6 and 8 are shown. Since the running digital sums of &null;2, &null;4, &null;6 and &null;8 are merely the inverse of the corresponding patterns with the positive running digital sum, only the groups with a positive running digital sum are shown. The patterns having running digital sums of 10 and &null;10 are not used. The table shows the 10-bit patterns in hexadecimal.

1

TABLE 1

A Grouping Table that groups 10-bit segments according to their

respective running digital sums.

Group gb:

There are 252 10-bit patterns with RDS &null; 0

01F

02F

037

03B

03D

03E

04F

057

05B

05D

05E

067

06B

06D

06E

073

075

076

079

07A

07C

08F

097

09B

09D

09E

0A7

0AB

0AD

0AE

0B3

0B5

0B6

0B9

0BA

0BC

0C7

0CB

0CD

0CE

0D3

0D5

0D6

0D9

0DA

0DC

0E3

0E5

0E6

0E9

0EA

0EC

0F1

0F2

0F4

0F8

10F

117

11B

11D

11E

127

12B

12D

12E

133

135

136

139

13A

13C

147

14B

14D

14E

153

155

156

159

15A

15C

163

165

166

169

16A

16C

171

172

174

178

187

18B

18D

18E

193

195

196

199

19A

19C

1A3

1A5

1A6

1A9

1AA

1AC

1B1

1B2

1B4

1B8

1C3

1C5

1C6

1C9

1CA

1CC

1D1

1D2

1D4

1D8

1E1

1E2

1E4

1E8

1F0

20F

217

21B

21D

21E

227

22B

22D

22E

233

235

236

239

23A

23C

247

24B

24D

24E

253

255

256

259

25A

25C

263

265

266

269

26A

26C

271

272

274

278

287

28B

28D

28E

293

295

296

299

29A

29C

2A3

2A5

2A6

2A9

2AA

2AC

2B1

2B2

2B4

2B8

2C3

2C5

2C6

2C9

2CA

2CC

2D1

2D2

2D4

2D8

2E1

2E2

2E4

2E8

2F0

307

30B

30D

30E

313

315

316

319

31A

31C

323

325

326

329

32A

32C

331

332

334

338

343

345

346

349

34A

34C

351

352

354

358

361

362

364

368

370

383

385

386

389

38A

38C

391

392

394

398

3A1

3A2

3A4

3A8

3B0

3C1

3C2

3C4

3C8

3D0

3E0

Group gc:

There are 210 10-bit patterns with RDS &null; &null;2

03F

05F

06F

077

07B

07D

07E

09F

0AF

0B7

0BB

0BD

0BE

0CF

0D7

0DB

0DD

0DE

0E7

0EB

0ED

0EE

0F3

0F5

0F6

0F9

0FA

0FC

11F

12F

137

13B

13D

13E

14F

157

15B

15D

15E

167

16B

16D

16E

173

175

176

179

17A

17C

18F

197

19B

19D

19E

1A7

1AB

1AD

1AE

1B3

1B5

1B6

1B9

1BA

1BC

1C7

1CB

1CD

1CE

1D3

1D5

1D6

1D9

1DA

1DC

1E3

1E5

1E6

1E9

1EA

1EC

1F1

1F2

1F4

1F8

21F

22F

237

23B

23D

23E

24F

257

25B

25D

25E

267

26B

26D

26E

273

275

276

279

27A

27C

28F

297

29B

29D

29E

2A7

2AB

2AD

2AE

2B3

2B5

2B6

2B9

2BA

2BC

2C7

2CB

2CD

2CE

2D3

2D5

2D6

2D9

2DA

2DC

2E3

2E5

2E6

2E9

2EA

2EC

2F1

2F2

2F4

2F8

30F

317

31B

31D

31E

327

32B

32D

32E

333

335

336

339

33A

33C

347

34B

34D

34E

353

355

356

359

35A

35C

363

365

366

369

36A

36C

371

372

374

378

387

38B

38D

38E

393

395

396

399

39A

39C

3A3

3A5

3A6

3A9

3AA

3AC

3B1

3B2

3B4

3B8

3C3

3C5

3C6

3C9

3CA

3CC

3D1

3D2

3D4

3D8

3E1

3E2

3E4

3E8

3F0

Group gd:

There are 120 10-bit patterns with RDS &null; &null;4

07F

0BF

0DF

0EF

0F7

0FB

0FD

0FE

13F

15F

16F

177

17B

17D

17E

19F

1AF

1B7

1BB

1BD

1BE

1CF

1D7

1DB

1DD

1DE

1E7

1EB

1ED

1EE

1F3

1F5

1F6

1F9

1FA

1FC

23F

25F

26F

277

27B

27D

27E

29F

2AF

2B7

2BB

2BD

2BE

2CF

2D7

2DB

2DD

2DE

2E7

2EB

2ED

2EE

2F3

2F5

2F6

2F9

2FA

2FC

31F

32F

337

33B

33D

33E

34F

357

35B

35D

35E

367

36B

36D

36E

373

375

376

379

37A

37C

38F

397

39B

39D

39E

3A7

3AB

3AD

3AE

3B3

3B5

3B6

3B9

3BA

3BC

3C7

3CB

3CD

3CE

3D3

3D5

3D6

3D9

3DA

3DC

3E3

3E5

3E6

3E9

3EA

3EC

3F1

3F2

3F4

3F8

Group ge:

There are 45 10-bit patterns with RDS &null; &null;6

0FF

17F

1BF

1DF

1EF

1F7

1FB

1FD

1FE

27F

2BF

2DF

2EF

2F7

2FB

2FD

2FE

33F

35F

36F

377

37B

37D

37E

39F

3AF

3B7

3BB

3BD

3BE

3CF

3D7

3DB

3DD

3DE

3E7

3EB

3ED

3EE

3F3

3F5

3F6

3F9

3FA

3FC

Group gf:

There are 10 10-bit patterns with RDS &null; &null;8

1FF

2FF

37F

3BF

3DF

3EF

3F7

3FB

3FD

3FE

&null;0034&null; Each of the groups in Table 1 is further divided into subgroups of various sizes (see Table 2). The various subgroups map bits of user fragments determined in step 206, depending on the size of the user data fragment, into a 10-bit code word. For example, a user data fragment of 7 bits is mapped into a 7-bit subgroup, for example subgroup gb7. This group will be utilized when the second fragment at step 210 has a length of 7 bits. Group gb is divided into subgroups gb7, gb6, gb5 gb4 gb3 and gb2 with sizes of 128&null;27, 64&null;26, 32&null;25, 16&null;24, 8&null;23 and 4&null;22 respectively. Group gc is divided into subgroups gc7, gc6, gc4 and gc1 with sizes of 128&null;27, 64&null;26, 16&null;24 and 2&null;21 respectively. Group gd is divided into subgroups gd6,gd5, gd4 and gd3 with sizes of 64&null;26, 32&null;25, 16&null;24 and 8&null;23 respectively. Group ge is divided into subgroups ge5 and ge3 with sizes of 32&null;25 and 8&null;23 respectively. Group gf is divided into subgroups gf3 and gf1 with sizes of 8&null;23 and 2&null;21 respectively. The size of each subgroup is of a size 2m, which allows mapping of user data fragments of size m bits. Table 2 shows each of the various subgroups. In the table, the mapping is shown in the form &null;xxx:yyy&null;, wherein &null;xxx&null; is a user data fragment that is mapped into a 10-bit code word &null;yyy&null;. The values in the table are expressed in hexadecimal.

2

TABLE 2

Mapping Table of user fragments into &null;g&null; group words.

Subgroup gb7: (mapping of 7-bit data word into 10-bit code word)

000:21B

001:233

002:235

003:236

004:22B

005:239

006:23A

007:23C

008:24B

009:253

00A:255

00B:256

00C:28B

00D:259

00E:25A

00F:25C

010:21D

011:263

012:265

013:266

014:22D

015:269

016:26A

017:26C

018:24D

019:293

01A:295

01B:296

01C:28D

01D:299

01E:29A

01F:29C

020:21E

021:2A3

022:2A5

023:2A6

024:22E

025:2A9

026:2AA

027:2AC

028:24E

029:2C3

02A:2C5

02B:2C6

02C:28E

02D:2C9

02E:2CA

02F:2CC

030:271

031:2B1

032:2D1

033:2E1

034:272

035:2B2

036:2D2

037:2E2

038:274

039:2B4

03A:2D4

03B:2E4

03C:278

03D:2B8

03E:2D8

03F:2E8

040:11B

041:133

042:135

043:136

044:12B

045:139

046:13A

047:13C

050:11D

051:163

052:165

053:166

054:12D

055:169

056:16A

057:16C

058:14D

059:193

05A:195

05B:196

05C:18D

05D:199

05E:19A

05F:19C

060:11E

061:1A3

062:1A5

063:1A6

064:12E

065:1A9

066:1AA

067:1AC

068:14E

069:1C3

06A:1C5

06B:1C6

06C:18E

06D:1C9

06E:1CA

06F:1CC

070:171

071:1B1

072:1D1

073:1E1

074:172

075:1B2

076:1D2

077:1E2

078:174

079:1B4

07A:1D4

07B:1E4

07C:178

07D:1B8

07E:1D8

07F:1E8

Subgroup gb6: (mapping of 6-bit data word into 10-bit code word)

000:331

001:313

002:315

003:316

004:332

005:319

006:31A

007:31C

008:334

009:323

00A:325

00B:326

00C:338

00D:329

00E:32A

00F:32C

010:3C1

011:343

012:345

013:346

014:3C2

015:349

016:34A

017:34C

018:3C4

019:383

01A:385

01B:386

01C:3C8

01D:389

01E:38A

01F:38C

020:0CE

021:0EC

022:0EA

023:0E9

024:0CD

025:0E6

026:0E5

027:0E3

028:0CB

029:0DC

02A:0DA

02B:0D9

02C:0C7

02D:0D6

02E:0D5

02F:0D3

030:03E

031:0BC

032:0BA

033:0B9

034:03D

035:0B6

036:0B5

037:0B3

038:03B

039:07C

03A:07A

03B:079

03C:037

03D:076

03E:075

03F:073

Subgroup gb5: (mapping of 5-bit data word into 10-bit code word)

000:351

001:352

002:354

003:358

004:361

005:362

006:364

007:368

008:391

009:392

00A:394

00B:398

00C:3A1

00D:3A2

00E:3A4

00F:3A8

010:0AE

011:0AD

012:0AB

013:0A7

014:09E

015:09D

016:09B

017:097

018:06E

019:06D

01A:06B

01B:067

01C:05E

01D:05D

01E:05B

01F:057

Subgroup gb4: (mapping of 4-bit data word into 10-bit code word)

000:307

001:30B

002:30D

003:30E

004:370

005:3B0

006:3D0

007:3E0

008:0F8

009:0F4

00A:0F2

00B:0F1

00C:08F

00D:04F

00E:02F

00F:01F

Subgroup gb3: (mapping of 3-bit data word into 10-bit code word)

000:117

001:127

002:147

003:187

004:217

005:227

006:247

007:287

Subgroup gb2: (mapping of 2-bit data word into 10-bit code word)

000:10F

001:20F

002:1F0

003:2F0

*

*

*

*

*

Subgroup gc7: (mapping of 7-bit data word into 10-bit code word)

000:257

001:25B

002:25D

003:25E

004:267

005:26B

006:26D

007:26E

008:297

009:29B

00A:29D

00B:29E

00C:2A7

00D:2AB

00E:2AD

00F:2AE

010:237

011:23B

012:23D

013:23E

014:2C7

015:2CB

016:2CD

017:2CE

018:273

019:2B3

01A:2D3

01B:2E3

01C:27C

01D:2BC

01E:2DC

01F:2EC

020:275

021:2B5

022:2D5

023:2E5

024:276

025:2B6

026:2D6

027:2E6

028:279

029:2B9

02A:2D9

02B:2E9

02C:27A

02D:2BA

02E:2DA

02F:2EA

030:21F

031:22F

032:24F

033:28F

034:2F1

035:2F2

036:2F4

037:2F8

038:077

039:0B7

03A:0D7

03B:0E7

03C:07B

03D:0BB

03E:0DB

03F:0EB

040:157

041:15B

042:15D

043:15E

044:167

045:16B

046:16D

047:16E

048:197

049:19B

04A:19D

04B:19E

04C:1A7

04D:1AB

04E:1AD

04F:1AE

050:137

051:13B

052:13D

053:13E

054:1C7

055:1CB

056:1CD

057:1CE

058:173

059:1B3

05A:1D3

05B:1E3

05C:17C

05D:1BC

05E:1DC

05F:1EC

060:175

061:1B5

062:1D5

063:1E5

064:176

065:1B6

066:1D6

067:1E6

068:179

069:1B9

06A:1D9

06B:1E9

06C:17A

06D:1BA

06E:1DA

06F:1EA

070:11F

071:12F

072:14F

073:18F

074:1F1

075:1F2

076:1F4

077:1F8

078:07D

079:0BD

07A:0DD

07B:0ED

07C:07E

07D:0BE

07E:0DE

07F:0EE

Subgroup gc6: (mapping of 6-bit data word into 10-bit code word)

000:31B

001:333

002:335

003:336

004:32B

005:339

006:33A

007:33C

008:34B

009:353

00A:355

00B:356

00C:38B

00D:359

00E:35A

00F:35C

010:31D

011:363

012:365

013:366

014:32D

015:369

016:36A

017:36C

018:34D

019:393

01A:395

01B:396

01C:38D

01D:399

01E:39A

01F:39C

020:31E

021:3A3

022:3A5

023:3A6

024:32E

025:3A9

026:3AA

027:3AC

028:34E

029:3C3

02A:3C5

02B:3C6

02C:38E

02D:3C9

02E:3CA

02F:3CC

030:371

031:3B1

032:3D1

033:3E1

034:372

035:3B2

036:3D2

037:3E2

038:374

039:3B4

03A:3D4

032:3E4

03C:378

03D:3B8

03E:3D8

03F:3E8

Subgroup gc4: (mapping of 4-bit data word into 10-bit code word)

000:317

001:03F

002:05F

003:06F

004:327

005:09F

006:0AF

007:0CF

008:347

009:0F3

00A:0F5

002:0F6

00C:387

00D:0F9

00E:0FA

00F:0FC

Subgroup gc1: (mapping of 1-bit data word into 10-bit code word)

000:30F

001:3F0

*

*

*

*

*

Subgroup gd6: (mapping of 6-bit data word into 10-bit code word)

000:357

001:35B

002:35D

003:35E

004:367

005:36B

006:36D

007:36E

008:397

009:39B

00A:39D

00B:39E

00C:3A7

00D:3AB

00E:3AD

00F:3AE

010:337

011:33B

012:33D

013:33E

014:3C7

015:3CB

016:3CD

017:3CE

018:373

019:3B3

01A:3D3

01B:3E3

01C:37C

01D:3BC

01E:3DC

01F:3EC

020:375

021:3B5

022:3D5

023:3E5

024:376

025:3B6

026:3D6

027:3E6

028:379

029:3B9

02A:3D9

02B:3E9

02C:37A

02D:3BA

02E:3DA

02F:3EA

030:31F

031:32F

032:34F

033:38F

034:3F1

035:3F2

036:3F4

037:3F8

038:07F

039:0BF

03A:0DF

032:0EF

03C:0F7

03D:0FB

03E:0FD

03F:0FE

Subgroup gd5: (mapping of 5-bit data word into 10-bit code word)

000:277

001:2B7

002:2D7

003:2E7

004:27B

005:2BB

006:2DB

007:2EB

008:27D

009:2BD

00A:2DD

00B:2ED

00C:27E

00D:2BE

00E:2DE

00F:2EE

010:177

011:1B7

012:1D7

013:1E7

014:17B

015:1BB

016:1DB

017:1EB

018:17D

019:1BD

01A:1DD

01B:1ED

01C:17E

01D:1BE

01E:1DE

01F:1EE

Subgroup gd4: (mapping of 4-bit data word into 10-bit code word)

000:15F

001:16F

002:19F

003:1AF

004:25F

005:26F

006:29F

007:2AF

008:1F5

009:1F6

00A:1F9

00B:1FA

00C:2F5

00D:2F6

00E:2F9

00F:2FA

Subgroup gd3: (mapping of 3-bit data word into 10-bit code word)

000:13F

001:1CF

002:23F

003:2CF

004:1F3

005:1FC

006:2F3

007:2FC

*

*

*

*

*

Subgroup ge5: (mapping of 5-bit data word into 10-bit code word)

000:377

001:37B

002:37D

003:37E

004:3B7

005:3BB

006:3BD

007:3BE

008:3D7

009:3DB

00A:3DD

00B:3DE

00C:3E7

00D:3EB

00E:3ED

00F:3EE

010:17F

011:1BF

012:1DF

013:1EF

014:27F

015:2BF

016:2DF

017:2EF

018:1F7

019:1FB

01A:1FD

01B:1FE

01C:2F7

01D:2FB

01E:2FD

01F:2FE

Subgroup ge3: (mapping of 3-bit data word into 10-bit code word)

000:35F

001:36F

002:39F

003:3AF

004:3F5

005:3F6

006:3F9

007:3FA

*

*

*

*

*

Subgroup gf3: (mapping of 3-bit data word into 10-bit code word)

000:37F

001:3BF

002:3DF

003:3EF

004:3F7

005:3FB

006:3FD

007:3FE

&null;0035&null; The third fragment is then mapped into an &null;h&null; group word to maintain the running digital sum within &null;/&null;4. This mapping takes into account the current running digital sum of the system and the running digital sum of the &null;g&null; group segment. The selection of the &null;h&null; group code can be separated into three cases, depending on the current running digital sum of the system. The first case is if the current RDS is &null;4, the second case is if the RDS is &null;2 and the third case is if the RDS is 0. The cases of RDS being &null;4 or &null;2 are just the inverse of &null;4 and &null;2. Although there are different ways to group the &null;h&null; groups, table 3 shows groupings according to various running digital sums. The &null;h&null; groups can be chosen that correspond to collections from the &null;g&null; subgroups. In some instances, the inverse, or &null;gxx, of the subgroup is chosen. Also, there are situations where the &null;h&null; group word is larger (has more bits) than the corresponding mapping &null;g&null; group (i.e. a fragment from the group ha8 is mapped to the group gc6). Here, the least significant bits of the third fragment are chosen to map the &null;h&null; group according to the corresponding &null;g&null; group.

3

TABLE 3

Mapping Table of user fragments into &null;h&null; group words.

Subgroup ha8 includes 256 patterns and they are from gc7, gc6 and gd6.

Since 28 &null; 256, these code words are exactly enough for the

encoding of 8-bit data words. Mappings of 8-bit data word to these

10-bit code words of subgroup ha8 are:

Data

000 to 07F:

gc7(128 patterns, RDS &null; &null;2)

Data

080 to 0BF:

gc6(64 patterns, RDS &null; &null;2)

Data

0C0 to 0FF:

gd6(64 patterns, RDS &null; &null;4)

Subgroup ha6 includes 64 patterns and they are from gd5 and ge5.

Mappings of 6-bit data word to these 10-bit code words are:

Data

000 to 01F:

gd5 (32 patterns, RDS &null; &null;4)

Data

020 to 03F:

ge5 (32 patterns, RDS &null; &null;6)

Subgroup ha5 includes 32 patterns and they are from gc4 and gd4.

Mappings of 5-bit data word to these 10-bit code words are:

Data

000 to 00F:

gc4 (16 patterns, RDS &null; &null;2)

Data

010 to 01F:

gd4 (16 patterns, RDS &null; &null;4)

Subgroup ha4 includes 16 patterns and they are from gd3 and ge3.

Mappings of 4-bit data word to these 10-bit code words are:

Data

000 to 007

gd3(8 patterns, RDS &null; &null;4)

Data

008 to 00F:

ge3(8 patterns, RDS &null; &null;6)

Note that all &null;ha&null; patterns have RDS of &null;2, &null;4 or &null;6.

*

*

*

*

*

Subgroup hb9 includes 512 patterns and they are from ha8, gb7, gb6, gb5,

gb4, gb3 and gf3. Mappings of 9-bit data word to these 10-bit

code words are:

Data

000 to 0FF:

ha8(256 patterns, RDS &null; &null;2, &null;4)

Data

100 to 17F:

gb7(128 patterns, RDS &null; 0)

Data

180 to 1BF:

gb6(64 patterns, RDS &null; 0)

Data

1C0 to 1DF:

gb5(32 patterns, RDS &null; 0)

Data

1E0 to 1EF:

gb4(16 patterns, RDS &null; 0)

Data

1F0 to 1F7:

gb3(8 patterns, RDS &null; 0)

Data

1F8 to 1FF:

gf3(8 patterns, RDS &null; &null;8)

Subgroup hb6 includes 64 patterns and they are the same as ha6.

Mappings of 6-bit data word to these 10-bit code words are:

Data

000 to 03F:

ha6(64 patterns, RDS &null; &null;4, &null;6)

Subgroup hb5 includes 32 patterns and they are the same as ha5.

Mappings of 5-bit data word to these 10-bit code words are:

Data

000 to 01F:

ha5(32 patterns, RDS &null; &null;2, &null;4)

Subgroup hb4 includes 16 patterns and they are the same as ha4.

Mappings of 4-bit data word to these 10-bit code words are:

Data

000 to 00F:

ha4(16 patterns, RDS &null; &null;4, &null;6)

All &null;hb&null; patterns have RDS of 0, &null;2, &null;4, &null;6 or &null;8.

*

*

*

*

*

Subgroup hc9 includes 512 patterns and they are from ha8, gb7, gb6, gb5,

gb4, gb3 gb2, gc1 and &null;gc1. Mappings of 9-bit data word to these 10-bit

code words are:

Data

000 to 0FF:

ha8(256 patterns, RDS &null; &null;2, &null;4)

Data

100 to 17F:

gb7(128 patterns, RDS &null; 0)

Data

180 to 1BF:

gb6(64 patterns, RDS &null; 0)

Data

1C0 to 1DF:

gb5(32 patterns, RDS &null; 0)

Data

1E0 to 1EF:

gb4(16 patterns, RDS &null; 0)

Data

1F0 to 1F7:

gb3(8 patterns, RDS &null; 0)

Data

1F8 to 1FB:

gb2(4 patterns, RDS &null; 0)

Data

1FC to 1FD:

gc1(2 patterns, RDS &null; &null;2)

Data

1FE to 1FF:

&null;gc1(2 patterns, RDS &null; &null;2)

Subgroup hc8 includes 256 patterns and they are from &null;gc7, &null;gc6

and ha6. Mappings of 8-bit data word to these 10-bit code words are:

Data

000 to 07F:

&null;gc7(128 patterns, RDS &null; &null;2)

Data

080 to 0BF:

&null;gc6(64 patterns, RDS &null; &null;2)

Data

0C0 to 0FF:

ha6(64 patterns, RDS &null; &null;4, &null;6)

Subgroup hc6 includes 64 patterns and they are from ha5, &null;gc4 and ha4.

Mappings of 6-bit data word to these 10-bit code words are:

Data

000 to 01F:

ha5(32 patterns, RDS &null; &null;2, &null;4)

Data

020 to 02F:

&null;gc4(16 patterns, RDS &null; &null;2)

Data

030 to 03F:

ha4(16 patterns, RDS &null; &null;4, &null;6)

All &null;hc&null; patterns have RDS of &null;2, 0, &null;2, &null;4, or &null;6.

*

*

*

*

*

Subgroup hd9 includes 512 patterns and they are the same as hc9.

Mappings of 9-bit data word to these 10-bit code words are:

Data

000 to 1FF:

hc9(512 patterns, RDS &null; &null;2, 0, &null;2, &null;4)

Subgroup hd8 includes 256 patterns and they are from &null;gc7, &null;gc6,

gd5 and &null;gd5. Mappings of 8-bit data word to these 10-bit code words are:

Data

000 to 07F:

&null;gc7(128 patterns, RDS &null; &null;2)

Data

080 to 0BF:

&null;gc6(64 patterns, RDS &null; &null;2)

Data

0C0 to 0DF:

gd5(32 patterns, RDS &null; &null;4)

Data

0E0 to 0FF:

&null;gd5(32 patterns, RDS &null; &null;4)

Subgroup hd7 includes 128 patterns and they are from &null;gd6, ha5, &null;gc4,

gd3, and &null;gd3. Mappings of 8-bit data word to these 10-bit code

words are:

Data

000 to 03F:

&null;gd6 (64 patterns, RDS &null; &null;4)

Data

040 to 05F:

ha5(32 patterns, RDS &null; &null;2, &null;4)

Data

060 to 06F:

&null;gc4 (16 patterns, RDS &null; &null;2)

Data

070 to 077:

gd3(8 patterns, RDS &null; &null;4)

Data

078 to 07F:

&null;gd3(8 patterns, RDS &null; &null;4)

All &null;hd&null; patterns have RDS of &null;4, &null;2, 0, &null;2 or &null;4.

*

*

*

*

*

Subgroup he9 includes 512 patterns and they are the equivalent to the in-

verse of hc9. Mappings of 9-bit data word to these 10-bit code words are:

Data

000 to 1FF:

&null;hc9(512 patterns, RDS &null; &null;4, &null;2, 0, &null;2)

Subgroup he8 includes 256 patterns and they are the equivalent to the in-

verse of hc8. Mappings of 8-bit data word to these 10-bit code words are:

Data

000 to 0FF:

&null;hc8(256 patterns, RDS &null; &null;6, &null;4, &null;2)

All &null;he&null; patterns have RDS of &null;6, &null;4, &null;2, 0, or &null;2.

&null;0036&null; The lookup tables can be assembled based on the current state and the &null;g&null; group and &null;h&null; group words. Tables 4 to 6 indicate how the 19-bit data words can be mapped into 20-bit code words. The 19-bit data word is broken into three fragments. The first fragment is a bit pattern of the most significant bits of the data word. The second and third fragments are mapped into &null;g&null; and &null;h&null; segments, respectively. The 20-bit code word is composed of two 10-bit code segments. The first code segment is selected from the &null;g&null; group and the second code segment is selected from the &null;h&null; group. Depending on the current state of the encoder, code words are chosen from the corresponding table. Tables for states &null;4, &null;2 and 0 are shown while state &null;4 uses the inverse code words for state &null;4 and state, &null;2 uses the inverse code words for state &null;2. In the lookup tables, &null;Pn.&null; stands for the particular pattern number of the mapping performed. There are 39 patterns for state &null;4, 19 patterns for state &null;2 and 16 patterns for state 0. The values &null;G type&null; and &null;H type&null; correspond to which &null;g&null; and &null;h&null; subgroup is in the particular pattern. These values can further be used when decoding the code word.

4

TABLE 4

Lookup table for data word when current state is &null;4.

1

2

3

&null;0037&null;

5

TABLE 5

Lookup table for data word when current state is &null;2.

4

5

&null;0038&null;

6

TABLE 6

Lookup table for data word when current state is 0.

6

&null;0039&null; As an example, assume the 19-bit user data received in step 202 is 0&null;2A3EC&null;010 1010 0011 1110 1100 and the current state received in step 204 is &null;4. Assuming the leading bit is d18, d18&null;0, d17&null;1, d1&null;0, d15&null;1, d14&null;0, d13&null;1, d12&null;0, d11&null;0, d10&null;0, d9&null;1, d8&null;1, d7&null;1, d6&null;1, d5&null;1, d4&null;0, d3&null;1, d2&null;1, d1'0, d0&null;0. According to Table 4, which is for state &null;4, when d(18:15)&null;0101, which is the first fragment, d(14:9) (the second fragment) is mapped according to subgroup &null;gb6&null; to obtain the first 10-bit segment and d(8:0) (the third fragment) is mapped according to subgroup &null;hb9&null; to obtain the second 10-bit segment of the 20-bit code word. As ascertained from the data word, the second fragment d(14:9) is 010001&null;0&null;011. In step 210, according to the mapping table for subgroup &null;gb6&null;, the 10-bit segment should be 0&null;343&null;1101000011. For the second 10-bit segment of the code word, as obtained in step 212, the third fragment d(8:0)&null;111101100&null;0&null;1EC is mapped according to the mapping table for subgroup &null;hb9&null;. Data between 0&null;1E0&null;111100000 and 0&null;1EF&null;111101111 should use patterns from &null;gb4&null;. Here, the four least significant bits d(3:0)&null;1100&null;0&null;00C are mapped according to the mapping table for subgroup &null;gb4&null;. As a result, 0&null;00C maps into 0&null;08F&null;0010001111. Now, combining the first and second 10-bit segments in step 214 is performed to obtain the 20-bit code word of 1101000011 0010001111&null;0&null;D0C8F. The running digital sum of this code word is 0, thus the current state will remain &null;4(&null;4&null;0&null;&null;4).

&null;0040&null; In one embodiment, the unrestrained sequence of 101010 . . . is avoided. Code words having this sequence are eliminated. As a result, code words 0&null;AAAAA and 0&null;55555 are replaced by other code words, for example 0&null;83EAA and 0&null;43D55, respectively. These two examples are not used for other mappings and have the same RDS as the replaced patterns.

&null;0041&null; The details of the circuits and operations described below are examples and can be performed in hardware, software, firmware and/or combinations thereof. The functions of the circuits can be described with respect to various logic operations. In the case of circuits, these may be formed on one chip or various chips, as desired. Table 7 provides definitions for the symbols and logic operations used.

7

TABLE 7

Symbol definition:

&null;&null;&null;

Bitwise OR

&null;&&null;

Bitwise AND

&null;{circumflex over (&null;)}&null;

Bitwise XOR

&null;&null;x&null;

Inverse of bit x

&null;&null;C(n:0)&null;

Inverse of all bits of word C

&null;0042&null; FIG. 3 illustrates a block diagram of an encoder 250 for encoding a user data word of 19 bits to a 20-bit code word. Encoder 250 communicates to a communications channel 252, which can comprise an arrangement of magnetic storage discs and heads as shown in FIG. 1. Channel 252 can also be other types of communication channels such as an optical, wireless or transmission line channel Encoder 250 receives as input an initialization signal, a user data word I18:0 and a word clock. Encoder 250 outputs a code word W19:0 to communication channel 252. An encoder input circuit 254 receives input to the encoder 250 as well as the next state of the system. The encoder input circuit 254 outputs a data word D18:0 and a pattern select value tt11:0 to encoder circuits 256, 258 and 260, identified as enc_r4, enc_r2 and enc_r0. Encoder circuit 254 also provides a state value to a GX encoder 262, an HX encoder 264 and an encoder output circuit 266. The GX encoder 262 and HX encoder 264 receive values from encoder circuits 256, 258 and 260 in order to generate the &null;g&null; group words and the &null;h&null; group words. The GX encoder 262 and HX encoder 264 provide the &null;g&null; group words and &null;h&null; group words to the encoder output circuit 266. Ultimately, output encoder circuit 266 provides a code word to communication channel 252.

&null;0043&null; FIG. 4 illustrates a block diagram of encoder input circuit 254. Encoder input 254 includes a state register 270, a 19-bit data word block 272 and a pattern select circuit 274. Before the first data word is clocked into the input block, the initialization signal (Init) is used to initialize the state to zero. State is a four-bit sign value representing the current state. The next state value is received from the encoder output circuit 266 and is clocked in as the current state upon the rising edge of the word clock. Additionally, at 19-bit data word block 272, the data word I18:0 is clocked in upon a rising edge of the word clock. The 19-bit data word is sent to pattern select circuit 274. Pattern select circuit 274 prepares a value tt11:0 indicative of the four most significant bits of the data word. Encoder input circuit 254 operates in a manner shown in Table 8.

8

TABLE 8

Input: I18:0 (19 bits), Init, Word Clock, Next State3:0

Output: D18:0 , tt11:0, State3:0

Pattern Select

tt0 &null;&null;d18& d17&&null;d16&&null;d15

tt1 &null;&null;d18& d17&&null;d16& d15

tt2 &null;&null;d18& d17& d16&&null;d15

tt3 &null;&null;d18& d17& d16& d15

tt4 &null; d18&&null;d17&&null;d16&&null;d15

tt5 &null; d18&&null;d17&&null;d16& d15

tt6 &null; d18&&null;d17& d16&&null;d15

tt7 &null; d18&&null;d17& d16& d15

tt8 &null; d18& d17&&null;d16&&null;d15

tt9 &null; d18& d17&&null;d16& d15

tt10 &null; d18& d17& d16&&null;d15

tt11 &null; d18& d17& d16& d15

&null;0044&null; FIG. 5 illustrates a block diagram of encoder circuit 256, identified as enc_r4. Encoder circuit 256 includes a pattern select circuit 280 and a mux circuit 282. Encoder circuit 256 operates to select a code word when the current state is 4. Pattern select circuit 280 selects which of the 39 patterns of the lookup table shown in Table 4 is used given the data word d18:0. The value that pattern select circuit 280 issues is a 39-bit word indicating which pattern should be selected. Mux circuit 282 utilizes the select value S39:1 and the data word D18:0 to output a selection of which &null;g&null; subgroup to use (g4s15:0), which bits of the data word will be mapped to the &null;g&null; word (g4w6:0), which &null;h&null; subgroup to use h415:0) and which bits of data word will be used to map the &null;h&null; word (h4w8;0). The calculations of encoder circuit 256 are shown in Table 9.

9

TABLE 9

Input:

d18,d17,d16,d15,d14,d13,d12,d11,d10,d9,d8,d7,d6,d5,d4,d3,

d2,d1,d0 (19-bit Dataword)

Output:

g4w6,g4w5,g4w4,g4w3,g4w2,g4w1,g4w0&null;&null;&null;(7-bit word)

g4s15,g4s14,g4s13,g4s12,g4s11,g4s10,g4s9,g4s8,g4s7,g4s6,

g4s5,g4s4,g4s3,g4s2,g4s1,g4s0

h4w8,h4w7,h4w6,h4w5,h4w4,h4w3,h4w2,h4w1,

h4w0&null;(9-bit word)

h4s15,h4s14,h4s13,h4s12,h4s11,h4s10,h4s9,h4s8,h4s7,h4s6,

h4s5,h4s4,h4s3,h4s2,h4s1,h4s0

Pattern Select of enc_r4

t4 &null; tt0

t5 &null; tt1

t6 &null; tt2

t7 &null; tt3

t8 &null; tt4

t9 &null; tt5

ta &null; tt6

tb &null; tt7:

tc &null; tt8

td &null; tt9

te &null; tt10

tf &null; tt11

S1 &null;&null;d18&&null;d17&&null;d16

S2 &null;&null;d18&&null;d17& d16

S3 &null;t4

S4 &null;t5

S5 &null;t6

S6 &null;t7:

S7 &null;t8

S8 &null;t9&&null;d14

S9 &null;t9& d14

S10&null;ta&&null;d14

S11&null;ta& d14

S12&null;tb&&null;d14

S13&null;tb& d14

S14&null;tc&&null;d14&&null;d13

S15&null;tc&&null;d14& d13

S16&null;tc& d14&&null;d13

S17&null;tc& d14& d13

S18&null;td&&null;d14&&null;d13

S19&null;td&&null;d14& d13

S20&null;td& d14&&null;d13

S21&null;td& d14& d13

S22&null;te&&null;d14&&null;d13

S23&null;te&&null;d14& d13&&null;d12

S24&null;te&&null;d14& d13& d12

S25&null;te& d14&&null;d13&&null;d12

S26&null;te& d14&&null;d13& d12

S27&null;te& d14& d13&&null;d12

S28&null;te& d14& d13& d12

S29&null;tf&&null;d14&&null;d13&&null;d12

S30&null;tf&&null;d14&&null;d13& d12

S31&null;tf&&null;d14& d13&&null;d12

S32&null;tf&&null;d14& d13& d12

S33&null;tf& d14&&null;d13&&null;d12

S34&null;tf& d14&&null;d13& d12&&null;d11

S35&null;tf& d14&&null;d13& d12&d11

S36&null;tf& d14& d13&&null;d12&&null;d11

S37&null;tf& d14& d13&&null;d12&d11

S38&null;tf& d14& d13& d12&&null;d11

S39&null;tf& d14& d13& d12&d11

MUX for GX and HX Encoder of enc_r4

For GX:

if (S1&null;S2&null;S4&null;S6&null;S7&null;S9&null;S12&null;S13&null;S16&null;S18&null;S21&null;S27&null;S32&null;S33)

&null;g4w(6:0) &null; (d15,d14,d13,d12,d11,d10,d9)

&null;

if (S3&null;S5&null;S8&null;S10&null;S11&null;S20&null;S22&null;S29&null;S31)

&null;g4w(6:0) &null; (d14,d13,d12,d11,d10, d9,d8)

&null;

if (S19&null;S30&null;S39)

&null;g4w(6:0) &null; (d13,d12,d11,d10, d9, d8,d7)

&null;

if (S14&null;S15&null;S17&null;S24&null;S26&null;S28&null;S38)

&null;g4w(6:0) &null; (d12,d11,d10, d9, d8, d7,d6)

&null;

if (S23&null;S25&null;S35&null;S37)

&null;g4w(6:0) &null; (d11,d10, d9, d8, d7, d6,d5)

&null;

if (S34&null;S36)

&null;g4w(6:0) &null; (d10, d9, d8, d7, d6, d5,d4)

&null;

if (S3&null;S14&null;S23&null;S34)

&null;g4s0&null;1,

all other g4s&null;0

&null;

if (S8&null;S24&null;S35)

&null;g4s1&null;1,

all other g4s&null;0

&null;

if (S1&null;S15&null;S25&null;S36)

&null;g4s2&null;1,

all other g4s&null;0

&null;

if (S4&null;S26&null;S37)

&null;g4s3&null;1,

all other g4s&null;0

&null;

if (S9&null;S38)

&null;g4s4&null;1,

all other g4s&null;0

&null;

if (S16)

&null;g4s5&null;1,

all other g4s&null;0

&null;

if (S27)

&null;g4s6&null;1,

all other g4s&null;0

&null;

if (S2&null;S5&null;S17)

&null;g4s7&null;1,

all other g4s&null;0

&null;

if (S6&null;S10&null;S28)

&null;g4s8&null;1,

all other g4s&null;0

&null;

if (S18&null;S29)

&null;g4s9&null;1,

all other g4s&null;0

&null;

if (S7&null;S11&null;S19)

&null;g4s10&null;1,

all other g4s&null;0

&null;

if (S12&null;S20&null;S30)

&null;g4s11&null;1,

all other g4s&null;0

&null;

if (S21&null;S31&null;S39)

&null;g4s12&null;1,

all other g4s&null;0

&null;

if (S32)

&null;g4s13&null;1,

all other g4s&null;0

&null;

if (S13&null;S22)

&null;g4s14&null;1,

all other g4s&null;0

&null;

if (S33)

&null;g4s15&null;1,

all other g4s&null;0

&null;

For HX:

h4w(8:0) &null; (d8,d7,d6,d5,d4,d3,d2,d1,d0)

if(S3&null;S8)

&null;h4s0&null;1,

all other h4s&null;0

&null;

if(S14&null;S24)

&null;h4s1&null;1,

all other h4s&null;0

&null;

if(S23&null;S35)

&null;h4s2&null;1,

all other h4s&null;0

&null;

if(S34)

&null;h4s3&null;1,

all other h4s&null;0

&null;

if(S1&null;S4&null;S9&null;S16&null;S27)

&null;h4s4&null;1,

all other h4s&null;0

&null;

if(S15&null;S26&null;S38)

&null;h4s5&null;1,

all other h4s&null;0

&null;

if(S25&null;S37)

&null;h4s6&null;1,

all other h4s&null;0

&null;

if(S36)

&null;h4s7&null;1,

all other h4s&null;0

&null;

if(S2&null;S6&null;S18)

&null;h4s8&null;1,

all other h4s&null;0

&null;

if(S5&null;S10&null;S29)

&null;h4s9&null;1,

all other h4s&null;0

&null;

if(S17&null;S28)

&null;h4s10&null;1,

all other h4s&null;0

&null;

if(S7&null;S12&null;S21&null;S32)

&null;h4s11&null;1,

all other h4s&null;0

&null;

if(S11&null;S20&null;S31)

&null;h4s12&null;1,

all other h4s&null;0

&null;

if(S19&null;S30&null;S39)

&null;h4s13&null;1,

all other h4s&null;0

&null;

if(S13&null;S33)

&null;h4s14&null;1,

all other h4s&null;0

&null;

if(S22)

&null;h4s15&null;1,

all other h4s&null;0

&null;

&null;0045&null; Encoder circuits 258 and 260, shown in block diagrams in FIGS. 6 and 7, operate similar to encoder circuit 256. Encoder circuit 258 includes a pattern select circuit 290 that selects a particular pattern from the lookup table in Table 5 and mux circuit 292 indicates the appropriate &null;g&null; and &null;&null; subgroups and the bits of the data word that will be used for the &null;g&null; and &null;h&null; mappings. Encoder circuit 260 includes pattern select circuit 300 and mux circuit 302. Pattern select circuit 300 indicates which pattern should be used when the current state is zero. Mux circuit 302 outputs the appropriate &null;g&null; and &null;h&null; subgroups and the bits used for the respective &null;g&null; and &null;h&null; mappings. Encoder circuits 258 and 260 operate according to the tables shown in tables 10 and 11, respectively.

10

TABLE 10

Input:

d18,d17,d16,d15,d14,d13,d12,d11,d10,d9,d8,d7,d6,d5,d4,d3,

d2,d1,d0 (19-bit Dataword)

tt11,tt10,tt9,tt8,tt7,tt6,tt5,tt4,tt3,tt2,tt1,tt0

Output:

g2w6,g2w5,g2w4,g2w3,g2w2,g2w1,g2w0 (7-bit word)

g2s9,g2s8,g2s7,g2s6,g2s5,g2s4,g2s3,g2s2,g2s1,g2s0

h2w8,h2w7,h2w6,h2w5,h2w4,h2w3,h2w2,h2w1,h2w0

(9-bit word)

h2s10,h2s9,h2s8,h2s7,h2s6,h2s5,h2s4,h2s3,h2s2,h2s1,h2s0

Pattern Select of enc_r2

t6 &null; tt2

t7 &null; tt3

t8 &null; tt4

t9 &null; tt5

ta &null; tt6

tb &null; tt7:

tc &null; tt8

td &null; tt9

te &null; tt10

tf &null; tt11

S1 &null;&null;d18&&null;d17&&null;d16

S2 &null;&null;d18&&null;d17& d16

S3 &null;&null;d18& d17&&null;d16

S4 &null;t6

S5 &null;t7:

S6 &null;t8

S7 &null;t9

S8 &null;ta

S9 &null;tb

S10&null;tc&&null;d14

S11&null;tc& d14

S12&null;td&&null;d14

S13&null;td& d14

S14&null;te&&null;d14

S15&null;te& d14

S16&null;tf&&null;d14&&null;d13

S17&null;tf&&null;d14& d13

S18&null;tf& d14&&null;d13

S19&null;tf& d14& d13

MUX for GX and HX Encoder of enc_r2

For GX:

if (S1&null;S2&null;S3&null;S4&null;S6&null;S8&null;S9&null;S11&null;S15&null;S19)

&null;g2w(6:0) &null; (d15,d14,d13,d12,d11,d10,d9)

&null;

if(S5&null;S7&null;S10&null;S13&null;S14&null;S18)

&null;g2w(6:0) &null; (d14,d13,d12,d11,d10, d9,d8)

&null;

if (S12)

&null;g2w(6:0) &null; (d13,d12,d11,d10, d9, d8,d7)

&null;

if (S16&null;S17)

&null;g2w(6:0) &null; (d12,d11,d10, d9, d8, d7,d6)

&null;

if (S1&null;S16)

&null;g2s0&null;1,

all other g2s&null;0

&null;

if(S4)

&null;g2s1&null;1,

all other g2s&null;0

&null;

if(S2&null;S5&null;S17)

&null;g2s2&null;1,

all other g2s&null;0

&null;

if(S6&null;S10)

&null;g2s3&null;1,

all other g2s&null;0

&null;

if(S11&null;S18)

&null;g2s4&null;1,

all other g2s&null;0

&null;

if(S19)

&null;g2s5&null;1,

all other g2s&null;0

&null;

if(S3&null;S7&null;S12)

&null;g2s6&null;1,

all other g2s&null;0

&null;

if(S8&null;S13)

&null;g2s7&null;1,

all other g2s&null;0

&null;

if(S9&null;S14)

&null;g2s8&null;1,

all other g2s&null;0

&null;

if(S15)

&null;g2s9&null;1,

all other g2s&null;0

For HX:

h2w(8:0) &null; (d8,d7,d6,d5,d4,d3,d2,d1,d0)

if(S1&null;S4)

&null;h2s0&null;1,

all other h2s&null;0

&null;

if(S16)

&null;h2s1&null;1,

all other h2s&null;0

&null;

if(S2&null;S6&null;S11&null;S19)

&null;h2s2&null;1,

all other h2s&null;0

&null;

if(S5&null;S10&null;S18)

&null;h2s3&null;1,

all other h2s&null;0

&null;

if(S17)

&null;h2s4&null;1,

all other h2s&null;0

&null;

if(S3&null;S8)

&null;h2s5&null;1,

all other h2s&null;0

&null;

if(S7&null;S13)

&null;h2s6&null;1,

all other h2s&null;0

&null;

if(S12)

&null;h2s7&null;1,

all other h2s&null;0

&null;

if(S9)

&null;h2s8&null;1,

all other h2s&null;0

&null;

if(S14)

&null;h2s9&null;1,

all other h2s&null;0

&null;

if(S15)

&null;h2s10&null;1,

all other h2s&null;0

&null;

&null;0046&null;

11

TABLE 11

enc_r0

Input:

d18,d17,d16,d15,d14,d13,d12,d11,d10,d9,d8,d7,d6,d5,d4,d3,d2,

d1,d0 (19-bit Dataword)

Output:

g0w6,g0w5,g0w4,g0w3,g0w2,g0w1,g0w0 (7-bit word)

g0s8,g0s7,g0s6,g0s5,g0s4,g0s3,g0s2,g0s1,g0s0

h0w8,h0w7,h0w6,h0w5,h0w4,h0w3,h0w2,h0w1,h0w0

(9-bit word)

h0s7,h0s6,h0s5,h0s4,h0s3,h0s2,h0s1,h0s0

Pattern Select of enc_r0

t6 &null; tt2

t7 &null; tt3

t8 &null; tt4

t9 &null; tt5

ta &null; tt6

tb &null; tt7:

tc &null; tt8

td &null; tt9

te &null; tt10

tf &null; tt11

S1 &null;&null;d18&&null;d17&&null;d16

S2 &null;&null;d18&&null;d17& d16

S3 &null;&null;d18& d17&&null;d16

S4 &null;t6

S5 &null;t7:

S6 &null;t8

S7 &null;t9

S8 &null;ta

S9 &null;tb

S10&null;tc

S11&null;td&&null;d14

S12&null;td& d14

S13&null;te&&null;d14

S14&null;te& d14

S15&null;tf&&null;d14

S16&null;tf& d14

MUX for GX and HX Encoder of enc_r0

For GX:

if(S1&null;S2&null;S3&null;S5&null;S7&null;S9&null;S10&null;S14&null;S16)

&null;g0w(6:0) &null; (d15,d14,d13,d12,d11,d10,d9)

&null;

if(S4&null;S6&null;S8&null;S11&null;S13&null;S15)

&null;g0w(6:0) &null; (d14,d13,d12,d11,d10, d9,d8)

&null;

if(S12)

&null;g0w(6:0) &null; (d13,d12,d11,d10, d9, d8,d7)

&null;

if(S1&null;S4)

&null;g0s0&null;1,

all other g0s&null;0

&null;

if(S5&null;S11)

&null;g0s1&null;1,

all other g0s&null;0

&null;

if(S2&null;S6&null;S12)

&null;g0s2&null;1,

all other g0s&null;0

&null;

if(S7&null;S13)

&null;g0s3&null;1,

all other g0s&null;0

&null;

if(S14)

&null;g0s4&null;1,

all other g0s&null;0

&null;

if(S3&null;S8)

&null;g0s5&null;1,

all other g0s&null;0

&null;

if(S9&null;S15)

&null;g0s6&null;1,

all other g0s&null;0

&null;

if(S10)

&null;g0s7&null;1,

all other g0s&null;0

&null;

if(S16)

&null;g0s8&null;1,

all other g0s&null;0

&null;

For HX:

h0w(8:0) &null; (d8,d7,d6,d5,d4,d3,d2,d1,d0)

if(S1&null;S5)

&null;h0s0&null;1,

all other h0s&null;0

&null;

if(S4&null;S11)

&null;h0s1&null;1,

all other h0s&null;0

&null;

if(S2&null;S7&null;S14)

&null;h0s2&null;1,

all other h0s&null;0

&null;

if(S6&null;S13)

&null;h0s3&null;1,

all other h0s&null;0

&null;

if(S12)

&null;h0s4&null;1,

all other h0s&null;0

&null;

if(S3&null;S9)

&null;h0s5&null;1,

all other h0s&null;0

&null;

if(S8&null;S15)

&null;h0s6&null;1,

all other h0s&null;0

&null;

if(S10&null;S16)

&null;h0s7&null;1,

all other h0s&null;0

&null;

&null;0047&null; FIG. 8 illustrates a block diagram of GX encoder 262. GX encoder 262 includes an GX encoder input mux 310, a plurality of subgroup encoder circuits 312 and a GX encoder output mux 314. GX encoder input mux 310 receives the &null;g&null; values from the encoder circuits 256, 258 and 260 (g4w, g2w, g0w, g4w_sel, g2w_sel, g0w_sel). Input mux 310 also receives the current state from encoder input circuit 254. Encoder input mux 310 sends the appropriate &null;g&null; bits (the second fragment) received through each of the plurality of subgroup encoder circuits 312 based on the &null;g&null; select values and the current state. The plurality of encoder circuits 312 map the second fragment (gw_in6:0) according to the mapping table of Table 2. The mapped 10-bit segments are then output to the GX encoder output mux 314. In the event an inverse of the mapped subgroups is necessary, for example from enc_gx7 and enc_c6, inverter circuits 316 are provided to invert the output from these respective circuits and send it to the GX encoder output mux 314. The GX encoder output mux selects the appropriate 10-bit segment according to the &null;g&null; select value sent from GX encoder input mux 310. The GX encoder 262 operates according to calculations shown in Table 12.

&null;0048&null; FIG. 9 illustrates a block diagram of HX encoder 264, which operates similar to GX encoder 262. HX encoder 264 includes an HX encoder input mux 320, a plurality of subgroup encoder circuits 322 and an HX encoder output mux 324. HX encoder input mux 320 receives a signal indicative of the current state from the encoder input circuit 254 and &null;h&null; values (h4w, h2w, h0w, h4s, h2s, h0s) from encoder circuits 256, 258 and 260. HX encoder input mux 320 selects the appropriate third fragment (either h4w, h2w and h0w) based on the current state and select values (h4s, h2s, h0s) and outputs the selection as hw_in. Also, HX encoder input mux 320 selects the particular subgroup based on the state and outputs a value h_sel based on the state. The plurality of subgroup encoder circuits 322 map the second fragment and send their respective mapped segments to the HX encoder output mux 324. The HX encoder output mux 324 selects the appropriate 10-bit segment based on h&null;sel. The 10-bit segment is then sent to encoder output circuit 266. The HX encoder 264 operates according to calculations shown in Table 13.

12

TABLE 13

HX Encoder

Input:

h4w(6:0), h2w(6:0), h0w(6:0), h4s(15:0), h2s(10:0), h0s(7:0),

State(3:0)

Output:

hw(9:0)

HX Encoder Input Mux

Input:

h4w(8:0), h2w(8:0), h0w(8:0), h4s(15:0), h2s(10:0), h0s(7:0),

State(3:0)

Output:

hw_in(8:0), h_sel(16:0)

State(3:0) is a 4-bit signed value representing the current state.

if (State&null; &null;4 or State&null; 4)

&null;&null;

hw_in(8:0) &null; h4w(8:0),

h_sel(15:0) &null; h4s(15:0),

h_sel(16) &null;0

&null;

if (State&null; &null;2 or State&null; 2)

&null;&null;

hw_in(8:0) &null; h2w(8:0),

h_sel(0) &null;0,

h_sel(1) &null;0,

h_sel(2) &null;0,

h_sel(3) &null;0,

h_sel(4) &null;h2s(0),

h_sel(5) &null;h2s(1),

h_sel(6) &null;0,

h_sel(7) &null;0,

h_sel(8) &null;h2s(2),

h_sel(9) &null;h2s(3),

h_sel(10) &null;h2s(4),

h_sel(11) &null;h2s(5),

h_sel(12) &null;h2s(6),

h_sel(13) &null;h2s(7),

h_sel(14) &null;h2s(8),

h_sel(15) &null;h2s(9),

h_sel(16) &null;h2s(10),

&null;

if (State&null; 0)

&null;&null;

hw_in(8:0) &null; h0w(8:0),

h_sel(0) &null;0,

h_sel(1) &null;0,

h_sel(2) &null;0,

h_sel(3) &null;0,

h_sel(4) &null;0,

h_sel(5) &null;0,

h_sel(6) &null;0,

h_sel(7) &null;0,

h_sel(8) &null;h0s(0),

h_sel(9) &null;h0s(1),

h_sel(10) &null;0,

h_sel(11) &null;h0s(2),

h_sel(12) &null;h0s(3),

h_sel(13) &null;h0s(4),

h_sel(14) &null;h0s(5),

h_sel(15) &null;h0s(6),

h_sel(16) &null;h0s(7),

&null;

Note: All the encoders enc_gc7, enc_gc6, enc_gc5, enc_gc4,

enc_gc3, enc_gd6, enc_gd5, enc_gd4,enc_gd3, enc_ge5 and

enc_ge3 used here in HX Encoder are identical to those defined

in the GX Encoder.

enc_ha8

Input:

A(7:0)

Output:

CW(9:0)

if(&null;A7)

CW(9:0) &null; enc_gc7(A(6:0));

if(A7&&null;A6)

CW(9:0) &null; enc_gc6(A(5:0));

if(A7&A6)

CW(9:0) &null; enc_gd6(A(5:0));

Note: CW(9:0) &null; enc_gc7(A(6:0)); means CW(9:0) is equal to the 10-bit

output of block enc_gc7 when A(6:0) is the input to it.

enc_ha6

Input:

A(5:0)

Output:

CW(9:0)

if(&null;A5)

CW(9:0) &null; enc_gd5(A(4:0));

if(A5)

CW(9:0) &null; enc_ge5(A(4:0));

enc_ha5

Input:

A(4:0)

Output:

CW(9:0)

if(&null;A4)

CW(9:0) &null; enc_gc4(A(3:0));

if(A4)

CW(9:0) &null; enc_gd4(A(3:0));

enc_ha4

Input:

A(3:0)

Output:

CW(9:0)

if(&null;A3)

CW(9:0) &null; enc_gd3(A(2:0));

if(A3)

CW(9:0) &null; enc_ge3(A(2:0));

enc_hb9

Input:

A(8:0)

Output:

CW(9:0)

if(&null;A8)

CW(9:0) &null; enc_ha8(A(7:0));

if(A8&&null;A7)

CW(9:0) &null; enc_gb7(A(6:0));

if(A8&A7&&null;A6)

CW(9:0) &null; enc_gb6(A(5:0));

if(A8&A7&A6&&null;A5)

CW(9:0) &null; enc_gb5(A(4:0));

if(A8&A7&A6&A5&&null;A4)

CW(9:0) &null; enc_gb4(A(3:0));

if(A8&A7&A6&A5&A4&&null;A3)

CW(9:0) &null; enc_gb3(A(2:0));

if(A8&A7&A6&A5&A4& A3)

CW(9:0) &null; enc_gf3(A(2:0));

enc_gf3

Input:

A2,A1,A0

Output:

C9,C8,C7,C6,C5,C4,C3,C2,C1,C0

gf3a&null; &null;A2;

gf3a9&null; gf3a;

gf3a8&null; gf3a;

gf3a7&null; gf3a &( A1 &null; A0 );

gf3a6&null; gf3a &( A1 &null; &null;A0 );

gf3a5&null; gf3a &( A0 &null; &null;A1 );

gf3a4&null; gf3a &( &null;A1 &null; &null;A0 );

gf3a3&null; gf3a;

gf3a2&null; gf3a;

gf3a1&null; gf3a;

gf3a0&null; gf3a;

gf3b&null; A2;

gf3b9&null; gf3b;

gf3b8&null; gf3b;

gf3b7&null; gf3b;

gf3b6&null; gf3b;

gf3b5&null; gf3b;

gf3b4&null; gf3b;

gf3b3&null; gf3b &( A1 &null; A0 );

gf3b2&null; gf3b &( A1 &null; &null;A0 );

gf3b1&null; gf3b &( A0 &null; &null;A1 );

gf3b0&null; gf3b &( &null;A1 &null; &null;A0 );

C9 &null; gf3a9 &null;gf3b9;

C8 &null; gf3a8 &null;gf3b8;

C7 &null; gf3a7 &null;gf3b7;

C6 &null; gf3a6 &null;gf3b6;

C5 &null; gf3a5 &null;gf3b5;

C4 &null; gf3a4 &null;gf3b4;

C3 &null; gf3a3 &null;gf3b3;

C2 &null; gf3a2 &null;gf3b2;

C1 &null; gf3a1 &null;gf3b1;

C0 &null; gf3a0 &null;gf3b0;

enc_hc9

Input:

A(8:0)

Output:

CW(9:0)

if( &null; (A8&A7&A6&A5&A4&A3) )

&null;&null;CW(9:0) &null; enc_hb9(hw);

&null;

else

&null;&null;if(&null;A2)

CW(9:0) &null; enc_gb2(A(1:0));

&null;&null;if(A2&&null;A1)

CW(9:0) &null; enc_gc1(A(0)&null;);

&null;&null;if(A2& A1)

CW(9:0) &null;&null;(enc_gc1(A(0)));

&null;

enc_gb2

Input:

A1,A0

Output:

C9,C8,C7,C6,C5,C4,C3,C2,C1,C0

C9&null; A0;

C8&null;&null;A0;

C7&null; A1;

C6&null; A1;

C5&null; A1;

C4&null; A1;

C3&null; A1;

C2&null;&null;A1;

C1&null;&null;A1;

C0&null;&null;A1;

enc_gc1

Input:

A0

Output:

C9,C8,C7,C6,C5,C4,C3,C2,C1,C0

C9&null; 1;

C8&null; 1;

C7&null; A0;

C6&null; A0;

C5&null; A0;

C4&null; A0;

C3&null;&null;A0;

C2&null;&null;A0;

C1&null;&null;A0;

C0&null;&null;A0;

enc_hc8

Input:

A(7:0)

Output:

CW(9:0)

if(&null;A7)

CW(9:0)&null;&null;(enc_gc7(A(6:0)));

if(A7&&null;A6)

CW(9:0)&null;&null;(enc_gc6(A(5:0)));

if(A7&A6)

CW(9:0)&null; enc_ha6(A(5:0));

enc_hc6

Input:

A(5:0)

Output:

CW(9:0)

if(&null;A5)

CW(9:0)&null;&null;enc_ha5(A(4:0));

if(A5&&null;A4)

CW(9:0)&null;&null;(enc_gc4(A(3:0)));

if(A5& A4)

CW(9:0)&null; enc_ha4(A(3:0));

enc_hd8

Input:

A(7:0)

Output:

CW(9:0)

if(&null;(A7&A6&A5))

CW(9:0)&null;

enc_hc8(A(7:0));

else

CW(9:0)&null;&null;(enc_gd5(A(4:0)));

enc_hd7:

Input:

A(6:0)

Output:

CW(9:0)

if(&null;A6)

CW(9:0)&null;&null;(enc_gd6(A(5:0)));

if(A6&&null;A5&A4&A3))

CW(9:0)&null; &null;enc_hc6(A(5:0));

if(A6& (A5&A4&A3))

CW(9:0)&null;&null;(enc_gd3(A(2:0)));

HX Encoder Output Mux

Input:

ha8(9:0), ha6(9:0), ha5(9:0), ha4(9:0), hb9(9:0), hc9(9:0),

hc8(9:0), hc6(9:0), hd8(9:0), hd7(9:0), h_sel(16:0)

Output:

hw(9:0)

hb6(9:0) &null; ha6(9:0)

hb5(9:0) &null; ha5(9:0)

hb4(9:0) &null; ha4(9:0)

hd9(9:0) &null; hc9(9:0)

he9(9:0) &null;&null;hc9(9:0)

he8(9:0) &null;&null;hc8(9:0)

hf9(9:0) &null;&null;hb9(9:0)

If(h_sel0)

&null;hw(9:0)&null; ha8(9:0)

&null;

If(h_sel1)

&null;hw(9:0)&null; ha6(9:0)

&null;

If(h_sel2)

&null;hw(9:0)&null; ha5(9:0)

&null;

If(h_sel3)

&null;hw(9:0)&null; ha4(9:0)

&null;

If(h_sel4)

&null;hw(9:0)&null; hb9(9:0)

&null;

If(h_sel5)

&null;hw(9:0)&null; hb6(9:0)

&null;

If(h_sel6)

&null;hw(9:0)&null; hb5(9:0)

&null;

If(h_sel7)

&null;hw(9:0)&null; hb4(9:0)

&null;

If(h_sel8)

&null;hw(9:0)&null; hc9(9:0)

&null;

If(h_sel9)

&null;hw(9:0)&null; hc8(9:0)

&null;

If(h_sel10)

&null;hw(9:0)&null; hc6(9:0)

&null;

If(h_sel11)

&null;hw(9:0)&null; hd9(9:0)

&null;

If(h_sel12)

&null;hw(9:0)&null; hd8(9:0)

&null;

If(h_sel13)

&null;hw(9:0)&null; hd7(9:0)

&null;

If(h_sel14)

&null;hw(9:0)&null; he9(9:0)

&null;

If(h_sel15)

&null;hw(9:0)&null; he8(9:0)

&null;

If(h_sel16)

&null;hw(9:0)&null; hf9(9:0)

&null;

&null;0049&null; FIG. 10 illustrates a block diagram of encoder output circuit 266. Encoder output circuit 266 includes form code word circuit 330 and RDS calculator 332. Form code word circuit 334 combines the code words gw and hw received from the GX encoder and HX encoder, respectively, to form the code word. Also, if the state is negative, the entire code word is inversed to output the correct value. The output of form code word circuit 330 is sent to the communication channel 252 and RDS calculator 332. RDS calculator 332 receives the code word and the current state. RDS calculator 332 adds the values of the code word and the state to output the next state to the encoder input circuit 254, where it is used for a subsequent encoding. Encoder output circuit 266 operates according to calculations shown in Table 14.

13

TABLE 14

Encoder Output Block

Input:

gw(9:0), hw(9:0), State(3:0)

Output:

W(19:0), NextState(3:0)

Form Code Word

if (State<&null;0)

&null;W(19:10) &null; gw(9:0);

W(9:0) &null; hw(9:0);

&null;

if (State>0)

&null;W(19:10) &null;&null;gw(9:0);

W(9:0) &null;&null;hw(9:0);

&null;

if( W(19:0)&null;&null;0xAAAAA)

W(19:0) &null; 0x83EAA;

if( W(19:0)&null;&null;0x55555)

W(19:0) &null; 0x43D55;

RDS Calculator

HW&null;W19&null;W18&null;W17&null;W16&null;W15&null;W14&null;W13&null;W12&null;W11&null;

W10&null;W9&null;W8&null;W7&null;W6&null;W5&null;W4&null;W3&null;W2&null;W1&null;W0

RDS &null; (2 * HW) &null;20

NextState&null; State &null; RDS

Note that Hamming weight (HW) of the code Word W(19:0) is the sum of the 20 code bits. The running digital sum (RDS) of the code word is calculated by subtracting the number of &null;0&null; by the number of &null;1&null; in the code word. For example, if there are 13 &null;1&null; (HW &null; 13) and number of &null;0&null; is

# (20&null;HW), the RDS is HW&null; (20&null;HW)&null; (2*HW) &null;20.

In a sequence of code words, the cumulative RDS is the RDS of all bits from the beginning of the first code word to the end of the current code word. Note that the cumulative RDS in this design must be equal to either &null;4, &null;2, 0, 2 or 4. This number is also considered as the state of the encoder.

&null;0050&null;

&null;0051&null; FIG. 11 illustrates a method 350 of decoding information received from communication channel 252. At step 352, the 20-bit code word is received from communication channel 252. Next, at step 354, the &null;g&null; and &null;h&null; bit segments from the code word are separated. At step 356, the &null;g&null; 10-bit segment is decoded and at step 358 the &null;h&null; 10-bit segment is decoded. Ultimately, at step 360, the 19-bit data word is formed and output.

&null;0052&null; FIG. 12 illustrates a decoder 370 that decodes information received from communication channel 252. Decoder 370 includes a decoder input circuit 372, a GX decoder 374, an HX decoder 376 and a decoder output circuit 378. As discussed in more detail below, the decoder input circuit 372 receives an initialization signal, the code word W19:0 and a word clock. The decoder input circuit 372 ascertains the state from the code word and separates the code word into a &null;g&null; segment gcp9:0 and an &null;h&null; segment hcp9:0. The &null;g&null; segments and the &null;h&null; segments are sent to the GX decoder 374 and HX decoder 376, respectively. The GX decoder 374 and the HX decoder 376 decode the respective segments and provide an output to decoder output circuit 378. The decoder output circuit 378 forms a 19-bit data word using the state value sent from decoder input 372 and outputs the 19-bit data word I18:0.

&null;0053&null; FIG. 13 illustrates a block diagram of decoder input circuit 372. Decoder input circuit 372 includes a state evaluator circuit 380, a state register 382, a 20-bit code word register 384 and an input mux 386. The initialization signal is sent to state evaluator circuit 380 and resets the state at the beginning of a first code word that is received from communication channel 252. The word clock initializes state register 382 and 20-bit code word register 384. The code word W19:0 is sent to the 20-bit code word register 384. The 20-bit code word is sent to state evaluator circuit 380 and input mux 386. Input mux 386 separates the 20-bit code word into a &null;g&null; segment gcp and an &null;h&null; segment hcp. Decoder input circuit 372 operates according to the calculations in Table 15.

14

TABLE 15

Decoder Input

Input:

W(19:0), Init, Word Clock

Output:

gcp(9:0), hcp(9:0), State(3:0)

The Init signal is used to initialize Next State(3:0) to zero before the first

clock signal. The rising edge of the Word Clock can be used to clock-in

the 20-bit code word W(19:0) and shift the Next State to the State register.

The State Evaluator is for calculating the Running Digital Sum (RDS) of

the code word and the cumulative RDS. The RDS of the code word

W(19:0) is:

RDS &null; (2*HW)&null;20&null;where HW is the Hamming weight of W(19:0)

Next State &null; State &null; RDS

Therefore, the State represents the cumulative RDS of all code bits up till

the end of the last code word.

INPUT MUX

if( wm(19:0)&null;&null;0x83EAA)

wm(19:0) &null; 0xAAAAA;

if( wm(19:0)&null;&null;0x43D55)

wm(19:0) &null; 0x55555;

if(State<&null;0)

&null;gcp(9:0)&null; wm(19:10);

hcp(9:0)&null; wm(9:0);

&null;

if(State>0)

&null;gcp(9:0)&null;&null;wm(19:10);

hcp(9:0)&null;&null;wm(9:0);

&null;

&null;0054&null; FIG. 14 illustrates a block diagram of GX decoder 374. GX decoder 374 receives &null;g&null; segment gcp from decoder input circuit 372. GX decoder 374 includes digital sum circuit 390, inverter 392, pattern select 394, a plurality of &null;g&null; subgroup decoders 396 and a GX output mux 398. Digital sum calculator 390 determines the 30 digital sum of &null;g&null; segment gcp. If the digital sum of the &null;g&null; segment gcp is less than zero, the inverter 392 will invert the &null;g&null; segment gcp. After passing through inverter 392, a &null;g&null; word gw is sent to the pattern generator 394 and plurality of &null;g&null; subgroup decoders 396. Pattern selector 394 determines a 36-bit pattern based on the 10-bit word. This 36-bit pattern is used in each of the plurality of subgroup decoders 396 in order to determine the appropriate data value for the &null;g&null; group word. Each of the plurality of subgroup decoders send a value indicative of the subgroup to GX output mux 398. GX output 398 sends the appropriate &null;g&null; word gdw and &null;g&null; type to decoder output circuit 378. Additionally, a value gm indicative of the &null;g&null; type is sent to HX decoder 376 in order to select the appropriate &null;h&null; word. GX decoder 374 operates according to the calculations in Table 16.

&null;0055&null; FIG. 15 illustrates a block diagram of HX decoder 376. HX decoder 376 includes a first pattern generator 400, an inverter 402, a second pattern generator 404, a plurality of subgroup decoders 406 and an HX output mux 408. The first pattern generator 400 generates a 36-bit pattern based on the &null;h&null; word hcp. Second pattern generator 404 generates a 36-bit pattern based on the inverse of &null;h&null; word hcp. These values are provided to the plurality of subgroup decoders 406. The plurality of subgroup decoders 406 determine the appropriate values to be sent to HX output mux 408. Based on the gm and state values, the appropriate &null;h&null; word hdw and &null;h&null; type are sent to decoder output circuit 378. HX decoder 374 operates according to the calculations in Table 17.

15

TABLE 17

HX Decoder

Input:

hcp(9:0), gm(3:0), State(3:0)

Output:

hdw(8:0), Htype(7:0)

INV

Input:

hcp(9:0)

Output:

hwi(9:0)

hwi(9:0) &null; &null;hcp(9:0)

gen_p10 is the same as that in GX Decoder.

dec_ha

Input:

hw(9:0), x(3:0), y(15:0), z(15:0)

Output:

hadw(8:0), haht(7:0)

( dec_gc, dec_gd, dec_ge and get_ds ) are identical to those in

GX_Decoder

Input Mux

Input:

gcdw(6:0), gddw(6:0), gedw(6:0), gcgt(7:0), gdgt(7:0),

gegt(7:0), hds(4:0)

Output:

gdw(6:0), gt(7:0)

if(hds&null;2)

&null;gdw(6:0) &null;gcdw(6:0);

gt(7:0) &null;gcgt(7:0);

&null;

if(hds&null;4)

&null;gdw(6:0) &null;gddw(6:0);

gt(7:0) &null;gdgt(7:0);

&null;

if(hds&null;6)

&null;gdw(6:0) &null;gedw(6:0);

gt(7:0) &null;gegt(7:0);

&null;

Output_ha

Input:

gdw(6:0), gt(7:0)

Output:

hdw(8:0), ht(7:0)

if(gt&null;0x17)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x08;

&null;

if(gt&null;0x16)

&null;hdw(8:0) &null;gdw(6:0) &null;0x80;

ht(7:0) &null;0x08;

&null;

if(gt&null;0x26)

&null;hdw(8:0) &null;gdw(6:0) &null;0xC0;

ht(7:0) &null;0x08;

&null;

if(gt&null;0x25)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x06;

&null;

if(gt&null;0x35)

&null;hdw(8:0) &null;gdw(6:0) &null;0x20;

ht(7:0) &null;0x06;

&null;

if(gt&null;0x14)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x05;

&null;

if(gt&null;0x24)

&null;hdw(8:0) &null;gdw(6:0) &null;0x10;

ht(7:0) &null;0x05;

&null;

if(gt&null;0x23)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x04;

&null;

if(gt&null;0x33)

&null;hdw(8:0) &null;gdw(6:0) &null;0x08;

ht(7:0) &null;0x04;

&null;

Note: &null;hdw(8:0) &null;gdw(6:0)&null; means &null;hdw(8) &null;hdw(7) &null;0,

hdw(6:0) &null;gdw(6:0)&null;

dec_hb

Input:

hw(9:0), x(3:0), y(15:0), z(15:0)

Output:

hbdw(8:0), hbht(7:0)

( dec_gb, dec_gc, dec _gd, dec_ge, dec_gf and get_ds ) are

identical to those in GX_Decoder

Input Mux

Input:

gbdw(6:0), gcdw(6:0), gddw(6:0), gedw(6:0), gfdw(6:0),

gbgt(7:0), gcgt(7:0), gdgt(7:0), gegt(7:0) gfgt(7:0), hds(4:0)

Output:

gdw(6:0), gt(7:0)

if(hds&null;0)

&null;gdw(6:0) &null;gbdw(6:0);

gt(7:0) &null;gbgt(7:0);

&null;

if(hds&null;2)

&null;gdw(6:0) &null;gcdw(6:0);

gt(7:0) &null;gcgt(7:0);

&null;

if(hds&null;4)

&null;gdw(6:0) &null;gddw(6:0);

gt(7:0) &null;gdgt(7:0);

&null;

if(hds&null;6)

&null;gdw(6:0) &null;gedw(6:0);

gt(7:0) &null;gegt(7:0);

&null;

if(hds&null;8)

&null;gdw(6:0) &null;gfdw(6:0);

gt(7:0) &null;gfgt(7:0);

&null;

Output_hb

Input:

gdw(6:0), gt(7:0)

Output:

hdw(8:0), ht(7:0)

if(gt&null;0x17)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x19;

&null;

if(gt&null;0x16)

&null;hdw(8:0) &null;gdw(6:0) &null;0x80;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x26)

&null;hdw(8:0) &null;gdw(6:0) &null;0xC0;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x07)

&null;hdw(8:0) &null;gdw(6:0) &null;0x100;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x06)

&null;hdw(8:0) &null;gdw(6:0) &null;0x180;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x05)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1C0;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x04)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1E0;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x03)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1F0;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x43)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1F8;

ht(7:0) &null;0x19;

&null;

if(gt&null;0x25)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x16;

&null;

if(gt&null;0x35)

&null;hdw(8:0) &null;gdw(6:0) &null;0x20;

ht(7:0) &null;0x16;

&null;

if(gt&null;0x14)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x15;

&null;

if(gt&null;0x24)

&null;hdw(8:0) &null;gdw(6:0) &null;0x10;

ht(7:0) &null;0x15;

&null;

if(gt&null;0x23)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x14;

&null;

if(gt&null;0x33)

&null;hdw(8:0) &null;gdw(6:0) &null;0x08;

ht(7:0) &null;0x14;

&null;

Note: &null;hdw(8:0) &null;gdw(6:0)&null; means &null;hdw(8) &null;hdw(7) &null;0,

hdw(6:0) &null;gdw(6:0)&null;

dec_hc

Input:

hw(9:0), x(3:0), y(15:0), z(15:0), ihw(9:0), ix(3:0), iy(15:0),

iz(15:0)

Output:

hcdw(8:0), hcht(7:0)

Note that the 36-bit input ixyz is the combination of ix(3:0), iy(15:0)

and iz(15:0).

( dec_gb, dec_gc, dec _gd, dec_ge and get_ds ) are identical to those

in Gx_Decoder

Input Mux

Input:

igcdw(6:0), gbdw(6:0), gcdw(6:0), gddw(6:0), gedw(6:0),

igcgt(7:0), gbgt(7:0), gcgt(7:0), gdgt(7:0), gegt(7:0), hds(4:0)

Output:

gdw(6:0), gt(7:0)

if(hds&null;&null;2)

&null;gdw(6:0) &null;igcdw(6:0);

gt(7:0) &null;igcgt(7:0) &null;0x80;

&null;

if(hds&null;0)

&null;gdw(6:0) &null;gbdw(6:0);

gt(7:0) &null;gbgt(7:0);

&null;

if(hds&null;2)

&null;gdw(6:0) &null;gcdw(6:0);

gt(7:0) &null;gcgt(7:0);

&null;

if(hds&null;4)

&null;gdw(6:0) &null;gddw(6:0);

gt(7:0) &null;gdgt(7:0);

&null;

if(hds&null;6)

&null;gdw(6:0) &null;gedw(6:0);

gt(7:0) &null;gegt(7:0);

&null;

Output_hc

Input:

gdw(6:0), gt(7:0)

Output:

hdw(8:0), ht(7:0)

if(gt&null;0x17)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x29;

&null;

if(gt&null;0x16)

&null;hdw(8:0) &null;gdw(6:0) &null;0x80;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x26)

&null;hdw(8:0) &null;gdw(6:0) &null;0xC0;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x07)

&null;hdw(8:0) &null;gdw(6:0) &null;0x100;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x06)

&null;hdw(8:0) &null;gdw(6:0) &null;0x180;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x05)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1C0;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x04)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1E0;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x03)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1F0;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x02)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1F8;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x11)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1FC;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x91)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1FE;

ht(7:0) &null;0x29;

&null;

if(gt&null;0x97)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x28;

&null;

if(gt&null;0x96)

&null;hdw(8:0) &null;gdw(6:0) &null;0x80;

ht(7:0) &null;0x28;

&null;

if(gt&null;0x25)

&null;hdw(8:0) &null;gdw(6:0) &null;0xC0;

ht(7:0) &null;0x28;

&null;

if(gt&null;0x35)

&null;hdw(8:0) &null;gdw(6:0) &null;0xE0;

ht(7:0) &null;0x28;

&null;

if(gt&null;0x14)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x26;

&null;

if(gt&null;0x24)

&null;hdw(8:0) &null;gdw(6:0) &null;0x10;

ht(7:0) &null;0x26;

&null;

if(gt&null;0x94)

&null;hdw(8:0) &null;gdw(6:0) &null;0x20;

ht(7:0) &null;0x26;

&null;

if(gt&null;0x23)

&null;hdw(8:0) &null;gdw(6:0) &null;0x30;

ht(7:0) &null;0x26;

&null;

if(gt&null;0x33)

&null;hdw(8:0) &null;gdw(6:0) &null;0x38;

ht(7:0) &null;0x26;

&null;

Note: &null;hdw(8:0) &null;gdw(6:0)&null; means &null;hdw(8) &null;hdw(7) &null;0,

hdw(6:0) &null;gdw(6:0)&null;

dec_hd

Input:

hw(9:0), x(3:0), y(15:0), z(15:0), ihw(9:0), ix(3:0), iy(15:0),

iz(15:0)

Output:

hddw(8:0), hdht(7:0)

( dec_gb, dec_gc, dec_gd and get_ds ) are identical to those in

Gx_Decoder

Output of the INV block is the bitwise inverse of its input.

Input Mux

Input:

igddw(6:0), igcdw(6:0), gbdw(6:0), gcdw(6:0), gddw(6:0),

igdgt(7:0), igcgt(7:0), gbgt(7:0), gcgt(7:0), gdgt(7:0), hds(4:0)

Output:

gdw(6:0), gt(7:0)

if(hds&null;&null;4)

&null;gdw(6:0) &null;igddw(6:0);

gt(7:0) &null;igdgt(7:0) &null;0x80;

&null;

if(hds&null;&null;2)

&null;gdw(6:0) &null;igcdw(6:0);

gt(7:0) &null;igcgt(7:0) &null;0x80;

&null;

if(hds&null;0)

&null;gdw(6:0) &null;gbdw(6:0);

gt(7:0) &null;gbgt(7:0);

&null;

if(hds&null;2)

&null;gdw(6:0) &null;gcdw(6:0);

gt(7:0) &null;gcgt(7:0);

&null;

if(hds&null;4)

&null;gdw(6:0) &null;gddw(6:0);

gt(7:0) &null;gdgt(7:0);

&null;

Output_hd

Input:

gdw(6:0), gt(7:0)

Output:

hdw(8:0), ht(7:0)

if(gt&null;0x17)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x39;

&null;

if(gt&null;0x16)

&null;hdw(8:0) &null;gdw(6:0) &null;0x80;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x26)

&null;hdw(8:0) &null;gdw(6:0) &null;0xC0;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x07)

&null;hdw(8:0) &null;gdw(6:0) &null;0x100;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x06)

&null;hdw(8:0) &null;gdw(6:0) &null;0x180;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x05)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1C0;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x04)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1E0;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x03)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1F0;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x02)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1F8;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x11)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1FC;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x91)

&null;hdw(8:0) &null;gdw(6:0) &null;0x1FE;

ht(7:0) &null;0x39;

&null;

if(gt&null;0x97)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x38;

&null;

if(gt&null;0x96)

&null;hdw(8:0) &null;gdw(6:0) &null;0x80;

ht(7:0) &null;0x38;

&null;

if(gt&null;0x25)

&null;hdw(8:0) &null;gdw(6:0) &null;0xC0;

ht(7:0) &null;0x38;

&null;

if(gt&null;0xA5)

&null;hdw(8:0) &null;gdw(6:0) &null;0xE0;

ht(7:0) &null;0x38;

&null;

if(gt&null;0xA6)

&null;hdw(8:0) &null;gdw(6:0);

ht(7:0) &null;0x37;

&null;

if(gt&null;0x14)

&null;hdw(8:0) &null;gdw(6:0) &null;0x40;

ht(7:0) &null;0x37;

&null;

if(gt&null;0x24)

&null;hdw(8:0) &null;gdw(6:0) &null;0x50;

ht(7:0) &null;0x37;

&null;

if(gt&null;0x94)

&null;hdw(8:0) &null;gdw(6:0) &null;0x60;

ht(7:0) &null;0x37;

&null;

if(gt&null;0x23)

&null;hdw(8:0) &null;gdw(6:0) &null;0x70;

ht(7:0) &null;0x37;

&null;

if(gt&null;0xA3)

&null;hdw(8:0) &null;gdw(6:0) &null;0x78;

ht(7:0) &null;0x37;

&null;

dec_he

Input:

hw(9:0), x(3:0), y(15:0), z(15:0), ihw(9:0), ix(3:0), iy(15:0),

iz(15:0)

Output:

hedw(8:0), heht(7:0)

Description of Block dec_hc is shown before.

Since patterns of group &null;he&null; are the inverse of group &null;hc&null;, dec_he is

same as dec_hc with the input inverted. Note here that input hw of

dec_he is used as input ihw of dec_hc and input ihw of dec_he is used as

input hw of dec_hc. Similarly, xyz of dec_he is connected to ixyz of

dec_hc and vice versa.

hedw(8:0) &null; hdw(8:0) of dec_hc

Modify ht

heht(7:4) &null; &null;0, 1, 0, 0&null;

heht(3:0) &null; ht(3:0) of ht from dec_hc

dec_hf

Input:

ihw(9:0), ix(3:0), iy(15:0), iz(15:0)

Output:

hfdw(8:0), hfht(7:0)

Description of Block dec_hb is shown before.

Since patterns of group &null;ht&null; are the inverse of group &null;hb&null;, dec_hf is

same as dec_hb with the input inverted. Note that input ihw of dec_hf is

used as input hw of dec_hb. Similarly, ixyz of dec_hf is conndcted to

xyz of dec_hb.

hfdw(8:0) &null; hdw(8:0) of dec_hb

Modify ht

hfht(7:4) &null; &null;0, 1, 0, 1&null;

hfht(3:0) &null; ht(3:0) of ht from dec_hb

Hx Output Mux

Input:

hadw(7:0), hbdw(8:0), hcdw(8:0), hddw (8:0), hedw(8:0),

hfdw(8:0),

haht(7:0), hbht(7:0), hcht(7:0), hdht (7:0), heht(7:0), hfht(7:0),

gm(3:0), State(3:0)

Output:

hdw(8:0), Htype(7:0)

If(State< &null;4)

State&null; &null;4;

If(State> 4)

State&null; 4;

If(State&null; &null;4 or State&null; 4)

&null;

if(gm&null;9)

&null;hdw(8:0) &null;hadw(8:0);

Htype(7:0) &null;haht(7:0);

&null;

if(gm&null;0)

&null;hdw(8:0) &null;hbdw(8:0);

Htype(7:0) &null;hbht(7:0);

&null;

if(gm&null;1)

&null;hdw(8:0) &null;hcdw(8:0);

Htype(7:0) &null;hcht(7:0);

&null;

if(gm&null;2)

&null;hdw(8:0) &null;hddw(8:0);

Htype(7:0) &null;hdht (7:0);

&null;

if(gm&null;3)

&null;hdw(8:0) &null;hedw(8:0);

Htype(7:0) &null;heht(7:0);

&null;

&null;

If(State&null; &null;2 or State&null; 2)

&null;

if(gm&null;9)

&null;hdw(8:0) &null;hbdw(8:0);

Htype(7:0) &null;hbht(7:0);

&null;

if(gm&null;0)

&null;hdw(8:0) &null;hcdw(8:0);

Htype(7:0) &null;hcht(7:0);

&null;

if(gm&null;1)

&null;hdw(8:0) &null;hddw(8:0);

Htype(7:0) &null;hdht(7:0);

&null;

if(gm&null;2)

&null;hdw(8:0) &null;hedw(8:0);

Htype(7:0) &null;heht(7:0);

&null;

if(gm&null;3)

&null;hdw(8:0) &null;hfdw(8:0);

Htype(7:0) &null;hfht(7:0);

&null;

&null;

If(State&null; 0)

&null;

if(gm&null;9)

&null;hdw(8:0) &null;hcdw(8:0);

Htype(7:0) &null;hcht(7:0);

&null;

if(gm&null;0)

&null;hdw(8:0) &null;hddw(8:0);

Htype(7:0) &null;hdht(7:0);

&null;

if(gm&null;1)

&null;hdw(8:0) &null;hedw(8:0);

Htype(7:0) &null;heht(7:0);

&null;

if(gm&null;2)

&null;hdw(8:0) &null;hfdw(8:0);

Htype(7:0) &null;hfht(7:0);

&null;

&null;

&null;0056&null; FIG. 16 illustrates a block diagram of decoder output circuit 378. Decoder output circuit 378 includes a form 19-bit data word circuit 410. The data word circuit 410 receives the &null;g&null; word gdw, and &null;h&null; word hdw, &null;g&null; type, &null;h&null; type and state. Using calculations, the data word circuit 410 outputs the user data word I18:0. The operation of decoder output circuit 378 is performed according to the calculations in Table 18.

16

TABLE 18

Decoder Output

Input:

gdw(6:0), hdw(8:0), Gtype(7:0), Htype(7:0), State(3:0)

Output:

I(18:0)

if(State&null;&null;&null;4 or 4)

&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x19) )

&null;I(18:16) &null; &null;0, 0, 0&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&)ht&null;&null;0x29) )

&null;I(18:16) &null; &null;0, 0, 1&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x08) )

&null;I(18:15) &null; &null;0, 1, 0, 0&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0)hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x19) )

&null;I(18:15) &null; &null;0, 1, 0, 1&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x28) )

&null;I(18:15) &null; &null;0, 1, 1, 0&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x29) )

&null;I(18:15) &null; &null;0, 1, 1, 1&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x26)&&(ht&null;&null;0x39) )

&null;I(18:15) &null; &null;1, 0, 0, 0&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x96)&&(ht&null;&null;0x08) )

&null;I(18:14) &null; &null;1, 0, 0, 1, 0&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x05)&&(ht&null;&null;0x19) )

&null;I(18:14) &null; &null;1, 0, 0, 1, 0&null;;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x28) )

&null;I(18:14) &null; &null;1, 0, 1, 0, 0&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x26)&&(ht&null;&null;0x38) )

&null;I(18:14) &null; &null;1, 0, 1, 0, 1&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x25)&&(ht&null;&null;0x39) )

&null;I(18:14) &null; &null;1, 0, 1, 1, 0&null;;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x35)&&(ht&null;&null;0x49) )

&null;I(18:14) &null; &null;1, 0, 1, 1, 1&null;;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x06) )

&null;I(18:13) &null; &null;1, 1, 0, 0, 0, 0&null;;

&null;&null;I(12:6) &null; gdw(6:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x16) )

&null;I(18:13) &null; &null;1, 1, 0, 0, 0, 1&null;;

&null;&null;I(12:6) &null; gdw(6:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x04)&&(ht&null;&null;0x19) )

&null;I(18:13) &null; &null;1, 1, 0, 0, 1, 0&null;;

&null;&null;I(12:9) &null; gdw(3:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x26) )

&null;I(18:13) &null; &null;1, 1, 0, 0, 1, 1&null;;

&null;&null;I(12:6) &null; gdw(6:0);

I(5:0) &null; hdw(5:0):&null;&null;

&null;if( (gt&null;&null;0x14)&&(ht&null;&null;0x29) )

&null;I(18:13) &null; &null;1, 1, 0, 1, 0, 0&null;;

&null;&null;I(12:9) &null; gdw(3:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x26)&&(ht&null;&null;0x37) )

&null;I(18:13) &null; &null;1, 1, 0, 1, 0, 1&null;;

&null;&null;I(12:7) &null; gdw(5:0);

I(6:0) &null; hdw(6:0);&null;&null;

&null;if( (gt&null;&null;0x25)&&(ht&null;&null;0x38) )

&null;I(18:13) &null; &null;1, 1, 0, 1, 1, 0&null;;

&null;&null;I(12:8) &null; gdw(4:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x24)&&(ht&null;0x39) )

&null;I(18:13) &null; &null;1, 1, 0, 1, 1, 1&null;;

&null;&null;I(12:9) &null; gdw(3:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x35)&&(ht&null;&null;0x48) )

&null;I(18:13) &null; &null;1, 1, 1, 0, 0, 0&null;;

&null;&null;I(12:8) &null; gdw(4:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x05) )

&null;I(18:12) &null; &null;1, 1, 1, 0, 0, 1, 0&null;;

&null;&null;I(11:5) &null; gdw(6:0);

I(4:0) &null; hdw(4:0);&null;&null;

&null;if( (gt&null;&null;0x96)&&(ht&null;&null;0x06) )

&null;I(18:12) &null; &null;1, 1, 1, 0, 0, 1, 1&null;;

&null;&null;I(11:6) &null; gdw(5:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x15) )

&null;I(18:12) &null; &null;1, 1, 1, 0, 1, 0, 0&null;;

&null;&null;I(11:5) &null; gdw(6:0);

I(4:0) &null; hdw(4:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x16) )

&null;I(18:12) &null; &null;1, 1, 1, 0, 1, 0, 1&null;;

&null;&null;I(11:6) &null; gdw(5:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x03)&&(ht&null;&null;0x19) )

&null;I(18:12) &null; &null;1, 1, 1, 0, 1, 1, 0&null;;

&null;&null;I(11:9) &null; gdw(2:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x26) )

&null;I(18:12) &null; &null;1, 1, 1, 0, 1, 1, 1&null;;

&null;&null;I(11:6) &null; gdw(5:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x14)&&(ht&null;&null;0x28) )

&null;I(18:12) &null; &null;1, 1, 1, 1, 0, 0, 0&null;;

&null;&null;I(11:8) &null; gdw(3:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x25)&&(ht&null;&null;0x37) )

&null;I(18:12) &null; &null;1, 1, 1, 1, 0, 0, 1&null;;

&null;&null;I(11:7) &null; gdw(4:0);

I(6:0) &null; hdw(6:0);&null;&null;

&null;if( (gt&null;&null;0x24)&&(ht&null;&null;0x38) )

&null;I(18:12) &null; &null;1, 1, 1, 1, 0, 1, 0&null;;

&null;&null;I(11:8) &null; gdw(3:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x23)&&(ht&null;&null;0x39) )

&null;I(18:12) &null; &null;1, 1, 1, 1, 0, 1, 1&null;;

&null;&null;I(11:9) &null; gdw(2:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x33)&&(ht&null;&null;0x49) )

&null;I(18:12) &null; &null;1, 1, 1, 1, 1, 0, 0&null;;

&null;&null;I(11:9) &null; gdw(2:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x04) )

&null;I(18:11) &null; &null;1, 1, 1, 1, 1, 0, 1, 0&null;;

&null;&null;I(10:4) &null; gdw(6:0);

I(3:0) &null; hdw(3:0);&null;&null;

&null;if( (gt&null;&null;0x96)&&(ht&null;&null;0x05) )

&null;I(18:11) &null; &null;1, 1, 1, 1, 1, 0, 1, 1&null;;

&null;&null;I(10:5) &null; gdw(5:0);

I(4:0) &null; hdw(4:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x14) )

&null;I(18:11) &null; &null;1, 1, 1, 1, 1, 1, 0, 0&null;;

&null;&null;I(10:4) &null; gdw(6:0);

I(3:0) &null; hdw(3:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x15) )

&null;I(18:11) &null; &null;1, 1, 1, 1, 1, 1, 0, 1&null;;

&null;&null;I(10:5) &null; gdw(5:0);

I(4:0) &null; hdw(4:0);&null;&null;

&null;if( (gt&null;&null;0x05)&&(ht&null;&null;0x16) )

&null;I(18:11) &null; &null;1, 1, 1, 1, 1, 1, 1, 0&null;;

&null;&null;I(10:6) &null; gdw(4:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x24)&&(ht&null;&null;0x37) )

&null;I(18:11) &null; &null;1, 1, 1, 1, 1, 1, 1, 1&null;;

&null;&null;I(10:7) &null; gdw(3:0);

I(6:0) &null; hdw(6:0);&null;&null;

&null;

&null;if(State&null;&null;&null;2 or 2)

&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x19) )

&null;I(18:16) &null; &null;0, 0, 0&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x29) )

&null;I(18:16) &null; &null;0, 0, 1&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x39) )

&null;I(18:16) &null; &null;0, 1, 0&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x96)&&(ht&null;&null;0x19) )

&null;I(18:15) &null; &null;0, 1, 1, 0&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null;hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x28) )

&null;I(18:15) &null; &null;0, 1, 1, 1&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x29) )

&null;I(18:15) &null; &null;1, 0, 0, 0&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x38) )

&null;I(18:15) &null; &null;1, 0, 0, 1&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x39) )

&null;I(18:15) &null; &null;1, 0, 1, 0&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x26)&&(ht&null;&null;0x49) )

&null;I(18:15) &null; &null;1, 0, 1, 1&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x28) )

&null;I(18:14) &null; &null;1, 1, 0, 0, 0&null;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x05)&&(ht&null;&null;0x29) )

&null;I(18:14) &null; &null;1, 1, 0, 0, 1&null;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x37) )

&null;I(18:14) &null; &null;1, 1, 0, 1, 0&null;;

&null;&null;I(13:7) &null; gdw(6:0);

I(6:0) &null; hdw(6:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x38) )

&null;I(18:14) &null; &null;1, 1, 0, 1, 1&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x26)&&(ht&null;&null;0x48) )

&null;I(18:14) &null; &null;1, 1, 1, 0, 0&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x35)&&(ht&null;&null;0x59) )

&null;I(18:14) &null; &null;1, 1, 1, 0, 1&null;;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x16) )

&null;I(18:13) &null; &null;1, 1, 1, 1, 0, 0&null;;

&null;&null;I(12:6) &null; gdw(6:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x26) )

&null;I(18:13) &null; &null;1, 1, 1, 1, 0, 1&null;;

&null;&null;I(12:6) &null; gdw(6:0);

I(5:0) &null; hdw(5:0);&null;&null;

&null;if( (gt&null;&null;0x05)&&(ht&null;&null;0x28) )

&null;I(18:13) &null; &null;1, 1, 1, 1, 1, 0&null;;

&null;&null;I(12:8) &null; gdw(4:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x04)&&(ht&null;&null;0x29) )

&null;I(18:13) &null; &null;1, 1, 1, 1, 1, 1&null;;

&null;&null;I(12:9) &null; gdw(3:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;

&null;if(State&null;&null;0)

&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x29) )

&null;I(18:16)&null;0, 0, 0&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x39) )

&null;I(18:16)&null;0, 0, 1&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x49) )

&null;I(18:16)&null;0, 1, 0&null;;

&null;&null;I(15:9) &null; gdw(6:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x97)&&(ht&null;&null;0x28) )

&null;I(18:15) &null; &null;0, 1, 1, 0&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x96)&&(ht&null;&null;0x29) )

&null;I(18:15) &null; &null;0, 1, 1, 1&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x38) )

&null;I(18:15) &null; &null;1, 0, 0, 0&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x39) )

&null;I(18:15) &null; &null;1, 0, 0, 1&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x17)&&(ht&null;&null;0x48) )

&null;I(18:15) &null; &null;1, 0, 1, 0&null;;

&null;&null;I(14:8) &null; gdw(6:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x49) )

&null;I(18:15) &null; &null;1, 0, 1, 1&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x59) )

&null;I(18:15) &null; &null;1, 1, 0, 0&null;;

&null;&null;I(14:9) &null; gdw(5:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x96)&&(ht&null;&null;0x28) )

&null;I(18:14) &null; &null;1, 1, 0, 1, 0&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x07)&&(ht&null;&null;0x37) )

&null;I(18:14) &null; &null;1, 1, 0, 1, 1&null;;

&null;&null;I(13:7) &null; gdw(6:0);

I(6:0) &null; hdw(6:0);&null;&null;

&null;if( (gt&null;&null;0x06)&&(ht&null;&null;0x38) )

&null;I(18:14) &null; &null;1, 1, 1, 0, 0&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x05)&&(ht&null;&null;0x39) )

&null;I(18:14) &null; &null;1, 1, 1, 0, 1&null;;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;if( (gt&null;&null;0x16)&&(ht&null;&null;0x48) )

&null;I(18:14) &null; &null;1, 1, 1, 1, 0&null;;

&null;&null;I(13:8) &null; gdw(5:0);

I(7:0) &null; hdw(7:0);&null;&null;

&null;if( (gt&null;&null;0x25)&&(ht&null;&null;0x59) )

&null;I(18:14) &null; &null;1, 1, 1, 1, 1&null;

&null;&null;I(13:9) &null; gdw(4:0);

I(8:0) &null; hdw(8:0);&null;&null;

&null;

&null;0057&null; In summary, a method (200) of encoding digital information in a system is provided. The method (200) includes receiving (202) a sequence of user bits and calculating (204) a running digital sum (RDS) of the system. In addition, a code word is generated (214) based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range.

&null;0058&null; Another embodiment of the present invention relates to a system (100, 250) for generating a code word from a sequence of user bits. The system (100, 250) has an input circuit (254) adapted to receive the sequence of user bits and a calculation circuit (332) adapted to calculate the running digital sum (RDS) of the system. An encoder (250) is also provide that is adapted to generate a code word based on the sequence of user bits and the RDS of the system to maintain the RDS of the system calculated with the code word to within a selected range.

&null;0059&null; It is to be understood that even though numerous characteristics and advantages of various embodiments of the invention have been set forth in the foregoing description, together with details of the structure and function of various embodiments of the invention, this disclosure is illustrative only, and changes may be made in detail, especially in matters of structure and arrangement of parts within the principles of the present invention to the full extent indicated by the broad general meaning of the terms in which the appended claims are expressed. For example, the particular elements may vary depending on the particular application for the communication system while maintaining substantially the same functionality without departing from the scope and spirit of the present invention. In addition, although the preferred embodiment described herein is directed to a coding system for a disc drive, it will be appreciated by those skilled in the art that the teachings of the present invention can be applied to system such as satellite communications and cellular phones, without departing from the scope and spirit of the present invention.

QQ群二维码
意见反馈