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

Один IOB может управлять одним IDDR

Столкнулся с такой штукой. Есть два модуля, которые на вход получают  одни и те же данные  и дальше их пакуют соответствующим образом. Вся система работает на 100 МГц, а данные надо принимать на 200 МГц => необходимо ставить IDDR.
Т.к. один IOB может управлять одним IDDR, то решил для этого внутри каждого модуля поставить IBUF.  Но проблема не решается.

Все это реализовано в ZYNQ.
 

Подскажите как можно избавиться от этой проблемы. Свести все в один модуль не вариант.

Изменено пользователем big_ben

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


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

Если это один и тот же входной пин (как я понял из контекста), то никак. Только так: IBUF => IDDR => два разных модуля

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


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

21 minutes ago, gosha-z said:

Как-то сумбурно все. Диаграмму бы нарисовали что-ли...

Оранжевым выделена линия, по которой приходят данные с pad.  В самих модулях есть IDDR  вида:
 

 IDDR_inst_data_hv_control : IDDR  
        generic map (
            DDR_CLK_EDGE => "OPPOSITE_EDGE",            --! "OPPOSITE_EDGE", "SAME_EDGE" or "SAME_EDGE_PIPELINED" 
            INIT_Q1 => '0',                             --! Initial value of Q1: '0' or '1'
            INIT_Q2 => '0',                             --! Initial value of Q2: '0' or '1'
            SRTYPE  => "SYNC")                          --! Set/Reset type: "SYNC" or "ASYNC" 
        port map (
            Q1 => data_art2_odd(i),                     --! 1-bit output for positive edge of clock
            Q2 => data_art2_even(i),                    --! 1-bit output for negative edge of clock
            C  => clk_art2_x1,                          --! 1-bit clock input
            CE => '1',                                  --! 1-bit clock enable input
            D  => data_art2(i),                         --! 1-bit DDR data input
            R  => '0',                                  --! 1-bit reset
            S  => '0'                                   --! 1-bit set
        );

Если все использовать в таком виде, то вылетит ошибка вида:
    [Place 30-457] The instance 'data_art2[5]_IBUF_inst' part of an IOB is driving multiple IDDR instances. One IOB can drive only one IDDR which can be packed into ILOGIC. The IDDR instances involved are:
    design_1_i/axi_data_provider_0/U0/Inst_data_provider/IDDR_inst_data_gen[5].IDDR_inst_data_art2
    design_1_i/axi_hv_control_0/U0/Inst_form_hv/IDDR_inst_data_gen_hv_control[5].IDDR_inst_data_hv_control

Думал поставить перед IDDR буфер IBUF, но это тоже не помогает.

1.jpg

 

 

14 minutes ago, alexadmin said:

Если это один и тот же входной пин (как я понял из контекста), то никак. Только так: IBUF => IDDR => два разных модуля

Понял, спасибо

Изменено пользователем big_ben

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


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

Приветствую!

On 4/23/2019 at 6:23 PM, big_ben said:

Подскажите как можно избавиться от этой проблемы. Свести все в один модуль не вариант.

 

А кто мешает вам поставить один IDDR снаружи модулей и потом с него раздавать данные на оба модуля. Зачем вам два независимых IDDR кормящихся с одного pad?

Удачи! Rob.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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