FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

FPGA開発日記 カテゴリ別インデックス

AMBA CHIについての勉強 AMBA CHIについての勉強 オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する Vivado Simulatorを使ってUVMに入門する Vivado Simulatorを使ってU…

AMBA CHIプロトコルの勉強 (8. Gem5のページを読んでみる)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 なんかググっているとなぜかGem5がCHIの解説ページを作っていた。イントロダクションを読んでみるとCHI Rubyプロトコルと言って厳密にはAMBA CHI…

オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する (4. レジスタの付いたALUの検証)

カテゴリインデックス:https://msyksphinz.hatenablog.com/entry/2024/12/14/040000 基本的なALUの形式検証ができたので、今度はレジスタ付きのデザインを考えてみよう。 以下のデザインは、入力信号が入ってから2サイクル後に演算結果が出てくる: always_…

オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する (3. ALUのパタンの検証)

カテゴリインデックス:https://msyksphinz.hatenablog.com/entry/2024/12/14/040000 まずは基本的なフォーマルを勉強するために、SymbiYosysを使ってALUを検証してみたい。 以下にHalf Adder & Half Adder & ALUを構成するデザインを作った。 ha.v module h…

オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する (2. Failするパタンの検証)

前回はBRAMをSymbiYosysを使って検証してみたのだが、今度はちゃんとフォーマルが落ちるパタンを検証してみたい。 例えば、ReadとWriteが同時に発生した場合、Writeの値をReadに即時移動するようなことを考えると、これはどうなるだろう? 以下のようにコー…

オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する (1. SymbiYosysのインストールと基本的な動作確認)

オープンソース・ツールを用いた形式検証を行いたくて、いろいろチュートリアルを読んでいる。 例えば、以下の記事で書いてあるようなBRAMの形式検証を行ってみたい。 zipcpu.com デザインとしては以下をそのまま利用してみる: github.com デザインの本体:…

AMBA CHIプロトコルの勉強 (7. Writeのトランザクションについて)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 まずは基本的な読み込みリクエストについて。マニュアルを読んでいく。 B5.3 書き込みトランザクション このセクションでは、書き込みトランザク…

AMBA CHIプロトコルの勉強 (6. Readのトランザクションについて)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 まずは基本的な読み込みリクエストについて。マニュアルを読んでいく。 B5.1 読み出しトランザクションフロー この節では、読み出しトランザクシ…

AMBA CHIプロトコルの勉強 (5. CHIのResponse / Snoop / Data Fieldsについて)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。 Response fields QoS:サービス品質の優先順位。表B2.2で定義…

SymbiYosysを用いて形式検証に入門する

