Удалите «reg» из объявления вывода, и код должен работать (по умолчанию используется проводной тип вывода).
Есть две вещи, которые большинству инженеров-самоучек или плохо обученных инженеров трудно понять в Verilog: (1) блокирующие -vs- неблокирующие присваивания (см. мою статью на эту тему: http://www.sunburst).-design.com/papers/CummingsSNUG2000SJ_NBA.pdf) и (2) reg -vs-wire. Давайте проясним последнюю тему прямо сейчас.
Все, что находится слева (LHS), или процедурное назначение (всегда, начальное, задача, функция) должно быть объявлено как тип переменной (обычно это reg). Все остальное в языке — это сеть (обычно провод). Без исключений. Это действительно так просто. Я не знаю ни одной книги Verilog, в которой бы это было сказано так просто.
Как это произошло? Я спросил Фила Мурби, хорошего друга и изобретателя языка Verilog: «Почему reg??» Фил сказал мне, что когда он изобретал Verilog, не было инструментов синтеза, и он думал, что все, что выходит из блока always, будет регистром. Он был неправ, и теперь мы застряли с этим ключевым словом «reg».
Я пытался изменить это в комитетах Veirlog и SystemVerilog более десяти лет. Я хотел бы объявить все как провод, и первое использование будет определять, ведет ли себя «провод» как reg (первое назначение из процедурного блока и последнее назначение выигрывает) или ведет себя как провод (первое назначение из управляющего источника, такого как выход модуля или непрерывное назначение и несколько драйверов разрешаются, как сегодня в Verilog), и было бы незаконным выполнять как процедурные назначения, так и назначения драйвера для одного и того же сигнала. Увы, мне не хватило голосов в комитете, чтобы принять это предложение.
Это ошибка, которую я чаще всего совершаю в своем собственном коде. Просто привыкните к таким сообщениям об ошибках, как «недопустимое назначение LHS» или «недопустимое назначение провода». Они оба означают одно и то же, вы забыли объявить свои регистры.
С уважением - Клифф Каммингс - Verilog & SystemVerilog Guru
person
Cliff Cummings
schedule
27.06.2012