Logo VHDLwhiz

Bộ tạo giao diện kiểm tra VHDLwhiz UART

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Thông tin sản phẩm

Thông số kỹ thuật:

  • Tên sản phẩm: VHDL đăng ký giao diện thử nghiệm UART
  • Phiên bản: 1.0.4
  • Ngày: 18 tháng 2024 năm XNUMX
  • Tác giả: Jonas Julian Jensen
  • Sản phẩm URL: Liên kết sản phẩm
  • Email liên hệ: jonas@vhdlwhiz.com

Sự miêu tả

Sản phẩm này cho phép bạn tạo giao diện tùy chỉnh để đọc và ghi giá trị thanh ghi FPGA bằng UART. Mô-đun VHDL được tạo ra và tập lệnh Python cung cấp khả năng tương tác với nhiều loại thanh ghi khác nhau trong thiết kế FPGA của bạn.

Yêu cầu

  • Trình thông dịch Python 3
  • gói pyserial

Giao thức

Sản phẩm sử dụng giao thức đóng khung dữ liệu với bốn ký tự điều khiển:

  • Tên: YÊU CẦU ĐỌC, Giá trị: 0x0A – Lệnh từ máy chủ đến FPGA để bắt đầu chuỗi ghi nhằm gửi tất cả các thanh ghi trở lại qua UART
  • Tên: BẮT ĐẦU_VIẾT, Giá trị: 0x0B – Đánh dấu sự bắt đầu của một chuỗi ghi theo cả hai hướng
  • Tên: KẾT THÚC_VIẾT, Giá trị: 0x0C – Đánh dấu sự kết thúc của một chuỗi ghi theo bất kỳ hướng nào
  • Tên: BỎ TRỐN, Giá trị: 0x0D – Ký tự thoát được sử dụng để thoát khỏi các từ điều khiển

Hướng dẫn sử dụng sản phẩm

Chạy các tập lệnh

Để sử dụng sản phẩm, hãy đảm bảo bạn đã cài đặt Python 3 và gói Pyserial. Chạy các tập lệnh thông qua trình thông dịch Python 3.

Tạo giao diện tùy chỉnh

Sử dụng tập lệnh gen_uart_regs.py để tạo giao diện tùy chỉnh cho việc đọc và ghi các giá trị thanh ghi FPGA. Bạn có thể chỉ định thành phần của các thanh ghi đầu vào và đầu ra cũng như các loại khi tạo đầu ra files.

Tương tác với các thanh ghi

Bạn có thể đọc hoặc ghi vào bất kỳ số lượng thanh ghi nào trong thiết kế FPGA của mình bằng cách sử dụng mô-đun VHDL được tạo ra và tập lệnh Python. Các thanh ghi có thể truy cập được có thể có các kiểu như std_logic, std_logic_vector, signed hoặc unsigned.

Giấy phép

  • Giấy phép MIT bao gồm các yêu cầu về bản quyền và điều khoản sử dụng của mã nguồn. Tham khảo LICENSE.txt file trong Zip file để biết thêm chi tiết.

Nhật ký thay đổi

  • Những thay đổi này đề cập đến dự án files, và tài liệu này được cập nhật tương ứng
Phiên bảnNhận xét
1.0.0Bản phát hành đầu tiên
1.0.1Đã sửa lỗi tham chiếu «self» bị thiếu khi nhập dưới dạng uart_regs.py dưới dạng mô-đun Python. Đã thay đổi bản in lỗi ghi thành ngoại lệ

tránh in ra bảng điều khiển khi chạy dưới dạng mô-đun được nhập.

1.0.2Bản sửa lỗi cho lỗi Vivado [Synth 8-248] khi không có chế độ đăng ký ngoài.
1.0.3Sửa lỗi cảnh báo Vivado Linter: Đăng ký đã được kích hoạt bởi

thiết lập lại đồng bộ

1.0.4Sửa lỗi corner case khi nhận được một từ không đúng định dạng với ký tự thoát là byte cuối cùng. Từ tiếp theo cũng sẽ bị mất vì chúng ta không xóa recv_data_prev_is_escape khi quay lại IDLE.

Tập lệnh gen_uart_regs.py hiện chỉ cho phép tên reg duy nhất.

