On Wed, 03 Aug 2022 14:48:12 -0700, John Larkin
All very low bandwidth stuff. Is it required to transmit absolute
values, or is just the "AC" part enough?
Sounds like for instance actual strain values are desired.
>>
>>Is there a maximum latency and latency jitter requirement?
>
>Neither, actually. I just want to transport the ADC output correctly.
OK.
>>
>>One-bit delta samples are usually signed, so the minimum is two
>>symbols. If the voltage being sent is zero, then we'll get a steady
>>+,-,+,-,+, stream, which will have very strong RF spurs and thus
>>emissions, so need to break this up.
>
>The ADC has a one-bit output over +-320 mV input, and averages 50%
>duty cycle at 0 volts in. I just want to transport that bit over a
>fiber link.
So the ADC output is a signed bit per sample.
>>
>>A zero symbol makes it three, and an idle symbol, makes it four
>>symbols.
>>
>>
>>>>Gigabit Ethernet does something like this, only grander, with two
>>>>patterns for every possible symbol to be sent, and they track current
>>>>DC balance, and choose which pattern to use that will reduce the
>>>>running DC balance.
>>>
>>>8b10b does elaborate long-term DC balancing like that. Too much work.
>>>
>>>SFPs usually tolerate a little DC imbalance. You can send PWM at, say,
>>>35% to 65%.
>>
>>Yes, too much trouble. But if you use table lookup, you can get close
>>enough.
>
>I don't want an FPGA or a uP in this box. All my coder-people are too
>busy on other projects now. So, a few gates and flipflops.
OK. This too can be done, given a large ratio between optical bit
rate and ADC bitrate.
The AGC in the SFP is pretty fast, but the optical bitrate must be
much faster, or the AGC will flatten the desired signal. The SFP
datasheet should define the AGC response speed.
So, pick a convenient optical signaling (flash) rate well above the
AGC reaction speed, so you will be able to recover the sent pattern at
the SFP output.
Here is one possible design:
Choose a ADC sample rate a fraction of the optical rate. The fraction
is determined by choosing orthogonal codes to represent +1, zero, or
-1 ADC outputs to be sent. Also need a frame-start symbol.
The orthogonal codes are chosen from the standard Gold Codes:
.<
https://en.wikipedia.org/wiki/Gold_code>
The codes have odd length, and are fairly close to balanced, so one
ought to be able to find some truncated Gold codes of even length
(drop last bit) that are exactly balanced. We need only four such
symbol codes, and a 16-bit code would allow the optical rate to be 16
times the code (ADC output) rate.
There must be a steady stream of ADC symbols, even if ADC output is
zero, to keep the SFP AGC stable.
Generation. Drive a 16-line demux with the optical clock. Make or
don't make connections from the demux to an adder, as dictated by the
symbol to be sent. The adder output is used to drive the SFP TX
input.
Reception. Lock a phase-lock loop to the optical flash rate, to
recover the optical clock.
Have one correlator per symbol type, all running in parallel. Given
the near-perfect correlation behavior of Gold codes, the correlator
output will be roughly one unit amplitude except at the pattern
center, where the peak will be about 16 units, so a threshold set at 8
units should enable perfect recovery.
The frame sync symbol is used if we are switching between a reference
voltage and the strain-gage output voltage, to mark where reference
starts. May need an ref-end symbol.
If no correlator peaks for more than a few symbol periods, complain.
The SFP will also tell you if any optical power is being received, if
I recall.
Design the receiver first, as it's usually the harder of the two, then
design the transmitter to make the receiver happy.
Joe Gwinn