FPGA の練習 ~ 1ビットデータの加算器 2023-09-23

「1ビットデータの加算器」 とは何のことかというと、画像左側のスイッチを押している個数を、右側の2個の LED で、2進数表示する機能である。

押してない →  off  off
1個押す  →  off    on 
2個押す  →   on   off
3個押す  →   on    on 

この処理は、論理式を使って、次のように表わされる。
3個のスイッチの状態変数(値が0 か 1)を A, B, C とすると

左 LED状態 = ( (A xor B) and C ) or ( A and B )  (※ xor は排他的論理和 )
右 LED状態 =    A xor B xor C

式の意味については 「加算器」 といった用語で検索して調べるとよい。
とにかく FPGA の中に、この論理式に相当する回路を作ると上記の機能を実現できる。

いわゆる 「電卓」 という道具は、このような機能を複雑に組み合わせた回路からできているわけだ。 ビット数を増やして四則演算に対応する必要があるので、相当に大変な作業だと思うが、もうずいぶん昔、パソコンなど全くない時代に、手書きの回路図から電卓を開発した先人の努力には、頭が下がる。

 

| | コメント (0)

FPGA の練習 ~ 外部入出力 2023-09-21

当たり前だが、こういう制御基板というのは、それだけではあまり意味がない。
(中身は極めて複雑な構造なので、それはそれで価値はあるけれど。)
やはり、何か外側につないで、人間が感じ取れるような動きをしてほしい。
というわけで、とてもシンプルな外部入出力の実験。

 1.スイッチを押す
 2.FPGA基板の入力電圧が変化
 3.FPGAの内部回路(ここは自分で設計)が動作
 4.FPGA基板の出力電圧が変化
 5.LED が点灯

たったこれだけやるにも、基板の説明書や、プログラム(Verilog)の説明書やらを色々読まないといけなくて、結構手間がかかる。

| | コメント (0)

FPGA の練習 ~ LED 点滅 2023-09-18

前回まで Zynqberry という基板用の ソフトウェア(OS 機能)のインストール作業を続けてきたが、諸事情で方針変更することになった。 Zynqberry 基板は FPGA と CPU の両方の機能を持っているが、今後は FPGA の機能だけを持つ ARTY S7 という基板を使うことにする。 

FPGA を使うときは「電子回路の配線を自分で作る」のだけれど、実際にやることは、回路を表現するプログラム(Verilog 言語)を書いて、基板内のメモリに書き込む作業なので、結局、ソフトウェアを作るのと、ちっとも変わらない。 昔みたいに、ハンダごてを使って配線すると、ハンダの匂いとか部品の手触りとかが、回路の存在感と深く結びついていて、それが物を作る面白さでもあったと思う。 残念ながら、FPGA にはそれがない。 

とはいえ、何でもそうだけど便利さと性能の高さにはかなわないので、とにかく FPGAを使いこなせるようになるまで、練習をやっていこうと思う。 まずは基本動作の確認で、LED の点滅。

 

| | コメント (0)

OS(Linux)のインストール ~ カメラ機能 2023-09-12

Raspi_cameraZynqberry ボードに、カメラを接続し、写真撮影をできる
ようにした。

右図のカメラは、Raspberry Pi 基板 に接続するための
製品なのだが、このボードでは、カメラとの通信仕様を
Raspberry Pi と同じにしているため、このように流用
することができる。

撮影をするために、下記のソフトを追加した。

・ カメラと通信を行って、露出や露光時間などの
  設定をするソフト 

・ カメラの撮影データを取り込んで、画像ファイルを
  生成するソフト

・ 画像ファイルを、ディスプレイ画面に表示するソフト

撮影結果は、下図のような感じ。 ちょっと、ピンぼけ気味なのが気になるが、
カメラの性能なのか、ソフトの問題なのか、今の所は良く分からない。

Screen1

| | コメント (0)

OS(Linux)のインストール ~ ウィンドウ画面 2023-09-08

Zynqberry ボードにディスプレイを接続し、ウィンドウ画面操作をできるようにした。

ボードの写真下側の黒い大きなコネクタ( HDMI ケーブル )を介してディスプレイに
画像を送信する仕組みだ。 ウィンドウ管理ソフトや、ブラウザソフトなど、大量の
ソフトウェアを SDカードに書き込む必要があるのだが、そのソフトの種類と組合わせの
検討に、結構な手間がかかってしまった。

今回、画面の管理用に LXDE というソフトを使っていて、これは通常のパソコン
(Windows など)に比べると簡易的な機能しかないのだが、それでも Zynqberry
ボードの性能不足のため、動作がとても重い。 マウス操作が反映されるのに1秒以上
かかってしまうので、あまり実用的とはいえない。

Img_20230908_031836

| | コメント (0)

OS(Linux)のインストール ~ ネットワーク通信機能 2023-08-29

Zynqberry ボードに、ネットワーク通信機能を追加した。
左側の青いコネクターが有線LANケーブル、右側の白い部品が WiFi 通信アダプターだ。

Img_20230829_131221

設定にあたっては、ボードとパソコンを USB ケーブル(写真奥のぼやけた黒い線)でつなぎ、パソコンのデータ通信画面上で、何だかんだとコマンド操作を行う必要がある。

一旦、ネットワーク通信が可能になると、インターネットから好きなアプリをダウンロードしたりできる。 試しに WEB ブラウザアプリをダウンロードして、パソコンのデータ通信画面上に WEBサイトを表示してみた。 専用のディスプレイがないので、文字表示だけのブラウザだが、何かコンピュータを手作りしている実感があって少し楽しい。

下図は google の検索ページを表示したもの。
Linux_20230829143201

| | コメント (0)

OS(Linux)のインストール ~ ユーザースペース 2023-08-26

OS はカーネルプログラムにより管理されるが、個々のハードウェアに関する機能は、カーネルが多種多様なプログラムやデータを呼び出すことにより実現される。 カーネル以外の、プログラムやデータ(ファイル)の「置き場所」を「ユーザースペース」と呼ぶ。

各種の財団や企業が 「Linux カーネル」 と 「ユーザースペース上の標準的なファイル」 をひとまとめにしたもの(ディストリビューション)を提供しており、無償で利用するすることができる。 高機能な OS の機能が無償で手に入るというのは驚くべきことだが、そこはやはり 「タダほど高いものは~」 という格言通り、使いこなすのは、それなりに面倒くさい。

今回、Ubuntu というディストリビューションの、ユーザースペース部分を流用して Zynqberry ボードで動かせるようにした。 インストール作業にあたり、前回同様、ボードの販売元作成の参考書 「ZYNQで実用的なシステムを構築するための本」 を参考にした。

パソコンで専用のソフトを使って、カーネル書き込み済みの SD カードに、Ubuntu のユーザスペースを追記する。 その SD カードをボード上のソケットに差すことで、カーネル機能が動き、個々のハードウェアが動作可能状態になる。

ボードとパソコンを USB ケーブルでつなぎ、パソコンのデータ通信画面上で、ユーザが各種のコマンドを入力することで、各ハードウェアを操作することが可能となる。通信画面は、こんな感じ。

Linux

| | コメント (0)

OS(Linux)のインストール ~ カーネル (2) 2023-08-24

FPGA+CPU ボード Zynqberry に Linux カーネルをインストールにあたり、ボードの販売元作成の参考書 「ZYNQで実用的なシステムを構築するための本」 を参考にした。

パソコンで専用のソフトを使って、カーネル(プログラム)を作成し、できたプログラムを SD カードに書きこむ。 その SD カードをボード上のソケットに差すことで、カーネル機能が動くようになる。 実際にカーネルが動くかどうかを確かめるには、ボードとパソコンを USB ケーブルでつなぎ、ボードからパソコンに送られてくる動作情報を、パソコンのデータ通信画面に表示する必要がある。
こんな感じ。

Kernel_20230824230001

最初の、Startting kernel ... という表示が、カーネルが動きだしたことの証拠だ。当然だが、これだけでは面白くもなんともない。もう少し意味のあることを実現するには、この後、さらに何だかんだ、データやらプログラムやらを SD カードに追加する必要がある。 ああ面倒くさい。

| | コメント (0)

OS(Linux)のインストール ~ カーネル 2023-08-23

Te072603m_0今回、OS をインストールしようとしているのは、Zynqberry という製品名の CPUボード(右図)である。 正確には FPGA と CPU を合体したパーツ ( Zynq ) を搭載したボードなのだが、FPGA 関連機能はもっと後で作りこむ予定なので、まずは CPU 機能を使えるようにしたい。 

CPU ボードに Linux などの OS をインストールする場合、機器のハードウェア仕様に合わせて OS の設定をカスタマイズする必要がある。 対象となるハードウェアは、CPU、内部メモリ、入出力デバイス(文字入出力、画像入出力、音声入出力、通信機能、記憶装置など)であり、各ハードウェアに関するデータや制御プログラムは、全て「カプセル化された機能」として管理されることになる。

カプセル化された機能として、最も基本的なものは「カーネル」と呼ばれるプログラムである。 カーネルは、OS の元締めとなるプログラムであって、これが常時動き続けることで OS が動作し、システムの制御を実現できるようになる。 当面は、Linux カーネルを、このボード用に インストールすることが目標である。

| | コメント (0)

OS におけるカプセル化 2023-08-23

最近、とある CPU ボードに OS(Linux)をインストールする作業を行っている。 特殊なボードなので、OS の設定をカスタマイズしないといけないのだが、それが面倒くさくて中々先に進まない。 無理して急ぐ仕事でもないので、少し寄り道するつもりで、昨日までの記事で扱った 「カプセル化」の概念と 「OS」 というシステムの関連性について整理しておこうと思う。

例によって助手に頼ることにする。課題(プロンプト)は以下の通り。
「情報処理における "カプセル化" という概念と、"OS" というシステムの間に、どのような関連性があるか考察してください」
------------------------------------
(以下、ChatGPT 生成文)

1. データの隠蔽:Medicine_capsule_red

カプセル化の中心的な概念は、データをクラスの内部に隠蔽し、外部から直接アクセスすることを制限することです。このようなデータの隠蔽の原則は、OSにおけるリソース管理やセキュリティの概念とも関連しています。例えば、プロセスがメモリ上の任意の場所にアクセスできないように制限をかけることで、他のプロセスのメモリ領域を保護する仕組みなどがあります。

2. インターフェースの提供:

カプセル化は、外部からデータや実装詳細を隠蔽する一方で、そのオブジェクトやクラスとのやり取りのための明確なインターフェースを提供します。同様に、OSも内部のリソースや実装詳細を隠蔽しつつ、アプリケーションに対して一貫したAPIやシステムコールのインターフェースを提供します。これによって、アプリケーションはOSの具体的な実装やハードウェアの詳細を知らなくても、必要なリソースにアクセスしたり、操作を行うことができます。

3. モジュラリティ:

カプセル化によって、システムの各部分が独立して設計・実装されることで、モジュラリティが向上します。このモジュラリティの考え方は、OSの設計にも影響を与えています。例えば、カーネル、デバイスドライバ、ファイルシステムなど、OSの各コンポーネントは独立して機能し、明確に定義されたインターフェースを介して互いにコミュニケーションをとります。

4. 保護機構:

カプセル化の原則は、不正なアクセスや意図しない操作からオブジェクトを保護することにも関連しています。OSにおいても、プロセス、ファイル、デバイスなどのリソースを保護するための様々なメカニズムが実装されています。これらのメカニズムは、カプセル化の考え方と同様に、リソースの安全性を確保するためのものです。

これらの考察から、カプセル化の概念とOSの設計や機能の間には、多くの共通点や関連性が存在することがわかります。
--------------------------------------
(以下、投稿者による補足)

次のような用語については、それぞれの意味を明確にする必要があるが、ひとまず保留にする。

⇒ クラス、リソース管理、セキュリティ、プロセス、オブジェクト、API、システムコール、モジュラリティ、カーネル、デバイスドライバ、ファイルシステム

| | コメント (0)

«ソフトウェア設計におけるカプセル化 2023-08-22