Koluchiy 0 28 сентября, 2018 Опубликовано 28 сентября, 2018 · Жалоба Здравствуйте, уважаемые гуры. Есть что-то типа такого: always @ (posedge Clk or posedge Reset) begin if (Reset) begin VarA <= 0; VarB <= 0; end else begin simple_task(VarC, VarA); simple_task(VarD, VarB); end end task automatic simple_task; input Var1; output Var2; begin Var2 <= ~Var1; end endtask 2 переменные изменяются при помощи 2х экземпляров task'а. Проблема в том, что если использовать присваивание "<=" , то синтезатор (Quartus 18) ругается - говорит, что нельзя automatic с таким присваиванием. Использовать присваивание "=" можно и все ок, но с таким присваиванием проблемы дальше, т.е. оптимально, чтобы на выходе из этого блока было присваивание "<=". Понятно, что можно сделать task'и и присваивание "=", а потом переприсвоить в другую переменную по "=>". Но так громоздко, хочется написать проще. Кто что посоветует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 28 сентября, 2018 Опубликовано 28 сентября, 2018 · Жалоба А, ну да. Понятно, что можно вместо таска сделать модуль. Но захотелось сделать именно таск. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 28 сентября, 2018 Опубликовано 28 сентября, 2018 · Жалоба Приветствую! А, ну да. Понятно, что можно вместо таска сделать модуль. Но захотелось сделать именно таск.Если по логике подходит то сделайте как функцию ... function logic simple_func (input logic var1); return ~var1; endtask ... VarC <= simple_func(VarA); ... Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 28 сентября, 2018 Опубликовано 28 сентября, 2018 · Жалоба Приветствую! Если по логике подходит то сделайте как функцию ... function logic simple_func (input logic var1); return ~var1; endtask ... VarC <= simple_func(VarA); ... Удачи! Rob. У реального таска несколько выходов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AnatolySh 0 15 октября, 2018 Опубликовано 15 октября, 2018 · Жалоба On 9/28/2018 at 2:18 PM, Koluchiy said: У реального таска несколько выходов. У функции также м.б. несколько выходов: https://stackoverflow.com/questions/25396647/understanding-system-verilog-function-return-values Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 16 октября, 2018 Опубликовано 16 октября, 2018 · Жалоба ИМХО зачем вообще использовать таск в дезайне? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба А почему бы и нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба Вообще, действительно, я не знаю о каких либо ограничений в применении тасков при разработке в железе, поскольку никогда так не делал. Видимо это просто не укладывается в мою парадигму разработки. Как я в свое время понял, task предназначен для формирования некого сценария работы чего либо, то бишь для верификации/тестов. А если что-то хочется посчитать и при этом не нагромоздить - использовать функции (как у вас). И ведь неспроста ведь операторы времени (#, wait, @) отсутствуют в функциях. Хотелось бы, чтобы и другие разработчики оставили мнение по этому поводу. Использует ли кто таск в синтезе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 19 октября, 2018 Опубликовано 19 октября, 2018 · Жалоба task - это возможность вынести общие куски кода в отдельную сущность. Это уменьшает громоздкость, улучшает читабельность, сопровождаемость. Наконец, это просто удобно. Конечно, надо это делать всегда к месту, и в моей практике таких мест было не очень много. Например, в одном проекте была пара довольно развесистых автоматов, у которых были похожие фрагменты кода. Успешно вынеслось в task'и. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Restinstage 1 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба Доброго дня. Есть код, описывающий стирание RAM, но этих RAM несколько, разной глубины и с разными шинами. Можно ли такую конструкцию запихивать в task, чтобы не копипастить этот код несколько раз, или есть более правильные способы? always_ff @(posedge CLK) begin if (reset) begin erasing_counter <= 0; cell_counter <= 0; erasing_wren <= 0; erasing_wrclock <= 0; erasing_wraddress <= 0; end else if (erasing) begin if (cell_counter <= CELL) begin if (erasing_counter == 8) begin erasing_counter <= 0; cell_counter <= cell_counter + 1; end else erasing_counter <= erasing_counter + 1; end unique case(erasing_counter) 2,3 : erasing_wren <= 1; 4,5 : begin erasing_wren <= 1; erasing_wrclock <= 1; end 6 : begin erasing_wren <= 1; erasing_wrclock <= 0; end 7 : begin erasing_wren <= 0; erasing_wrclock <= 0; erasing_wraddress <= erasing_wraddress + 1; end endcase end else begin erasing_counter <= 0; cell_counter <= 0; erasing_wren <= 0; erasing_wrclock <= 0; erasing_wraddress <= 0; end end always_ff @(posedge CLK) begin if (reset) erasing <= 0; else if ((Erasing_ram)) erasing <= 1; else if ((cell_counter == CELL) && (erasing_counter == 8)) erasing <= 0; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба 2 часа назад, Restinstage сказал: Есть код, описывающий стирание RAM, но этих RAM несколько, разной глубины и с разными шинами. Можно ли такую конструкцию запихивать в task, чтобы не копипастить этот код несколько раз, или есть более правильные способы? Параметрами пользоваться умеете? Кроме того, у таска может быть множество входов, и переменные значения можно определять при вызове таска. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Restinstage 1 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба 40 minutes ago, iosifk said: Параметрами пользоваться умеете? Ими все и задано. В стандарте про таски тоже почитал. Тут кто-то говорил, что таск должен выполняться за один такт, иначе не синтезируется. А кое-кто писал даже, что таски вообще не синтезируются) Вот я и спрашивал, может правильнее void функцию использовать или как-то еще Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба Приветствую! 2 minutes ago, Restinstage said: Ими все и задано. В стандарте про таски тоже почитал. Тут кто-то говорил, что таск должен выполняться за один такт, иначе не синтезируется. А кое-кто писал даже, что таски вообще не синтезируются) Вот я и спрашивал, может правильнее void функцию использовать или как-то еще Чтобы таск был синтезируемым внутри него не должно быть time-consume конструкций. Тоесть никаких #delay, @(posedge clk), и.т.д которые можно использовать в не синтезируемых тасках. Поэтому применение таск в синтезе похоже на функции. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба 14 minutes ago, Restinstage said: ся. А кое-кто писал даже, что таски вообще не синтезируются) у меня много тасков. Чтобы код был более читаемый. Внутри обычно какие то присваивания входных параметров куда то далее. Есть несколько тасков даже с case. Работает давно, синтезируется нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
attaboy 0 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба On 10/18/2018 at 4:48 PM, Darky777 said: Вообще, действительно, я не знаю о каких либо ограничений в применении тасков при разработке в железе, поскольку никогда так не делал. Видимо это просто не укладывается в мою парадигму разработки. Как я в свое время понял, task предназначен для формирования некого сценария работы чего либо, то бишь для верификации/тестов. А если что-то хочется посчитать и при этом не нагромоздить - использовать функции (как у вас). И ведь неспроста ведь операторы времени (#, wait, @) отсутствуют в функциях. Хотелось бы, чтобы и другие разработчики оставили мнение по этому поводу. Использует ли кто таск в синтезе? У меня тоже сформировалось видение, что таски - для моделирования, а для синтеза - функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться