This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6670 Viterbi Coprocessor(VCP2) configuration

Guru 15510 points

Hi,

I have questions about C6670 Viterbi Coprocessor(VCP2).

The questions are about setting up the "generator polynomials(Gn)"value to the VCP2 control registers which is needed for VCP2 operation.

And the questions are related to the setup at the time of encode/decode written in the WiMAX standard(802.16-2009.pdf).

////////////////////////////////////////////  

IEEE Standard for Local and metropolitan area networks  

Part 16: Air Interface for Broadband Wireless Access Systems)

////////////////////////////////////////////

 

Question#1:

In WiMAX Standard(802.16-2009.pdf) page.1032 "8.4.9.2.1 Convolutional coding (CC)", generator polynomials(G0, G1) are written.

If setting the above G0 and G1 to the VCP2 Control Register, is following VCP2 Control Register's value correct ?

If not correct, what is the correct value to setup to the VCP2 Control Register?

Condition:

 rate = 1/2  

G1 = 171[oct]  

G2 = 133[oct]  

 

VCP2 Control Register Value:  

VCPIC0 = 0x0000D46C  

 

By the way, Encode's diagram(Figure 287-Convolutional encoder of rate 1/2) are written on page.1032 of WiMAX Standard(802.16-2009.pdf).

 

Question#2:

To set the constraint length(K) to the VCP2, which parameter should I set?

Or, does VCP2 calculate internally from the value of G1 and G2?

 

Question#3:

In Viterbi Coprocessor(VCP2) User Guide(sprugv6a) page.33 Table 3-4 VCP2 Input Configuration Register 0(VCPIC0) Field Descriptions,

there are note written as following:

///////////////////////////////////////////////////////////////////

1. The polynomial generators are 9-bit values defined as G(z) = b8z-8 + b7z-7 + b6z-6 + b5z-5 + b4z-4 + b3z-3 + b2z-2 + b1z-1 + b0,

but only 8 bits are passed in the POLYn bitfields so that b1 is the most significant bit and b8 is the least significant bit (b0 is not passed,

but set by the internal VCP hardware).

///////////////////////////////////////////////////////////////////

Does this mean that "b0" is always set to "1" ?

best regards,

g.f.

  • Hi,
    We are working with expert to answer this post. We will get back to you shortly. Thank you for your patience.
  • (Not a TI employee, but I have looked at this peripheral before.)

    #1: Depending on whether that standard describes G1 and G2 with MSB or LSB at the input side of the shift register, the value for VCPIC0 could be either 0x6CE4 or 0xB43C. (That, and the next paragraph, assumes the output from G1 is transmitted before G2. If G2 goes first, swap the bytes within those values and the names POLY0/POLY1 below.)

    In binary, G1 is 0b1111001 and G2 is 0b1011011. Because the constraint length appears to be 7, the register fields will have two unused LSBs, which I will write as (00). If the MSB of these values is at the input side of the shift register, POLY0 would be 0b111001(00) and POLY1 would be 0b011011(00) -- drop the MSBs, and then pad with zeros. If the LSBs of G1 and G2 are at the input side, POLY0 would be 0b001111(00) and POLY1 would be 0b101101(00) -- drop the LSBs, bit reverse the polynomials, and then pad with zeros.

    There are some comments in the PDK source code about the default polynomials for different protocols, although I do not remember which ones have the values explicitly listed.

    #2: VCP2 does calculate the constraint length internally. At least in SPRUGV6A, there is a note below Table 3-4 that says "The VCP2 uses the number of least-significant bits that are zero in POLY0 to determine the constraint length."

    #3: b0 will always be 1. Logic designers often use "set" as shorthand for "set to 1" and "clear" for "clear to 0". There's probably some mathematical reason (that I don't know) for choosing generator polynomials with that constraint.
  • Hi Michael,
    Thank you for your contribution to e2e.
  • Hello,

    Michael, thanks for your helpful response.

    As Michael pointed out, the correct value for WiMAX is 0x6CE4. Please refer to the folliowing thread which links to a VCP2 example for a tail-biting WiMAX decoder.

    https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/337358

     

    Regards

    -Nitin