megarazor 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Есть код на си++. Надо получить синтезируемый VHDL код, используя в качестве посредника MATLAB. Т.е. надо сначала перевести си++ код в матлабовский. Затем из матлабовского в VHDL. Как это делается если такое возможно кто знает ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба не весь код на C++ можно запихнуть в matlab. и далеко не вcе из матлаба можно превратить в VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Есть код на си++. Надо получить синтезируемый VHDL код, используя в качестве посредника MATLAB. Т.е. надо сначала перевести си++ код в матлабовский. Затем из матлабовского в VHDL. Как это делается если такое возможно кто знает ? может выложи(напиши) задачу которую нужно Вам реализовать на FPGA. А тут посоветуют с чего начать и как поступить ЗЫ просто совет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megarazor 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба и все же какими средствами и как это делается ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба какими средствами и как это делается руки/голова или матлаб(но как уже сказали он не всё из с++ кушает потому опять же нужны руки/голова :laughing: ). Есть в принципе и другие кроме матлаба средства но вроде они похуже будут... Перекладывал с просто СИ на верилог - геморно и относительно долго, но эффективнее чем через матлаб в конце получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megarazor 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Все та же задача: http://electronix.ru/forum/index.php?showtopic=69474 Я сколько мучался, так и не смог написать синтезируемый код на Verilog. То одно то другое. Вот по совту форумчан поставил Matlab. Суть такая: Я пишу программу на Matlab или импортирую Си++ код, что было бы лучше. Далее мне надо перейти от чисел с плавающей запятой к числам с фиксированной запятой. Или есть вариант программы на Си++ на числах integer. Далее надо сгенерировать синтезируемый код VHDL. Программу вроде бы оптимизировал для ПЛИСки. Все коэффициенты предварительно уже посчитаны. Много чего выкинул. Минимальный код вот такой. void __fastcall TForm1::Button2Click(TObject *Sender) { int coeff[31]= { 88551, 88833, 88833, 89114, 89114, 89395, 89395, 89676, 89676, 89957, 89957, 90237, 90237, 90517, 90517, 90797, 90797, 91077, 91077, 91357, 91357, 91636, 91636, 91915, 91915, 92194, 92194, 92473, 92473, 92751, 92751 } ; int Q0=0, Q1=0, Q2=0; int magnitude[32],magn=0; short int cc=0; short int magcnt=0; short int Fsig; for(Fsig=2585;Fsig<2616;Fsig++) { for(int y=0;y<op+1;y++) { Q0=(coeff[cc]*Q1+100000*Q2-100000*data[y])/-100000; Q2=Q1; Q1=Q0; } /*y=a*x-w+z y=((-100000*(a*x-w+z))/-100000) y=((-100000*a*x+100000*w-100000*z))/-100000) */ /* y=a*a+b*b+a*b*с y=(-100000*(a*a+b*b+a*b*с))/-100000 y=(-100000*a*a-100000*b*b-100000a*b*с))/-100000 */ magnitude[magcnt]=Q1*Q1+Q2*Q2-((Q1*Q2*coeff[cc])/100000); // мощность в квадрате Form1->Memo2->Lines->Add(FloatToStr(magnitude[magcnt])); Q1=0;Q2=0;Q0=0; magcnt++; cc++; } Form1->Edit1->Text= FloatToStr(magn); return; Изначально коэф-ты имели значения около -0.9346235 типа такого. Чтобы перейти на integer я их умножил на -100000. Соответственно некоторые остальные переменные тоже пришлось умножить на это число. Тут не самый лучший вариант конечно. Лучше умножать на 131072 - это 2^17. Таким образом вместо умножения будет просто сдвиг регистра влево на 17 разрядов, что ускорит вычислительный процесс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба самое правильный алгоритм такой: 1. Делаете в симулинке модель, того что вы написали с floating point из простейших модулей сложения, умножения, вычитания, задержек и так далее (от операций деления отличного от степени 2ки посторонитесь(!) )... 2. проверяете что действительно все одинаково получилось. 3. Смотрите на Scope'ах максимальные значения, которые у вас получаются, и приводите к fixed point определенной разрядности. 4. Перекидываете свои коэффициенты в fixed point в блок памяти ROM. 5. Описываете свою схему в vhdl на основе того что нарисовали в simulink. 6. симулируете-верифицируете все это добро. PS может помочь с понимание как написать те или иные функции. только хз сколько оно памяти у вас сожрет из плис, вполне возможно так вот в лоб ваш алгоритм и не удастся разместить в разумных размерах FPGA. http://www.c-to-verilog.com/online.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 ноября, 2009 Опубликовано 20 ноября, 2009 · Жалоба Что такое op в коде? Если константа, то этот код можно перевести на HDL - получится афигительная портянка из умножителей и сумматоров. Чип, в который это влезет, будет стоить килобаксы (не меньше) :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 20 ноября, 2009 Опубликовано 20 ноября, 2009 · Жалоба Вот это: for(Fsig=2585;Fsig<2616;Fsig++) что такое? В цикле Fsig не используется. Значит на самом деле от 0 до 31. В параллель эти итерации в аппаратуре считать - действительно нужен монстр. Разумно разложить расчет для начала на 32 этапа (потом посмотрим, вложится ли один этап в один такт или нет, IMHO нет). Значит, заводите счетчик состояний от 0 до 31 (или больше, если выделяются этапы инициализации/завершения например). Про умножения на степень двойки сами Вы правильно написали. Уберите эти страшные 100000. Уберите деления и умножения, все замените сдвигами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба MegaFPGA, я вижу 2 класса тулзов, автоматизирующих решение Вашей задачи. 1. Перевод с++ -> hdl . Например mentor catapult. 2. Перевод simulink model -> hdl. Универсальная - synplify dsp, под альтеру dspbuilder, под ксайлинкс не помню как называется. Мой совет - сделать руками и написать на veriloge или vhdl. Времени займет едва и больше, а знания Ваши и умения возрастут значительно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzma_ 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 (изменено) · Жалоба Перевод с++ -> hdl . Например mentor catapult. Любителей плюсов там ждёт много интересного :laughing: Думаю лучше самому переписать, хотя если опыта в HDL нет - как знать... Изменено 21 ноября, 2009 пользователем kuzma Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться