Перейти к содержанию
    

Высокоскоростные приемники

[gosu-art, не понял, что за сигнал diff_i ? Что за строб такой, как он получен из sw_d_i? Писать за меня код не обязательно, можно просто на словах :-)

Да это просто из разных модулей. Data сразу подается на вход регистра сдвига, который тактируется от D^S. Этим клоком еще пара счетчиков "запитаны". Потом бросается все в ФИФО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Actel есть небольшой документ как раз по поводу DS-кодирования:

http://www.actel.com/documents/RTAXS_Spacewire_AN.pdf

По аналогии делался кодер-декодер под Xilinx, работоспособность проверялась до частоты 250 МГц на входе кодера.

В декодере пришлось размещать триггера вручную.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Mad_max, Спасибо за код! Но мне по прежнему непонятна идея

1) Зачем нужен буфер BUFG ? Почему нельзя сразу написать rx_clk=rx_s^rx_d ?

Чтобы восстановленный клок "лег" по глобальным тактовым линиям fpga.

2) Я не понимаю о каком ФИФО идет речь, ведь data_arr это же и есть фифо со сдвигом на 2 каждый такт? Читать вы имеете ввиду

always @(posedge sys_clk )
        begin
            rx_data<=data_arr[9];
        end

Использование FIFO хорошая практика для решения задачи выравнивания потоков и переноса данных из одного клокового домена в другой.

То есть, если данные приходят с одной "скоростью", а обрабатывать вы их предполагаете с другой, то вам необходимо выровнять потоки и пересадить данные на другой клок.

FIFO в общем виде имеет два тактовых сигнала, один на запись, другой на чтение, эти сигналы могут быть асинхронны друг относительно друга.

Принимая данные с одной битовой скоростью, это может быть сопровождающий данные тактовый сигнал, или восстановленный сигнал,

как в ds кодирование, вы с помощью этого клока записываете принятые данные в FIFO. Объем FIFO выбираете исходя из требований обработки данных.

Далее по заполнению FIFO вы преспокойно на частоте обработки вычитываете данные.

Таким образом, вы одновременно и выравниваете потоки и переносите данные из одного клокового домена в другой.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des00 Ммм, а как я буду давить дребезг? Я так понимаю, что дребезг имеется ввиду фронтов сигнала rx_s^rx_d ? Ведь они не идеально одновременно переключаются, то есть фронты будут не гладкие, а из волосни всякой, не?

 

Судя по картинке, фронты rx_s и rx_d не совпадают и близко не стоят.

Судя по всему - это заложено в протоколе.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Допустим системный клок 100МГц

 

И 400 мгц внутри.

Чем хуже предложенного выше

module space_wire_decoder
(
input  clk_x4,
input  data_space,
input  strob_space,
output data_space_out,
output ena_data_space
);


reg [4:0] shift_data_space = 5'd0;
reg [4:0] shift_strob_space = 5'd0;


always @(posedge clk_x4)
begin
shift_data_space <= {shift_data_space[3:0], data_space};
shift_strob_space <= {shift_strob_space[3:0], strob_space};
end

assign data_space_out = shift_data_space[2],
         ena_data_space = (shift_data_space[4] ^ shift_data_space[3])
                          || (shift_strob_space[4] ^ shift_strob_space[3]);
                        
endmodule

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это 4х от rx_clk=rx_s^rx_d имелось в виду?

 

Да. Чем это от манчестера отличается. Да ничем. За счет двух проводов пропускную способность увеличили.

привязка - все равно по перепадам.

Вот набросал формирование (без привязки всяким заголовкам)

module space_wire
(
input            clk,
input [7:0] data_in,
input            sload_data_in,
output        data_space,
output        strob_space
);


reg [7:0] shift_a = 8'd0;
reg [1:0] shift_b = 2'd0;
reg         data_space_rg = 1'b0;
reg         strob_space_rg = 1'b0;


always @(posedge clk)
begin
if (sload_data_in)            shift_a <= data_in;
else                                shift_a <= {1'b0, shift_a[7:1]};

shift_b <= {shift_b[0], shift_a[0]};
data_space_rg <= shift_b[0];

if (~(shift_b[1] ^ shift_b[0]))        strob_space_rg <= ~strob_space_rg;
end

assign data_space = data_space_rg,
        strob_space = strob_space_rg;

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вариант с расщиплением фазы не рассмативали?

 

То есть не увеличивать частоту до 400 МГц, а взять 100 Мгц, на DCM получить 4 фазы клока. И поставить анализатор - на какой фазе более правдоподобные данные, на той фазе клока и работает приемная часть ПЛИС.

Правда мне самому не нравится в данной реализации мультиплексор на 4 клока. вроде как потоха ПЛИС это реализовать позволяют, правда на трех мультиплексорах.

 

Никто на практике такое не пробывал реализовывать, случайно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никто на практике такое не пробывал реализовывать, случайно?

На практике пробовали, но только не через DCM, а через IDELAY.

Проблема в том, что под каждую конкретную ситуацию будет свое доверительное окно.

Имеется ввиду разная длина соединительных кабелей, термоциклы и прочее.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понимаю, зачем такие танцы с бубном? Зачем усложнять себе жизнь и гнать обработку на 400 МГц, когда можно работать на 100? Это в асинхронных линиях приходится кратно повышать частоты чтоб правильно подобрать фазу, но тут-то у нас тактовый сигнал спокойно восстанавливается из входного потока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...