Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тестбенч FFT в Quartus8
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Acvarif
Откликнитесь please те кому приходилось симулировать мегафункцию fft в Q8.

Интересует последовательность действий как подключить fft_tb.vhd для симуляции.

Что я уже сделал:

1. В матлабе создал два текстовых файла для мнимой и действительной частей входных данных.
Правда не уверен в формате данных в этих текстовых файлах.
Если можно, подкиньте пожалуйста пример этих текстовых файлов для сравнения.
2. Перенес текстовые файлы в папку с откомпилированным проэктом мегафункции fft.

А дальше заклинило...

Подскажите пожалуйста что делать дальше.

Спасибо.
Builder
Цитата(Acvarif @ Jan 13 2010, 16:29) *
Интересует последовательность действий как подключить fft_tb.vhd для симуляции.
Я не делал этого, но название fft_tb.vhd говорит о том, что в квартусе вы это не отсимуляете, Active-HDL или ModelSim (что ближе) Вам в руки.
Acvarif
Цитата(Builder @ Jan 13 2010, 19:03) *
Я не делал этого, но название fft_tb.vhd говорит о том, что в квартусе вы это не отсимуляете, Active-HDL или ModelSim (что ближе) Вам в руки.


Неужели симулятор Q не может работать с тестбенчами vhd? В Xilinx тестбенч vhd работает проямо в среде.
В хелпе Q8 действительно речь идет об экспорте ваеформ в EDA tol... Что такое EDA?

Если это действительно так, то буду признателен за лекарство для Modelsim 6.1g который у меня установился вместе с Q8 или любой другой (может подойдет).

Спасибо.
Builder
Цитата(Acvarif @ Jan 14 2010, 10:15) *
Неужели симулятор Q не может работать с тестбенчами vhd? В Xilinx тестбенч vhd работает проямо в среде.
В хелпе Q8 действительно речь идет об экспорте ваеформ в EDA tol... Что такое EDA?

Если это действительно так, то буду признателен за лекарство для Modelsim 6.1g который у меня установился вместе с Q8 или любой другой (может подойдет).

Спасибо.
Так уж сложилось, что альтера не делала полноценный симулятор для тест бенчей, только симулятор того, что в самой микрухе.
IMHO, учитывая что есть в комплекте ModelSim, не велика потеря.
EDA tol... - имеется ввиду собственно внешние проги.
Остальное - есть на ФТП и на торрентах.
IMHO: Active-HDL легче осваивать и использовать, а MidelSim мощнее в наворотах симулятора и поддержке новых стандартов. Сам использую и то и другое. Поищите в поиском, несколько раз на форуме сравнивали.
Acvarif
Цитата(Builder @ Jan 14 2010, 12:09) *
Остальное - есть на ФТП и на торрентах.


На торренте есть. Но вот правильного лекарства для Модельсима
почему то найти не удается. Не запускается он и все...

Буду признателен за лекарство хоть для какого нибудь Модельсима.
IL-76
Поставьте Modelsim Altera Starter Edition. Он бесплатный, не требует лицензии и скачивается прямо с сайта Альтеры. Правда ограничен по размеру моделируемого кода, но думаю на Ваш FFT его должно хватить.
Builder
Цитата(Acvarif @ Jan 14 2010, 11:46) *
На торренте есть. Но вот правильного лекарства для Модельсима
почему то найти не удается. Не запускается он и все...

Буду признателен за лекарство хоть для какого нибудь Модельсима.
Странно, может Вы неправильно его постаавили? Куда кидать, брошу то, чем сам пользуюсь.
Acvarif
Цитата(Builder @ Jan 14 2010, 19:29) *
Странно, может Вы неправильно его постаавили? Куда кидать, брошу то, чем сам пользуюсь.


ygusin@gmail.com

Пытался запустить 6.1g Altera. Не принимает лицензию. Затем ставил 6.5 от Ментора в надежде на то, что потом подключу альтеровские библиотеки. То же самое - не принимает лицензию. При установке последнего он спрашивал о установке какого то драйвера и ключа (там еще были 3 чекбокса с птичками). Я дал отмену. Может не стоило?

Буду признателен за правильное лекарство и совет как правильнол все установить.

Спасибо.
Prusak
Цитата(Acvarif @ Jan 13 2010, 17:29) *
Откликнитесь please те кому приходилось симулировать мегафункцию fft в Q8.

Интересует последовательность действий как подключить fft_tb.vhd для симуляции.
Ага, симулировал. Все симулруется на ура.

Цитата(Acvarif @ Jan 13 2010, 17:29) *
Что я уже сделал:

1. В матлабе создал два текстовых файла для мнимой и действительной частей входных данных.
Правда не уверен в формате данных в этих текстовых файлах.
Если можно, подкиньте пожалуйста пример этих текстовых файлов для сравнения.
Визард мегафункции сам создает файлы с входными данными, называются real_input.txt и imag_input.txt, должны быть в папке с проектом. Там и формат посмотрите - целые числа, соответствующие разрядности входных данных.

Цитата(Acvarif @ Jan 13 2010, 17:29) *
2. Перенес текстовые файлы в папку с откомпилированным проэктом мегафункции fft.

А дальше заклинило...

Подскажите пожалуйста что делать дальше.
Итак, вы хотите подать данные из текстовых файлов на вход корки БПФ и посмотреть результат на выходе. И все это в ModelSim я правильно понимаю??


Цитата(Acvarif @ Jan 15 2010, 10:24) *
ygusin@gmail.com

Пытался запустить 6.1g Altera. Не принимает лицензию. Затем ставил 6.5 от Ментора в надежде на то, что потом подключу альтеровские библиотеки. То же самое - не принимает лицензию. При установке последнего он спрашивал о установке какого то драйвера и ключа (там еще были 3 чекбокса с птичками). Я дал отмену. Может не стоило?

Буду признателен за правильное лекарство и совет как правильнол все установить.

Спасибо.
Удалось поставить ModelSim??
Acvarif
Цитата(Prusak @ Jan 15 2010, 12:59) *
Удалось поставить ModelSim??


Спасибо, что откликнулись.

ModelSim пока не удалось. Но буду пытаться запустить.

Основной вопрос!!

Пока до конца не понял, неужели для симуляции fft в Q8 нужен ModelSim?
По документации получается, что нужен, поскольку мегафункция создает .vhd тест бенч файл
в котором какраз и читаются текстовые файлы мнимой и действительной частей входных данных.
А тест бенч .vhd я так понял может запуститься только в ModelSim.

Цитата
Визард мегафункции сам создает файлы с входными данными, называются real_input.txt и imag_input.txt, должны быть в папке с проектом. Там и формат посмотрите - целые числа, соответствующие разрядности входных данных


У меня почему то эти файлы визард не создал. Может настроил его не так?
Вобщем пришлось их создать в Матлабе и поместить в папку с проектом.

Попытаюсь запустить ModelSim. Дальше, если можно, опять к Вам за помощью.
Prusak
Цитата(Acvarif @ Jan 15 2010, 12:25) *
Пока до конца не понял, неужели для симуляции fft в Q8 нужен ModelSim?
По документации получается, что нужен, поскольку мегафункция создает .vhd тест бенч файл
в котором какраз и читаются текстовые файлы мнимой и действительной частей входных данных.
А тест бенч .vhd я так понял может запуститься только в ModelSim.
Если до этого вы обходились симулятором, встроенным в Квартус, то, видимо, пришла пора осваивать более продвинутые системы моделирования. Можно ли в Квартусе запускать тестбенчи я не знаю, никогда им не пользовался.

