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

Тип real в функциях Verilog на этапе синтеза

При разработке модуля на Verilog возникла необходимость в цикле generate формировать ряд констант величина которых расчитывается по определенной формуле. Причем формула считается в real а затем масштабируется в нужное колличество бит типа integer. Я это сделал через функцию. При симуляции все было ОК, а вот при синтезе в Synplify поучил "... что мол type real не поддерживается при синтезе". Хотя все типы real были только внутри функции :( . Соответственно вопрос - возможно ли это в приципе - выполнять вычисления функций типа real на этапе синтеза?

 

Если это невозможно то есть ли другие способы ?

 

Rob

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


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

При разработке модуля на Verilog возникла необходимость в цикле generate формировать ряд констант величина которых расчитывается по определенной формуле.  Причем формула считается в real  а затем масштабируется в нужное колличество бит типа integer. Я это сделал через функцию. При симуляции все было ОК, а вот при синтезе в Synplify поучил "... что мол type real не поддерживается при синтезе". Хотя все типы real были только внутри функции  :( . Соответственно вопрос - возможно ли это в приципе - выполнять вычисления  функций типа real на этапе синтеза?

 

Если это невозможно то есть ли другие способы ?

 

Rob

 

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

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


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

Функция стандартная расчета арктангенса (взята из инета). У меня используется для расчета констант для CORDIC алгоритма.

Приходится делать несколько модулей с разными значениями параметров (ширины данных и длинны CORDIC) и поэтому хотелось сделать универсальный модуль)

 

Rob

 

Предполагалось следующее

...

genvar K;

generate for (K=1;K<STAGE; K=K+1)

begin : STG

....

ad_sub mZ(

.CLK(Clk100),

.SCLR(1'b0),

.A(wZ[K-1]),

.B(MCATAN(K)),

.ADD( ASGN(wZ[K-1],wY[K-1],qS[K])),

.Q(wQZ[K]));

....

end

endgenerate

...

 

function [WH-1:0] MCATAN;

input integer K;

begin

MCATAN=$rtoi((1<<WH) * atan(1.0/(1<<K)));

end

endfunction

 

function real atan;

input x;

real x;

real x1,x2,sign,bias;

real d3,s3;

begin

sign = 1.0;

bias = 0.0;

x1 = x;

if (x1 < 0.0)

begin

x1 = -x1;

sign = -1.0;

end

if (x1 > 1.0)

begin

x1 = 1.0/x1;

bias = sign*3.14159265/2.0;

sign = -1.0*sign;

end

x2 = x1*x1;

d3 = x2 + 1.44863154;

d3 = 0.26476862 / d3;

s3 = x2 + 3.3163354;

d3 = s3 - d3;

d3 = 7.10676 / d3;

s3 = 6.762139 + x2;

d3 = s3 - d3;

d3 = 3.7092563 / d3;

d3 = d3 + 0.17465544;

atan = sign*x1*d3+bias;

end

endfunction

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


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

ну, да, типа-сорри: дела в том что слово реал в компиляторе синплифай в принципе не поддерживается - он его как запрещённую конструкцию рассматривает, более того забудьте о таких вещах как $itor, rtoi, realtobits - из системных функций компилятор сейчас поддерживает только функции инициализации памяти $readmem*, в общем положение плачевное - либо описывать точечную арифметику своими ручками, либо писать скрипт - ни то ни другое вам очевидно не понравится (и вообще совет не полагайтесь на симплифай в поддержке вкусностей навых стандартов - на опыте убедился что обьявление о поддержке V2K1 и SV - всего лишь маркетинговый трюк - действительно необходимые конструкции не поддерживаются - смешно сказать : не могут реализовать перечисляемые типы и структуры, давно поддерживаемые в ВХДЛ - да и много чего злобного у меня к ним накопилось )

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


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

2 RobFPGA

Ну вот например, когда я баловался с написанием умеожителя на плавучке, он занял у меня ~20% от Spartan2-200. Даже если представить, что жудко-оптимизированный АЛУ займет половину от вышеуказанной цифры, Вы только представьте сколько ресурсов FPGA потребует Ваша функция. Думаю, по этой причине Sinplify особенно не торопится с реализацией математики с real.

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


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

2 RobFPGA

Ну вот например, когда я баловался с написанием умеожителя на плавучке, он занял у меня ~20% от Spartan2-200. Даже если представить, что жудко-оптимизированный АЛУ займет половину от вышеуказанной цифры, Вы только представьте сколько ресурсов FPGA потребует Ваша функция. Думаю, по этой причине Sinplify особенно не торопится с реализацией математики с real.

 

а их никто и не просит реализовивать плавующую точку в железе - речь идеёт о расчёте параметров с помощью Y=F(x), где x C R, a Y C N, при этом Y является параметром блока generate

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


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

А на VHDL всё легко прокатывает:

 

DZG: for i in 0 to Nnn Generate
   DZ(i)<=std_logic_vector(conv_unsigned(CordicConst(i+1,Wfi),Wfi));
end Generate;

 

при этом описание функции CordicConst см. в "Package" файле func.vhd.

func.vhd.txt

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


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

А на VHDL всё легко прокатывает:

 

DZG: for i in 0 to Nnn Generate
   DZ(i)<=std_logic_vector(conv_unsigned(CordicConst(i+1,Wfi),Wfi));
end Generate;

 

при этом описание функции CordicConst см. в "Package" файле func.vhd.

 

я вот о том и говорю: новые синтаксические конструкции по верилогу у них практически замёрзли года эдак с '99 - хотя аналогичные в ВХДЛ поддерживаются - всё потому что они были в старом стандарте ВХДЛ, а новым стандартам внимания практически не уделяют, от того что приделали к старому компилятору плакать хочеться - как будто бы и не американцы совсем продукт пишут -- никакого уважения к Verilog

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


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

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

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

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

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

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

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

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

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

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