//Как я и говорил, с данными я не могу ничего сделать. Они мне идут "как есть". Схема предложенная в книге "Синхронизация в телекоммуникационных сетях" на стр. 244 рис 9.7 работает не так как хотелось бы - иногда проскакивает лишний клок. Я думаю что это из за несовпадения частот данных и задающего кварца. Может стоит увеличить частоту кварца или это не поможет?// Как схема, объясняющая принцип работы , она верна. Она действительно выделяет синхроимпульсы из потока данных, вот только без данных эти синхроимпульсы никому не нужны, а эти данные не имеют начала и конца. Фактически это только инструмент подстройки внутренних часов по любому перепаду во входном потоке данных. А значит и поток данных может быть только манчестерским, что позволяет подстраивать эти часы в каждом бите входной последовательности. При этом в начале посылки обязательно должен быть синхроимпульс длительностью в три такта битовой посылки. Если данные принимать на сдвигающий регистр минимального размера в 6 разрядов на удвоенной относительно несущей частоте, то значения 000111 или 111000 однозначно говорит о наличии синхроимпульса (в Манчестере таких данных не бывает), а дальше можно отсчитать необходимое количество данных. Это четные или нечетные отсчеты сдвигающего регистра. Вот фактически таже схема. module decoder_manchester ( input in_data, // 1 mHz input clk, // 12 mHz output [5:0] out_data );
reg [2:0] shift_data; reg [2:0] ct; reg [5:0] shift_rg;
wire s_clr;
always @(posedge clk) begin shift_data <= {shift_data[1:0], in_data}; end
assign s_clr = shift_data[1] ^ shift_data[2];
always @(posedge clk) // делитель на 6 begin if (s_clr) ct <= 3'h0; else if (ct == 3'h5) ct <= 3'h0; else ct <= ct + 1'b1; end
always @(posedge clk) begin if (ct == 3'h2) // 2 mHz shift_rg <= {shift_rg[4:0], shift_data[2]}; end
assign out_data = shift_rg;
endmodule Если использовать принцип приема данных как в rs232, то без старт стоповых битов тоже не обойтись. Понятно, что здесь синхронизируются по середине стартового бита на всю длину посылки и нарезают биты на несущей частоте. Уровень молчания это стоп бит (инверсный стартовому). Если нет возможности каким либо образом идентифицировать начало посылки данных, Вы будете терять данные. Исходя из этих соображений если поток манчестерский, то для 2Мбит 16 мГц маловато.
|