2025-08-01から1ヶ月間の記事一覧
前回の続き: msyksphinz.hatenablog.com "The MIPS R10000 Superscalar Microprocessor" の論文を改めて読んでみて、NotebookLMを使ってまとめてみた。すごく便利だ。便利すぎて頭に入らないよ。 以下の文章は全部AIで生成してもらったので注意です。 レジ…
"The MIPS R10000 Superscalar Microprocessor" の論文を改めて読んでみて、NotebookLMを使ってまとめてみた。すごく便利だ。便利すぎて頭に入らないよ。 以下の文章は全部AIで生成してもらったので注意です。 はじめに MIPS R10000は、シリコン・グラフィッ…
RISC-Vの仕様書を読んで、Svvptc拡張について内容を読んでみる。 この拡張機能は、オペレーティングシステムのメモリ管理処理を大幅に簡略化する可能性を秘めているものである。 Svvptc 拡張の基本概念 Svvptcは、ページ・テーブル・エントリ(PTE)の無効状態…
SVADUというRISC-V拡張は、ページ・テーブル・エントリのAccessedビットとDirtyビットの管理を行うための命令拡張だ。 まずは、ページ・テーブル・エントリ(PTE)のA/Dビットについてまとめる。 Accessed(A)ビット ページが読み取り、書き込み、または実行…
より複雑なBooth乗算器に対して同様のフォーマル検証を試行してみる。 Booth乗算器は、符号付き数の乗算を効率的に実行するためのアルゴリズムであり、部分積の数を削減することで高速化を図る手法である。 このような複雑な設計に対してフォーマル検証がど…
知らなかったのだが、EmacsのVerilog-Modeでは structやinterfaceが扱えるようだ。長年の悩みが解決される! qiita.com module auto_connect_struct ( input logic i_clk, input input_t in, output output_t out ); assign out.c = in.a + in.b; endmodule …
riscv-testsの以下のテストがよく意味が分からなかったので、ちょっと考えてみることにした。 github.com まず、PMPにおけるNAPOTの意味を確認しよう。 RISC-V の PMP (Physical Memory Protection) では、各エントリにアドレスとモードを設定し、アクセス可…
riscv-formalに付属の実際のコードを動かしてみよう。 git clone https://github.com/YosysHQ/riscv-formal.git 以下のコマンドによって、RISC-VコアNERVを使ってriscv-formal を動かしてみる。 cd riscv-formal/cores/nerv make -j$(nproc) check^ SimbiYos…
RISC-V Formal Verification Frameworkは、RISC-Vプロセッサの形式的検証を行うための包括的なフレームワークである。 このフレームワークは、RISC-V Formal Interface (RVFI)を中心として構築されており、SystemVerilog Assertions (SVA)を活用した形式的テ…
結局、32ビット x 32ビットの乗算器の一発での検証はかなり難しいことが分かった。 もう少し小さな乗算器でFormalが回せるかどうかを確認してみよう。8ビット x 8ビットの乗算器まで縮小したデザインを用意した。 module booth_mult ( input logic clk, inpu…
前章まででVerilatorによるシミュレーション検証を実施したが、つぎは形式検証(Formal Verification)をSymbiYosysを使用して実装してみよう。 Formal検証コードの実装 mul_1.vに以下のFormal検証コードを追加した: `ifdef FORMAL logic r_result_valid; a…
msyksphinz.hatenablog.com テスト実行制御 initial begin do_reset(); // Directed tests run_directed(); // Random tests run_random(NUM_RANDOM); // Wait until all expected results are consumed wait (exp_q.size() == 0 || cycle > 20000); if (exp…
前章で解析したmul_1.vの実装に対して、 tb_mul を作成して検証することにした。 msyksphinz.hatenablog.com リファレンスモデルの実装 function automatic logic [63:0] model_mul( bit s1, bit s2, logic [31:0] a, logic [31:0] b ); logic [63:0] A_u, B…
GitHubリポジトリtom01h/yosys_tryのmul_1.vは32ビット×32ビットの高性能乗算器として設計されており、符号付きおよび符号なし両方の乗算に対応している。 モジュール構成と全体アーキテクチャ このファイルには2つのモジュールが含まれている: mulモジュー…
APLICとIMSICの挙動を調査しているときに引っかかったので、Smstateen/Ssstateenについて調査することにした。 Smstateen/Ssstateenは、特定の状態(state)へのアクセスを制御するための仕組みである。 この拡張機能は、セキュリティと特権レベルの分離を強…
前回の続き: msyksphinz.hatenablog.com 4. ソートアルゴリズム 出力時に実行頻度順にソートするため、バブルソートを実装している: /* 命令情報をカウント順にソート(バブルソート) */ for (int i = 0; i < array->size - 1; i++) { for (int j = 0; j …
QEMUのプラグイン機能を活用して、特定の命令実行区間における命令ヒストグラムを生成するプラグインを実装してみた。 このプログラムは、あるポイントからの命令の実行頻度をヒストグラム化することを目的としている。 主な用途としては、SimPointで取得し…
MorrisMA/Booth_Multipliersリポジトリをベースに、Booth乗算アルゴリズムの実装と検証についてまとめる。 2ビットずつBooth乗算器の実装例 次は、2ビットずつ処理するBooth乗算器の実装例だ: module Booth_Multiplier_2x #( parameter N = 16 // Width = N…
MorrisMA/Booth_Multipliersリポジトリをベースに、Booth乗算アルゴリズムの実装と検証についてまとめる。 Booth乗算アルゴリズムの概要 Booth乗算アルゴリズムは、2の補数表現での符号付き乗算を効率的に実行するための手法である。 従来のシフト加算方式と…
APLICは、RISC-Vで定義されている外部からの割り込みを制御するための非ISA仕様だ。 drive.google.com このAPLICで定義されているレジスタについて少し調べてみようと思う。割り込みを発生させるためにはどのようなレジスタを叩いていけばいいのかを調査する…
APLICは、RISC-Vで定義されている外部からの割り込みを制御するための非ISA仕様だ。 drive.google.com このAPLICで定義されているレジスタについて少し調べてみようと思う。割り込みを発生させるためにはどのようなレジスタを叩いていけばいいのかを調査する…
SimPointは、プログラムの実行時間を短縮するために使用される重要なツールである。 SimPointはコンピュータアーキテクチャの研究のために使用されることが多く、特に実行時間の長いベンチマークの中から、実行される頻度の多いブロックを取り出すために使用…