Pelajaran Teach
Nios V pada DE1-SoC (3/5): I/O assembly RISC-V
Ubah suai I/O assembly RISC-V, jejaki arahan muat dan simpan, serta uji tingkah laku suis kepada LED pada DE1-SoC.
Kali pertama menggunakan LabsLand? Cipta akaun guru anda
Hasil pembelajaran
Membina dan menjalankan fail ELF assembly RISC-V untuk Nios V.
Memadankan arahan muat, simpan, anjak, topeng dan cabang dengan tingkah laku C.
Menerangkan peranan daftar sementara dalam gelung tinjauan.
Mengesahkan tingkah laku assembly pada papan DE1-SoC sebenar.
Pratonton aktiviti pelajar
Kandungan aktiviti
Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.
Perkakasan yang sama, kod aras lebih rendah
6 min
Dalam pelajaran sebelumnya, kod C membaca data JP1, menganjak dan mengenakan topeng pada nilai NSW0..NSW9, lalu menulis hasilnya kepada daftar LED. Dalam pelajaran ini, anda akan melaksanakan gelung yang sama secara langsung dalam assembly RISC-V.
Anda tidak perlu mengetahui keseluruhan ISA RISC-V untuk bengkel ini. Gunakan rujukan ringkas ini semasa membaca atur cara permulaan:
- t0..t6: daftar sementara untuk menyimpan alamat, nilai input, topeng dan nilai output.
- zero: daftar yang sentiasa memberikan nilai 0.
- li rd, nilai: meletakkan nilai pemalar ke dalam daftar rd. Dalam pelajaran ini, arahan ini memuatkan alamat perkakasan seperti 0xFF200000 dan topeng seperti 0x3FF.
- lw rd, ofset(rs1): memuatkan satu perkataan 32 bit daripada memori ke dalam rd. Di sini, arahan ini membaca daftar perkakasan.
- sw rs2, ofset(rs1): menyimpan satu perkataan 32 bit daripada rs2 ke dalam memori. Di sini, arahan ini menulis kepada daftar perkakasan.
- srli rd, rs1, bilangan: menganjak bit dalam rs1 ke kanan sebanyak bilangan tetap dan meletakkan hasilnya dalam rd.
- and rd, rs1, rs2: mengekalkan hanya bit yang bernilai 1 dalam kedua-dua daftar sumber.
- j label: melompat kembali ke label supaya gelung tinjauan terus berjalan.
Untuk rujukan lengkap set arahan, gunakan spesifikasi rasmi ISA RISC-V tanpa keistimewaan. Bagi sistem Nios V dan persisian pemetaan memori, gunakan manual FPGAcademy DE1-SoC Computer with Nios V. Untuk aktiviti ini, rujukan ringkas di atas, nota alamat daripada Pelajaran 2 dan komen kod di bawah sudah mencukupi.
Atur cara permulaan assembly mengulangi satu gelung pemerhatian: muatkan data JP1, anjak bit NSW ke bawah, kenakan topeng pada sepuluh bit suis, simpan hasilnya kepada LEDR dan lompat kembali untuk meninjau semula.
Berdasarkan rujukan ringkas, terangkan mengapa gelung ini memerlukan operasi muat, simpan, anjak, topeng dan lompat. Anda belum perlu memikirkan sintaks yang tepat.
Jalankan atur cara permulaan assembly
12 min
Buka
Nios V Assembly IDE for DE1-SoC.Periksa
main.s.Klik
Build ELF(Bina ELF).Muat naik ke FPGA dengan
Upload to FPGA.Tukar
NSW0,NSW5danNSW9.Perhatikan sama ada LED merah yang sepadan berubah.
Gunakan jadual untuk merekod tiga ujian atur cara permulaan daripada makmal. Isi satu baris bagi setiap corak suis dan catat perkara yang benar-benar ditunjukkan oleh papan.
Rekod tiga ujian suis kepada LED daripada atur cara permulaan assembly. Gunakan corak suis yang telah diisi atau gantikannya dengan ujian setara yang benar-benar anda jalankan.
| Input yang diuji | LEDR diperhatikan pada papan | Catatan |
|---|---|---|
Jejaki gelung
13 min
Atur cara permulaan mempunyai struktur berikut:
li t0, 0xFF200000 # LEDR
li t1, 0xFF200060 # data GPIO JP1
li t2, 0xFF200064 # arah GPIO JP1
sw zero, 0(t2) # gunakan baris GPIO JP1 sebagai input
loop:
lw t3, 0(t1)
srli t3, t3, 5
li t4, 0x3FF
and t3, t3, t4
sw t3, 0(t0)
j loop
Gunakan rujukan ringkas dan komen kod untuk mengisi jadual daftar. Setiap baris perlu menerangkan perkara yang disimpan oleh daftar itu semasa gelung berjalan. Daftar t3 ialah daftar data yang diubah: pada mulanya, daftar ini mengandungi nilai input JP1 yang dimuatkan; kemudian, nilainya menjadi nilai yang telah dianjak dan dikenakan topeng sebelum ditulis kepada LED.
Bagi setiap daftar sementara, nyatakan perkara yang disimpan oleh daftar itu dalam atur cara ini dan kelaskan nilainya sebagai alamat, nilai input, topeng, nilai output atau nilai input/output yang diubah.
| Daftar | Peranan dalam atur cara | Jenis nilai |
|---|---|---|
Arahan manakah yang membaca nilai GPIO suis, dan arahan manakah yang menulis kepada LED?
Mengapakah arahan terakhir j loop penting untuk kawalan suis secara langsung?
Hubungkan C dengan assembly
12 min
Padankan ungkapan C ini dengan arahan assembly: (*JP1 >> 5) & 0x3FF. Baris assembly manakah yang membaca nilai daftar? Baris manakah yang melakukan anjakan? Baris manakah yang menghasilkan topeng? Baris manakah yang mengenakan topeng itu?
Nyatakan dua operasi yang disembunyikan oleh ungkapan C tetapi ditulis secara jelas dalam assembly. Kemudian, nyatakan satu perkara yang menjadi lebih sukar untuk dibaca atau diselenggara dalam assembly.
Ubah suai kecil pada assembly
12 min
Ubah suai assembly supaya hanya NSW0..NSW3 dipaparkan pada LED. Petunjuk: topeng berubah daripada sepuluh bit kepada empat bit.
Serahkan baris assembly yang diubah dan terangkan nilai yang anda ubah.
Huraikan satu ujian apabila suis yang lebih tinggi daripada NSW3 dihidupkan. Apakah yang patut ditunjukkan oleh LED selepas topeng diubah?