Jump to content

    

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

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

Share this post


Link to post
Share on other sites
Помогите найти библиотеку для работы с числами с фиксированной запятой на языке 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

Мда ... это будет проблемно. У меня почти везде числа 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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this