Sign in to follow this  
Followers 0
zygot

Differential PMOD Challenge

78 posts in this topic

Correction,

My reference to the "rule of thumb" wasn't a reference to a human digit... I meant to say that propagation delay on a trace on top of an FR4 PCB ( without vias or connectors) is about 1 ns/foot. Yes, when I type thumbs rule and a foot is in my mouth.... live with it. ( I have to...)

Share this post


Link to post
Share on other sites

@zygot,

1ns/foot is a measure I am familiar with.  1ns/inch was surprising me ... but, not having built circuit boards, I was holding my tongue lest there be some magical physical phenomena taking place within a circuit bard that I am not familiar with.

But, looking back on the problem, I just got a multiplicative scrambler up and running.  For those not familiar with scramblers, there's a wonderful wikipedia page on the topic, and I even implemented the V.34 scrambler referenced on the page.

So, thinking on the topic of synchronization, there are a couple basic approaches:

  1. Transmit the clock on a line traveling next to the data.  This works as long as you can guarantee the two wires (clock and data) are close to the data bit duration in length.  Incidentally, the page you cited above regarding getting an LVDS receiver to work highlights all of the difficulties with this approach: each individual data line needs to be individually "sycnronized" to the clock, this synchronization can cost added or lost bits, etc.  What a PAIN!
  2. Use a "start bit" transition to synchronize the receiver.  This works for short transmit words (UART), and relies upon the receiver being able to generate a clock "close" to the one being transmitted--close enough that no errors will incur until the next start bit resynchronizes the clocks again.
  3. Embed the clock within the data.  For example, you could split your bit period up into two periods, one containing a clock and one containing data.  I was first introduced to this approach as it was used in Modified Frequency Modulation within disk drives.
  4. Ensure that the data has enough transitions that a clock can be recovered from the data itself.  (This is going to be my approach B))This involves encoding the data in such a fashion as to be able to recover the clock from the data later.
    1. One common method of doing this is 8b10b encoding, where 8-bits of data are re-encoded as 10-bits of data with guaranteed clock synchronizations within them.  This approach has been used in gigabit ethernet and I'm sure dozens of other applications.
    2. Another approach uses a scrambler.  The goal with using the scrambler is to guarantee that there are enough transitions within the data itself to recover a clock from the data.  Of these, there are two basic types: additive and multiplicative.  The result of the scrambler is that the bits then crossing the wire can be treated as statistically independent and random '1' or '0' with probability 1/2, and thus have some nice properties associated with them.
      1. Additive scramblers work by "adding" a stream of independent pseudorandom bits (1+1=0, 0+1 = 1, 0+0=0, etc) to the data stream.  The difficult part of an additive randomizer is synchronizing to the random stream in the receiver, but it offers the nice advantage of not artificially increasing the error rate in poor SNR conditions.
      2. Multiplicative scramblers work by feeding the data bits into the generator for the scrambler.  (The wiki page offers a better explanation.)  The difficulty with these is, in the case of the V.34 scrambler, any single bit error becomes 3 bit errors.  The advantage is that you don't need to add data to the stream for synchronization, these scrambler types are completely self-synchronizing.

So, my plan is to use a multiplicative scrambler to place enough transitions within the data stream that a clock can be regenerated from it.   Hence, if you try to calculate that expected value I mentioned earlier, you should be able to assume statistically random and independent bits being communicated.  (They never are, but the assumption works pretty well.)

Dan

Share this post


Link to post
Share on other sites

I've used scramblers, I've used symbol encoding. I've never though of them as alternatives as I've always used them together. I have to think about what you're doing for a while. The easiest way will be when I can analyse your working submission. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0