3 poin oleh GN⁺ 2024-04-10 | 1 komentar | Bagikan ke WhatsApp

Pembuat kartu jaringan logika diskret

Tulisan ini adalah bagian dari sebuah serial yang membahas proses membangun sistem komputer lengkap menggunakan rangkaian logika diskret. Sampai saat ini, ia telah membuat komputer yang dapat menjalankan aplikasi jaringan seperti server HTTP atau game LAN.

Ringkasan

  • Tahun lalu ia membuat adaptor lapisan fisik yang mengubah sinyal Ethernet 10BASE-T menjadi SPI dan juga sebaliknya. Saat itu pengoperasiannya diuji menggunakan mikrokontroler STM32, dan sekarang ia sedang mengimplementasikan modul lapisan MAC untuk menghubungkannya ke komputer rakitannya sendiri.
  • Kedua adaptor sama-sama full-duplex dan memiliki bagian pemancar serta penerima yang terpisah dan independen.

Penerima

Ringkasan cara kerja penerima:

  • Data serial SPI diubah menjadi data paralel per byte, dan clock byte diekstrak.
  • Enam byte pertama dibandingkan dengan acuan alamat MAC tujuan, dan frame yang tidak cocok ditolak.
  • Byte ditulis ke buffer RAM statis.
  • Saat frame berakhir, penerima dinonaktifkan, dan frame tambahan ditolak sampai pengguna memulai ulang penerima. Penghitung byte berhenti dan nilainya diberikan kepada pengguna.

Akuisisi data

  • Data SPI serial harus diubah menjadi aliran byte.
  • Data serial digeser ke shift register (U32). U30 dan U31 masing-masing menghitung bit dan byte.
  • Sinyal penulisan RAM statis recv_buf_we dibentuk menggunakan D flip-flop U29B. Sinyal ini sesaat turun rendah setelah masing-masing 8 bit data masukan.
  • Byte yang diterima ditulis ke buffer RAM statis 6116 (U20) berukuran 2kB.
  • U13, U16, U18 membentuk multiplexer alamat untuk memilih antara penghitung byte atau bus alamat sistem sebagai masukan alamat ke SRAM (U20).
  • Buffer tri-state U21 meneruskan byte yang diterima ke RAM.

Penyaringan alamat MAC

  • Saat menganalisis lalu lintas Ethernet, ia menemukan bahwa frame biasanya datang dalam kelompok kecil (3-4 frame yang dipisahkan oleh jeda singkat). Frame dalam satu kelompok biasanya memiliki alamat MAC tujuan yang berbeda-beda.
  • Ini membuatnya berpikir bahwa komputernya tidak akan bisa memfilter frame yang diterima berdasarkan MAC dan me-restart penerima dengan cukup cepat untuk menangkap frame yang ditujukan kepadanya. Penyaringan alamat MAC di perangkat keras pun diperlukan.
  • Menyimpan alamat MAC kustom di suatu tempat lalu membandingkannya dengan 6 byte pertama yang diterima terasa terlalu rumit. Membuatnya dari pengulangan satu byte (misalnya FE:FE:FE:FE:FE:FE) juga memungkinkan, tetapi membosankan.
  • Untuk memberi sedikit variasi pada MAC-nya, ia membuatnya sebagai fungsi dari indeks byte:
    • Bit 0 tetap 0
    • Bit 1 tetap 1
    • Bit 2-4 adalah inversi indeks byte
    • Bit 5-7 tetap 1
  • Dengan aturan ini, alamat MAC-nya menjadi FE:FA:F6:F2:EE:EA. Selain itu, agar dapat bekerja dengan ARP, adaptor juga harus menerima MAC broadcast FF:FF:FF:FF:FF:FF.

Pemancar

  • Mirip dengan penerima, pemancar tidak mengimplementasikan pembuatan FCS di perangkat keras dan melakukannya di perangkat lunak.
  • Untuk lebih menyederhanakan pemancar, diputuskan untuk hanya mendukung frame dengan panjang tetap. Dengan begitu tidak diperlukan pembanding digital yang rumit, dan logika pengiriman frame hanya bergantung pada satu bit dari penghitung byte.
  • Panjang frame dipilih 1024 byte, yang cukup dekat dengan MTU umum 1500 byte.
  • Preamble frame yang dibutuhkan 10BASE-T (urutan 0x55 diikuti 0xD5) juga termasuk dalam 1024 byte tersebut dan harus dimuat oleh perangkat lunak.

Penghitung

  • Seperti pada penerima, dua penghitung digunakan untuk menghitung bit (U12) dan byte (U14).
  • Penghitung pertama diberi clock 20MHz dari osilator terintegrasi.
  • 20MHz tidak digunakan secara langsung, melainkan setidaknya dibagi dua. Dengan begitu duty cycle osilator tidak memengaruhi sinyal keluaran.

Aliran data

  • Tiga multiplexer 74HC157 yang sama seperti pada penerima (tidak ditampilkan di sini) digunakan untuk memilih masukan alamat RAM (U22).
  • U23 digunakan untuk memuat data ke RAM.
  • U24 berfungsi sebagai penyimpanan sementara untuk byte yang sedang dikirim. Idenya di sini mirip dengan pipeline VGA miliknya.
  • Penghitung byte 74HC4040 adalah ripple counter dan membutuhkan waktu untuk stabil, jadi U24 menyediakan keluaran yang stabil saat keluaran RAM masih belum valid.
  • Data ini kemudian dimasukkan ke shift register U28 dan digeser per bit.

Antarmuka CPU

Dari sudut pandang programmer, antarmuka adaptor Ethernet ini adalah sebagai berikut:

  • Kedua frame buffer dipetakan ke 0xF000.
  • Ada dua register read-only:
    • Register status 8-bit di 0xFB00 memiliki dua flag:
      • RX_FULL - frame telah diterima
      • TX_BUSY - frame sedang dikirim
    • Register panjang data terima 16-bit di 0xFB02
  • Menulis nilai apa pun ke 0xFB00 akan memulai ulang penerima.
  • Menulis nilai apa pun ke 0xFB01 akan memulai pengiriman.
  • Tidak ada interrupt karena CPU miliknya tidak mendukung interrupt.

Pemrograman

Ia menginginkan dukungan jaringan, tetapi tidak ingin mengimplementasikan sendiri stack TCP/IP. Selain itu, kompiler pertamanya sangat buruk dan memprogram dalam assembly terasa merepotkan, jadi ia menginginkan kompiler C yang layak. Maka ia pun membuat kompiler C. Kompiler ini sudah cukup matang untuk mengompilasi uIP 1.0 (library TCP/IP kecil). Meskipun kepadatan kode CPU miliknya sangat rendah, uIP cukup kecil untuk muat di RAM dan masih menyisakan ruang untuk aplikasi nyata.

Performa jaringannya memang sangat rendah, tetapi mengingat tidak ada CPU komersial atau chip khusus yang digunakan, ia tetap sangat puas:

  • Rata-rata round-trip time ping 85ms
  • Kecepatan unduh server HTTP 2.6kB/s (menyajikan file statis dari kartu SD)

Repositori proyek

Model, file skematik, dan gambar PCB tersedia di GitHub.

Opini GN⁺

  • Proyek ini menunjukkan pemahaman mendalam dan antusiasme pengembang terhadap perangkat keras. Upaya untuk mengimplementasikan semuanya sendiri sangat mengesankan, meskipun dari sisi kepraktisan memang menimbulkan pertanyaan.
  • Sistem komputasi modern sangat kompleks dan terspesialisasi, sehingga membangun semuanya dari nol sangat tidak efisien. Terutama untuk area yang sudah mapan dan teroptimasi seperti stack protokol jaringan, memanfaatkan implementasi yang sudah ada adalah pilihan yang bijak.
  • Meski begitu, proyek seperti ini memiliki nilai edukasi yang sangat tinggi. Ini karena kita bisa mengalami langsung bagaimana perangkat keras dan perangkat lunak tingkat rendah saling berinteraksi, serta bagaimana protokol diimplementasikan.
  • Selain itu, di tengah menurunnya pemahaman tentang perangkat keras di kalangan pengembang masa kini, proyek seperti ini dapat menjadi contoh berharga yang mengingatkan kembali pada fondasi sistem komputer.
  • Kekurangannya adalah performanya sangat rendah. Untuk meningkatkan kemungkinan pemanfaatan nyata, tampaknya diperlukan implementasi yang lebih teroptimasi. Namun, itu tampaknya bukan tujuan utama proyek ini.

1 komentar

 
GN⁺ 2024-04-10
Komentar Hacker News
  • Proyek ini membuat kartu Ethernet untuk komputer kustom yang mengimplementasikan pemfilteran alamat MAC di tingkat perangkat keras, dan jejak tumpukan penalaran sepanjang proses pengerjaannya sangat edukatif dan luar biasa.
  • Implementasi minimum kartu Ethernet untuk PC biasa kemungkinan akan serupa, tetapi checksum harus dihitung oleh CPU PC dan terhubung melalui USB atau semacamnya.
  • Sangat mengesankan bahwa untuk proyek ini mereka juga membuat sendiri compiler C, linker, libc, dan sebagainya.
  • Saya kagum dengan semangat dan usaha yang dicurahkan ke proyek seperti ini, dan setelah pensiun saya juga ingin mencoba proyek perangkat keras/perangkat lunak seperti ini.
  • Dulu kartu Ethernet Etherlink 3c501 memiliki performa yang buruk.
  • Sepertinya ini adalah kartu jaringan yang dibuat dengan rangkaian logika diskret. (bukan kartu jaringan logika diskret)
  • Tidak semua kartu jaringan dibuat dari komponen logika diskret, bukan? (naive question)
  • Modularitas dari setup komputer ini luar biasa.
  • Saya terkesan dengan penjelasannya yang sederhana dan efektif, dan ini sangat layak mendapat dorongan besar.