آرم VHDLwhiz

ژنراتور رابط آزمایشی VHDLwiz UART

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

اطلاعات محصول

مشخصات:

  • نام محصول: VHDL مولد رابط آزمون UART را ثبت می کند
  • نسخه: 1.0.4
  • تاریخ: 18 اوت 2024
  • نویسنده: جوناس جولیان جنسن
  • محصول URL: لینک محصول
  • ایمیل تماس: jonas@vhdlwhiz.com

توضیحات

این محصول به شما اجازه می دهد تا با استفاده از UART رابط های سفارشی برای خواندن و نوشتن مقادیر ثبات FPGA ایجاد کنید. ماژول VHDL تولید شده و اسکریپت پایتون توانایی تعامل با انواع رجیسترها را در طراحی FPGA شما فراهم می کند.

الزامات

  • مفسر پایتون 3
  • بسته pyserial

پروتکل

این محصول از یک پروتکل قاب بندی داده با چهار کاراکتر کنترلی استفاده می کند:

  • نام: READ_REQ، ارزش: 0x0A - دستور از میزبان به FPGA برای شروع یک توالی نوشتن برای ارسال مجدد همه ثبات ها از طریق UART
  • نام: START_WRITE، ارزش: 0x0B - شروع یک دنباله نوشتن را در هر جهت مشخص می کند
  • نام: END_WRITE، ارزش: 0x0C - پایان یک دنباله نوشتن را در هر جهت مشخص می کند
  • نام: فرار، ارزش: 0x0D - کاراکتر Escape که برای فرار از کلمات کنترلی استفاده می شود

دستورالعمل استفاده از محصول

اجرای اسکریپت ها

برای استفاده از محصول، مطمئن شوید که پایتون 3 و بسته Pyserial را نصب کرده اید. اسکریپت ها را از طریق مفسر پایتون 3 اجرا کنید.

ایجاد رابط های سفارشی

از اسکریپت gen_uart_regs.py برای ایجاد رابط های سفارشی برای خواندن و نوشتن مقادیر ثبات FPGA استفاده کنید. می توانید ترکیب رجیسترهای ورودی و خروجی و انواع را هنگام تولید خروجی مشخص کنید files.

تعامل با رجیسترها

با استفاده از ماژول VHDL و اسکریپت پایتون می توانید از هر تعداد ثبات در طراحی FPGA خود بخوانید یا بنویسید. ثبات های قابل دسترسی می توانند انواعی مانند std_logic، std_logic_vector، signed یا unsigned داشته باشند.

مجوز

  • مجوز MIT الزامات حق چاپ و شرایط استفاده کد منبع را پوشش می دهد. به LICENSE.txt مراجعه کنید file در زیپ file برای جزئیات

تغییرات

  • این تغییرات مربوط به پروژه است files، و این سند بر این اساس به روز می شود
نسخه اظهارات
1.0.0 انتشار اولیه
1.0.1 رفع اشکال مرجع «self» هنگام وارد کردن به عنوان uart_regs.py به عنوان یک ماژول پایتون. نوشتن پرینت ناموفق به استثنا در تغییر کرد

هنگام اجرا به عنوان یک ماژول وارد شده از چاپ روی کنسول خودداری کنید.

1.0.2 رفع خطای Vivado [Synth 8-248] زمانی که هیچ رجیستر حالت خروجی وجود ندارد.
1.0.3 رفع اخطار Vivado Linter: Register توسط driven فعال شده است

تنظیم مجدد همزمان

1.0.4 هنگام دریافت یک کلمه بد شکل با کاراکتر escape به عنوان آخرین بایت، گوشه را برطرف کنید. کلمه بعدی نیز از بین می رود زیرا هنگام بازگشت به IDLE، recv_data_prev_is_escape را پاک نکردیم.

اسکریپت gen_uart_regs.py اکنون فقط نام‌های منحصربه‌فرد را مجاز می‌کند.

توضیحات

  • این سند موارد زیر را شرح می دهد fileاس ها و پوشه ها:
  • gen_uart_regs.py
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • دمو/شبکه_ایستیک/
  • دمو/xilinx_arty_a7_35/
  • دمو/xilinx_arty_s7_50/
  • اسکریپت gen_uart_regs.py و پشتیبانی از VHDL files در این پروژه به شما این امکان را می دهد که با استفاده از UART رابط های سفارشی برای خواندن و نوشتن مقادیر ثبت FPGA با انواع و عرض های مختلف ایجاد کنید.
  • شما می توانید از ماژول VHDL تولید شده و اسکریپت پایتون برای خواندن یا نوشتن روی هر تعداد ثبات در طراحی خود استفاده کنید. رجیسترهای قابل دسترسی UART می توانند دارای انواع std_logic، std_logic_vector، signed یا unsigned باشند.
  • هنگام تولید خروجی می توانید درباره ترکیب دقیق رجیسترهای ورودی و خروجی و انواع آن تصمیم بگیرید fileبا استفاده از اسکریپت gen_uart_regs.py.
  • اسکریپت های پایتون تا حدی با کمک ابزار هوش مصنوعی ChatGPT ایجاد شدند، در حالی که کد VHDL دست ساز است.

الزامات

  • اسکریپت های این پروژه باید از طریق مفسر پایتون 3 اجرا شوند و بسته Pyserial نیز نصب شود.
  • می توانید pyserial را از طریق Pip با استفاده از این دستور نصب کنید: pip install pyserial

پروتکل

  • VHDL files و اسکریپت پایتون از یک پروتکل قاب بندی داده با چهار کنترل استفاده می کنند
نام ارزش نظر دهید
READ_REQ 0x0A دستور از میزبان به FPGA برای شروع نوشتن

دنباله ای برای ارسال مجدد همه رجیسترها از طریق UART

START_WRITE 0x0B شروع یک دنباله نوشتن را در هر دو مشخص می کند

جهت

END_WRITE 0x0C پایان یک دنباله نوشتن را در هر جهت مشخص می کند
فرار 0x0D نویسه Escape برای فرار از هر یک از کلمات کنترلی، از جمله خود نویسه ESCAPE، زمانی که آنها به عنوان داده بین نشانگرهای START_WRITE و END_WRITE ظاهر می شوند، استفاده می شود.

هر بایت READ_REQ غیرقابل فراری که به FPGA ارسال می‌شود، دستورالعملی برای ارسال همه رجیسترهای قابل دسترسی UART (ورودی‌ها و خروجی‌های) آن به میزبان از طریق UART است. این دستور معمولا فقط توسط اسکریپت uart_regs.py صادر می شود.
پس از دریافت این دستور، FPGA با ارسال محتوای تمام ثبات ها به هاست پاسخ می دهد. ابتدا سیگنال های ورودی و سپس سیگنال های خروجی. اگر طول آنها به مضرب 8 بیت نباشد، بیت های پایینی آخرین بایت به صورت صفر قرار می گیرند.
یک دنباله نوشتن همیشه با بایت START_WRITE شروع می شود و با بایت END_WRITE پایان می یابد. هر بایت بین آنها به عنوان بایت داده در نظر گرفته می شود. اگر هر یک از بایت های داده دارای مقدار یکسانی با یک کاراکتر کنترل باشد، بایت داده باید خارج شود. این به معنای ارسال یک کاراکتر ESCAPE اضافی قبل از بایت داده است تا نشان دهد که در واقع داده است.
اگر یک START_WRITE بدون فرار به هر جایی از جریان بایت ها برسد، شروع یک دنباله نوشتن در نظر گرفته می شود. ماژول uart_regs_backend از این اطلاعات برای همگام سازی مجدد در صورت عدم هماهنگی ارتباط استفاده می کند.

gen_uart_regs.py

  • این همان اسکریپتی است که برای تولید رابط باید با آن شروع کنید. در زیر یک اسکرین شات از منوی راهنما است که می توانید با اجرای آن دریافت کنید: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-Fig-1
  • برای ایجاد یک رابط سفارشی، باید اسکریپت را با هر یک از رجیسترهای قابل کنترل UART مورد نظر خود که به عنوان آرگومان فهرست شده اند اجرا کنید. انواع موجود std_logic، std_logic_vector، unsigned و signed هستند.
  • حالت پیش‌فرض (جهت) در حالت پیش‌فرض است و نوع پیش‌فرض std_logic_vector است، مگر اینکه ثبات طولی داشته باشد: 1. سپس، به طور پیش‌فرض روی std_logic خواهد بود.
  • بنابراین، اگر می خواهید یک سیگنال ورودی std_logic ایجاد کنید، می توانید از هر یک از این آرگومان ها استفاده کنید:
  • my_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • همه انواع بالا منجر به تولید این سیگنال قابل دسترسی UART توسط اسکریپت می شود:VHDLwhiz-UART-Test-Interface-Generator-Fig-2
  • بیایید اسکریپت را با آرگومان ها اجرا کنیم تا یک رابط با چندین ثبات در جهت ها، طول ها و انواع مختلف ایجاد کنیم.VHDLwhiz-UART-Test-Interface-Generator-Fig-3

تولید شده است files

  • اجرای موفقیت آمیز اسکریپت gen_uart_regs.py یک پوشه خروجی به نام تولید شده با سه مورد تولید می کند. fileدر زیر ذکر شده است. اگر از قبل وجود داشته باشند، بازنویسی خواهند شد.
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • uart_regs.vhd
  • این ماژول رابط سفارشی تولید شده توسط اسکریپت است. شما باید آن را در طراحی خود نمونه سازی کنید، جایی که می تواند به رجیسترهایی که می خواهید با استفاده از UART کنترل کنید دسترسی پیدا کند.
  • همه چیز بالای بخش "- UART accessible registers" برای هر ماژول uart_regs یکسان خواهد بود، در حالی که ترکیب سیگنال های پورت در زیر آن خط به آرگومان های داده شده به اسکریپت مولد بستگی دارد.
  • لیست زیر موجودیت ماژول uart_regs را نشان می دهد که از دستور generate ex به دست می آیدampدر بخش gen_uart_regs.py نشان داده شده استVHDLwhiz-UART-Test-Interface-Generator-Fig-4
  • شما نیازی به همگام سازی سیگنال uart_rx ندارید، زیرا این سیگنال در uart_rx مدیریت می شود. مدول.
  • هنگامی که ماژول یک درخواست خواندن دریافت می کند، مقادیر تمام سیگنال های ورودی و خروجی را در چرخه ساعت جاری دریافت می کند. سپس عکس فوری از طریق UART برای میزبان ارسال می شود.
  • هنگامی که یک نوشتن اتفاق می افتد، تمام ثبات های خروجی با مقادیر جدید در یک چرخه ساعت به روز می شوند. تغییر مقادیر سیگنال خروجی به صورت جداگانه امکان پذیر نیست.
  • با این حال، اسکریپت uart_regs.py به کاربر این امکان را می‌دهد که تنها خروجی‌های انتخاب شده را با بازخوانی مقادیر فعلی همه ثبات‌ها، به‌روزرسانی کند. سپس تمام مقادیر، از جمله مقادیر به روز شده را باز می نویسد.
  • uart_regs.py
  • ایجاد شده/uart_regs.py file همراه با ماژول uart_regs VHDL تولید می شود و حاوی اطلاعات ثبت سفارشی در سربرگ file. با استفاده از این اسکریپت، می توانید به راحتی از رجیسترهای سفارشی خود بخوانید یا بنویسید.

منوی راهنما

  • برای چاپ منوی راهنما python uart_regs.py -h را تایپ کنید:VHDLwhiz-UART-Test-Interface-Generator-Fig-5

تنظیم پورت UART

  • این اسکریپت دارای گزینه هایی برای تنظیم پورت UART با استفاده از سوئیچ -c است. این در ویندوز و لینوکس کار می کند. آن را روی یکی از پورت های موجود در فهرست راهنما تنظیم کنید. برای تنظیم یک پورت پیش‌فرض، می‌توانید متغیر UART_PORT را در اسکریپت uart_regs.py نیز ویرایش کنید.

ثبت فهرست

  • اطلاعات مربوط به نگاشت ثبت در هدر اسکریپت uart_regs.py توسط اسکریپت gen_uart_regs.py قرار می گیرد. همانطور که در زیر مشاهده می کنید، می توانید با سوئیچ -l رجیسترهای موجود را فهرست کنید. این یک دستور محلی است و با FPGA هدف تعامل نخواهد داشتVHDLwhiz-UART-Test-Interface-Generator-Fig-6

نوشتن برای ثبت نام

  • با استفاده از سوئیچ -w می توانید به هر یک از رجیسترهای حالت خروجی بنویسید. همانطور که در زیر نشان داده شده است، نام رجیستر را به دنبال "=" و مقدار را به صورت یک مقدار باینری، هگزادسیمال یا اعشاری ارائه کنید.VHDLwhiz-UART-Test-Interface-Generator-Fig-7
  • توجه داشته باشید که پیاده سازی VHDL به اسکریپت نیاز دارد تا همه ثبات های خروجی را به طور همزمان بنویسد. بنابراین، اگر مجموعه کاملی از رجیسترهای خروجی را مشخص نکنید، اسکریپت ابتدا یک خواندن از FPGA هدف انجام می‌دهد و سپس از آن مقادیر برای مقادیر گمشده استفاده می‌کند. نتیجه این خواهد بود که فقط رجیسترهای مشخص شده تغییر می کنند
  • وقتی نوشتن را انجام می‌دهید، تمام ثبات‌های مشخص‌شده در طول یک چرخه ساعت تغییر می‌کنند، نه به محض دریافت از طریق UART.

خواندن رجیسترها

  • همانطور که در زیر نشان داده شده است از سوئیچ -r برای خواندن تمام مقادیر ثبات استفاده کنید. مقادیری که با رنگ زرد مشخص شده اند، مقادیری هستند که در نوشتن قبلی قبلی تغییر دادیمampleVHDLwhiz-UART-Test-Interface-Generator-Fig-8
  • هر خواندن یک عکس فوری از تمام ثبات های ورودی و خروجی را نشان می دهد. همه آنها s هستندampدر همان چرخه ساعت هدایت می شود

اشکال زدایی

اگر نیاز به اشکال زدایی پروتکل ارتباطی دارید، از سوئیچ -d با هر یک از سوئیچ های دیگر استفاده کنید. سپس، اسکریپت تمام بایت های ارسالی و دریافتی را چاپ می کند tag اگر آنها کاراکترهای کنترلی باشند، همانطور که در زیر نشان داده شده است.VHDLwhiz-UART-Test-Interface-Generator-Fig-9

استفاده از رابط در سایر اسکریپت های پایتون

  • اسکریپت uart_regs.py شامل یک کلاس UartRegs است که می توانید به راحتی از آن به عنوان رابط ارتباطی در سایر اسکریپت های سفارشی پایتون استفاده کنید. به سادگی کلاس را وارد کنید، یک شی از آن ایجاد کنید و شروع به استفاده از متدها کنید، همانطور که در زیر نشان داده شده است.VHDLwhiz-UART-Test-Interface-Generator-Fig-10
  • برای روش ها و توضیحات و انواع مقادیر بازگشتی به رشته های اسناد در کد پایتون مراجعه کنید.

instantiation_template.vho

  • الگوی نمونه سازی همراه با ماژول uart_regs برای راحتی شما ایجاد می شود. برای صرفه جویی در زمان کدنویسی، می توانید نمونه سازی ماژول و اعلامیه های سیگنال را در طرح خود کپی کنید.VHDLwhiz-UART-Test-Interface-Generator-Fig-11VHDLwhiz-UART-Test-Interface-Generator-Fig-12

استاتیک RTL files

  • شما باید موارد زیر را لحاظ کنید files در پروژه VHDL شما به طوری که آنها در همان کتابخانه ماژول uart_regs کامپایل شوند:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • ماژول uart_regs_backend ماشین‌های حالت محدود را پیاده‌سازی می‌کند که داده‌های رجیستر را داخل و خارج می‌کنند. از ماژول‌های uart_rx و uart_tx برای مدیریت ارتباط UART با میزبان استفاده می‌کند.

پروژه های نمایشی

  • سه پروژه نمایشی در Zip وجود دارد file. آنها به شما این امکان را می دهند که تجهیزات جانبی را روی بردهای مختلف و همچنین چند رجیستر داخلی بزرگتر کنترل کنید.
  • پوشه های نمایشی شامل uart_regs.vhd و uart_regs.py از پیش تولید شده هستند. fileبه طور خاص برای آن طرح ها ساخته شده است.

شبکه iCEstick

  • پوشه demo/icecube2_icestick شامل یک اجرای نمایشی دسترسی ثبت برای برد FPGA Lattice iCEstick است.
  • برای اجرای فرآیند پیاده سازی، دمو/lattice_icestick/icecube2_proj/uart_regs_sbt.project را باز کنید file در نرم افزار طراحی Lattice iCEcube2.
  • پس از بارگذاری پروژه در رابط کاربری گرافیکی iCEcube2، روی Tools→Run All کلیک کنید تا بیت مپ برنامه نویسی ایجاد شود. file.
  • می توانید از ابزار Lattice Diamond Programmer Standalone برای پیکربندی FPGA با بیت مپ تولید شده استفاده کنید. file. وقتی Diamond Programmer باز شد، روی Open an موجود برنامه نویس پروژه در کادر گفتگوی خوش آمد کلیک کنید.
  • پروژه را انتخاب کنید file در Zip یافت می شود: demo/lattice_icestick/diamond_programmer_project.xcf و روی OK کلیک کنید.VHDLwhiz-UART-Test-Interface-Generator-Fig-13
  • پس از بارگیری پروژه، روی سه نقطه در قسمت کلیک کنید File ستون نام، همانطور که در بالا نشان داده شده است. برای انتخاب بیت مپ، مرور کنید file که در iCEcube2 ایجاد کردید
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • در نهایت، در حالی که برد iCEstick به پورت USB رایانه شما وصل شده است، برای برنامه ریزی فلش SPI و پیکربندی FPGA، Design→ Program را انتخاب کنید.
  • اکنون می توانید با استفاده از اسکریپت demo/lattice_icestick/uart_regs.py همانطور که در بخش uart_regs.py توضیح داده شده است، به خواندن و نوشتن ثبات ها ادامه دهید.

