[Chisel/Scala]小数点のデータを導入する
やりたいこと
小数点のデータ(ほかの言語でいうところのfloat)を導入したい。
背景としては、自作のCPU回路にパフォーマンスカウンタを設けようとしており、これを整数ではなく小数で表現したい。(例えば「1指令あたりのサイクル数」を測定する場合、1か1.9かで意味は全く異なる)
問題点
Chiselに浮動小数点型のようなものがあればいいのだが、現状存在しない。
かつてはF浮動小数点を表すFixedPoint型というのがあったらしく、ネットを調べるとこのやり方がでてくるが、現在は廃止されてしまったらしい(参考)。
対策
仕方がないので整数型のみで対応する。今回は小数の計算をしたいというよりは、最終的に画面に計算結果を表示することが目的なので
計算時は10倍した値を整数型に格納
表示時に、整数部と小数部をそれぞれ求めて表示
というようにした
val cpi10 = Mux(instCount === 0.U, 0.U, cycleCount * 10.U / instCount)
printf(p"CPI: ${cpi10/10.U}.${cpi10%10.U}\n")
最新記事
すべて表示現象 配列がある インデックスを表す変数が配列のサイズ内かをチェックし、サイズ内の場合のみ要素にアクセス というよくあることをやろうとした val array = Seq.fill(ARRAY_SIZE)(...) when(i.U < ARRAY_SIZE){...
概要 Queueを使ってデータのやり取りをする場合、以下のような操作が可能です。 Queue.io.enq.valid:falseにするとデータを入れない Queue.io.deq.valid:falseにするとデータを取り出さない これらの使い分けについてまとめてみます...
やりたいこと 類似したユニットが複数ある これらの処理は大部分が共通で一部のみ異なる 条件に応じて適切なユニットを1つ選び、処理を実行させる やろうとしたこと これを実現するために 親クラスを定義し、共通処理はここに記述...
Comments