Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cyclone IV и SignalTap
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Sergey_Bekrenyov
Столкнулись с проблемой - SignalTap некорректно работает в Cyclone IVE (4c40). Ложные срабатывания триггера (данные тоже недостоверны), однако при принудительном чтении буфера (Read Data) данные вполне корректны.

Давно хотел спросить - можно ли снизить частоту TCK?
AndrewS6
Есть мнение, что у вас не выполняются тайминги.
Покажите ваш .sdc файл и результат выполнения макроса Таймквеста "Report Top Failing Paths"
Sergey_Bekrenyov
Я раньше работал только с Xilinx, так что буду глупыми вопросами надоедать

Тестовый проект содержит только PLL, три тест-пойнта(два на выходы и один на locked) и UART (txd <= rxd).

SDC файл отсутствует, сейчас пишу его. Кроме

"
create_clock -name {altera_reserved_tck} -period 100.000 [get_ports {altera_reserved_tck}]
create_clock -name {sys_clk} -period 20.000 [get_ports {sys_clk}]
"
в голову ничего не приходит

Спасибо

Цитата(AndrewS6 @ May 12 2011, 10:30) *
Есть мнение, что у вас не выполняются тайминги.
Покажите ваш .sdc файл и результат выполнения макроса Таймквеста "Report Top Failing Paths"

AndrewS6
Цитата(Sergey_Bekrenyov @ May 12 2011, 11:04) *
Кроме
"
create_clock -name {altera_reserved_tck} -period 100.000 [get_ports {altera_reserved_tck}]
create_clock -name {sys_clk} -period 20.000 [get_ports {sys_clk}]
"
в голову ничего не приходит

Как минимум можно еще derive_pll_clocks добавить, автоматически обконстрейнятся выходные клоки PLL.
Констрейны на JTAG порт, если мне не изменяет маразм, автоматически генерирует сам Сигналтап, это можно проверить по отчету таймквеста.
Ну и общие наводящие вопросы: какой клок заводится на сигналтап? В каком клоковом домене сгенерированы сигналы, заводящиеся на входы данных сигналтапа? Если клоковые домены сигналтапа и просматриваемых сигналов разные (асинхронные), как производится синхронизация в вашей схеме?
Sergey_Bekrenyov
-2.973 sys_clk sld_signaltap:auto_signaltap_0|sld_signaltap_impl:sld_signaltap_body|acq_data_in
_reg[1] sys_clk sys_clk 0.000 2.933 0.146
-2.972 sys_clk sld_signaltap:auto_signaltap_0|sld_signaltap_impl:sld_signaltap_body|acq_trigger
_in_reg[0] sys_clk sys_clk 0.000 2.928 0.142
-2.972 sys_clk sld_signaltap:auto_signaltap_0|sld_signaltap_impl:sld_signaltap_body|acq_data_in
_reg[0] sys_clk sys_clk 0.000 2.933 0.147
-2.766 sys_clk sld_signaltap:auto_signaltap_0|sld_signaltap_impl:sld_signaltap_body|acq_trigger
_in_reg[1] sys_clk sys_clk 0.000 2.941 0.361

На СигналТап заводил 50 МГц с генератора, синхронизацию обычно не делаю, просто имею в виду, что сигналы с близкой частотой будут отображаться некорректно

derive_pll_clocks попробую, спасибо

Попробовал подсинхронизировать, Report Top Failing Paths теперь пустой. СигналТап ведет себя по-прежнему
des00
Цитата(Sergey_Bekrenyov @ May 11 2011, 23:59) *
Ложные срабатывания триггера (данные тоже недостоверны), однако при принудительном чтении буфера (Read Data) данные вполне корректны.

частота данных и работы сигнала тапа разная. 99.99%
murmel1
Были точно такие же симптомы, когда в чип поступала плохая тактовая частота - была неправильно настроена терминация на входе тактовой. Плата была Arria GX Development Kit. Нашел с трудом. Советую вывести принятую тактовую наружу и посмотреть осциллографом.
Sergey_Bekrenyov
Цитата(murmel1 @ May 12 2011, 22:29) *
Были точно такие же симптомы, когда в чип поступала плохая тактовая частота - была неправильно настроена терминация на входе тактовой. Плата была Arria GX Development Kit. Нашел с трудом. Советую вывести принятую тактовую наружу и посмотреть осциллографом.


С частотой порядок - весь проект (к которому надо добавить свою часть работает отлично, осциллографом посмотрел тоже)

Вы хотите сказать, что я не могу асинхронные сигналы смотреть сигналтапом? Или имеющие другую частоту? Извините, но это по-моему бред. Когда я все сигналы подсинхронизировал той же частотой - ничего не поменялось
andrewkrot
Цитата(Sergey_Bekrenyov @ May 13 2011, 18:56) *
С частотой порядок - весь проект (к которому надо добавить свою часть работает отлично, осциллографом посмотрел тоже)

Вы хотите сказать, что я не могу асинхронные сигналы смотреть сигналтапом? Или имеющие другую частоту? Извините, но это по-моему бред. Когда я все сигналы подсинхронизировал той же частотой - ничего не поменялось

