new123 0 18 ноября, 2020 Опубликовано 18 ноября, 2020 (изменено) · Жалоба Форумчане привет. Навожу порядок, думал сейчас быстро раскидаю код, да не тут то было. Имею такой top, с таким например вызовом `include "tasks.sv" module top; reg byte_1; reg byte_2; initial begin byte_1 <= 1'b1; byte_2 <= 1'b1; end always (...) begin tasks.sub (byte_1, byte_2); end Ну и решил я task убрать в отдельный файл. Даже зачем то оформил как модуль (Просто квартус меня заспамил варнингами и так я их поборол). module tasks; task sub; input _byte_1; output _byte_2; begin _byte_2 <= byte_1; end endtask endmodule И тут все бы ничего и вроде квартус все съел, но начал ругать, что byte_2 миксует блокирующее и не блокирующее присваивание. Методом исключения понял, что надо закомментировать все присваивания в top модуле. То есть я понимаю, что теперб task sub выступает теперь как блокирующее присваивание byte_2 = byte_1 ? Правильно ли я все понял? И есть ли выход из такой ситуации? Не хочу блокирующее, вся времянка уедет. Заранее спасибо. Изменено 18 ноября, 2020 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 1 18 ноября, 2020 Опубликовано 18 ноября, 2020 · Жалоба Возможно, меня сейчас гуру верификации запинают ногами, но я поступил максимально "в лоб" в подобном случае. Просто утащил task'и в отдельный файл, дал ему расширение .svt и в теле top_tb.sv сделал `include "./tests.svt". Не оформлял в модуль или что-то подобное. Голый текст. Всё =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 18 ноября, 2020 Опубликовано 18 ноября, 2020 · Жалоба 6 minutes ago, nice_vladi said: Не оформлял в модуль или что-то подобное. Голый текст. Всё =) я так и начал. Сначала столкнулся с тем, что таски используют регистры, которые объявлены в top модуле и не видят их никакими инклудами (хотя вот сейчас думаю, может надо было обращаться через top.xxxx). Ну ладно, сделал все как надо, добавил кучу output вместо прямого обращения. При таком подходе он начал жаловаться, что я что то такое делаю, что создают latch. Завел модули. Ушло. Теперь вот говорит, что я миксую присваивания. Может опять вернуться к первому варианту с адресацией top.xxx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 18 ноября, 2020 Опубликовано 18 ноября, 2020 · Жалоба Буду теперь знать, что вместо output в task надо использовать ref. Не знал я, что в верилоге бывают ссылки. module tasks; task sub; input _byte_1; ref _byte_2; begin _byte_2 <= byte_1; end endtask endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 ноября, 2020 Опубликовано 19 ноября, 2020 · Жалоба освежили бы знания по function/task из стандарта, тогда многие непонятки уйдут Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 ноября, 2020 Опубликовано 19 ноября, 2020 · Жалоба 18 hours ago, new123 said: Сначала столкнулся с тем, что таски используют регистры, которые объявлены в top модуле и не видят их никакими инклудами Чтобы "увидело", достаточно инклудить в теле модуля, после объявления регистров. Или вообще под конец модуля перед endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 19 ноября, 2020 Опубликовано 19 ноября, 2020 · Жалоба 5 minutes ago, Nick_K said: в теле модуля, после объявления регистров. Или вообще под конец модуля перед endmodule прям вот пробовал и там и там. Ни в какую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 ноября, 2020 Опубликовано 19 ноября, 2020 · Жалоба 2 minutes ago, new123 said: прям вот пробовал и там и там. Ни в какую. Странно, может с парсером какие приколы. У меня есть инклуд для кое-каких макросов, но сути дела это не меняяет - обычная подстановка кода из какого-то файла на этапе чтения исходников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 19 ноября, 2020 Опубликовано 19 ноября, 2020 · Жалоба 8 hours ago, Nick_K said: Странно, может с парсером какие приколы. Вообщем был вынужден решить эту проблему, а то моделсим не принимал такие мои конструкции. Инклуды принимает, если удалить эти файлы из проекта, чтобы они нигде не значились Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 ноября, 2020 Опубликовано 19 ноября, 2020 · Жалоба 6 minutes ago, new123 said: Инклуды принимает, если удалить эти файлы из проекта, чтобы они нигде не значились А ну так да, что же Вы хотели? Если файл есть в листе библиотеки, он будет считан в регулярном порядке. Потому его нужно удалять и чтобы только при парсинге было dummy подключение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 20 ноября, 2020 Опубликовано 20 ноября, 2020 · Жалоба В ModelSim такая же история повторилась. Вместо vlog -work work *.sv пришлось перечислять каждый sv файл, за исключением этих инклудов. Вот это я поразвлекся, навел уборку в коде Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 ноября, 2020 Опубликовано 20 ноября, 2020 · Жалоба 4 minutes ago, new123 said: В ModelSim такая же история повторилась. Вместо vlog -work work *.sv пришлось перечислять каждый sv файл, за исключением этих инклудов. Вот это я поразвлекся, навел уборку в коде правило хорошего тона инклуды в svh файл) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 20 ноября, 2020 Опубликовано 20 ноября, 2020 (изменено) · Жалоба 5 minutes ago, des00 said: правило хорошего тона инклуды в svh файл) спасибо, буду теперь знать =) Изменено 20 ноября, 2020 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 20 ноября, 2020 Опубликовано 20 ноября, 2020 · Жалоба 2 hours ago, new123 said: Вместо vlog -work work *.sv пришлось перечислять каждый sv файл, за исключением этих инклудов. Вот это я поразвлекся, навел уборку в коде А ещё лучше в другой папке. Правда потом придётся подогнать доступ через относительный путь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться