Я недавно начал работать в scala, и мне нужно создать реализацию MD5. Насколько я понимаю, MD5 требует беззнаковых типов, которых у scala нет. Поскольку я скоро начну работать с Chisel, у которого есть неподписанные типы, я решил реализовать его библиотеку. Пока все выглядит хорошо, за исключением того, что при выполнении следующих побитовых операций мое значение F становится -271733879, что вызывает ошибку «Причина: java.lang.IllegalArgumentException: требование не выполнено: UInt literal -271733879 отрицательно», поскольку UInts не может быть отрицательным.
if(i<16){
F = ((B & C) | ((~B) & D))
g = i
}
В сообщении об ошибке есть еще кое-что, но это просто список трассировки различных библиотек и классов, в которых произошла ошибка из-за этой ошибки, и поэтому я не публиковал его, потому что не думал, что это важно. Если бы это было так, я могу отредактировать это и опубликовать все.
Мои значения B, C и D равны эквивалентам в нижнем регистре, перечисленным ниже, и это первый раз, когда выполняется цикл for, поэтому они еще не обновлены.
var a0 : UInt = UInt(0x67452301)
var b0 : UInt = UInt(0xefcdab89)
var c0 : UInt = UInt(0x98badcfe)
var d0 : UInt = UInt(0x10325476)
Любая помощь будет принята с благодарностью.