zvs 0 12 августа, 2011 Опубликовано 12 августа, 2011 · Жалоба 1. Модуль align_pll в нормальном режиме без всяких сдвигов? Да, проект с одним каналом и pll приаттачил. 2. Фронт входных частоты и первой посылки данных совпадает или изначально смещен и если смещен, то почему это не отображается в ограничениях и нет на временной диаграмме? Изначально смещён. Я дубина, выложил не тот sdc... Поправил в том посте. Теперь понятно? 3. -clock_fall -это что за ограничение, забыл? Это говорит TQ, что input_delay применяется к заднему фронту клока. deserializer_ddio_pll.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 15 августа, 2011 Опубликовано 15 августа, 2011 · Жалоба Между прочим, пробовали собрать проект без привязки сигналов к пинам? Вдруг там какой-нибудь сигнал попадает на неподходящий пин. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zvs 0 25 августа, 2011 Опубликовано 25 августа, 2011 · Жалоба Между прочим, пробовали собрать проект без привязки сигналов к пинам? Мы её (или она нас???) испробовали уже во всех позициях, поверьте... Резюмирую: проект мы таки завели на 65 МГц, но не на ddio, из чего сделали вывод что благословенные ddio в Arria II GX не работают на частоте 65*12/2 =390МГц. Аналогичная ситуация со стратиксами 3-4 и даже Arria II GZ на частоте 80*12/2 =480МГц DDR, согласно сведениям TQ. А теперь для истории, и вообще, может кому-то окажется полезно, расскажу как завели. Код для десериализатора переписали вот так: module adc_deserializer(s_adc_clk, s_adc_frame, s_adc_data, adc_data, en_adc_data); parameter WIDTH_ADC_DATA = 12;//ширина шины данных АЦП input s_adc_clk; input s_adc_frame; input s_adc_data; output [WIDTH_ADC_DATA-1:0]adc_data; output en_adc_data; reg n_in_rx, in_rx_p, in_rx_n; reg [WIDTH_ADC_DATA/2-1:0]pos_shift_reg, odd_data; reg [WIDTH_ADC_DATA/2-1:0]neg_shift_reg, evn_data; reg en_adc_frame, en_odd_data, en_evn_data; wire s_adc_clk; reg en_adc_data; wire [WIDTH_ADC_DATA-1:0]adc_data; genvar i; generate for(i=0; i<WIDTH_ADC_DATA/2; i=i+1) begin: assign_adc_data assign adc_data[2*i+1:2*i] = {odd_data[i], evn_data[i]}; end endgenerate always @(posedge s_adc_clk) begin pos_shift_reg <= {pos_shift_reg, in_rx_p}; neg_shift_reg <= {neg_shift_reg, in_rx_n}; en_adc_frame <= s_adc_frame; en_odd_data <= en_adc_frame; en_evn_data <= en_odd_data; en_adc_data <= !en_odd_data; if(en_adc_frame && !en_odd_data) odd_data <= pos_shift_reg; if(en_odd_data && !en_evn_data) evn_data <= neg_shift_reg; end//always always @(posedge s_adc_clk) begin in_rx_p <= s_adc_data; in_rx_n <= n_in_rx; end//always always @(negedge s_adc_clk) begin n_in_rx <= s_adc_data; end //always endmodule То бишь сделали двухфронтовый защёлкиватель, но без ddio c реализацией на логике. Кажный канальчик объединили в общий 8-канальный десериализатор: module adc_deserializers(s_adc_clk, s_adc_frame, s_adc_data, adc_data, en_adc_data); parameter NUM_CHANNEL = 8;//Количество каналов parameter WIDTH_ADC_DATA = 12;//Ширина шины данных АЦП input s_adc_clk; input s_adc_frame; input [NUM_CHANNEL-1:0]s_adc_data; output [WIDTH_ADC_DATA*NUM_CHANNEL-1:0]adc_data; output [NUM_CHANNEL-1:0]en_adc_data; adc_deserializer #( .WIDTH_ADC_DATA(WIDTH_ADC_DATA)) adc_deserializer[NUM_CHANNEL-1:0]( .s_adc_clk(s_adc_clk), .s_adc_frame(s_adc_frame), .s_adc_data(s_adc_data), .adc_data(adc_data), .en_adc_data(en_adc_data)); endmodule TQ сказал +------------------------------------+ ; Fast 900mV 0C Model Setup Summary; +------------+-------+---------------+ ; Clock; Slack; End Point TNS; +------------+-------+---------------+ ; clk_480MHz; 0.125; 0.000; +------------+-------+---------------+ +------------------------------------+ ; Fast 900mV 0C Model Hold Summary; +------------+-------+---------------+ ; Clock; Slack; End Point TNS; +------------+-------+---------------+ ; clk_480MHz; 0.135; 0.000; +------------+-------+---------------+ Далее воткнули этот кусочек десериалайзера в общий проект - полезли отрицательные слаки. Из положения вышли, создав для десериалайзера каждого канала Design Partition, и воткнув их Post-fit в основной проект. Запас по слакам стал меньше, но жить тем не менее можно. Спасибо всем, кто пытался помочь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться