Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: глюк в Signal Tap
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
mr.alexeevas
Подключил через Qsys SDRAM к проекту, написал машину состояний для управления памятью и передачей данных через FTDI на компьютер. Стал смотреть, что происходит в проекте через Signal Tap, а там такой глюк скрин прилагаю ниже.

Нажмите для просмотра прикрепленного файла

Вопрос, почему переменной counter_wr, в некоторые разряды проникла клоковая частота, в данном случае counter_wr[5] ? Как с этим бороться?
Прилагаю и кусок кода, чтобы было понятно, что такое counter_wr.
Код
    signal counter_rd             : integer range low_level to 33554431 :=low_level;
    signal counter_wr             : integer range low_level to 33554431 :=low_level;    
    
    signal read_or_write                : integer range low_level to 33554431 :=low_level;
    signal rg_read_or_write        : integer range low_level to 33554431 :=low_level;

    signal count                : std_logic; -- сигнал, разрешающий считать счетчику counter_wr
    signal rg_write_on_FTDI        : std_logic;
begin

--------------------------------------------------------------
---=======     смена текущего состояния с.машины
--------------------------------------------------------------
    process(clk, clk_en, sclr, next_state, N_valid, cur_state, rg_valid, count)
    begin
        if rising_edge(clk) then
            if sclr = '1' then
            ----------
                cur_state <= st_check_counter;
                ---------------
                rg_valid <= '0';
                ---------------
                rg_read_from_m <= '1';
                rg_write_to_m <= '1';
                ---------------
                rg_address <= (others => '0');
                ---------------
                counter_wr <= low_level;
                counter_rd <= low_level;
                ---------------
                rg_read_or_write <= low_level;
                
                
                rg_write_on_FTDI <= '0';
            ----------
            elsif clk_en = '1' then
            ----------
                cur_state <= next_state;
                ---------------
                rg_valid <= N_valid;
                ---------------    
                rg_address <= N_address;
                ---------------
                if N_write_to_m = '0' then
                    counter_wr <= counter_wr+1;
                else counter_wr <= counter_wr;
                end if;    
                ---------------
                if count = '1' then
                    counter_rd <= counter_rd+1;
                    rg_write_on_FTDI <= '1';
                else counter_rd <= counter_rd;
                    rg_write_on_FTDI <= rg_write_on_FTDI;
                end if;    
                ---------------
                rg_read_from_m <= N_read_from_m;
                rg_write_to_m <= N_write_to_m;
                ---------------
                rg_read_or_write <= read_or_write;
            ----------
            else
            ----------
                cur_state <= cur_state;
                ---------------
                rg_valid <= rg_valid;
                ---------------    
                rg_read_from_m <= rg_read_from_m;
                rg_write_to_m <= rg_write_to_m;
                ---------------
                counter_wr <= counter_wr;
                counter_rd <= counter_rd;
                ---------------
                rg_address <= rg_address;
                ---------------
                rg_read_or_write <= rg_read_or_write;
                
                
                rg_write_on_FTDI <= rg_write_on_FTDI;
            ----------
            end if;
        end if;
    end process;
--============================================================
--============================================================

alexadmin
Цитата(mr.alexeevas @ Sep 18 2013, 10:43) *
Вопрос, почему переменной counter_wr, в некоторые разряды проникла клоковая частота, в данном случае counter_wr[5] ? Как с этим бороться?


