PythonでPCIeアクセス

CM4MBでは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)