1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自作PCを作る24 ~TCP接続に対応する~

1
Posted at

前回までのあらすじ

  • メモリを作ったよ!
  • ISAを作ったよ!
  • アセンブリ言語を作ったよ!
  • CPUを作ったよ!
  • プログラミング言語を作ったよ!
  • 簡易的なシェルシステムを作成したよ!
  • ファイルシステムを作成したよ!
  • OSを作成したよ!

今回の目標

前回までの記事で,自作OSまで作成することが出来ました.
しかしこのOSの起動・動作はPYNQ-Z2のOSに依存しており,正直実態としてはOSというよりただのプログラムとあまり相違ありません.
という事でこれからの中期目標として,これまでPSに依存していた処理をPLで賄うようにします.
今回はその第一歩として,TCP接続に対応します.

ここから本題

全体を総括するissueはこちら

PSに依存していた処理をPLで賄うと言っても,具体的にどうするかについて説明します.
今まで,自作OSの起動と操作はPYNQ-Z2上のcppファイルを使用していました.そのcppファイルをPYNQ-Z2上のターミナルで実行することで以下の処理が行えます.

  1. bitファイルをPLに書きこむ
  2. 標準入力を受け付けて,自作CPUに送る
  3. 自作CPUから標準出力を受け取ったら,画面に出力する

はい.つまり自作OSのベースとなる部分が全部PS任せだったわけです.
自作OSを起動させて動作させるためには,他のOSがなければならないという状況だったわけです.

という事で,以下のような変更をします.

  1. bitファイルはPYNQ-Z2に焼いておいて,PYNQ-Z2の電源を入れたら起動するようにする
  2. ターミナルはSSHを使用して,通常のPCから行う

ただし,以下のような問題があります.

  1. SSH接続は難しすぎる.暗号化の仕組みが必要
  2. Ethernet接続を全部実装しようとすると難しすぎる

ということで以下のように進めていきます.

  1. ひとまずのゴールはSSHではなくtelnetを使用すること(この記事ではまだここまでは進まないけど)
  2. Ethernetの操作は出来合いのモジュール(W5100S)に任せて,CPU側ではSPI操作だけで完結するようにすること

これは説明が雑すぎますので,具体的な説明は末尾に追加します.

Ethernetモジュールを使用できるようにする

issueはこちら

具体的にはEthernetモジュールを実際に配線して,それを使用できるようにする対応です.
使用する信号はひとつのレジスタに収まるようにArduinoのD8~D13にしました.
この対応によって,ひとまずEthernetモジュールを操作できるようになります.

ネットワークにつながるようにする

前回のissueで操作できるようになったEthernetモジュールを使用して,ネットワークにつながるようにします.
ネットワークと言ってもLANですけど.

この対応をすることによって,以下が完成します

  • 通信の土台となる部分(W5100S上にあるレジスタの読み書き)
  • Ethernetモジュールの初期化(リセットとIPアドレスなどの設定)
  • 同じLANにあるマシンからping送信するとEthernetモジュールが自動で返答する

TCPで送受信できるようにする

前回のissueでネットワークにつながるようになりましたので,ここではそれを使用してTCP接続できるようにします.

この対応をすることによって,以下が完成します

  • CPUがTCPで接続を受け付けて,データ送受信できるようになる
  • 自作PCはLAN内で通信を待ち受けるサーバになる.TCPの仕組みがtelnetの土台になる

今後の展望

telnetに対応します.
そして,LAN経由でシェルを操作できるようにします.
この対応が完了すれば,晴れて「自作PC」を名乗れるようになります.

通信に関する実装状況について

現在,低レイヤなどの複雑な実装は全てモジュールに任せることで妥協していますが,将来的には全部自作CPUで賄うことを考えています.
それについての説明を以下に示します.どうせ自分が覚えてられないので備忘録も兼ねています.

層 プロトコル 担う仕事 現在の担当 将来の担当(モジュールのMACRAWモード) 将来の担当(RJ-45コネクタのみ)
アプリケーション層 telnet 文字のやり取り,オプション交渉(端末の設定の取り決め) 自作(Qosmos.これから実装) 自作(Qosmos) 自作(Qosmos)
アプリケーション層 (端末の処理) 入力した文字のエコー,バックスペースなどの行編集 自作(Qosmos.これから実装) 自作(Qosmos) 自作(Qosmos)
トランスポート層 TCP 接続の確立と切断,再送,順序の並べ替え,流量の制御 Ethernetモジュール(W5100S) 自作(Qosmos) 自作(Qosmos)
ネットワーク層 IP IPアドレスによる宛先の指定 Ethernetモジュール(W5100S) 自作(Qosmos) 自作(Qosmos)
ネットワーク層 ICMP pingへの応答 Ethernetモジュール(W5100S) 自作(Qosmos) 自作(Qosmos)
ネットワーク層 ARP IPアドレスからMACアドレスを調べる Ethernetモジュール(W5100S) 自作(Qosmos) 自作(Qosmos)
データリンク層 Ethernet(MAC) MACアドレスによるフレームの送受信,誤りの検出 Ethernetモジュール(W5100S) Ethernetモジュール(W5100S) 自作(FPGAの回路)
物理層 10BASE-T,100BASE-TX(PHY) ビット列と電気信号の変換 Ethernetモジュール(W5100S) Ethernetモジュール(W5100S) 自作(FPGAの回路と外付けの受信回路.10BASE-Tのみ)
物理層 (絶縁) LANケーブルとの電気的な絶縁 Ethernetモジュール(RJ-45コネクタ内蔵のパルストランス) Ethernetモジュール(RJ-45コネクタ内蔵のパルストランス) 市販品(RJ-45コネクタ内蔵のパルストランス)
(モジュールとの接続) SPI モジュールのレジスタの読み書き,ソケットの操作(待ち受け・送信・受信の指示),フレームの受け渡し 自作(CPUのピンをソフトウェアで操作) 自作(CPUのピンをソフトウェアで操作) 不要(モジュールを使わないため)
1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?