Скорее всего это проблема не самого дизайна, а сигналтапа. Встречался с подобным - на некотором интервале времени разряды данных съезжает и попадает на другие линиии. То ли дело во времянах внутри ядра сигналтапа, то ли какие-то проблемы с jtag в целом. Как бороться - фиг знает.
DENth
Я думаю, что при добавлении SignalTap'а к проекту имеют место нарушения задания временных ограничений. Возможно Вами выбрана слишком высокая частота дискретизации. SignalTap не успевает класть в выделяемое для него ОЗУ часть данных. Проверьте во временном анализаторе. Из-за этого такая картина закономерна. И рекомендую использовать инкрементальную компиляцию, а сигналы в сигнал тап добавлять для подпроектов со статусом нетлиста PostFit. Это позволит компилятору не трогать разводку.
mr.alexeevas
Цитата(DENth @ Sep 18 2013, 11:35) *
Я думаю, что при добавлении SignalTap'а к проекту имеют место нарушения задания временных ограничений. Возможно Вами выбрана слишком высокая частота дискретизации. SignalTap не успевает класть в выделяемое для него ОЗУ часть данных. Проверьте во временном анализаторе. Из-за этого такая картина закономерна. И рекомендую использовать инкрементальную компиляцию, а сигналы в сигнал тап добавлять для подпроектов со статусом нетлиста PostFit. Это позволит компилятору не трогать разводку.

Спасибо, попробую. А для SignalTaP реально выбрана частота в 200 МГц, т.к. память на 100 МГц работает.
DENth
А какая ПЛИС Вами используется? Вы проверяли в документации, что внутреннее ОЗУ ПЛИС может работать на частоте 200 МГц?
Sefo
Возможно дело не в Signal Tap, а в том как Вы его подключили.

1) Что сказал Квартус по результатам разводки - есть проблемы с таймингом?

2) Чем Вы тактируете сам Signal Tap?

Если интересующие Вас сигнала синхронны, скажем, с CLK_A, то и в качестве тактовой частоты для Signal Tap имеет смысл выбирать CLK_A
mr.alexeevas
Цитата(DENth @ Sep 18 2013, 11:48) *
А какая ПЛИС Вами используется? Вы проверяли в документации, что внутреннее ОЗУ ПЛИС может работать на частоте 200 МГц?


Используется Cyclone EP4CE115F29C7, тактовая частота в 200 МГц нигде не используется, она везде делится и в таком виде подается на модули, чаще всего 100 МГц, 50 и 25. А для SignalTap указал максимальную, т.к. тогда частоты в 100 МГц он отображает некорректно.
Цитата


Что касается тайминга и ругани Квартуса
Нажмите для просмотра прикрепленного файла

Однако, время от времени, он все компилит нормально и никаких глюков не возникает, а меняю я всего лишь константу
DENth
Вы противоречите сами себе. 200 МГц как раз-таки очень даже используется. На весь сигнал тап. А он оперирует теми же блоками памяти, что и остальной проект.
А имел я ввиду следующее:


Отсюда видно, что предел - 274 МГц в вашем случае. Но это в теории.
А из приведенного Вами отчета видно, что Вы не используете временной анализ. Компилятору неизвестно ничего о каких-либо ограничениях и о том, как должен работать проект.
О чем он и пишет в первой приведенной строке. Задайте констрейны на указанные в варнингах клоки и посмотрите на отчет анализатора.

Без использования временных ограничений проект будет жить своей жизнью =)
mr.alexeevas
Цитата(DENth @ Sep 18 2013, 14:26) *
А из приведенного Вами отчета видно, что Вы не используете временной анализ. Компилятору неизвестно ничего о каких-либо ограничениях и о том, как должен работать проект.
О чем он и пишет в первой приведенной строке. Задайте констрейны на указанные в варнингах клоки и посмотрите на отчет анализатора.

Без использования временных ограничений проект будет жить своей жизнью =)


Вот и пришло время вплотную заняться констрейнами, до этого все как-то обходился без них) порекомендуете литературу или ссылке, где можно это дело изучить и с чего начать? Спасибо)
DENth
Русскоязычной литературы не много. Стандарт по этой теме - вот эти статьи: http://www.kit-e.ru/articles/plis/2010_9_51.php
mr.alexeevas
Цитата(DENth @ Sep 18 2013, 14:42) *
Русскоязычной литературы не много. Стандарт по этой теме - вот эти статьи: http://www.kit-e.ru/articles/plis/2010_9_51.php


Спасибо, буду изучать)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.