flammmable 0 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба Те кто писали на Паскале и на Си, знают, что у Паскаля все переменные описываются в начале функции в специальном блоке var. А в Си переменную можно объявить где угодно. С какого-то момента - даже внутри заголовка цикла for(int i=0, i <10, i++). Понятно, что на такое компилятор какого-нибудь MCU не способен. И всё же я слегка офигел, когда компилятор Си от Microchip начал выдавать неочевидную ошибку, по сути ругаясь на то, что в начале функции между объявлениями переменных у меня затесалось что-то типа a=b+c; . Т.е. это компилятор Си, и блока var нет. Но писать переменные надо всё равно только в начале функции и ничем их не разбавлять. Но когда ModelSim говорит undefined variable: 'my_reg' на вот такой код module my_module(output out_my_reg); assign out_my_reg = my_reg; reg my_reg; endmodule (если поменять строки reg и assign местами, то всё работает, причем синтезатору-то пофиг - он собирает и так и эдак) то я думаю, а зачем вообще декларировать хоть какую-то поддержку Верилога? Нет, серьезно. Позиционировали бы себя как надежный симулятор VHDL-а. Поэтому вопрос. Дико платный, крайне закрытый и жутко элитарный VSD такую же фигню творит? Или он покруче? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 23 апреля, 2020 Опубликовано 23 апреля, 2020 (изменено) · Жалоба Тул отругался на некорректный код. Надо бы спасибо сказать, не? VCS очень мощная штука - распределенные вычисления, смешанное моделирование, эмуляция режимов питания и симуляция схем просто гигантских размеров. Хотя лично я предпочитаю симулятор кэденса (бывший ncverilog). По сравнению с ними, моделсим - детский калькулятор. p.s. Если тул офицально поддерживает какую то спецификацию, то поддерживать он ее должен до последней строчки. Видать, в верилоге-95 так писать нельзя. Можете попробовать компильнуть под более свежий формат верилога- 2001. Хотя как по мне - глаза режет. Изменено 23 апреля, 2020 пользователем Aleх Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 1 час назад, flammmable сказал: (если поменять строки reg и assign местами, то всё работает, причем синтезатору-то пофиг - он собирает и так и эдак) Пока у вас my_reg однобитный, то пофиг, да. Но если my_reg будет многоразрядным, то вас ждёт сюрприз. Так что привыкайте сразу писать корректный код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 12 minutes ago, andrew_b said: Пока у вас my_reg однобитный, то пофиг, да. Но если my_reg будет многоразрядным, то вас ждёт сюрприз. Так что привыкайте сразу писать корректный код. Код абсолютно корректен. Оба его варианта синтаксически идентичны, что в однобитном, что в многобитном исполнении. Продолжите вашу мысль про сюрприз и я укажу вам на вашу ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 4 часа назад, flammmable сказал: Код абсолютно корректен. Ну да. Верилог позволяет не просто выстрелить себе в ногу, а сделать это из гранатомёта. А потом приходится, «поминая тихим матерным словом» изобретателей языка, выяснять, а хрена ли такой «абсолютно корректный код» абсолютно некорректно работает. 4 часа назад, flammmable сказал: Продолжите вашу мысль про сюрприз Сейчас не могу процитировать точно, но Вивадо, например, вместо необъявленного вектора делает однобитный сигнал. Разумеется, мы имеем только 0 или 1 там, где дожно быть, например, 245 или, -16. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба в sv при инстанциации в some_module inst_1(.*); практически все тулзы подразумевают 1 битовый неявный сигнал к порту, независимо от того что объявлено в some_module и часто это собирается, то есть остальные биты и внутренности выкидываются upd ну то есть можно изрядно повозиться, пока поймешь в чем дело ---------------- это поганый квартус :) разрешает писать как придется, потом много удивления, когда другой тул Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба Приветствую! 5 hours ago, flammmable said: Код абсолютно корректен. Оба его варианта синтаксически идентичны, что в однобитном, что в многобитном исполнении. Корректный с вашей точки зрения? Или с точки зрения стандарта? Ссылку на соответствующий пункт не дадите? 1 hour ago, andrew_b said: Ну да. Верилог позволяет не просто выстрелить себе в ногу, а сделать это из гранатомёта. Это если неграмотной обезьяне дать гранатомет. Но в таком случае и на VHDL отстрелить себе что-то можно (или застрелится ) Да и на других языках аналогично. 12 minutes ago, yes said: в sv при инстанциации в some_module inst_1(.*); практически все тулзы подразумевают 1 битовый неявный сигнал к порту, независимо от того что объявлено в some_module Quote 4.5 Implicit declarations ... - If an identifier is used in the terminal list of a primitive instance or a module instance, and that identifier has not been declared previously in the scope where the instantiation appears or in any scope whose declarations can be directly referenced from the scope where the instantiation appears (see 12.7), then an implicit scalar net of default net type shall be assumed. Лечится все это просто - `default_nettype none Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба 19 hours ago, flammmable said: Код абсолютно корректен. Оба его варианта синтаксически идентичны, что в однобитном, что в многобитном исполнении. Продолжите вашу мысль про сюрприз и я укажу вам на вашу ошибку. Код не корректен. Если считаете что это не так, дайте ссылку на раздел стандарта, разрешающий присваивание, где в rhs стоит необъявленная переменная. Вот синтезатор работает не по стандарту, это да. ЗЫ. А если это еще и квартус, так он еще и wire с reg путает) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба 4 hours ago, des00 said: Код не корректен. Если считаете что это не так, дайте ссылку на раздел стандарта, разрешающий присваивание, где в rhs стоит необъявленная переменная. Вот синтезатор работает не по стандарту, это да. ЗЫ. А если это еще и квартус, так он еще и wire с reg путает) Прошу прощения. Чего-то меня вчера заклинило. В Си, переменную можно объявить в любом месте (как и регистр в Верилоге), но это нужно сделать, разумеется, ДО её использования. Думаю, что Верилог вполне следует тому же принципу. И МоделСим разумно выставляет ошибку. Хотя в теории (да и на практике в Квартусе) нет объективных препятствий для создания синтезатора/симулятора, который бы реализовывал синтаксис с объявлением регистров хоть в самом конце модуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба 12 минут назад, flammmable сказал: Думаю, что Верилог вполне следует тому же принципу. Без "думаю" это описано в стандарте. 13 минут назад, flammmable сказал: нет объективных препятствий для создания синтезатора/симулятора, который бы реализовывал синтаксис с объявлением регистров хоть в самом конце модуля Препятствие простое - не соответствие стандарту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
druzhin 4 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба В верилоге любой сигнал может быть объявлен в любом месте. Но! Использовать этот сигнал можно только после его объявления. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 12 7 июня, 2020 Опубликовано 7 июня, 2020 · Жалоба В 23.04.2020 в 11:50, flammmable сказал: Те кто писали на Паскале и на Си, знают, что у Паскаля все переменные описываются в начале функции в специальном блоке var. А в Си переменную можно объявить где угодно. С какого-то момента - даже внутри заголовка цикла for(int i=0, i <10, i++). Понятно, что на такое компилятор какого-нибудь MCU не способен. И всё же я слегка офигел, когда компилятор Си от Microchip начал выдавать неочевидную ошибку, по сути ругаясь на то, что в начале функции между объявлениями переменных у меня затесалось что-то типа a=b+c; . Т.е. это компилятор Си, и блока var нет. Но писать переменные надо всё равно только в начале функции и ничем их не разбавлять. Строго говоря, пример C не вполне корректен. До стандарта С99 все переменные в C должны были быть определены в начале блока. Если компилятор работает не в в режиме C99 или еще новее, то он прав и ошибка вполне очевидная. Другое дело, что до введения стандарта C99 многие компиляторы (главное - GNU C) де-факто поддерживали определение переменных в произвольном месте блока, но это было расширением языка. В 23.04.2020 в 11:50, flammmable сказал: Но когда ModelSim говорит undefined variable: 'my_reg' на вот такой код И хорошо делает. Я был бы ему только благодарен за дополнительную заботу. Скорее всего такое поведение регулируется какими-то настройками или ключами, но я бы его не отключал :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба On 4/23/2020 at 7:34 PM, RobFPGA said: Лечится все это просто - `default_nettype none встречал такое в чужих исходниках.. всё не мог понять для чего же это Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demidrol 0 29 июня, 2020 Опубликовано 29 июня, 2020 · Жалоба чего только не выдумывают люди, лишь бы не использовать verilog-mode. AUTOREG/AUTOWIRE знатно помогают создавать такие вот декларативные блоки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 29 июня, 2020 Опубликовано 29 июня, 2020 · Жалоба 1 hour ago, demidrol said: чего только не выдумывают люди, лишь бы не использовать verilog-mode. AUTOREG/AUTOWIRE знатно помогают создавать такие вот декларативные блоки. да, толковая была вещь. но сейчас все пользуют синтезируемое подмножество SV (кто не пользует - советую), в нем смысла в verilog-mode очень мало Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться