開発日記

Erlangをダラダラ書きます。

2021-11-01から1ヶ月間の記事一覧

分岐予測

分岐予測 分岐先アドレスの予測 分岐先アドレスキャッシュ(BTAC,BTB) 参考文献 分岐予測 条件分岐が成立するか不成立化を予測 分岐先のアドレスを予測 分岐先アドレスの予測 分岐先アドレスキャッシュ(BTAC,BTB) BTACは,分岐先アドレスの予測値を与え…

Verilog 注意点

always文 assign文 数値 ビット論理演算 シフト演算 演算の優先順位 連結 function文 組み合わせ回路 always文 always文の中で代入する際は,ノンブロッキング代入<=を使用する. always文では,代入する変数はregとして宣言する必要がある. assign文 assig…

Verilog function文 注意点

function文の入力信号 悪い例 良い例 今回の教訓: 出力に関係する信号は全て定義しよう! function文の入力信号 function文は入力信号を省略した記述が可能だが,そこには落とし穴がある. 下記の2項目に注意 function文で入力信号として定義していない信号…

System verilog 文法メモ

前置き 文法 reg wire logic parameter, localparam struct module task function 演算 符号あり 算術右シフト 前置き どの部分が並列に実行されているか(always) どの部分は常に繋がっているか(alwaysの外) 値はどのように初期化するか(initial) C言…

Verilogのシミュレーション(Vivado),メモ

コマンド xvlog xelab xsim GUI xsimでguiオプションをつけて表示. 波形を選択 右クリックからAdd to Wave Window ドラッグ&ドロップで他にも信号を追加 Run All でシミュレーション実行 波形確認 信号追加 Restart から Run All 波形を右クリック,Radixか…

Chisel FPGA メモリ

