VHDLwhiz-лого

VHDLwhiz UART туршилтын интерфейс үүсгэгч

VHDLwhiz-UART-тест-интерфэйс-генератор-БҮТЭЭГДЭХҮҮН

Бүтээгдэхүүний мэдээлэл

Үзүүлэлтүүд:

  • Бүтээгдэхүүний нэр: VHDL UART туршилтын интерфейс үүсгэгчийг бүртгэдэг
  • Хувилбар: 1.0.4
  • Огноо: 18 оны 2024-р сарын XNUMX
  • Зохиогч: Йонас Жулиан Женсен
  • Бүтээгдэхүүн URL: Бүтээгдэхүүний холбоос
  • Холбоо барих имэйл: jonas@vhdlwhiz.com

Тодорхойлолт

Энэхүү бүтээгдэхүүн нь UART ашиглан FPGA бүртгэлийн утгыг унших, бичих тусгай интерфейс үүсгэх боломжийг танд олгоно. Үүсгэсэн VHDL модуль болон Python скрипт нь таны FPGA дизайн дахь янз бүрийн төрлийн регистрүүдтэй харилцах боломжийг олгодог.

Шаардлага

  • Python 3 орчуулагч
  • pyserial багц

Протокол

Бүтээгдэхүүн нь дөрвөн хяналтын тэмдэгт бүхий өгөгдлийн хүрээний протоколыг ашигладаг:

  • Нэр: READ_REQ, Утга: 0x0A – Бүх регистрүүдийг UART-аар буцааж илгээхийн тулд бичих дарааллыг эхлүүлэхийн тулд хостоос FPGA руу тушаал өгнө.
  • Нэр: START_WRITE, Утга: 0x0B – Аль ч чиглэлд бичих дарааллын эхлэлийг тэмдэглэнэ
  • Нэр: END_WRITE, Утга: 0x0C – Аль ч чиглэлд бичих дарааллын төгсгөлийг тэмдэглэнэ
  • Нэр: ЗУГТАХ, Утга: 0x0D – Хяналтын үгнээс зугтахад ашигладаг Escape тэмдэгт

Бүтээгдэхүүнийг ашиглах заавар

Скриптүүдийг ажиллуулж байна

Бүтээгдэхүүнийг ашиглахын тулд Python 3 болон Pyserial багц суулгасан эсэхээ шалгаарай. Скриптүүдийг Python 3 орчуулагчаар ажиллуулна уу.

Тусгай интерфэйс үүсгэх

Gen_uart_regs.py скриптийг ашиглан FPGA регистрийн утгыг унших, бичих тусгай интерфейс үүсгэнэ үү. Гаралтыг үүсгэхдээ оролт, гаралтын регистр, төрлүүдийн бүрэлдэхүүнийг зааж өгч болно files.

Бүртгэлтэй харилцах

Та үүсгэсэн VHDL модуль болон Python скриптийг ашиглан өөрийн FPGA загварт дурын тооны регистрээс уншиж, бичиж болно. Хүртээмжтэй регистрүүд нь std_logic, std_logic_vector, signed, unsigned зэрэг төрлүүдтэй байж болно.

Лиценз

  • MIT лиценз нь эх кодын зохиогчийн эрхийн шаардлага, ашиглалтын нөхцлийг хамардаг. LICENSE.txt-г үзнэ үү file Zip дотор file дэлгэрэнгүй мэдээллийг авна уу.

Өөрчлөлтийн бүртгэл

  • Эдгээр өөрчлөлтүүд нь төсөлд хамаарна files, мөн энэ баримт бичиг зохих ёсоор шинэчлэгдсэн
Хувилбар Тайлбар
1.0.0 Анхны хувилбар
1.0.1 Python модулийг uart_regs.py болгон импортлоход байхгүй "өөрийгөө" лавлах алдааг зассан. Бичих амжилтгүй хэвлэлтийг үл хамаарах зүйл болгон өөрчилсөн

Импортын модуль болгон ажиллуулахдаа консол руу хэвлэхээс зайлсхий.

1.0.2 Гарах горимын бүртгэл байхгүй үед Vivado [Synth 8-248] алдааг засна.
1.0.3 Vivado Linter-ийн анхааруулгыг засах: Бүртгэлийг идэвхжүүлсэн

синхрон дахин тохируулах

1.0.4 Сүүлчийн байт болох escape тэмдэгт бүхий алдаатай үгийг хүлээн авах үед булангийн томыг засна уу. Бид IDLE руу буцахдаа recv_data_prev_is_escape-г арилгаагүй тул дараагийн үг мөн алга болно.

gen_uart_regs.py скрипт нь одоо зөвхөн өвөрмөц регистрийн нэрийг зөвшөөрдөг.

Тодорхойлолт

  • Энэхүү баримт бичигт дараахь зүйлийг тодорхойлсон болно files болон хавтаснууд:
  • gen_uart_regs.py
  • үүсгэсэн/uart_regs.vhd
  • үүсгэсэн/uart_regs.py
  • үүсгэсэн/instantiation_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/
  • gen_uart_regs.py скрипт ба VHDL-г дэмждэг fileЭнэ төслийн s нь UART ашиглан янз бүрийн төрөл, өргөнтэй FPGA бүртгэлийн утгыг унших, бичих тусгай интерфейс үүсгэх боломжийг танд олгоно.
  • Та үүсгэсэн VHDL модуль болон Python скриптийг ашиглан загвартаа дурын тооны регистрээс уншиж, бичих боломжтой. UART хандалтын бүртгэлүүд нь std_logic, std_logic_vector, signed, unsigned гэсэн төрлүүдтэй байж болно.
  • Та гаралтыг үүсгэхдээ оролт, гаралтын регистр, төрлүүдийн нарийн бүрэлдэхүүнийг шийдэж болно filegen_uart_regs.py скриптийг ашиглаж байна.
  • Python скриптүүд нь ChatGPT хиймэл оюун ухааны хэрэгслийн тусламжтайгаар хэсэгчлэн бүтээгдсэн бол VHDL код нь гараар бүтээгдсэн.

Шаардлага

  • Энэ төслийн скриптүүдийг Python 3 орчуулагчаар ажиллуулж, Pyserial багцыг суулгасан байх ёстой.
  • Та энэ командыг ашиглан Pip-ээр дамжуулан pyserial суулгаж болно: pip install pyserial

Протокол

  • VHDL files болон Python скрипт нь дөрвөн удирдлагатай өгөгдлийн хүрээний протоколыг ашигладаг
Нэр Үнэ цэнэ Сэтгэгдэл
READ_REQ 0х0А Бичлэг эхлүүлэхийн тулд хостоос FPGA руу тушаал өгнө

бүх бүртгэлийг UART-аар буцааж илгээх дараалал

START_БИЧИХ 0x0B хувилбар Аль алинд нь бичих дарааллын эхлэлийг тэмдэглэнэ

чиглэл

END_WRITE 0х0С Аль ч чиглэлд бичих дарааллын төгсгөлийг тэмдэглэнэ
ЗУГТАХ 0x0D Escape тэмдэгт нь START_WRITE болон END_WRITE тэмдэглэгээний хооронд өгөгдөл болон гарч ирэх үед ESCAPE тэмдэгтийг оруулан аливаа хяналтын үгнээс зугтахад ашигладаг.

FPGA-д илгээгдсэн ямар ч гарцгүй READ_REQ байт нь 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-Тест-интерфэйс-генератор-ЗУРАГ-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-Тест-интерфэйс-генератор-ЗУРАГ-2
  • Янз бүрийн чиглэл, урт, төрлийн хэд хэдэн регистр бүхий интерфейс үүсгэхийн тулд скриптийг аргументтай ажиллуулцгаая.VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-3

Үүсгэсэн files

  • gen_uart_regs.py скриптийг амжилттай ажиллуулснаар гурваар үүсгэгдсэн гаралтын хавтас гарч ирнэ fileдоор жагсаасан байна. Хэрэв тэд аль хэдийн байгаа бол тэдгээрийг дарж бичих болно.
  • үүсгэсэн/uart_regs.vhd
  • үүсгэсэн/uart_regs.py
  • үүсгэсэн/instantiation_template.vho
  • uart_regs.vhd
  • Энэ бол скриптээр үүсгэгдсэн хэрэглэгчийн интерфэйсийн модуль юм. Та үүнийг UART ашиглан удирдахыг хүссэн регистрүүддээ хандах боломжтой загвартаа оруулах хэрэгтэй.
  • “– UART хүртээмжтэй бүртгэлүүд” хэсгийн дээрх бүх зүйл uart_regs модуль бүрт ижил байх ба энэ мөрний доорх портын дохионы найрлага нь генераторын скриптэд өгөгдсөн аргументуудаас хамаарна.
  • Доорх жагсаалт нь үүсгэх командын үр дүнд бий болсон uart_regs модулийн аж ахуйн нэгжийг харуулж байнаample-г gen_uart_regs.py хэсэгт харуулавVHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-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-Тест-интерфэйс-генератор-ЗУРАГ-5

UART портыг тохируулж байна

  • Скрипт нь -c шилжүүлэгчийг ашиглан UART портыг тохируулах сонголтуудтай. Энэ нь Windows болон Linux дээр ажилладаг. Үүнийг тусламжийн цэсэнд жагсаасан боломжтой портуудын аль нэгэнд тохируулна уу. Өгөгдмөл портыг тохируулахын тулд uart_regs.py скрипт дэх UART_PORT хувьсагчийг мөн засварлаж болно.

Бүртгэлийн бүртгэл

  • Бүртгэлийн зураглалын талаарх мэдээллийг gen_uart_regs.py скриптээр uart_regs.py скриптийн толгой хэсэгт байрлуулна. Та боломжтой регистрүүдийг доороос харсны дагуу -l шилжүүлэгчээр жагсааж болно. Энэ нь орон нутгийн тушаал бөгөөд зорилтот FPGA-тай харьцахгүйVHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-6

Бүртгэлд бичиж байна

  • Та -w шилжүүлэгчийг ашиглан ямар ч гаралтын горимын бүртгэл рүү бичиж болно. Доор үзүүлсэн шиг регистрийн нэрийн дараа “=” болон хоёртын, арван арвантын тоо, аравтын тоогоор өгөгдсөн утгыг оруулна уу.VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-7
  • VHDL хэрэгжилт нь скриптээс бүх гаралтын бүртгэлийг нэгэн зэрэг бичихийг шаарддаг гэдгийг анхаарна уу. Тиймээс, хэрэв та гаралтын регистрүүдийн бүрэн багцыг заагаагүй бол скрипт нь эхлээд зорилтот FPGA-аас уншиж, дараа нь алга болсон утгуудад эдгээр утгыг ашиглана. Үр дүн нь зөвхөн заасан бүртгэлүүд өөрчлөгдөх болно
  • Таныг бичих үед бүх заасан регистрүүд UART-ээр хүлээн авмагц биш нэг цагийн мөчлөгийн хугацаанд өөрчлөгдөнө.

Унших бүртгэл

  • Доор үзүүлсэн шиг бүх бүртгэлийн утгыг уншихын тулд -r шилжүүлэгчийг ашиглана уу. Шараар тэмдэглэгдсэн утгууд нь өмнөх бичихдээ бидний өөрчилсөн утгууд юмampleVHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-8
  • Унших бүр нь бүх оролт, гаралтын регистрүүдийн агшин зуурын агшин зуурын агшин зуурын зургийг харуулдаг. Тэд бүгд сampижил цагийн мөчлөгийн үед удирддаг

Дибаг хийх

Харилцаа холбооны протоколыг дибаг хийх шаардлагатай бол -d шилжүүлэгчийг бусад унтраалгатай хамт ашиглаарай. Дараа нь скрипт нь илгээсэн болон хүлээн авсан бүх байтуудыг хэвлэх болно tag хэрэв тэдгээр нь хяналтын тэмдэгт бол доор үзүүлсэн шиг.VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-9

Интерфэйсийг бусад Python скриптүүдэд ашиглах

  • Uart_regs.py скрипт нь UartRegs классыг агуулж байгаа бөгөөд үүнийг та бусад тусгай Python скриптүүдэд харилцааны интерфейс болгон хялбархан ашиглаж болно. Доор үзүүлсэн шиг ангийг импортлож, объект үүсгээд, аргуудыг ашиглаж эхэлнэ үү.VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-10
  • Арга, тайлбар, буцаах утгын төрлийг Python кодын баримт бичгийн мөрүүдээс харна уу.

instantiation_template.vho

  • Үүсгэх загварыг танд тав тухтай байлгах үүднээс uart_regs модулийн хамт үүсгэсэн. Кодлох цагийг хэмнэхийн тулд та модулийн загвар болон дохионы мэдэгдлийг загвартаа хуулж болно.VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-11VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-12

Статик RTL files

  • Та дараахь зүйлийг оруулах хэрэгтэй files-ийг таны VHDL төсөлд суулгаснаар uart_regs модультай ижил номын санд хөрвүүлэгдэх болно:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Uart_regs_backend модуль нь регистрийн өгөгдлүүдийг оруулж, гаргадаг хязгаарлагдмал төлөвт машинуудыг хэрэгжүүлдэг. Энэ нь хосттой UART холболтыг зохицуулахын тулд uart_rx болон uart_tx модулиудыг ашигладаг.

Демо төслүүд

  • Zip-д гурван демо төсөл багтсан болно file. Тэд танд өөр өөр самбар дээрх нэмэлт төхөөрөмжүүд болон хэд хэдэн том, дотоод бүртгэлийг удирдах боломжийг олгодог.
  • Демо фолдеруудад урьдчилан үүсгэсэн uart_regs.vhd болон uart_regs.py багтана fileЭдгээр загварт зориулж тусгайлан хийсэн.

Торны iCEstick

  • Демо/icecube2_icestick хавтас нь Lattice iCEstick FPGA самбарт зориулсан бүртгэлийн хандалтын демо хэрэгжилтийг агуулдаг.
  • Хэрэгжүүлэх процессыг ажиллуулахын тулд demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project-г нээнэ үү. file Lattice iCEcube2 дизайны програм хангамжид.
  • Төслийг iCEcube2 GUI-д ачаалсны дараа Tools→Run All товчийг дарж програмчлалын битмапийг үүсгэнэ. file.
  • Та үүсгэсэн битмап бүхий FPGA-г тохируулахын тулд Lattice Diamond Programmer Standalone хэрэгслийг ашиглаж болно. file. Diamond программист нээгдэх үед тавтай морилно уу харилцах цонхонд байгаа программистын төслийг нээх дээр дарна уу.
  • Төсөл сонгох file Zip дотроос олдсон: demo/lattice_icestick/diamond_programmer_project.xcf ба OK дарна уу.VHDLwhiz-UART-Тест-интерфэйс-генератор-ЗУРАГ-13
  • Төсөл ачаалсны дараа дээрх гурван цэг дээр дарна уу File Дээр үзүүлсэн шиг нэр багана. Bitmap-г сонгохын тулд гүйлгэ file Таны iCEcube2 дээр үүсгэсэн
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Эцэст нь iCEstick самбарыг компьютерийнхээ USB портод залгаад Design→Program-г сонгоод SPI флэшийг програмчилж, FPGA-г тохируулна уу.
  • Та одоо uart_regs.py хэсэгт тайлбарласны дагуу demo/lattice_icestick/uart_regs.py скриптийг ашиглан бүртгэлийг уншиж, бичиж болно.

Xilinx Digilent Arty A7-35T

  • Та Artix-7 35T Arty FPGA үнэлгээний иж бүрдлийг demo/arty_a7_35 хавтсаас олох боломжтой.
  • Vivado-г нээж, олборлосон зүйл рүү очно уу fileGUI интерфейсийн доод хэсэгт байрлах Tcl консолыг ашиглана. Демо төслийн хавтсанд орохын тулд энэ тушаалыг бичнэ үү:
  • cd /demo/arty_a7_35/vivado_proj/
  • Vivado төслийг сэргээхийн тулд create_vivado_proj.tcl Tcl скриптийг ажиллуулна уу:
  • эх сурвалж ./create_vivado_proj.tcl
  • Хэрэгжүүлэх бүх алхмуудыг гүйлгэж, програмчлалын бит урсгалыг үүсгэхийн тулд хажуугийн самбар дээрх Bitstream үүсгэх дээр дарна уу file.
  • Эцэст нь Open Hardware Manager дээр дарж, GUI-ээр дамжуулан FPGA программчлана.
  • Та одоо uart_regs.py хэсэгт тайлбарласны дагуу demo/arty_a7_35/uart_regs.py скриптийг ашиглан бүртгэлийг уншиж, бичиж болно.

Xilinx Digilent Arty S7-50

  • Та Arty S7: Spartan-7 FPGA хөгжүүлэлтийн самбарын демо хэрэгжилтийг demo/arty_s7_50 хавтсаас олж болно.
  • Vivado-г нээж, олборлосон зүйл рүү очно уу fileGUI интерфейсийн доод хэсэгт байрлах Tcl консолыг ашиглана. Демо төслийн хавтсанд орохын тулд энэ тушаалыг бичнэ үү:
  • cd /demo/arty_s7_50/vivado_proj/
  • Vivado төслийг сэргээхийн тулд create_vivado_proj.tcl Tcl скриптийг ажиллуулна уу:
  • эх сурвалж ./create_vivado_proj.tcl
  • Хэрэгжүүлэх бүх алхмуудыг гүйлгэж, програмчлалын бит урсгалыг үүсгэхийн тулд хажуугийн самбар дээрх Bitstream үүсгэх дээр дарна уу file.
  • Эцэст нь Open Hardware Manager дээр дарж, GUI-ээр дамжуулан FPGA программчлана.
  • Та одоо uart_regs.py хэсэгт тайлбарласны дагуу demo/arty_s7_50/uart_regs.py скриптийг ашиглан бүртгэлийг уншиж, бичиж болно.

Хэрэгжилт

  • Хэрэгжүүлэх тодорхой шаардлага байхгүй.

Хязгаарлалт

  • UART интерфэйс нь удаан бөгөөд асинхрон интерфэйс гэж үздэг тул энэ загварт тодорхой цаг хугацааны хязгаарлалт шаардлагагүй.
  • Uart_regs модулийн uart_rx оролт нь uart_rx модулийн дотор синхрончлогдсон. Тиймээс үүнийг дээд түвшний модульд синхрончлох шаардлагагүй.

Мэдэгдэж буй асуудлууд

  • Таны FPGA архитектур өгөгдмөл бүртгэлийн утгыг дэмжиж байгаа эсэхээс хамааран модулийг ашиглахаас өмнө дахин тохируулах шаардлагатай байж магадгүй.

Дэлгэрэнгүй мэдээлэл

Түгээмэл асуултууд

А: UART туршилтын интерфейс үүсгэгчийн зорилго юу вэ?

Х: UART тестийн интерфэйс үүсгэгч нь UART холболтыг ашиглан FPGA бүртгэлийн утгуудтай харьцах тусгай интерфэйсүүдийг үүсгэх боломжийг олгодог.

Асуулт: Би Pserial багцыг хэрхэн суулгах вэ?

Х: Pip install pyserial командыг ашиглан та Pyserial-ийг Pip-ээр суулгаж болно

Баримт бичиг / нөөц

VHDLwhiz UART туршилтын интерфейс үүсгэгч [pdf] Хэрэглэгчийн гарын авлага
UART туршилтын интерфейс үүсгэгч, туршилтын интерфейс үүсгэгч, интерфейс үүсгэгч, генератор

Лавлагаа

Сэтгэгдэл үлдээгээрэй

Таны имэйл хаягийг нийтлэхгүй. Шаардлагатай талбаруудыг тэмдэглэсэн *