Sự miêu tả

  • Tài liệu này mô tả những điều sau đây files và các thư mục:
  • gen_uart_regs.py
  • đã tạo/uart_regs.vhd
  • đã tạo/uart_regs.py
  • được tạo/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/
  • Tập lệnh gen_uart_regs.py và hỗ trợ VHDL files trong dự án này cho phép bạn tạo các giao diện tùy chỉnh để đọc và ghi các giá trị thanh ghi FPGA thuộc nhiều loại và độ rộng khác nhau bằng UART.
  • Bạn có thể sử dụng mô-đun VHDL và tập lệnh Python được tạo để đọc hoặc ghi vào bất kỳ số lượng thanh ghi nào trong thiết kế của bạn. Các thanh ghi có thể truy cập UART có thể có các loại std_logic, std_logic_vector, signature hoặc unsigned.
  • Bạn có thể quyết định thành phần chính xác của các loại và thanh ghi đầu vào và đầu ra khi tạo đầu ra fileđang sử dụng tập lệnh gen_uart_regs.py.
  • Các tập lệnh Python được tạo một phần với sự trợ giúp của công cụ trí tuệ nhân tạo ChatGPT, trong khi mã VHDL được tạo thủ công.

Yêu cầu

  • Các tập lệnh trong dự án này phải được chạy thông qua trình thông dịch Python 3 và phải cài đặt gói Pyserial.
  • Bạn có thể cài đặt pyserial thông qua Pip bằng lệnh này: pip install pyserial

Giao thức

  • VHDL files và tập lệnh Python sử dụng giao thức đóng khung dữ liệu với bốn điều khiển
TênGiá trịBình luận
YÊU CẦU ĐỌC0x0ALệnh từ máy chủ đến FPGA để bắt đầu ghi

trình tự gửi tất cả các thanh ghi trở lại qua UART

START_WRITE0x0BĐánh dấu sự bắt đầu của một chuỗi ghi trong một trong hai

phương hướng

END_WRITE0x0CĐánh dấu sự kết thúc của chuỗi ghi theo một trong hai hướng
BỎ TRỐN0x0DKý tự thoát được sử dụng để thoát bất kỳ từ điều khiển nào, bao gồm cả ký tự ESCAPE, khi chúng xuất hiện dưới dạng dữ liệu giữa các điểm đánh dấu START_WRITE và END_WRITE.

Bất kỳ byte READ_REQ không thoát nào được gửi tới FPGA đều là một lệnh gửi tất cả các thanh ghi (đầu vào và đầu ra) có thể truy cập UART của nó trở lại máy chủ qua UART. Lệnh này thường chỉ được đưa ra bởi tập lệnh uart_regs.py.
Khi nhận được lệnh này, FPGA sẽ phản hồi bằng cách gửi nội dung của tất cả các thanh ghi trở lại máy chủ. Đầu tiên là tín hiệu đầu vào, sau đó là tín hiệu đầu ra. Nếu độ dài của chúng không bằng bội số của 8 bit thì các bit thấp hơn của byte cuối cùng sẽ được đệm bằng số XNUMX.
Một chuỗi ghi luôn bắt đầu bằng byte START_WRITE và kết thúc bằng byte END_WRITE. Bất kỳ byte nào giữa các byte đó đều được coi là byte dữ liệu. Nếu bất kỳ byte dữ liệu nào có cùng giá trị với ký tự điều khiển, byte dữ liệu phải được thoát. Điều này có nghĩa là gửi một ký tự ESCAPE bổ sung trước byte dữ liệu để chỉ ra rằng đó thực sự là dữ liệu.
Nếu một START_WRITE không thoát được xuất hiện ở bất kỳ vị trí nào trong luồng byte, thì đó được coi là sự bắt đầu của một chuỗi ghi. Mô-đun uart_regs_backend sử dụng thông tin này để đồng bộ hóa lại trong trường hợp giao tiếp không đồng bộ.

gen_uart_regs.py

  • Đây là tập lệnh bạn phải bắt đầu để tạo giao diện. Dưới đây là ảnh chụp màn hình của menu trợ giúp mà bạn có thể nhận được bằng cách chạy: python gen_uart_regs.py -hVHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-1
  • Để tạo giao diện tùy chỉnh, bạn phải chạy tập lệnh với từng thanh ghi điều khiển UART mong muốn được liệt kê dưới dạng đối số. Các loại có sẵn là std_logic, std_logic_vector, unsigned và signature.
  • Chế độ mặc định (hướng) được bật và loại mặc định là std_logic_vector trừ khi thanh ghi có độ dài: 1. Sau đó, nó sẽ mặc định là std_logic.
  • Do đó, nếu bạn muốn tạo tín hiệu đầu vào std_logic, bạn có thể sử dụng bất kỳ đối số nào sau đây:
  • của tôi_sl=1
  • my_sl=1:trong
  • my_sl=1:in:std_logic
  • Tất cả các biến thể trên sẽ dẫn đến tập lệnh tạo tín hiệu có thể truy cập UART này:VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-2
  • Hãy chạy tập lệnh với các đối số để tạo giao diện với một số thanh ghi có hướng, độ dài và loại khác nhauVHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-3

