2017-01-15 49 views
1

我想比較鑿子中的兩個位類型值。首先,我使用===運算符嘗試了這一點。比較鑿子3中的兩個位類型值

val byte = (typ === MT_B) 

這給出了錯誤「值===不是chisel3.Bits的成員」。所以我嘗試瞭如下的equals方法。

val byte = (typ.equals(MT_B)) 

並且在代碼的後面部分給出了以下錯誤,其中該字節值用於Mux中的條件。

found : Boolean 
[error] required: chisel3.core.Bool 
[error]   val dout = Mux(byte, Fill(4, din(7,0)), 

我找不到將equals方法的Boolean返回值轉換爲Mool的Bool typer的方法。我無法從鑿子3 API ethier中找到替代===操作符的東西。

回答

2

布爾型是一個斯卡拉文字。鑿子相當於Bool

鑄造成一個鑿子布爾這樣

val myBoolean = true // Scala literal 
val myBool = Bool(myBoolean) 

另外,您還可以使用myBoolean.B從斯卡拉布爾轉換爲鑿布爾。

+0

謝謝。這解決了這個問題。但是,爲什麼他們從鑿子3的位類型中刪除===運算符?據我所知,它在鑿子2中。而且,現在沒有辦法直接從Bits比較中直接獲得Bool類型嗎?類似的東西會減少代碼混亂。 – isuru

+1

我只是在一個簡單的設計中對位類型的兩個值進行了===運算符測試。這個對我有用。是的,你可以通過追加一個「.toBool()」來比較操作中的Bool值。如果您想要更詳細的解釋,可能會發佈一個新問題。 – mtosch

+1

在鑿子3中位仍然有===另外,鑿子中的所有比較操作符都返回一個Bool。我很好奇,看看你是如何得到這個錯誤,「值===不是chisel3.Bits的成員」,因爲我不能重現它。 – jkoenig