まつたろうの歩み

PythonやCの勉強中に「指し示す」いう表現がありました。それを知りたくて今はコンピュータシステムを勉強しています。

FPGA 編 その17 第22章、もう先へは進めません

 第22章の終盤です。ラズパイと FPGA を接続して、使います。FB 基板も EB 基板も無い中で、やれるところまでやろうと進めてきました。つないでコンフィグレーションをしようとしましたが、そこまでしか進めませんでした。その経過報告です。まずは、つないでいる画像を見て下さい。

FPGA と Raspberry Pi の接続

 前回に続き、MAX10 側の FPGA 論理と NIOS II 用プログラムを準備しました。Qsysでシステムを作成します。下の画像です。

ジェネレート完了

 次に、Nios II でソフトウェアの作成です。Nios II をスタートから探すと、Quartus Prime のグループ全体のメニューがなくなっています。そこで Win10 なので、Copilot さんに聞いてみました。半日かけていろいろ試しましたが、グループそのものを復元することはできませんでした。Gemin iさんに聞くことにしました。.exe ファイルからショートカットを作り、デスクトップから起動できるようにしました。コードを書きビルドしました。何とかできました。下の画像です。

Nios IIビルド完了

 赤線は、Gemini さんに聞いて消しました。Quartus Prime に戻り、本のあちこちを探しながら進めます。やることがたくさんあります。コンフィグレーションはできたように思われますが、下の赤字が気になります。下の画像です。

コンフィグレーション

 やはり、次の Programmer では書き込みができませんでした。

残念

 その後、FPGA のコンパイルを試してみましたが、それもできませんでした。残念ですが、ここまでです。

ーーー じいじと孫の散策 ーーー

 5月に九州歴史資料館と五郎山古墳に行きました。写真は孫が写ってるものしかないので、URL を添付します。

kyureki.jp

 五郎山古墳館は、実物と同じ石室が造られています。狭い入口から、這いながら進みます。中に入ったら、石室が割れて外に歩いて出られます。楽しい見学場所です。外に出て、実際の古墳を見ました。円墳です。

www.city.chikushino.fukuoka.jp

 

FPGA 編 その16 ラズパイ3B の Qt 5 用に C++ が修正できました。

 圓山先生の、「MAX10 実験キットで学ぶ FPGA &コンピュータ」の第22章です。MAX10 とラズパイの連携について、記載されています。その章では Qt Creator を使います。先生が執筆された当時は Qt 4 だったようですが、今はそれは使われていません。ようやくラズパイに Qt 5 がインストールできました。C++も進化しています。先生のコードではエラーが出て進めませんでした。そこで Gemini さんに聞きながら、コードを修正しました。その報告です。その書き方は古いとかの注意はでますが、エラーが出なくなったラズパイの画面をご覧下さい。

Qt 5 でエラーが出なくなった。

 いろいろな修正を何回もやりました。たくさんあり過ぎて私ではまとめきれません。以下は、Gemini さんにまとめてもらった文です。

************************************

作者 Gemini

ビルドエラー解消おめでとうございます!今回発生していた問題の原因と、実施した主な修正内容のまとめです。

---

**1. `mainwindow.h` / `mainwindow.cpp` の修正**

* **QMutex の記述修正(Qt5互換性向上)**
* **変更前:** `QMutex mutex(QMutex::NonRecursive);`
* **変更後:** `QMutex mutex;`
* **理由:** Qt5以降で非推奨・削除されたパラメータ(`NonRecursive`)を除去。


* **ヘッダーインクルードの変更**
* **変更前:** `#include "./ui_mainwindow.h"`
* **変更後:** `#include "ui_mainwindow.h"`


* **グローバル変数 `io` の実体定義を追加**
* `peripherals.h` をインクルードした上で、関数の外側に `Peripherals io;` を記述(`undefined reference to 'io'` 対策)。

 

---

**2. `mainwindow.ui` (画面デザイン)の修正**

* **ルートオブジェクト名の修復**
* **変更:** 最上位オブジェクトの `objectName` を `lineEdit_TX_2` ➔ **`MainWindow`** に修正。
* **理由:** クラス生成名がずれて発生していた `incomplete type 'Ui::MainWindow'` エラーを解消するため。


* **コンポーネント名の不一致解消**
* **変更:** テキストエリアの `objectName` を **`plainTextEdit_TXRX`** に正確に修正。

 

---

**3. プロジェクトファイル(`*.pro`)の修正**

* **Qt5 GUIモジュールの追加**
* **追加:** `QT += widgets`(または `QT += core gui widgets`)


