Ryuz's tech blog

FPGAなどの技術ブログ

パラメータごと合成するという事

はじめに 少し前に、X(Twitter) にこんな絵を張り付けた。 ちょうど BitNet(b1.58) が盛り上がっていて、パラメータ効率の議論が起こっていたときだと思う。 忘れる前にもう少し書いておこうと思う。 上の図では少なくとも DRAM などの外部メモリや、そこへ…

FPGAでのレジスタファイル

はじめに だいぶ以前、最小限の RISC-V 命令だけ実装して遊んだときに下記のようなレジスタファイルを作りました。 後でいろいろパラメータ変えて計測しようと思いつつ完全に忘れていたので思い出したように実験です。 https://github.com/ryuz/jelly/blob/m…

パラメータ定数ごと乗算を合成する場合の考察

はじめに 毎度おなじみ当方の LUT-Netは、ネットワークのパラメータをLUTのテーブル値として学習して回路にしてしまう為、外部SDRAMなどのメモリからパラメータをロードしながら演算する必要がありません。 今回はLUT-Net は置いておいて、「もし普通の積和…

SIMD/SIMTとMIMDと

はじめに 先日Rustのイテレータでの処理順序関連してこんな記事を書きました。 加えて最近少し Elixir を調べていて、Enum, Stream, Flow などの処理を興味深く見ております。 そこで、ALU(arithmetic Logic Unit)視点から見た2種類の計算機のデータ処理パタ…

フルロジックEther通信とボード間時計合わせ

はじめに 以前、ZynqMPでリアルタイムOSをFPGA化してみた というRTOSのスケジューリング部分をフルロジックで実装してみましたという記事を書きました。 今度は、それを複数ボード拡張することを目論んで、RTOSらしくリアルタイム保証や時計合わせを行うべく…

RTL記述におけるX(不定値)の扱い

はじめに Verilog などの RTL 記述言語の多くは、文法上 0/1 以外に X(不定値) や Z(high-Z) を含めた4値を扱えます。 不定値の取り扱いにはおそらく「これが正解」といった絶対的なものはなく、ケースバイケースな気がしております。 コーディングルールを…

FPGA開発セミナー(2023/01/25)で発表いたしました

下記、「実践的!FPGA開発セミナー vol.18」にて Lightning Talk 枠で発表させて頂きました。 fixstars.connpass.com 発表資料を以下に置いております。 speakerdeck.com なお、今回を機に、以前 SlideShare に置いていたものを一部 SpeakerDeck にも置きま…

回路図のお供に Pandas 便利そう

データプロセッシングのアクセラレータ―としてではなく、IoTデバイスとしてFPGAを使ったことのある方は Excel でピン配置表を作って VLOOKUP 関数で頑張った経験がある方も多いのではないでしょうか?(古い人だけかもしれんないですが)。 FPGAはマイコンと違…

Zynq MP SoC のチュートリアルを考えてみる

はじめに 個人的には Zynq UltraScale+ MPSoC (以下、ZynqMP) は 現時点では最強の IoT プロセッサなのではないかと思っています。 そして多分、「自分はわりとマニアックな偏った使い方をしている方なのではなかろうか」とも思っています。 一方巷で、 FPGA…

FPGAは1命令を繰り返すVLIWプロセッサ?

ちょっとしたジョーク的な駄文ですが、ふと思いついたのでメモしておきます。 こちらで少し、RTLプログラミングを普通の逐次処理型のプログラミングモデルと比較したりしていましたが、ふと「 FPGA って実はとてもたくさんの命令をパッキングした、たった1…

BinaryBrain で HLS をやってみる (ver 4.2.4 リリース記念)

はじめに 先ほど BinaryBrain 4.2.4 をリリースしましたので少しだけ時事ネタ的にプログを書こうと思います。 github.com もともと FPGA の基本構成要素である LUT を LUT 構成のまま誤差逆伝搬で学習させてしまおうというのが、以前発表したLUT-Netの趣旨で…

ハードマクロの稼働率について考えてみる

はじめに FPGAに限らずCPUやGPUなどすべての計算機に言えることなのですが、ハードマクロの演算リソースは使ってなくてもそこに居座り続ける(要するに無駄)という問題があります。 筆者は普段主に ZynqMP を使っておりますので、APUやRPUやOCM、PL内部のLUT…

リアルタイム処理を再考してみる

はじめに 最近、github連携が便利でZennを使い始めましたが、あくまでこちらはQiitaの乗り換え色が濃いので、引き続き、結論のない試行錯誤中の感想とか、ポエム系はこちらに書こうかなと思います。 今回はまたあらためてプロセッサのリソース観点からリアル…

試しに Zenn の github 連携を使ってみた

Zenn試してみました Zennだと github に置いた Markdown と連携できるということを知って、さっそくいくつか最新の試みを試してみました。 タイムリーな要素を含むブログと、Tipsとして取り回しよく蓄積したい情報とでうまく使い分けると便利そうには思いま…

ZynqMP 用の SDイメージを SD カードを使わずに作る考察

概要 以前、[こんな記事]https://ryuz.hatenablog.com/entry/2022/04/30/213444を書きましたが、その際、実 SD カードにイメージを作ってから dd コマンドでイメージを保存していました。 もちろんもっといいやり方はあるだろうなとは思っていたのですが、「…

(備忘録) SystemC インストール

SystemC を WSL2 の Ubuntu 20.04 に入れてみたのでメモ。 git clone -b 2.3.3 https://github.com/accellera-official/systemc.git cd systemc export CXX=g++ autoreconf . mkdir objdir cd objdir ../configure --prefix=$HOME/.opt/systemc-2.3.3 make -…

Kria KV260 の 認定Ubuntu で RPU (Cortex-R5) を認識させる

はじめに タイトルそのままの内容です。 以前、Ultra96V2のDebianイメージで Cortex-R5 を認識させる - Qiita という記事を書きましたが、その Kria K260 版です。 今回は 認定Ubuntu の iot-kria-classic-desktop-2004-x03-20211110-98.img を使っておりま…

Windows11+WSL2にて、SDカードのext4パーティーションを操作する

はじめに 表題の通りの自分用備忘録です。 最近 Windows11 にアップグレードして、ほとんどのことがWSL2 でできるようになりました。 必要な作業 usbipd-win のインストール 下記の通り、実施すればOKです。 docs.microsoft.com カーネルビルド CONFIG_USB_S…

ZynqMP用のDebianイメージをWin32DiskImager用に作成してみる

はじめに ikwzam 氏のZynqMP 用の Debianイメージにはいつもお世話になっております。 一方で、古い Windows 環境しかないときにSDカードイメージを新規に作ろうとすると何気に苦労するので、Win32DiskImagerなどで書き込めるイメージにできないかと思ってい…

Ultra96V2のDebianでDocker動かしてみた

はじめに 最近いろんなところで Docker の活用を聞きますし、私自身も多少は使ったことはあったのですが、Raspberry PI4 のおかげで aarch64 での利用も増えてきているようですので、Ultra96 でも動かないか挑戦してみました。 例によって、ikwzm氏のDebain…

最小セットのRISC-Vコアを作ってみた

概要 前々からやろうやろうと思って全然手が出せてなかった RISC-V ですが、本格的にやると 深みにはまりそうだったので、最小セット(rv32i)をコンパクトに SystemVerilog + Rust で 動くコアが書けることを目標にちょっとやってみました。 感想としては、…

vivadoのプロジェクトからファイルリストを得る

ほぼ自分用のメモですが、いつも忘れるのでここに tcl 張っておきます。 set f [open "file_list.txt" w] foreach fname [get_files] { puts $f $fname } close $f なかなか tcl 慣れない...

リアルタイムコンピューティングのメモリ階層

はじめに 以前こちらに参加させていただいた時に、HPCで演算器を遊ばせないために必要なメモリ帯域や階層キャッシュの容量の話を知る機会があり、エッジコンピューティングの場合どうなのだろう、といろいろと考えておりました。 で、ちょっとだけ構想を Twi…

HLSでカメラ画像をダイレクトに処理してみた

概要 タイトルそのままです。HLSでカメラ画像をダイレクトに処理してみました。今回は3x3のフィルタでラプラシアンフィルタを実装しています。 こちらに公開しております。 何が違うのか メモリに置いている画像への処理をアクセラレートするのではなく、カ…

Vitis/Vivadoのバージョンを切り替える

概要 複数のバージョンの Vivado や Vitis を共存させて切り替えながら使いこなしている人も多いと思います。 特に最近私がコマンドラインから使う機会が増えてきたのですが、不用意に settings64.sh を実行すると、他のツールとの競合もあったりして Vivado…

ZynqMPでリアルタイムOSをFPGA化してみた

はじめに 少し前にUltra96V2 で FPGA化した リアルタイムOS を試すサンプルと言うものを公開しました。 作りっぱなしになっていたので、まだ碌にテストも出来ていない状態ですが、原理実験的には成り立っていそうですので、少し解説記事的なものを書いておこ…

RustからUIOやu-dma-bufやベアメタルからのMMIOをやってみた

概要 以前、「uioやudmabufにアクセスするC++のクラスを作ってみる」という記事を書きました。 今回はその Rust 版になります。最大の違いは C++ 版では Linux しか考慮していなかったのに対して、Rust 版ではベアメタルプログラミングでのMMIOアクセスも考…

コマンドラインだけでHLSで書いたIPをVivadoに取り込んで合成する

はじめに 少し前に、HLSで書いたC言語のコードを、コマンドラインから一気に Vivado に取り込んで合成するサンプルを作ってみましたが、ブログにかけてなかったと思うのでこちらにも少し書いておきます。 サンプルはこちらにあります。 とは言え、殆どが下記…

RustでRTOSを作ってみる試み

はじめに 組込みRustの勉強ついでに RTOS(リアルタイムOS)っぽいものを作ってみようと試みたちょっとしたサンプル的なものです。 以前の記事の後、放置状態だったのですが、今回簡単なサンプルだけ動くようにして crates.io にも登録したので続編となります…

FPGAで RTOS(Real-Time OS)を作ることを考える

はじめに こことかで少し実験を始めていい感触が出てきたので少し備忘録的に書いておきます。 具体的には ZynqMP の RPU(Cortex-R5) 用にPLでRTOSロジックを作っていろいろ実験中です。 なぜ今さらFPGAでRTOSなのか? RTOSをロジックで記述しようという試み…