Найти в Дзене
Andrew Kobelev

Работа с регистрами ZYNQ используя Python

Оглавление

9 мигающих светодиодов!

Linux предоставляет доступ к адресам физической памяти через /dev / mem. Это символьное устройство, младшие 512 МБ которого представляют собой физическую оперативную память DDR, присутствующую на плате. Доступ к периферийным устройствам осуществляется через диапазоны памяти, предопределенные в потоке битов, с использованием ввода-вывода с отображением памяти. Проект Vivado базовой системы ZYBO содержит следующие настройки:

Чтобы мигать светодиодами на плате, вы можете просто взять адрес смещения LEDs_4bits из редактора адресов и с помощью mmap() записать и прочитать этот диапазон памяти, как если бы это был обычный массив, используя следующий фрагмент Python.

from time import sleep
import mmap

with open("/dev/mem", "r+b") as f:
mm = mmap.mmap(f.fileno(), 4, offset=0x41210000)
while True:
try:
mm[0] = chr(0xff)
sleep(0.2)
mm[0] = chr(0x00)

sleep(0.2)
except KeyboardInterrupt:
break
mm.close()

Просто сбросьте содержимое в файл и вызовите с помощью python в командной строке.

Далее можно не читать

В дереве исходных текстов вы найдете base.xdc, который содержит отображение контактов для блока кнопок, блока переключателей, светодиодного блока на борту и других предварительно настроенных портов:

# Button block
set_property PACKAGE_PIN R18 [get_ports {btns_4bits_tri_i[0]}] set_property PACKAGE_PIN P16 [get_ports {btns_4bits_tri_i[1]}] set_property PACKAGE_PIN V16 [get_ports {btns_4bits_tri_i[2]}] set_property PACKAGE_PIN Y16 [get_ports {btns_4bits_tri_i[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {btns_4bits_tri_i[*]}]
# LED block
set_property PACKAGE_PIN M14 [get_ports {leds_4bits_tri_o[0]}] set_property PACKAGE_PIN M15 [get_ports {leds_4bits_tri_o[1]}] set_property PACKAGE_PIN G14 [get_ports {leds_4bits_tri_o[2]}] set_property PACKAGE_PIN D18 [get_ports {leds_4bits_tri_o[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {leds_4bits_tri_o[*]}]
# Switch block
set_property PACKAGE_PIN G15 [get_ports {sws_4bits_tri_i[0]}] set_property PACKAGE_PIN P15 [get_ports {sws_4bits_tri_i[1]}] set_property PACKAGE_PIN W13 [get_ports {sws_4bits_tri_i[2]}] set_property PACKAGE_PIN T16 [get_ports {sws_4bits_tri_i[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {sws_4bits_tri_i[*]}]

Разъемы Pmod на плате по умолчанию не подключены ни к каким портам. В дополнение к подключению порта в блоке высокого уровня необходимо добавить конструктивные ограничения для соответствующих выводов. На широкой стороне ZYBO установлен стандартный разъем Pmod JE, подключаемый через встроенные резисторы 200 Ом, и три высокоскоростных разъема Pmod JD, JC, JB без резисторов 7:

H15J15W16V12Y17T17U17V133.3VGND3.3VGNDR14P14T15T14V18V17U15U143.3VGND3.3VGNDJE (Standard Pmod, 200Ω resistors)JD (Hi-Speed Pmod, no resistors)

Два крайних левых разъема Pmod JE, JD на более широком краю ZYBO

T10T11W15V15U12T12Y14W143.3VGND3.3VGNDJC (Hi-Speed Pmod, no resistors)W20V20U20T20W19W18Y19Y183.3VGND3.3VGNDJB (Hi-Speed Pmod, no resistors)

Два крайних правых разъема Pmod JC, JB на более широком краю ZYBO

Сопоставления контактов для других портов можно найти в справочном руководстве ZYBO 7, и их практически невозможно найти простым поиском в Интернете.

7(1,2)

Справочное руководство по ZYBO