我最近开始使用scala,我需要创建MD5的实现。据我所知,MD5需要无符号类型,scala没有附带。我很快就会开始使用Chisel,它有无符号类型,我决定实现它的库。到目前为止一切看起来都不错,除了在进行下面的按位操作时,我的F值变为-271733879,这会导致错误"引起:java.lang.IllegalArgumentException:要求失败:UInt文字-271733879为否定"因为UI不能为负。
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)
非常感谢任何帮助。
答案 0 :(得分:1)
为了我的回答,我使用Chisel 3首选123.U
样式来指定文字,而不是Chisel 2 UInt(123)
样式,但这个答案适用于任何一种。
有几种方法可以做到这一点:
L
放在文字的末尾)
val myUInt = 0x98badcfeL.U
val myUInt = BigInt("98badcfe", 16).U
val myUInt = "x98badcfe".U