Memクラス SyncReadMemクラス Regクラス Memクラス val mem = Mem(2048, UInt(8.W)) 同期書き込み,非同期読み出しを持つメモリ生成 FPGAでは直接利用できない フリップフロップから構築される(分散RAM??) SyncReadMemクラス val mem = SyncReadMem(2048, …

Chisel, Scala メモ

val フィールド名: 型 = 値の式 初期化後に二度と代入できないフィールド ... val 再代入できるフィールド ... var クラスの外部に公開したくない ... private クラスのメンバーにはフィールドとメソッド def 関数名(引数): 戻り型 = {} UInt という戻りの型…

FPGA RAM・ROM

RAM Distributed RAM (分散RAM) Block RAM(BRAM) ROM その他参考文献 結論 RAM 配列になっていてビットの範囲を指定して読み出されるものをRAMで作ると資源を節約できる. 例:Instruction memory, Data memory, Register file 全ビットが同時に読み出さ…

RISC-V 32bit M拡張(整数乗除算拡張命令)

概要 R形式 フォーマット 注意点 各命令 mul mulh mulhsu mulhu div divu rem remu 参考 概要 R形式 31 - 25 24 - 20 19 - 15 14 - 12 11 - 7 6 - 0 funct7 rs2 rs1 funct3 rd オペコード オペコードで命令形式を判別 funct3でM拡張命令を判別(funct7は全て…

RISC-V flow (雑)

riscv-flow

RISC-V Benchmark

riscv-tests プログラムのスタート位置を設定する必要があり. dhrystone median mm mt-matmul mt-vvadd multiply pmp qsort rsort spmv towers vvadd 参考文献 coremark coremarkの移植やら色々 risc-vでも使える? いろんなベンチマークを使ってる. https…

Hello world

進捗報告 Chiselで書いた自作RISC-Vコア上をFPGAボード(Basys3)に載せた. Uartのシリアル通信で「Hello world」できた! Hello world

モジュール間の依存性の排除,System verilog

メリット 流れ interfaceA,Bで異なる処理を実装 モジュールCでA,Bの共通の処理を実装. メインモジュールでinterfaceをインスタンス化し渡す. 参考 メリット 新しい処理を追加したければ,新たなinterfaceを作成して,メインモジュールで繋げるだけで良い.…

RISC-Vコア開発,2日目,改善案メモ,未完成

RISC-Vのコアを開発している. 初めはメモ書きばかりになる.後ほど書き直したいと思っている. 改善案 全体,ファイル名と変数名 top,Topにメモリ移動 top,Topでコアとメモリポート接続 top,7segをモジュール化 top,クロックの変更 top,クロックのパラメータ…

順序回路と組み合わせ回路

基本:順序回路と組み合わせ回路 順序回路 組み合わせ回路 基本:順序回路と組み合わせ回路 簡単にまとめると,自己参照しているのが順序回路.していないのが組み合わせ回路. 順序回路 自己参照して値を保持している. // 順序回路 always_ff @(posedge cl…

RISC-V ID後の挙動

次のプログラムカウンタ 演算子① 演算子② 演算結果 分岐フラグ CSR書き込みデータ WBデータ 次のプログラムカウンタ 条件分岐先アドレス(PC相対指定) ジャンプ先アドレス トラップベクトルアドレス 現在のPC + 4 演算子① rs1 CSR即値 ジャンプとAUIPC用PC(P…

演算内容で命令分類してみた,RV32I編

add ... (rs1 || pc || 0) + (rs2 || imm) sub ... rs1 - rs2 and ... rs1 & rs2 or ... rs1 | rs2 xor ... rs1 ^ rs2 sll ... (op1 << op2(4, 0))(31, 0) srl ... (op1 >> op2(4, 0)).asUInt() sra ... (op1.asSInt() >> op2(4, 0)).asUInt() slt ... (op1.…

RISC-Vコア開発,1日目, 全体構成メモ,未完成

RISC-Vコア開発を進める 初めはメモ書きばかりになる.後ほど書き直したいと思っている. Top Core レジスタ関連 ステートマシン作成 IF ID EXE MEM WB Top コア生成 7segment生成 Core レジスタ関連 rs1とrs2を読み出し wb書き込み 7segの値読み出し ステー…

RISC-V 動き

Top <=> Core <=> Memory Top <=> Core <=> Memory Mainパッケージ Topクラス Memoryクラス Coreクラス IF ID EXE MEM WB Subパッケージ Constsクラス Instructionsクラス Mainパッケージ Topクラス ・IO入出力 ・コア生成 ・メモリ生成 ・コアとメモリポー…

基本命令セット RV32I

ロード / ストア 加算 減算 論理演算 シフト 比較 条件分岐 ジャンプ 即値ロード CSR 例外 ロード / ストア LW (I) ... add, op1, op2_imi SW (S) ... add op1, op2_ims 加算 ADD (R) ... add, op1, op2 ADDI (I) ... add, op1, imi 減算 SUB (R) ... sub op…

ハードウェア実装における耐タンパ性

耐タンパー性とは 耐タンパー性とは、コンピュータシステムの内部構造の解析・改ざんの困難性を指す.(計算機性能とは別) ハードウェアの回路やソフトウェアのプログラムは,リバースエンジニアリングによって構造の仕組みを解析・改ざんすることが可能で…

RISC-V MMU

ハードウェアページテーブルウォークを採用 仮想メモリの仕様 RV32 RV64 ページングアルゴリズム(ページテーブル検索) Sv32 ハードウェアページテーブルウォークを採用 RISC-Vではページ入れ替え処理(ページテーブルウォーク)をハードウェアで制御する. …

RISC-V 割り込みと例外処理

割り込みとは 割り込み番号 割込み優先度 特権レベルスタック 割り込み流れ PLIC(プラットフォームレベル割り込みコントローラ) RISC-Vの処理(割り込み / 例外 発生後) <trap_vector>アドレス <trap_vector>アドレスの追加 実行モード Trap Delegation Register(トラップ代理レジ</trap_vector></trap_vector>…

RISC-V アーキテクチャ(2)

RV32E(組み込み分野向け) 利点 拡張命令 問題 リトルエンディアン エンディアン変換 16ビット可変長命令 命令エンコードの工夫 汎用レジスタの位置を固定 符号拡張した即値が,各命令形式で同じ桁 符号拡張した即値の符号ビット / 最上位ビット(MSB)の位…

RISC-V アーキテクチャ(1)

レジスタ長 汎用レジスタ 32本(x0 - x31) 汎用レジスタ本数が少ないと? 汎用レジスタ本数が多いと? 基本命令と命令形式 基本命令 6種類の命令形式 拡張命令 13種類 推奨ISA レジスタ長 32 / 64 / 128 ビットの3種類. マイコンからスパコンまで幅広くサ…

Dockerコマンド

DockerコマンドでDockerデーモンとやり取り. 管理用コマンド バージョン確認 イメージ用コマンド イメージの作成 イメージの確認 イメージの取得 イメージの削除 コンテナ用コマンド コンテナの作成 コンテナの確認 コンテナの削除 イメージへのcommit リフ…