CaPpuCcino 0 1 декабря, 2007 Опубликовано 1 декабря, 2007 · Жалоба Верилог: вот давно мучает вопрос как бы написать функцию чтобы можно было указать локально для неё ширину входящих/выходящих данных при том чтобы для каждой копии эта ширина задавалась отдельно (т.е. какбы шаблон функции) попробую пояснить: хочу например написать функцию взятия абсолютного значения в файле function_package.v: function bit[operand_width-2:0] abs (input bit[operand_width-1:0] operand); ... endfunction при этом если устаносить эту функцию в модуле все локальные для модуля переменные будут видны внутри функции, поэтому фокус с operand_width прокатывает module x(); byte a; localparam operand_width=$bits(a); `include"function_package.v" ... c=abs (.operand(a)); endmodule module z(); int b; localparam operand_width=$bits( b ); `include"function_package.v" ... c=abs (.operand( b )); endmodule но при этом из сигнатуры функции не видно что она требует параметр ширины операнда, и как неотрывное приложение к испольхованию функции приходится постоянно прописывать localparam operand_width=... в каждом модуле где функция включена, а хотелось бы что-то наподобии module x(); byte a; `include"function_package.v" ... c=abs #(.operand_width($bits(a))) (.operand(a)); endmodule может есть какие-нибудь способы делать параметры локальными для функций? спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 17 декабря, 2007 Опубликовано 17 декабря, 2007 · Жалоба Верилог: вот давно мучает вопрос как бы написать функцию чтобы можно было указать локально для неё ширину входящих/выходящих данных при том чтобы для каждой копии эта ширина задавалась отдельно (т.е. какбы шаблон функции) может есть какие-нибудь способы делать параметры локальными для функций? спасибо New Verilog-2001 Techniques for Creating Parameterized Models (or Down With `define and Death of a defparam!) Clifford E. Cummings Sunburst Design, Inc. Искать на www.sunburst-design.com Если не найдете, могу прислать по почте... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 17 декабря, 2007 Опубликовано 17 декабря, 2007 · Жалоба New Verilog-2001 Techniques for Creating Parameterized Models (or Down With `define and Death of a defparam!) Clifford E. Cummings Sunburst Design, Inc. Искать на www.sunburst-design.com Если не найдете, могу прислать по почте... Удачи! так эта...там речь про совсем другое вот в самом начале Creating reusable models typically requires that general-purpose models be written with re-definable parameters such as SIZE, WIDTH and DEPTH. With respect to coding parameterized Verilog models, two Verilog constructs that are over-used and abused are the global macro definition (`define) and the infinitely abusable parameter redefinition statement (defparam). This paper will detail techniques for coding proper parameterized models, detail the differences between parameters and macro definitions, present guidelines for using macros, parameters and parameter definitions, discourage the use of defparams, and detail Verilog-2001 enhancements to enhance coding and usage of parameterized models. параметризация модулей, а совсем не функций Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 25 декабря, 2007 Опубликовано 25 декабря, 2007 · Жалоба может мое мнение не "в струе" современных технологий программирования и начинал я с Verilog, а не VHDL но нафига козе баян? в смысле параметризация функций для нетипизированного языка? передавайте длину как еще один параметр (типа как strncmp в С) а входные выходные данные, как 32х битный int конечно это не так круто, как библиотеки в VHDL, но в принципе работает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба передавайте длину как еще один параметр (типа как strncmp в С) а входные выходные данные, как 32х битный int при этом придётся расчитывать на правильную оптимизацию среды (к тому же инт, часто, слишком мал). на счёт нетипизированных языков, на мой взгляд, сравнение не совсем подходит - дело в том что неполностью типизированные языки программирования не являются аналогом неполностью типизированных языков описания апаратуры - в последнем случае речь идёт о физических ресурсах кристалла, а не абстрактных ресурсах памяти Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба при этом придётся расчитывать на правильную оптимизацию среды (к тому же инт, часто, слишком мал). на счёт нетипизированных языков, на мой взгляд, сравнение не совсем подходит - дело в том что неполностью типизированные языки программирования не являются аналогом неполностью типизированных языков описания апаратуры - в последнем случае речь идёт о физических ресурсах кристалла, а не абстрактных ресурсах памяти Очень жаль что в систем верилоге не ввели перегрузки функций (ведь сделали же перегрузку операторов), но это могло убить обратную совместимость. Или хотя бы сделать механизм констант времени исполнения. Но, по крайней мере для фпга на верилоге должен проходить фокус с автоматическим приведением разрядности операторов. тогда можно было бы сделать 1 прототип функции с заведомо большей разрядность. Синтезаторы усекают такие вещи достаточно правильно (хотя с signed возможны проблемы). Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 апреля, 2008 Опубликовано 11 апреля, 2008 · Жалоба Поздновато конечно, но натолкнулся на такой случай. сначала использовал типизацию для унификации функции, но получалось кривовато. потом как всегда решение пришло неожиданно. Вспомнил как делать структуры на чистом верилоге и заменил вызовы функций на вставку параметризуемого модуля module scale #(parameter int iw = 8, ow = 8) (input logic [iw-1:0] i, output logic [ow-1:0] o); always_comb begin if (iw < ow) o = {i, {ow-iw{1'b0}}}; else // iw >= ow o = i[iw-1:iw-ow]; end endmodule scale #($size(dat2scale),$size(dat4scale)) sc (dat2scale, dat4scale); конечно для симуляции не пойдет, но для ртлного кода катит вполне %) Удачи!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 11 апреля, 2008 Опубликовано 11 апреля, 2008 · Жалоба сначала использовал типизацию для унификации функции, но получалось кривовато. потом как всегда решение пришло неожиданно. Вспомнил как делать структуры на чистом верилоге и заменил вызовы функций на вставку параметризуемого модуля такие костыли не новость. вот этого как раз и не хотелось: функция как блок комдинаторной логики читается в коде её вызывающем намного приятнее нежле отдель ностоящий инстанс модуля Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 апреля, 2008 Опубликовано 23 апреля, 2008 · Жалоба такие костыли не новость. вот этого как раз и не хотелось: функция как блок комдинаторной логики читается в коде её вызывающем намного приятнее нежле отдель ностоящий инстанс модуля таки нашел более менее красивое решение проблемы interface sc #(parameter int iw = 8, ow = 8); function automatic logic [ow-1:0] scale (input logic [iw-1:0] i); if (iw < ow) scale = {i, {ow-iw{1'b0}}}; else // if (iw >= ow) scale = i[iw-1:iw-ow]; endfunction endinterface module pipa(a, b); parameter integer aw = 20; parameter integer bw = 10; input wire [aw-1:0] a; output wire [bw-1:0] b; sc #($size(a), $size(b)) sc (); assign b = sc.scale(a); endmodule PS. Но такое работает только в прецижене. Ква юзерс, даже не смотря на то что в хелпе указано Quartus II Support for SystemVerilog 2005 -> Section 20—Interfaces -> 20.6 Tasks and functions in interfaces : Supported могут не обольщаться %( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 23 апреля, 2008 Опубликовано 23 апреля, 2008 · Жалоба таки нашел более менее красивое решение проблемы остроумно. респект. :) я вроде б в повестках дня нового стандарта видел вопрос о параметризации функций. проверю ещё раз, если нет, напишу в коммитет писмецо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 24 апреля, 2008 Опубликовано 24 апреля, 2008 · Жалоба таки нашел более менее красивое решение проблемы .......... PS. Но такое работает только в прецижене. Ква юзерс, даже не смотря на то что в хелпе указано Quartus II Support for SystemVerilog 2005 -> Section 20—Interfaces -> 20.6 Tasks and functions in interfaces : Supported могут не обольщаться %( Действительно круто :) :a14: а то что не пашет в ква, то это ничего старый метод с инклудом есть или просто ждать когда в ква "всё хорошо будет" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 9 июля, 2008 Опубликовано 9 июля, 2008 · Жалоба таки нашел более менее красивое решение проблемы interface sc #(parameter int iw = 8, ow = 8); function automatic logic [ow-1:0] scale (input logic [iw-1:0] i); if (iw < ow) scale = {i, {ow-iw{1'b0}}}; else // if (iw >= ow) scale = i[iw-1:iw-ow]; endfunction endinterface module pipa(a, b); parameter integer aw = 20; parameter integer bw = 10; input wire [aw-1:0] a; output wire [bw-1:0] b; sc #($size(a), $size(b)) sc (); assign b = sc.scale(a); endmodule удивительно, сейчас просматривал переписку коммитета по этому вопросу и как раз перед выходом стандарта в 2005 году была жаркая дискуссия по вопросу параметризируемости функций (решили эту идею в стандарт тогда не вводить - мало времени оставалость). и самымы элегантным элегантным способом решения этой задачи признали именно решение с использованием интерфейсов :) судя по всему (из переписки) эта проблема останется без элегантного решения и в нововом стандарте - а жаль (вот в новом ВХДЛ разрешено параметризировать очень много всего /даже пакеты/) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 июля, 2008 Опубликовано 9 июля, 2008 · Жалоба ... сейчас просматривал переписку коммитета по этому вопросу .......... Если не секрет а как можно подписаться на подобную переписку ? Вообще что касается параметризуемости функций то мне кажеться это удобной, но не критичной фичей. Ведь наиболее всего это нужно для синтеза, а т.к. синтезируемая функция/таск исполняется атомарно (как я понял в bluspec SV таск может быть не атомарным), то это ограничивает количество слоев логики (сложность функции). Если потребуется разогнать частоту и затык будет именно в этой функции, то все равно потребуется разрабатывать модуль с другой реализацией. Для тестирования при наличии параметризуемых классов подобные возможности вообще не нужны %) судя по всему (из переписки) эта проблема останется без элегантного решения и в нововом стандарте - а жаль (вот в новом ВХДЛ разрешено параметризировать очень много всего /даже пакеты/) А что драфт стандарта (именно стандарта, а не обзорные статьи/презенташки) уже выложили ? Сев за SV+DPI я перестал интересоваться альтернативными ХДЛ языками и немного не в теме :) Хотя судя по публикациям того же ментора будующее за С++ и SV + OVM %)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 9 июля, 2008 Опубликовано 9 июля, 2008 · Жалоба Если не секрет а как можно подписаться на подобную переписку ? как подписаться, не знаю. сейчас вообще деятельность комитета не для простых смертных, поэтому приходится пользоваться методами аналитической разведки (процесс, согласитесь не для слабонервных :) ). http://www.eda-stds.org/sv-bc/hm/ - вот на этой страничке наиболее компактно размещены сведения по их мыльной переписке (есть база данных рассматримаемых вопросов, но она закрыта; удалось с этого же сайта достать Draft 6 в pdf-ке, но он закрыт паролем - сейчас пытаюсь декриптовать, но боюсь не достаточно имею навыков для этого). Вообще что касается параметризуемости функций то мне кажеться это удобной, но не критичной фичей. Ведь наиболее всего это нужно для синтеза, а т.к. синтезируемая функция/таск исполняется атомарно (как я понял в bluspec SV таск может быть не атомарным), то это ограничивает количество слоев логики (сложность функции). Если потребуется разогнать частоту и затык будет именно в этой функции, то все равно потребуется разрабатывать модуль с другой реализацией. да некритичной, но практика показала, что некоторые комплексные арифметические операции намного ускоряются за счёт ручного побитового доведения их до ума. и даже такая примитивная функция как взятие абсолютного значения числа при исполнение его как XOR со знаковым разрядом с последующим суммированием с ним даёт значительное сбережение ресурсов и разгон логики по сравнению с "программистским" вариантом исполнения abs(). теперь о практической актуальности этой парамерризации - допустим вы должны использовать подобную функцию в нескольких местах в модуле на операндах разной битности и при этом подобных модулей несколько. т.е. очефидно, что реализацию функции удобно выносить в отдельный файл. использование пакетов при этом даёт выигрышь только в том случае, если функция используется хоть и в разных местах, но с опендами одинаковой битности. с разной битностью - беда. (кстати, самый простой пример необходимости параметризации функции - это переворачивание шины как было бы удобно иметь средства для написания нечта подобного этому: function #(parameter bus_width=8) bit [bus_width-1:0] bus_flip (bit [bus_width-1:0] bus); for (int i=0; i<bus_width; i++) bus_flip=bus[bus_width-1-i]; endfunction ) как видите о таком благе как неатомарность речи нет, а даже такую простецкую атомарность некриво описать не возможно А что драфт стандарта (именно стандарта, а не обзорные статьи/презенташки) уже выложили ? нет не выложили. этот коммитет тоже хорошо забарикадировался. к тому же у меня есть ощущение, что новый ВХДЛ ранше 4ого квартала тоже не появится. но даже по тому, что есть, понятно, что новый ВХДЛ не дотягивает по своей функциональности даже до SV-2005. кроме публикашек, если вы заметили по ветке с обсуждением нового стандарта на ВХДЛ, уже появилась книжка обсуждающая все его новшества и то, что отложено на следующий за ближайшим стандарт (классы, рандомизация, AVM-библиотека, функциональное покрытие и все их последствия для методики) Сев за SV+DPI я перестал интересоваться альтернативными ХДЛ языками и немного не в теме Хотя судя по публикациям того же ментора будующее за С++ и SV + OVM %)) ну, конечно, SV+DPI=sila, но нос по ветру всё равно держать нужно на счёт публикаций того же ментора о будущем, которое за С++, то это нескромный, достаточно беспочвенный маркетинговый ход для Катапульты (но это сильно в оффтопик, если хотите могём пофлудить в соответствующей ветке о Катапульте или о недавней московской выставке EDA) респект Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 июля, 2008 Опубликовано 10 июля, 2008 · Жалоба да некритичной, но практика показала... за линк спасибо, будет время покурю немного. очень странно, на вхдл я сравнивал синтез в симплифае 3-х видов операции abs: 1. y <= x ^ sign(x) + sign(x) 2. y <= (x < 0) ? -x : x 3. y <= abs(x) результат синтеза был одинаков на верилоге не пробывал, похоже что от синтезатора зависит, о практической актуальности я не спорю что введение параметров в функции дело нужное, но не смертельное %) Кстати как вариант можно было пойти по ВХДЛ пути, благо до атрибутов векторов стало возможным достучаться, а автоматическое приведение близких типов было отродясь. нос по ветру всё равно держать нужно .... пофлудить в соответствующей ветке о Катапульте или о недавней московской выставке EDA) Работы много, времени не хватает %(, Для начала надо полностью DPI и OVM освоить, а там можно и дальше пойти. Насчет пофлудить я поставил себе катапульту, попробую какую нить математику на ней сделать. после этого можно и пофлудить. %) и вам Удачи!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться