top of page
M.R
ソフトウェア開発などについての情報を綴ります
検索
[Chisel]Whenの中は必ず評価される
現象 配列がある インデックスを表す変数が配列のサイズ内かをチェックし、サイズ内の場合のみ要素にアクセス というよくあることをやろうとした val array = Seq.fill(ARRAY_SIZE)(...) when(i.U < ARRAY_SIZE){...
2024年6月29日
[Chisel] Queue.enq.valid vs deq.valid
概要 Queueを使ってデータのやり取りをする場合、以下のような操作が可能です。 Queue.io.enq.valid:falseにするとデータを入れない Queue.io.deq.valid:falseにするとデータを取り出さない これらの使い分けについてまとめてみます...
2024年6月29日
[Chisel]ポリモーフィズムは使わない
やりたいこと 類似したユニットが複数ある これらの処理は大部分が共通で一部のみ異なる 条件に応じて適切なユニットを1つ選び、処理を実行させる やろうとしたこと これを実現するために 親クラスを定義し、共通処理はここに記述...
2024年6月29日
[Chisel]繰り返しを途中で抜ける
やりたいこと ★ 同種のモジュールが複数ある これらのうち、所定の条件を満たすものを1つ選択 これを実現するために モジュール一覧を配列で定義 Seq.tabulateでモジュール配列に対してループを回す 1つ1つ条件を満たすかチェック 満たせばそれを選択し、ループ終了...
2024年6月29日
[Chisel]Bundleに接続するのはハードウェア
現象 以下のコードを実行すると、 class Signals extends Bundle{ val pc = UInt((32.W)) ・・・ } val sig = Wire(new Signals) sig.pc := 0.U 以下のエラーが発生...
2024年6月29日
![[Chisel/Scala]小数点のデータを導入する](https://static.wixstatic.com/media/90b712_21c2f42c09a44170a4109e05a4004c90~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/90b712_21c2f42c09a44170a4109e05a4004c90~mv2.webp)
![[Chisel/Scala]小数点のデータを導入する](https://static.wixstatic.com/media/90b712_21c2f42c09a44170a4109e05a4004c90~mv2.png/v1/fill/w_454,h_341,fp_0.50_0.50,q_95,enc_avif,quality_auto/90b712_21c2f42c09a44170a4109e05a4004c90~mv2.webp)
[Chisel/Scala]小数点のデータを導入する
やりたいこと 小数点のデータ(ほかの言語でいうところのfloat)を導入したい。 背景としては、自作のCPU回路にパフォーマンスカウンタを設けようとしており、これを整数ではなく小数で表現したい。(例えば「1指令あたりのサイクル数」を測定する場合、1か1.9かで意味は全く異な...
2024年3月9日
[Chisel]条件分岐について
はじめに chiselを書いていると、条件分岐として以下の文法が使えることを学びます。 if when Mux (MuxCase) これらはどのように使い分けたらいいのでしょうか? ifとwhen/Mux まずこれらは条件判定に用いる変数がscalaのBoolean型かch...
2024年2月23日
[scala/chisel] value >> is not a member of (chisel3.Bool, chisel3.UInt)
現象 以下のコードで掲題のコンパイルエラーが発生 val x = 3.U(16.W) val y = 5.U(16.W) val mul_out := MuxCase(0.U(16.W), Seq( (exe_fun === ALU_MULH) ->...
2024年2月23日
![[Chisel]整数型のキャスト](https://static.wixstatic.com/media/90b712_ddcc8785613c4cd394fd60f97a0294fe~mv2.png/v1/fill/w_636,h_92,fp_0.50_0.50,lg_1,q_35,blur_30,enc_avif,quality_auto/90b712_ddcc8785613c4cd394fd60f97a0294fe~mv2.webp)
![[Chisel]整数型のキャスト](https://static.wixstatic.com/media/90b712_ddcc8785613c4cd394fd60f97a0294fe~mv2.png/v1/fill/w_454,h_66,fp_0.50_0.50,q_95,enc_avif,quality_auto/90b712_ddcc8785613c4cd394fd60f97a0294fe~mv2.webp)
[Chisel]整数型のキャスト
やりたいこと 32bitで定義したchisel.UInt型の変数を64bitに拡張したい できないこと まず、以下はコンパイルエラーになる val x = 1.U(32.W) val y = x.asUInt(64.W)...
2024年2月23日
RISC-VとChiselで学ぶ はじめての自作CPU メモ その3
引き続きです。 26章 ベクトル命令とは 「ベクトルレジスタ長をプログラムから分離できる」とはどういうことか: SIMDの場合はベクトルレジスタ長ごとに命令がある(SSEは128ビットのロード、というように) このため、ハードウェアによってプログラム中で使う命令を変えなけれ...
2024年2月12日
RISC-VとChiselで学ぶ はじめての自作CPU メモ その2
続きです。長くなったので分けました。 RISC-VとChiselで学ぶ はじめてのCPU自作 ――オープンソース命令セットによるカスタムCPU実装への第一歩 23章 パイプラインレジスタの実装 一瞬なぜ各ステージ間にレジスタを挟むことでパイプラインになるのかよく分からなかっ...
2024年2月3日
【RISCV/Chisel】Error: unrecognized opcode vsetvli
状況 RISCVのベクトル命令をchiselで実装中。 vsetvli命令を追加すると、掲題のコンパイルエラーが発生。 原因と解決策 コンパイル時の引数が間違っていた。 誤: riscv64-unknown-elf-gcc -march=rv32i 正:...
2024年2月3日
【RISC-V/Chisel】パイプラインのストールで躓いたところ
はじめに 「RISC-VとChiselで学ぶ はじめてのCPU自作」をやっていて少し躓いたところがあるのでまとめておきます。 自分は今までソフトウェア中心にやってきたので回路設計の考え方に慣れないところがあります、、、 概要...
2024年1月27日
bottom of page