gosu-art 0 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба [gosu-art, не понял, что за сигнал diff_i ? Что за строб такой, как он получен из sw_d_i? Писать за меня код не обязательно, можно просто на словах :-) Да это просто из разных модулей. Data сразу подается на вход регистра сдвига, который тактируется от D^S. Этим клоком еще пара счетчиков "запитаны". Потом бросается все в ФИФО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
troiden 0 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба У Actel есть небольшой документ как раз по поводу DS-кодирования: http://www.actel.com/documents/RTAXS_Spacewire_AN.pdf По аналогии делался кодер-декодер под Xilinx, работоспособность проверялась до частоты 250 МГц на входе кодера. В декодере пришлось размещать триггера вручную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба 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 вы преспокойно на частоте обработки вычитываете данные. Таким образом, вы одновременно и выравниваете потоки и переносите данные из одного клокового домена в другой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба des00 Ммм, а как я буду давить дребезг? Я так понимаю, что дребезг имеется ввиду фронтов сигнала rx_s^rx_d ? Ведь они не идеально одновременно переключаются, то есть фронты будут не гладкие, а из волосни всякой, не? Судя по картинке, фронты rx_s и rx_d не совпадают и близко не стоят. Судя по всему - это заложено в протоколе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 5 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба Допустим системный клок 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба И 400 мгц внутри. Это 4х от rx_clk=rx_s^rx_d имелось в виду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 5 13 апреля, 2012 Опубликовано 13 апреля, 2012 · Жалоба Это 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MadMakc 0 28 апреля, 2012 Опубликовано 28 апреля, 2012 · Жалоба а вариант с расщиплением фазы не рассмативали? То есть не увеличивать частоту до 400 МГц, а взять 100 Мгц, на DCM получить 4 фазы клока. И поставить анализатор - на какой фазе более правдоподобные данные, на той фазе клока и работает приемная часть ПЛИС. Правда мне самому не нравится в данной реализации мультиплексор на 4 клока. вроде как потоха ПЛИС это реализовать позволяют, правда на трех мультиплексорах. Никто на практике такое не пробывал реализовывать, случайно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 28 апреля, 2012 Опубликовано 28 апреля, 2012 · Жалоба Никто на практике такое не пробывал реализовывать, случайно? На практике пробовали, но только не через DCM, а через IDELAY. Проблема в том, что под каждую конкретную ситуацию будет свое доверительное окно. Имеется ввиду разная длина соединительных кабелей, термоциклы и прочее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
troiden 0 28 апреля, 2012 Опубликовано 28 апреля, 2012 · Жалоба Не понимаю, зачем такие танцы с бубном? Зачем усложнять себе жизнь и гнать обработку на 400 МГц, когда можно работать на 100? Это в асинхронных линиях приходится кратно повышать частоты чтоб правильно подобрать фазу, но тут-то у нас тактовый сигнал спокойно восстанавливается из входного потока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться