new123 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 (изменено) · Жалоба Форумчане привет. Разработал я тут код и прибалдел от результата =)). Что делаю. 1) Имею буфер. 2) Получаю данные в карту и складирую их по-тихоньку в этот буфер 3) Когда насобираю X байт, циклом обхожу этот буфер, размечаю полученные данные, грубо говоря парсю их. reg [170 - 1:0][7:0] buffer_recv; for (int i = 0; i <= 161; i = i + 1) begin .... end Морально, я был готов получить слаки в 3-4 такта. В итоге отхватил слаки в 10-15 тактов. Но это еще не все. Такая штука заняла 80% чипа и 3 часа компиляции (против 40мин). Что гигантски много и неожиданно. Я понимаю, что данные обрабатывать лучше было сразу на лету, но их сложность тянет за собой огромное кол-во багов. Думал проскочить на промежуточном буфере и цикле, в разы все легче и понятней и стабильней. Может существует какая метода, как бы это все упростить? Например, что думаю я. 1) Может использовать GENERATE LOOP? Но я прочитал, что generate используется для instance, assign, а это никак вроде не ложится в мою задачу. Цикл просто пробегает у меня и вычленяет нужные значения переменной длины из разных частей буфера 2) Думаю может уменьшить кол-во итераций и разложить все на много циклов, раскидав все по тактам с помощью case 3) Или все таки может сильно уменьшить размер буфера и вернуться к технологии разбора практически на лету. За любые советы буду признателен. Изменено 2 декабря, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Приветствую! 27 minutes ago, new123 said: Разработал я тут код и прибалдел от результата =)). Мы тоже прибалдели - что творится! Совсем синтезаторы совесть потеряли - на "пустом" цикле 10-15 уровне логики лепят! Или может там под "..." скрывается нечто что мешает синтезатору честно выполнять свою работу за 3-4 такта? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 170 8-битных слов -- это 1 блок памяти. Что вы там такого написали, что у вас это заняло почти весь чип? reg [170 - 1:0][7:0] buffer_recv; Может, надо так написапть? reg [7:0] buffer_recv [170 - 1:0]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 8 minutes ago, andrew_b said: Может, надо так написапть? не поможет. ошибка в консерватории, он за 1 такт обрабатывает все 170 слов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 9 minutes ago, andrew_b said: 170 8-битных слов -- это 1 блок памяти. Сдаётся мне, что тот загадочный цикл не дал эти самые слова уложить в блок памяти, а размазал их ровным слоем по тригерам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Приветствую! 28 minutes ago, andrew_b said: Что вы там такого написали, что у вас это заняло почти весь чип? Достаточно написать always @(posedge clk) begin if (rst) begin buffer_recv <= '0; end else begin ... for (int i = 0; i <= 161; i = i + 1) begin rdataA <= buffer_recv[i]; ... end end и вам обеспечен mux на 170 входов . И не важно упакованный это массив или неупакованный. И это без всякой дополнительной обработки. В приступе вангования могу предположить что там таких rdata* несколько с разными смещениями от i. Соответственно и mux тоже несколько. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 (изменено) · Жалоба Эта моя штуковина на вскидку заняла примерно 400 RAM блоков и 70т ALM =)) Решил все таки не делать буфер и все на лету пробовать делать. И избавиться от этого цикла 1 hour ago, RobFPGA said: В приступе вангования могу предположить что там таких rdata* Схема примерно такая. Сильно не смейтесь =)) Тут все как не надо. И блокирующие присваивания и кучу ветвлений в цикле for (i..) begin ширина_поля = ширина_поля + 1; if (байт[i] является последним в поле?) begin номер_поля = номер_поля + 1 case (ширина поля) 3: begin case (номер поля) 1:.. 2:.. n... endcase end 4: begin case (номер поля) 1:.. 2:.. n... endcase end N1: begin case (номер поля) 1:.. 2:.. n... endcase end N2: begin case (номер поля) 1:.. 2:.. n... endcase end endcase ширина_поля = 0 end end Изменено 2 декабря, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Для общего развития вопрос: Я в систем верилоге не волоку, но что там конструкция с "for" синтезируется как цикл? Такое возможно? А то мне это трудно представить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 (изменено) · Жалоба 1 minute ago, Lmx2315 said: но что там конструкция с "for" синтезируется как цикл? Такое возможно? А то мне это трудно представить. мне уже объяснили что нет. А я так надеялся =)) Не трогал их 2 года и не надо было трогать Изменено 2 декабря, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Приветствую! 8 minutes ago, new123 said: Схема примерно такая. Сильно не смейтесь =)) Ну разве что сквозь слезы . FAST парсим? 2 minutes ago, Lmx2315 said: но что там конструкция с "for" синтезируется как цикл? Такое возможно? Возможно. Во что синтезируется зависит от контекста применения. Но все же надо уточнить что вы подразумеваете под цикл. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 4 hours ago, Lmx2315 said: "for" синтезируется как цикл? Такое возможно? А что в схемотехнике понимать под циклом? Огромный мультиплексор со счётчиком включённым на вход выбора порта? Или генерированная конструкция из тучи триггеров с какой-то логикой? Первый вариант в SV нужно так же писать ручками. Второй при правильно объявлении можно через цикл Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Приветствую! 30 minutes ago, Nick_K said: ... Первый вариант в SV нужно так же писать ручками. Второй при правильно объявлении можно через цикл Первый вариант (mux) тоже можно при помощи цикла описать. mux_out = '0; for (int ii=0; ii<N; ++ii) begin if (ii==mux_sel) mux_out = mux_in[ii]; end Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба 5 часов назад, Lmx2315 сказал: Для общего развития вопрос: Я в систем верилоге не волоку, но что там конструкция с "for" синтезируется как цикл? Такое возможно? А то мне это трудно представить. Такая конструкция в верилоге единственная синтезируемая конструкция (не знаю как систем-вр), которая выражается в буферном соединении кучи чего-то с кучей чего-то через логику или тупо проводами. В хдл циклов, в программерском смысле как таковых не бывает. Если только специально этим не заморочиться. Для простого соединения проводами ,без буферизации используется for под generate. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 2 декабря, 2019 Опубликовано 2 декабря, 2019 · Жалоба Приветствую! 4 minutes ago, thermit said: ... В хдл циклов, в программерском смысле как таковых не бывает ... что значит цикл в программистском смысле ? 6 minutes ago, thermit said: Если только специально этим не заморочиться. Так все же бывают!? Если заморочится. Какая-то странная логика получается (но вполне в HDLстиле - 'х.. знает есть ли программистские циклы или их нет ). Удачи. Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 3 декабря, 2019 Опубликовано 3 декабря, 2019 · Жалоба Вам не надо заморачиваться такими глупостями. В любом смысле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться