人狼白

半導体業界の片隅で生きています。 論理回路/LSI開発/プログラミング/誤り訂正符号

人狼白

半導体業界の片隅で生きています。 論理回路/LSI開発/プログラミング/誤り訂正符号

マガジン

  • 論理回路ノート

    お勉強がてら記事を書いています。 CRC、FEC、除算器

  • QEMU

    QEMUでCortex-R5を実行しようとする奮闘記

最近の記事

  • 固定された記事

SRT除算法

はじめに2023年6月現在、ディジタル回路による高速な除算法であるSRT除算法についてググってみても、複雑であるか曖昧な説明しか見つけることはできなかった。本noteは基本的なディジタル回路に明るい人を対象に、SRT除算を理解してもらうことを目的にしている。 準備除数の用語 $$ (z-r) / d = q, 0 ≤ r < d $$ z: 被除数 d: 除数 q: 商 r: 余り 前提 被除数、除数ともにプラスであるとする。 基本回路基本アルゴリズム SRT除算

¥500
    • Subversionでtagsを守る

      Subversionにおいて、tags/に置いたタグに対して、初回commit以外更新させないためにはフックを使用する。しかし、具体的な記述は軽くググってもすんなり出てこなかったので記事にしておく。 タグSubversionのタグはただのtrunkのコピーなので、そのままだと更新ができてしまう。 subversionでのリポジトリの基本構成(タグに関係するところだけ) trunk/tags/ tagAを登録 svn co $REPO/ trunk~ 何らかの更新のコ

      • メモリ・コンシステンシ・モデルとAXI

        RVWMO(RISC-Vメモリ・コンシステンシ・モデル)ではメモリアクセスに入れ替えが起きる場合を許していますが、具体的にどういう機構で入れ替えが起きるのか、今知ってることを整理しておきます。 AXIの順序制約AXIバスを持つCPUが仮にプログラム順にトランザクションの発行を行ったとしても、AXIバスの構成によってはそれがメモリに到着する順序には保証がありません。 AXIは以下のことを守ってくれます。 ・バスインターコネクトはAxIDが同じで、同じメモリへのアドレスの被る

        • RISC-Vメモリ・コンシステンシ・モデル

          備忘録。規格(The RISC-V Instruction Set Manual Volume I: Unprivileged ISA Document Version 20191213)を読む前準備として調べたことのメモ書き。 RISC-Vのメモリ・コンシステンシ・モデル Weak Memory Ordering (WMO):RISC-V標準のメモリ・コンシステンシ・モデル。別名RVWMO。 Total Store Ordering (TSO):“Ztso” Stand

        • 固定された記事

        SRT除算法

        ¥500

        マガジン

        • 論理回路ノート
          51本
        • QEMU
          7本

        記事

          指定アドレス範囲をカバーするようなベースアドレス+マスク設定の生成プログラム

          とあるプロセッサのコンフィギュレーションでは、ベースアドレスとマスクによりメモリ領域を指定する。メモリ領域は例えばデバイスのレジスタ領域を指定したり、メモリオーダーを指定するのに使われる。 ベースアドレスとマスクによるメモリ領域指定では、メモリアクセスのアドレスに対して以下の判定式がTrueであるときにそのメモリ領域へのアクセスとみなす。 address & mask == base address  ここで&はビットごとの論理積である。 例:ベースアドレスが0x800

          指定アドレス範囲をカバーするようなベースアドレス+マスク設定の生成プログラム

          gdbを使ったQEMU内部構造確認

          Xilinx QEMUのデモbare_metal_r5_zynqmpについて、GDBを使い以下明らかにした。 以下にブレークポイント qemu_main xlnx_zynqmp_class_init xlnx_zynqmp_init xlnx_zynqmp_realize xlnx_zcu102_init xlnx_zynqmp_create_rpu すると、xlnx_zynqmp_class_initまでは実行されるが、それ以外は実行されないことが分かった。特にインスタン

          gdbを使ったQEMU内部構造確認

          Xilinx QEMU GPIO interrupts

          QEMUの割り込みはqemu_irq型の変数で表される。 (hw/core/irq.c) void qemu_set_irq(qemu_irq irq, int level)によって割り込みを発生させることができる。 割り込みを発生させたとき、qemu_irqに登録されたハンドラが呼び出される。 Xilinx QEMU ZynpmpのGPIOのハンドラは(hw/gpio/xlnx-zynqmp-gpio.c) zynqmp_gpio_in_handler。 static

          Xilinx QEMU GPIO interrupts

          デバイス・ツリーを読む 続き

          https://github.com/Xilinx/qemu-devicetrees/blob/master/include/versal/rpu.dtsh にある設定値の意味 arm,tcmtr=<0x00010001>; おそらくTCM Type Register。Tightly Coupled Memory(TCM)のうち、ATCMとBTCM 1つずつ備えていることを示している。 Xilinx QEMUの‎target/arm/cpu_tcg.cに以下のコメントがあ

          デバイス・ツリーを読む 続き

          デバイス・ツリーを読む

          にあるどの辺を変えると独自のCortex-R5のメモリマップを与えられるのか。 あまりソースをググったりしてもピンとこなかったが、下記記事 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/821428366/QEMU+Options+and+Commands#QEMUOptionsandCommands-dtbvshw-dtb-dtbvs-hw-dtb によるとhw-dtbオプションで与えるDTB(Device

          デバイス・ツリーを読む

          コラッツの洞窟

          コラッツ予想についての妄想。2進数で問題を表してみると面白い感じがするというネタ。 ある洞窟このコラッツ洞窟という洞窟は一本道で、どこまでも続いている。この洞窟には頻繁にいつの間にかスライム軍団(親玉と雑魚たち)が侵入していることがあり、そのたびにハンターがスライムを退治してきた。 このスライムとハンターは以下のルールに従って動いている。 全スライムは毎ターン1マス進む。進むのと同時に、元の座標に分身を残す。分身しても親玉は先頭一人だけ。 2.進んだ先にもスライムがいた

          コラッツの洞窟

          QEMU+GDBマルチプロセス

          前回の続き 前回、単純にやるとGDBからはCortex-A72しか見ることができず、実行もできない。 次のページを"Cortex-R5"で検索すると "Debugging Multiple Processes"に必要なことが書いてあった。Cortex 実行してみる。 QEMUの方は前回の記事と同様-s -Sをつけて実行して待つ。実行前のレジスタ状態は以下 (qemu) cpu 2(qemu) info registersR00=00000000 R01=000000

          QEMU+GDBマルチプロセス

          QEMU+GDB

          前回の続き QEMUをGDB接続待ち状態にすること自体は容易だが、複数コアをエミュレートしている時にCortex-R5で動くコードをGDBでステップ実行できるのか? 結果今のところうまくいっていないがどこまでやったかを記載する。 gdb-multiarchのインストール WSL2上でARM向けELFのデバッグを行うのでgdb-multiarchを用いる。 sudo apt-get install gdb-multiarch とりあえずつないでみる QEMU側の起動

          Xilinx QEMUにおけるCortex-R5コードの実行

          前回noteの続き Cortex-R5の実行が目的であるが、よいサンプルはXilinxのQEMUにある。以下のURL https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/822312999/Building+and+Running+QEMU+from+Source+Code にしたがってまずチュートリアルを実行できることを確認する。 環境 WSL 2, Ubuntu 22.04.2 LTS QEMUのビルド

          Xilinx QEMUにおけるCortex-R5コードの実行

          QEMU メモ書き 

          QEMUとはOSSのプロセッサ・エミュレータである。筆者はQEMUでCortex-R5用のバイナリを動かしたいのでしばらくその調査を行う。 今回は以下の記事について調べたことをメモする Cortex-R5を単体で動作させるには、QEMUの本家ではなくhttps://github.com/Xilinx/qemu.gitから入手する。QEMUでは以下のようにコマンド実行する qemu-system-aarch64 -M arm-generic-fdt \-nographic

          QEMU メモ書き 

          誤り数値の導出回路

          前回のnoteの続き。 誤り数値はフォーニーの公式により $$ e_{i_k} = \dfrac{\eta(\alpha^{-i_k})}{ \alpha^{-i_k}\sigma'(\alpha^{-i_k}) } $$ と求められるのであった。ただし $${i_k}$$:誤り位置 $${\alpha^{-i_k}}$$:誤りロケータ $${\eta(x)}$$:誤り評価多項式 $${\sigma(x)}$$:誤り位置多項式 これらは誤り位置の導出と同時に行える。誤

          誤り数値の導出回路

          ユークリッド復号法のハードウェア実装

          上記noteの続き。BBC WHP031を参照。 ユークリッド復号法の回路概要この回路では下側が多項式除算器、上側が$${m_{22}}$$の計算回路となっている。各レジスタは以下のように使われる。 A: 除数 B: 被除数 C: 前回の$${m_{22}}$$ D: 今回の$${m_{22}}$$計算途中結果 初期値)  Aレジスタにシンドローム多項式をセットする。  Bレジスタに$${x^4}$$として最上位桁$${B_3}$$に1をセットする。  Cレジスタに1

          ユークリッド復号法のハードウェア実装