Есть входной сигнал clk_pll_in 50МГц, который поступает на вход DCM_SP. С него снимаются сигналы clk_in 50 Мгц с фазой 0, clk_ram 50 МГц с фазой 90, clk_main 25 МГц с фазой 0. На выходе каждого тактового сигнала стоит буфер BUFG, так как без него развести сигналы невозможно.
Дальше логика работы организована таким образом. Есть набор логических условий, которые становятся истинными в зависимости от состояния системы. Некоторые тактовые сигналы объединены по И с некоторыми условиями и выведены на пины. Некоторые используются в Always-блоках. Постоянно появляется ошибка 1136 (This design contains a global buffer instance, <main1/pll_main/clkout2_buf>, driving the net, <main1/clk_main>, that is driving the following (first 30) non-clock load pins.). Но возникает она в двух разных местах:
1) Ошибка на сигналах, которые выводятся на пины. К примеру:
reg S_flag;
reg [2:0] state;
wire S=clk_main & S_flag;
wire L=clk_main & (state==03);
Где S и L - сигналы уровня top level. То есть необходима именно схема DCM->BUFG->Логика->PIN. По сути это Gated clock, что нехорошо. Заменила BUFG на BUFGCE и подключила на вход условия, работает, но на Gated clock'е только одно И, поэтому мучает вопрос, что быстрее: комбинаторная логика или переключение буфера.
2) Ошибки на сигналах в Always-блоке. Например:
reg ram_enable;
wire generate_new_address=clk_in & ram_enable;
always @(posedge clk)
//изменяется ram_enable
always @(posedge generate_new_address)
//что то присваивается
always @(negedge generate_new_address)
//что то присваивается
Тут ругается так: This design contains a global buffer instance, <main1/pll_main/clkout2_buf>, driving the net, <main1/clk_in>, that is driving the following (first 30) non-clock load pins. < PIN: main1/main_ram/generate_new_addr_169.A4; >.
Если в первом случае проблема решаема сменой типа буфера, то во втором случае вобще нет идей. Там даже сигнал generate_new_address не выводится наружу, только внутренний.
Подскажите пожалуйста, как можно решить эту проблему, буду очень благодарна.