Перейти к содержанию
    

Симуляция FFT Altera

Коллеги,кто нибудь симулировал эту корку в режиме Buffered Burst? На картинке результат симуляции, видно что выходные данные адекватны входному воздействию(на вход подаю дельта-импульс), но сигнал source_eop формируется не в то время, сигналы source_sop и source_valid совсем отсутствуют. Так же видно что source_error после sink_eop начинает выдавать код ошибки 1(потеря sop). Пробовал в разных версиях квартуса, модельсим и active-hdl - результат одинаковый. Сейчас работаю с Q15.1. Года два назад симулировал эту корку в режиме Streaming так ничего подобного не видел, симулировалось нормально. Очень похоже что всё происходит из-за сигнала source_error , но почему он себя так ведёт?

post-18832-1462872632_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги,кто нибудь симулировал эту корку в режиме Buffered Burst? На картинке результат симуляции, видно что выходные данные адекватны входному воздействию(на вход подаю дельта-импульс), но сигнал source_eop формируется не в то время, сигналы source_sop и source_valid совсем отсутствуют. Так же видно что source_error после sink_eop начинает выдавать код ошибки 1(потеря sop). Пробовал в разных версиях квартуса, модельсим и active-hdl - результат одинаковый. Сейчас работаю с Q15.1. Года два назад симулировал эту корку в режиме Streaming так ничего подобного не видел, симулировалось нормально. Очень похоже что всё происходит из-за сигнала source_error , но почему он себя так ведёт?

 

Попробуй начать работать с коркой после того, как будет выставлен sink_ready

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуй начать работать с коркой после того, как будет выставлен sink_ready

Да я вобщем то так и делаю:

    if (sink_ready = '1') then
            if (cnt < 3200) then
                cnt <= cnt+1;
                if (cnt = 0) then
                    sink_valid <= '1';
                    sink_sop <= '1';
                elsif (cnt = 1) then
                    sink_sop <= '0';
                elsif (cnt = 5) then
                    sink_real <= x"400";
                elsif (cnt = 6) then
                    sink_real <= x"000";
                elsif (cnt = 1023) then
                    sink_eop <= '1';
                elsif (cnt = 1024) then
                    sink_eop <= '0';
                end if;
            else
                cnt <= 0;
            end if;
        end if;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я вобщем то так и делаю:

    if (sink_ready = '1') then
            if (cnt < 3200) then
                cnt <= cnt+1;
                if (cnt = 0) then
                    sink_valid <= '1';
                    sink_sop <= '1';
                elsif (cnt = 1) then
                    sink_sop <= '0';
                elsif (cnt = 5) then
                    sink_real <= x"400";
                elsif (cnt = 6) then
                    sink_real <= x"000";
                elsif (cnt = 1023) then
                    sink_eop <= '1';
                elsif (cnt = 1024) then
                    sink_eop <= '0';
                end if;
            else
                cnt <= 0;
            end if;
        end if;

 

а ты учел, что после выставления sink_sop, sink_ready становится не активным, и счетчик перестает тикать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а ты учел, что после выставления sink_sop, sink_ready становится не активным, и счетчик перестает тикать?

Не совсем так. Сигнал sink_ready становится не активным только после второго sink_sop, и то если период повторения sink_sop меньше некой величины. Константой 3200 я делаю большой период повторения и sink_ready никогда не опускается в ноль.

 

Не совсем так. Сигнал sink_ready становится не активным только после второго sink_sop, и то если период повторения sink_sop меньше некой величины. Константой 3200 я делаю большой период повторения и sink_ready никогда не опускается в ноль.

Вот такая будет картинка если уменьшить период между sink_sop. Сигнал sink_ready опускается в ноль и счётчик в это время не считает. Но выходные сигналы неправильные.

post-18832-1462881492_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем так. Сигнал sink_ready становится не активным только после второго sink_sop, и то если период повторения sink_sop меньше некой величины. Константой 3200 я делаю большой период повторения и sink_ready никогда не опускается в ноль.

 

 

Вот такая будет картинка если уменьшить период между sink_sop. Сигнал sink_ready опускается в ноль и счётчик в это время не считает. Но выходные сигналы неправильные.

 

вообщем не знаю баг ли это модели симуляции

но если ты сделаешь sink_valid , равный единице только от sop до eop включительно, то все будет гуд

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообщем не знаю баг ли это модели симуляции

но если ты сделаешь sink_valid , равный единице только от sop до eop включительно, то все будет гуд

Да,так я не пробовал, действовал по картинке. Сейчас проверим.

 

Ну что можно сказать? Козлы, картинку как следует нарисовать не смогли...

Большое спасибо Realking! :beer:

post-18832-1462882167_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...