* **ARM命令セット設定の追加(ラズパイビルド対応)**
* **追加:**
```pro
QMAKE_CFLAGS   += -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard
QMAKE_CXXFLAGS += -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard

```


* **理由:** アセンブラの `selected processor does not support 'dmb' in ARM mode` エラーを解消するため。

 

---

**4. ビルドキャッシュのクリアと再生成(手順)**

* エラー解消には、上記修正後に **「ビルドのクリーン」➔「qmakeの実行」➔
「プロジェクトの再ビルド」** の手順が不可欠でした。

***********************************

 今は Qt 6 になっています。Geminiさんには本当に感謝しています。非力な自分では何も解決しなかったでしょう。参考にならないかもしれませんが、報告をおわります。

FPGA 編 その15 C++ には Qt Creator がお薦め

 今日は第22章の中盤部分の報告です。今回は途中経過の報告です。前回 C++ の勉強について報告しましたが、Qt Creator が素晴らしいと感じました。ウインドウズ版もありますので、Qt 6 をインストールしました。Geany で C++ のコードを書いて、Qt Creator のフォルダーにコピーしました。そうしたら Qt Creator 側では、そのファイルを認識していません。Qt Creator でファイルを作成して、書いたコードを貼り付ける方法で作成しました。どうせなら、初めから Qt Creator で作成しようと思い始めました。下の画像です。

ファイルの作成手順

 次にファイルの型式を選択します。その後ファイル名を入力します。そうすると、エディターの画面が出てきます。コードを書きます。

ファイル形式の選択

 Qt Creator を使い始めたら、使い勝手がすごく良いことがわかりました。予測候補を出したり、スペルミスなどは赤線が表示され警告します。画面が大きいので、ウインドウズ版で作成を進めました。ファイルの準備ができました。

ファイルの準備ができた

 ビルドできるか試しました。include <mman.h> がウインドウズ版にはないようです。ラズパイでやってみることにしました。

ラズパイ3の出番

 ラズパイには Qt 5 をインストールしてます。ファイル名だけの空ファイルを作り、デスクトップで作ったファイルを USB からコピペしました。シグナル・スロットの設定も済ませています。

シグナル・スロットの設定

 ファイルの準備も終わり、ビルドしました。しかし、エラーが出ました。下の画像です。

エラー表示

 異常が出ないようにしないと、先へは進めません。Gemini さんに聞きましたが、本は  Qt 4 で書いてあります。ラズパイは Qt 5 そのバージョン違いのせいで、コードの修正が必要なようです。何回か聞いてやり直しましたが、うまくいきません。これから、もう少しジタバタしようと思っています。うまくいくかどうかは、次回のお楽しみです。

 

ーーー じいじと孫の散策 ーーー

 少し前になりますが、九州国立博物館に行きました。氷河期展の開催中ですが、怖いので常設展の見学です。1年くらい前はハニワ展に一緒にいきましたが、特別展だけできつくなります。常設展はほとんで見ていませんでした。今回は2時間くらいかけて、常設展を見ました。少しずつ展示が変わっています。

九州国立博物館

 

FPGA 編 その14 C++の勉強

 第22章の後半です。この章では、C++を使います。以前ちょっとかじった程度です。あらためて勉強しました。学習ではなく勉強と書いたのは、少し辛くて自分に鞭打って進めたからです。使った本は、高橋先生の「やさしい C++」です。

やさしい C++

 C言語とは、かなり異なる表現を使ってあります。printf() の代わりに cout <<  , :: スコープ解決演算子 , -> アロー演算子 , >> 抽出演算子などです。始め見た時は、?何だこれは?と、はてなマークが頭に並びました。IDE は Geany を使って勉強します。軽くて使いやすいのですが、日本語変換に時々バグがでます。文字コードを変えたりしましたが、直りませんでした。英語文っぽく書き直して、使いました。最初のコードです。

C++の勉強始め

 本の中程までは以前見ていましたので、眺める程度で進めました。ポインターからは難しいので少し念入りにコードを書いて、実行しました。C++ で紛らわしいのは、括弧です。普通の括弧 (  ) と中括弧 {  } が判別しにくく、何度か間違えました。 } の後にセミコロン }; が付いたり、付かなかったりするのもあります。また、クラスにはいろいろなクラスがあります。自分で C++ のコードを作ることは無いと思うので、使ってわからなくなった時に参考にしようと思いました。クラスのコンストラクタのオーバーロードを実行している画像です。長い言葉が羅列されています。多機能を備えているのでしょうが、私には難しいです。