Цитата(Acvarif @ Jan 15 2010, 12:25) *
У меня почему то эти файлы визард не создал. Может настроил его не так?
Вобщем пришлось их создать в Матлабе и поместить в папку с проектом.
Это очень странно, а в отчете о созданных файлах они есть?? Надо бы разобраться, а то может он корку не сгенерировал.
Acvarif
Цитата(Prusak @ Jan 15 2010, 13:45) *
Это очень странно, а в отчете о созданных файлах они есть?? Надо бы разобраться, а то может он корку не сгенерировал.


Model Sim запустил. Теперь запущу по новой мегафункцию. Посмотрю какие файлы она создает.
Builder
Цитата(Acvarif @ Jan 15 2010, 13:28) *
Model Sim запустил. Теперь запущу по новой мегафункцию. Посмотрю какие файлы она создает.
А что было? Сделали как было по ссылке, которую в личку бросал?
Prusak
Цитата(Acvarif @ Jan 15 2010, 14:28) *
Model Sim запустил. Теперь запущу по новой мегафункцию. Посмотрю какие файлы она создает.


Отлично. До успешного результата осталось немного.

Ладно я тут опишу как я моделился.

1. Надо подключить библиотеки от альтеры, если их еще нет (altera,altera_mf,lpm,sgate). Для этого заходим в Квартусе по адресу Tools->Launch EDA Simulator library compiler. Там выбираем среду - Modelsim, семейство ПЛИСа, языки VHDL,verilog и выходную папку. Можно скомпилировать их в папку с ModelSim, и далее прописать их в файле modelsim.ini, чтобы они всегда подгружались при запуске.

2. Написать нехитрый скрипт для компиляции и запуска FFT корки. Назвать его например fft.do
Пути к файлам прописать свои естественно. Потом можно будет все это получше автоматизировать, но для того, чтобы посмотреть работу кора хватит.
Код
## Компиляция
vcom -work work -93 -explicit -quiet -source -O0 -cover s -novopt D:/altera/work/fft/fft_tb.vhd
vcom -work work -93 -explicit -quiet -source -O0 -cover s -novopt D:/altera/work/fft/fft.vho

## Запуск проекта на моделирование
vsim -t 1ps -title FFT work.fft_tb
##
view wave


Сама модель корки для функционального моделирования в файле fft.vho, в тестбенче ее entity уже подключен. Поэтому больше ничего делать не надо.

3. Запустить моделсим и перейти в папку с проектом с помощью команды cd <путь к проекту>
4. Запустить скипт командой do fft.do

Все должно скомпилироваться, останется нажать только кнопку run -all и любовать результатом.
Acvarif
Цитата(Builder @ Jan 15 2010, 15:53) *
А что было? Сделали как было по ссылке, которую в личку бросал?


Большое спасибо. Хорошая ссылка.
Надеюсь запустить МS 6.5

На данный момент получилось запустиь MS от Альтеры (который 6.1 под Q8).

Прогнал по новой мегафункцию (он действительно создал текстовые файлы мнимой и действительной частей входных данных), в качестве симулятора указал внешний Модель Сим.
Запустил еще раз компилер, который в свою очередь после завершения запустил Модель сим (он по моему запустился скриптом созданным самой коркой).

Модель Сим загрузил необходимые библиотеки, что-то откомпилировал и сейчас крутится...Жду результат...
Acvarif
Цитата(Acvarif @ Jan 15 2010, 16:42) *
Модель Сим загрузил необходимые библиотеки, что-то откомпилировал и сейчас крутится...Жду результат...


Не получается. Вот что происходит в Q8

