PythonでPCIeアクセスCM4MB2023.08.23CM4MBではPCIe経由でFPGAにアクセスするためのオープンソースのサンプル制御アプリを提供しています。このアプリはC言語で作成し、FPGAのレジスタアクセスとメモリアクセスができます。Python環境では、外部プログラムとして実行できます。レジスタ・アクセスの場合import subprocess#FPGAに配置したGPIOのベースアドレスを指定。#回路構成により異なるので、回路に合わせて設定します。base_addr = “-a40000000”#レジスタのビット長を指定します。l8 = “-l8”l16 = “-l16”l32 = “-l32”l64 = “-l64”#WR/RDの指示をします。RDの場合はrdだけ、WRの場合はwの後にhexで値を指定します。wd = “-w5A”rd = “-r”# 外部プログラム”PSIAXIReg” を実行result = subprocess.run([“./PSIAXIReg“, base_addr, l8, wd],capture_output=True, text=True)#PSIAXIRegが出力する結果を表示します。不要なら記述不要です。output = result.stdout.strip()print(output)メモリ・アクセスの場合import subprocess#FPGAに配置したBRAMのベースアドレスを指定。#FPGA回路構成により異なるので、回路に合わせて設定します。base_addr = “-a0”#書き込みたい/読み出したい ファイルのパスを指定するpath = “-f./pywrite.bin”#データ転送量を指定する#書き込むなら -wxxx, 読み出すなら -ryyy#以下の例は0x8000(32KB)を読み出す場合data = “-r8000”# 外部プログラム”PSIAXIMem”を実行result = subprocess.run([“./PSIAXIMem“, path, base_addr, data], capture_output=True, text=True)#PSIAXIMemが出力する結果を表示します。不要なら記述不要です。output = result.stdout.strip()print(output)