開発日記

Erlangをダラダラ書きます。

2021-01-01から1年間の記事一覧

Scala Hello

package Hello class Hello { private val name: String = "YMD" def Hello(num: Int): Unit = { for (i <- 1 to num) { println("Hello " + name) } } def Name: String = { name } } object Hello { def main(args: Array[String]) = { val hello = new He…

コンピュータの超基本

プログラム 計算の手順を示したもの メモリ上にある機械語(バイナリ) プログラム用語 オペコード(opcode)... 演算命令を指定 オペランド(operand)... 演算命令に用いる演算子 ISA バイナリと演算命令の対応表 コンピュータ構成要素 CPU(メモリから命…

パルス幅変調(PWM)

幅が変わる信号 信号が高い時間の割合(デューティサイクル)を変えることで変調 例 割合25%(12サイクル中3サイクルHigh) 割合50%(10サイクル中5サイクルHigh) 応用 ローパスフィルタを加えるとデジタル・アナログ変換回路になる

Chisel テスト

PeekPokeTester 用意するのは3つのファイル テストの流れ 便利なテスト関数 ScalaTest 波形表示 printfデバッグ PeekPokeTester 用意するのは3つのファイル DUT テスト回路 テストオブジェクト テストの流れ テスト対象のモジュール(DUT)をインスタンス化 …

カウンタ回路(Chisel)

カウンタ回路の用途 時間の間隔を定義? Chiselの実装例 # 豆知識 カウンタ回路の用途 イベントのカウント 時間の間隔を定義 時間の間隔を定義? 例えば,クロックのサイクル数をカウントして,指定の時間間隔が経過したら,動作トリガを起動 Chiselの実装例…

テスト・シミュレーションのメモ(System verilog)

`timescale `default_nettype module clk, rst その他信号 その他定数 テストするモジュールの宣言 initial $display logic宣言した信号初期化 クロック生成 クロックごとの処理 遅延追加 デバッグ出力 $finish だんだん完成に近づいていく. `timescale `ti…

情報科学における直交性とは?

システム内の要素の多寡を指し示す慣用的な用語 CISCは命令の直交性が高い RISCはレジスタの直交性が高い システム内の要素の多寡を指し示す慣用的な用語 どの要素も本質的には同じように振る舞うならば直交性が高いと表現する. ja.wikipedia.org CISCは命…

アドレッシング・モード RV32Iの例

レジスタ間接(ベースオフセット/レジスタオフセット) ロード命令 1. 符号拡張1バイトロード 2. ゼロ拡張1バイトロード 3. 符号拡張2バイトロード 4. ゼロ拡張2バイトロード 5. 4バイトロード(32bitだから符号拡張なし) 参考文献 レジスタ間接…

アドレッシング・モード

アドレッシング・モードとは? メモリを参照する方式(メモリアドレスの指定の方法) 参照したアドレスはなんて呼ぶ? 有効アドレス(Effective Address) アドレッシング・モードを構成する要素は? ベースポインタ/ベースレジスタ アクセスすべきメモリア…

メモリとHexファイルの話

Hexファイルの形式 実装1 実装2 FPGAを触っていると,バイナリをHexファイルに変換して読み込みたいときがある. (例えば,RISC-Vを自作しているときとか..FPGA内蔵メモリにHexファイルを埋め込みたい.. 今回は32bit命令を扱うメモリを例に考える. Hex…

Vivado教訓メモ(一行)

エラーメッセージ,実際のエラー箇所の,次の行をエラー判定しがち

分岐予測

分岐予測 分岐先アドレスの予測 分岐先アドレスキャッシュ(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入出力 ・コア生成 ・メモリ生成 ・コアとメモリポー…