クラスのコンストラクタのオーバーロード

 複数のファイルをコンパイル・リンクする例では、できないので Gemini さんに聞きました。下がその回答です。

方法1: Geany のビルドコマンドを変更する(おすすめ)

Geany の上部メニューから 「ビルド」 > 「ビルドコマンドの設定」 を開きます。

C++ commands の欄にある Build(ビルド) のコマンド行を確認します。

変更前: g++ -Wall -o "%e" "%f"

変更後: g++ -Wall -o "%e" *.cpp

「OK」をクリックして設定を保存します。

再度 [F9](ビルド) を押してから [F5](実行) をお試しください。

補足:  *.cpp と指定することで、同じフォルダ内にあるすべての .cpp ファイルをまとめて1つの実行ファイルにビルドできるようになります。

 これで、できるようになりました。Gemini さんに感謝です。本書に戻って、ラズパイ用のコードを書こうと思います。

ーーー 今日の一言 ーーー

 今日は8月9日、8月6日の広島に続き長崎に81年前に原爆が落とされた日です。最近の国際情勢は見るに堪えないほど、平和から遠ざかっています。何時、核兵器が使われてもおかしくないようになっています。心から平和を願います。世界中から戦争が無くなりますように。11時2分に一緒に黙祷を捧げました。

 

ーーー 孫の飼育日記 ーーー

 カブトエビの実験キットで、飼育を始めました。2㎝くらいの大きさに育っています。すばしっこくて、なかなかカメラに収まりません。ようやく撮れた写真です。中央付近にいます。

カブトエビの実験キット

 研究ノートには、きれいなスケッチが描けていました。いつの間にか絵心が育ってきたようです。

図鑑と研究ノート

 

FPGA 編 その13

 今日は21章からです。MAX10 と Raspberry Pi を接続する拡張基板 MAX10-EB 基板のハードウェア詳説というタイトルです。この章では特に実際にやることはなく、ただ読み進めるだけです。この基板があれば、ラズパイと簡単に接続できるようです。

 次に第22章です。MAX10 と Raspberry Pi の連携方法というタイトルです。MAX10-EB 基板が必要かどうか、次の第23章も合わせて目を通しました。MAX10-EB 基板があると、どちらの章もすすめられそうでした。マルツの Web サイトを見ると、まだ在庫が17個ありました。前の会員情報がわからなくなったので、会員登録をやり直し MAX10-EB 基板を注文しました。注文受付のメールがありません。休日は対応していないのかなと思い待ってました。いつまで経ってもメールがありません。マイページを調べてみると、まだ注文ができていませんでした。注文を送信したら販売終了、と出ました。Webサイトの検索でも、やはりそうなっていました。数日のタッチの差で入手できませんでした。あきらめて、できるところまでやることにしました。 MAX10-EB が無くても、何とかなるかも知れません。全体の構成図がありましたので、つないでみました。下の画像です。

FPGA と Raspberry Pi 3B の接続

 ラズパイに Qt Creator をインストールして、使うようになっています。本を参考にインストールしようと試みました。これが、存外苦しみました。なかなかうまくいきません。しかたないので、いつものように Gemini さんに聞いてみました。何回もやり取りをし、試してみました。最終的に本では Qt 4 を使うようになっていますが、Qt 5 をインストールできました。下の画像です。

Qt 5をインストールできた。

 その後、本の説明に従って作業を進めました。プロジェクトを作成し、この章の最終目標である、動作の原型ができました。Qt 4 と Qt 5 の違いで本の表示とは異なる文字がでていますが、おそらく良いだろうと思い進めています。下の画像です。

シグナルとスロットの定義と接続

 Qt Creator によるアプリケーションの作成の途中まで、コンパイルする前までできました。次にファイルを作成し、コンパイルします。C++ のコードです。C++ は少しかじっただけなので、ちょっと勉強しなければなりません。次回は C++ の報告になると思います。

ーーー じいじと孫の工作 ーーー

 以前孫が宇宙からの電波を捉えるということを、やりたがっていました。本格的には受信機やアンテナなど数万円はかかりそうでした。

kmatsutaro.hatenablog.com

ラジオで捉えるという記事があったので、私が目覚まし時計に内蔵されていたラジオを取り外して単体で使えるように作り変えました。そのラジオは古くてコードも劣悪な物を使ってあるため、断線して鳴らなくなってました。それが下の画像のラジオです。

宇宙からの電波を観測するためのラジオ

 特別なラジオではありません。普通の FM / AM ラジオです。時間の関係で孫が4個所くらい半田付けをしました。残りは、じいじがやりました。

 

