RobFPGA 27 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба При разработке модуля на Verilog возникла необходимость в цикле generate формировать ряд констант величина которых расчитывается по определенной формуле. Причем формула считается в real а затем масштабируется в нужное колличество бит типа integer. Я это сделал через функцию. При симуляции все было ОК, а вот при синтезе в Synplify поучил "... что мол type real не поддерживается при синтезе". Хотя все типы real были только внутри функции :( . Соответственно вопрос - возможно ли это в приципе - выполнять вычисления функций типа real на этапе синтеза? Если это невозможно то есть ли другие способы ? Rob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба При разработке модуля на Verilog возникла необходимость в цикле generate формировать ряд констант величина которых расчитывается по определенной формуле. Причем формула считается в real а затем масштабируется в нужное колличество бит типа integer. Я это сделал через функцию. При симуляции все было ОК, а вот при синтезе в Synplify поучил "... что мол type real не поддерживается при синтезе". Хотя все типы real были только внутри функции :( . Соответственно вопрос - возможно ли это в приципе - выполнять вычисления функций типа real на этапе синтеза? Если это невозможно то есть ли другие способы ? Rob <{POST_SNAPBACK}> боюсь вас огорчить - скорее всего нет - напрямую тип риал не поддержит (симплифай вообще последнее время непонятно чем занимается - никакого прогресса в синтезируемых конструкциях для верилога), однако киньте, плз, вашу функцию, а то не охота вкю4ать фантазию при чтении текста, может чего подскажем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба Функция стандартная расчета арктангенса (взята из инета). У меня используется для расчета констант для 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба ну, да, типа-сорри: дела в том что слово реал в компиляторе синплифай в принципе не поддерживается - он его как запрещённую конструкцию рассматривает, более того забудьте о таких вещах как $itor, rtoi, realtobits - из системных функций компилятор сейчас поддерживает только функции инициализации памяти $readmem*, в общем положение плачевное - либо описывать точечную арифметику своими ручками, либо писать скрипт - ни то ни другое вам очевидно не понравится (и вообще совет не полагайтесь на симплифай в поддержке вкусностей навых стандартов - на опыте убедился что обьявление о поддержке V2K1 и SV - всего лишь маркетинговый трюк - действительно необходимые конструкции не поддерживаются - смешно сказать : не могут реализовать перечисляемые типы и структуры, давно поддерживаемые в ВХДЛ - да и много чего злобного у меня к ним накопилось ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба 2 RobFPGA Ну вот например, когда я баловался с написанием умеожителя на плавучке, он занял у меня ~20% от Spartan2-200. Даже если представить, что жудко-оптимизированный АЛУ займет половину от вышеуказанной цифры, Вы только представьте сколько ресурсов FPGA потребует Ваша функция. Думаю, по этой причине Sinplify особенно не торопится с реализацией математики с real. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба 2 RobFPGA Ну вот например, когда я баловался с написанием умеожителя на плавучке, он занял у меня ~20% от Spartan2-200. Даже если представить, что жудко-оптимизированный АЛУ займет половину от вышеуказанной цифры, Вы только представьте сколько ресурсов FPGA потребует Ваша функция. Думаю, по этой причине Sinplify особенно не торопится с реализацией математики с real. <{POST_SNAPBACK}> а их никто и не просит реализовивать плавующую точку в железе - речь идеёт о расчёте параметров с помощью Y=F(x), где x C R, a Y C N, при этом Y является параметром блока generate Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 19 сентября, 2005 Опубликовано 19 сентября, 2005 · Жалоба Сори, не проник до конца в суть вопроса :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AA55 0 20 сентября, 2005 Опубликовано 20 сентября, 2005 · Жалоба А на 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 20 сентября, 2005 Опубликовано 20 сентября, 2005 · Жалоба А на 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. <{POST_SNAPBACK}> я вот о том и говорю: новые синтаксические конструкции по верилогу у них практически замёрзли года эдак с '99 - хотя аналогичные в ВХДЛ поддерживаются - всё потому что они были в старом стандарте ВХДЛ, а новым стандартам внимания практически не уделяют, от того что приделали к старому компилятору плакать хочеться - как будто бы и не американцы совсем продукт пишут -- никакого уважения к Verilog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться