2013-05-04 304 views
0

我的目標是讀取使用python腳本在FPGA上一些寄存器。 我已經實現一些寄存器的硬件(FPGA),我想讀的registers.There在C一些程序,其能夠讀取寄存器。但我必須在Python中編寫讀/寫程序,以便可以將它與我的驗證環境(用python編寫)集成。我是python新手(初學者級別),所以我希望你能指導我通過你的建議和意見。以下是我實施的代碼。寄存器讀取

這是我的代碼。

#!/usr/bin/env python 


import array 
import fcntl 
import re 
import socket 
import struct 
import os 

#connectedSockets = {} 

# IOCTL Commands 
SIOCREGREAD = 0x89F0 
SIOCREGWRITE = 0x89F1 

reg = 0x58000008 

# open the NF descriptor 
# Open a file 
nf = os.open("/dev/nf10", os.O_RDWR) 
print "Opened NF descriptor" 

# Now get a file object for the above file. 
nf0 = os.fdopen(nf, "w+") 

#print "opened nf0 file object" 
inner_struct = struct.pack("II", reg, 0x0) 
inner_struct_pinned = array.array('c', inner_struct) 
print inner_struct_pinned 
fcntl.ioctl(nf0, SIOCREGREAD,) 
retval = struct.unpack("II", inner_struct_pinned)[0] 
print retval 

os.fdclose(nf) 
+0

請問你的代碼的工作?你沒有真正說出問題所在。 – 2013-05-04 11:26:43

回答

1

您將無法在純Python中做到這一點。如果你有C代碼已經在共享庫文件(.dll在Windows中,。所以在Linux中),那麼您可以使用ctypes的模塊來訪問它。如果沒有,你將不得不將這些C代碼包裝在共享庫或Python擴展模塊中(C端更復雜,Python端更簡單)。

對於這種事情的一些很好的例子,我推薦O'Reilly的書"Real World Instrumentation with Python",由J.M.休斯。

+0

非常感謝李。我感謝你的幫助。我會嘗試ctypes .. – user2349460 2013-05-04 12:00:52

+0

我刪除第一個鏈接的原因是,它是一個網站託管盜版電子書。我們不允許在這裏,所以我已經指出O'Reilly爲本書提供的實際網站。 – 2013-07-13 22:32:25

+0

對我來說看起來很合理,但我會爲此付諸流水。 – 2013-07-13 22:54:14