Заглянул в репозиторий Chisel и чуть не поперхнулся. В релизе 7.14.0, который вышел месяц назад, наконец-то добавили проверку неявного усечения ширины сигналов.
Теперь стандартный оператор соединения := ругается, если сигнал в правой части шире, чем в левой. Причём проверка делается на уровне FIRRTL в firtool, уже после вывода ширин, - поэтому покрываются случаи, когда фронтенд Chisel ещё не знает окончательную ширину.
Напомню, раньше такое усечение не обнаруживалось даже линтером на выходном Verilog: к этому моменту firtool уже превращал его в явное взятие младших битов.
Пока это только warning, но разработчики планируют в будущем сделать ошибкой.
Одновременно пофиксили семантику новых Connectable-операторов: для них неявное усечение теперь не разрешается, нужно использовать .squeeze или новый оператор присвоения с усечением :%=.
Тема обсуждалась ещё с 2019 года, но до сих пор это поведение сохраняли, в том числе из-за совместимости со старым кодом и из-за того, что фронтенд не всегда знает конечные ширины сигналов.
—
А ещё несколько дней назад вышел Verilator 5.052 с поддержкой неблокирующих присваиваний в initial. Вот так вот! Тоже джва года долго ждали 🎉
Теперь стандартный оператор соединения := ругается, если сигнал в правой части шире, чем в левой. Причём проверка делается на уровне FIRRTL в firtool, уже после вывода ширин, - поэтому покрываются случаи, когда фронтенд Chisel ещё не знает окончательную ширину.
Напомню, раньше такое усечение не обнаруживалось даже линтером на выходном Verilog: к этому моменту firtool уже превращал его в явное взятие младших битов.
Пока это только warning, но разработчики планируют в будущем сделать ошибкой.
Одновременно пофиксили семантику новых Connectable-операторов: для них неявное усечение теперь не разрешается, нужно использовать .squeeze или новый оператор присвоения с усечением :%=.
Тема обсуждалась ещё с 2019 года, но до сих пор это поведение сохраняли, в том числе из-за совместимости со старым кодом и из-за того, что фронтенд не всегда знает конечные ширины сигналов.
—
А ещё несколько дней назад вышел Verilator 5.052 с поддержкой неблокирующих присваиваний в initial. Вот так вот! Тоже джва года долго ждали 🎉