次のChiselコードは期待どおりに動作します。
class Memo extends Module {
val io = new Bundle {
val wen = Bool(INPUT)
val wrAddr = UInt(INPUT, 8)
val wrData = UInt(INPUT, 8)
val ren = Bool(INPUT)
val rdAddr = UInt(INPUT, 8)
val rdData = UInt(OUTPUT, 8)
}
val mem = Mem(UInt(width = 8), 256)
when (io.wen) { mem(io.wrAddr) := io.wrData }
io.rdData := UInt(0)
when (io.ren) { io.rdData := mem(io.rdAddr) }
}
io.rdData := UInt(0)
ただし、デフォルトが必要なため、指定しないとコンパイル時エラーになります。明示的に指定するX
か、デフォルトで X、erm を出力しないモジュールをデフォルトにする方法はありますか?
これを行う理由としては、出力がアサートされていない場合ren
は出力に依存するべきではなく、X を指定すると出力を指定できるため、最適化のために、X を指定することで合成ツールにドントケアであることを伝えることができます。