Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Слаки для несуществующих путей
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
shamrel
Приветствую!
Есть модуль А, с него выходит сигнал (14 бит), сигнал идет на модуль B, который имеет единственный выход (14 бит), подключенный непосредственно к выводам. Также сигнал идет на модуль C. Выходы модуля С расходятся по другим модулям. Схема полностью синхронна, один домен.
При анализе выдает слаки. Для меня странно это: From Node: reg_B, To Node: reg_C. При этом. связи между регистрами reg_B (находится в модуле cool.gif и reg_C (в модуле С) нет.
Зачем анализатор это оценивает? Где он нашел этот путь? Естественно, просмотр RTL и Technology Map не дает результата, нет такого пути.
CODE

_______
| MOD B |
_______ +-->| |----> Pin Out (dacM_code_A_o)
| MOD A | | | reg_B |
| |----+ |_______|
| | | _______
| | | | MOD C |
| | +-->| |----> Other Moduls
|_______| | reg_C |
|_______|

И на всякий случай, содержимое sdc:
CODE

set_time_format -unit ns -decimal_places 3

derive_clock_uncertainty

create_clock -period 50MHz -name {clk_50MHz_i} [get_ports {clk_50MHz_i}]

derive_pll_clocks

set clk_125MHz pll_50MHz_inst|altpll_component|auto_generated|pll1|clk[0]

create_generated_clock -name {clk_ext} -invert -source $clk_125MHz [get_ports {dacM_clk_o}]

set_output_delay -clock [get_clocks {clk_ext}] -max 0.2 [get_ports {dacM_code_A_o[*]}]
set_output_delay -clock [get_clocks {clk_ext}] -min -1.5 [get_ports {dacM_code_A_o[*]}]


P.S.: Я понимаю. что пока вопрос рассчитан на телепатов, подскажите, какими сведениями дополнить?
des00
Locate in Technology Map viewer не помогает ?
shamrel
Цитата(des00 @ Mar 9 2016, 10:05) *
Locate in Technology Map viewer не помогает ?

Помог, но лучше не стало. Есть оказывается путь. Есть, но быть его не должно! На RTL нет, а в Technology Map есть.
Пот холодный пробивает, волосы на спине дыбом встают, аж сидеть неудобно! Это оказывается я настолько Verilog не знаю ... или вообще не понимаю, как работает компилятор.
Упрощенно иерархия модулей выглядит так:
CODE
mod_A mod_A_inst (
...
.data_o(mod_A_out) // других выходов нет
);

mod_B mod_B_inst (
...
.signal_i(mod_A_out), // вход модуля
.data_o(mod_B_out) // других выходов нет
);

mod_C mod_C_inst (
...
.signal_i(mod_A_out), // вход модуля
.data_o(mod_C_out) // других выходов нет
);

Как выглядит RTL, я показал в предыдущем посте, а вот так выглядит Technology Map:
CODE
_______
| MOD B |data_o
_______ +-->| |----> Pin Out
| MOD A | | | reg_B |reg_B
| |----+ |_______|----+
| | | _______
| | | | MOD C |
| | +-->| |----> Other Moduls
|_______| | reg_C |
|_______|


Причем, reg_B не дублирует вход, да, туда записываются данные, но с преобразованием. В модуля А на выходе стоит регистр. Это получается в модуль С вообще че попало подается.
Как дальше жить?
Timmy
Цитата(shamrel @ Mar 9 2016, 10:37) *
Помог, но лучше не стало. Есть оказывается путь. Есть, но быть его не должно! На RTL нет, а в Technology Map есть.
Как дальше жить?

Квартусовский фиттер может формировать границы модулей, как ему вздумается, в данном случае он взял и перенёс кусок логики из модуля C в модуль B. Причём запретить ему это делать вроде как невозможно. Естественно, поведение схемы от этого не меняется.
des00
Цитата(shamrel @ Mar 9 2016, 14:37) *
Как дальше жить?

Думать головой и понимать причины такого поведения.

Цитата(Timmy @ Mar 9 2016, 15:06) *
Причём запретить ему это делать вроде как невозможно.

Возможно. Например запретив оптимизацию между модулей (так называем плоский нетлист) или зафиксировать конкретные сигналы, запретив их оптимизацию.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.