Đã tạo ra files

  • Việc chạy thành công tập lệnh gen_uart_regs.py sẽ tạo ra một thư mục đầu ra có tên được tạo bằng ba fileđược liệt kê dưới đây. Nếu chúng đã tồn tại, chúng sẽ bị ghi đè.
  • đã tạo/uart_regs.vhd
  • đã tạo/uart_regs.py
  • được tạo/instantiation_template.vho
  • uart_regs.vhd
  • Đây là mô-đun giao diện tùy chỉnh được tạo bởi tập lệnh. Bạn cần khởi tạo nó trong thiết kế của mình, nơi nó có thể truy cập vào các thanh ghi mà bạn muốn kiểm soát bằng UART.
  • Mọi thứ phía trên phần “– Thanh ghi có thể truy cập UART” sẽ giống hệt nhau đối với mọi mô-đun uart_regs, trong khi thành phần của các tín hiệu cổng bên dưới dòng đó phụ thuộc vào các đối số được cung cấp cho tập lệnh trình tạo.
  • Danh sách bên dưới hiển thị thực thể cho mô-đun uart_regs do lệnh tạo examptập tin được hiển thị trong phần gen_uart_regs.pyVHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-4
  • Bạn không cần phải đồng bộ hóa tín hiệu uart_rx vì tín hiệu đó được xử lý trong tệp uart_rx. mô-đun.
  • Khi mô-đun nhận được yêu cầu đọc, nó sẽ ghi lại các giá trị của tất cả tín hiệu đầu vào và đầu ra trong chu kỳ xung nhịp hiện tại. Ảnh chụp nhanh tức thời sau đó được gửi đến máy chủ qua UART.
  • Khi quá trình ghi xảy ra, tất cả các thanh ghi đầu ra sẽ được cập nhật với các giá trị mới trong cùng một chu kỳ xung nhịp. Không thể thay đổi từng giá trị tín hiệu đầu ra.
  • Tuy nhiên, tập lệnh uart_regs.py cho phép người dùng chỉ cập nhật các đầu ra đã chọn bằng cách đọc lại các giá trị hiện tại của tất cả các thanh ghi trước tiên. Sau đó nó ghi lại tất cả các giá trị, bao gồm cả những giá trị được cập nhật.
  • uart_regs.py
  • Đã tạo/uart_regs.py file được tạo cùng với mô-đun VHDL uart_regs và chứa thông tin đăng ký tùy chỉnh trong tiêu đề của file. Với tập lệnh này, bạn có thể đọc hoặc ghi vào sổ đăng ký tùy chỉnh của mình một cách dễ dàng.

Menu trợ giúp

  • Nhập python uart_regs.py -h để in menu trợ giúp:VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-5

Thiết lập cổng UART

  • Tập lệnh có các tùy chọn để thiết lập cổng UART bằng cách sử dụng công tắc -c. Điều này hoạt động trên Windows và Linux. Đặt nó thành một trong các cổng khả dụng được liệt kê trong menu trợ giúp. Để thiết lập cổng mặc định, bạn cũng có thể chỉnh sửa biến UART_PORT trong tập lệnh uart_regs.py.

Sổ đăng ký niêm yết

  • Thông tin về ánh xạ thanh ghi được đặt trong tiêu đề của tập lệnh uart_regs.py bởi tập lệnh gen_uart_regs.py. Bạn có thể liệt kê các thanh ghi khả dụng bằng công tắc -l, như được thấy bên dưới. Đây là lệnh cục bộ và sẽ không tương tác với FPGA mục tiêuVHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-6

Viết vào sổ đăng ký

  • Bạn có thể ghi vào bất kỳ thanh ghi chế độ ngoài nào bằng cách sử dụng khóa chuyển -w. Cung cấp tên đăng ký theo sau là “=” và giá trị được cung cấp dưới dạng giá trị nhị phân, thập lục phân hoặc thập phân, như hiển thị bên dưới.VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-7
  • Lưu ý rằng việc triển khai VHDL yêu cầu tập lệnh phải ghi tất cả các thanh ghi đầu ra cùng một lúc. Do đó, nếu bạn không chỉ định một bộ thanh ghi đầu ra đầy đủ, tập lệnh sẽ thực hiện đọc từ FPGA mục tiêu trước rồi sử dụng các giá trị đó cho các giá trị còn thiếu. Kết quả sẽ là chỉ các thanh ghi được chỉ định thay đổi
  • Khi bạn thực hiện ghi, tất cả các thanh ghi được chỉ định sẽ thay đổi trong cùng một chu kỳ xung nhịp chứ không phải ngay khi chúng được nhận qua UART.

Đọc sổ đăng ký

  • Sử dụng khóa chuyển -r để đọc tất cả các giá trị thanh ghi, như hiển thị bên dưới. Các giá trị được đánh dấu màu vàng là những giá trị chúng tôi đã thay đổi trong lần ghi trước đó.ampleVHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-8
  • Mỗi lần đọc sẽ hiển thị ảnh chụp nhanh tức thời của tất cả các thanh ghi đầu vào và đầu ra. Họ đều là sampdẫn trong cùng một chu kỳ xung nhịp

Gỡ lỗi

Sử dụng khóa chuyển -d với bất kỳ khóa chuyển nào khác nếu bạn cần gỡ lỗi giao thức truyền thông. Sau đó, tập lệnh sẽ in ra tất cả các byte đã gửi và nhận và tag chúng nếu chúng là ký tự điều khiển, như minh họa bên dưới.VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-9

Sử dụng giao diện trong các tập lệnh Python khác

  • Tập lệnh uart_regs.py chứa lớp UartRegs mà bạn có thể dễ dàng sử dụng làm giao diện giao tiếp trong các tập lệnh Python tùy chỉnh khác. Chỉ cần nhập lớp, tạo đối tượng của nó và bắt đầu sử dụng các phương thức, như hiển thị bên dưới.VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-10
  • Tham khảo các chuỗi tài liệu trong mã Python để biết phương thức, mô tả và kiểu giá trị trả về.

instantiation_template.vho

  • Mẫu khởi tạo được tạo cùng với mô-đun uart_regs để thuận tiện cho bạn. Để tiết kiệm thời gian mã hóa, bạn có thể sao chép phần khai báo tín hiệu và khởi tạo mô-đun vào thiết kế của mình.VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-11VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-12

RTL tĩnh files

  • Bạn cần phải bao gồm những điều sau đây files trong dự án VHDL của bạn để chúng được biên dịch vào cùng thư viện với mô-đun uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Mô-đun uart_regs_backend triển khai các máy ở trạng thái hữu hạn đồng hồ vào và ra dữ liệu đăng ký. Nó sử dụng các mô-đun uart_rx và uart_tx để xử lý giao tiếp UART với máy chủ.

Dự án demo

  • Có ba dự án demo được bao gồm trong Zip file. Chúng cho phép bạn điều khiển các thiết bị ngoại vi trên các bo mạch khác nhau cũng như một số thanh ghi nội bộ lớn hơn.
  • Các thư mục demo bao gồm uart_regs.vhd và uart_regs.py được tạo trước fileđược làm riêng cho những thiết kế đó.

Lưới iCEstick

  • Thư mục demo/icecube2_icestick chứa triển khai demo truy cập đăng ký cho bo mạch Lattice iCEstick FPGA.
  • Để thực hiện quá trình triển khai, hãy mở demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file trong phần mềm thiết kế Lattice iCEcube2.
  • Sau khi tải dự án trong GUI iCEcube2, nhấp vào Công cụ → Chạy tất cả để tạo bitmap lập trình file.
  • Bạn có thể sử dụng công cụ Độc lập của Lập trình viên Kim cương Lattice để định cấu hình FPGA với bitmap được tạo file. Khi Diamond Lập trình viên mở ra, hãy nhấp vào Mở dự án lập trình viên hiện có trong hộp thoại chào mừng.
  • Chọn dự án file được tìm thấy trong Zip: demo/lattice_icestick/diamond_programmer_project.xcf và nhấp vào OK.VHDLwhiz-UART-Kiểm tra-Giao diện-Máy phát-HÌNH-13
  • Sau khi tải dự án, nhấp vào ba dấu chấm trong File Cột tên, như được hiển thị ở trên. Duyệt để chọn bitmap file mà bạn đã tạo ra trong iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Cuối cùng, với bo mạch iCEstick được cắm vào cổng USB trên máy tính của bạn, chọn Thiết kế → Chương trình để lập trình flash SPI và định cấu hình FPGA.
  • Bây giờ bạn có thể tiếp tục đọc và ghi sổ đăng ký bằng cách sử dụng tập lệnh demo/lattice_icestick/uart_regs.py như được mô tả trong phần uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Bạn có thể tìm thấy bản triển khai demo cho bộ đánh giá Artix-7 35T Arty FPGA trong thư mục demo/arty_a7_35.
  • Mở Vivado và điều hướng đến giải nén files sử dụng bảng điều khiển Tcl được tìm thấy ở cuối giao diện GUI. Nhập lệnh này để vào thư mục dự án demo:
  • đĩa CD /demo/arty_a7_35/vivado_proj/
  • Thực thi tập lệnh Tcl create_vivado_proj.tcl để tạo lại dự án Vivado:
  • nguồn ./create_vivado_proj.tcl
  • Nhấp vào Tạo dòng bit trong thanh bên để thực hiện tất cả các bước triển khai và tạo dòng bit lập trình file.
  • Cuối cùng, nhấp vào Mở Trình quản lý phần cứng và lập trình FPGA thông qua GUI.
  • Bây giờ bạn có thể tiến hành đọc và ghi các thanh ghi bằng cách sử dụng tập lệnh demo/arty_a7_35/uart_regs.py như được mô tả trong phần uart_regs.py.

Xilinx Digilent Arty S7-50

  • Bạn có thể tìm thấy bản triển khai demo cho bo mạch phát triển Arty S7: Spartan-7 FPGA trong thư mục demo/arty_s7_50.
  • Mở Vivado và điều hướng đến giải nén files sử dụng bảng điều khiển Tcl được tìm thấy ở cuối giao diện GUI. Nhập lệnh này để vào thư mục dự án demo:
  • đĩa CD /demo/arty_s7_50/vivado_proj/
  • Thực thi tập lệnh Tcl create_vivado_proj.tcl để tạo lại dự án Vivado:
  • nguồn ./create_vivado_proj.tcl
  • Nhấp vào Tạo dòng bit trong thanh bên để thực hiện tất cả các bước triển khai và tạo dòng bit lập trình file.
  • Cuối cùng, nhấp vào Mở Trình quản lý phần cứng và lập trình FPGA thông qua GUI.
  • Bây giờ bạn có thể tiến hành đọc và ghi các thanh ghi bằng cách sử dụng tập lệnh demo/arty_s7_50/uart_regs.py như được mô tả trong phần uart_regs.py.

Thực hiện

  • Không có yêu cầu thực hiện cụ thể.

Hạn chế

  • Không cần có ràng buộc về thời gian cụ thể nào cho thiết kế này vì giao diện UART chậm và được coi là giao diện không đồng bộ.
  • Đầu vào uart_rx cho mô-đun uart_regs được đồng bộ hóa trong mô-đun uart_rx. Vì vậy, nó không cần phải được đồng bộ hóa trong mô-đun cấp cao nhất.

Các vấn đề đã biết

  • Bạn có thể cần phải đặt lại mô-đun trước khi sử dụng nó, tùy thuộc vào việc kiến ​​trúc FPGA của bạn có hỗ trợ các giá trị thanh ghi mặc định hay không.

Thông tin thêm

Câu hỏi thường gặp

H: Mục đích của bộ tạo giao diện thử nghiệm UART là gì?

A: Bộ tạo giao diện thử nghiệm UART cho phép tạo các giao diện tùy chỉnh để tương tác với các giá trị thanh ghi FPGA bằng cách sử dụng giao tiếp UART.

H: Làm thế nào để cài đặt gói Pyserial?

A: Bạn có thể cài đặt Pyserial thông qua Pip bằng lệnh: pip install pyserial

Tài liệu / Tài nguyên

Bộ tạo giao diện kiểm tra VHDLwhiz UART [tập tin pdf] Hướng dẫn sử dụng
Bộ tạo giao diện kiểm tra UART, Bộ tạo giao diện kiểm tra, Bộ tạo giao diện, Bộ tạo

Tài liệu tham khảo

Để lại bình luận

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *