2017-06-12 8 views
1

最近スカラーで作業を開始しましたが、MD5の実装を作成する必要があります。 MD5には符号なしの型が必要だと私は理解しています。私はすぐに署名のないタイプのチゼルを開始するので、私はそのライブラリを実装することに決めました。以下のビット操作を行う場合を除いて、すべてが正常に表示されます。私のF値は-271733879になります。原因はjava.lang.IllegalArgumentException:requirement failed:UInt liters -271733879は負です。否定的である。Chisel UInt負の値のエラー

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) 

ご協力いただけると助かります。

答えて

1

私の答えのために、私はChisel 2 UInt(123)スタイルではなくリテラルを指定するためにChisel 3の好ましいスタイル123.Uを使用していますが、この回答はどちらでも有効です。

  • 使用Scalaのロング
    • val myUInt = 0x98badcfeL.U明らか
    • これは、より大きな64のために動作しません(リテラルの終わりにLを置く):

      あなたがこれを行うことができ、いくつかの方法があります。ビット

  • 使用Scala BigInt
    • val myUInt = BigInt("98badcfe", 16).U
  • 文字列から
    • val myUInt = "x98badcfe".U
    • 進をBigIntsを構築するための使用チゼルの速記= X | h、dec = d、oct = 0、bin = b