FPGA 編 その12

 今日は第20章後半の「 Avalon-MM インターフェースのスレーブ IP pic_programmer の設計」です。これは MAX10-JB 基板を使うプロジェクトです。MAX10-JB 基板は製作時に誤って、ピンを基板の表裏の逆に接続してしまいました。半田付けを外し、付け直しました。おそらくその過程で、プリント基板が痛んで導通しなくなったのではと考えています。残念ながら USB-Blaster としてデバイスが認識されません。できるところまでやってみようと思い、取り組んだ報告です。

 これは前述のようにまともに MAX10-JB 基板が使えない状態なので、サンプルプログラムで実行できればコードを書こうと思い始めました。QSys による pic_programmer の C 言語混在シミュレーションで、コンポーネントの作成を行います。ただし、サンプルプログラムはすべてのファイルが入っています。そこで、プログラム実行時に自動生成される QSYS_CORE_bb.v と QSYS_CORE_tb.v および pic_programmer.v のサンプルファイル名の頭に _ を挿入して、トラブルが起こらないようにして始めました。どうにか、 pic_programmer.v は生成されたようです。下がその画像です。

pic_programmer.v の自動生成

 その後、 pic_programmer コンポーネントの QSys への組み込みと論理シミュレーションを行い。さらに C 言語と Verilog 混在シミュレーションを行うための DPI 環境設定をしました。最後に ModelSim スクリプトの dpi_run.do 実行をしました。しかしそこまでで、先には進めなくなりました。下がその画像です。

これ以上進まない。

 Geminiさんに聞いて、何回やり直しても同じ結果でした。やはり MAX10-JB 基板の問題ではないかと考えています。今日の報告は以上です。

ーーー じいじと孫の工作 ーーー

 昨年、小1の孫が誕生日に作ったラジオのスイッチが壊れていました。壊れたスイッチの半田を外して、買いに行きました。久しぶりの半田付けですが、孫は落ち着いてスイッチを取り付けました。下がその画像です。スイッチの左側の茶色のスイッチが外した物です

ラジオの修理

電源は入ったのですが、ザーザーと雑音しか出ませんでした。孫が帰った翌日、チューナー部のボリュームを回していたら時々音がします。接点復活剤を吹っ掛け回しても、あまり変わりません。カシメてみることにしました。ドライバーを回転部分にあてがい、木槌で軽くたたいたら直りました。

FPGA 編 その11

 今日は始めに第19章です。TimeQuest Timing Analyzer によるタイミング解析と SDC ファイルという題です。クロックが ns(ナノ秒)という速さです。コンピュータを作る上では当然知っておくべき内容だと思います。しかし、内容が難しすぎてついていけません。一通り読んだということで、この章は終わりにします。

 次に第20章です。タイトルは「 C言語混在シミュレーションと IP 設計 」です。手始めに C言語と Verilog の混在シミュレーション技法「 DPI 」です。記載してあるいくつかのファイルを準備し一文字ずつチェックして、ModelSim で実行しました。エラー表示で dpiheader.h が見つかりませんと出ました。サンプルプログラムを見てみると、ちゃんとフォルダーの中にありました。コピーして、自分のフォルダーに貼り付けたら動作しました。下がその画像です。

DPI の動作テスト

 次は、Avalon-MMインターフェースによる RAM のリード・ライトを C言語混在でシミュレーションする課題です。まず、RAM のリード・ライト検証の準備です。Quartus Prime と Qsys を使います。ファイルを一文字ずつチェックしましたが、うまくいきません。Gemini さんに聞いて作業しました。何とかエラー無く動作してくれました。下がその画像です。

RAMのリード・ライトの検証

  今日の最後に、Avalon-MMインターフェースによる RAM のリード・ライト検証です。これは、何度試してもうまくいかなかったです。本に書いてあるファイルだけでは、足りません。結局、サンプルプログラムをコピーして使いました。サンプルと私のディレクターの記載が違いますので、その点を修正したら動作しました。本と同じように動作しているようです。下がその画像です。

Avalon-MMインターフェースによるRAMのリード・ライトの動作波形

 次は MAX10-JB 基板を使うようです。使えないような気がしますが、やれるところまでやって次回報告したいと思います。

ーーー じいじと孫のお遊び ーーー

 じいじ、横になって。横になりました。シャツをめくって。シャツをめくりました。孫は胸に電極(ヘッドホンのスピーカー)をのせました。危ないと言って逃げ去りました。心電図かと思ったら、AED のようです。下の写真です。我が家で使えなくなった物を孫と分解して遊んでます。

AED (ヘッドホンと音声レコーダー)