реклама на сайте
подробности

 
 
> глюк в Signal Tap, переменным присваеивается непонятный сигнал
mr.alexeevas
сообщение Sep 18 2013, 06:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668



Подключил через 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;
--============================================================
--============================================================

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DENth
сообщение Sep 18 2013, 07:35
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890



Я думаю, что при добавлении SignalTap'а к проекту имеют место нарушения задания временных ограничений. Возможно Вами выбрана слишком высокая частота дискретизации. SignalTap не успевает класть в выделяемое для него ОЗУ часть данных. Проверьте во временном анализаторе. Из-за этого такая картина закономерна. И рекомендую использовать инкрементальную компиляцию, а сигналы в сигнал тап добавлять для подпроектов со статусом нетлиста PostFit. Это позволит компилятору не трогать разводку.
Go to the top of the page
 
+Quote Post
mr.alexeevas
сообщение Sep 18 2013, 07:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668



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

Спасибо, попробую. А для SignalTaP реально выбрана частота в 200 МГц, т.к. память на 100 МГц работает.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016