!PYNQ いろいろ sshやシリアルコンソールで接続したPYNQ環境でFPGAのコンフィギュレーションをしたかったので, source /usr/local/share/pynq-venv/bin/activate export BOARD=ZCU111 export XILINX_XRT=/usr としてPythonで, from pynq import Overlay overlay = Overlay("base.bit") と,するなど. また,PLに接続されたDRAMにアクセスしたかったので, /dts-v1/; /plugin/; / { /*reserved memory*/ fragment@4 { target-path = "/"; overlay4: __overlay__ { reserved-memory { ranges; reserved { reg = <0x04 0x00 0x01 0x00>; }; }; }; }; }; というdram.dtsoを用意して, xilinx@pynq:~$ dtc -I dts -O dtb -o dram.dtbo dram.dtso -q root@pynq:/home/xilinx# sudo -s root@pynq:/home/xilinx# mkdir /sys/kernel/config/device-tree/overlays/dram root@pynq:/home/xilinx# ls /sys/kernel/config/device-tree/overlays/dram dtbo path status root@pynq:/home/xilinx# cat /sys/kernel/config/device-tree/overlays/dram/status unapplied root@pynq:/home/xilinx# cat dram.dtbo > /sys/kernel/config/device-tree/overlays/dram/dtbo root@pynq:/home/xilinx# cat /sys/kernel/config/device-tree/overlays/dram/status applied とか. dtsoファイルの reg = <0x04 0x00 0x01 0x00>; は,0x4_0000_0000から0x1_0000_0000を対象にすることを意味している. これで,Cからなら int mem; if((mem = open("/dev/mem", O_RDWR)) < 0) { perror("open"); return EXIT_FAILURE; } volatile unsigned int *dram; dram = (volatile unsigned int *)mmap(NULL, 0x100000000llu, PROT_READ | PROT_WRITE, MAP_SHARED, mem, 0x400000000llu); としてアクセスしたり,Pythonで, buffer = pynq.allocate((2**19,), dtype='u4', target=ol.ddr4_0) buffer[0:10] # 読む buffer[0:10] = [0xcafe0000 + i for i in range(10)] # 書く buffer.flush() # フラッシュ buffer.freebuffer() # 解放 とかして,アクセスできる. 参考: * https://discuss.pynq.io/t/pynq3-0-1-allocate-ddr4-returns-buffer-outside-of-address-range/4918/7