インデックス: オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する (1. SymbiYosysのインストールと基本的な動作確認) (24/12/14) オープンソース形式検証ツールSymbiYosysを用いて形式検証に入門する (2. Failするパタンの検証) (24/12/15…

AMBA CHIプロトコルの勉強 (4. CHIのReqインタフェースについて)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。 B2.2.1 Transaction request fields DoDWT: 直接書き込み転送…

AMBA CHIプロトコルの勉強 (3. CHIのReqインタフェースについて)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。 B2.2.1 Transaction request fields リクエストに使用するフィ…

AMBA CHIプロトコルの勉強 (2. CHIのReqインタフェースについて)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。 勘違いしそうだが、ReqインタフェースはRead/Writeなどのコマ…

AMBA CHIプロトコルの勉強 (1. CHIのポート構成について)

記事カテゴリトップ:AMBA CHIプロトコルについての勉強 - FPGA開発日記 AMBA CHIについて今更勉強している。 チャネルについて RN-Fからは、TXインタフェースとRXインタフェースが存在している。TXチャネルはRN-Fノードからの発信用。RXチャネルはRN-Fノー…

AMBA CHIプロトコルについての勉強

各記事の構成要素まとめ: AMBA CHIプロトコルの勉強 (1. CHIのポート構成について) (24/12/04) AMBA CHIプロトコルの勉強 (2. CHIのReqインタフェースについて) (24/12/06) AMBA CHIプロトコルの勉強 (3. CHIのReqインタフェースについて) (24/12/08) AMBA …

マイクロプロセッサ・アーキテクチャ教科書を買った

マイクロプロセッサ・アーキテクチャ教科書 (TECHIシリーズ Vol. 57)作者:中森 章CQ出版Amazon これの前版は自分が高校生くらいの時から買って読んでいた。 第2版が出てとてもうれしい。 前版は本当に自分の人生を変えた本だと思うので、これも読んで一生懸…

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (17. MRIFについて)

前回:msyksphinz.hatenablog.com github.com RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。 IOMMUのMSIアドレス変換について、MRIFを理解する必要が生じてきたのでメモ。 MRIFのフォーマットは以下のようになる。以下のアドレスマップは…

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (16. MRIFについて)

前回:msyksphinz.hatenablog.com github.com RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。 IOMMUのMSIアドレス変換について、MRIFを理解する必要が生じてきたのでメモ。 MRIF(メモリ常駐割り込みファイル: Memory Resident Interrupt F…

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (15. メモリ内データ構造のキャッシュ)

前回:msyksphinz.hatenablog.com github.com RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。 何回か読もうとして挫折してきたので、もう一度ちゃんと読んでみようと思う。 メモリ内データ構造のキャッシュ ダイレクトメモリアクセス(DMA)…

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (14. PCIe ATS変換リクエスト)

前回:msyksphinz.hatenablog.com github.com RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。 何回か読もうとして挫折してきたので、もう一度ちゃんと読んでみようと思う。 PCIe ATS変換リクエスト処理 ATS[2]変換要求で構成エラーが発生…

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (13. IOMMUのPTEアクセス)

前回:msyksphinz.hatenablog.com github.com RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。 何回か読もうとして挫折してきたので、もう一度ちゃんと読んでみようと思う。 IOMMU による PTE アクセス(A)とダーティ(D)の更新 capabili…

Vivado Simulatorを使ってUVMに入門する (25. 2ポートArbiterのUVMを考える)

前回はこちら:msyksphinz.hatenablog.com UVMを使って、2ポートのArbiterを検証することを考えたい。 2ポートのRound Robin Arbiterは、現在のPriorityに応じてAcceptするポートを変えるArbiterだ。 arbiter2_rr.sv always_comb begin w_curr_ptr_next = r_…

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (12. IOVA の変換プロセス)

前回:msyksphinz.hatenablog.com github.com RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。 何回か読もうとして挫折してきたので、もう一度ちゃんと読んでみようと思う。 デバイスコンテキストの場所を特定するプロセス device_idを使っ…

Vivado Simulatorを使ってUVMに入門する (24. UVMを使ってランダムパタンジェネレータを作りたい)

前回はこちら:msyksphinz.hatenablog.com 前回、ランダム命令を生成するためのUVM記述を考えたのだが、ドライバのところに制約を書くのは良くない気がする。 これだとテストの環境に制約を書いてしまっていることになるので、もうちょっと一般的なところ、…

Vivado Simulatorを使ってUVMに入門する (23. UVMを使ってランダムパタンジェネレータを作りたい)

前回はこちら:msyksphinz.hatenablog.com UVMで色々コントロールできることが分かってきたので、今度はランダム検証に使うための要素について考えていきたい。 単純に考えられるのは、RISC-Vの命令をランダムに生成するランダムパタンジェネレータだ。 UVM…

RISC-VのLoad/Store Pair for RV32 (Zilsd & Zclsd)仕様について

メーリングリストに回ってきた仕様で、なんか変わった仕様があるなと思ったのでメモ。 64ビットのメモリアクセスの命令は、RV32だと当然存在していないのだが、それを無理やり定義する拡張がある。 Zilsd & Zclsdという仕様らしい。 Load/Store pair instruc…

Vivado Simulatorを使ってUVMに入門する (22. スコアボードを活用するDUTを作りたい)

前回はこちら:msyksphinz.hatenablog.com 1サイクルのDelayがあるRAMをUVMで検証している。 モニタのところで、アドレスとデータが1サイクルずれるのを吸収してやる必要がある。 とりあえず以下のようにして、1サイクルのDelayをprev_read_eqとprev_read_ad…

Vivado Simulatorを使ってUVMに入門する (21. スコアボードを活用するDUTを作りたい)

前回はこちら:msyksphinz.hatenablog.com 前回までで作っているUVMの環境では、DUTは入力を即時出力するようなデザインなのでイマイチ面白くない。 UVMのスコアボードは、中間結果を取っておいてそれを使って比較できるはずなので、メモリなどの記憶素子も…

Vivado Simulatorを使ってUVMに入門する (20. スコアボードを活用するDUTを作りたい)

前回はこちら:msyksphinz.hatenablog.com 前回までで作っているUVMの環境では、DUTは入力を即時出力するようなデザインなのでイマイチ面白くない。 UVMのスコアボードは、中間結果を取っておいてそれを使って比較できるはずなので、メモリなどの記憶素子も…

Vivado Simulatorを使ってUVMに入門する (19. Round Robin Arbiter向けのUVMを作る)

前回はこちら:msyksphinz.hatenablog.com ラウンド・ロビンのArbiterを、4入力からN入力に拡張してみよう。 実装を簡単にするために、最初に優先ポート順に並べ替えるのを、インデックスが大きいほど高い優先度になるようにちょっと変更する。 for (int i =…