Осциллограф это не сигналтап. И нет смысла в "Подсинхронизации" сигналов. Должна быть одна единая частота от которой пляшет весь проект. Если таковой нет, и вы хотите сигналтапом посмотреть асинхронные сигналы, то установите частоту для сигналтапа раз в 10 выше чем та которая в проекте и посмотрите свои сигналы. Все будет похоже с осциллографом.
Sergey_Bekrenyov
Цитата(andrewkrot @ May 13 2011, 20:30) *
Осциллограф это не сигналтап. И нет смысла в "Подсинхронизации" сигналов. Должна быть одна единая частота от которой пляшет весь проект. Если таковой нет, и вы хотите сигналтапом посмотреть асинхронные сигналы, то установите частоту для сигналтапа раз в 10 выше чем та которая в проекте и посмотрите свои сигналы. Все будет похоже с осциллографом.


Всем спасибо, беседа зашла в тупик.

Речь шла о "ложных" срабатываниях Сигналтапа. Проекта нет - одна PLL, и один вход.

Откуда взялась цифра в 10 раз выше? Я прекрасно понимаю, что я увижу, если попытаюсь смотреть сигнал равной или более высокой частоты. Однако сигналтап не должен давать ложных событий.

Будем писать на Альтеру
andrewkrot
Цитата(Sergey_Bekrenyov @ May 15 2011, 21:02) *
Однако сигналтап не должен давать ложных событий.

Эт точно... Ложных событий он и не дает. Он показывает то, что творится внутри кристалла синхронно с его (SignalTap) частотой. И если результаты его работы никак не сходятся с результатами функционального моделирования то вариантов всего два - асинхронщина или времянка. Попробуйте понизить частоту всего проекта раза в 2 и посмотрите что там будет на сигналтапе. И дайте народу хоть посмотреть на Ваш проект - телепатов здесь по-прежнему нет.
Sergey_Bekrenyov
Цитата(andrewkrot @ May 15 2011, 23:14) *
Эт точно... Ложных событий он и не дает. Он показывает то, что творится внутри кристалла синхронно с его (SignalTap) частотой. И если результаты его работы никак не сходятся с результатами функционального моделирования то вариантов всего два - асинхронщина или времянка. Попробуйте понизить частоту всего проекта раза в 2 и посмотрите что там будет на сигналтапе. И дайте народу хоть посмотреть на Ваш проект - телепатов здесь по-прежнему нет.


tp1 <= tp1_as;

process (fpga_reset_h, sys_clk_int) is
begin
if(fpga_reset_h = '1') then
--tp1 <= '0';
tp2 <= '0';
tp3 <= '0';
ser_txd <= '1';
elsif(rising_edge(sys_clk_int)) then
tp2 <= tp2_as;
tp3 <= tp3_as;
ser_txd <= ser_rxd;-- Synchronous Sequential Statement(s)
end if;
end process;


a1 : ENTITY work.spll
PORT MAP
(
areset => fpga_reset_h,
inclk0 => sys_clk,
c0 => sys_clk_int,
c1 => tp1_as,
c2 => tp2_as,
locked => tp3_as
);



Вот собственно и весь проект, СигналТап висит на sys_clk_int, на входах tp1, tp2, tp3
andrewkrot
Не плохо было бы еще и картинку с сигналтапа посмотреть. Будет понятнее что там не так происходит. А где настройки PLL? Для экономии места не приводятся, или не производятся вообще в проекте?
Sergey_Bekrenyov
Цитата(andrewkrot @ May 16 2011, 15:35) *
Не плохо было бы еще и картинку с сигналтапа посмотреть. Будет понятнее что там не так происходит. А где настройки PLL? Для экономии места не приводятся, или не производятся вообще в проекте?


Нашел интересный репорт "Critical Warning: Partially connected in-system debug instance "aaa" to 5 of its 7 required data inputs, trigger inputs, acquisition clocks, and dynamic pins. There were 0 illegal, 0 inaccessible, and 2 missing sources or connections."

Для PLL - входная частота 50 МГц, С0 - повторение входной, С1 - умножение на 6, деление на 5, С2 - умножение на 4, деление на 5
andrewkrot
Так картинку покажете?
Sergey_Bekrenyov
Ну например вот

Условие ser_rxd = '0', однако срабатывает когда захочет
_Anatoliy
Цитата(Sergey_Bekrenyov @ May 16 2011, 15:50) *
Ну например вот

Условие ser_rxd = '0', однако срабатывает когда захочет


А условие запуска покажете?На вкладке setup.
Sergey_Bekrenyov
А пожалуйста
_Anatoliy
Цитата(Sergey_Bekrenyov @ May 16 2011, 15:31) *
А пожалуйста

Не нашёл в исходнике где формируется ser_rxd.
Sergey_Bekrenyov
Это внешний вход - RS-232
des00
Цитата(Sergey_Bekrenyov @ May 16 2011, 09:59) *
Это внешний вход - RS-232

и после этого вы тыкаете альтеру в то, что у них сигнал тап не рабочий ?
AndrewS6
Попробуйте добавить в свою схему пару триггеров на входной сигнал RxD, что-нибудь типа:
Код
process (fpga_reset_h, sys_clk_int) is
begin
if(fpga_reset_h = '1') then
<...>
ser_txd_reg1 <= '0';
ser_txd_reg2 <= '0';
<...>
elsif(rising_edge(sys_clk_int)) then
<...>
ser_rxd_reg1 <= ser_rxd;
ser_rxd_reg2 <= ser_rxd_reg1;
<...>
end if;
end process;

И в СигналТап добавляйте не ser_rxd, а ser_rxd_reg2.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.