Jump to content

    
Sign in to follow this  
megarazor

ACTEL:VERILOG:Synplify: числа с фиксир. запятой

Recommended Posts

Помогите найти библиотеку для работы с числами с фиксированной запятой на языке VERILOG.

Вы сами-то хоть поняли что спрашиваете? Я - не понял, что именно Вам нужно.

Если Вы студент - сходите спросите у тех кто на лекции ходил.

ЗЫ: если я всё-же понял вопрос правильно, то эта библиотека содержится в самом Verilog.

Если-же я понял не правильно - ну так спрашивать нужно правильно.

Share this post


Link to post
Share on other sites
Вы сами-то хоть поняли что спрашиваете? Я - не понял, что именно Вам нужно.

Если Вы студент - сходите спросите у тех кто на лекции ходил.

ЗЫ: если я всё-же понял вопрос правильно, то эта библиотека содержится в самом Verilog.

Если-же я понял не правильно - ну так спрашивать нужно правильно.

Для тех кто не ходил на лекции объясняю: синтезатор Synplify не поддерживает тип real языка Verilog. Для использования чисел с запятой надо использовать специальные библиотеки в которых используются только допустимые типы данных. Для VHDL я такие нашел, но мне надо для Verilog.

Share this post


Link to post
Share on other sites
Для тех кто не ходил на лекции объясняю: синтезатор Synplify не поддерживает тип real языка Verilog. Для использования чисел с запятой надо использовать специальные библиотеки в которых используются только допустимые типы данных. Для VHDL я такие нашел, но мне надо для Verilog.

 

прежде чем растопыривать пальцы рекомендую сильно подумать. если под VHDL либами вы понимаете библиотеку math_real, то это не значит что она синтезируемая. Эта библиотека используется для моделирования. Верилог в таком не нуждается т.к. все функции с вещественными числами у него встроены, но опять же это работает только для моделирования. Хотите синтезировать логику работающую с вещественными числами пишите математику в ручную и/или пользуйте корки от производителей ПЛИС.

Share this post


Link to post
Share on other sites
Для тех кто не ходил на лекции объясняю: синтезатор Synplify не поддерживает тип real языка Verilog. Для использования чисел с запятой надо использовать специальные библиотеки в которых используются только допустимые типы данных. Для VHDL я такие нашел, но мне надо для Verilog.

Ну, в иходном посте Вы спрашивали всё-же фиксированную точку, а не плавающую.

А это всё-же мягко говоря 2 большие разницы.

Про корку, уже сказали, ищите или пишите. У той-же альтеры кажись есть.

Что-то еть на http://opencores.org/projects

Но правучка занимает много места. И ели у Вас её много, а чип на гипер большой, то начинайте сначала-

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

Плавучку в ПЛИС без особой надобноти не принято использовать.

И ещё, а какие операции из плавучки нужны?

Share this post


Link to post
Share on other sites
Мда ... это будет проблемно. У меня почти везде числа real. (

А к чему тогда исходный вопрос про фиксированную точку? Переделывайте тогда с real на эту самую фиксированную, как правило проблем в этом никаких, немного математики, и все. А если без real никак (не верю, чудеса), то см. последний совет Builder и ориентируйтесь на жирную фпга.

Share this post


Link to post
Share on other sites

Извиняюсь немного всех запутал. Использовал real потому, что так было проще при тестировании проги. А мне нужно щас на фиксед все реализовать. Надо будет математику всю переделывать что не так просто.

Про библиотеку я подумал потому что рядом с библиотекой для float для VHDL рядом лежала fixed и я подумал что наверное для Verilog есть что то аналогичное. Ведь все равно же удобнее не переписывать все вычисления а воспользоваться готовыми типами.

Вот код если кому интересно.

integer i=0,k=0,magcnt=0,Fsig; 
   wire [0:31999]data; // тестовый массив
real w=0, cosine=0, sine=0,coeff=0, Q0=0, Q1=0, Q2=0,magn=0;
   real magnitude[0:31]; 
   parameter Fsamp = 8000;
   parameter N =4000;//размер выборки

   always @ (posedge nxt_block)
   begin
        for(Fsig=2585;Fsig<2616;Fsig=Fsig+1)
        begin
        k=0.5+((N*Fsig)/Fsamp);
        w=((2*3.14159265)/N)*k;
        cosine = cos(w);
        coeff = 2*cosine;

                 for(i=0;i<N+1;i=i+1)
                  begin
                   Q0=coeff*Q1-Q2+{data[i*8], data[i*8+1], data[i*8+2], data[i*8+3], data[i*8+4], data[i*8+5], data[i*8+6], data[i*8+7]};
                   //Q0=coeff*Q1-Q2+{data[i*8+7], data[i*8+6], data[i*8+5], data[i*8+4], data[i*8+3], data[i*8+2], data[i*8+1], data[i*8]};
                   Q2=Q1;
                   Q1=Q0; 

                  end
        magnitude[magcnt]=Q1*Q1+Q2*Q2-Q1*Q2*coeff; // мощность в квадрате
        magcnt=magcnt+1;
        Q1=0;Q2=0;Q0=0;i=0;
        end
        magn=magnitude[magcnt];
       while(magcnt>0)
        begin
         if (magn<magnitude[magcnt-1])
         begin
         magn=magnitude[magcnt-1];
         end
        magcnt=magcnt-1;
        end
   end

function real sin;
 input x;
 integer x;
 real x1,y,y2,y3,y5,y7,sum,sign;
 begin
   sign = 1.0;
   x1 = x;
   if (x1<0)
    begin
       x1 = -x1;
       sign = -1.0;
     end
   while (x1 > 3.14159265/2.0)
     begin
       x1 = x1 - 3.14159265;
       sign = -1.0*sign;
     end  
   y = x1*2/3.14159265;
   y2 = y*y;
   y3 = y*y2;
   y5 = y3*y2;
   y7 = y5*y2;
   sum = 1.570794*y - 0.645962*y3 + 0.079692*y5 - 0.004681712*y7;
   sin = sign*sum;
 end
endfunction 

function real cos;
 input x;
 real x;
 begin
   cos = sin(x + 3.14159265/2.0);
 end
endfunction 
endmodule

Edited by MegaFPGA

Share this post


Link to post
Share on other sites
Использовал real потому, что так было проще при тестировании проги. А мне нужно щас на фиксед все реализовать.

 

Все операции с fixed определены внутри самого верилога без каких либо внешних библиотек.

 

А так, на будущее, отлаживать математику лучше в том же матлабе, и переход делать float->fixed там же. Так как там есть все необходимые средства анализа, и прочие удобства. HDL для этой задачи, пожалуй, наихудшее решение.

Share this post


Link to post
Share on other sites
Вот код если кому интересно.

 

жесть, и вы хотели ЭТО по мановению волшебной палочки собрать? Такие времена еще не скоро настанут, по крайней мере с верилога :). Сюда проситься жесткая модификация алгоритма с возможными заменами точных вычислений разными аппроксимациями.

Share this post


Link to post
Share on other sites
жесть, и вы хотели ЭТО по мановению волшебной палочки собрать? Такие времена еще не скоро настанут, по крайней мере с верилога :). Сюда проситься жесткая модификация алгоритма с возможными заменами точных вычислений разными аппроксимациями.

можно по подробнее что не так ?

Share this post


Link to post
Share on other sites
можно по подробнее что не так ?

Не так - подход к решению поставленной задачи. При помощи простого использования какой-то библиотеки и средств синтеза на сегодняшний день это не реально. Тут много ручной работы по переписыванию исходного текста с real на обычные signed/unsigned wire/reg, которой, должна предшествовать работа по моделированию последствий такого перехода и рассчету необходимых разрядностей в математической среде (ну или на бумаге).

Share this post


Link to post
Share on other sites
можно по подробнее что не так ?
Verilog & VHDL != C. Это не языки ПРОГРАМИРОВАНИЯ, а языки ОПИСАНИЯ АППАРАТУРЫ. Нельзя произвольную программу засунуть в железо (если конечно это железо не компьютер)

Share this post


Link to post
Share on other sites
можно по подробнее что не так ?

Тут куча работы по переводу алгоритма на фиксед точку. По сути, у Вас следана только половина работы, да и то не факт что большая.

С ходу:

1) выбор разрядностей (целая/дробная часть), которых хватит для Вашего динамического диапазона;

Да, что-б небыло вопросов, если возникнет вопрос, что за целая/дробная часть в фиксет поинте - отсылаю к докам на целочисленные процы, помнится у AnalogDevice на 218х было неплохое описание целочисленной математики. Думаю что то-же самое есть и у техаса.

2) проработкой алгоритма, что-бе небыло переполнений. Ну или анализ, может хватит просто насыщения.

3) выбор типов и методов апроксимации того-же синуса.

4) Проработка блок схемы всего этого добра, что-б работало быстро и как надо.

 

Так-что берите матлаб, как говорил SM, и вперёд....

Share this post


Link to post
Share on other sites
3) выбор типов и методов апроксимации того-же синуса.

4) Проработка блок схемы всего этого добра, что-б работало быстро и как надо.

 

во-во.

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this