Generator Antarmuka Uji UART VHDLwhiz
Informasi Produk
Spesifikasi:
- Nama Produk: Generator antarmuka pengujian UART register VHDL
- Versi: 1.0.4
- Tanggal: 18 Agustus 2024
- Pengarang: Jonas Julian Jensen
- Produk URL: Tautan Produk
- Email kontak: jonas@vhdlwhiz.com
Keterangan
Produk ini memungkinkan Anda membuat antarmuka khusus untuk membaca dan menulis nilai register FPGA menggunakan UART. Modul VHDL dan skrip Python yang dihasilkan memberikan kemampuan untuk berinteraksi dengan berbagai jenis register dalam desain FPGA Anda.
Persyaratan
- Penerjemah Python 3
- paket pyserial
Protokol
Produk ini menggunakan protokol pembingkaian data dengan empat karakter kontrol:
- Nama: BACA_PERMINTAAN, Nilai: 0x0A – Perintah dari host ke FPGA untuk memulai urutan penulisan untuk mengirim semua register kembali melalui UART
- Nama: MULAI_MENULIS, Nilai: 0x0B – Menandai awal urutan penulisan di kedua arah
- Nama: AKHIR_TULIS, Nilai: 0x0C – Menandai akhir urutan penulisan di kedua arah
- Nama: MELARIKAN DIRI, Nilai: 0x0D – Karakter escape yang digunakan untuk escape dari kata kontrol
Petunjuk Penggunaan Produk
Menjalankan Skrip
Untuk menggunakan produk ini, pastikan Anda telah menginstal Python 3 dan paket Pyserial. Jalankan skrip melalui interpreter Python 3.
Membuat Antarmuka Kustom
Gunakan skrip gen_uart_regs.py untuk membuat antarmuka khusus guna membaca dan menulis nilai register FPGA. Anda dapat menentukan komposisi register input dan output serta jenisnya saat membuat output. files.
Berinteraksi dengan Register
Anda dapat membaca atau menulis ke sejumlah register dalam desain FPGA Anda menggunakan modul VHDL yang dihasilkan dan skrip Python. Register yang dapat diakses dapat memiliki tipe seperti std_logic, std_logic_vector, signed, atau unsigned.
Lisensi
- Lisensi MIT mencakup persyaratan hak cipta kode sumber dan ketentuan penggunaan. Lihat LISENSI.txt file di Zip file untuk rinciannya.
Catatan Perubahan
- Perubahan ini mengacu pada proyek files, dan dokumen ini diperbarui sesuai dengan itu
Versi | Perkataan |
1.0.0 | Rilis awal |
1.0.1 | Memperbaiki bug referensi «self» yang hilang saat mengimpor sebagai uart_regs.py sebagai modul Python. Mengubah hasil cetak penulisan gagal menjadi pengecualian
hindari mencetak ke konsol saat dijalankan sebagai modul yang diimpor. |
1.0.2 | Perbaikan untuk kesalahan Vivado [Synth 8-248] ketika tidak ada reg mode keluar. |
1.0.3 | Memperbaiki peringatan Vivado Linter: Register telah mengaktifkan yang digerakkan oleh
pengaturan ulang sinkron |
1.0.4 | Memperbaiki huruf besar kecil saat menerima kata yang salah bentuk dengan karakter escape sebagai byte terakhir. Kata berikutnya juga akan hilang karena kami tidak menghapus recv_data_prev_is_escape saat kembali ke IDLE.
Skrip gen_uart_regs.py sekarang hanya mengizinkan nama reg yang unik. |
Keterangan
- Dokumen ini menjelaskan hal berikut files dan folder:
- gen_uart_regs.py
- dihasilkan/uart_regs.vhd
- dihasilkan/uart_regs.py
- dihasilkan/instansiasi_template.vho
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- demo/lattice_icestick/
- demo/xilinx_arty_a7_35/
- demo/xilinx_arty_s7_50/
- Skrip gen_uart_regs.py dan VHDL yang mendukung files dalam proyek ini memungkinkan Anda membuat antarmuka khusus untuk membaca dan menulis nilai register FPGA dari berbagai jenis dan lebar menggunakan UART.
- Anda dapat menggunakan modul VHDL dan skrip Python yang dihasilkan untuk membaca atau menulis ke sejumlah register dalam desain Anda. Register yang dapat diakses UART dapat memiliki tipe std_logic, std_logic_vector, signed, atau unsigned.
- Anda dapat memutuskan komposisi dan tipe input dan output yang tepat saat menghasilkan output files menggunakan skrip gen_uart_regs.py.
- Skrip Python dibuat sebagian dengan bantuan alat kecerdasan buatan ChatGPT, sedangkan kode VHDL dibuat dengan tangan.
Persyaratan
- Skrip dalam proyek ini harus dijalankan melalui juru bahasa Python 3 dan paket Pyserial harus diinstal.
- Anda dapat menginstal pyserial melalui Pip menggunakan perintah ini: pip install pyserial
Protokol
- VHDL files dan skrip Python menggunakan protokol pembingkaian data dengan empat kontrol
Nama | Nilai | Komentar |
BACA_PERMINTAAN | 0x0A | Perintah dari host ke FPGA untuk memulai penulisan
urutan untuk mengirim semua register kembali melalui UART |
START_TULIS | 0x0B | Menandai awal urutan penulisan di salah satu
arah |
END_WRITE | 0x0C | Menandai akhir urutan penulisan di kedua arah |
MELARIKAN DIRI | 0x0D | Karakter escape digunakan untuk meng-escape setiap kata kontrol, termasuk karakter ESCAPE itu sendiri, ketika karakter tersebut muncul sebagai data antara penanda START_WRITE dan END_WRITE. |
Setiap byte READ_REQ yang tidak lolos yang dikirim ke FPGA adalah instruksi untuk mengirim semua register yang dapat diakses UART (input dan output) kembali ke host melalui UART. Perintah ini biasanya hanya dikeluarkan oleh skrip uart_regs.py.
Setelah menerima perintah ini, FPGA akan merespons dengan mengirimkan konten semua register kembali ke host. Pertama, sinyal masukan, kemudian sinyal keluaran. Jika panjangnya tidak berjumlah kelipatan 8 bit, bit terbawah dari byte terakhir akan diberi angka nol.
Urutan penulisan selalu dimulai dengan byte START_WRITE dan diakhiri dengan byte END_WRITE. Setiap byte di antara keduanya dianggap sebagai byte data. Jika ada byte data yang memiliki nilai yang sama dengan karakter kontrol, byte data tersebut harus di-escape. Ini berarti mengirimkan karakter ESCAPE tambahan sebelum byte data untuk menunjukkan bahwa itu sebenarnya adalah data.
Jika START_WRITE yang tidak lolos tiba di mana saja dalam aliran byte, ini dianggap sebagai awal dari urutan penulisan. Modul uart_regs_backend menggunakan informasi ini untuk melakukan sinkronisasi ulang jika komunikasi tidak sinkron.
gen_uart_regs.py
- Ini adalah skrip yang harus Anda mulai untuk menghasilkan antarmuka. Di bawah ini adalah screenshot menu bantuan yang bisa Anda dapatkan dengan menjalankan: python gen_uart_regs.py -h
- Untuk menghasilkan antarmuka khusus, Anda harus menjalankan skrip dengan masing-masing register terkontrol UART yang Anda inginkan terdaftar sebagai argumen. Tipe yang tersedia adalah std_logic, std_logic_vector, unsigned, dan Signed.
- Mode (arah) default ada dan tipe defaultnya adalah std_logic_vector kecuali panjang registernya: 1. Kemudian, defaultnya adalah std_logic.
- Jadi, jika Anda ingin membuat sinyal input std_logic, Anda dapat menggunakan salah satu argumen berikut:
- sl_saya=1
- sl_saya=1:masuk
- my_sl=1:di:std_logic
- Semua varian di atas akan menghasilkan skrip yang menghasilkan sinyal yang dapat diakses UART ini:
- Mari kita jalankan skrip dengan argumen untuk menghasilkan antarmuka dengan beberapa register dengan arah, panjang, dan jenis yang berbeda
Dihasilkan files
- Jika skrip gen_uart_regs.py dijalankan dengan sukses, folder keluaran akan dihasilkan dengan nama yang dihasilkan dengan ketiganya filetercantum di bawah ini. Jika sudah ada, maka akan ditimpa.
- dihasilkan/uart_regs.vhd
- dihasilkan/uart_regs.py
- dihasilkan/instansiasi_template.vho
- uart_regs.vhd
- Ini adalah modul antarmuka khusus yang dihasilkan oleh skrip. Anda perlu membuat instance-nya dalam desain Anda, di mana ia dapat mengakses register yang ingin Anda kontrol menggunakan UART.
- Segala sesuatu di atas bagian “– Register yang dapat diakses UART” akan sama untuk setiap modul uart_regs, sedangkan komposisi sinyal port di bawah baris tersebut bergantung pada argumen yang diberikan pada skrip generator.
- Daftar di bawah ini menunjukkan entitas untuk modul uart_regs yang dihasilkan dari perintah generate, misample ditampilkan di bagian gen_uart_regs.py
- Anda tidak perlu menyinkronkan sinyal uart_rx, karena itu ditangani di uart_rx. modul.
- Ketika modul menerima permintaan baca, modul akan menangkap nilai semua sinyal masukan dan keluaran dalam siklus jam saat ini. Snapshot sesaat kemudian dikirim ke host melalui UART.
- Ketika penulisan terjadi, semua register keluaran diperbarui dengan nilai baru dalam siklus jam yang sama. Tidak mungkin mengubah nilai sinyal keluaran satu per satu.
- Namun, skrip uart_regs.py memungkinkan pengguna untuk memperbarui hanya keluaran yang dipilih dengan terlebih dahulu membaca kembali nilai saat ini dari semua register. Ia kemudian menulis kembali semua nilai, termasuk nilai yang diperbarui.
- uart_regs.py
- Yang dihasilkan/uart_regs.py file dihasilkan bersama dengan modul uart_regs VHDL dan berisi informasi register khusus di header file. Dengan skrip ini, Anda dapat membaca atau menulis ke register khusus Anda dengan mudah.
Menu bantuan
- Ketik python uart_regs.py -h untuk mencetak menu bantuan:
Mengatur port UART
- Skrip ini memiliki opsi untuk menyetel port UART menggunakan sakelar -c. Ini berfungsi di Windows dan Linux. Setel ke salah satu port yang tersedia yang tercantum di menu bantuan. Untuk menyetel port default, Anda juga dapat mengedit variabel UART_PORT di skrip uart_regs.py.
Daftar register
- Informasi tentang pemetaan register ditempatkan di header skrip uart_regs.py oleh skrip gen_uart_regs.py. Anda dapat mencantumkan register yang tersedia dengan sakelar -l, seperti yang terlihat di bawah ini. Ini adalah perintah lokal dan tidak akan berinteraksi dengan FPGA target
Menulis ke register
- Anda dapat menulis ke register mode keluar mana pun dengan menggunakan saklar -w. Berikan nama register diikuti dengan “=” dan nilai yang diberikan dalam bentuk biner, heksadesimal, atau desimal, seperti yang ditunjukkan di bawah ini.
- Perhatikan bahwa implementasi VHDL mengharuskan skrip untuk menulis semua register keluaran secara bersamaan. Oleh karena itu, jika Anda tidak menentukan satu set lengkap register keluaran, skrip akan terlebih dahulu melakukan pembacaan dari FPGA target dan kemudian menggunakan nilai tersebut untuk yang hilang. Hasilnya adalah hanya register yang ditentukan yang berubah
- Saat Anda melakukan penulisan, semua register yang ditentukan akan berubah selama siklus jam yang sama, bukan segera setelah diterima melalui UART.
Membaca register
- Gunakan saklar -r untuk membaca semua nilai register, seperti yang ditunjukkan di bawah ini. Nilai yang ditandai dengan warna kuning adalah nilai yang kita ubah pada penulisan sebelumnya, misample
- Setiap pembacaan menunjukkan snapshot instan dari semua register input dan output. Semuanya sampdipimpin selama siklus jam yang sama
Men-debug
Gunakan sakelar -d dengan sakelar lainnya jika Anda perlu men-debug protokol komunikasi. Kemudian, skrip akan mencetak semua byte yang dikirim dan diterima dan tag mereka jika mereka adalah karakter kontrol, seperti yang ditunjukkan di bawah ini.
Menggunakan antarmuka dalam skrip Python lainnya
- Skrip uart_regs.py berisi kelas UartRegs yang dapat Anda gunakan dengan mudah sebagai antarmuka komunikasi dalam skrip Python kustom lainnya. Cukup impor kelasnya, buat objeknya, dan mulai gunakan metodenya, seperti yang ditunjukkan di bawah ini.
- Lihat dokumen dalam kode Python untuk metode dan deskripsi serta tipe nilai kembalian.
instantiation_template.vho
- Templat instantiasi dibuat bersama dengan modul uart_regs untuk kenyamanan Anda. Untuk menghemat waktu coding, Anda dapat menyalin instantiasi modul dan deklarasi sinyal ke dalam desain Anda.
RTL Statis files
- Anda perlu menyertakan yang berikut ini files di proyek VHDL Anda sehingga dikompilasi ke dalam perpustakaan yang sama dengan modul uart_regs:
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- Modul uart_regs_backend mengimplementasikan mesin keadaan terbatas yang memasukkan dan mengeluarkan data register. Ia menggunakan modul uart_rx dan uart_tx untuk menangani komunikasi UART dengan host.
Proyek demo
- Ada tiga proyek demo yang disertakan dalam Zip file. Mereka memungkinkan Anda mengontrol periferal pada papan yang berbeda serta beberapa register internal yang lebih besar.
- Folder demo mencakup uart_regs.vhd dan uart_regs.py yang telah dibuat sebelumnya filedibuat khusus untuk desain tersebut.
Kisi iCEstick
- Folder demo/icecube2_icestick berisi implementasi demo akses register untuk papan FPGA Lattice iCEstick.
- Untuk menjalankan proses implementasi, buka demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file dalam perangkat lunak desain Lattice iCEcube2.
- Setelah memuat proyek di GUI iCEcube2, klik Tools→Run All untuk menghasilkan bitmap pemrograman file.
- Anda dapat menggunakan alat Standalone Lattice Diamond Programmer untuk mengonfigurasi FPGA dengan bitmap yang dihasilkan file. Saat Diamond Programmer terbuka, klik Buka proyek pemrogram yang ada di kotak dialog selamat datang.
- Pilih proyek file ditemukan di Zip: demo/lattice_icestick/diamond_programmer_project.xcf dan klik OK.
- Setelah proyek dimuat, klik tiga titik di File Kolom nama, seperti gambar di atas. Telusuri untuk memilih bitmap file yang Anda hasilkan di iCEcube2
- demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/output/bitmap/top_icestick_bitmap.bin
- Terakhir, dengan papan iCEstick dicolokkan ke port USB di komputer Anda, pilih Desain → Program untuk memprogram flash SPI dan mengkonfigurasi FPGA.
- Anda sekarang dapat melanjutkan membaca dan menulis register dengan menggunakan skrip demo/lattice_icestick/uart_regs.py seperti yang dijelaskan di bagian uart_regs.py.
Xilinx Digilent Arty A7-35T
- Anda dapat menemukan implementasi demo untuk kit evaluasi Artix-7 35T Arty FPGA di folder demo/arty_a7_35.
- Buka Vivado dan arahkan ke hasil ekstrak files menggunakan konsol Tcl yang terdapat di bagian bawah antarmuka GUI. Ketik perintah ini untuk masuk ke folder proyek demo:
- CD /demo/arty_a7_35/proyek_vivado/
- Jalankan skrip Tcl create_vivado_proj.tcl untuk membuat ulang proyek Vivado:
- sumber ./create_vivado_proj.tcl
- Klik Hasilkan Bitstream di sidebar untuk menjalankan semua langkah implementasi dan menghasilkan bitstream pemrograman file.
- Terakhir, klik Open Hardware Manager dan program FPGA melalui GUI.
- Anda sekarang dapat melanjutkan membaca dan menulis register dengan menggunakan skrip demo/arty_a7_35/uart_regs.py seperti yang dijelaskan di bagian uart_regs.py.
Xilinx Digilent Arty S7-50
- Anda dapat menemukan implementasi demo untuk papan pengembangan Arty S7: Spartan-7 FPGA di folder demo/arty_s7_50.
- Buka Vivado dan arahkan ke hasil ekstrak files menggunakan konsol Tcl yang terdapat di bagian bawah antarmuka GUI. Ketik perintah ini untuk masuk ke folder proyek demo:
- CD /demo/arty_s7_50/vivado_proyek/
- Jalankan skrip Tcl create_vivado_proj.tcl untuk membuat ulang proyek Vivado:
- sumber ./create_vivado_proj.tcl
- Klik Hasilkan Bitstream di sidebar untuk menjalankan semua langkah implementasi dan menghasilkan bitstream pemrograman file.
- Terakhir, klik Open Hardware Manager dan program FPGA melalui GUI.
- Anda sekarang dapat melanjutkan membaca dan menulis register dengan menggunakan skrip demo/arty_s7_50/uart_regs.py seperti yang dijelaskan di bagian uart_regs.py.
Pelaksanaan
- Tidak ada persyaratan implementasi khusus.
Batasan
- Tidak ada batasan waktu khusus yang diperlukan untuk desain ini karena antarmuka UART lambat dan diperlakukan sebagai antarmuka asinkron.
- Input uart_rx ke modul uart_regs disinkronkan dalam modul uart_rx. Jadi, tidak perlu disinkronkan di modul tingkat atas.
Masalah yang diketahui
- Anda mungkin perlu mengatur ulang modul sebelum dapat digunakan, tergantung pada apakah arsitektur FPGA Anda mendukung nilai register default.
Info lebih lanjut
- Hak cipta VHDLwhiz.com
Tanya Jawab Umum
T: Apa tujuan dari generator antarmuka pengujian UART?
A: Generator antarmuka pengujian UART memungkinkan pembuatan antarmuka khusus untuk berinteraksi dengan nilai register FPGA menggunakan komunikasi UART.
T: Bagaimana cara menginstal paket Pyserial?
A: Anda dapat menginstal Pyserial melalui Pip menggunakan perintah: pip install pyserial
Dokumen / Sumber Daya
![]() |
Generator Antarmuka Uji UART VHDLwhiz [Bahasa Indonesia:] Panduan Pengguna Generator Antarmuka Uji UART, Generator Antarmuka Uji, Generator Antarmuka, Generator |