Info: Running Quartus II EDA Netlist Writer
Info: Command: quartus_eda --read_settings_files=off --write_settings_files=off fft -c fft
Info: Generated files "fft.vho" and "fft_vhd.sdo" in directory "D:/Altera/Quartus80/quartus/test/" for EDA simulation tool
Info: Quartus II EDA Netlist Writer was successful. 0 errors, 0 warnings
Info: Running Quartus II Shell
Info: Command: quartus_sh -t d:/altera/quartus80/quartus/common/tcl/internal/nativelink/qnativesim.tcl fft fft
Info: Quartus(args): fft fft
Info: Start Nativelink Simulation process
Info: Starting NativeLink simulation with ModelSim-Altera software
Info: Generated ModelSim script file D:/Altera/Quartus80/quartus/test/fft_run_msim_gate_vhdl.do

На этом все застряло.

Посмотел, что Модель Сим создал файл (в другой директории) D:\Altera\Quartus80\quartus\test\simulation\modelsim\fft_run_msim_gate_vhdl.do

Его содержимое:

transcript on
if {[file exists gate_work]} {
vdel -lib gate_work -all
}
vlib gate_work
vmap work gate_work

vcom -93 -work work {fft.vho}

Пробую как Вы советовали через Модель Сим (через скрипт fft.do, который разместил в папке проекта)
Пока запустить его не получается. Команду перехода (cd D:\Altera\Quartus80\quartus\test\) на директорию где он находится Model Sim выполняет.
А на команде do fft.do выдает ошибку.

Посоветуйте пожалуйста как быть
Stewart Little
Цитата(Acvarif @ Jan 15 2010, 17:02) *
Посоветуйте пожалуйста как быть

А попробуйте не использовать NativeLink, если опыта маловато (т.е. не запускайте ModelSim из-под квартуса).
Запустите ModelSim отдельно и скормите ему результаты работы квартусовского нетлист райтера (они в папке <имя_проекта>_sim, если мне склероз не изменяет, находятся - там и vho, и тестбенч, и скрипты). Отокмпилируйте hdl-файлы в соответствии с иерархией, потом запускайте моделирование.
Даже если не сразу получится, то так быстрее разберетесь, имхо.
Acvarif
Надеюсь все же добить симуляцию fft.
Буду пробовать по всякому.

Например в ISE Xilinx Модельсим запускался прямо изнутри и возвращал результат.
Я и подумал, что может и в Q8 (пока почти совсем нет опыта работы с Q8) должно быть что то похожее.

Пока много неясного. Вот например что такое NativeLink?
Acvarif
Помогите пожалуйста правильно составить скрипт для симуляции по Model Sim Altera

Скрипт:
Код
## Компиляция
vcom -work work -93 -explicit -quiet -source -O0 -cover s -novopt D:/altera/work/fft/fft_tb.vhd
vcom -work work -93 -explicit -quiet -source -O0 -cover s -novopt D:/altera/work/fft/fft.vho

## Запуск проекта на моделирование
vsim -t 1ps -title FFT work.fft_tb
##
view wave


ругается на -cover s -novopt
Попробовал сделать так:

Код
## Компиляция
vcom -93 -work work {D:/altera/work/fft/fft_tb.vhd}
vcom -93 -work work {D:/altera/work/fft/fft.vho}

## Запуск проекта на моделирование
vsim -t 1ps -title FFT work.fft_tb
##
view wave