Xilinx Digilent Arty A7-35T

  • می‌توانید اجرای آزمایشی برای کیت ارزیابی Artix-7 35T Arty FPGA را در پوشه demo/arty_a7_35 بیابید.
  • Vivado را باز کنید و به قسمت استخراج شده بروید fileبا استفاده از کنسول Tcl موجود در پایین رابط کاربری گرافیکی. برای ورود به پوشه پروژه دمو این دستور را تایپ کنید:
  • سی دی /demo/arty_a7_35/vivado_proj/
  • اسکریپت create_vivado_proj.tcl Tcl را برای بازسازی پروژه Vivado اجرا کنید:
  • منبع ./create_vivado_proj.tcl
  • روی Generate Bitstream در نوار کناری کلیک کنید تا تمام مراحل پیاده سازی را طی کنید و بیت استریم برنامه نویسی را تولید کنید file.
  • در نهایت روی Open Hardware Manager کلیک کنید و FPGA را از طریق رابط کاربری گرافیکی برنامه ریزی کنید.
  • اکنون می توانید با استفاده از اسکریپت demo/arty_a7_35/uart_regs.py همانطور که در بخش uart_regs.py توضیح داده شده است، به خواندن و نوشتن رجیسترها ادامه دهید.

Xilinx Digilent Arty S7-50

  • می‌توانید اجرای نمایشی برای برد توسعه Arty S7: Spartan-7 FPGA را در پوشه demo/arty_s7_50 بیابید.
  • Vivado را باز کنید و به قسمت استخراج شده بروید fileبا استفاده از کنسول Tcl موجود در پایین رابط کاربری گرافیکی. برای ورود به پوشه پروژه دمو این دستور را تایپ کنید:
  • سی دی /demo/arty_s7_50/vivado_proj/
  • اسکریپت create_vivado_proj.tcl Tcl را برای بازسازی پروژه Vivado اجرا کنید:
  • منبع ./create_vivado_proj.tcl
  • روی Generate Bitstream در نوار کناری کلیک کنید تا تمام مراحل پیاده سازی را طی کنید و بیت استریم برنامه نویسی را تولید کنید file.
  • در نهایت روی Open Hardware Manager کلیک کنید و FPGA را از طریق رابط کاربری گرافیکی برنامه ریزی کنید.
  • اکنون می توانید با استفاده از اسکریپت demo/arty_s7_50/uart_regs.py همانطور که در بخش uart_regs.py توضیح داده شده است، به خواندن و نوشتن رجیسترها ادامه دهید.

پیاده سازی

  • هیچ الزامات اجرایی خاصی وجود ندارد.

محدودیت ها

  • هیچ محدودیت زمانی خاصی برای این طراحی لازم نیست زیرا رابط UART کند است و به عنوان یک رابط ناهمزمان در نظر گرفته می شود.
  • ورودی uart_rx به ماژول uart_regs در ماژول uart_rx همگام شده است. بنابراین، نیازی به همگام سازی در ماژول سطح بالا نیست.

مسائل شناخته شده

  • بسته به اینکه آیا معماری FPGA شما از مقادیر ثبت پیش فرض پشتیبانی می کند، ممکن است نیاز به تنظیم مجدد ماژول قبل از استفاده داشته باشید.

اطلاعات بیشتر

سوالات متداول

س: هدف از مولد رابط آزمایشی UART چیست؟

A: مولد رابط آزمایشی UART امکان ایجاد رابط های سفارشی را برای تعامل با مقادیر ثبت FPGA با استفاده از ارتباط UART می دهد.

س: چگونه بسته Pyserial را نصب کنم؟

پاسخ: می توانید Pyserial را از طریق Pip با استفاده از دستور pip install pyserial نصب کنید

اسناد / منابع

ژنراتور رابط آزمایشی VHDLwiz UART [pdf] دفترچه راهنمای کاربر
ژنراتور رابط آزمایشی UART، ژنراتور رابط آزمایشی، ژنراتور رابط، ژنراتور

مراجع

نظر بدهید

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی مشخص شده اند *