Вроде откомпилировалось все без предупреждений и появилась пустая диаграмма и сигналы.
Далее при нажатии на "run All" запустились проходы с кучей варнингсов...все остановилось но результат не высветился (диаграмма так и осталась пустая)
Prusak
Цитата(Acvarif @ Jan 16 2010, 11:35) *
Вроде откомпилировалось все без предупреждений и появилась пустая диаграмма и сигналы.
Далее при нажатии на "run All" запустились проходы с кучей варнингсов...все остановилось но результат не высветился (диаграмма так и осталась пустая)
Вот, все так и должно быть. А на диаграмме ничего нет, потому что вы не добавили в нее сигналы из проекта. Попробуйте так: перед нажатием run -all в консоли написать add wave /fft/* или перенести мышкой из левой части, где список сигналов и процессов. Моделсима нет под рукой, не помню как окно называется...
Acvarif
Цитата(Prusak @ Jan 16 2010, 23:17) *
Вот, все так и должно быть. А на диаграмме ничего нет, потому что вы не добавили в нее сигналы из проекта. Попробуйте так: перед нажатием run -all в консоли написать add wave /fft/* или перенести мышкой из левой части, где список сигналов и процессов. Моделсима нет под рукой, не помню как окно называется...


Спасибо.
Все!!!
Диаграмма получилась.

Теперь, как предлагает толмуд по Мегафункции необходимо проделать то же но в Матлабе, который создаст те же выходные файлы мнимой и действительной частей + файл експоненты.
И я так понял, что после этого можно сравнить то, что создано Модель симом и Матлабом. Оно должно быть одинаково.
Поскольку по умолчанию входные данные мегафункция создает на базе случайного процесса, то мне ради еще одной проверки придется входные файлы мнимой и действительной частей попробовать сделать на базе гармонической функции. Далее все отсимулировать и увидеть одну гармонику. Чем сейчас и займусь..
Еще вопрос:
Как эта мегафункция роаботает непосредственно в железе? Был ли у Вас опыт? Нет ли там каких-то проблем?
Prusak
Цитата(Acvarif @ Jan 18 2010, 11:14) *
Спасибо.
Все!!!
Диаграмма получилась.
Поздравляю :-)

Цитата(Acvarif @ Jan 18 2010, 11:14) *
Еще вопрос:
Как эта мегафункция роаботает непосредственно в железе? Был ли у Вас опыт? Нет ли там каких-то проблем?
Да, я столкнулся с проблемами и тоже хочу здесь спросить у имевших опыт общения с этой коркой форумчан:
Архитектура FFT: Burst, Quad output
Число точек N =512
Разрядность данных : 14

На вход input_real подаю синусойду. На вход input_imag подаю 0. Получаю спектр сигнала на выходе и сразу подаю его на обратное преобразование IFFT, в качестве которой вторая корка FFT, с теми же параметрами, только, вывод inverse=1.
И вижу что на выходе IFFT есть данные и на выходе real и image, т.е сигнал стал комплексным!! И даже после взятия модуля такого комплексного числа синусойда на выходе - сильно искажена.

Начинаю разбираться и ахаю. Спектр на выходе FFT оказывается несимметричный (а при реальном сигнале на входе - он всегда должен быть симметричным)!!! Нет, он конечно похож, но конкретные числа немного отличаются. Пробовал увеличить разрядность данных до 16, игрался с параметром twiddle precision, пробовал архитектуры buffered burst, ничего не помогало. Сейчас подозреваю, что проблема в округлении. В даташите написано что в архитектуре variable streamming применен более продвинутый блок floating point, но опробывать эту архитектуру не успел. Выкрутился тем, что взял тупо первую половину спектра (1-N/2 отсчетов) и зеркально отобразил, и скопировал на место второй части (N/2-N отсчеты), конечно так не совсем честно, и для комплекс. сигнала не покатит, но в моем случае свою синусойду обратно я получил и без комплексного сигнала на выходе, на чем пока и успокоился.
Acvarif
Цитата(Prusak @ Jan 18 2010, 12:52) *
На вход input_real подаю синусойду. На вход input_imag подаю 0.


Если можно подскажите пожалуйста как теперь создать текстовые файлы (входные) для мнимой и действительной частей гармонического сигнала (ведь сам визард по умолчанию их создает для случайного процесса).
Там еще предлагается (его тоже создает визард) какой то матлабовский файл в котором вроде можно заменить x = ..
на гармонический. Но запуск его в матлабе ничего не дает.
Prusak
Цитата(Acvarif @ Jan 18 2010, 12:19) *
Если можно подскажите пожалуйста как теперь создать текстовые файлы (входные) для мнимой и действительной частей гармонического сигнала (ведь сам визард по умолчанию их создает для случайного процесса).
Там еще предлагается (его тоже создает визард) какой то матлабовский файл в котором вроде можно заменить x = ..
на гармонический. Но запуск его в матлабе ничего не дает.
Я подавал только действительный сигнал, код следующий:
Код
Fs = 40e6;       % Частота дискретизации, Гц
Td = 1/Fs;       % период дискретизации сигнала
Tend = 1e-1;     % Конечное время наблюдения.
t=0:Td:Tend;    
Fif = 1e6;     % Частота синусойды, Гц
A = 2^12;         % Амлитуда синусойды
Ns=32000;         % Число сэмплов для записи в файл

%Генерируем Синус
S = A*sin(2*pi*Fif*t);

% Открываем выходной файл на запись
f1 = fopen('C:\sin_out.txt','w');

% Выводим данные в файл
for i=1:Ns    
    str_tmp = int2str(S(i));         % Преобразуем целое десятичное число в строку
    fprintf(f1, '%s \n', str_tmp);            % Записываем ее в файл
end;
fclose(f1);
Acvarif
Спасибо.

Смысл понятен. Пропустил через симулятор. (Я пока делаю на 64 точки
наверное A = 2^8; % Амлитуда синусойды)

Вобщем пока одной гармоники действительно не получилось.
Надо подумать...
Acvarif
Вобщем после немного подумать пришол к выводу:

Мегафункция в своей работе выполняет операции не в плавающем формате.
Поэтому очевидно и такие неточности.
Если пропустить то же в Матлабе то четко получается одна гармоника потому, что Матлаб работает
в операционной среде которая в свою очередь все делает в плавающем формате - отсюда и
соответствующая точность.
Для того, чтобы в ПЛИС обеспечить высокую точность необходим вычислитель (умножение, суммирование)
с плавающей точкой.

Да, совсем может не кстати. Установил Quartus 90. Все работало нормально. Но после установки SP2 совсем перестал работать. Требует другой sys_cpt.dll. Получается, что лекарство от простого Q90 уже не подходит. Посоветуйте пожалуйста чего нибудь.
novartis
Добрый вечер, уже замучился разбираться с магафункцией fft, в quartus и vhdl новичок. Использую quartus 8.0 (нечистоплотный), пробовал запускать свой проект в Quartus 9.1 web-edition, результат аналогичный. Сгенерировал мегафункцию с параметрами 64 точки, 8 бит разрядность, Streaming.
Подаю на вход в родном симуляторе квартуса все необходимые сигналы, с выхода имеются сигналы начала кадра, конца кадра, валидности выходных данных, а сами данные нули. Пробовал и в симуляторе, и в железе (Cyclone III EP3C25F324C6, Cyclone III FPGA Starter Kit). В железе данные брал из встроенной памяти, которую инициализировал заранее подготовленным файлом .mif, выходные данные складывал в эту же память, потом просматривал это дело In System Memory Content Editor, на выходе все равно нули. Предполагаю, что всему виной мой кривой код:
Код
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.numeric_std.all;

entity tmp is
    generic
    (
        N : natural := 63
    );
    port
    (
        freq : in std_logic;
                
        xreal : in std_logic_vector (7 downto 0);
        ximag : in std_logic_vector (7 downto 0);

        sinks : out std_logic;
        sinke : out std_logic;
        sinkv : out std_logic;
        sinkr : out std_logic;
        
        sources : out std_logic;
        sourcee : out std_logic;
        sourcev : out std_logic;
        sourceerr : out    std_logic_vector (1 downto 0);
        sourceexpp    : out STD_LOGIC_VECTOR (5 DOWNTO 0);
        
        yreal : out std_logic_vector (7 downto 0);
        yimag : out std_logic_vector (7 downto 0);
        
        
        
        sstate : out std_logic_vector (1 downto 0);
        scount : out std_logic_vector (31 downto 0)
        
    );
end entity tmp;

architecture rtl of tmp is
    
component fft
    PORT (
        clk                : IN STD_LOGIC;
        reset_n            : IN STD_LOGIC;
        inverse            : IN STD_LOGIC;
        sink_valid        : IN STD_LOGIC;
        sink_sop        : IN STD_LOGIC;
        sink_eop        : IN STD_LOGIC;
        sink_real        : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
        sink_imag        : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
        sink_error        : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
        source_ready    : IN STD_LOGIC;
        sink_ready        : OUT STD_LOGIC;
        source_error    : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
        source_sop        : OUT STD_LOGIC;
        source_eop        : OUT STD_LOGIC;
        source_valid    : OUT STD_LOGIC;
        source_exp        : OUT STD_LOGIC_VECTOR (5 DOWNTO 0);
        source_real        : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
        source_imag        : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
    );
end component;

type control_state is (init, stop, go, eop);

signal currentstate : control_state := init;

signal sinksop : std_logic; -- строб начала входного кадра
signal sinkeop : std_logic; -- строб конца входного кадра
signal sinkvalid : std_logic; -- сигнал верности входного кадра
signal sinkready : std_logic; -- сигнал готовности приема данных блоком БПФ

signal count : integer range 0 to N := N; -- счетчик

signal sourcesop    : std_logic; -- строб начала выходного кадра
signal sourceeop    : std_logic; -- строб конца выходного кадра
signal sourcevalid    : std_logic; -- сигнал верности выходного кадра
signal sourceerror    : std_logic_vector (1 downto 0); -- сигнал ошибки выходного кадра
signal sourceexp    : STD_LOGIC_VECTOR (5 DOWNTO 0); --

signal sinkreal, sinkimag, sourcereal, sourceimag : std_logic_vector (7 downto 0);

begin

sinks <= sinksop;
sinke <= sinkeop;
sinkv <= sinkvalid;
sinkr <= sinkready;
scount <= STD_LOGIC_VECTOR(TO_UNSIGNED(count,32));

sources <= sourcesop;
sourcee <= sourceeop;
sourcev <= sourcevalid;
sourceerr <= sourceerror;
sourceexpp <= sourceexp;

sinkreal <= xreal;
sinkimag <= ximag;

yreal <= sourcereal;
yimag <= sourceimag;

    process (freq)
    begin
    if (rising_edge(freq)) then
        case (currentstate) is
            when init => -- инициализация
                sinksop <= '0';
                sinkeop <= '0';
                sinkvalid <= '0';
                count <= 0;
                if (sinkready='1') then
                    currentstate <= go;
                else
                    currentstate <= init;
                end if;
                sstate <= "01";
            when go => -- работа
                sinkeop <= '0';
                if (count=0) then
                    sinksop <= '1'; -- если первый отчет, выставляем начало кадра
                    sinkvalid <= '1'; -- выставляем, что данные на входе верны
                else
                    sinksop <= '0'; -- если уже не первый отчет, снимаем строб начала кадра
                    sinkvalid <= '1'; -- данные на входе верны
                end if;
                if (count < N-1) then
                    currentstate <= go; -- обработаны еще не все отчеты
                    count <= count + 1;
                else
                    currentstate <= eop; -- обработаны N-1 отчет, переходим к обработке последнего отчета
                    count <= count + 1;
                end if;
                sstate <= "10";
            when eop => -- последний отсчет
                sinksop <= '0'; -- строб начала кадра обнулен
                sinkeop <= '1';     -- выставляем строб конца кадра
                sinkvalid <= '1'; -- данные на входе верны
                count <= 0;
                currentstate <= stop; -- останавливаем подачу данных на вход
                sstate <= "11";
            when stop => -- стоп
                -- данные на вход неподаются
                -- программа молотит сама по себе, а на выходе должны появиться выходные данные
                sinksop <= '0';
                sinkvalid <= '0';
                sinkeop <= '0';
                count <= 0;
                currentstate <= stop;
                sstate <= "00";
            end case;
    end if;
    end process;
    
    fft_inst : fft PORT MAP
    (
        clk                => freq,
        reset_n            => '1',
        inverse            => '0',
        sink_valid        => sinkvalid,
        sink_sop        => sinksop,
        sink_eop        => sinkeop,
        sink_real        => sinkreal,
        sink_imag        => sinkimag,
        sink_error        => "00",
        source_ready    => '1',
        sink_ready         => sinkready,
        source_error    => sourceerror,
        source_sop        => sourcesop,
        source_eop        => sourceeop,
        source_valid    => sourcevalid,
        source_exp        => sourceexp,        
        source_real        => sourcereal,
        source_imag        => sourceimag
    );
    
end rtl;


Вот циклограмма:
http://electronix.ru/forum/style_images/1/...e_types/gif.gif

Помогите разобраться. Заранее благодарен за любые ответы.
Prusak
Цитата(Acvarif @ Jan 22 2010, 09:50) *
Вобщем после немного подумать пришол к выводу:

Мегафункция в своей работе выполняет операции не в плавающем формате.
Поэтому очевидно и такие неточности.
Если пропустить то же в Матлабе то четко получается одна гармоника потому, что Матлаб работает
в операционной среде которая в свою очередь все делает в плавающем формате - отсюда и
соответствующая точность.
Для того, чтобы в ПЛИС обеспечить высокую точность необходим вычислитель (умножение, суммирование)
с плавающей точкой.
По информации из даташита на FFT кору архитектуры burst, buffered burst, streaming содержат альтеровское изобретение block floating point (BFP):
Цитата
To maintain a high signal-to-noise ratio throughout the transform computation, the FFT MegaCore function uses a block-floating-point architecture, which is a trade-off
point between fixed-point and full-floating point architectures.
In a block-floating point architecture, all of the values have an independent mantissa but share a common exponent in each data block. Data is input to the FFT function as
fixed point complex numbers (even though the exponent is effectively 0, you do not enter an exponent).
Т.е в BFP для каждого числа используется своя мантисса, но общий порядок числа (экспонента), в отличии от настоящего числа с плавающей запятой, где у каждого числа своя мантисса и экспонента.

Полная реализация floating point чисел реализована в архитектуре variable streaming. Где используются 32-битные числа с плавающей запятой. Но опробовать эту архитектуру не дошли руки.

У меня синусойда на выходе получалась нормальная (соответствующая матлабу), просто спектр был несимметричный и это все портило.


novartis
Может быть проблема с входным сигналом. У вас экспонента source_exp равна 1, посмотрел в даташите на кору - это минимальное значение для корки с вашими параметрами. Попробуйте увеличить уровень входного сигнала.
novartis
Цитата(Prusak @ Feb 2 2010, 10:38) *
novartis
Может быть проблема с входным сигналом. У вас экспонента source_exp равна 1, посмотрел в даташите на кору - это минимальное значение для корки с вашими параметрами. Попробуйте увеличить уровень входного сигнала.


Поменял архитектуру FFT со Streaming на Buffered Burst. На выходе появились данные. Вернулся к Streaming, подал на вход не одну посылку, а несколько. На выходе данные начали поступать начиная со второй пачки. Видимо так работает именно архитектура Streaming. До конца так и не разобрался.
Может разъяснит кто-нибудь различия между Streaming, Buffered, Burst Burst, Variable Streaming, в каких случаях и задачах ту или иную стоит применять.
Вообще задача ставится так: необходимо обрабатывать 1024 пачек по 1024 отчетов 12 разрядов (т.е. скорее всего придется сделать 24 или даже 32 разряда), в идеале плавающая точка, ПЛИС - Stratix IV GX. Вот и думаю какую архитектуру использовать. Даташит читал, английский более менее понимаю, а вот понять все равно не могу, что там написано).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.